<?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>6041</bug_id>
          
          <creation_ts>2005-12-11 03:23:13 -0800</creation_ts>
          <short_desc>Support property getters and setters</short_desc>
          <delta_ts>2006-01-12 20:35:21 -0800</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>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>6519</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>25802</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2005-12-11 03:23:13 -0800</bug_when>
    <thetext>Property getters and setters is a Firefox extension. It&apos;s described at http://developer.mozilla.org/en/docs/
Core_JavaScript_1.5_Guide:Working_with_Objects#Defining_Getters_and_Setters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25804</commentid>
    <comment_count>1</comment_count>
      <attachid>5027</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2005-12-11 04:17:54 -0800</bug_when>
    <thetext>Created attachment 5027
Implement getters and setters

Note that this does not implement the old deprecated way of defining getters
and setters (which unfortunately is used in the jsc test suite)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25805</commentid>
    <comment_count>2</comment_count>
      <attachid>5027</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2005-12-11 04:22:27 -0800</bug_when>
    <thetext>Comment on attachment 5027
Implement getters and setters

Ah, some tests actually use __defineGetter__ and __defineSetter__ but still
fail, I&apos;ll investigate why</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25813</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-11 08:42:37 -0800</bug_when>
    <thetext>+    if (params)
+        func = new FuncExprNode(Identifier::null(), params, body);
+    else
+        func = new FuncExprNode(Identifier::null(), body);

This code seemed a little bizarre to me at first read. Since params is an optional argument, why isn&apos;t it 
the last argument?

I&apos;ve attached a manual patch to show you what I mean. (CVS is down for me right now.) It has the added 
advantage of collapsing the above lines to one:

     func = new FuncExprNode(Identifier::null(), body, params);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25814</commentid>
    <comment_count>4</comment_count>
      <attachid>5034</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-11 08:43:48 -0800</bug_when>
    <thetext>Created attachment 5034
Make params an optional, last argument</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25815</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-11 08:53:10 -0800</bug_when>
    <thetext>+JSValue *GetterSetterImp::toPrimitive(ExecState *, Type) const
+{
+    assert(false);
+    return 0;
+}

+JSObject *GetterSetterImp::toObject(ExecState *exec) const
+{
+    assert(false);
+    return 0;
+}

JavaScriptCore is not tolerant of null pointers, so these return values for deployment builds will almost 
certainly cause a crash if they&apos;re ever hit.

I would suggest
     return jsNull().toPrimitive(exec);
and
     return jsNull().toObject(exec);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25818</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-11 08:55:54 -0800</bug_when>
    <thetext>Same comment here:
+JSValue *PropertyNode::evaluate(ExecState *exec)
+{
+  assert(false);
+  return 0;
+}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25878</commentid>
    <comment_count>7</comment_count>
      <attachid>5055</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2005-12-12 15:08:22 -0800</bug_when>
    <thetext>Created attachment 5055
Address comments

Here&apos;s a new patch that addresses the comments made, and also passes
getset-00[456].js in the mozilla test suite.

I had to do some changes to PropertySlot which makes the patch big, but Maciej
thought it was the right approach (and so do I)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25908</commentid>
    <comment_count>8</comment_count>
      <attachid>5055</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-13 08:20:39 -0800</bug_when>
    <thetext>Comment on attachment 5055
Address comments

In PropertyListNode::evaluate, defineGetter and defineSetter are called on the
value from the assign node without checking that it&apos;s a JSObject. That&apos;s
dangerous and could crash if the thing is not an object. The code needs a check
if it&apos;s an object somewhere rather than just calling JSObject member functions
on a JSValue.

I notice this line in the parser is no longer lined up with the code above it:

+  | &apos;{&apos; PropertyList &apos;}&apos;    { $$ = new ObjectLiteralNode($2); }

I know that Geoff suggested returning jsNull()-&gt;toPrimitive(exec, type), but
that&apos;s exactly the same as jsNull(), so there&apos;s no reason to include the extra
function call. I also think that the logical equivalent of assert(false) is to
call throwError so we get a JavaScript exception in those cases. But since
these values should never get out of properties into expressions, there&apos;s very
little reason to worry about exactly what code is there after the assertion,
never to be executed.

Is PropertyNode::streamTo really all that hard to write for getter and setter?

I like to see member functions that are virtual re-declared as virtual, so I&apos;d
like to see that in GetterSetterImp&apos;s declaration.

The PropertyListNode::evaluate seems to be a serious one, so marking review-,
otherwise I&apos;d say review+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25917</commentid>
    <comment_count>9</comment_count>
      <attachid>5066</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2005-12-13 12:29:50 -0800</bug_when>
    <thetext>Created attachment 5066
Address more comments

(In reply to comment #8)
&gt; (From update of attachment 5055 [edit])
&gt; In PropertyListNode::evaluate, defineGetter and defineSetter are called on
the
&gt; value from the assign node without checking that it&apos;s a JSObject. That&apos;s
&gt; dangerous and could crash if the thing is not an object. The code needs a
check
&gt; if it&apos;s an object somewhere rather than just calling JSObject member
functions
&gt; on a JSValue.
&gt; 
The reason I skipped this check is that we know that the node to be evaluated
always is a FuncExprNode which will always be evaluated to a JSObject. Anyway,
I&apos;ve added an isObject check for both the getter and setter.

&gt; I notice this line in the parser is no longer lined up with the code above
it:
&gt; 
&gt; +  | &apos;{&apos; PropertyList &apos;}&apos;    { $$ = new ObjectLiteralNode($2); }
&gt; 
&gt; I know that Geoff suggested returning jsNull()-&gt;toPrimitive(exec, type), but
&gt; that&apos;s exactly the same as jsNull(), so there&apos;s no reason to include the
extra
&gt; function call. I also think that the logical equivalent of assert(false) is
to
&gt; call throwError so we get a JavaScript exception in those cases. But since
&gt; these values should never get out of properties into expressions, there&apos;s
very
&gt; little reason to worry about exactly what code is there after the assertion,
&gt; never to be executed.
&gt; 
Both of these have been fixed.

&gt; Is PropertyNode::streamTo really all that hard to write for getter and
setter?

It&apos;s not hard to write, but the end result will look ugly because there will be
newlines everywhere. I added an implementation for this that will generate
ugly, yet syntactically correct, text.
&gt; 
&gt; I like to see member functions that are virtual re-declared as virtual, so
I&apos;d
&gt; like to see that in GetterSetterImp&apos;s declaration.
&gt; 
Fixed.

&gt; The PropertyListNode::evaluate seems to be a serious one, so marking review-,

&gt; otherwise I&apos;d say review+. 
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25918</commentid>
    <comment_count>10</comment_count>
      <attachid>5066</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2005-12-13 12:32:16 -0800</bug_when>
    <thetext>Comment on attachment 5066
Address more comments

I noticed that the JSC ChangeLog is messed up; I&apos;ve fixed that in my local
copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25919</commentid>
    <comment_count>11</comment_count>
      <attachid>5066</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-13 13:18:47 -0800</bug_when>
    <thetext>Comment on attachment 5066
Address more comments

As far as PropertyListNode::evaluate is concerned -- if we really do know the
value is an object, then it can be an assert rather than an if.

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5027</attachid>
            <date>2005-12-11 04:17:54 -0800</date>
            <delta_ts>2005-12-12 15:08:22 -0800</delta_ts>
            <desc>Implement getters and setters</desc>
            <filename>jscore-getters-setters.diff</filename>
            <type>text/plain</type>
            <size>35921</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg5
OApkaWZmIC1wIC11IC1yMS44OTggSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCi0tLSBKYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJMTEgRGVjIDIwMDUgMDI6MDU6MjkgLTAwMDAJMS44OTgKKysrIEph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkxMSBEZWMgMjAwNSAxMTo1NDoyMyAtMDAwMApAQCAtMSwz
ICsxLDEyMSBAQAorMjAwNS0xMi0xMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAbWFjLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEZp
eGVzIDxodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDE+
CisgICAgICAgIAorICAgICAgICAqIGtqcy9jb2xsZWN0b3IuY3BwOgorICAgICAgICAoS0pTOjpj
bGFzc05hbWUpOgorICAgICAgICBIYW5kbGUgR2V0dGVyU2V0dGVyVHlwZS4KKyAgICAgICAgCisg
ICAgICAgICoga2pzL2dyYW1tYXIueToKKyAgICAgICAgUmV3b3JrIGdyYW1tYXIgcGFydHMgZm9y
IGdldCBzZXQgZGVjbGFyYXRpb25zIGRpcmVjdGx5CisgICAgICAgIGluIHRoZSBvYmplY3QgbGl0
ZXJhbC4KKworICAgICAgICAqIGtqcy9pbnRlcm5hbC5jcHA6CisgICAgICAgIChLSlM6OkdldHRl
clNldHRlckltcDo6bWFyayk6CisgICAgICAgIEFkZCBtYXJrIHdoaWNoIG1hcmtzIHRoZSBzZXR0
ZXIgYW5kIGdldHRlciBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAoS0pTOjpHZXR0ZXJT
ZXR0ZXJJbXA6OnRvUHJpbWl0aXZlKToKKyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1wOjp0
b0Jvb2xlYW4pOgorICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6OnRvTnVtYmVyKToKKyAg
ICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1wOjp0b1N0cmluZyk6CisgICAgICAgIChLSlM6Okdl
dHRlclNldHRlckltcDo6dG9PYmplY3QpOgorICAgICAgICBBZGQgdHlwZSBjb252ZXJzaW9uIGZ1
bmN0aW9ucy4gVGhlc2UgYXJlbid0IG1lYW50IHRvIGJlIGNhbGxlZC4KKyAgICAgICAgCisgICAg
ICAgIChLSlM6OnByaW50SW5mbyk6CisgICAgICAgIEhhbmRsZSBHZXR0ZXJTZXR0ZXJUeXBlLgor
ICAgICAgICAKKyAgICAgICAgUmVmYWN0b3IgdGhleSB3YXkgcHJvcGVydGllcyBub2RlcyBhcmUg
aW1wbGVtZW50ZWQuCisgICAgICAgIFdlIG5vdyBoYXZlIGEgUHJvcGVydHlMaXN0Tm9kZSB3aGlj
aCBpcyBhIGxpc3Qgb2YgUHJvcGVydHlOb2Rlcy4KKyAgICAgICAgRWFjaCBQcm9wZXJ0eU5vZGUg
aGFzIGEgbmFtZSAod2hpY2ggaXMgYSBQcm9wZXJ0eU5hbWVOb2RlKSBhbmQgYW4gYXNzb2NpYXRl
ZAorICAgICAgICB2YWx1ZSBub2RlLiBQcm9wZXJ0eU5vZGVzIGNhbiBiZSBvZiBkaWZmZXJlbnQg
dHlwZXMuIFRoZSBDb25zdGFudCB0eXBlIGlzIHRoZQorICAgICAgICBvbGQgY29uc3RhbnQgZGVj
bGFyYXRpb24gYW5kIHRoZSBHZXR0ZXIgYW5kIFNldHRlciB0eXBlcyBhcmUgZm9yIHByb3BlcnR5
IGdldHRlcnMKKyAgICAgICAgYW5kIHNldHRlcnMuCisgICAgICAgICoga2pzL25vZGVzLmNwcDoK
KyAgICAgICAgKFByb3BlcnR5TGlzdE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgR28gdGhyb3Vn
aCBhbGwgcHJvcGVydHkgbm9kZXMgYW5kIHNldCB0aGVtIG9uIHRoZSBuZXdseSBjcmVhdGVkIG9i
amVjdC4gSWYgdGhlCisgICAgICAgIHByb3BlcnR5IG5vZGVzIGFyZSBvZiB0eXBlIEdldHRlciBv
ciBTZXR0ZXIsIGRlZmluZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzLiBPdGhlcndpc2UsCisgICAgICAg
IGp1c3QgYWRkIHRoZSBwcm9wZXJ0aWVzIGxpa2UgYmVmb3JlLgorICAgICAgICAKKyAgICAgICAg
KFByb3BlcnR5Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICBUaGlzIHNob3VsZCBuZXZlciBiZSBj
YWxsZWQgZGlyZWN0bHkuCisgICAgICAgIAorICAgICAgICAoUHJvcGVydHlOYW1lTm9kZTo6ZXZh
bHVhdGUpOgorICAgICAgICBSZW5hbWUgZnJvbSBQcm9wZXJ0eU5vZGU6OmV2YWx1YXRlLgorICAg
ICAgICAKKyAgICAgICAgKiBranMvbm9kZXMuaDoKKyAgICAgICAgKEtKUzo6UHJvcGVydHlOYW1l
Tm9kZTo6UHJvcGVydHlOYW1lTm9kZSk6CisgICAgICAgIFJlbmFtZSBmcm9tIFByb3BlcnR5Tm9k
ZS4KKyAgICAgICAgCisgICAgICAgIChLSlM6OlByb3BlcnR5Tm9kZTo6KToKKyAgICAgICAgKEtK
Uzo6UHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUpOgorICAgICAgICBOZXcgY2xhc3MsIHJlcHJl
c2VudGluZyBhIHNpbmdsZSBwcm9wZXJ0eS4KKyAgICAgICAgCisgICAgICAgIChLSlM6OlByb3Bl
cnR5TGlzdE5vZGU6OlByb3BlcnR5TGlzdE5vZGUpOgorICAgICAgICBUaGlzIHVzZWQgdG8gYmUg
UHJvcGVydHlWYWx1ZU5vZGUuCisgICAgICAgIAorICAgICAgICAoS0pTOjpPYmplY3RMaXRlcmFs
Tm9kZTo6T2JqZWN0TGl0ZXJhbE5vZGUpOgorICAgICAgICBVc2UgYSBQcm9wZXJ0eUxpc3ROb2Rl
IGhlcmUgbm93LgorICAgICAgICAKKyAgICAgICAgKiBranMvbm9kZXMyc3RyaW5nLmNwcDoKKyAg
ICAgICAgKFByb3BlcnR5TGlzdE5vZGU6OnN0cmVhbVRvKToKKyAgICAgICAgQ2FsbCBkb3duIHRv
IGFsbCBwcm9wZXJ0eSBub2Rlcy4KKyAgICAgICAgCisgICAgICAgIChQcm9wZXJ0eU5vZGU6OnN0
cmVhbVRvKToKKyAgICAgICAgUHJpbnQgb3V0IHRoZSBuYW1lIGFuZCB2YWx1ZS4gRG9lc24ndCBo
YW5kbGUgZ2V0dGVycyBhbmQgc2V0dGVycyBjdXJyZW50bHkuCisgICAgICAgIAorICAgICAgICAo
UHJvcGVydHlOYW1lTm9kZTo6c3RyZWFtVG8pOgorICAgICAgICBSZW5hbWUgZnJvbSBQcm9wZXJ0
eU5vZGU6OnN0cmVhbVRvLgorICAgICAgICAKKyAgICAgICAgKiBranMvb2JqZWN0LmNwcDoKKyAg
ICAgICAgKEtKUzo6SlNPYmplY3Q6OnB1dCk6CisgICAgICAgIElmIHRoZSBwcm9wZXJ0eSBhbHJl
YWR5IGV4aXN0cyBhbmQgaGFzIGEgU2V0dGVyLCBpbnZva2UKKyAgICAgICAgdGhlIHNldHRlciBm
dW5jdGlvbiBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIHByb3BlcnR5IGRpcmVjdGx5LgorICAgICAg
ICAKKyAgICAgICAgKEtKUzo6SlNPYmplY3Q6OmRlZmluZUdldHRlcik6CisgICAgICAgIChLSlM6
OkpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIpOgorICAgICAgICBEZWNsYXJlIG5ldyBmdW5jdGlvbnMu
CisgICAgICAgIAorICAgICAgICAqIGtqcy9vYmplY3QuaDoKKyAgICAgICAgKEtKUzo6R2V0dGVy
U2V0dGVySW1wOjp0eXBlKToKKyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1wOjpHZXR0ZXJT
ZXR0ZXJJbXApOgorICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6OmdldEdldHRlcik6Cisg
ICAgICAgIChLSlM6OkdldHRlclNldHRlckltcDo6c2V0R2V0dGVyKToKKyAgICAgICAgKEtKUzo6
R2V0dGVyU2V0dGVySW1wOjpnZXRTZXR0ZXIpOgorICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJ
bXA6OnNldFNldHRlcik6CisgICAgICAgIE5ldyBjbGFzcyBmb3IgcHJvcGVydGllcyB3aGljaCBo
YXZlIGdldHRlcnMgYW5kIHNldHRlcnMgZGVmaW5lZC4gCisgICAgICAgIFRoaXMgY2xhc3MgaXMg
b25seSB1c2VkIGludGVybmFsbHkgYW5kIHNob3VsZCBuZXZlciBiZSBzZWVuIGZyb20gdGhlIG91
dHNpZGUuCisgICAgICAgIAorICAgICAgICAoS0pTOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KToKKyAgICAgICAgSWYgdGhlIHByb3BlcnR5IGlzIGEgZ2V0dGVyLCBjYWxsIHNldEdldHRl
clNsb3Qgb24gdGhlIHByb3BlcnR5IHNsb3QuCisgICAgICAgIAorICAgICAgICAqIGtqcy9vYmpl
Y3Rfb2JqZWN0LmNwcDoKKyAgICAgICAgKE9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBl
KToKKyAgICAgICAgQWRkIF9fZGVmaW5lR2V0dGVyX18sIF9fZGVmaW5lU2V0dGVyLCBfX2xvb2t1
cEdldHRlcl9fLCBfX2xvb2t1cFNldHRlcl9fCisgICAgICAgIHRvIHByb3RvdHlwZS4KKyAgICAg
ICAgCisgICAgICAgIChPYmplY3RQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAg
SW1wbGVtZW50IGhhbmRsZXJzIGZvciBuZXcgZnVuY3Rpb25zLgorICAgICAgICAKKyAgICAgICAg
KiBranMvb2JqZWN0X29iamVjdC5oOgorICAgICAgICAoS0pTOjpPYmplY3RQcm90b0Z1bmM6Oik6
CisgICAgICAgIEFkZCBpZHMgZm9yIG5ldyBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAq
IGtqcy9wcm9wZXJ0eV9zbG90LmNwcDoKKyAgICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpmdW5j
dGlvbkdldHRlcik6CisgICAgICAgIENhbGwgdGhlIGZ1bmN0aW9uIGdldHRlciBvYmplY3QgYW5k
IHJldHVybiBpdHMgdmFsdWUuCisgICAgICAgIAorICAgICAgICAqIGtqcy9wcm9wZXJ0eV9zbG90
Lmg6CisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6c2V0R2V0dGVyU2xvdCk6CisgICAgICAg
IChLSlM6OlByb3BlcnR5U2xvdDo6KToKKyAgICAgICAgTmV3IGZ1bmN0aW9uIHdoaWNoIHNldHMg
YSBnZXR0ZXIgc2xvdC4gV2hlbiBnZXRWYWx1ZSBpcyBjYWxsZWQgb24gYSAKKyAgICAgICAgZ2V0
dGVyIHNsb3QsIHRoZSBnZXR0ZXIgZnVuY3Rpb24gb2JqZWN0IGlzIGludm9rZWQuCisgICAgICAg
IAorICAgICAgICAqIGtqcy92YWx1ZS5oOgorICAgICAgICAoS0pTOjopOgorICAgICAgICBBZGQg
R2V0dGVyU2V0dGVyVHlwZSBhbmQgbWFrZSBHZXR0ZXJTZXR0ZXJJbXAgYSBmcmllbmQgY2xhc3Mg
b2YgSlNDZWxsLgorICAgICAgICAKIDIwMDUtMTItMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IE1hY2llai4KSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9KYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41MwpkaWZmIC1wIC11IC1yMS41MyBKYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9yLmNwcAot
LS0gSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAJMTEgRGVjIDIwMDUgMDI6MDU6NDIg
LTAwMDAJMS41MworKysgSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAJMTEgRGVjIDIw
MDUgMTE6NTQ6MjQgLTAwMDAKQEAgLTYwMCw2ICs2MDAsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAq
Y2xhc3NOYW1lKEpTQ2VsbCAqdmFsCiAgICAgICBuYW1lID0gaW5mbyA/IGluZm8tPmNsYXNzTmFt
ZSA6ICJPYmplY3QiOwogICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgR2V0dGVyU2V0dGVy
VHlwZToKKyAgICAgIG5hbWUgPSAiZ2V0dGVyc2V0dGVyIjsKKyAgICAgIGJyZWFrOwogICB9CiAg
IHJldHVybiBuYW1lOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueSx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpkaWZmIC1wIC11IC1yMS4zMSBKYXZhU2NyaXB0Q29y
ZS9ranMvZ3JhbW1hci55Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZ3JhbW1hci55CTI4IFNlcCAy
MDA1IDE4OjUxOjEzIC0wMDAwCTEuMzEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkJ
MTEgRGVjIDIwMDUgMTE6NTQ6MjQgLTAwMDAKQEAgLTU0LDYgKzU0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtKUzsKIHN0YXRpYyBib29sIG1ha2VBc3NpZ25Ob2RlKE5vZGUqJiByZXN1bHQsIE5vZGUg
KmxvYywgT3BlcmF0b3Igb3AsIE5vZGUgKmV4cHIpOwogc3RhdGljIGJvb2wgbWFrZVByZWZpeE5v
ZGUoTm9kZSomIHJlc3VsdCwgTm9kZSAqZXhwciwgT3BlcmF0b3Igb3ApOwogc3RhdGljIGJvb2wg
bWFrZVBvc3RmaXhOb2RlKE5vZGUqJiByZXN1bHQsIE5vZGUgKmV4cHIsIE9wZXJhdG9yIG9wKTsK
K3N0YXRpYyBib29sIG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm9kZShQcm9wZXJ0eU5vZGUq
JiByZXN1bHQsIElkZW50aWZpZXIgJmdldE9yU2V0LCBJZGVudGlmaWVyJiBuYW1lLCBQYXJhbWV0
ZXJOb2RlICpwYXJhbXMsIEZ1bmN0aW9uQm9keU5vZGUgKmJvZHkpOwogc3RhdGljIE5vZGUgKm1h
a2VGdW5jdGlvbkNhbGxOb2RlKE5vZGUgKmZ1bmMsIEFyZ3VtZW50c05vZGUgKmFyZ3MpOwogc3Rh
dGljIE5vZGUgKm1ha2VUeXBlT2ZOb2RlKE5vZGUgKmV4cHIpOwogc3RhdGljIE5vZGUgKm1ha2VE
ZWxldGVOb2RlKE5vZGUgKmV4cHIpOwpAQCAtODQsOCArODUsOSBAQCBzdGF0aWMgTm9kZSAqbWFr
ZURlbGV0ZU5vZGUoTm9kZSAqZXhwcik7CiAgIENhc2VDbGF1c2VOb2RlICAgICAgKmNjbDsKICAg
RWxlbWVudE5vZGUgICAgICAgICAqZWxtOwogICBPcGVyYXRvciAgICAgICAgICAgIG9wOwotICBQ
cm9wZXJ0eVZhbHVlTm9kZSAgICpwbGlzdDsKLSAgUHJvcGVydHlOb2RlICAgICAgICAqcG5vZGU7
CisgIFByb3BlcnR5TGlzdE5vZGUgICAqcGxpc3Q7CisgIFByb3BlcnR5Tm9kZSAgICAgICAqcG5v
ZGU7CisgIFByb3BlcnR5TmFtZU5vZGUgICAqcG5hbWU7CiB9CiAKICVzdGFydCBQcm9ncmFtCkBA
IC0xNzksOSArMTgxLDkgQEAgc3RhdGljIE5vZGUgKm1ha2VEZWxldGVOb2RlKE5vZGUgKmV4cHIp
OwogJXR5cGUgPGNsaXN0PiBDYXNlQ2xhdXNlcyAgQ2FzZUNsYXVzZXNPcHQKICV0eXBlIDxpdmFs
PiAgRWxpc2lvbiBFbGlzaW9uT3B0CiAldHlwZSA8ZWxtPiAgIEVsZW1lbnRMaXN0Ci0ldHlwZSA8
cGxpc3Q+IFByb3BlcnR5TmFtZUFuZFZhbHVlTGlzdAotJXR5cGUgPHBub2RlPiBQcm9wZXJ0eU5h
bWUKLQorJXR5cGUgPHBuYW1lPiBQcm9wZXJ0eU5hbWUKKyV0eXBlIDxwbm9kZT4gUHJvcGVydHkK
KyV0eXBlIDxwbGlzdD4gUHJvcGVydHlMaXN0CiAlJQogCiBMaXRlcmFsOgpAQCAtMjAyLDEwICsy
MDQsMjggQEAgTGl0ZXJhbDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiA7CiAKK1Byb3BlcnR5TmFtZToKKyAgICBJREVOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICQkID0gbmV3IFByb3BlcnR5TmFtZU5vZGUoKiQxKTsgfQorICB8IFNUUklORyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgUHJvcGVydHlOYW1lTm9kZShJ
ZGVudGlmaWVyKCokMSkpOyB9CisgIHwgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyAkJCA9IG5ldyBQcm9wZXJ0eU5hbWVOb2RlKCQxKTsgfQorOworCitQcm9wZXJ0eToKKyAg
ICBQcm9wZXJ0eU5hbWUgJzonIEFzc2lnbm1lbnRFeHByICAgICB7ICQkID0gbmV3IFByb3BlcnR5
Tm9kZSgkMSwgJDMsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpOyB9CisgIHwgSURFTlQgSURFTlQg
JygnICcpJyBGdW5jdGlvbkJvZHkgICAgeyBpZiAoIW1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5
Tm9kZSgkJCwgKiQxLCAqJDIsIDAsICQ1KSkgWVlBQk9SVDsgfQorICB8IElERU5UIElERU5UICco
JyBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcpJyBGdW5jdGlvbkJvZHkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7IGlmICghbWFrZUdldHRlck9yU2V0dGVyUHJvcGVydHlO
b2RlKCQkLCAqJDEsICokMiwgJDQsICQ2KSkgWVlBQk9SVDsgfQorOworCitQcm9wZXJ0eUxpc3Q6
CisgICAgUHJvcGVydHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBQcm9w
ZXJ0eUxpc3ROb2RlKCQxKTsgfQorICB8IFByb3BlcnR5TGlzdCAnLCcgUHJvcGVydHkgICAgICAg
ICAgIHsgJCQgPSBuZXcgUHJvcGVydHlMaXN0Tm9kZSgkMywgJDEpOyB9Cis7CisKIFByaW1hcnlF
eHByOgogICAgIFByaW1hcnlFeHByTm9CcmFjZQogICB8ICd7JyAnfScgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgJCQgPSBuZXcgT2JqZWN0TGl0ZXJhbE5vZGUoKTsgfQotICB8ICd7JyBQ
cm9wZXJ0eU5hbWVBbmRWYWx1ZUxpc3QgJ30nICAgIHsgJCQgPSBuZXcgT2JqZWN0TGl0ZXJhbE5v
ZGUoJDIpOyB9CisgIHwgJ3snIFByb3BlcnR5TGlzdCAnfScgICAgeyAkJCA9IG5ldyBPYmplY3RM
aXRlcmFsTm9kZSgkMik7IH0KIDsKIAogUHJpbWFyeUV4cHJOb0JyYWNlOgpAQCAtMjM4LDE4ICsy
NTgsNiBAQCBFbGlzaW9uOgogICB8IEVsaXNpb24gJywnICAgICAgICAgICAgICAgICAgICAgICAg
IHsgJCQgPSAkMSArIDE7IH0KIDsKIAotUHJvcGVydHlOYW1lQW5kVmFsdWVMaXN0OgotICAgIFBy
b3BlcnR5TmFtZSAnOicgQXNzaWdubWVudEV4cHIgICAgIHsgJCQgPSBuZXcgUHJvcGVydHlWYWx1
ZU5vZGUoJDEsICQzKTsgfQotICB8IFByb3BlcnR5TmFtZUFuZFZhbHVlTGlzdCAnLCcgUHJvcGVy
dHlOYW1lICc6JyBBc3NpZ25tZW50RXhwcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgJCQgPSBuZXcgUHJvcGVydHlWYWx1ZU5vZGUoJDMsICQ1LCAkMSk7IH0KLTsK
LQotUHJvcGVydHlOYW1lOgotICAgIElERU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgJCQgPSBuZXcgUHJvcGVydHlOb2RlKCokMSk7IH0KLSAgfCBTVFJJTkcgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IFByb3BlcnR5Tm9kZShJZGVudGlmaWVyKCokMSkp
OyB9Ci0gIHwgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBQ
cm9wZXJ0eU5vZGUoJDEpOyB9Ci07Ci0KIE1lbWJlckV4cHI6CiAgICAgUHJpbWFyeUV4cHIKICAg
fCBGdW5jdGlvbkV4cHIgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gJDE7IH0KQEAgLTk2
MCw2ICs5NjgsMjggQEAgc3RhdGljIE5vZGUgKm1ha2VEZWxldGVOb2RlKE5vZGUgKmV4cHIpCiAg
ICAgfQogfQogCitzdGF0aWMgYm9vbCBtYWtlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eU5vZGUoUHJv
cGVydHlOb2RlKiYgcmVzdWx0LCBJZGVudGlmaWVyJiBnZXRPclNldCwgSWRlbnRpZmllciYgbmFt
ZSwgUGFyYW1ldGVyTm9kZSAqcGFyYW1zLCBGdW5jdGlvbkJvZHlOb2RlICpib2R5KQoreworICAg
IEZ1bmNFeHByTm9kZSAqZnVuYzsKKyAgICBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZTsKKyAgICAK
KyAgICBpZiAoZ2V0T3JTZXQgPT0gImdldCIpCisgICAgICAgIHR5cGUgPSBQcm9wZXJ0eU5vZGU6
OkdldHRlcjsKKyAgICBlbHNlIGlmIChnZXRPclNldCA9PSAic2V0IikKKyAgICAgICAgdHlwZSA9
IFByb3BlcnR5Tm9kZTo6U2V0dGVyOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmIChwYXJhbXMpCisgICAgICAgIGZ1bmMgPSBuZXcgRnVuY0V4cHJOb2RlKElk
ZW50aWZpZXI6Om51bGwoKSwgcGFyYW1zLCBib2R5KTsKKyAgICBlbHNlCisgICAgICAgIGZ1bmMg
PSBuZXcgRnVuY0V4cHJOb2RlKElkZW50aWZpZXI6Om51bGwoKSwgYm9keSk7CisgICAgCisgICAg
cmVzdWx0ID0gbmV3IFByb3BlcnR5Tm9kZShuZXcgUHJvcGVydHlOYW1lTm9kZShuYW1lKSwgZnVu
YywgdHlwZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogaW50IHl5ZXJyb3IoY29uc3QgY2hh
ciAqIC8qIHMgKi8pICAvKiBDYWxsZWQgYnkgeXlwYXJzZSBvbiBlcnJvciAqLwogewogICAvLyBm
cHJpbnRmKHN0ZGVyciwgIkVSUk9SOiAlcyBhdCBsaW5lICVkXG4iLCBzLCBLSlM6OkxleGVyOjpj
dXJyKCktPmxpbmVObygpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9pbnRlcm5h
bC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODIKZGlmZiAtcCAtdSAtcjEuODIgSmF2YVNj
cmlwdENvcmUva2pzL2ludGVybmFsLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFs
LmNwcAkxMSBEZWMgMjAwNSAwMjowNTo0NCAtMDAwMAkxLjgyCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvaW50ZXJuYWwuY3BwCTExIERlYyAyMDA1IDExOjU0OjI0IC0wMDAwCkBAIC0yMjMsNiArMjIz
LDQ1IEBAIGJvb2wgTnVtYmVySW1wOjpnZXRVSW50MzIodWludDMyX3QmIHVpbnQKICAgcmV0dXJu
IChkb3VibGUpdWludDMyID09IHZhbDsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEdldHRlclNldHRlckltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Zv
aWQgR2V0dGVyU2V0dGVySW1wOjptYXJrKCkKK3sKKyAgICBpZiAoZ2V0dGVyICYmICFnZXR0ZXIt
Pm1hcmtlZCgpKQorICAgICAgICBnZXR0ZXItPm1hcmsoKTsKKyAgICBpZiAoc2V0dGVyICYmICFz
ZXR0ZXItPm1hcmtlZCgpKQorICAgICAgICBzZXR0ZXItPm1hcmsoKTsKK30KKworSlNWYWx1ZSAq
R2V0dGVyU2V0dGVySW1wOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKiwgVHlwZSkgY29uc3QKK3sK
KyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiAwOworfQorCitib29sIEdldHRlclNldHRl
ckltcDo6dG9Cb29sZWFuKEV4ZWNTdGF0ZSAqKSBjb25zdAoreworICAgIGFzc2VydChmYWxzZSk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitkb3VibGUgR2V0dGVyU2V0dGVySW1wOjp0b051bWJl
cihFeGVjU3RhdGUgKikgY29uc3QKK3sKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiAw
LjA7Cit9CisKK1VTdHJpbmcgR2V0dGVyU2V0dGVySW1wOjp0b1N0cmluZyhFeGVjU3RhdGUgKikg
Y29uc3QKK3sKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBVU3RyaW5nOjpudWxsKCk7
Cit9CisKK0pTT2JqZWN0ICpHZXR0ZXJTZXR0ZXJJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhl
YykgY29uc3QKK3sKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiAwOworfQorCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGFiZWxTdGFjayAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIExhYmVsU3RhY2s6OnB1c2goY29uc3QgSWRlbnRp
ZmllciAmaWQpCkBAIC04MzUsNiArODc0LDkgQEAgdm9pZCBwcmludEluZm8oRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBjaAogICAgICAgaWYgKG5hbWUuaXNOdWxsKCkpCiAgICAgICAgIG5hbWUgPSAi
KHVua25vd24gY2xhc3MpIjsKICAgICAgIGJyZWFrOworICAgIGNhc2UgR2V0dGVyU2V0dGVyVHlw
ZToKKyAgICAgIC8vIEdldHRlclNldHRlciBpcyBhbiBpbnRlcm5hbCB0eXBlIGFuZCBzaG91bGQg
bmV2ZXIgYmUgZXhwb3NlZC4KKyAgICAgIGFzc2VydChmYWxzZSk7CiAgICAgfQogICAgIFVTdHJp
bmcgdlN0cmluZyA9IHYtPnRvU3RyaW5nKGV4ZWMpOwogICAgIGlmICggdlN0cmluZy5zaXplKCkg
PiA1MCApCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjkwCmRpZmYgLXAgLXUgLXIxLjkwIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rl
cy5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJMTEgRGVjIDIwMDUgMDI6MDU6
NDUgLTAwMDAJMS45MAorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkxMSBEZWMgMjAw
NSAxMTo1NDoyNCAtMDAwMApAQCAtMzUzLDI5ICszNTMsNDggQEAgSlNWYWx1ZSAqT2JqZWN0TGl0
ZXJhbE5vZGU6OmV2YWx1YXRlKEV4ZQogICByZXR1cm4gZXhlYy0+bGV4aWNhbEludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3QoKS0+Y29uc3RydWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSk7CiB9CiAK
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eVZhbHVlTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gUHJvcGVydHlMaXN0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBF
Q01BIDExLjEuNQotSlNWYWx1ZSAqUHJvcGVydHlWYWx1ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSAqZXhlYykKK0pTVmFsdWUgKlByb3BlcnR5TGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYykKIHsKICAgSlNPYmplY3QgKm9iaiA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0KCktPmNvbnN0cnVjdChleGVjLCBMaXN0OjplbXB0eSgpKTsKICAgCi0gIGZv
ciAoUHJvcGVydHlWYWx1ZU5vZGUgKnAgPSB0aGlzOyBwOyBwID0gcC0+bGlzdC5nZXQoKSkgewot
ICAgIEpTVmFsdWUgKm4gPSBwLT5uYW1lLT5ldmFsdWF0ZShleGVjKTsKKyAgZm9yIChQcm9wZXJ0
eUxpc3ROb2RlICpwID0gdGhpczsgcDsgcCA9IHAtPmxpc3QuZ2V0KCkpIHsKKyAgICBKU1ZhbHVl
ICpuID0gcC0+bm9kZS0+bmFtZS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKLSAgICBKU1ZhbHVlICp2ID0gcC0+YXNzaWduLT5ldmFsdWF0ZShleGVjKTsKKyAg
ICBKU1ZhbHVlICp2ID0gcC0+bm9kZS0+YXNzaWduLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNf
Q0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgb2JqLT5wdXQoZXhlYywgSWRlbnRpZmllcihuLT50
b1N0cmluZyhleGVjKSksIHYpOworICAgIAorICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcihuLT50b1N0cmluZyhleGVjKSk7CisgICAgc3dpdGNoIChwLT5ub2RlLT50eXBl
KSB7CisgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6R2V0dGVyOgorICAgICAgICBvYmotPmRlZmlu
ZUdldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6U2V0dGVyOgorICAgICAg
ICBvYmotPmRlZmluZVNldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHN0YXRpY19jYXN0PEpTT2Jq
ZWN0ICo+KHYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6Q29u
c3RhbnQ6CisgICAgICAgIG9iai0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdik7CisgICAgICAg
IGJyZWFrOworICAgIH0KICAgfQogCiAgIHJldHVybiBvYmo7CiB9CiAKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFQ01BIDExLjEuNQorSlNWYWx1ZSAq
UHJvcGVydHlOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCit7CisgIGFzc2VydChmYWxz
ZSk7CisgIHJldHVybiAwOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBy
b3BlcnR5TmFtZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBFQ01B
IDExLjEuNQotSlNWYWx1ZSAqUHJvcGVydHlOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKikKK0pT
VmFsdWUgKlByb3BlcnR5TmFtZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqKQogewogICBKU1Zh
bHVlICpzOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNDMKZGlmZiAtcCAtdSAtcjEuNDMgSmF2YVNjcmlwdENvcmUva2pzL25vZGVz
LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCTExIERlYyAyMDA1IDAyOjA1OjQ1IC0w
MDAwCTEuNDMKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCTExIERlYyAyMDA1IDExOjU0
OjI0IC0wMDAwCkBAIC0zMiw4ICszMiw4IEBACiBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBQ
cm9ncmFtTm9kZTsKLSAgY2xhc3MgUHJvcGVydHlOb2RlOwotICBjbGFzcyBQcm9wZXJ0eVZhbHVl
Tm9kZTsKKyAgY2xhc3MgUHJvcGVydHlOYW1lTm9kZTsKKyAgY2xhc3MgUHJvcGVydHlMaXN0Tm9k
ZTsKICAgY2xhc3MgUmVmZXJlbmNlOwogICBjbGFzcyBSZWdFeHA7CiAgIGNsYXNzIFNvdXJjZUVs
ZW1lbnRzTm9kZTsKQEAgLTI0Niw0MSArMjQ2LDU0IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGJv
b2wgb3B0OwogICB9OwogCi0gIGNsYXNzIFByb3BlcnR5VmFsdWVOb2RlIDogcHVibGljIE5vZGUg
eworICBjbGFzcyBQcm9wZXJ0eU5hbWVOb2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6Ci0g
ICAgLy8gbGlzdCBwb2ludGVyIGlzIHRhaWwgb2YgYSBjaXJjdWxhciBsaXN0LCBjcmFja2VkIGlu
IHRoZSBPYmplY3RMaXRlcmFsTm9kZSBjdG9yCi0gICAgUHJvcGVydHlWYWx1ZU5vZGUoUHJvcGVy
dHlOb2RlICpuLCBOb2RlICphKQotICAgICAgOiBuYW1lKG4pLCBhc3NpZ24oYSksIGxpc3QodGhp
cykgeyB9Ci0gICAgUHJvcGVydHlWYWx1ZU5vZGUoUHJvcGVydHlOb2RlICpuLCBOb2RlICphLCBQ
cm9wZXJ0eVZhbHVlTm9kZSAqbCkKLSAgICAgIDogbmFtZShuKSwgYXNzaWduKGEpLCBsaXN0KGwt
Pmxpc3QpIHsgbC0+bGlzdCA9IHRoaXM7IH0KKyAgICBQcm9wZXJ0eU5hbWVOb2RlKGRvdWJsZSBk
KSA6IG51bWVyaWMoZCkgeyB9CisgICAgUHJvcGVydHlOYW1lTm9kZShjb25zdCBJZGVudGlmaWVy
ICZzKSA6IHN0cihzKSB7IH0KICAgICBKU1ZhbHVlICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMp
OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBw
cml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBPYmplY3RMaXRlcmFsTm9kZTsKLSAgICBSZWZQdHI8
UHJvcGVydHlOb2RlPiBuYW1lOworICAgIGRvdWJsZSBudW1lcmljOworICAgIElkZW50aWZpZXIg
c3RyOworICB9OworICAKKyAgY2xhc3MgUHJvcGVydHlOb2RlIDogcHVibGljIE5vZGUgeworICBw
dWJsaWM6CisgICAgZW51bSBUeXBlIHsgQ29uc3RhbnQsIEdldHRlciwgU2V0dGVyIH07CisgICAg
UHJvcGVydHlOb2RlKFByb3BlcnR5TmFtZU5vZGUgKm4sIE5vZGUgKmEsIFR5cGUgdCkgCisgICAg
ICA6IG5hbWUobiksIGFzc2lnbihhKSwgdHlwZSh0KSB7IH0KKyAgICBKU1ZhbHVlICpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gJnMpIGNvbnN0OworICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlOworICBwcml2
YXRlOgorICAgIFJlZlB0cjxQcm9wZXJ0eU5hbWVOb2RlPiBuYW1lOwogICAgIFJlZlB0cjxOb2Rl
PiBhc3NpZ247Ci0gICAgUmVmUHRyPFByb3BlcnR5VmFsdWVOb2RlPiBsaXN0OworICAgIFR5cGUg
dHlwZTsKICAgfTsKLQotICBjbGFzcyBPYmplY3RMaXRlcmFsTm9kZSA6IHB1YmxpYyBOb2RlIHsK
KyAgCisgIGNsYXNzIFByb3BlcnR5TGlzdE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoK
LSAgICBPYmplY3RMaXRlcmFsTm9kZSgpIDogbGlzdCgwKSB7IH0KLSAgICBPYmplY3RMaXRlcmFs
Tm9kZShQcm9wZXJ0eVZhbHVlTm9kZSAqbCkgOiBsaXN0KGwtPmxpc3QpIHsgbC0+bGlzdCA9IDA7
IH0KKyAgICAvLyBsaXN0IHBvaW50ZXIgaXMgdGFpbCBvZiBhIGNpcmN1bGFyIGxpc3QsIGNyYWNr
ZWQgaW4gdGhlIE9iamVjdExpdGVyYWxOb2RlIGN0b3IKKyAgICBQcm9wZXJ0eUxpc3ROb2RlKFBy
b3BlcnR5Tm9kZSAqbikLCisgICAgICA6IG5vZGUobiksIGxpc3QodGhpcykgeyB9CisgICAgUHJv
cGVydHlMaXN0Tm9kZShQcm9wZXJ0eU5vZGUgKm4sIFByb3BlcnR5TGlzdE5vZGUgKmwpCisgICAg
ICA6IG5vZGUobiksIGxpc3QobC0+bGlzdCkgeyBsLT5saXN0ID0gdGhpczsgfQogICAgIEpTVmFs
dWUgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0gICAgUmVmUHRyPFByb3BlcnR5
VmFsdWVOb2RlPiBsaXN0OworICAgIGZyaWVuZCBjbGFzcyBPYmplY3RMaXRlcmFsTm9kZTsKKyAg
ICBSZWZQdHI8UHJvcGVydHlOb2RlPiBub2RlOworICAgIFJlZlB0cjxQcm9wZXJ0eUxpc3ROb2Rl
PiBsaXN0OwogICB9OwogCi0gIGNsYXNzIFByb3BlcnR5Tm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAg
Y2xhc3MgT2JqZWN0TGl0ZXJhbE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBQ
cm9wZXJ0eU5vZGUoZG91YmxlIGQpIDogbnVtZXJpYyhkKSB7IH0KLSAgICBQcm9wZXJ0eU5vZGUo
Y29uc3QgSWRlbnRpZmllciAmcykgOiBzdHIocykgeyB9CisgICAgT2JqZWN0TGl0ZXJhbE5vZGUo
KSA6IGxpc3QoMCkgeyB9CisgICAgT2JqZWN0TGl0ZXJhbE5vZGUoUHJvcGVydHlMaXN0Tm9kZSAq
bCkgOiBsaXN0KGwtPmxpc3QpIHsgbC0+bGlzdCA9IDA7IH0KICAgICBKU1ZhbHVlICpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAgIGRvdWJsZSBudW1lcmljOwotICAgIElkZW50
aWZpZXIgc3RyOworICAgIFJlZlB0cjxQcm9wZXJ0eUxpc3ROb2RlPiBsaXN0OwogICB9OwogCiAg
IGNsYXNzIEJyYWNrZXRBY2Nlc3Nvck5vZGUgOiBwdWJsaWMgTm9kZSB7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMjIKZGlmZiAtcCAtdSAtcjEuMjIgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmlu
Zy5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJpbmcuY3BwCTEgRGVjIDIwMDUg
MTc6NTk6MjUgLTAwMDAJMS4yMgorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5j
cHAJMTEgRGVjIDIwMDUgMTE6NTQ6MjQgLTAwMDAKQEAgLTE1NSwxNCArMTU1LDI1IEBAIHZvaWQg
T2JqZWN0TGl0ZXJhbE5vZGU6OnN0cmVhbVRvKFNvdXJjZVMKICAgICBzIDw8ICJ7IH0iOwogfQog
Ci12b2lkIFByb3BlcnR5VmFsdWVOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0
Cit2b2lkIFByb3BlcnR5TGlzdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3QK
IHsKLSAgZm9yIChjb25zdCBQcm9wZXJ0eVZhbHVlTm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5s
aXN0LmdldCgpKQotICAgIHMgPDwgbi0+bmFtZSA8PCAiOiAiIDw8IG4tPmFzc2lnbjsKKyAgcyA8
PCBub2RlOworICAKKyAgZm9yIChjb25zdCBQcm9wZXJ0eUxpc3ROb2RlICpuID0gbGlzdC5nZXQo
KTsgbjsgbiA9IG4tPmxpc3QuZ2V0KCkpCisgICAgcyA8PCAiLCAiIDw8IG4tPm5vZGU7CiB9CiAK
IHZvaWQgUHJvcGVydHlOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CiB7Cisg
IC8vIEZJWE1FOiBTdXBwb3J0IGdldHRlciBhbmQgc2V0dGVyIGZ1bmN0aW9ucwsKKyAgaWYgKHR5
cGUgIT0gQ29uc3RhbnQpCisgICAgICByZXR1cm47CisKKyAgICBzIDw8IG5hbWUgPDwgIjogIiA8
PCBhc3NpZ247Cit9CisKK3ZvaWQgUHJvcGVydHlOYW1lTm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtICZzKSBjb25zdAorewogICBpZiAoc3RyLmlzTnVsbCgpKQogICAgIHMgPDwgVVN0cmluZzo6
ZnJvbShudW1lcmljKTsKICAgZWxzZQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9vYmpl
Y3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU4CmRpZmYgLXAgLXUgLXIxLjU4IEphdmFT
Y3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmNw
cAkxMSBEZWMgMjAwNSAwMjowNTo0NiAtMDAwMAkxLjU4CisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
b2JqZWN0LmNwcAkxMSBEZWMgMjAwNSAxMTo1NDoyNCAtMDAwMApAQCAtMjEzLDYgKzIxMywyMyBA
QCB2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zCiAgICAgcmV0dXJuOwog
ICB9CiAKKyAgaWYgKEpTVmFsdWUgKmdzID0gX3Byb3AuZ2V0KHByb3BlcnR5TmFtZSkpIHsKKyAg
ICAgIGlmIChncy0+dHlwZSgpID09IEdldHRlclNldHRlclR5cGUpIHsKKyAgICAgICAgICBKU09i
amVjdCAqc2V0dGVyRnVuYyA9IHN0YXRpY19jYXN0PEdldHRlclNldHRlckltcCAqPihncyktPmdl
dFNldHRlcigpOworICAgICAgICAgIAorICAgICAgICAgIGlmICghc2V0dGVyRnVuYykgeworICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgInNldHRpbmcgYSBwcm9wZXJ0
eSB0aGF0IGhhcyBvbmx5IGEgZ2V0dGVyIik7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICB9CisgICAgICAgICAgCisgICAgICAgICAgTGlzdCBhcmdzOworICAgICAgICAgIGFyZ3Mu
YXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAKKyAgICAgICAgICBzZXR0ZXJGdW5jLT5jYWxsKGV4
ZWMsIHRoaXMsIGFyZ3MpOworICAgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgfQorICAKICAg
X3Byb3AucHV0KHByb3BlcnR5TmFtZSx2YWx1ZSxhdHRyKTsKIH0KIApAQCAtMzMyLDYgKzM0OSwz
NiBAQCBjb25zdCBIYXNoRW50cnkqIEpTT2JqZWN0OjpmaW5kUHJvcGVydHlICiAgIHJldHVybiAw
OwogfQogCit2b2lkIEpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0ICpnZXR0ZXJGdW5jKQoreworICAg
IEpTVmFsdWUgKm8gPSBnZXREaXJlY3QocHJvcGVydHlOYW1lKTsKKyAgICBHZXR0ZXJTZXR0ZXJJ
bXAgKmdzOworICAgIAorICAgIGlmIChvICYmIG8tPnR5cGUoKSA9PSBHZXR0ZXJTZXR0ZXJUeXBl
KSB7CisgICAgICAgIGdzID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVySW1wICo+KG8pOworICAg
IH0gZWxzZSB7CisgICAgICAgIGdzID0gbmV3IEdldHRlclNldHRlckltcDsKKyAgICAgICAgcHV0
KGV4ZWMsIHByb3BlcnR5TmFtZSwgZ3MpOworICAgIH0KKyAgICAKKyAgICBncy0+c2V0R2V0dGVy
KHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZ2V0dGVyRnVuYykpOworfQorCit2b2lkIEpTT2JqZWN0
OjpkZWZpbmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0ICpzZXR0ZXJGdW5jKQoreworICAgIEpTVmFsdWUgKm8gPSBnZXREaXJl
Y3QocHJvcGVydHlOYW1lKTsKKyAgICBHZXR0ZXJTZXR0ZXJJbXAgKmdzOworICAgIAorICAgIGlm
IChvICYmIG8tPnR5cGUoKSA9PSBHZXR0ZXJTZXR0ZXJUeXBlKSB7CisgICAgICAgIGdzID0gc3Rh
dGljX2Nhc3Q8R2V0dGVyU2V0dGVySW1wICo+KG8pOworICAgIH0gZWxzZSB7CisgICAgICAgIGdz
ID0gbmV3IEdldHRlclNldHRlckltcDsKKyAgICAgICAgcHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwg
Z3MpOworICAgIH0KKyAgICAKKyAgICBncy0+c2V0U2V0dGVyKHN0YXRpY19jYXN0PEpTT2JqZWN0
ICo+KHNldHRlckZ1bmMpKTsKK30KKwogYm9vbCBKU09iamVjdDo6aW1wbGVtZW50c0NvbnN0cnVj
dCgpIGNvbnN0CiB7CiAgIHJldHVybiBmYWxzZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9v
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pz
L29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUwCmRpZmYgLXAgLXUgLXIxLjUwIEph
dmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5o
CTExIERlYyAyMDA1IDAyOjA1OjQ2IC0wMDAwCTEuNTAKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9v
YmplY3QuaAkxMSBEZWMgMjAwNSAxMTo1NDoyNSAtMDAwMApAQCAtNzksNiArNzksMzIgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICovCiAgICAgdm9pZCAqZHVtbXk7CiAgIH07CisKKyAgLy8gVGhp
cyBpcyBhbiBpbnRlcm5hbCB2YWx1ZSBvYmplY3Qgd2hpY2ggc3RvcmVzIGdldHRlciBhbmQgc2V0
dGVyIGZ1bmN0aW9ucworICAvLyBmb3IgYSBwcm9wZXJ0eS4KKyAgY2xhc3MgR2V0dGVyU2V0dGVy
SW1wIDogcHVibGljIEpTQ2VsbCB7CisgIHB1YmxpYzoKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBHZXR0ZXJTZXR0ZXJUeXBlOyB9CisgICAgICAKKyAgICBHZXR0ZXJTZXR0ZXJJbXAo
KSA6IGdldHRlcigwKSwgc2V0dGVyKDApIHsgfQorICAgICAgCisgICAgSlNWYWx1ZSAqdG9Qcmlt
aXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkg
Y29uc3Q7CisgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKKyAgICBk
b3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKKyAgICBVU3RyaW5nIHRvU3Ry
aW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CisgICAgSlNPYmplY3QgKnRvT2JqZWN0KEV4ZWNT
dGF0ZSAqZXhlYykgY29uc3Q7CisgICAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAg
ICAgCisgICAgSlNPYmplY3QgKmdldEdldHRlcigpIHsgcmV0dXJuIGdldHRlcjsgfQorICAgIHZv
aWQgc2V0R2V0dGVyKEpTT2JqZWN0ICpnKSB7IGdldHRlciA9IGc7IH0KKyAgICBKU09iamVjdCAq
Z2V0U2V0dGVyKCkgeyByZXR1cm4gc2V0dGVyOyB9CisgICAgdm9pZCBzZXRTZXR0ZXIoSlNPYmpl
Y3QgKnMpIHsgc2V0dGVyID0gczsgfQorICAgICAgCisgIHByaXZhdGU6CisgICAgSlNPYmplY3Qg
KmdldHRlcjsKKyAgICBKU09iamVjdCAqc2V0dGVyOyAgCisgIH07CiAgIAogICBjbGFzcyBKU09i
amVjdCA6IHB1YmxpYyBKU0NlbGwgewogICBwdWJsaWM6CkBAIC00NzYsNiArNTAyLDkgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICAgIHsgcmV0dXJuIF9wcm9wLmdldExvY2F0aW9uKHByb3BlcnR5
TmFtZSk7IH0KICAgICB2b2lkIHB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0ciA9IDApOwogICAgIHZvaWQgcHV0RGlyZWN0KGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgaW50IHZhbHVlLCBpbnQgYXR0ciA9IDApOwor
CisgICAgdm9pZCBkZWZpbmVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0ICpnZXR0ZXJGdW5jKTsKKyAgICB2b2lkIGRlZmluZVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNP
YmplY3QgKnNldHRlckZ1bmMpOwogICAgIAogICAgIC8qKgogICAgICAqIFJlbW92ZSBhbGwgcHJv
cGVydGllcyBmcm9tIHRoaXMgb2JqZWN0LgpAQCAtNjA2LDcgKzYzNSwxNiBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEV4CiBpbmxpbmUgYm9vbCBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKEpTVmFsdWUgKipsb2NhdGlv
biA9IGdldERpcmVjdExvY2F0aW9uKHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgc2xvdC5zZXRW
YWx1ZVNsb3QodGhpcywgbG9jYXRpb24pOworICAgICAgICBpZiAoKCpsb2NhdGlvbiktPnR5cGUo
KSA9PSBHZXR0ZXJTZXR0ZXJUeXBlKSB7CisgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJJbXAgKmdz
ID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVySW1wICo+KCpsb2NhdGlvbik7CisgICAgICAgICAg
ICBKU09iamVjdCAqZ2V0dGVyRnVuYyA9IGdzLT5nZXRHZXR0ZXIoKTsKKyAgICAgICAgICAgIGlm
IChnZXR0ZXJGdW5jKQorICAgICAgICAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdCh0aGlzLCBn
ZXR0ZXJGdW5jKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbG90LnNldFVu
ZGVmaW5lZCh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWVTbG90KHRoaXMsIGxvY2F0aW9uKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmpl
Y3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXAgLXUgLXIxLjE4IEphdmFT
Y3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL29i
amVjdF9vYmplY3QuY3BwCTExIERlYyAyMDA1IDAyOjA1OjQ2IC0wMDAwCTEuMTgKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcAkxMSBEZWMgMjAwNSAxMTo1NDoyNSAtMDAw
MApAQCAtNDMsNiArNDMsMTEgQEAgT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhl
Y1N0YQogICAgIHB1dERpcmVjdCh2YWx1ZU9mUHJvcGVydHlOYW1lLCBuZXcgT2JqZWN0UHJvdG9G
dW5jKGV4ZWMsIGZ1bmNQcm90bywgT2JqZWN0UHJvdG9GdW5jOjpWYWx1ZU9mLCAgICAgICAgICAg
ICAgICAgMCksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3QoImhhc093blByb3BlcnR5IiwgbmV3
IE9iamVjdFByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVuYzo6SGFzT3du
UHJvcGVydHksICAgICAgICAgICAgIDEpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KCJwcm9w
ZXJ0eUlzRW51bWVyYWJsZSIsIG5ldyBPYmplY3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBP
YmplY3RQcm90b0Z1bmM6OlByb3BlcnR5SXNFbnVtZXJhYmxlLCAxKSwgRG9udEVudW0pOworICAg
IC8vIE1vemlsbGEgZXh0ZW5zaW9ucworICAgIHB1dERpcmVjdCgiX19kZWZpbmVHZXR0ZXJfXyIs
IG5ldyBPYmplY3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBPYmplY3RQcm90b0Z1bmM6OkRl
ZmluZUdldHRlciwgICAgICAgICAgICAgMiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoIl9f
ZGVmaW5lU2V0dGVyX18iLCBuZXcgT2JqZWN0UHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgT2Jq
ZWN0UHJvdG9GdW5jOjpEZWZpbmVTZXR0ZXIsICAgICAgICAgICAgIDIpLCBEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0KCJfX2xvb2t1cEdldHRlcl9fIiwgbmV3IE9iamVjdFByb3RvRnVuYyhleGVj
LCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVuYzo6TG9va3VwR2V0dGVyLCAgICAgICAgICAgICAx
KSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCgiX19sb29rdXBTZXR0ZXJfXyIsIG5ldyBPYmpl
Y3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBPYmplY3RQcm90b0Z1bmM6Okxvb2t1cFNldHRl
ciwgICAgICAgICAgICAgMSksIERvbnRFbnVtKTsKIH0KIAogCkBAIC03Myw2ICs3OCw0OCBAQCBK
U1ZhbHVlICpPYmplY3RQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uCiAgICAgICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odGhpc09iai0+Z2V0
T3duUHJvcGVydHlTbG90KGV4ZWMsIElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykp
LCBzbG90KSk7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBEZWZpbmVHZXR0ZXI6IAorICAgICAg
ICBjYXNlIERlZmluZVNldHRlcjogeworICAgICAgICAgICAgaWYgKCFhcmdzWzFdLT5pc09iamVj
dCgpIHx8CisgICAgICAgICAgICAgICAgIXN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGFyZ3NbMV0p
LT5pbXBsZW1lbnRzQ2FsbCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlkID09IERlZmluZUdl
dHRlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4
RXJyb3IsICJpbnZhbGlkIGdldHRlciB1c2FnZSIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJp
bnZhbGlkIHNldHRlciB1c2FnZSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aWQgPT0gRGVmaW5lR2V0dGVyKQorICAgICAgICAgICAgICAgIHRoaXNPYmotPmRlZmluZUdldHRl
cihleGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSwgc3RhdGljX2Nhc3Q8
SlNPYmplY3QgKj4oYXJnc1sxXSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHRoaXNPYmotPmRlZmluZVNldHRlcihleGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5n
KGV4ZWMpKSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oYXJnc1sxXSkpOworICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb29rdXBHZXR0
ZXI6IAorICAgICAgICBjYXNlIExvb2t1cFNldHRlcjogeworICAgICAgICAgICAgSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgSlNPYmplY3QgKmltcCA9IHRoaXNPYmo7CisgICAgICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgKnYgPSBpbXAtPmdl
dERpcmVjdChwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmICghdiB8fCB2LT50eXBlKCkgIT0gR2V0dGVyU2V0dGVyVHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgR2V0dGVyU2V0dGVySW1wICpncyA9IHN0YXRpY19jYXN0PEdldHRlclNldHRlckltcCAq
Pih2KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaWQgPT0gTG9va3Vw
R2V0dGVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3MtPmdldEdldHRlcigpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdzLT5nZXRTZXR0
ZXIoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWltcC0+cHJvdG90
eXBlKCktPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGltcCA9IHN0YXRpY19jYXN0
PEpTT2JqZWN0ICo+KGltcC0+cHJvdG90eXBlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgICAg
ICBjYXNlIFByb3BlcnR5SXNFbnVtZXJhYmxlOgogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bih0aGlzT2JqLT5wcm9wZXJ0eUlzRW51bWVyYWJsZShleGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0t
PnRvU3RyaW5nKGV4ZWMpKSkpOwogICAgICAgICBjYXNlIFRvTG9jYWxlU3RyaW5nOgpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0
X29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5oCTExIERlYyAy
MDA1IDAyOjA1OjQ2IC0wMDAwCTEuMTEKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2Jq
ZWN0LmgJMTEgRGVjIDIwMDUgMTE6NTQ6MjUgLTAwMDAKQEAgLTUyLDcgKzUyLDggQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDYWxsKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwg
Y29uc3QgTGlzdCAmYXJncyk7CiAKLSAgICBlbnVtIHsgVG9TdHJpbmcsIFRvTG9jYWxlU3RyaW5n
LCBWYWx1ZU9mLCBIYXNPd25Qcm9wZXJ0eSwgUHJvcGVydHlJc0VudW1lcmFibGUgfTsKKyAgICBl
bnVtIHsgVG9TdHJpbmcsIFRvTG9jYWxlU3RyaW5nLCBWYWx1ZU9mLCBIYXNPd25Qcm9wZXJ0eSwg
UHJvcGVydHlJc0VudW1lcmFibGUsCisgICAgICAgICAgIERlZmluZUdldHRlciwgRGVmaW5lU2V0
dGVyLCBMb29rdXBHZXR0ZXIsIExvb2t1cFNldHRlciB9OwogICBwcml2YXRlOgogICAgIGludCBp
ZDsKICAgfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Ns
b3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBKYXZhU2Ny
aXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9w
ZXJ0eV9zbG90LmNwcAkxMSBEZWMgMjAwNSAwMjowNTo0NyAtMDAwMAkxLjUKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmNwcAkxMSBEZWMgMjAwNSAxMTo1NDoyNSAtMDAwMApA
QCAtMjMsNiArMjMsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicHJvcGVy
dHlfc2xvdC5oIgorI2luY2x1ZGUgInZhbHVlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCiAKIG5h
bWVzcGFjZSBLSlMgewogCkBAIC0zMSw0ICszMyw5IEBAIEpTVmFsdWUgKlByb3BlcnR5U2xvdDo6
dW5kZWZpbmVkR2V0dGVyKEUKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAorSlNWYWx1
ZSAqUHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IHJldHVybiBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jLT5jYWxsKGV4ZWMsIHNsb3QubV9zbG90QmFz
ZSwgTGlzdCgpKTsKK30KKwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Ns
b3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3By
b3BlcnR5X3Nsb3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXIxLjcg
SmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuaAotLS0gSmF2YVNjcmlwdENvcmUva2pz
L3Byb3BlcnR5X3Nsb3QuaAkxMSBEZWMgMjAwNSAwMjowNTo0NyAtMDAwMAkxLjcKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmgJMTEgRGVjIDIwMDUgMTE6NTQ6MjUgLTAwMDAK
QEAgLTg4LDYgKzg4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9nZXRWYWx1ZSA9IHVuZGVmaW5l
ZEdldHRlcjsKICAgICB9CiAKKyAgICB2b2lkIHNldEdldHRlclNsb3QoSlNPYmplY3QgKnNsb3RC
YXNlLCBKU09iamVjdCAqZ2V0dGVyRnVuYykKKyAgICB7CisgICAgICAgIG1fZ2V0VmFsdWUgPSBm
dW5jdGlvbkdldHRlcjsKKyAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOworICAgICAgICBt
X2RhdGEuZ2V0dGVyRnVuYyA9IGdldHRlckZ1bmM7CisgICAgfQorICAgIAogICAgIEpTT2JqZWN0
ICpzbG90QmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2xvdEJhc2U7IH0KIAogICAgIGNvbnN0IEhh
c2hFbnRyeSAqc3RhdGljRW50cnkoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuc3RhdGljRW50cnk7
IH0KQEAgLTk1LDExICsxMDIsMTMgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHN0YXRpYyBK
U1ZhbHVlICp1bmRlZmluZWRHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqZnVuY3Rpb25HZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
CiAKICAgICBHZXRWYWx1ZUZ1bmMgbV9nZXRWYWx1ZTsKIAogICAgIEpTT2JqZWN0ICptX3Nsb3RC
YXNlOwogICAgIHVuaW9uIHsKKyAgICAgICAgSlNPYmplY3QgKmdldHRlckZ1bmM7CiAgICAgICAg
IEpTVmFsdWUgKip2YWx1ZVNsb3Q7CiAgICAgICAgIGNvbnN0IEhhc2hFbnRyeSAqc3RhdGljRW50
cnk7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy92
YWx1ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM5CmRpZmYgLXAgLXUgLXIxLjM5IEphdmFT
Y3JpcHRDb3JlL2tqcy92YWx1ZS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaAkxMSBE
ZWMgMjAwNSAwMjowNTo0OSAtMDAwMAkxLjM5CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUu
aAkxMSBEZWMgMjAwNSAxMTo1NDoyNSAtMDAwMApAQCAtNTQsNyArNTQsOCBAQCBlbnVtIFR5cGUg
ewogICAgIEJvb2xlYW5UeXBlICAgICAgID0gMywKICAgICBTdHJpbmdUeXBlICAgICAgICA9IDQs
CiAgICAgTnVtYmVyVHlwZSAgICAgICAgPSA1LAotICAgIE9iamVjdFR5cGUgICAgICAgID0gNgor
ICAgIE9iamVjdFR5cGUgICAgICAgID0gNiwKKyAgICBHZXR0ZXJTZXR0ZXJUeXBlICA9IDcKIH07
CiAKIC8qKgpAQCAtMTMyLDYgKzEzMyw3IEBAIGNsYXNzIEpTQ2VsbCA6IHB1YmxpYyBKU1ZhbHVl
IHsKICAgICBmcmllbmQgY2xhc3MgTnVtYmVySW1wOwogICAgIGZyaWVuZCBjbGFzcyBTdHJpbmdJ
bXA7CiAgICAgZnJpZW5kIGNsYXNzIEpTT2JqZWN0OworICAgIGZyaWVuZCBjbGFzcyBHZXR0ZXJT
ZXR0ZXJJbXA7CiBwcml2YXRlOgogICAgIEpTQ2VsbCgpOwogICAgIHZpcnR1YWwgfkpTQ2VsbCgp
OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9MYXlvdXRUZXN0cy9DaGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM5CmRp
ZmYgLXAgLXUgLXIxLjEzOSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkxMSBEZWMgMjAwNSAxMTo0NzozOSAtMDAwMAkxLjEzOQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCTExIERlYyAyMDA1IDExOjU0OjQ1IC0wMDAwCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MDUtMTItMTEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQG1hYy5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGQgdGVzdCBmb3IgaHR0
cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD02MDQxCisgICAgICAg
IAorICAgICAgICAqIGZhc3QvanMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0dGVycy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0
dGVycy5odG1sOiBBZGRlZC4KKwogMjAwNS0xMi0xMSAgRXJpYyBTZWlkZWwgIDxlc2VpZGVsQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBkYXJpbiAmIG1qcy4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0dGVycy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogZmFzdC9qcy9wcm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJz
LWV4cGVjdGVkLnR4dApkaWZmIC1OIExheW91dFRlc3RzL2Zhc3QvanMvcHJvcGVydHktZ2V0dGVy
cy1hbmQtc2V0dGVycy1leHBlY3RlZC50eHQKLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcHJvcGVy
dHktZ2V0dGVycy1hbmQtc2V0dGVycy1leHBlY3RlZC50eHQJMSBKYW4gMTk3MCAwMDowMDowMCAt
MDAwMAorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9wcm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJz
LWV4cGVjdGVkLnR4dAkxMSBEZWMgMjAwNSAxMTo1NDo1MiAtMDAwMApAQCAtMCwwICsxLDMgQEAK
K1RoaXMgcGVyZm9ybXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IHRlc3RzIG9uIEphdmFTY3JpcHQg
Z2V0dGVycyBhbmQgc2V0dGVycy4gSWYgdGhpcyB0ZXN0IGlzIHN1Y2Nlc3NmdWwsIHRoZSB0ZXh0
ICJTVUNDRVNTIiBzaG91bGQgYmUgc2hvd24gYmVsb3cuIE90aGVyd2lzZSwgIkZBSUxVUkUiIGFu
ZCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZSBpcyBzaG93bi4KK1NVQ0NFU1MhCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0dGVycy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IGZhc3QvanMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0dGVycy5o
dG1sCmRpZmYgLU4gTGF5b3V0VGVzdHMvZmFzdC9qcy9wcm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0
ZXJzLmh0bWwKLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0
dGVycy5odG1sCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIExheW91dFRlc3RzL2Zhc3Qv
anMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0dGVycy5odG1sCTExIERlYyAyMDA1IDExOjU0OjUy
IC0wMDAwCkBAIC0wLDAgKzEsMTM4IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0
aW9uIGRlYnVnKHN0cikgeworICAgIHZhciBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nv
bnNvbGUnKQorICAgIGMuaW5uZXJIVE1MICs9IChzdHIgKyAiPGJyPiIpCit9CisKKworZnVuY3Rp
b24gcnVuVGVzdHMoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAKKyAgICAv
LyB0aGUgZ2V0IHNldCBvYmplY3QgZGVjbGFyYXRpb24gc3ludGF4CisgICAgdmFyIG8xID0geyAn
YSc6NywgZ2V0IGIoKSB7IHJldHVybiB0aGlzLmEgKyAxIH0sIHNldCBiKHgpIHsgdGhpcy5hID0g
eCB9IH0KKyAgICBpZiAobzEuYiAhPSA4KSB7CisgICAgICAgIGRlYnVnKCdGQUlMVVJFOiBnZXQg
ZnVuY3Rpb24gZGlkIG5vdCByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUnKQorICAgICAgICByZXR1
cm47CisgICAgfQorICAgIG8xLmIgPSAxMDsKKyAgICBpZiAobzEuYiAhPSAxMSkgeworICAgICAg
ICBkZWJ1ZygnRkFJTFVSRTogZ2V0IGZ1bmN0aW9uIGRpZCBub3QgcmV0dXJuIHRoZSBjb3JyZWN0
IHZhbHVlJykKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBfX2RlZmluZUdl
dHRlcl9fIGFuZCBfX2RlZmluZVNldHRlcl9fCisgICAgdmFyIG8yID0gbmV3IE9iamVjdCgpCisg
ICAgbzIuYSA9IDc7CisgICAgbzIuX19kZWZpbmVHZXR0ZXJfXygnYicsIGZ1bmN0aW9uIGdldEIo
KSB7IHJldHVybiB0aGlzLmEgKyAxfSApCisgICAgbzIuX19kZWZpbmVTZXR0ZXJfXygnYicsIGZ1
bmN0aW9uIHNldEIoeCkgeyB0aGlzLmEgPSB4fSkKKyAgICBpZiAobzIuYiAhPSA4KSB7CisgICAg
ICAgICAgIGRlYnVnKCdGQUlMVVJFOiBnZXQgZnVuY3Rpb24gZGlkIG5vdCByZXR1cm4gdGhlIGNv
cnJlY3QgdmFsdWUnKQorICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIG8yLmIgPSAxMDsK
KyAgICBpZiAobzIuYiAhPSAxMSkgeworICAgICAgICBkZWJ1ZygnRkFJTFVSRTogZ2V0IGZ1bmN0
aW9uIGRpZCBub3QgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlJykKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0gICAKKyAgICAKKyAgICAvLyBTZXR0aW5nIGEgdmFsdWUgd2l0aG91dCBoYXZpbmcgYSBz
ZXR0ZXIKKyAgICB2YXIgbzMgPSB7IGdldCB4KCkgeyByZXR1cm4gNDI7IH0gfQorICAgIHZhciBu
dW1FeGNlcHRpb25zID0gMDsKKyAgICB0cnkgeworICAgICAgICBvMy54ID0gMTA7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICBudW1FeGNlcHRpb25zKys7CisgICAgfQorICAgIAorICAgIGlm
IChudW1FeGNlcHRpb25zICE9IDEpIHsKKyAgICAgICAgZGVidWcoJ0ZBSUxVUkU6IFNldHRpbmcg
YSB2YWx1ZSB3aXRob3V0IGEgc2V0dGVyIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uJykKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBHZXR0aW5nIGEgdmFsdWUgd2l0aG91
dCBoYXZpbmcgYSBnZXR0ZXIKKyAgICB2YXIgbzQgPSB7IHNldCB4KHkpIHsgfX0KKyAgICBpZiAo
bzQueCAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgZGVidWcoJ0ZBSUxVUkU6IEdldHRpbmcgYSB2
YWx1ZSB3aXRob3V0IGEgZ2V0dGVyIGRpZCBub3QgcmV0dXJuIHVuZGVmaW5lZCcpCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBfX2xvb2t1cEdldHRlcl9fIGFuZCBfX2xvb2t1cFNl
dHRlcl9fCisgICAgdmFyIG80ID0gbmV3IE9iamVjdCgpCisgICAgZnVuY3Rpb24gZ2V0QigpIHsg
cmV0dXJuIHRoaXMuYSB9CisgICAgZnVuY3Rpb24gc2V0Qih4KSB7IHRoaXMuYSA9IHggfQorICAg
IG80Ll9fZGVmaW5lR2V0dGVyX18oJ2InLCBnZXRCKQorICAgIG80Ll9fZGVmaW5lU2V0dGVyX18o
J2InLCBzZXRCKQorICAgIAorICAgIGlmIChvNC5fX2xvb2t1cEdldHRlcl9fKCdiJykgIT0gZ2V0
QikgeworICAgICAgICBkZWJ1ZygnRkFJTFVSRTogX19sb29rdXBHZXR0ZXJfXyBkaWQgbm90IHJl
dHVybiB0aGUgY29ycmVjdCBmdW5jdGlvbicpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKG80Ll9fbG9va3VwU2V0dGVyX18oJ2InKSAhPSBzZXRCKSB7CisgICAgICAgIGRlYnVnKCdG
QUlMVVJFOiBfX2xvb2t1cFNldHRlcl9fIGRpZCBub3QgcmV0dXJuIHRoZSBjb3JyZWN0IGZ1bmN0
aW9uJykKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBfX2RlZmluZUdldHRl
cl9fIGFuZCBfX2RlZmluZVNldHRlcl9fIHdpdGggdmFyaW91cyBpbnZhbGlkIGFyZ3VtZW50cwor
ICAgIHZhciBudW1FeGNlcHRpb25zID0gMDsKKyAgICB2YXIgbzUgPSBuZXcgT2JqZWN0KCk7Cisg
ICAgdHJ5IHsgbzUuX19kZWZpbmVTZXR0ZXJfXygnYScsIG51bGwpIH0gY2F0Y2ggKGUpIHsgbnVt
RXhjZXB0aW9ucysrOyB9CisgICAgdHJ5IHsgbzUuX19kZWZpbmVTZXR0ZXJfXygnYScsIG81KSB9
IGNhdGNoIChlKSB7IG51bUV4Y2VwdGlvbnMrKzsgfQorICAgIHRyeSB7IG81Ll9fZGVmaW5lR2V0
dGVyX18oJ2EnLCBudWxsKSB9IGNhdGNoIChlKSB7IG51bUV4Y2VwdGlvbnMrKzsgfQorICAgIHRy
eSB7IG81Ll9fZGVmaW5lR2V0dGVyX18oJ2EnLCBvNSkgfSBjYXRjaCAoZSkgeyBudW1FeGNlcHRp
b25zKys7IH0KKyAgICAKKyAgICBpZiAobnVtRXhjZXB0aW9ucyAhPSA0KSB7CisgICAgICAgIGRl
YnVnKCdGQUlMVVJFOiBvbmUgb2YgdGhlIGludmFsaWQgZ2V0dGVyL3NldHRlciBkZWZpbml0aW9u
cyBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbicpCisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgLy8gc2V0dGVycyBhbmQgZ2V0dGVycyB3aXRoIGV4Y2VwdGlvbnMKKyAgICB2YXIg
bzYgPSB7IGdldCB4KCkgeyB0aHJvdyAnRXhjZXB0aW9uIGluIGdldCd9LCBzZXQgeChmKSB7IHRo
cm93ICdFeGNlcHRpb24gaW4gc2V0J319CisgICAgdmFyIHggPSAwOworICAgIHZhciBudW1FeGNl
cHRpb25zID0gMDsKKyAgICB0cnkgeworICAgICAgICB4ID0gbzYueDsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgIG51bUV4Y2VwdGlvbnMrKzsKKyAgICAgICAgaWYgKHggIT0gMCkgeworICAg
ICAgICAgICAgZGVidWcoJ0ZBSUxVUkU6IHggd2FzIHVwZGF0ZWQgZXZlbiB0aG91Z2ggdGhlIGdl
dHRlciB0aHJldyBhbiBleGNlcHRpb24nKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIGlmIChudW1FeGNlcHRpb25zICE9IDEpIHsKKyAgICAgICAgZGVi
dWcoJ0ZBSUxVUkU6IGRpZCBub3QgZ2V0IGFuIGV4Y2VwdGlvbiBldmVuIHRob3VnaCB0aGUgeCBn
ZXR0ZXIgdGhyZXcgb25lJykKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2YXIgbnVtRXhj
ZXB0aW9ucyA9IDA7CisgICAgdHJ5IHsKKyAgICAgICAgbzYueCA9IDQyOworICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgbnVtRXhjZXB0aW9ucysrOworICAgIH0KKyAgICBpZiAobnVtRXhjZXB0
aW9ucyAhPSAxKSB7CisgICAgICAgIGRlYnVnKCdGQUlMVVJFOiBkaWQgbm90IGdldCBhbiBleGNl
cHRpb24gZXZlbiB0aG91Z2ggdGhlIHggc2V0dGVyIHRocmV3IG9uZScpCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBEZWZpbmluZyBhIHNldHRlciBzaG91bGQgYWxzbyBkZWZpbmUg
YSBnZXR0ZXIgZm9yIHRoZSBzYW1lIHByb3BlcnR5CisgICAgLy8gd2hpY2ggcmV0dXJucyB1bmRl
ZmluZWQuIFRodXMsIGEgZ2V0dGVyIGRlZmluZWQgb24gdGhlIHByb3RvdHlwZSBzaG91bGQgbm90
CisgICAgLy8gYmUgY2FsbGVkLgorICAgIG82ID0geyAnYSc6Nywgc2V0IHgoYikgeyB0aGlzLmEg
PSBiOyB9fQorICAgIG82LnByb3RvdHlwZSA9IHsgZ2V0IHgoKSB7IHJldHVybiA0MjsgfX0KKyAg
ICAKKyAgICBpZiAobzYueCAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgZGVidWcoJ0ZBSUxVUkU6
IHggc2hvdWxkIGJlIHVuZGVmaW5lZCEnKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGRlYnVnKCdTVUNDRVNTIScpCit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0i
cnVuVGVzdHMoKTsiPgorVGhpcyBwZXJmb3JtcyBhIG51bWJlciBvZiBkaWZmZXJlbnQgdGVzdHMg
b24gSmF2YVNjcmlwdCBnZXR0ZXJzIGFuZCBzZXR0ZXJzLiBJZiB0aGlzIHRlc3QgaXMgc3VjY2Vz
c2Z1bCwgdGhlIHRleHQgIlNVQ0NFU1MiIHNob3VsZCBiZSBzaG93biBiZWxvdy4gT3RoZXJ3aXNl
LCAiRkFJTFVSRSIgYW5kIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlIGlzIHNob3duLgorPHBy
ZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQo=
</data>
<flag name="review"
          id="984"
          type_id="1"
          status="-"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>5034</attachid>
            <date>2005-12-11 08:43:48 -0800</date>
            <delta_ts>2005-12-11 08:43:48 -0800</delta_ts>
            <desc>Make params an optional, last argument</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>1021</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">VGhlcmUgaXMgb25seSBvbmUgY29uc3RydWN0b3IgZm9yIHRoZSBGdW5jRXhwck5vZGUgY2xhc3Mg
KG5vZGVzLmgpOgoKICAgIEZ1bmNFeHByTm9kZShjb25zdCBJZGVudGlmaWVyICZpLCBGdW5jdGlv
bkJvZHlOb2RlICpiLCBQYXJhbWV0ZXJOb2RlICpwID0gMCkKICAgICAgOiBpZGVudChpKSwgYm9k
eShiKSwgcGFyYW0ocCA/IHAtPm5leHQgOiAwKSB7IGlmIChwKSBwLT5uZXh0ID0gMDsgfQoKU2lu
Y2UgdGhlIGFyZ3VtZW50IG9yZGVyIGlzIHN3aXRjaGVkLCBzbyBpcyB0aGUgaW5pdGlhbGl6YXRp
b24gb3JkZXIsIHNvIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgZGVjbGFyYXRpb24gb3JkZXIgaW4g
dGhlIGNsYXNzIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZyb20gY29tcGxhaW5pbmcgKG5vZGVz
LmgpOgoKICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5OwogICAgUmVmUHRyPFBhcmFt
ZXRlck5vZGU+IHBhcmFtOwoKWW91IGFsc28gbmVlZCB0byBjaGFuZ2UgdGhlIGFyZ3VtZW50IG9y
ZGVyIHVzZWQgYnkgdGhlIHBhcnNlciAoZ3JhbW1hci55KToKCkZ1bmN0aW9uRXhwcjoKICAgIEZV
TkNUSU9OICcoJyAnKScgRnVuY3Rpb25Cb2R5ICAgICAgIHsgJCQgPSBuZXcgRnVuY0V4cHJOb2Rl
KElkZW50aWZpZXI6Om51bGwoKSwgJDQpOyB9CiAgfCBGVU5DVElPTiAnKCcgRm9ybWFsUGFyYW1l
dGVyTGlzdCAnKScgRnVuY3Rpb25Cb2R5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICQkID0gbmV3IEZ1bmNFeHByTm9kZShJZGVudGlmaWVyOjpudWxsKCksICQ1LCAk
Myk7IH0KICB8IEZVTkNUSU9OIElERU5UICcoJyAnKScgRnVuY3Rpb25Cb2R5IHsgJCQgPSBuZXcg
RnVuY0V4cHJOb2RlKCokMiwgJDUpOyB9CiAgfCBGVU5DVElPTiBJREVOVCAnKCcgRm9ybWFsUGFy
YW1ldGVyTGlzdCAnKScgRnVuY3Rpb25Cb2R5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7ICQkID0gbmV3IEZ1bmNFeHByTm9kZSgqJDIsICQ2LCAkNCk7IH0KOw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5055</attachid>
            <date>2005-12-12 15:08:22 -0800</date>
            <delta_ts>2005-12-13 12:29:50 -0800</delta_ts>
            <desc>Address comments</desc>
            <filename>jscore-getters-setters-2.diff</filename>
            <type>text/plain</type>
            <size>101810</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg5
OApkaWZmIC1wIC11IC1yMS44OTggSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCi0tLSBKYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJMTEgRGVjIDIwMDUgMDI6MDU6MjkgLTAwMDAJMS44OTgKKysrIEph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkxMiBEZWMgMjAwNSAyMzowNDoyNiAtMDAwMApAQCAtMSwz
ICsxLDE4OSBAQAorMjAwNS0xMi0xMiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAbWFjLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEZp
eGVzIDxodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDE+
CisgICAgICAgIAorICAgICAgICAqIGJpbmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwOgorICAgICAg
ICAoUnVudGltZUFycmF5OjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoUnVudGltZUFycmF5Ojpp
bmRleEdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvcnVudGltZV9hcnJheS5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmNwcDoKKyAgICAgICAgKFJ1bnRpbWVNZXRob2Q6
Omxlbmd0aEdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvcnVudGltZV9tZXRob2QuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChSdW50aW1lT2Jq
ZWN0SW1wOjpmYWxsYmFja09iamVjdEdldHRlcik6CisgICAgICAgIChSdW50aW1lT2JqZWN0SW1w
OjpmaWVsZEdldHRlcik6CisgICAgICAgIChSdW50aW1lT2JqZWN0SW1wOjptZXRob2RHZXR0ZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL3J1bnRpbWVfb2JqZWN0Lmg6CisgICAgICAgICoga2pzL2Fy
cmF5X2luc3RhbmNlLmg6CisgICAgICAgICoga2pzL2FycmF5X29iamVjdC5jcHA6CisgICAgICAg
IChBcnJheUluc3RhbmNlOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoZ2V0UHJvcGVydHkpOgor
ICAgICAgICBVcGRhdGUgZm9yIGNoYW5nZXMgdG8gUHJvcGVydHlTbG90OjpnZXRWYWx1ZSBhbmQK
KyAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMuCisgICAgICAgIAorICAgICAgICAq
IGtqcy9jb2xsZWN0b3IuY3BwOgorICAgICAgICAoS0pTOjpjbGFzc05hbWUpOgorICAgICAgICBI
YW5kbGUgR2V0dGVyU2V0dGVyVHlwZS4KKyAgICAgICAgCisgICAgICAgICoga2pzL2Z1bmN0aW9u
LmNwcDoKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25JbXA6OmFyZ3VtZW50c0dldHRlcik6CisgICAg
ICAgIChLSlM6OkZ1bmN0aW9uSW1wOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoS0pTOjpBcmd1
bWVudHM6Om1hcHBlZEluZGV4R2V0dGVyKToKKyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6
YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAgKiBranMvZnVuY3Rpb24uaDoKKyAgICAgICAgVXBk
YXRlIGZvciBjaGFuZ2VzIHRvIFByb3BlcnR5U2xvdDo6Z2V0VmFsdWUgYW5kCisgICAgICAgIFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jLgorICAgICAgICAKKyAgICAgICAgKiBranMvZ3JhbW1h
ci55OgorICAgICAgICBSZXdvcmsgZ3JhbW1hciBwYXJ0cyBmb3IgZ2V0IHNldCBkZWNsYXJhdGlv
bnMgZGlyZWN0bHkKKyAgICAgICAgaW4gdGhlIG9iamVjdCBsaXRlcmFsLgorICAgICAgICAKKyAg
ICAgICAgKiBranMvaW50ZXJuYWwuY3BwOgorICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6
Om1hcmspOgorICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6OnRvUHJpbWl0aXZlKToKKyAg
ICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1wOjp0b0Jvb2xlYW4pOgorICAgICAgICAoS0pTOjpH
ZXR0ZXJTZXR0ZXJJbXA6OnRvTnVtYmVyKToKKyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1w
Ojp0b1N0cmluZyk6CisgICAgICAgIChLSlM6OkdldHRlclNldHRlckltcDo6dG9PYmplY3QpOgor
ICAgICAgICBBZGQgdHlwZSBjb252ZXJzaW9uIGZ1bmN0aW9ucy4gVGhlc2UgYXJlbid0IG1lYW50
IHRvIGJlIGNhbGxlZC4KKyAgICAgICAgCisgICAgICAgIChLSlM6OnByaW50SW5mbyk6CisgICAg
ICAgIEhhbmRsZSBHZXR0ZXJTZXR0ZXJUeXBlLgorICAgICAgICAKKyAgICAgICAgKiBranMvbG9v
a3VwLmg6ICAgICAgICAKKyAgICAgICAgKEtKUzo6c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAg
ICAgICAoS0pTOjpzdGF0aWNWYWx1ZUdldHRlcik6CisgICAgICAgIFVwZGF0ZSBmb3IgY2hhbmdl
cyB0byBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYy4KKyAgICAgICAgCisgICAgICAgICoga2pz
L25vZGVzLmNwcDoKKyAgICAgICAgUmVmYWN0b3IgdGhleSB3YXkgcHJvcGVydGllcyBub2RlcyBh
cmUgaW1wbGVtZW50ZWQuCisgICAgICAgIFdlIG5vdyBoYXZlIGEgUHJvcGVydHlMaXN0Tm9kZSB3
aGljaCBpcyBhIGxpc3Qgb2YgUHJvcGVydHlOb2Rlcy4KKyAgICAgICAgRWFjaCBQcm9wZXJ0eU5v
ZGUgaGFzIGEgbmFtZSAod2hpY2ggaXMgYSBQcm9wZXJ0eU5hbWVOb2RlKSBhbmQgYW4gYXNzb2Np
YXRlZAorICAgICAgICB2YWx1ZSBub2RlLiBQcm9wZXJ0eU5vZGVzIGNhbiBiZSBvZiBkaWZmZXJl
bnQgdHlwZXMuIFRoZSBDb25zdGFudCB0eXBlIGlzIHRoZQorICAgICAgICBvbGQgY29uc3RhbnQg
ZGVjbGFyYXRpb24gYW5kIHRoZSBHZXR0ZXIgYW5kIFNldHRlciB0eXBlcyBhcmUgZm9yIHByb3Bl
cnR5IGdldHRlcnMKKyAgICAgICAgYW5kIHNldHRlcnMuCisgICAgICAgIChSZXNvbHZlTm9kZTo6
ZXZhbHVhdGUpOgorICAgICAgICBVcGRhdGUgZm9yIGNoYW5nZXMgdG8gUHJvcGVydHlTbG90Ojpn
ZXRWYWx1ZS4KKyAgICAgICAgCisgICAgICAgIChQcm9wZXJ0eUxpc3ROb2RlOjpldmFsdWF0ZSk6
CisgICAgICAgIEdvIHRocm91Z2ggYWxsIHByb3BlcnR5IG5vZGVzIGFuZCBzZXQgdGhlbSBvbiB0
aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuIElmIHRoZQorICAgICAgICBwcm9wZXJ0eSBub2RlcyBh
cmUgb2YgdHlwZSBHZXR0ZXIgb3IgU2V0dGVyLCBkZWZpbmUgZ2V0dGVycyBhbmQgc2V0dGVycy4g
T3RoZXJ3aXNlLAorICAgICAgICBqdXN0IGFkZCB0aGUgcHJvcGVydGllcyBsaWtlIGJlZm9yZS4K
KyAgICAgICAgCisgICAgICAgIChQcm9wZXJ0eU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgVGhp
cyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGRpcmVjdGx5LgorICAgICAgICAKKyAgICAgICAgKFBy
b3BlcnR5TmFtZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgUmVuYW1lIGZyb20gUHJvcGVydHlO
b2RlOjpldmFsdWF0ZS4KKyAgICAgICAgCisgICAgICAgIChGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZTo6ZXZhbHVhdGUpOgorICAgICAgICAoRnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmV2YWx1YXRl
KToKKyAgICAgICAgKEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKFBv
c3RmaXhSZXNvbHZlTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoUG9zdGZpeEJyYWNrZXROb2Rl
OjpldmFsdWF0ZSk6CisgICAgICAgIChQb3N0Zml4RG90Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAg
ICAoVHlwZU9mUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKFByZWZpeFJlc29sdmVO
b2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChQcmVmaXhCcmFja2V0Tm9kZTo6ZXZhbHVhdGUpOgor
ICAgICAgICAoUHJlZml4RG90Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoQXNzaWduUmVzb2x2
ZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEFzc2lnbkRvdE5vZGU6OmV2YWx1YXRlKToKKyAg
ICAgICAgKEFzc2lnbkJyYWNrZXROb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIFVwZGF0ZSBmb3Ig
Y2hhbmdlcyB0byBQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlLgorICAgICAgICAKKyAgICAgICAgKiBr
anMvbm9kZXMuaDoKKyAgICAgICAgKEtKUzo6UHJvcGVydHlOYW1lTm9kZTo6UHJvcGVydHlOYW1l
Tm9kZSk6CisgICAgICAgIFJlbmFtZSBmcm9tIFByb3BlcnR5Tm9kZS4KKyAgICAgICAgCisgICAg
ICAgIChLSlM6OlByb3BlcnR5Tm9kZTo6KToKKyAgICAgICAgKEtKUzo6UHJvcGVydHlOb2RlOjpQ
cm9wZXJ0eU5vZGUpOgorICAgICAgICBOZXcgY2xhc3MsIHJlcHJlc2VudGluZyBhIHNpbmdsZSBw
cm9wZXJ0eS4KKyAgICAgICAgCisgICAgICAgIChLSlM6OlByb3BlcnR5TGlzdE5vZGU6OlByb3Bl
cnR5TGlzdE5vZGUpOgorICAgICAgICBSZW5hbWUgZnJvbSBQcm9wZXJ0eVZhbHVlTm9kZS4KKyAg
ICAgICAgCisgICAgICAgIChLSlM6OkZ1bmNFeHByTm9kZTo6RnVuY0V4cHJOb2RlKToKKyAgICAg
ICAgUHV0IFBhcmFtZXRlck5vZGUgcGFyYW1ldGVyIGxhc3QsIGFuZCBtYWtlIGl0IG9wdGlvbmFs
LgorICAgICAgICAKKyAgICAgICAgKEtKUzo6T2JqZWN0TGl0ZXJhbE5vZGU6Ok9iamVjdExpdGVy
YWxOb2RlKToKKyAgICAgICAgVXNlIGEgUHJvcGVydHlMaXN0Tm9kZSBoZXJlIG5vdy4KKyAgICAg
ICAgCisgICAgICAgICoga2pzL25vZGVzMnN0cmluZy5jcHA6CisgICAgICAgIChQcm9wZXJ0eUxp
c3ROb2RlOjpzdHJlYW1Ubyk6CisgICAgICAgIEl0ZXJhdGUgdGhyb3VnaCBhbGwgcHJvcGVydHkg
bm9kZXMuCisgICAgICAgIAorICAgICAgICAoUHJvcGVydHlOb2RlOjpzdHJlYW1Ubyk6CisgICAg
ICAgIFByaW50IG91dCB0aGUgbmFtZSBhbmQgdmFsdWUuIERvZXNuJ3QgaGFuZGxlIGdldHRlcnMg
YW5kIHNldHRlcnMgY3VycmVudGx5LgorICAgICAgICAKKyAgICAgICAgKFByb3BlcnR5TmFtZU5v
ZGU6OnN0cmVhbVRvKToKKyAgICAgICAgUmVuYW1lIGZyb20gUHJvcGVydHlOb2RlOjpzdHJlYW1U
by4KKyAgICAgICAgCisgICAgICAgICoga2pzL29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkpT
T2JqZWN0OjpnZXQpOgorICAgICAgICBVcGRhdGUgZm9yIGNoYW5nZXMgdG8gUHJvcGVydHlTbG90
OjpnZXRWYWx1ZS4KKyAgICAgICAgCisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpwdXQpOgorICAg
ICAgICBJZiB0aGUgcHJvcGVydHkgYWxyZWFkeSBleGlzdHMgYW5kIGhhcyBhIFNldHRlciwgaW52
b2tlCisgICAgICAgIHRoZSBzZXR0ZXIgZnVuY3Rpb24gaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBw
cm9wZXJ0eSBkaXJlY3RseS4KKyAgICAgICAgCisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpkZWZp
bmVHZXR0ZXIpOgorICAgICAgICAoS0pTOjpKU09iamVjdDo6ZGVmaW5lU2V0dGVyKToKKyAgICAg
ICAgTmV3IGZ1bmN0aW9ucyBmb3IgZGVmaW5pbmcgcHJvcGVydHkgZ2V0dGVycyBhbmQgc2V0dGVy
cyBvbiB0aGUgb2JqZWN0LgorICAgICAgICAKKyAgICAgICAgKiBranMvb2JqZWN0Lmg6CisgICAg
ICAgIChLSlM6OkdldHRlclNldHRlckltcDo6dHlwZSk6CisgICAgICAgIChLSlM6OkdldHRlclNl
dHRlckltcDo6R2V0dGVyU2V0dGVySW1wKToKKyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1w
OjpnZXRHZXR0ZXIpOgorICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6OnNldEdldHRlcik6
CisgICAgICAgIChLSlM6OkdldHRlclNldHRlckltcDo6Z2V0U2V0dGVyKToKKyAgICAgICAgKEtK
Uzo6R2V0dGVyU2V0dGVySW1wOjpzZXRTZXR0ZXIpOgorICAgICAgICBOZXcgY2xhc3MgZm9yIHBy
b3BlcnRpZXMgd2hpY2ggaGF2ZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGRlZmluZWQuCisgICAgICAg
IFRoaXMgY2xhc3MgaXMgb25seSB1c2VkIGludGVybmFsbHkgYW5kIHNob3VsZCBuZXZlciBiZSBz
ZWVuIGZyb20gdGhlIG91dHNpZGUuCisgICAgICAgIAorICAgICAgICAoS0pTOjpKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGdldHRl
ciwgY2FsbCBzZXRHZXR0ZXJTbG90IG9uIHRoZSBwcm9wZXJ0eSBzbG90LgorICAgICAgICAgCisg
ICAgICAgICoga2pzL29iamVjdF9vYmplY3QuY3BwOgorICAgICAgICAoT2JqZWN0UHJvdG90eXBl
OjpPYmplY3RQcm90b3R5cGUpOgorICAgICAgICBBZGQgX19kZWZpbmVHZXR0ZXJfXywgX19kZWZp
bmVTZXR0ZXIsIF9fbG9va3VwR2V0dGVyX18sIF9fbG9va3VwU2V0dGVyX18KKyAgICAgICAgdG8g
cHJvdG90eXBlLgorICAgICAgICAKKyAgICAgICAgKE9iamVjdFByb3RvRnVuYzo6Y2FsbEFzRnVu
Y3Rpb24pOgorICAgICAgICBJbXBsZW1lbnQgaGFuZGxlcnMgZm9yIG5ldyBmdW5jdGlvbnMuCisg
ICAgICAgIAorICAgICAgICAqIGtqcy9vYmplY3Rfb2JqZWN0Lmg6CisgICAgICAgIChLSlM6Ok9i
amVjdFByb3RvRnVuYzo6KToKKyAgICAgICAgQWRkIGlkcyBmb3IgbmV3IGZ1bmN0aW9ucy4KKyAg
ICAgICAgCisgICAgICAgICoga2pzL3Byb3BlcnR5X3Nsb3QuY3BwOgorICAgICAgICAoS0pTOjpQ
cm9wZXJ0eVNsb3Q6OnVuZGVmaW5lZEdldHRlcik6CisgICAgICAgIFVwZGF0ZSBmb3IgY2hhbmdl
cyB0byBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYy4KKyAgICAgICAgCisgICAgICAgIChLSlM6
OlByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICBDYWxsIHRoZSBmdW5jdGlv
biBnZXR0ZXIgb2JqZWN0IGFuZCByZXR1cm4gaXRzIHZhbHVlLgorICAgICAgICAKKyAgICAgICAg
KiBranMvcHJvcGVydHlfc2xvdC5oOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OmdldFZh
bHVlKToKKyAgICAgICAgQWRkIGEgbmV3IGFyZ3VtZW50IHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBv
YmplY3QgdGhhdAorICAgICAgICBnZXRQcm9wZXJ0eVNsb3Qgd2FzIGNhbGxlZCBvbi4KKyAgICAg
ICAgCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6c2V0R2V0dGVyU2xvdCk6CisgICAgICAg
IChLSlM6OlByb3BlcnR5U2xvdDo6KToKKyAgICAgICAgTmV3IGZ1bmN0aW9uIHdoaWNoIHNldHMg
YSBnZXR0ZXIgc2xvdC4gV2hlbiBnZXRWYWx1ZSBpcyBjYWxsZWQgb24gYSAKKyAgICAgICAgZ2V0
dGVyIHNsb3QsIHRoZSBnZXR0ZXIgZnVuY3Rpb24gb2JqZWN0IGlzIGludm9rZWQuCisgICAgICAg
IAorICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAgICAgICAgKFN0cmluZ0luc3Rh
bmNlOjpsZW5ndGhHZXR0ZXIpOgorICAgICAgICAoU3RyaW5nSW5zdGFuY2U6OmluZGV4R2V0dGVy
KToKKyAgICAgICAgKiBranMvc3RyaW5nX29iamVjdC5oOgorICAgICAgICBVcGRhdGUgZm9yIGNo
YW5nZXMgdG8gUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMuCisgICAgICAgIAorICAgICAgICAq
IGtqcy92YWx1ZS5oOgorICAgICAgICAoS0pTOjopOgorICAgICAgICBBZGQgR2V0dGVyU2V0dGVy
VHlwZSBhbmQgbWFrZSBHZXR0ZXJTZXR0ZXJJbXAgYSBmcmllbmQgY2xhc3Mgb2YgSlNDZWxsLgor
CiAyMDA1LTEyLTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
dWJiZXIgc3RhbXBlZCBieSBNYWNpZWouCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTQKZGlmZiAtcCAtdSAtcjEuMTQgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJh
eS5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwCTExIERl
YyAyMDA1IDAyOjA1OjMyIC0wMDAwCTEuMTQKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1
bnRpbWVfYXJyYXkuY3BwCTEyIERlYyAyMDA1IDIzOjA0OjI2IC0wMDAwCkBAIC00NCwxMyArNDQs
MTMgQEAgUnVudGltZUFycmF5Ojp+UnVudGltZUFycmF5KCkKICAgICBkZWxldGUgX2FycmF5Owog
fQogCi1KU1ZhbHVlICpSdW50aW1lQXJyYXk6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZSAqUnVudGltZUFycmF5OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBK
U09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFJ1bnRpbWVBcnJheSAqdGhpc09iaiA9
IHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJheSAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVy
biBqc051bWJlcih0aGlzT2JqLT5nZXRMZW5ndGgoKSk7CiB9CiAKLUpTVmFsdWUgKlJ1bnRpbWVB
cnJheTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKlJ1bnRpbWVBcnJh
eTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3Qs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIFJ1bnRpbWVBcnJheSAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJh
eSAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiB0aGlzT2JqLT5nZXRDb25jcmV0ZUFy
cmF5KCktPnZhbHVlQXQoZXhlYywgc2xvdC5pbmRleCgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
SmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEzCmRpZmYgLXAgLXUgLXIxLjEzIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWVfYXJyYXkuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5oCTEx
IERlYyAyMDA1IDAyOjA1OjMyIC0wMDAwCTEuMTMKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L3J1bnRpbWVfYXJyYXkuaAkxMiBEZWMgMjAwNSAyMzowNDoyNiAtMDAwMApAQCAtNTQsOCArNTQs
OCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCiBwcml2YXRl
OgotICAgIHN0YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqaW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09i
amVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICBCaW5kaW5nczo6QXJyYXkg
Kl9hcnJheTsKIH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhv
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL3J1bnRpbWVfbWV0aG9kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC1w
IC11IC1yMS4xNiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAKLS0t
IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmNwcAkxMSBEZWMgMjAwNSAw
MjowNTozMiAtMDAwMAkxLjE2CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21l
dGhvZC5jcHAJMTIgRGVjIDIwMDUgMjM6MDQ6MjYgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgUnVu
dGltZU1ldGhvZDo6flJ1bnRpbWVNZXRob2QoKQogewogfQogCi1KU1ZhbHVlICpSdW50aW1lTWV0
aG9kOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKlJ1bnRpbWVNZXRo
b2Q6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgUnVudGltZU1ldGhvZCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVN
ZXRob2QgKj4oc2xvdC5zbG90QmFzZSgpKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS44CmRpZmYgLXAgLXUgLXIxLjggSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRo
b2QuaAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuaAkxMSBEZWMg
MjAwNSAwMjowNTozMiAtMDAwMAkxLjgKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWVfbWV0aG9kLmgJMTIgRGVjIDIwMDUgMjM6MDQ6MjYgLTAwMDAKQEAgLTQ4LDcgKzQ4LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYyk7
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUgKmxlbmd0aEdldHRlcihFeGVjU3RhdGUg
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBK
U1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIEJpbmRpbmdzOjpNZXRob2RMaXN0
IF9tZXRob2RMaXN0OwogfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVf
b2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvcnVudGltZV9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMwCmRp
ZmYgLXAgLXUgLXIxLjMwIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmNw
cAotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9vYmplY3QuY3BwCTExIERlYyAy
MDA1IDAyOjA1OjMyIC0wMDAwCTEuMzAKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWVfb2JqZWN0LmNwcAkxMiBEZWMgMjAwNSAyMzowNDoyNiAtMDAwMApAQCAtNjEsNyArNjEsNyBA
QCBSdW50aW1lT2JqZWN0SW1wOjpSdW50aW1lT2JqZWN0SW1wKEJpbmRpCiAgICAgaW5zdGFuY2Ug
PSBpOwogfQogCi1KU1ZhbHVlICpSdW50aW1lT2JqZWN0SW1wOjpmYWxsYmFja09iamVjdEdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqUnVudGltZU9iamVjdEltcDo6ZmFsbGJhY2tP
YmplY3RHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIFJ1bnRpbWVPYmplY3RJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1lT2Jq
ZWN0SW1wICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgQmluZGluZ3M6Okluc3RhbmNlICppbnN0
YW5jZSA9IHRoaXNPYmotPmluc3RhbmNlOwpAQCAtNzYsNyArNzYsNyBAQCBKU1ZhbHVlICpSdW50
aW1lT2JqZWN0SW1wOjpmYWxsYmFja09iamVjCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNW
YWx1ZSAqUnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWUgKlJ1bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lT2JqZWN0SW1wICp0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdEltcCAqPihzbG90LnNsb3RCYXNlKCkpOwogICAg
IEJpbmRpbmdzOjpJbnN0YW5jZSAqaW5zdGFuY2UgPSB0aGlzT2JqLT5pbnN0YW5jZTsKQEAgLTky
LDcgKzkyLDcgQEAgSlNWYWx1ZSAqUnVudGltZU9iamVjdEltcDo6ZmllbGRHZXR0ZXIoRQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUgKlJ1bnRpbWVPYmplY3RJbXA6Om1ldGhvZEdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqUnVudGltZU9iamVjdEltcDo6bWV0aG9k
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBSdW50aW1lT2JqZWN0SW1wICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UnVudGltZU9iamVjdElt
cCAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIEJpbmRpbmdzOjpJbnN0YW5jZSAqaW5zdGFuY2Ug
PSB0aGlzT2JqLT5pbnN0YW5jZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWVfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgKZGlm
ZiAtcCAtdSAtcjEuMTggSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9vYmplY3QuaAot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9vYmplY3QuaAkxMSBEZWMgMjAwNSAw
MjowNTozMiAtMDAwMAkxLjE4CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29i
amVjdC5oCTEyIERlYyAyMDA1IDIzOjA0OjI2IC0wMDAwCkBAIC01Myw5ICs1Myw5IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIEpTVmFsdWUgKmZhbGxiYWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUgKmZpZWxk
R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUgKm1ldGhvZEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlICpm
YWxsYmFja09iamVjdEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlICpmaWVsZEdl
dHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlICptZXRob2RHZXR0ZXIoRXhlY1N0YXRl
ICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
IAogICAgIEJpbmRpbmdzOjpJbnN0YW5jZSAqaW5zdGFuY2U7CiAgICAgYm9vbCBvd25zSW5zdGFu
Y2U7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfaW5zdGFuY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3RhbmNlLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkKZGlmZiAtcCAtdSAtcjEuMTkgSmF2YVNjcmlwdENv
cmUva2pzL2FycmF5X2luc3RhbmNlLmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0
YW5jZS5oCTExIERlYyAyMDA1IDAyOjA1OjQxIC0wMDAwCTEuMTkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9hcnJheV9pbnN0YW5jZS5oCTEyIERlYyAyMDA1IDIzOjA0OjI2IC0wMDAwCkBAIC01Miw3
ICs1Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZvaWQgc29ydChFeGVjU3RhdGUgKmV4ZWMs
IEpTT2JqZWN0ICpjb21wYXJlRnVuY3Rpb24pOwogICAgIAogICBwcml2YXRlOgotICAgIHN0YXRp
YyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqbGVuZ3RoR2V0dGVyKEV4
ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7CiAKICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBuZXdMZW5ndGgsIEV4ZWNTdGF0
ZSAqZXhlYyk7CiAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2FycmF5
X29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTcKZGlmZiAtcCAtdSAtcjEuNTcg
SmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9hcnJheV9vYmplY3QuY3BwCTExIERlYyAyMDA1IDAyOjA1OjQxIC0wMDAwCTEuNTcKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCTEyIERlYyAyMDA1IDIzOjA0OjI2IC0w
MDAwCkBAIC03NCw3ICs3NCw3IEBAIEFycmF5SW5zdGFuY2U6On5BcnJheUluc3RhbmNlKCkKICAg
ZmFzdEZyZWUoc3RvcmFnZSk7CiB9CiAKLUpTVmFsdWUgKkFycmF5SW5zdGFuY2U6Omxlbmd0aEdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqQXJyYXlJbnN0YW5jZTo6bGVuZ3RoR2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgcmV0
dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PEFycmF5SW5zdGFuY2UgKj4oc2xvdC5zbG90QmFzZSgp
KS0+bGVuZ3RoKTsKIH0KQEAgLTQyOCw3ICs0MjgsNyBAQCBzdGF0aWMgSlNWYWx1ZSAqZ2V0UHJv
cGVydHkoRXhlY1N0YXRlICplCiAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgaWYgKCFvYmot
PmdldFByb3BlcnR5U2xvdChleGVjLCBpbmRleCwgc2xvdCkpCiAgICAgICAgIHJldHVybiBOVUxM
OwotICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIGluZGV4KTsKKyAgICByZXR1cm4gc2xv
dC5nZXRWYWx1ZShleGVjLCBvYmosIGluZGV4KTsKIH0KIAogLy8gRUNNQSAxNS40LjQKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41MwpkaWZmIC1wIC11IC1yMS41MyBKYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9y
LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAJMTEgRGVjIDIwMDUgMDI6
MDU6NDIgLTAwMDAJMS41MworKysgSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAJMTIg
RGVjIDIwMDUgMjM6MDQ6MjYgLTAwMDAKQEAgLTYwMCw2ICs2MDAsOSBAQCBzdGF0aWMgY29uc3Qg
Y2hhciAqY2xhc3NOYW1lKEpTQ2VsbCAqdmFsCiAgICAgICBuYW1lID0gaW5mbyA/IGluZm8tPmNs
YXNzTmFtZSA6ICJPYmplY3QiOwogICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgR2V0dGVy
U2V0dGVyVHlwZToKKyAgICAgIG5hbWUgPSAiZ2V0dGVyc2V0dGVyIjsKKyAgICAgIGJyZWFrOwog
ICB9CiAgIHJldHVybiBuYW1lOwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2Z1
bmN0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MwpkaWZmIC1wIC11IC1yMS42MyBK
YXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVu
Y3Rpb24uY3BwCTExIERlYyAyMDA1IDAyOjA1OjQzIC0wMDAwCTEuNjMKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9mdW5jdGlvbi5jcHAJMTIgRGVjIDIwMDUgMjM6MDQ6MjYgLTAwMDAKQEAgLTIwNiw3
ICsyMDYsNyBAQCB2b2lkIEZ1bmN0aW9uSW1wOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0CiB7CiB9
CiAKLUpTVmFsdWUgKkZ1bmN0aW9uSW1wOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWUgKkZ1bmN0aW9uSW1wOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBGdW5jdGlvbkltcCAqdGhpc09iaiA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIENvbnRleHRJ
bXAgKmNvbnRleHQgPSBleGVjLT5fY29udGV4dDsKQEAgLTIxOSw3ICsyMTksNyBAQCBKU1ZhbHVl
ICpGdW5jdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4CiAgIHJldHVybiBqc051bGwoKTsKIH0K
IAotSlNWYWx1ZSAqRnVuY3Rpb25JbXA6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQor
SlNWYWx1ZSAqRnVuY3Rpb25JbXA6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2Jq
ZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIEZ1bmN0aW9uSW1wICp0aGlzT2JqID0gc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25JbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgY29uc3QgUGFyYW1ldGVy
ICpwID0gdGhpc09iai0+cGFyYW07CkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBBcmd1bWVudHM6
Om1hcmsoKSAKICAgICBfYWN0aXZhdGlvbk9iamVjdC0+bWFyaygpOwogfQogCi1KU1ZhbHVlICpB
cmd1bWVudHM6Om1hcHBlZEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpB
cmd1bWVudHM6Om1hcHBlZEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9y
aWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgQXJndW1lbnRzICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8QXJn
dW1lbnRzICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIHJldHVybiB0aGlzT2JqLT5fYWN0aXZhdGlv
bk9iamVjdC0+Z2V0KGV4ZWMsIHRoaXNPYmotPmluZGV4VG9OYW1lTWFwW3Byb3BlcnR5TmFtZV0p
OwpAQCAtNDg5LDcgKzQ4OSw3IEBAIEFjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25JbXAoRnVuY3Rp
b25JbXAKICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gc3VwcG9ydCBlbnVtZXJhdGluZyB0aGUg
YXJndW1lbnRzIHByb3BlcnR5PwogfQogCi1KU1ZhbHVlICpBY3RpdmF0aW9uSW1wOjphcmd1bWVu
dHNHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkFjdGl2YXRpb25JbXA6OmFyZ3Vt
ZW50c0dldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgIEFjdGl2YXRpb25JbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wICo+
KHNsb3Quc2xvdEJhc2UoKSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rp
b24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNwpkaWZmIC1wIC11IC1yMS4zNyBKYXZhU2Ny
aXB0Q29yZS9ranMvZnVuY3Rpb24uaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJ
MTEgRGVjIDIwMDUgMDI6MDU6NDMgLTAwMDAJMS4zNworKysgSmF2YVNjcmlwdENvcmUva2pzL2Z1
bmN0aW9uLmgJMTIgRGVjIDIwMDUgMjM6MDQ6MjYgLTAwMDAKQEAgLTY0LDggKzY0LDggQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgSWRlbnRpZmllciBpZGVudDsKIAogICBwcml2YXRlOgotICAgIHN0
YXRpYyBKU1ZhbHVlICphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZp
ZXIgJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUgKmxlbmd0aEdl
dHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciAmLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09i
amVjdCAqLCBjb25zdCBJZGVudGlmaWVyICYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0
IElkZW50aWZpZXIgJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICB2b2lkIHByb2Nlc3NQ
YXJhbWV0ZXJzKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmKTsKICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CkBAIC0xMTUsNyArMTE1LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZv
OwogICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICptYXBwZWRJbmRleEdldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqbWFwcGVkSW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyICYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCk7CiAKICAgICBBY3RpdmF0aW9uSW1wICpfYWN0aXZhdGlvbk9iamVjdDsgCiAgICAgbXV0YWJs
ZSBJbmRleFRvTmFtZU1hcCBpbmRleFRvTmFtZU1hcDsKQEAgLTEzNiw3ICsxMzYsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICBib29sIGlzQWN0aXZhdGlvbigpIHsgcmV0dXJuIHRydWU7IH0KICAg
cHJpdmF0ZToKICAgICBzdGF0aWMgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0QXJndW1l
bnRzR2V0dGVyKCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgKmFyZ3VtZW50c0dldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSAqYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKiwgY29uc3QgSWRlbnRpZmllciAmLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwog
ICAgIHZvaWQgY3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAg
ICAgCiAgICAgRnVuY3Rpb25JbXAgKl9mdW5jdGlvbjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9ncmFtbWFyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3Jl
L2tqcy9ncmFtbWFyLnksdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtcCAtdSAtcjEu
MzEgSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2dy
YW1tYXIueQkyOCBTZXAgMjAwNSAxODo1MToxMyAtMDAwMAkxLjMxCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvZ3JhbW1hci55CTEyIERlYyAyMDA1IDIzOjA0OjI2IC0wMDAwCkBAIC01NCw2ICs1NCw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBzdGF0aWMgYm9vbCBtYWtlQXNzaWduTm9kZShOb2Rl
KiYgcmVzdWx0LCBOb2RlICpsb2MsIE9wZXJhdG9yIG9wLCBOb2RlICpleHByKTsKIHN0YXRpYyBi
b29sIG1ha2VQcmVmaXhOb2RlKE5vZGUqJiByZXN1bHQsIE5vZGUgKmV4cHIsIE9wZXJhdG9yIG9w
KTsKIHN0YXRpYyBib29sIG1ha2VQb3N0Zml4Tm9kZShOb2RlKiYgcmVzdWx0LCBOb2RlICpleHBy
LCBPcGVyYXRvciBvcCk7CitzdGF0aWMgYm9vbCBtYWtlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eU5v
ZGUoUHJvcGVydHlOb2RlKiYgcmVzdWx0LCBJZGVudGlmaWVyICZnZXRPclNldCwgSWRlbnRpZmll
ciYgbmFtZSwgUGFyYW1ldGVyTm9kZSAqcGFyYW1zLCBGdW5jdGlvbkJvZHlOb2RlICpib2R5KTsK
IHN0YXRpYyBOb2RlICptYWtlRnVuY3Rpb25DYWxsTm9kZShOb2RlICpmdW5jLCBBcmd1bWVudHNO
b2RlICphcmdzKTsKIHN0YXRpYyBOb2RlICptYWtlVHlwZU9mTm9kZShOb2RlICpleHByKTsKIHN0
YXRpYyBOb2RlICptYWtlRGVsZXRlTm9kZShOb2RlICpleHByKTsKQEAgLTg0LDggKzg1LDkgQEAg
c3RhdGljIE5vZGUgKm1ha2VEZWxldGVOb2RlKE5vZGUgKmV4cHIpOwogICBDYXNlQ2xhdXNlTm9k
ZSAgICAgICpjY2w7CiAgIEVsZW1lbnROb2RlICAgICAgICAgKmVsbTsKICAgT3BlcmF0b3IgICAg
ICAgICAgICBvcDsKLSAgUHJvcGVydHlWYWx1ZU5vZGUgICAqcGxpc3Q7Ci0gIFByb3BlcnR5Tm9k
ZSAgICAgICAgKnBub2RlOworICBQcm9wZXJ0eUxpc3ROb2RlICAgKnBsaXN0OworICBQcm9wZXJ0
eU5vZGUgICAgICAgKnBub2RlOworICBQcm9wZXJ0eU5hbWVOb2RlICAgKnBuYW1lOwogfQogCiAl
c3RhcnQgUHJvZ3JhbQpAQCAtMTc5LDkgKzE4MSw5IEBAIHN0YXRpYyBOb2RlICptYWtlRGVsZXRl
Tm9kZShOb2RlICpleHByKTsKICV0eXBlIDxjbGlzdD4gQ2FzZUNsYXVzZXMgIENhc2VDbGF1c2Vz
T3B0CiAldHlwZSA8aXZhbD4gIEVsaXNpb24gRWxpc2lvbk9wdAogJXR5cGUgPGVsbT4gICBFbGVt
ZW50TGlzdAotJXR5cGUgPHBsaXN0PiBQcm9wZXJ0eU5hbWVBbmRWYWx1ZUxpc3QKLSV0eXBlIDxw
bm9kZT4gUHJvcGVydHlOYW1lCi0KKyV0eXBlIDxwbmFtZT4gUHJvcGVydHlOYW1lCisldHlwZSA8
cG5vZGU+IFByb3BlcnR5CisldHlwZSA8cGxpc3Q+IFByb3BlcnR5TGlzdAogJSUKIAogTGl0ZXJh
bDoKQEAgLTIwMiwxMCArMjA0LDI4IEBAIExpdGVyYWw6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogOwogCitQcm9wZXJ0eU5hbWU6CisgICAgSURFTlQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBQcm9wZXJ0eU5hbWVOb2RlKCokMSk7
IH0KKyAgfCBTVFJJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IFBy
b3BlcnR5TmFtZU5vZGUoSWRlbnRpZmllcigqJDEpKTsgfQorICB8IE5VTUJFUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgUHJvcGVydHlOYW1lTm9kZSgkMSk7IH0KKzsK
KworUHJvcGVydHk6CisgICAgUHJvcGVydHlOYW1lICc6JyBBc3NpZ25tZW50RXhwciAgICAgeyAk
JCA9IG5ldyBQcm9wZXJ0eU5vZGUoJDEsICQzLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KTsgfQor
ICB8IElERU5UIElERU5UICcoJyAnKScgRnVuY3Rpb25Cb2R5ICAgIHsgaWYgKCFtYWtlR2V0dGVy
T3JTZXR0ZXJQcm9wZXJ0eU5vZGUoJCQsICokMSwgKiQyLCAwLCAkNSkpIFlZQUJPUlQ7IH0KKyAg
fCBJREVOVCBJREVOVCAnKCcgRm9ybWFsUGFyYW1ldGVyTGlzdCAnKScgRnVuY3Rpb25Cb2R5Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpZiAoIW1ha2VHZXR0ZXJP
clNldHRlclByb3BlcnR5Tm9kZSgkJCwgKiQxLCAqJDIsICQ0LCAkNikpIFlZQUJPUlQ7IH0KKzsK
KworUHJvcGVydHlMaXN0OgorICAgIFByb3BlcnR5ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgJCQgPSBuZXcgUHJvcGVydHlMaXN0Tm9kZSgkMSk7IH0KKyAgfCBQcm9wZXJ0eUxpc3QgJywn
IFByb3BlcnR5ICAgICAgICAgICB7ICQkID0gbmV3IFByb3BlcnR5TGlzdE5vZGUoJDMsICQxKTsg
fQorOworCiBQcmltYXJ5RXhwcjoKICAgICBQcmltYXJ5RXhwck5vQnJhY2UKICAgfCAneycgJ30n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IE9iamVjdExpdGVyYWxOb2Rl
KCk7IH0KLSAgfCAneycgUHJvcGVydHlOYW1lQW5kVmFsdWVMaXN0ICd9JyAgICB7ICQkID0gbmV3
IE9iamVjdExpdGVyYWxOb2RlKCQyKTsgfQorICB8ICd7JyBQcm9wZXJ0eUxpc3QgJ30nICAgIHsg
JCQgPSBuZXcgT2JqZWN0TGl0ZXJhbE5vZGUoJDIpOyB9CiA7CiAKIFByaW1hcnlFeHByTm9CcmFj
ZToKQEAgLTIzOCwxOCArMjU4LDYgQEAgRWxpc2lvbjoKICAgfCBFbGlzaW9uICcsJyAgICAgICAg
ICAgICAgICAgICAgICAgICB7ICQkID0gJDEgKyAxOyB9CiA7CiAKLVByb3BlcnR5TmFtZUFuZFZh
bHVlTGlzdDoKLSAgICBQcm9wZXJ0eU5hbWUgJzonIEFzc2lnbm1lbnRFeHByICAgICB7ICQkID0g
bmV3IFByb3BlcnR5VmFsdWVOb2RlKCQxLCAkMyk7IH0KLSAgfCBQcm9wZXJ0eU5hbWVBbmRWYWx1
ZUxpc3QgJywnIFByb3BlcnR5TmFtZSAnOicgQXNzaWdubWVudEV4cHIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IFByb3BlcnR5VmFsdWVOb2RlKCQz
LCAkNSwgJDEpOyB9Ci07Ci0KLVByb3BlcnR5TmFtZToKLSAgICBJREVOVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IFByb3BlcnR5Tm9kZSgqJDEpOyB9Ci0gIHwgU1RS
SU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBQcm9wZXJ0eU5vZGUo
SWRlbnRpZmllcigqJDEpKTsgfQotICB8IE5VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsgJCQgPSBuZXcgUHJvcGVydHlOb2RlKCQxKTsgfQotOwotCiBNZW1iZXJFeHByOgogICAg
IFByaW1hcnlFeHByCiAgIHwgRnVuY3Rpb25FeHByICAgICAgICAgICAgICAgICAgICAgICAgeyAk
JCA9ICQxOyB9CkBAIC04MDYsMTAgKzgxNCwxMCBAQCBGdW5jdGlvbkRlY2xhcmF0aW9uOgogRnVu
Y3Rpb25FeHByOgogICAgIEZVTkNUSU9OICcoJyAnKScgRnVuY3Rpb25Cb2R5ICAgICAgIHsgJCQg
PSBuZXcgRnVuY0V4cHJOb2RlKElkZW50aWZpZXI6Om51bGwoKSwgJDQpOyB9CiAgIHwgRlVOQ1RJ
T04gJygnIEZvcm1hbFBhcmFtZXRlckxpc3QgJyknIEZ1bmN0aW9uQm9keQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgRnVuY0V4cHJOb2RlKElkZW50
aWZpZXI6Om51bGwoKSwgJDMsICQ1KTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgJCQgPSBuZXcgRnVuY0V4cHJOb2RlKElkZW50aWZpZXI6Om51bGwoKSwgJDUs
ICQzKTsgfQogICB8IEZVTkNUSU9OIElERU5UICcoJyAnKScgRnVuY3Rpb25Cb2R5IHsgJCQgPSBu
ZXcgRnVuY0V4cHJOb2RlKCokMiwgJDUpOyB9CiAgIHwgRlVOQ1RJT04gSURFTlQgJygnIEZvcm1h
bFBhcmFtZXRlckxpc3QgJyknIEZ1bmN0aW9uQm9keQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgRnVuY0V4cHJOb2RlKCokMiwgJDQsICQ2KTsgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgRnVuY0V4
cHJOb2RlKCokMiwgJDYsICQ0KTsgfQogOwogCiBGb3JtYWxQYXJhbWV0ZXJMaXN0OgpAQCAtOTYw
LDYgKzk2OCwyMyBAQCBzdGF0aWMgTm9kZSAqbWFrZURlbGV0ZU5vZGUoTm9kZSAqZXhwcikKICAg
ICB9CiB9CiAKK3N0YXRpYyBib29sIG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm9kZShQcm9w
ZXJ0eU5vZGUqJiByZXN1bHQsIElkZW50aWZpZXImIGdldE9yU2V0LCBJZGVudGlmaWVyJiBuYW1l
LCBQYXJhbWV0ZXJOb2RlICpwYXJhbXMsIEZ1bmN0aW9uQm9keU5vZGUgKmJvZHkpCit7CisgICAg
UHJvcGVydHlOb2RlOjpUeXBlIHR5cGU7CisgICAgCisgICAgaWYgKGdldE9yU2V0ID09ICJnZXQi
KQorICAgICAgICB0eXBlID0gUHJvcGVydHlOb2RlOjpHZXR0ZXI7CisgICAgZWxzZSBpZiAoZ2V0
T3JTZXQgPT0gInNldCIpCisgICAgICAgIHR5cGUgPSBQcm9wZXJ0eU5vZGU6OlNldHRlcjsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXN1bHQgPSBuZXcgUHJv
cGVydHlOb2RlKG5ldyBQcm9wZXJ0eU5hbWVOb2RlKG5hbWUpLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldyBGdW5jRXhwck5vZGUoSWRlbnRpZmllcjo6bnVsbCgpLCBib2R5LCBw
YXJhbXMpLCB0eXBlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBpbnQgeXllcnJvcihjb25z
dCBjaGFyICogLyogcyAqLykgIC8qIENhbGxlZCBieSB5eXBhcnNlIG9uIGVycm9yICovCiB7CiAg
IC8vIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICVzIGF0IGxpbmUgJWRcbiIsIHMsIEtKUzo6TGV4
ZXI6OmN1cnIoKS0+bGluZU5vKCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2lu
dGVybmFsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44MgpkaWZmIC1wIC11IC1yMS44MiBK
YXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50
ZXJuYWwuY3BwCTExIERlYyAyMDA1IDAyOjA1OjQ0IC0wMDAwCTEuODIKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9pbnRlcm5hbC5jcHAJMTIgRGVjIDIwMDUgMjM6MDQ6MjcgLTAwMDAKQEAgLTIyMyw2
ICsyMjMsNDUgQEAgYm9vbCBOdW1iZXJJbXA6OmdldFVJbnQzMih1aW50MzJfdCYgdWludAogICBy
ZXR1cm4gKGRvdWJsZSl1aW50MzIgPT0gdmFsOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gR2V0dGVyU2V0dGVySW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQordm9pZCBHZXR0ZXJTZXR0ZXJJbXA6Om1hcmsoKQoreworICAgIGlmIChnZXR0ZXIgJiYgIWdl
dHRlci0+bWFya2VkKCkpCisgICAgICAgIGdldHRlci0+bWFyaygpOworICAgIGlmIChzZXR0ZXIg
JiYgIXNldHRlci0+bWFya2VkKCkpCisgICAgICAgIHNldHRlci0+bWFyaygpOworfQorCitKU1Zh
bHVlICpHZXR0ZXJTZXR0ZXJJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSB0
eXBlKSBjb25zdAoreworICAgIGFzc2VydChmYWxzZSk7CisgICAgcmV0dXJuIGpzTnVsbCgpLT50
b1ByaW1pdGl2ZShleGVjLCB0eXBlKTsKK30KKworYm9vbCBHZXR0ZXJTZXR0ZXJJbXA6OnRvQm9v
bGVhbihFeGVjU3RhdGUgKikgY29uc3QKK3sKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworZG91YmxlIEdldHRlclNldHRlckltcDo6dG9OdW1iZXIoRXhlY1N0YXRl
ICopIGNvbnN0Cit7CisgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICByZXR1cm4gMC4wOworfQorCitV
U3RyaW5nIEdldHRlclNldHRlckltcDo6dG9TdHJpbmcoRXhlY1N0YXRlICopIGNvbnN0Cit7Cisg
ICAgYXNzZXJ0KGZhbHNlKTsKKyAgICByZXR1cm4gVVN0cmluZzo6bnVsbCgpOworfQorCitKU09i
amVjdCAqR2V0dGVyU2V0dGVySW1wOjp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Cit7
CisgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICByZXR1cm4ganNOdWxsKCktPnRvT2JqZWN0KGV4ZWMp
OworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGFiZWxTdGFjayAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIExhYmVsU3RhY2s6OnB1c2go
Y29uc3QgSWRlbnRpZmllciAmaWQpCkBAIC04MzUsNiArODc0LDkgQEAgdm9pZCBwcmludEluZm8o
RXhlY1N0YXRlICpleGVjLCBjb25zdCBjaAogICAgICAgaWYgKG5hbWUuaXNOdWxsKCkpCiAgICAg
ICAgIG5hbWUgPSAiKHVua25vd24gY2xhc3MpIjsKICAgICAgIGJyZWFrOworICAgIGNhc2UgR2V0
dGVyU2V0dGVyVHlwZToKKyAgICAgIG5hbWUgPSAiR2V0dGVyU2V0dGVyIjsKKyAgICAgIGJyZWFr
OwogICAgIH0KICAgICBVU3RyaW5nIHZTdHJpbmcgPSB2LT50b1N0cmluZyhleGVjKTsKICAgICBp
ZiAoIHZTdHJpbmcuc2l6ZSgpID4gNTAgKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbG9v
a3VwLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAtcCAtdSAtcjEuMjAgSmF2YVNj
cmlwdENvcmUva2pzL2xvb2t1cC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgJMTEg
RGVjIDIwMDUgMDI6MDU6NDUgLTAwMDAJMS4yMAorKysgSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1
cC5oCTEyIERlYyAyMDA1IDIzOjA0OjI3IC0wMDAwCkBAIC0xMjcsNyArMTI3LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAqIEhlbHBlciBmb3IgZ2V0U3RhdGljRnVuY3Rpb25TbG90IGFuZCBnZXRT
dGF0aWNQcm9wZXJ0eVNsb3QKICAgICovCiAgIHRlbXBsYXRlIDxjbGFzcyBGdW5jSW1wPgotICBp
bmxpbmUgSlNWYWx1ZSAqc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKKyAg
aW5saW5lIEpTVmFsdWUgKnN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKICAgewogICAgICAgLy8gTG9vayBmb3IgY2FjaGVkIHZh
bHVlIGluIGR5bmFtaWMgbWFwIG9mIHByb3BlcnRpZXMgKGluIEpTT2JqZWN0KQogICAgICAgSlNP
YmplY3QgKnRoaXNPYmogPSBzbG90LnNsb3RCYXNlKCk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAqIEhlbHBlciBmb3IgZ2V0U3RhdGljVmFsdWVTbG90IGFuZCBnZXRT
dGF0aWNQcm9wZXJ0eVNsb3QKICAgICovCiAgIHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wPgotICBp
bmxpbmUgSlNWYWx1ZSAqc3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorICBpbmxpbmUgSlNWYWx1ZSAq
c3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmpl
Y3QsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgIHsKICAg
ICAgIFRoaXNJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxUaGlzSW1wICo+KHNsb3Quc2xvdEJh
c2UoKSk7CiAgICAgICBjb25zdCBIYXNoRW50cnkgKmVudHJ5ID0gc2xvdC5zdGF0aWNFbnRyeSgp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS45MApkaWZmIC1wIC11IC1yMS45MCBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3Bw
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCTExIERlYyAyMDA1IDAyOjA1OjQ1IC0w
MDAwCTEuOTAKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJMTIgRGVjIDIwMDUgMjM6
MDQ6MjcgLTAwMDAKQEAgLTI3Nyw3ICsyNzcsNyBAQCBKU1ZhbHVlICpSZXNvbHZlTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlCiAgICAgSlNPYmplY3QgKm8gPSAqaXRlcjsKIAogICAgIGlmIChvLT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKQotICAgICAgcmV0dXJuIHNsb3QuZ2V0
VmFsdWUoZXhlYywgaWRlbnQpOworICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgbywg
aWRlbnQpOwogICAgIAogICAgICsraXRlcjsKICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwpAQCAt
MzUzLDI5ICszNTMsNDggQEAgSlNWYWx1ZSAqT2JqZWN0TGl0ZXJhbE5vZGU6OmV2YWx1YXRlKEV4
ZQogICByZXR1cm4gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3QoKS0+
Y29uc3RydWN0KGV4ZWMsTGlzdDo6ZW1wdHkoKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBQcm9wZXJ0eVZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlMaXN0Tm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBFQ01BIDExLjEuNQotSlNWYWx1ZSAq
UHJvcGVydHlWYWx1ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK0pTVmFsdWUgKlBy
b3BlcnR5TGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgSlNPYmplY3Qg
Km9iaiA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0KCktPmNvbnN0
cnVjdChleGVjLCBMaXN0OjplbXB0eSgpKTsKICAgCi0gIGZvciAoUHJvcGVydHlWYWx1ZU5vZGUg
KnAgPSB0aGlzOyBwOyBwID0gcC0+bGlzdC5nZXQoKSkgewotICAgIEpTVmFsdWUgKm4gPSBwLT5u
YW1lLT5ldmFsdWF0ZShleGVjKTsKKyAgZm9yIChQcm9wZXJ0eUxpc3ROb2RlICpwID0gdGhpczsg
cDsgcCA9IHAtPmxpc3QuZ2V0KCkpIHsKKyAgICBKU1ZhbHVlICpuID0gcC0+bm9kZS0+bmFtZS0+
ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU1ZhbHVl
ICp2ID0gcC0+YXNzaWduLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlICp2ID0gcC0+bm9k
ZS0+YXNzaWduLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQot
Ci0gICAgb2JqLT5wdXQoZXhlYywgSWRlbnRpZmllcihuLT50b1N0cmluZyhleGVjKSksIHYpOwor
ICAgIAorICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcihuLT50b1N0cmlu
ZyhleGVjKSk7CisgICAgc3dpdGNoIChwLT5ub2RlLT50eXBlKSB7CisgICAgICBjYXNlIFByb3Bl
cnR5Tm9kZTo6R2V0dGVyOgorICAgICAgICBvYmotPmRlZmluZUdldHRlcihleGVjLCBwcm9wZXJ0
eU5hbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIFByb3BlcnR5Tm9kZTo6U2V0dGVyOgorICAgICAgICBvYmotPmRlZmluZVNldHRlcihl
eGVjLCBwcm9wZXJ0eU5hbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQ6CisgICAgICAgIG9iai0+
cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdik7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgfQog
CiAgIHJldHVybiBvYmo7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQ
cm9wZXJ0eU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBFQ01BIDExLjEuNQorSlNWYWx1ZSAqUHJvcGVydHlOb2RlOjpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpCit7CisgIGFzc2VydChmYWxzZSk7CisgIHJldHVybiBqc051bGwo
KTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eU5hbWVOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAxMS4xLjUKLUpTVmFs
dWUgKlByb3BlcnR5Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICopCitKU1ZhbHVlICpQcm9wZXJ0
eU5hbWVOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKikKIHsKICAgSlNWYWx1ZSAqczsKIApAQCAt
NTIwLDcgKzUzOSw3IEBAIEpTVmFsdWUgKkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWEK
ICAgZG8geyAKICAgICBiYXNlID0gKml0ZXI7CiAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xv
dChleGVjLCBpZGVudCwgc2xvdCkpIHsKLSAgICAgIEpTVmFsdWUgKnYgPSBzbG90LmdldFZhbHVl
KGV4ZWMsIGlkZW50KTsKKyAgICAgIEpTVmFsdWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJh
c2UsIGlkZW50KTsKICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgICAgIAogICAg
ICAgaWYgKCF2LT5pc09iamVjdCgpKSB7CkBAIC01NjksNyArNTg4LDcgQEAgSlNWYWx1ZSAqRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGU6OmV2YWx1YQogICBKU1ZhbHVlICpmdW5jVmFsOwogICBpZiAo
c3Vic2NyaXB0VmFsLT5nZXRVSW50MzIoaSkpIHsKICAgICBpZiAoYmFzZU9iai0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIGksIHNsb3QpKQotICAgICAgZnVuY1ZhbCA9IHNsb3QuZ2V0VmFsdWUoZXhl
YywgaSk7CisgICAgICBmdW5jVmFsID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlT2JqLCBpKTsK
ICAgICBlbHNlCiAgICAgICBmdW5jVmFsID0ganNVbmRlZmluZWQoKTsKICAgfSBlbHNlIHsKQEAg
LTYyMCw3ICs2MzksNyBAQCBKU1ZhbHVlICpGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZShF
CiAKICAgSlNPYmplY3QgKmJhc2VPYmogPSBiYXNlVmFsLT50b09iamVjdChleGVjKTsKICAgUHJv
cGVydHlTbG90IHNsb3Q7Ci0gIEpTVmFsdWUgKmZ1bmNWYWwgPSBiYXNlT2JqLT5nZXRQcm9wZXJ0
eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkgOiBq
c1VuZGVmaW5lZCgpOworICBKU1ZhbHVlICpmdW5jVmFsID0gYmFzZU9iai0+Z2V0UHJvcGVydHlT
bG90KGV4ZWMsIGlkZW50LCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZU9iaiwgaWRl
bnQpIDoganNVbmRlZmluZWQoKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKIAogICBpZiAo
IWZ1bmNWYWwtPmlzT2JqZWN0KCkpCkBAIC02NjAsNyArNjc5LDcgQEAgSlNWYWx1ZSAqUG9zdGZp
eFJlc29sdmVOb2RlOjpldmFsdWF0ZShFeAogICBkbyB7IAogICAgIGJhc2UgPSAqaXRlcjsKICAg
ICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIG1faWRlbnQpOworICAgICAgICBK
U1ZhbHVlICp2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KTsKIAogICAgICAg
ICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAKQEAgLTY5MCw3ICs3MDks
NyBAQCBKU1ZhbHVlICpQb3N0Zml4QnJhY2tldE5vZGU6OmV2YWx1YXRlKEV4CiAgIHVpbnQzMl90
IHByb3BlcnR5SW5kZXg7CiAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihwcm9wZXJ0eUluZGV4
KSkgewogICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFsdWUgKnYgPSBiYXNlLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlJbmRleCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4
ZWMsIHByb3BlcnR5SW5kZXgpIDoganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlICp2ID0gYmFz
ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5SW5kZXgsIHNsb3QpID8gc2xvdC5nZXRW
YWx1ZShleGVjLCBiYXNlLCBwcm9wZXJ0eUluZGV4KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgS0pT
X0NIRUNLRVhDRVBUSU9OVkFMVUUKIAogICAgIGRvdWJsZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7
CkBAIC03MDMsNyArNzIyLDcgQEAgSlNWYWx1ZSAqUG9zdGZpeEJyYWNrZXROb2RlOjpldmFsdWF0
ZShFeAogCiAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhl
YykpOwogICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgSlNWYWx1ZSAqdiA9IGJhc2UtPmdldFByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBw
cm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsKKyAgSlNWYWx1ZSAqdiA9IGJhc2UtPmdldFBy
b3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVj
LCBiYXNlLCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsKICAgS0pTX0NIRUNLRVhDRVBU
SU9OVkFMVUUKIAogICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtNzIzLDcgKzc0
Miw3IEBAIEpTVmFsdWUgKlBvc3RmaXhEb3ROb2RlOjpldmFsdWF0ZShFeGVjU3QKICAgSlNPYmpl
Y3QgKmJhc2UgPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwogCiAgIFByb3BlcnR5U2xvdCBz
bG90OwotICBKU1ZhbHVlICp2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQs
IHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7Cisg
IEpTVmFsdWUgKnYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkg
PyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNVbmRlZmluZWQoKTsKICAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKIAogICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMp
OwpAQCAtODQ4LDcgKzg2Nyw3IEBAIEpTVmFsdWUgKlR5cGVPZlJlc29sdmVOb2RlOjpldmFsdWF0
ZShFeGUKICAgZG8geyAKICAgICBiYXNlID0gKml0ZXI7CiAgICAgaWYgKGJhc2UtPmdldFByb3Bl
cnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAgICBKU1ZhbHVlICp2ID0gc2xv
dC5nZXRWYWx1ZShleGVjLCBtX2lkZW50KTsKKyAgICAgICAgSlNWYWx1ZSAqdiA9IHNsb3QuZ2V0
VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCk7CiAgICAgICAgIHJldHVybiB0eXBlU3RyaW5nRm9y
VmFsdWUodik7CiAgICAgfQogCkBAIC04ODYsNyArOTA1LDcgQEAgSlNWYWx1ZSAqUHJlZml4UmVz
b2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZQogICBkbyB7IAogICAgIGJhc2UgPSAqaXRlcjsKICAgICBp
ZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7Ci0gICAgICAg
IEpTVmFsdWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIG1faWRlbnQpOworICAgICAgICBKU1Zh
bHVlICp2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KTsKIAogICAgICAgICBk
b3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAKQEAgLTkxNyw3ICs5MzYsNyBA
QCBKU1ZhbHVlICpQcmVmaXhCcmFja2V0Tm9kZTo6ZXZhbHVhdGUoRXhlCiAgIHVpbnQzMl90IHBy
b3BlcnR5SW5kZXg7CiAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihwcm9wZXJ0eUluZGV4KSkg
ewogICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFsdWUgKnYgPSBiYXNlLT5nZXRQcm9w
ZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlJbmRleCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMs
IHByb3BlcnR5SW5kZXgpIDoganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlICp2ID0gYmFzZS0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5SW5kZXgsIHNsb3QpID8gc2xvdC5nZXRWYWx1
ZShleGVjLCBiYXNlLCBwcm9wZXJ0eUluZGV4KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgS0pTX0NI
RUNLRVhDRVBUSU9OVkFMVUUKIAogICAgIGRvdWJsZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7CkBA
IC05MzEsNyArOTUwLDcgQEAgSlNWYWx1ZSAqUHJlZml4QnJhY2tldE5vZGU6OmV2YWx1YXRlKEV4
ZQogCiAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykp
OwogICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgSlNWYWx1ZSAqdiA9IGJhc2UtPmdldFByb3BlcnR5
U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9w
ZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsKKyAgSlNWYWx1ZSAqdiA9IGJhc2UtPmdldFByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBi
YXNlLCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9O
VkFMVUUKIAogICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtOTUyLDcgKzk3MSw3
IEBAIEpTVmFsdWUgKlByZWZpeERvdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGEKICAgSlNPYmplY3Qg
KmJhc2UgPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwogCiAgIFByb3BlcnR5U2xvdCBzbG90
OwotICBKU1ZhbHVlICp2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNs
b3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7CisgIEpT
VmFsdWUgKnYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkgPyBz
bG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNVbmRlZmluZWQoKTsKICAgS0pT
X0NIRUNLRVhDRVBUSU9OVkFMVUUKIAogICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpA
QCAtMTI5MSw3ICsxMzEwLDcgQEAgSlNWYWx1ZSAqQXNzaWduUmVzb2x2ZU5vZGU6OmV2YWx1YXRl
KEV4ZQogICBpZiAobV9vcGVyID09IE9wRXF1YWwpIHsKICAgICB2ID0gbV9yaWdodC0+ZXZhbHVh
dGUoZXhlYyk7CiAgIH0gZWxzZSB7Ci0gICAgSlNWYWx1ZSAqdjEgPSBzbG90LmdldFZhbHVlKGV4
ZWMsIG1faWRlbnQpOworICAgIEpTVmFsdWUgKnYxID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNl
LCBtX2lkZW50KTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIEpTVmFsdWUgKnYy
ID0gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgdiA9IHZhbHVlRm9yUmVhZE1vZGlmeUFz
c2lnbm1lbnQoZXhlYywgdjEsIHYyLCBtX29wZXIpOwpAQCAtMTMxNyw3ICsxMzM2LDcgQEAgSlNW
YWx1ZSAqQXNzaWduRG90Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YQogICAgIHYgPSBtX3JpZ2h0LT5l
dmFsdWF0ZShleGVjKTsKICAgfSBlbHNlIHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBK
U1ZhbHVlICp2MSA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSA/
IHNsb3QuZ2V0VmFsdWUoZXhlYywgbV9pZGVudCkgOiBqc1VuZGVmaW5lZCgpOworICAgIEpTVmFs
dWUgKnYxID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpID8gc2xv
dC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgS0pT
X0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgICBKU1ZhbHVlICp2MiA9IG1fcmlnaHQtPmV2YWx1YXRl
KGV4ZWMpOwogICAgIHYgPSB2YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50KGV4ZWMsIHYxLCB2
MiwgbV9vcGVyKTsKQEAgLTEzNDcsNyArMTM2Niw3IEBAIEpTVmFsdWUgKkFzc2lnbkJyYWNrZXRO
b2RlOjpldmFsdWF0ZShFeGUKICAgICAgIHYgPSBtX3JpZ2h0LT5ldmFsdWF0ZShleGVjKTsKICAg
ICB9IGVsc2UgewogICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICBKU1ZhbHVlICp2MSA9
IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eUluZGV4LCBzbG90KSA/IHNsb3Qu
Z2V0VmFsdWUoZXhlYywgcHJvcGVydHlJbmRleCkgOiBqc1VuZGVmaW5lZCgpOworICAgICAgSlNW
YWx1ZSAqdjEgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlJbmRleCwgc2xv
dCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIHByb3BlcnR5SW5kZXgpIDoganNVbmRlZmlu
ZWQoKTsKICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgICBKU1ZhbHVlICp2MiA9
IG1fcmlnaHQtPmV2YWx1YXRlKGV4ZWMpOwogICAgICAgdiA9IHZhbHVlRm9yUmVhZE1vZGlmeUFz
c2lnbm1lbnQoZXhlYywgdjEsIHYyLCBtX29wZXIpOwpAQCAtMTM2Niw3ICsxMzg1LDcgQEAgSlNW
YWx1ZSAqQXNzaWduQnJhY2tldE5vZGU6OmV2YWx1YXRlKEV4ZQogICAgIHYgPSBtX3JpZ2h0LT5l
dmFsdWF0ZShleGVjKTsKICAgfSBlbHNlIHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBK
U1ZhbHVlICp2MSA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsK
KyAgICBKU1ZhbHVlICp2MSA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBwcm9wZXJ0eU5hbWUpIDoganNV
bmRlZmluZWQoKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIEpTVmFsdWUgKnYy
ID0gbV9yaWdodC0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgdiA9IHZhbHVlRm9yUmVhZE1vZGlmeUFz
c2lnbm1lbnQoZXhlYywgdjEsIHYyLCBtX29wZXIpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tq
cy9ub2Rlcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQzCmRpZmYgLXAgLXUgLXIxLjQzIEph
dmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAkx
MSBEZWMgMjAwNSAwMjowNTo0NSAtMDAwMAkxLjQzCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9k
ZXMuaAkxMiBEZWMgMjAwNSAyMzowNDoyNyAtMDAwMApAQCAtMzIsOCArMzIsOCBAQAogbmFtZXNw
YWNlIEtKUyB7CiAKICAgY2xhc3MgUHJvZ3JhbU5vZGU7Ci0gIGNsYXNzIFByb3BlcnR5Tm9kZTsK
LSAgY2xhc3MgUHJvcGVydHlWYWx1ZU5vZGU7CisgIGNsYXNzIFByb3BlcnR5TmFtZU5vZGU7Cisg
IGNsYXNzIFByb3BlcnR5TGlzdE5vZGU7CiAgIGNsYXNzIFJlZmVyZW5jZTsKICAgY2xhc3MgUmVn
RXhwOwogICBjbGFzcyBTb3VyY2VFbGVtZW50c05vZGU7CkBAIC0yNDYsNDEgKzI0Niw1NCBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICBib29sIG9wdDsKICAgfTsKIAotICBjbGFzcyBQcm9wZXJ0eVZh
bHVlTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgUHJvcGVydHlOYW1lTm9kZSA6IHB1Ymxp
YyBOb2RlIHsKICAgcHVibGljOgotICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWlsIG9mIGEgY2ly
Y3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgT2JqZWN0TGl0ZXJhbE5vZGUgY3RvcgotICAgIFBy
b3BlcnR5VmFsdWVOb2RlKFByb3BlcnR5Tm9kZSAqbiwgTm9kZSAqYSkKLSAgICAgIDogbmFtZShu
KSwgYXNzaWduKGEpLCBsaXN0KHRoaXMpIHsgfQotICAgIFByb3BlcnR5VmFsdWVOb2RlKFByb3Bl
cnR5Tm9kZSAqbiwgTm9kZSAqYSwgUHJvcGVydHlWYWx1ZU5vZGUgKmwpCi0gICAgICA6IG5hbWUo
biksIGFzc2lnbihhKSwgbGlzdChsLT5saXN0KSB7IGwtPmxpc3QgPSB0aGlzOyB9CisgICAgUHJv
cGVydHlOYW1lTm9kZShkb3VibGUgZCkgOiBudW1lcmljKGQpIHsgfQorICAgIFByb3BlcnR5TmFt
ZU5vZGUoY29uc3QgSWRlbnRpZmllciAmcykgOiBzdHIocykgeyB9CiAgICAgSlNWYWx1ZSAqZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgT2JqZWN0TGl0
ZXJhbE5vZGU7Ci0gICAgUmVmUHRyPFByb3BlcnR5Tm9kZT4gbmFtZTsKKyAgICBkb3VibGUgbnVt
ZXJpYzsKKyAgICBJZGVudGlmaWVyIHN0cjsKKyAgfTsKKyAgCisgIGNsYXNzIFByb3BlcnR5Tm9k
ZSA6IHB1YmxpYyBOb2RlIHsKKyAgcHVibGljOgorICAgIGVudW0gVHlwZSB7IENvbnN0YW50LCBH
ZXR0ZXIsIFNldHRlciB9OworICAgIFByb3BlcnR5Tm9kZShQcm9wZXJ0eU5hbWVOb2RlICpuLCBO
b2RlICphLCBUeXBlIHQpIAorICAgICAgOiBuYW1lKG4pLCBhc3NpZ24oYSksIHR5cGUodCkgeyB9
CisgICAgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKKyAgICBmcmllbmQgY2xhc3MgUHJv
cGVydHlMaXN0Tm9kZTsKKyAgcHJpdmF0ZToKKyAgICBSZWZQdHI8UHJvcGVydHlOYW1lTm9kZT4g
bmFtZTsKICAgICBSZWZQdHI8Tm9kZT4gYXNzaWduOwotICAgIFJlZlB0cjxQcm9wZXJ0eVZhbHVl
Tm9kZT4gbGlzdDsKKyAgICBUeXBlIHR5cGU7CiAgIH07Ci0KLSAgY2xhc3MgT2JqZWN0TGl0ZXJh
bE5vZGUgOiBwdWJsaWMgTm9kZSB7CisgIAorICBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlIDogcHVi
bGljIE5vZGUgewogICBwdWJsaWM6Ci0gICAgT2JqZWN0TGl0ZXJhbE5vZGUoKSA6IGxpc3QoMCkg
eyB9Ci0gICAgT2JqZWN0TGl0ZXJhbE5vZGUoUHJvcGVydHlWYWx1ZU5vZGUgKmwpIDogbGlzdChs
LT5saXN0KSB7IGwtPmxpc3QgPSAwOyB9CisgICAgLy8gbGlzdCBwb2ludGVyIGlzIHRhaWwgb2Yg
YSBjaXJjdWxhciBsaXN0LCBjcmFja2VkIGluIHRoZSBPYmplY3RMaXRlcmFsTm9kZSBjdG9yCisg
ICAgUHJvcGVydHlMaXN0Tm9kZShQcm9wZXJ0eU5vZGUgKm4pCworICAgICAgOiBub2RlKG4pLCBs
aXN0KHRoaXMpIHsgfQorICAgIFByb3BlcnR5TGlzdE5vZGUoUHJvcGVydHlOb2RlICpuLCBQcm9w
ZXJ0eUxpc3ROb2RlICpsKQorICAgICAgOiBub2RlKG4pLCBsaXN0KGwtPmxpc3QpIHsgbC0+bGlz
dCA9IHRoaXM7IH0KICAgICBKU1ZhbHVlICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRl
OgotICAgIFJlZlB0cjxQcm9wZXJ0eVZhbHVlTm9kZT4gbGlzdDsKKyAgICBmcmllbmQgY2xhc3Mg
T2JqZWN0TGl0ZXJhbE5vZGU7CisgICAgUmVmUHRyPFByb3BlcnR5Tm9kZT4gbm9kZTsKKyAgICBS
ZWZQdHI8UHJvcGVydHlMaXN0Tm9kZT4gbGlzdDsKICAgfTsKIAotICBjbGFzcyBQcm9wZXJ0eU5v
ZGUgOiBwdWJsaWMgTm9kZSB7CisgIGNsYXNzIE9iamVjdExpdGVyYWxOb2RlIDogcHVibGljIE5v
ZGUgewogICBwdWJsaWM6Ci0gICAgUHJvcGVydHlOb2RlKGRvdWJsZSBkKSA6IG51bWVyaWMoZCkg
eyB9Ci0gICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXIgJnMpIDogc3RyKHMpIHsgfQor
ICAgIE9iamVjdExpdGVyYWxOb2RlKCkgOiBsaXN0KDApIHsgfQorICAgIE9iamVjdExpdGVyYWxO
b2RlKFByb3BlcnR5TGlzdE5vZGUgKmwpIDogbGlzdChsLT5saXN0KSB7IGwtPmxpc3QgPSAwOyB9
CiAgICAgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBkb3Vi
bGUgbnVtZXJpYzsKLSAgICBJZGVudGlmaWVyIHN0cjsKKyAgICBSZWZQdHI8UHJvcGVydHlMaXN0
Tm9kZT4gbGlzdDsKICAgfTsKIAogICBjbGFzcyBCcmFja2V0QWNjZXNzb3JOb2RlIDogcHVibGlj
IE5vZGUgewpAQCAtMTAzMCwxMCArMTA0Myw4IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNz
IEZ1bmNFeHByTm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgotICAgIEZ1bmNFeHByTm9k
ZShjb25zdCBJZGVudGlmaWVyICZpLCBGdW5jdGlvbkJvZHlOb2RlICpiKQotICAgICAgOiBpZGVu
dChpKSwgcGFyYW0oMCksIGJvZHkoYikgeyB9Ci0gICAgRnVuY0V4cHJOb2RlKGNvbnN0IElkZW50
aWZpZXIgJmksIFBhcmFtZXRlck5vZGUgKnAsIEZ1bmN0aW9uQm9keU5vZGUgKmIpCi0gICAgICA6
IGlkZW50KGkpLCBwYXJhbShwLT5uZXh0KSwgYm9keShiKSB7IHAtPm5leHQgPSAwOyB9CisgICAg
RnVuY0V4cHJOb2RlKGNvbnN0IElkZW50aWZpZXIgJmksIEZ1bmN0aW9uQm9keU5vZGUgKmIsIFBh
cmFtZXRlck5vZGUgKnAgPSAwKQorICAgICAgOiBpZGVudChpKSwgcGFyYW0ocCA/IHAtPm5leHQg
OiAwKSwgYm9keShiKSB7IGlmIChwKSBwLT5uZXh0ID0gMDsgfQogICAgIHZpcnR1YWwgSlNWYWx1
ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICopOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0gJikgY29uc3Q7CiAgIHByaXZhdGU6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
bm9kZXMyc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjIKZGlm
ZiAtcCAtdSAtcjEuMjIgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJpbmcuY3BwCTEgRGVjIDIwMDUgMTc6NTk6MjUgLTAw
MDAJMS4yMgorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAJMTIgRGVjIDIw
MDUgMjM6MDQ6MjcgLTAwMDAKQEAgLTE1NSwxNCArMTU1LDI1IEBAIHZvaWQgT2JqZWN0TGl0ZXJh
bE5vZGU6OnN0cmVhbVRvKFNvdXJjZVMKICAgICBzIDw8ICJ7IH0iOwogfQogCi12b2lkIFByb3Bl
cnR5VmFsdWVOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0Cit2b2lkIFByb3Bl
cnR5TGlzdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3QKIHsKLSAgZm9yIChj
b25zdCBQcm9wZXJ0eVZhbHVlTm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5saXN0LmdldCgpKQot
ICAgIHMgPDwgbi0+bmFtZSA8PCAiOiAiIDw8IG4tPmFzc2lnbjsKKyAgcyA8PCBub2RlOworICAK
KyAgZm9yIChjb25zdCBQcm9wZXJ0eUxpc3ROb2RlICpuID0gbGlzdC5nZXQoKTsgbjsgbiA9IG4t
Pmxpc3QuZ2V0KCkpCisgICAgcyA8PCAiLCAiIDw8IG4tPm5vZGU7CiB9CiAKIHZvaWQgUHJvcGVy
dHlOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CiB7CisgIC8vIEZJWE1FOiBT
dXBwb3J0IGdldHRlciBhbmQgc2V0dGVyIGZ1bmN0aW9ucwsKKyAgaWYgKHR5cGUgIT0gQ29uc3Rh
bnQpCisgICAgICByZXR1cm47CisKKyAgICBzIDw8IG5hbWUgPDwgIjogIiA8PCBhc3NpZ247Cit9
CisKK3ZvaWQgUHJvcGVydHlOYW1lTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25z
dAorewogICBpZiAoc3RyLmlzTnVsbCgpKQogICAgIHMgPDwgVVN0cmluZzo6ZnJvbShudW1lcmlj
KTsKICAgZWxzZQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjU4CmRpZmYgLXAgLXUgLXIxLjU4IEphdmFTY3JpcHRDb3JlL2tq
cy9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmNwcAkxMSBEZWMgMjAw
NSAwMjowNTo0NiAtMDAwMAkxLjU4CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmNwcAkx
MiBEZWMgMjAwNSAyMzowNDoyNyAtMDAwMApAQCAtMTUzLDcgKzE1Myw3IEBAIEpTVmFsdWUgKkpT
T2JqZWN0OjpnZXQoRXhlY1N0YXRlICpleGVjLCAKICAgUHJvcGVydHlTbG90IHNsb3Q7CiAKICAg
aWYgKGNvbnN0X2Nhc3Q8SlNPYmplY3QgKj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CisgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgY29uc3RfY2FzdDxKU09i
amVjdCAqPih0aGlzKSwgcHJvcGVydHlOYW1lKTsKICAgICAKICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CkBAIC0xNjIsNyArMTYyLDcgQEAgSlNWYWx1ZSAqSlNPYmplY3Q6OmdldChFeGVjU3Rh
dGUgKmV4ZWMsIAogewogICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgaWYgKGNvbnN0X2Nhc3Q8SlNP
YmplY3QgKj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
KQotICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0
dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgY29uc3RfY2FzdDxKU09iamVjdCAqPih0aGlzKSwgcHJv
cGVydHlOYW1lKTsKICAgICAKICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CkBAIC0yMTMsNiAr
MjEzLDM1IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnMKICAgICBy
ZXR1cm47CiAgIH0KIAorICBKU09iamVjdCAqb2JqID0gdGhpczsKKyAgd2hpbGUgKHRydWUpIHsK
KyAgICBpZiAoSlNWYWx1ZSAqZ3MgPSBvYmotPl9wcm9wLmdldChwcm9wZXJ0eU5hbWUpKSB7Cisg
ICAgICBpZiAoZ3MtPnR5cGUoKSA9PSBHZXR0ZXJTZXR0ZXJUeXBlKSB7CisgICAgICAgIEpTT2Jq
ZWN0ICpzZXR0ZXJGdW5jID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVySW1wICo+KGdzKS0+Z2V0
U2V0dGVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFzZXR0ZXJGdW5jKSB7CisgICAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJzZXR0aW5nIGEgcHJvcGVydHkgdGhh
dCBoYXMgb25seSBhIGdldHRlciIpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIExpc3QgYXJnczsKKyAgICAgICAgYXJncy5hcHBlbmQodmFsdWUp
OworICAgICAgICAKKyAgICAgICAgc2V0dGVyRnVuYy0+Y2FsbChleGVjLCB0aGlzLCBhcmdzKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfSBlbHNlICB7CisgICAgICAgIC8vIElmIHRoZXJlJ3Mg
YW4gZXhpc3RpbmcgcHJvcGVydHkgb24gdGhlIG9iamVjdCBvciBvbmUgb2YgaXRzIAorICAgICAg
ICAvLyBwcm90b3R5cGUgaXQgc2hvdWxkIGJlIHJlcGxhY2VkLCBzbyB3ZSBqdXN0IGJyZWFrIGhl
cmUuCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICAgCisgICAgaWYgKCFvYmot
Pl9wcm90byB8fCAhb2JqLT5fcHJvdG8tPmlzT2JqZWN0KCkpCisgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgb2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4ob2JqLT5fcHJvdG8pOworICB9
CisKICAgX3Byb3AucHV0KHByb3BlcnR5TmFtZSx2YWx1ZSxhdHRyKTsKIH0KIApAQCAtMzMyLDYg
KzM2MSwzNiBAQCBjb25zdCBIYXNoRW50cnkqIEpTT2JqZWN0OjpmaW5kUHJvcGVydHlICiAgIHJl
dHVybiAwOwogfQogCit2b2lkIEpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0ICpnZXR0ZXJGdW5jKQor
eworICAgIEpTVmFsdWUgKm8gPSBnZXREaXJlY3QocHJvcGVydHlOYW1lKTsKKyAgICBHZXR0ZXJT
ZXR0ZXJJbXAgKmdzOworICAgIAorICAgIGlmIChvICYmIG8tPnR5cGUoKSA9PSBHZXR0ZXJTZXR0
ZXJUeXBlKSB7CisgICAgICAgIGdzID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVySW1wICo+KG8p
OworICAgIH0gZWxzZSB7CisgICAgICAgIGdzID0gbmV3IEdldHRlclNldHRlckltcDsKKyAgICAg
ICAgcHV0RGlyZWN0KHByb3BlcnR5TmFtZSwgZ3MpOworICAgIH0KKyAgICAKKyAgICBncy0+c2V0
R2V0dGVyKGdldHRlckZ1bmMpOworfQorCit2b2lkIEpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0ICpz
ZXR0ZXJGdW5jKQoreworICAgIEpTVmFsdWUgKm8gPSBnZXREaXJlY3QocHJvcGVydHlOYW1lKTsK
KyAgICBHZXR0ZXJTZXR0ZXJJbXAgKmdzOworICAgIAorICAgIGlmIChvICYmIG8tPnR5cGUoKSA9
PSBHZXR0ZXJTZXR0ZXJUeXBlKSB7CisgICAgICAgIGdzID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0
dGVySW1wICo+KG8pOworICAgIH0gZWxzZSB7CisgICAgICAgIGdzID0gbmV3IEdldHRlclNldHRl
ckltcDsKKyAgICAgICAgcHV0RGlyZWN0KHByb3BlcnR5TmFtZSwgZ3MpOworICAgIH0KKyAgICAK
KyAgICBncy0+c2V0U2V0dGVyKHNldHRlckZ1bmMpOworfQorCiBib29sIEpTT2JqZWN0OjppbXBs
ZW1lbnRzQ29uc3RydWN0KCkgY29uc3QKIHsKICAgcmV0dXJuIGZhbHNlOwpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZh
U2NyaXB0Q29yZS9ranMvb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTAKZGlmZiAt
cCAtdSAtcjEuNTAgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvb2JqZWN0LmgJMTEgRGVjIDIwMDUgMDI6MDU6NDYgLTAwMDAJMS41MAorKysgSmF2YVNj
cmlwdENvcmUva2pzL29iamVjdC5oCTEyIERlYyAyMDA1IDIzOjA0OjI3IC0wMDAwCkBAIC04MCw2
ICs4MCwzMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2b2lkICpkdW1teTsKICAgfTsKICAgCisg
IC8vIFRoaXMgaXMgYW4gaW50ZXJuYWwgdmFsdWUgb2JqZWN0IHdoaWNoIHN0b3JlcyBnZXR0ZXIg
YW5kIHNldHRlciBmdW5jdGlvbnMKKyAgLy8gZm9yIGEgcHJvcGVydHkuCisgIGNsYXNzIEdldHRl
clNldHRlckltcCA6IHB1YmxpYyBKU0NlbGwgeworICBwdWJsaWM6CisgICAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gR2V0dGVyU2V0dGVyVHlwZTsgfQorICAgICAgCisgICAgR2V0dGVyU2V0
dGVySW1wKCkgOiBnZXR0ZXIoMCksIHNldHRlcigwKSB7IH0KKyAgICAgIAorICAgIEpTVmFsdWUg
KnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVmZXJyZWQgPSBVbnNwZWNpZmll
ZFR5cGUpIGNvbnN0OworICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7
CisgICAgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CisgICAgVVN0cmlu
ZyB0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OworICAgIEpTT2JqZWN0ICp0b09iamVj
dChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OworICAgICAgCisgICAgdmlydHVhbCB2b2lkIG1hcmso
KTsKKyAgICAgIAorICAgIEpTT2JqZWN0ICpnZXRHZXR0ZXIoKSB7IHJldHVybiBnZXR0ZXI7IH0K
KyAgICB2b2lkIHNldEdldHRlcihKU09iamVjdCAqZykgeyBnZXR0ZXIgPSBnOyB9CisgICAgSlNP
YmplY3QgKmdldFNldHRlcigpIHsgcmV0dXJuIHNldHRlcjsgfQorICAgIHZvaWQgc2V0U2V0dGVy
KEpTT2JqZWN0ICpzKSB7IHNldHRlciA9IHM7IH0KKyAgICAgIAorICBwcml2YXRlOgorICAgIEpT
T2JqZWN0ICpnZXR0ZXI7CisgICAgSlNPYmplY3QgKnNldHRlcjsgIAorICB9OworICAKICAgY2xh
c3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKICAgcHVibGljOgogICAgIC8qKgpAQCAtNDc3
LDYgKzUwMyw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZvaWQgcHV0RGlyZWN0KGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAqdmFsdWUsIGludCBhdHRyID0gMCk7CiAg
ICAgdm9pZCBwdXREaXJlY3QoY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBpbnQgdmFs
dWUsIGludCBhdHRyID0gMCk7CiAgICAgCisgICAgdm9pZCBkZWZpbmVHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTT2JqZWN0ICpnZXR0ZXJG
dW5jKTsKKyAgICB2b2lkIGRlZmluZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmplY3QgKnNldHRlckZ1bmMpOworCiAgICAgLyoqCiAg
ICAgICogUmVtb3ZlIGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhpcyBvYmplY3QuCiAgICAgICogVGhp
cyBkb2Vzbid0IHRha2UgRG9udERlbGV0ZSBpbnRvIGFjY291bnQsIGFuZCBpc24ndCBpbiB0aGUg
RUNNQSBzcGVjLgpAQCAtNjA2LDcgKzYzNSwxNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6Z2V0
UHJvcGVydHlTbG90KEV4CiBpbmxpbmUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKEpTVmFsdWUgKipsb2NhdGlvbiA9IGdldERpcmVjdExv
Y2F0aW9uKHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywg
bG9jYXRpb24pOworICAgICAgICBpZiAoKCpsb2NhdGlvbiktPnR5cGUoKSA9PSBHZXR0ZXJTZXR0
ZXJUeXBlKSB7CisgICAgICAgICAgICBHZXR0ZXJTZXR0ZXJJbXAgKmdzID0gc3RhdGljX2Nhc3Q8
R2V0dGVyU2V0dGVySW1wICo+KCpsb2NhdGlvbik7CisgICAgICAgICAgICBKU09iamVjdCAqZ2V0
dGVyRnVuYyA9IGdzLT5nZXRHZXR0ZXIoKTsKKyAgICAgICAgICAgIGlmIChnZXR0ZXJGdW5jKQor
ICAgICAgICAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdCh0aGlzLCBnZXR0ZXJGdW5jKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbG90LnNldFVuZGVmaW5lZCh0aGlzKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWVTbG90KHRoaXMsIGxv
Y2F0aW9uKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXAgLXUgLXIxLjE4IEphdmFTY3JpcHRDb3JlL2tqcy9v
YmplY3Rfb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuY3Bw
CTExIERlYyAyMDA1IDAyOjA1OjQ2IC0wMDAwCTEuMTgKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9v
YmplY3Rfb2JqZWN0LmNwcAkxMiBEZWMgMjAwNSAyMzowNDoyNyAtMDAwMApAQCAtNDMsNiArNDMs
MTEgQEAgT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0YQogICAgIHB1dERp
cmVjdCh2YWx1ZU9mUHJvcGVydHlOYW1lLCBuZXcgT2JqZWN0UHJvdG9GdW5jKGV4ZWMsIGZ1bmNQ
cm90bywgT2JqZWN0UHJvdG9GdW5jOjpWYWx1ZU9mLCAgICAgICAgICAgICAgICAgMCksIERvbnRF
bnVtKTsKICAgICBwdXREaXJlY3QoImhhc093blByb3BlcnR5IiwgbmV3IE9iamVjdFByb3RvRnVu
YyhleGVjLCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVuYzo6SGFzT3duUHJvcGVydHksICAgICAg
ICAgICAgIDEpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KCJwcm9wZXJ0eUlzRW51bWVyYWJs
ZSIsIG5ldyBPYmplY3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBPYmplY3RQcm90b0Z1bmM6
OlByb3BlcnR5SXNFbnVtZXJhYmxlLCAxKSwgRG9udEVudW0pOworICAgIC8vIE1vemlsbGEgZXh0
ZW5zaW9ucworICAgIHB1dERpcmVjdCgiX19kZWZpbmVHZXR0ZXJfXyIsIG5ldyBPYmplY3RQcm90
b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBPYmplY3RQcm90b0Z1bmM6OkRlZmluZUdldHRlciwgICAg
ICAgICAgICAgMiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoIl9fZGVmaW5lU2V0dGVyX18i
LCBuZXcgT2JqZWN0UHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgT2JqZWN0UHJvdG9GdW5jOjpE
ZWZpbmVTZXR0ZXIsICAgICAgICAgICAgIDIpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KCJf
X2xvb2t1cEdldHRlcl9fIiwgbmV3IE9iamVjdFByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE9i
amVjdFByb3RvRnVuYzo6TG9va3VwR2V0dGVyLCAgICAgICAgICAgICAxKSwgRG9udEVudW0pOwor
ICAgIHB1dERpcmVjdCgiX19sb29rdXBTZXR0ZXJfXyIsIG5ldyBPYmplY3RQcm90b0Z1bmMoZXhl
YywgZnVuY1Byb3RvLCBPYmplY3RQcm90b0Z1bmM6Okxvb2t1cFNldHRlciwgICAgICAgICAgICAg
MSksIERvbnRFbnVtKTsKIH0KIAogCkBAIC03Myw2ICs3OCw1MyBAQCBKU1ZhbHVlICpPYmplY3RQ
cm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uCiAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsK
ICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odGhpc09iai0+Z2V0T3duUHJvcGVydHlTbG90
KGV4ZWMsIElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpLCBzbG90KSk7CiAgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBEZWZpbmVHZXR0ZXI6IAorICAgICAgICBjYXNlIERlZmluZVNl
dHRlcjogeworICAgICAgICAgICAgaWYgKCFhcmdzWzFdLT5pc09iamVjdCgpIHx8CisgICAgICAg
ICAgICAgICAgIXN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGFyZ3NbMV0pLT5pbXBsZW1lbnRzQ2Fs
bCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlkID09IERlZmluZUdldHRlcikKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJpbnZhbGlk
IGdldHRlciB1c2FnZSIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJpbnZhbGlkIHNldHRlciB1
c2FnZSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaWQgPT0gRGVmaW5lR2V0
dGVyKQorICAgICAgICAgICAgICAgIHRoaXNPYmotPmRlZmluZUdldHRlcihleGVjLCBJZGVudGlm
aWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oYXJn
c1sxXSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRoaXNPYmotPmRlZmlu
ZVNldHRlcihleGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSwgc3RhdGlj
X2Nhc3Q8SlNPYmplY3QgKj4oYXJnc1sxXSkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMb29rdXBHZXR0ZXI6CisgICAgICAgIGNh
c2UgTG9va3VwU2V0dGVyOiB7CisgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBKU09iamVjdCAqb2JqID0gdGhpc09iajsKKyAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSAqdiA9IG9iai0+Z2V0RGlyZWN0KHByb3BlcnR5
TmFtZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHYtPnR5cGUoKSAhPSBHZXR0ZXJTZXR0ZXJUeXBlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3QgKmZ1bmNPYmo7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGlkID09IExvb2t1cEdldHRlcikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmNPYmogPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXJJbXAgKj4odiktPmdldEdl
dHRlcigpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jT2JqID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVySW1wICo+KHYpLT5nZXRTZXR0ZXIo
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jT2JqKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jT2JqOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
IW9iai0+cHJvdG90eXBlKCkgfHwgIW9iai0+cHJvdG90eXBlKCktPmlzT2JqZWN0KCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KG9iai0+cHJvdG90
eXBlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGNhc2UgUHJvcGVydHlJ
c0VudW1lcmFibGU6CiAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRoaXNPYmotPnByb3Bl
cnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykp
KSk7CiAgICAgICAgIGNhc2UgVG9Mb2NhbGVTdHJpbmc6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvb2JqZWN0X29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2Ny
aXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRp
ZmYgLXAgLXUgLXIxLjExIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmgKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9vYmplY3Rfb2JqZWN0LmgJMTEgRGVjIDIwMDUgMDI6MDU6NDYgLTAw
MDAJMS4xMQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuaAkxMiBEZWMgMjAw
NSAyMzowNDoyNyAtMDAwMApAQCAtNTIsNyArNTIsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2
aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdDsKICAgICB2aXJ0dWFsIEpTVmFsdWUg
KmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBMaXN0ICZhcmdz
KTsKIAotICAgIGVudW0geyBUb1N0cmluZywgVG9Mb2NhbGVTdHJpbmcsIFZhbHVlT2YsIEhhc093
blByb3BlcnR5LCBQcm9wZXJ0eUlzRW51bWVyYWJsZSB9OworICAgIGVudW0geyBUb1N0cmluZywg
VG9Mb2NhbGVTdHJpbmcsIFZhbHVlT2YsIEhhc093blByb3BlcnR5LCBQcm9wZXJ0eUlzRW51bWVy
YWJsZSwKKyAgICAgICAgICAgRGVmaW5lR2V0dGVyLCBEZWZpbmVTZXR0ZXIsIExvb2t1cEdldHRl
ciwgTG9va3VwU2V0dGVyIH07CiAgIHByaXZhdGU6CiAgICAgaW50IGlkOwogICB9OwpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9w
ZXJ0eV9zbG90LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuY3BwCTEx
IERlYyAyMDA1IDAyOjA1OjQ3IC0wMDAwCTEuNQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3Bl
cnR5X3Nsb3QuY3BwCTEyIERlYyAyMDA1IDIzOjA0OjI3IC0wMDAwCkBAIC0yMywxMiArMjMsMTgg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInByb3BlcnR5X3Nsb3QuaCIKKyNp
bmNsdWRlICJvYmplY3QuaCIKIAogbmFtZXNwYWNlIEtKUyB7CiAKLUpTVmFsdWUgKlByb3BlcnR5
U2xvdDo6dW5kZWZpbmVkR2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKlByb3BlcnR5U2xv
dDo6dW5kZWZpbmVkR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIH0KIAorSlNWYWx1ZSAqUHJvcGVydHlTbG90OjpmdW5jdGlvbkdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gc2xvdC5t
X2RhdGEuZ2V0dGVyRnVuYy0+Y2FsbChleGVjLCBvcmlnaW5hbE9iamVjdCwgTGlzdDo6ZW1wdHko
KSk7Cit9CisKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9z
bG90LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IEphdmFTY3Jp
cHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0
eV9zbG90LmgJMTEgRGVjIDIwMDUgMDI6MDU6NDcgLTAwMDAJMS43CisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvcHJvcGVydHlfc2xvdC5oCTEyIERlYyAyMDA1IDIzOjA0OjI3IC0wMDAwCkBAIC0zNiwy
MCArMzYsMjAgQEAgY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBQcm9wZXJ0eVNsb3QKIHsKIHB1Ymxp
YzoKLSAgICB0eXBlZGVmIEpTVmFsdWUgKigqR2V0VmFsdWVGdW5jKShFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHR5cGVkZWYgSlNWYWx1
ZSAqKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3Qs
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAotICAgIEpTVmFsdWUg
KmdldFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KSBjb25zdAorICAgIEpTVmFsdWUgKmdldFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3Qg
Km9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAg
ICAgeyAKICAgICAgICAgaWYgKG1fZ2V0VmFsdWUgPT0gVkFMVUVfU0xPVF9NQVJLRVIpCiAgICAg
ICAgICAgICByZXR1cm4gKm1fZGF0YS52YWx1ZVNsb3Q7Ci0gICAgICAgIHJldHVybiBtX2dldFZh
bHVlKGV4ZWMsIHByb3BlcnR5TmFtZSwgKnRoaXMpOyAKKyAgICAgICAgcmV0dXJuIG1fZ2V0VmFs
dWUoZXhlYywgb3JpZ2luYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgKnRoaXMpOyAKICAgICB9CiAK
LSAgICBKU1ZhbHVlICpnZXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSkgY29uc3QKKyAgICBKU1ZhbHVlICpnZXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIEpTT2Jq
ZWN0ICpvcmlnaW5hbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogICAgIHsg
CiAgICAgICAgIGlmIChtX2dldFZhbHVlID09IFZBTFVFX1NMT1RfTUFSS0VSKQogICAgICAgICAg
ICAgcmV0dXJuICptX2RhdGEudmFsdWVTbG90OwotICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKHByb3BlcnR5TmFtZSksICp0aGlzKTsgCisgICAgICAgIHJl
dHVybiBtX2dldFZhbHVlKGV4ZWMsIG9yaWdpbmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKHBy
b3BlcnR5TmFtZSksICp0aGlzKTsgCiAgICAgfQogICAgIAogICAgIHZvaWQgc2V0VmFsdWVTbG90
KEpTT2JqZWN0ICpzbG90QmFzZSwgSlNWYWx1ZSAqKnZhbHVlU2xvdCkgCkBAIC04MSw3ICs4MSwx
NCBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGF0YS5pbmRleCA9IGluZGV4OwogICAgICAgICBtX2dl
dFZhbHVlID0gZ2V0VmFsdWU7CiAgICAgfQotCisgICAgCisgICAgdm9pZCBzZXRHZXR0ZXJTbG90
KEpTT2JqZWN0ICpzbG90QmFzZSwgSlNPYmplY3QgKmdldHRlckZ1bmMpCisgICAgeworICAgICAg
ICBtX2dldFZhbHVlID0gZnVuY3Rpb25HZXR0ZXI7CisgICAgICAgIG1fc2xvdEJhc2UgPSBzbG90
QmFzZTsKKyAgICAgICAgbV9kYXRhLmdldHRlckZ1bmMgPSBnZXR0ZXJGdW5jOworICAgIH0KKyAg
ICAKICAgICB2b2lkIHNldFVuZGVmaW5lZChKU09iamVjdCAqc2xvdEJhc2UpCiAgICAgewogICAg
ICAgICBtX3Nsb3RCYXNlID0gc2xvdEJhc2U7CkBAIC05NCwxMiArMTAxLDE0IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pbmRleDsgfQogCiBw
cml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICp1bmRlZmluZWRHZXR0ZXIoRXhlY1N0YXRlICos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLQorICAgIHN0YXRpYyBK
U1ZhbHVlICp1bmRlZmluZWRHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqZnVu
Y3Rpb25HZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAKICAgICBHZXRWYWx1ZUZ1bmMgbV9nZXRWYWx1ZTsK
IAogICAgIEpTT2JqZWN0ICptX3Nsb3RCYXNlOwogICAgIHVuaW9uIHsKKyAgICAgICAgSlNPYmpl
Y3QgKmdldHRlckZ1bmM7CiAgICAgICAgIEpTVmFsdWUgKip2YWx1ZVNsb3Q7CiAgICAgICAgIGNv
bnN0IEhhc2hFbnRyeSAqc3RhdGljRW50cnk7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4OwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTIKZGlmZiAtcCAtdSAtcjEuNTIgSmF2YVNjcmlwdENvcmUva2pz
L3N0cmluZ19vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5j
cHAJMTEgRGVjIDIwMDUgMDI6MDU6NDkgLTAwMDAJMS41MgorKysgSmF2YVNjcmlwdENvcmUva2pz
L3N0cmluZ19vYmplY3QuY3BwCTEyIERlYyAyMDA1IDIzOjA0OjI3IC0wMDAwCkBAIC01MiwxMiAr
NTIsMTIgQEAgU3RyaW5nSW5zdGFuY2U6OlN0cmluZ0luc3RhbmNlKEpTT2JqZWN0IAogICBzZXRJ
bnRlcm5hbFZhbHVlKGpzU3RyaW5nKHN0cmluZykpOwogfQogCi1KU1ZhbHVlICpTdHJpbmdJbnN0
YW5jZTo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QgJnNsb3QpCitKU1ZhbHVlICpTdHJpbmdJbnN0
YW5jZTo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCAm
c2xvdCkKIHsKICAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8U3RyaW5nSW5zdGFuY2Ug
Kj4oc2xvdC5zbG90QmFzZSgpKS0+aW50ZXJuYWxWYWx1ZSgpLT50b1N0cmluZyhleGVjKS5zaXpl
KCkpOwogfQogCi1KU1ZhbHVlICpTdHJpbmdJbnN0YW5jZTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCAmc2xvdCkKK0pTVmFsdWUgKlN0cmluZ0luc3RhbmNlOjppbmRleEdldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QgJnNsb3QpCiB7CiAgICAgY29uc3QgVUNoYXIgYyA9
IHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlICo+KHNsb3Quc2xvdEJhc2UoKSktPmludGVybmFs
VmFsdWUoKS0+dG9TdHJpbmcoZXhlYylbc2xvdC5pbmRleCgpXTsKICAgICByZXR1cm4ganNTdHJp
bmcoVVN0cmluZygmYywgMSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3N0
cmluZ19vYmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNQpkaWZmIC1wIC11IC1yMS4x
NSBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvc3RyaW5nX29iamVjdC5oCTExIERlYyAyMDA1IDAyOjA1OjQ5IC0wMDAwCTEuMTUKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgJMTIgRGVjIDIwMDUgMjM6MDQ6MjcgLTAw
MDAKQEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICps
ZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90ICZzbG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90ICZzbG90KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmpl
Y3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCAmc2xvdCk7CisgICAg
c3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCAmc2xvdCk7CiAgIH07CiAKICAg
LyoqCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMzkKZGlmZiAtcCAtdSAtcjEuMzkgSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgKLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCTExIERlYyAyMDA1IDAyOjA1OjQ5IC0wMDAwCTEu
MzkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCTEyIERlYyAyMDA1IDIzOjA0OjI3IC0w
MDAwCkBAIC01NCw3ICs1NCw4IEBAIGVudW0gVHlwZSB7CiAgICAgQm9vbGVhblR5cGUgICAgICAg
PSAzLAogICAgIFN0cmluZ1R5cGUgICAgICAgID0gNCwKICAgICBOdW1iZXJUeXBlICAgICAgICA9
IDUsCi0gICAgT2JqZWN0VHlwZSAgICAgICAgPSA2CisgICAgT2JqZWN0VHlwZSAgICAgICAgPSA2
LAorICAgIEdldHRlclNldHRlclR5cGUgID0gNwogfTsKIAogLyoqCkBAIC0xMzIsNiArMTMzLDcg
QEAgY2xhc3MgSlNDZWxsIDogcHVibGljIEpTVmFsdWUgewogICAgIGZyaWVuZCBjbGFzcyBOdW1i
ZXJJbXA7CiAgICAgZnJpZW5kIGNsYXNzIFN0cmluZ0ltcDsKICAgICBmcmllbmQgY2xhc3MgSlNP
YmplY3Q7CisgICAgZnJpZW5kIGNsYXNzIEdldHRlclNldHRlckltcDsKIHByaXZhdGU6CiAgICAg
SlNDZWxsKCk7CiAgICAgdmlydHVhbCB+SlNDZWxsKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0xheW91dFRlc3RzL0NoYW5nZUxv
Zyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDQKZGlmZiAtcCAtdSAtcjEuMTQ0IExheW91dFRl
c3RzL0NoYW5nZUxvZwotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCTEyIERlYyAyMDA1IDE5OjIw
OjEwIC0wMDAwCTEuMTQ0CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJMTIgRGVjIDIwMDUgMjM6
MDQ6NTEgLTAwMDAKQEAgLTEsMyArMSwxMiBAQAorMjAwNS0xMi0xMSAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAbWFjLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAtIEFkZCB0ZXN0IGZvciBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5v
cmcvc2hvd19idWcuY2dpP2lkPTYwNDEKKyAgICAgICAgCisgICAgICAgICogZmFzdC9qcy9wcm9w
ZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9qcy9wcm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJzLmh0bWw6IEFkZGVkLgorCiAyMDA1
LTEyLTEyICBFcmljIFNlaWRlbCAgPGVzZWlkZWxAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IGdnYXJlbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcHJvcGVydHktZ2V0dGVy
cy1hbmQtc2V0dGVycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogZmFzdC9qcy9w
cm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJzLWV4cGVjdGVkLnR4dApkaWZmIC1OIExheW91dFRl
c3RzL2Zhc3QvanMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0dGVycy1leHBlY3RlZC50eHQKLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0dGVycy1leHBlY3Rl
ZC50eHQJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9w
cm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJzLWV4cGVjdGVkLnR4dAkxMiBEZWMgMjAwNSAyMzow
NTowMSAtMDAwMApAQCAtMCwwICsxLDMgQEAKK1RoaXMgcGVyZm9ybXMgYSBudW1iZXIgb2YgZGlm
ZmVyZW50IHRlc3RzIG9uIEphdmFTY3JpcHQgZ2V0dGVycyBhbmQgc2V0dGVycy4gSWYgdGhpcyB0
ZXN0IGlzIHN1Y2Nlc3NmdWwsIHRoZSB0ZXh0ICJTVUNDRVNTIiBzaG91bGQgYmUgc2hvd24gYmVs
b3cuIE90aGVyd2lzZSwgIkZBSUxVUkUiIGFuZCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZSBp
cyBzaG93bi4KK1NVQ0NFU1MhCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcHJvcGVydHkt
Z2V0dGVycy1hbmQtc2V0dGVycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGZhc3QvanMvcHJv
cGVydHktZ2V0dGVycy1hbmQtc2V0dGVycy5odG1sCmRpZmYgLU4gTGF5b3V0VGVzdHMvZmFzdC9q
cy9wcm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJzLmh0bWwKLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0dGVycy5odG1sCTEgSmFuIDE5NzAgMDA6MDA6MDAg
LTAwMDAKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcHJvcGVydHktZ2V0dGVycy1hbmQtc2V0dGVy
cy5odG1sCTEyIERlYyAyMDA1IDIzOjA1OjAxIC0wMDAwCkBAIC0wLDAgKzEsMTUyIEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGRlYnVnKHN0cikgeworICAgIHZhciBjID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKQorICAgIGMuaW5uZXJIVE1MICs9IChz
dHIgKyAiPGJyPiIpCit9CisKKworZnVuY3Rpb24gcnVuVGVzdHMoKSB7CisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICAKKyAgICAvLyB0aGUgZ2V0IHNldCBvYmplY3QgZGVjbGFyYXRp
b24gc3ludGF4CisgICAgdmFyIG8xID0geyAnYSc6NywgZ2V0IGIoKSB7IHJldHVybiB0aGlzLmEg
KyAxIH0sIHNldCBiKHgpIHsgdGhpcy5hID0geCB9IH0KKyAgICBpZiAobzEuYiAhPSA4KSB7Cisg
ICAgICAgIGRlYnVnKCdGQUlMVVJFOiBnZXQgZnVuY3Rpb24gZGlkIG5vdCByZXR1cm4gdGhlIGNv
cnJlY3QgdmFsdWUnKQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIG8xLmIgPSAxMDsKKyAg
ICBpZiAobzEuYiAhPSAxMSkgeworICAgICAgICBkZWJ1ZygnRkFJTFVSRTogZ2V0IGZ1bmN0aW9u
IGRpZCBub3QgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlJykKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICAvLyBfX2RlZmluZUdldHRlcl9fIGFuZCBfX2RlZmluZVNldHRlcl9fCisg
ICAgdmFyIG8yID0gbmV3IE9iamVjdCgpCisgICAgbzIuYSA9IDc7CisgICAgbzIuX19kZWZpbmVH
ZXR0ZXJfXygnYicsIGZ1bmN0aW9uIGdldEIoKSB7IHJldHVybiB0aGlzLmEgKyAxfSApCisgICAg
bzIuX19kZWZpbmVTZXR0ZXJfXygnYicsIGZ1bmN0aW9uIHNldEIoeCkgeyB0aGlzLmEgPSB4fSkK
KyAgICBpZiAobzIuYiAhPSA4KSB7CisgICAgICAgICAgIGRlYnVnKCdGQUlMVVJFOiBnZXQgZnVu
Y3Rpb24gZGlkIG5vdCByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUnKQorICAgICAgICAgICByZXR1
cm47CisgICAgfQorICAgIG8yLmIgPSAxMDsKKyAgICBpZiAobzIuYiAhPSAxMSkgeworICAgICAg
ICBkZWJ1ZygnRkFJTFVSRTogZ2V0IGZ1bmN0aW9uIGRpZCBub3QgcmV0dXJuIHRoZSBjb3JyZWN0
IHZhbHVlJykKKyAgICAgICAgcmV0dXJuOworICAgIH0gICAKKyAgICAKKyAgICAvLyBTZXR0aW5n
IGEgdmFsdWUgd2l0aG91dCBoYXZpbmcgYSBzZXR0ZXIKKyAgICB2YXIgbzMgPSB7IGdldCB4KCkg
eyByZXR1cm4gNDI7IH0gfQorICAgIHZhciBudW1FeGNlcHRpb25zID0gMDsKKyAgICB0cnkgewor
ICAgICAgICBvMy54ID0gMTA7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBudW1FeGNlcHRp
b25zKys7CisgICAgfQorICAgIAorICAgIGlmIChudW1FeGNlcHRpb25zICE9IDEpIHsKKyAgICAg
ICAgZGVidWcoJ0ZBSUxVUkU6IFNldHRpbmcgYSB2YWx1ZSB3aXRob3V0IGEgc2V0dGVyIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uJykKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICAvLyBHZXR0aW5nIGEgdmFsdWUgd2l0aG91dCBoYXZpbmcgYSBnZXR0ZXIKKyAgICB2YXIgbzQg
PSB7IHNldCB4KHkpIHsgfX0KKyAgICBpZiAobzQueCAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ZGVidWcoJ0ZBSUxVUkU6IEdldHRpbmcgYSB2YWx1ZSB3aXRob3V0IGEgZ2V0dGVyIGRpZCBub3Qg
cmV0dXJuIHVuZGVmaW5lZCcpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBfX2xv
b2t1cEdldHRlcl9fIGFuZCBfX2xvb2t1cFNldHRlcl9fCisgICAgdmFyIG80ID0gbmV3IE9iamVj
dCgpCisgICAgZnVuY3Rpb24gZ2V0QigpIHsgcmV0dXJuIHRoaXMuYSB9CisgICAgZnVuY3Rpb24g
c2V0Qih4KSB7IHRoaXMuYSA9IHggfQorICAgIG80Ll9fZGVmaW5lR2V0dGVyX18oJ2InLCBnZXRC
KQorICAgIG80Ll9fZGVmaW5lU2V0dGVyX18oJ2InLCBzZXRCKQorICAgIAorICAgIGlmIChvNC5f
X2xvb2t1cEdldHRlcl9fKCdiJykgIT0gZ2V0QikgeworICAgICAgICBkZWJ1ZygnRkFJTFVSRTog
X19sb29rdXBHZXR0ZXJfXyBkaWQgbm90IHJldHVybiB0aGUgY29ycmVjdCBmdW5jdGlvbicpCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG80Ll9fbG9va3VwU2V0dGVyX18oJ2InKSAh
PSBzZXRCKSB7CisgICAgICAgIGRlYnVnKCdGQUlMVVJFOiBfX2xvb2t1cFNldHRlcl9fIGRpZCBu
b3QgcmV0dXJuIHRoZSBjb3JyZWN0IGZ1bmN0aW9uJykKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICAvLyBfX2RlZmluZUdldHRlcl9fIGFuZCBfX2RlZmluZVNldHRlcl9fIHdpdGgg
dmFyaW91cyBpbnZhbGlkIGFyZ3VtZW50cworICAgIHZhciBudW1FeGNlcHRpb25zID0gMDsKKyAg
ICB2YXIgbzUgPSBuZXcgT2JqZWN0KCk7CisgICAgdHJ5IHsgbzUuX19kZWZpbmVTZXR0ZXJfXygn
YScsIG51bGwpIH0gY2F0Y2ggKGUpIHsgbnVtRXhjZXB0aW9ucysrOyB9CisgICAgdHJ5IHsgbzUu
X19kZWZpbmVTZXR0ZXJfXygnYScsIG81KSB9IGNhdGNoIChlKSB7IG51bUV4Y2VwdGlvbnMrKzsg
fQorICAgIHRyeSB7IG81Ll9fZGVmaW5lR2V0dGVyX18oJ2EnLCBudWxsKSB9IGNhdGNoIChlKSB7
IG51bUV4Y2VwdGlvbnMrKzsgfQorICAgIHRyeSB7IG81Ll9fZGVmaW5lR2V0dGVyX18oJ2EnLCBv
NSkgfSBjYXRjaCAoZSkgeyBudW1FeGNlcHRpb25zKys7IH0KKyAgICAKKyAgICBpZiAobnVtRXhj
ZXB0aW9ucyAhPSA0KSB7CisgICAgICAgIGRlYnVnKCdGQUlMVVJFOiBvbmUgb2YgdGhlIGludmFs
aWQgZ2V0dGVyL3NldHRlciBkZWZpbml0aW9ucyBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbicp
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gc2V0dGVycyBhbmQgZ2V0dGVy
cyB3aXRoIGV4Y2VwdGlvbnMKKyAgICB2YXIgbzYgPSB7IGdldCB4KCkgeyB0aHJvdyAnRXhjZXB0
aW9uIGluIGdldCd9LCBzZXQgeChmKSB7IHRocm93ICdFeGNlcHRpb24gaW4gc2V0J319CisgICAg
dmFyIHggPSAwOworICAgIHZhciBudW1FeGNlcHRpb25zID0gMDsKKyAgICB0cnkgeworICAgICAg
ICB4ID0gbzYueDsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIG51bUV4Y2VwdGlvbnMrKzsK
KyAgICAgICAgaWYgKHggIT0gMCkgeworICAgICAgICAgICAgZGVidWcoJ0ZBSUxVUkU6IHggd2Fz
IHVwZGF0ZWQgZXZlbiB0aG91Z2ggdGhlIGdldHRlciB0aHJldyBhbiBleGNlcHRpb24nKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChudW1FeGNl
cHRpb25zICE9IDEpIHsKKyAgICAgICAgZGVidWcoJ0ZBSUxVUkU6IGRpZCBub3QgZ2V0IGFuIGV4
Y2VwdGlvbiBldmVuIHRob3VnaCB0aGUgeCBnZXR0ZXIgdGhyZXcgb25lJykKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICB2YXIgbnVtRXhjZXB0aW9ucyA9IDA7CisgICAgdHJ5IHsKKyAgICAg
ICAgbzYueCA9IDQyOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbnVtRXhjZXB0aW9ucysr
OworICAgIH0KKyAgICBpZiAobnVtRXhjZXB0aW9ucyAhPSAxKSB7CisgICAgICAgIGRlYnVnKCdG
QUlMVVJFOiBkaWQgbm90IGdldCBhbiBleGNlcHRpb24gZXZlbiB0aG91Z2ggdGhlIHggc2V0dGVy
IHRocmV3IG9uZScpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEZWZpbmluZyBh
IHNldHRlciBzaG91bGQgYWxzbyBkZWZpbmUgYSBnZXR0ZXIgZm9yIHRoZSBzYW1lIHByb3BlcnR5
CisgICAgLy8gd2hpY2ggcmV0dXJucyB1bmRlZmluZWQuIFRodXMsIGEgZ2V0dGVyIGRlZmluZWQg
b24gdGhlIHByb3RvdHlwZSBzaG91bGQgbm90CisgICAgLy8gYmUgY2FsbGVkLgorICAgIG82ID0g
eyAnYSc6Nywgc2V0IHgoYikgeyB0aGlzLmEgPSBiOyB9fQorICAgIG82LnByb3RvdHlwZSA9IHsg
Z2V0IHgoKSB7IHJldHVybiA0MjsgfX0KKyAgICAKKyAgICBpZiAobzYueCAhPSB1bmRlZmluZWQp
IHsKKyAgICAgICAgZGVidWcoJ0ZBSUxVUkU6IHggc2hvdWxkIGJlIHVuZGVmaW5lZCEnKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0
eSBhbmQgaXRzIHByb3RvdHlwZSBoYXMgYSBzZXR0ZXIgZnVuY3Rpb24gZm9yIHRoYXQKKyAgICAv
LyBwcm9wZXJ0eSwgdGhlbiBzZXR0aW5nIHRoZSBwcm9wZXJ0eSBzaG91bGQgc2V0IHRoZSBwcm9w
ZXJ0eSBkaXJlY3RseSBhbmQgbm90IGNhbGwKKyAgICAvLyB0aGUgc2V0dGVyIGZ1bmN0aW9uLgor
ICAgIHZhciBvNyA9IG5ldyBPYmplY3QoKQorICAgIG83Lm51bVNldHMgPSAwOworICAgIG83Lngg
PSAxMDsKKyAgICBvNy5fX3Byb3RvX18uX19kZWZpbmVTZXR0ZXJfXygneCcsIGZ1bmN0aW9uKCkg
eyB0aGlzLm51bVNldHMrKzsgfSkKKyAgICBvNy54ID0gMjA7CisgICAgaWYgKG83Lm51bVNldHMg
IT0gMCkgeworICAgICAgICBkZWJ1ZygnRkFJTFVSRTogc2V0dGVyIGZ1bmN0aW9uIHNob3VsZCBu
b3QgYmUgY2FsbGVkLicpCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkZWJ1ZygnU1VD
Q0VTUyEnKQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7
Ij4KK1RoaXMgcGVyZm9ybXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IHRlc3RzIG9uIEphdmFTY3Jp
cHQgZ2V0dGVycyBhbmQgc2V0dGVycy4gSWYgdGhpcyB0ZXN0IGlzIHN1Y2Nlc3NmdWwsIHRoZSB0
ZXh0ICJTVUNDRVNTIiBzaG91bGQgYmUgc2hvd24gYmVsb3cuIE90aGVyd2lzZSwgIkZBSUxVUkUi
IGFuZCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZSBpcyBzaG93bi4KKzxwcmUgaWQ9ImNvbnNv
bGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgorCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9DaGFuZ2VMb2csdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNTE1CmRpZmYgLXAgLXUgLXIxLjUxNSBXZWJDb3JlL0NoYW5nZUxvZwot
LS0gV2ViQ29yZS9DaGFuZ2VMb2cJMTIgRGVjIDIwMDUgMTk6MjI6MTEgLTAwMDAJMS41MTUKKysr
IFdlYkNvcmUvQ2hhbmdlTG9nCTEyIERlYyAyMDA1IDIzOjA3OjM3IC0wMDAwCkBAIC0xLDMgKzEs
NTcgQEAKKzIwMDUtMTItMTIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQG1hYy5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBraHRtbC9l
Y21hL2tqc19jc3MuY3BwOgorICAgICAgICAoS0pTOjpET01DU1NTdHlsZURlY2xhcmF0aW9uOjpp
bmRleEdldHRlcik6CisgICAgICAgIChLSlM6OkRPTUNTU1N0eWxlRGVjbGFyYXRpb246OmNzc1By
b3BlcnR5R2V0dGVyKToKKyAgICAgICAgKEtKUzo6RE9NU3R5bGVTaGVldExpc3Q6OmluZGV4R2V0
dGVyKToKKyAgICAgICAgKEtKUzo6RE9NU3R5bGVTaGVldExpc3Q6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAoS0pTOjpET01NZWRpYUxpc3Q6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKEtKUzo6RE9N
Q1NTUnVsZUxpc3Q6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKEtKUzo6RE9NQ1NTVmFsdWVMaXN0
OjppbmRleEdldHRlcik6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNfY3NzLmg6CisgICAgICAg
ICoga2h0bWwvZWNtYS9ranNfZG9tLmNwcDoKKyAgICAgICAgKEtKUzo6RE9NTm9kZUxpc3Q6Omlu
ZGV4R2V0dGVyKToKKyAgICAgICAgKEtKUzo6RE9NTm9kZUxpc3Q6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAoS0pTOjpET01FbGVtZW50OjphdHRyaWJ1dGVHZXR0ZXIpOgorICAgICAgICAoS0pTOjpE
T01OYW1lZE5vZGVNYXA6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChLSlM6OkRPTU5hbWVkTm9k
ZU1hcDo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAoS0pTOjpET01OYW1lZE5vZGVNYXA6Om5hbWVH
ZXR0ZXIpOgorICAgICAgICAoS0pTOjpET01OYW1lZE5vZGVzQ29sbGVjdGlvbjo6bGVuZ3RoR2V0
dGVyKToKKyAgICAgICAgKEtKUzo6RE9NTmFtZWROb2Rlc0NvbGxlY3Rpb246OmluZGV4R2V0dGVy
KToKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19kb20uaDoKKyAgICAgICAgKiBraHRtbC9lY21h
L2tqc19odG1sLmNwcDoKKyAgICAgICAgKEtKUzo6SFRNTERvY3VtZW50OjpuYW1lZEl0ZW1HZXR0
ZXIpOgorICAgICAgICAoS0pTOjpIVE1MRWxlbWVudDo6Zm9ybUluZGV4R2V0dGVyKToKKyAgICAg
ICAgKEtKUzo6SFRNTEVsZW1lbnQ6OmZvcm1OYW1lR2V0dGVyKToKKyAgICAgICAgKEtKUzo6SFRN
TEVsZW1lbnQ6OnNlbGVjdEluZGV4R2V0dGVyKToKKyAgICAgICAgKEtKUzo6SFRNTEVsZW1lbnQ6
OmZyYW1lc2V0TmFtZUdldHRlcik6CisgICAgICAgIChLSlM6OkhUTUxFbGVtZW50OjpmcmFtZVdp
bmRvd1Byb3BlcnR5R2V0dGVyKToKKyAgICAgICAgKEtKUzo6SFRNTEVsZW1lbnQ6OnJ1bnRpbWVP
YmplY3RHZXR0ZXIpOgorICAgICAgICAoS0pTOjpIVE1MRWxlbWVudDo6cnVudGltZU9iamVjdFBy
b3BlcnR5R2V0dGVyKToKKyAgICAgICAgKEtKUzo6SFRNTENvbGxlY3Rpb246Omxlbmd0aEdldHRl
cik6CisgICAgICAgIChLSlM6OkhUTUxDb2xsZWN0aW9uOjppbmRleEdldHRlcik6CisgICAgICAg
IChLSlM6OkhUTUxDb2xsZWN0aW9uOjpuYW1lR2V0dGVyKToKKyAgICAgICAgKEtKUzo6SFRNTFNl
bGVjdENvbGxlY3Rpb246OnNlbGVjdGVkSW5kZXhHZXR0ZXIpOgorICAgICAgICAqIGtodG1sL2Vj
bWEva2pzX2h0bWwuaDoKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3BwOgor
ICAgICAgICAoS0pTOjpQbHVnaW5zOjppbmRleEdldHRlcik6CisgICAgICAgIChLSlM6OlBsdWdp
bnM6Om5hbWVHZXR0ZXIpOgorICAgICAgICAoS0pTOjpNaW1lVHlwZXM6OmluZGV4R2V0dGVyKToK
KyAgICAgICAgKEtKUzo6TWltZVR5cGVzOjpuYW1lR2V0dGVyKToKKyAgICAgICAgKEtKUzo6UGx1
Z2luOjppbmRleEdldHRlcik6CisgICAgICAgIChLSlM6OlBsdWdpbjo6bmFtZUdldHRlcik6Cisg
ICAgICAgICoga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcDoKKyAgICAgICAgKEtKUzo6V2luZG93
OjpjaGlsZEZyYW1lR2V0dGVyKToKKyAgICAgICAgKEtKUzo6V2luZG93OjpuYW1lZEZyYW1lR2V0
dGVyKToKKyAgICAgICAgKEtKUzo6V2luZG93OjppbmRleEdldHRlcik6CisgICAgICAgIChLSlM6
OldpbmRvdzo6bmFtZWRJdGVtR2V0dGVyKToKKyAgICAgICAgKEtKUzo6RnJhbWVBcnJheTo6aW5k
ZXhHZXR0ZXIpOgorICAgICAgICAoS0pTOjpGcmFtZUFycmF5OjpuYW1lR2V0dGVyKToKKyAgICAg
ICAgKiBraHRtbC9lY21hL2tqc193aW5kb3cuaDoKKyAgICAgICAgVXBkYXRlIGZvciBjaGFuZ2Vz
IHRvIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jLgorICAgICAgICAKIDIwMDUtMTItMTIgIEVy
aWMgU2VpZGVsICA8ZXNlaWRlbEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgZ2dh
cmVuLgpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNDMKZGlmZiAtcCAtdSAtcjEuNDMgV2ViQ29yZS9raHRtbC9lY21hL2tq
c19jc3MuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5jcHAJMTEgRGVjIDIwMDUg
MDI6MDY6MDQgLTAwMDAJMS40MworKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwCTEy
IERlYyAyMDA1IDIzOjA3OjQxIC0wMDAwCkBAIC0xMzgsMTMgKzEzOCwxMyBAQCBET01DU1NTdHls
ZURlY2xhcmF0aW9uOjp+RE9NQ1NTU3R5bGVEZWNsCiAgIFNjcmlwdEludGVycHJldGVyOjpmb3Jn
ZXRET01PYmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotSlNWYWx1ZSAqRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkRPTUNTU1N0
eWxlRGVjbGFyYXRpb246OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9y
aWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqdGhpc09iaiA9IHN0
YXRpY19jYXN0PERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKj4oc2xvdC5zbG90QmFzZSgpKTsKICAg
cmV0dXJuIGpzU3RyaW5nT3JOdWxsKHRoaXNPYmotPm1faW1wbC0+aXRlbShzbG90LmluZGV4KCkp
KTsKIH0KIAotSlNWYWx1ZSAqRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlHZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkRPTUNTU1N0eWxlRGVjbGFyYXRpb246OmNz
c1Byb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERP
TUNTU1N0eWxlRGVjbGFyYXRpb24gKj4oc2xvdC5zbG90QmFzZSgpKTsKIApAQCAtMzgwLDEzICsz
ODAsMTMgQEAgSlNWYWx1ZSAqRE9NU3R5bGVTaGVldExpc3Q6OmdldFZhbHVlUHJvcAogICAgIH0K
IH0KIAotSlNWYWx1ZSAqRE9NU3R5bGVTaGVldExpc3Q6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlICpET01TdHlsZVNoZWV0TGlzdDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBET01TdHlsZVNoZWV0TGlz
dCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTVN0eWxlU2hlZXRMaXN0ICo+KHNsb3Quc2xvdEJh
c2UoKSk7CiAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHRoaXNPYmotPm1faW1wbC0+
aXRlbShzbG90LmluZGV4KCkpKTsKIH0KIAotSlNWYWx1ZSAqRE9NU3R5bGVTaGVldExpc3Q6Om5h
bWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkRPTVN0eWxlU2hlZXRMaXN0Ojpu
YW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgRE9NU3R5bGVTaGVldExpc3QgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01TdHlsZVNoZWV0
TGlzdCAqPihzbG90LnNsb3RCYXNlKCkpOwogICBFbGVtZW50SW1wbCAqZWxlbWVudCA9IHRoaXNP
YmotPm1fZG9jLT5nZXRFbGVtZW50QnlJZChwcm9wZXJ0eU5hbWUuZG9tU3RyaW5nKCkpOwpAQCAt
NTAxLDcgKzUwMSw3IEBAIEpTVmFsdWUgKkRPTU1lZGlhTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eSgK
ICAgfQogfQogCi1KU1ZhbHVlICpET01NZWRpYUxpc3Q6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlICpET01NZWRpYUxpc3Q6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NTWVkaWFMaXN0ICp0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8RE9NTWVkaWFMaXN0ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIHJldHVy
biBqc1N0cmluZ09yTnVsbCh0aGlzT2JqLT5tX2ltcGwtPml0ZW0oc2xvdC5pbmRleCgpKSk7CkBA
IC02NTgsNyArNjU4LDcgQEAgSlNWYWx1ZSAqRE9NQ1NTUnVsZUxpc3Q6OmdldFZhbHVlUHJvcGVy
dAogICB9CiB9CiAKLUpTVmFsdWUgKkRPTUNTU1J1bGVMaXN0OjppbmRleEdldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQorSlNWYWx1ZSAqRE9NQ1NTUnVsZUxpc3Q6OmluZGV4R2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NQ1NTUnVsZUxpc3Qg
KnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01DU1NSdWxlTGlzdCAqPihzbG90LnNsb3RCYXNlKCkp
OwogICByZXR1cm4gZ2V0RE9NQ1NTUnVsZShleGVjLCB0aGlzT2JqLT5tX2ltcGwtPml0ZW0oc2xv
dC5pbmRleCgpKSk7CkBAIC0xMTkyLDcgKzExOTIsNyBAQCBKU1ZhbHVlICpET01DU1NWYWx1ZUxp
c3Q6OmdldFZhbHVlUHJvcGVyCiAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxDU1NWYWx1
ZUxpc3RJbXBsICo+KGltcGwoKSktPmxlbmd0aCgpKTsKIH0KIAotSlNWYWx1ZSAqRE9NQ1NTVmFs
dWVMaXN0OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqRE9NQ1NTVmFs
dWVMaXN0OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgIERPTUNTU1ZhbHVlTGlzdCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTUNT
U1ZhbHVlTGlzdCAqPihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1cm4gZ2V0RE9NQ1NTVmFsdWUo
ZXhlYywgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0SW1wbCAqPih0aGlzT2JqLT5pbXBsKCkpLT5p
dGVtKHNsb3QuaW5kZXgoKSkpOwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3Mu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMwpkaWZmIC1wIC11IC1yMS4yMyBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX2Nzcy5oCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5oCTExIERl
YyAyMDA1IDAyOjA2OjA1IC0wMDAwCTEuMjMKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3Nz
LmgJMTIgRGVjIDIwMDUgMjM6MDc6NDEgLTAwMDAKQEAgLTYwLDggKzYwLDggQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgICAgICAgIEdldFByb3BlcnR5UHJpb3JpdHksIEdldFByb3BlcnR5U2hvcnRo
YW5kLCBJc1Byb3BlcnR5SW1wbGljaXQsIFNldFByb3BlcnR5LCBJdGVtIH07CiAgICAgRE9NOjpD
U1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQo
KTsgfQogICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3Rh
dGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRp
YyBKU1ZhbHVlICpjc3NQcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRl
cihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlICpjc3NQcm9wZXJ0eUdldHRlcihFeGVjU3Rh
dGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OwogCiAgICAgUmVmUHRyPERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGw+IG1faW1wbDsKICAg
fTsKQEAgLTEwMyw4ICsxMDMsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBET006OlN0eWxlU2hl
ZXRMaXN0SW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogICAgIGVu
dW0geyBJdGVtLCBMZW5ndGggfTsKICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSAqaW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlICpp
bmRleEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlICpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
Jik7CiAKICAgICBSZWZQdHI8RE9NOjpTdHlsZVNoZWV0TGlzdEltcGw+IG1faW1wbDsKICAgICBS
ZWZQdHI8RE9NOjpEb2N1bWVudEltcGw+IG1fZG9jOwpAQCAtMTI3LDcgKzEyNyw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICAgICBJdGVtLCBEZWxldGVNZWRpdW0sIEFwcGVuZE1lZGl1bSB9
OwogICAgIERPTTo6TWVkaWFMaXN0SW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5n
ZXQoKTsgfQogICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
OworICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2Jq
ZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogICAg
IFJlZlB0cjxET006Ok1lZGlhTGlzdEltcGw+IG1faW1wbDsKICAgfTsKIApAQCAtMTU3LDcgKzE1
Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGVudW0geyBJdGVtLCBMZW5ndGggfTsKICAgICBE
T006OkNTU1J1bGVMaXN0SW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsg
fQogICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAg
IHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogCiAgICAgUmVm
UHRyPERPTTo6Q1NTUnVsZUxpc3RJbXBsPiBtX2ltcGw7CiAgIH07CkBAIC0yNjksNyArMjY5LDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAg
IGVudW0geyBMZW5ndGgsIEl0ZW0gfTsKICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSAq
aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KTsKICAgfTsKIAogICBjbGFzcyBET01SR0JDb2xvciA6IHB1YmxpYyBET01PYmpl
Y3QgewpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTE4CmRpZmYgLXAgLXUgLXIxLjExOCBXZWJDb3JlL2todG1sL2VjbWEv
a2pzX2RvbS5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcAkxMSBEZWMgMjAw
NSAwMjowNjowNSAtMDAwMAkxLjExOAorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3Bw
CTEyIERlYyAyMDA1IDIzOjA3OjQxIC0wMDAwCkBAIC03NDMsMTMgKzc0MywxMyBAQCBKU1ZhbHVl
ICpET01Ob2RlTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFCiAgIHJldHVybiBqc051bWJlcihtX2lt
cGwtPmxlbmd0aCgpKTsKIH0KIAotSlNWYWx1ZSAqRE9NTm9kZUxpc3Q6OmluZGV4R2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpET01Ob2RlTGlzdDo6aW5kZXhHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBET01Ob2RlTGlzdCAq
dGhpc09iaiA9IHN0YXRpY19jYXN0PERPTU5vZGVMaXN0ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRoaXNPYmotPm1faW1wbC0+aXRlbShzbG90LmluZGV4
KCkpKTsKIH0KIAotSlNWYWx1ZSAqRE9NTm9kZUxpc3Q6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK0pTVmFsdWUgKkRPTU5vZGVMaXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
SlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NTm9kZUxpc3QgKnRoaXNPYmogPSBz
dGF0aWNfY2FzdDxET01Ob2RlTGlzdCAqPihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLCB0aGlzT2JqLT5tX2ltcGwtPml0ZW1CeUlkKHByb3BlcnR5TmFtZS5kb21T
dHJpbmcoKSkpOwpAQCAtMTE5MCw3ICsxMTkwLDcgQEAgSlNWYWx1ZSAqRE9NRWxlbWVudDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeAogICB9CiB9CiAKLUpTVmFsdWUgKkRPTUVsZW1lbnQ6OmF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqRE9NRWxlbWVudDo6YXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
RE9NRWxlbWVudCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTUVsZW1lbnQgKj4oc2xvdC5zbG90
QmFzZSgpKTsKIApAQCAtMTQ1MiwxOSArMTQ1MiwxOSBAQCBET01OYW1lZE5vZGVNYXA6On5ET01O
YW1lZE5vZGVNYXAoKQogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1w
bC5nZXQoKSk7CiB9CiAKLUpTVmFsdWUgKkRPTU5hbWVkTm9kZU1hcDo6bGVuZ3RoR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpET01OYW1lZE5vZGVNYXA6Omxlbmd0aEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTU5hbWVk
Tm9kZU1hcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTU5hbWVkTm9kZU1hcCAqPihzbG90LnNs
b3RCYXNlKCkpOwogICByZXR1cm4ganNOdW1iZXIodGhpc09iai0+bV9pbXBsLT5sZW5ndGgoKSk7
CiB9CiAKLUpTVmFsdWUgKkRPTU5hbWVkTm9kZU1hcDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK0pTVmFsdWUgKkRPTU5hbWVkTm9kZU1hcDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBET01OYW1lZE5vZGVNYXAgKnRo
aXNPYmogPSBzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVNYXAgKj4oc2xvdC5zbG90QmFzZSgpKTsK
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGhpc09iai0+bV9pbXBsLT5pdGVtKHNsb3QuaW5k
ZXgoKSkpOwogfQogCi1KU1ZhbHVlICpET01OYW1lZE5vZGVNYXA6Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkRPTU5hbWVkTm9kZU1hcDo6bmFtZUdldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTU5hbWVkTm9kZU1h
cCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTU5hbWVkTm9kZU1hcCAqPihzbG90LnNsb3RCYXNl
KCkpOwogICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCB0aGlzT2JqLT5tX2ltcGwtPmdldE5hbWVk
SXRlbShwcm9wZXJ0eU5hbWUuZG9tU3RyaW5nKCkpKTsKQEAgLTE4NjUsMTMgKzE4NjUsMTMgQEAg
RE9NTmFtZWROb2Rlc0NvbGxlY3Rpb246OkRPTU5hbWVkTm9kZXNDbwogewogfQogCi1KU1ZhbHVl
ICpET01OYW1lZE5vZGVzQ29sbGVjdGlvbjo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlICpET01OYW1lZE5vZGVzQ29sbGVjdGlvbjo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NTmFtZWROb2Rlc0Nv
bGxlY3Rpb24gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVzQ29sbGVjdGlvbiAq
PihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1cm4ganNOdW1iZXIodGhpc09iai0+bV9ub2Rlcy5j
b3VudCgpKTsKIH0KIAotSlNWYWx1ZSAqRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb246OmluZGV4R2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpET01OYW1lZE5vZGVzQ29sbGVjdGlvbjo6
aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICBET01OYW1lZE5vZGVzQ29sbGVjdGlvbiAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTU5h
bWVkTm9kZXNDb2xsZWN0aW9uICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIHJldHVybiBnZXRET01O
b2RlKGV4ZWMsIHRoaXNPYmotPm1fbm9kZXNbc2xvdC5pbmRleCgpXS5nZXQoKSk7CkluZGV4OiBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYy
CmRpZmYgLXAgLXUgLXIxLjYyIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmgKLS0tIFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfZG9tLmgJMTEgRGVjIDIwMDUgMDI6MDY6MDUgLTAwMDAJMS42Mgor
KysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaAkxMiBEZWMgMjAwNSAyMzowNzo0MSAtMDAw
MApAQCAtMTA2LDggKzEwNiw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgSlNWYWx1
ZSAqdG9QcmltaXRpdmUoRXhlY1N0YXRlICpleGVjLCBUeXBlIHByZWZlcnJlZCA9IFVuZGVmaW5l
ZFR5cGUpIGNvbnN0OwogCiAgIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0
aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogCiAgICAgUmVmUHRyPERPTTo6Tm9k
ZUxpc3RJbXBsPiBtX2ltcGw7CiAgIH07CkBAIC0xNzMsNyArMTczLDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgLy8gQ29uc3RydWN0b3IgZm9yIGluaGVyaXRlZCBjbGFzc2VzOyBkb2Vzbid0IHNl
dCB1cCBhIHByb3RvdHlwZS4KICAgICBET01FbGVtZW50KERPTTo6RWxlbWVudEltcGwgKmUpOwog
ICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICphdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSAqYXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmpl
Y3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAgIH07
CiAKICAgRE9NOjpFbGVtZW50SW1wbCAqdG9FbGVtZW50KEpTVmFsdWUgKik7IC8vIHJldHVybnMg
MCBpZiBwYXNzZWQtaW4gdmFsdWUgaXMgbm90IGEgRE9NRWxlbWVudCBvYmplY3QKQEAgLTIxOSw5
ICsyMTksOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgR2V0TmFtZWRJdGVtTlMsIFNl
dE5hbWVkSXRlbU5TLCBSZW1vdmVOYW1lZEl0ZW1OUyB9OwogICAgIERPTTo6TmFtZWROb2RlTWFw
SW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQogICBwcml2YXRlOgot
ICAgIHN0YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgSlNWYWx1
ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
OworICAgIHN0YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCAq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0
aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogCiAgICAgUmVmUHRyPERP
TTo6TmFtZWROb2RlTWFwSW1wbD4gbV9pbXBsOwogICB9OwpAQCAtMjk4LDggKzI5OCw4IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgIERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgUVZhbHVlTGlzdDwgUmVmUHRyPERPTTo6Tm9kZUltcGw+ID4mIG5vZGVzICk7CiAg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRl
bnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVl
ICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Cisg
ICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qg
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAKICAgICBR
VmFsdWVMaXN0PCBSZWZQdHI8RE9NOjpOb2RlSW1wbD4gPiBtX25vZGVzOwogICB9OwpJbmRleDog
V2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xNTMKZGlmZiAtcCAtdSAtcjEuMTUzIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5j
cHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJMTEgRGVjIDIwMDUgMDI6MDY6
MDUgLTAwMDAJMS4xNTMKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJMTIgRGVj
IDIwMDUgMjM6MDc6NDIgLTAwMDAKQEAgLTI2Myw3ICsyNjMsNyBAQCBIVE1MRG9jdW1lbnQ6OkhU
TUxEb2N1bWVudChFeGVjU3RhdGUgKmV4CiB7CiB9CiAKLUpTVmFsdWUgKkhUTUxEb2N1bWVudDo6
bmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpIVE1MRG9jdW1lbnQ6
Om5hbWVkSXRlbUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgIEhUTUxEb2N1bWVudCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVu
dCAqPihzbG90LnNsb3RCYXNlKCkpOwogICBIVE1MRG9jdW1lbnRJbXBsICZkb2MgPSAqc3RhdGlj
X2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAqPih0aGlzT2JqLT5pbXBsKCkpOwpAQCAtMTI1OSw3ICsx
MjU5LDcgQEAgSFRNTEVsZW1lbnQ6OkhUTUxFbGVtZW50KEV4ZWNTdGF0ZSAqZXhlYwogewogfQog
Ci1KU1ZhbHVlICpIVE1MRWxlbWVudDo6Zm9ybUluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlICpIVE1MRWxlbWVudDo6Zm9ybUluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
SlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBIVE1MRWxlbWVudCAqdGhpc09iaiA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCAqZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4o
dGhpc09iai0+aW1wbCgpKTsKQEAgLTEyNjcsNyArMTI2Nyw3IEBAIEpTVmFsdWUgKkhUTUxFbGVt
ZW50Ojpmb3JtSW5kZXhHZXR0ZXIoRXgKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBmb3Jt
LT5lbGVtZW50cygpLT5pdGVtKHNsb3QuaW5kZXgoKSkpOwogfQogCi1KU1ZhbHVlICpIVE1MRWxl
bWVudDo6Zm9ybU5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkhUTUxFbGVt
ZW50Ojpmb3JtTmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgICAgSFRNTEVsZW1lbnQgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm0g
PSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHRoaXNPYmotPmltcGwoKSk7CkBA
IC0xMjc1LDcgKzEyNzUsNyBAQCBKU1ZhbHVlICpIVE1MRWxlbWVudDo6Zm9ybU5hbWVHZXR0ZXIo
RXhlCiAgICAgcmV0dXJuIEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0tPmVsZW1lbnRzKCkuZ2V0
KCkpLmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotSlNWYWx1ZSAqSFRN
TEVsZW1lbnQ6OnNlbGVjdEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpI
VE1MRWxlbWVudDo6c2VsZWN0SW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAq
b3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEhUTUxFbGVtZW50ICp0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBIVE1MU2VsZWN0RWxlbWVu
dEltcGwgKnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAqPih0aGlz
T2JqLT5pbXBsKCkpOwpAQCAtMTI4Myw3ICsxMjgzLDcgQEAgSlNWYWx1ZSAqSFRNTEVsZW1lbnQ6
OnNlbGVjdEluZGV4R2V0dGVyKAogICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC0+
b3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0oc2xvdC5pbmRleCgpKSk7CiB9CiAKLUpTVmFs
dWUgKkhUTUxFbGVtZW50OjpmcmFtZXNldE5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWUgKkhUTUxFbGVtZW50OjpmcmFtZXNldE5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBK
U09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEhUTUxFbGVtZW50ICp0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBIVE1MRWxl
bWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4odGhpc09i
ai0+aW1wbCgpKTsKQEAgLTEyOTYsNyArMTI5Niw3IEBAIEpTVmFsdWUgKkhUTUxFbGVtZW50Ojpm
cmFtZXNldE5hbWVHZXR0ZXIKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1
ZSAqSFRNTEVsZW1lbnQ6OmZyYW1lV2luZG93UHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWUgKkhUTUxFbGVtZW50OjpmcmFtZVdpbmRvd1Byb3BlcnR5R2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBIVE1MRWxlbWVu
dCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHNsb3Quc2xvdEJhc2UoKSk7
CiAKQEAgLTEzMDcsNyArMTMwNyw3IEBAIEpTVmFsdWUgKkhUTUxFbGVtZW50OjpmcmFtZVdpbmRv
d1Byb3BlcnQKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSAqSFRNTEVs
ZW1lbnQ6OnJ1bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkhU
TUxFbGVtZW50OjpydW50aW1lT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3Qg
Km9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBIVE1MRWxlbWVudCAqdGhpc09iaiA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgSFRNTEVsZW1lbnRJbXBs
ICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHRoaXNPYmotPmltcGwo
KSk7CkBAIC0xMzE1LDcgKzEzMTUsNyBAQCBKU1ZhbHVlICpIVE1MRWxlbWVudDo6cnVudGltZU9i
amVjdEdldHRlCiAgICAgcmV0dXJuIGdldFJ1bnRpbWVPYmplY3QoZXhlYywgZWxlbWVudCk7CiB9
CiAKLUpTVmFsdWUgKkhUTUxFbGVtZW50OjpydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkhUTUxFbGVtZW50OjpydW50aW1lT2JqZWN0UHJvcGVy
dHlHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIEhUTUxFbGVtZW50ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4oc2xv
dC5zbG90QmFzZSgpKTsKICAgICBIVE1MRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudEltcGwgKj4odGhpc09iai0+aW1wbCgpKTsKQEAgLTMzMjAsMTkgKzMzMjAs
MTkgQEAgSFRNTENvbGxlY3Rpb246On5IVE1MQ29sbGVjdGlvbigpCiAgIFNjcmlwdEludGVycHJl
dGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotSlNWYWx1ZSAqSFRNTENv
bGxlY3Rpb246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqSFRNTENv
bGxlY3Rpb246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5h
bE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgSFRNTENvbGxlY3Rpb24gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxI
VE1MQ29sbGVjdGlvbiAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiBqc051bWJlcih0
aGlzT2JqLT5tX2ltcGwtPmxlbmd0aCgpKTsKIH0KIAotSlNWYWx1ZSAqSFRNTENvbGxlY3Rpb246
OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpIVE1MQ29sbGVjdGlvbjo6
aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIEhUTUxDb2xsZWN0aW9uICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rp
b24gKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCB0aGlz
T2JqLT5tX2ltcGwtPml0ZW0oc2xvdC5pbmRleCgpKSk7CiB9CiAKLUpTVmFsdWUgKkhUTUxDb2xs
ZWN0aW9uOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpIVE1MQ29sbGVj
dGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgSFRNTENvbGxlY3Rpb24gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxIVE1MQ29s
bGVjdGlvbiAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiB0aGlzT2JqLT5nZXROYW1l
ZEl0ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7CkBAIC0zNDUyLDcgKzM0NTIsNyBAQCBIVE1MU2Vs
ZWN0Q29sbGVjdGlvbjo6SFRNTFNlbGVjdENvbGxlY3RpCiB7CiB9CiAKLUpTVmFsdWUgKkhUTUxT
ZWxlY3RDb2xsZWN0aW9uOjpzZWxlY3RlZEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlICpIVE1MU2VsZWN0Q29sbGVjdGlvbjo6c2VsZWN0ZWRJbmRleEdldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSFRNTFNlbGVjdENv
bGxlY3Rpb24gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0Q29sbGVjdGlvbiAqPihz
bG90LnNsb3RCYXNlKCkpOwogICAgIHJldHVybiBqc051bWJlcih0aGlzT2JqLT5tX2VsZW1lbnQt
PnNlbGVjdGVkSW5kZXgoKSk7CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1s
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjMKZGlmZiAtcCAtdSAtcjEuNjMgV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19odG1sLmgKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oCTEx
IERlYyAyMDA1IDAyOjA2OjA2IC0wMDAwCTEuNjMKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
aHRtbC5oCTEyIERlYyAyMDA1IDIzOjA3OjQyIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICAgICBXcml0ZSwgV3JpdGVMbiwgR2V0RWxlbWVudHNCeU5hbWUs
IENhcHR1cmVFdmVudHMsIFJlbGVhc2VFdmVudHMsCiAgICAgICAgICAgIEJnQ29sb3IsIEZnQ29s
b3IsIEFsaW5rQ29sb3IsIExpbmtDb2xvciwgVmxpbmtDb2xvciwgTGFzdE1vZGlmaWVkLCBIZWln
aHQsIFdpZHRoLCBEaXIsIERlc2lnbk1vZGUgfTsKICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNW
YWx1ZSAqbmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVkSXRlbUdldHRlcihF
eGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOwogICB9OwogCiAgIGNsYXNzIEhUTUxFbGVtZW50IDogcHVibGljIERPTUVsZW1lbnQg
ewpAQCAtMjg1LDEzICsyODUsMTMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgIEVsZW1l
bnRDbGFzc05hbWUsIEVsZW1lbnRJbm5lclRleHQsIEVsZW1lbnREb2N1bWVudCwgRWxlbWVudENo
aWxkcmVuLCBFbGVtZW50Q29udGVudEVkaXRhYmxlLAogICAgICAgICAgICBFbGVtZW50SXNDb250
ZW50RWRpdGFibGUsIEVsZW1lbnRPdXRlckhUTUwsIEVsZW1lbnRPdXRlclRleHR9OwogICBwcml2
YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICpmb3JtSW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0
aWMgSlNWYWx1ZSAqZm9ybU5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqc2Vs
ZWN0SW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqZnJhbWVzZXROYW1lR2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgKmZyYW1lV2luZG93UHJvcGVydHlHZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqcnVudGltZU9iamVjdEdldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAg
IHN0YXRpYyBKU1ZhbHVlICpydW50aW1lT2JqZWN0UHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBz
dGF0aWMgSlNWYWx1ZSAqZm9ybUluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3Qg
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3Rh
dGljIEpTVmFsdWUgKmZvcm1OYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGlj
IEpTVmFsdWUgKnNlbGVjdEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGlj
IEpTVmFsdWUgKmZyYW1lc2V0TmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHN0YXRp
YyBKU1ZhbHVlICpmcmFtZVdpbmRvd1Byb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Cisg
ICAgc3RhdGljIEpTVmFsdWUgKnJ1bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBK
U09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSAqcnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCk7CiAgIH07CiAKICAgRE9NOjpIVE1MRWxlbWVudEltcGwgKnRvSFRNTEVsZW1lbnQo
SlNWYWx1ZSAqKTsgLy8gcmV0dXJucyAwIGlmIHBhc3NlZC1pbiB2YWx1ZSBpcyBub3QgYSBIVE1M
RWxlbWVudCBvYmplY3QKQEAgLTMxNCw5ICszMTQsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHJv
dGVjdGVkOgogICAgIFJlZlB0cjxET006OkhUTUxDb2xsZWN0aW9uSW1wbD4gbV9pbXBsOwogICBw
cml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0
aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqbmFtZUdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpOworICAgIHN0YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBK
U09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0
ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogICB9Owog
CiAgIGNsYXNzIEhUTUxTZWxlY3RDb2xsZWN0aW9uIDogcHVibGljIEhUTUxDb2xsZWN0aW9uIHsK
QEAgLTMyNSw3ICszMjUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlT
bG90Jik7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSwgSlNWYWx1ZSAqdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAg
IHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUgKnNlbGVjdGVkSW5kZXhHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSAqc2VsZWN0ZWRJbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
OwogCiAgICAgUmVmUHRyPERPTTo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsPiBtX2VsZW1lbnQ7CiAg
IH07CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfbmF2aWdhdG9yLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZmIC1wIC11IC1yMS4zOSBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX25hdmlnYXRvci5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfbmF2
aWdhdG9yLmNwcAkxMSBEZWMgMjAwNSAwMjowNjowNiAtMDAwMAkxLjM5CisrKyBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX25hdmlnYXRvci5jcHAJMTIgRGVjIDIwMDUgMjM6MDc6NDIgLTAwMDAKQEAg
LTc5LDggKzc5LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gaW5mbzsKICAgICAgICAgZW51bSB7IExlbmd0aCwgUmVmcmVzaCB9OwogICAgIHByaXZh
dGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNW
YWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0
YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2Jq
ZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICB9Owog
CiAgICAgY2xhc3MgTWltZVR5cGVzIDogcHVibGljIFBsdWdpbkJhc2UgewpAQCAtOTIsOCArOTIs
OCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZv
OwogICAgICAgICBlbnVtIHsgTGVuZ3RoIH07CiAgICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGlj
IEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICpuYW1lR2V0dGVyKEV4
ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAg
ICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMg
SlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAgIH07CiAKICAgICBjbGFzcyBQbHVnaW4g
OiBwdWJsaWMgUGx1Z2luQmFzZSB7CkBAIC0xMDUsOCArMTA1LDggQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICAgICAgZW51bSB7IE5h
bWUsIEZpbGVuYW1lLCBEZXNjcmlwdGlvbiwgTGVuZ3RoIH07CiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICpuYW1l
R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
Jik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgSlNP
YmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAg
ICBzdGF0aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgICAgIFBsdWdpbklu
Zm8gKm1faW5mbzsKICAgICB9OwpAQCAtMzM3LDEyICszMzcsMTIgQEAgSlNWYWx1ZSAqUGx1Z2lu
czo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogICByZXR1cm4ganNOdW1iZXIocGx1Z2lucy0+Y291
bnQoKSk7CiB9CiAKLUpTVmFsdWUgKlBsdWdpbnM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCitKU1ZhbHVlICpQbHVnaW5zOjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2Jq
ZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgcGx1
Z2lucy0+YXQoc2xvdC5pbmRleCgpKSk7CiB9CiAKLUpTVmFsdWUgKlBsdWdpbnM6Om5hbWVHZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKlBsdWdpbnM6Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBmb3IgKFBsdWdpbklu
Zm8gKnBsID0gcGx1Z2lucy0+Zmlyc3QoKTsgcGw7IHBsID0gcGx1Z2lucy0+bmV4dCgpKSB7CiAg
ICAgaWYgKHBsLT5uYW1lID09IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpIHsKQEAgLTM5NiwxMiAr
Mzk2LDEyIEBAIEpTVmFsdWUgKk1pbWVUeXBlczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKICAgcmV0
dXJuIGpzTnVtYmVyKHBsdWdpbnMtPmNvdW50KCkpOwogfQogCi1KU1ZhbHVlICpNaW1lVHlwZXM6
OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpNaW1lVHlwZXM6OmluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG1pbWVzLT5hdChzbG90LmluZGV4KCkpKTsKIH0K
IAotSlNWYWx1ZSAqTWltZVR5cGVzOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1Zh
bHVlICpNaW1lVHlwZXM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3Jp
Z2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICBmb3IgKE1pbWVDbGFzc0luZm8gKm0gPSBtaW1lcy0+Zmlyc3Qo
KTsgbTsgbSA9IG1pbWVzLT5uZXh0KCkpIHsKICAgICAgIGlmIChtLT50eXBlID09IHByb3BlcnR5
TmFtZS5xc3RyaW5nKCkpCkBAIC00NjYsMTMgKzQ2NiwxMyBAQCBKU1ZhbHVlICpQbHVnaW46Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0CiAgICAgfQogfQogCi1KU1ZhbHVlICpQbHVnaW46OmluZGV4
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpQbHVnaW46OmluZGV4R2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBQbHVnaW4g
KnRoaXNPYmogPSBzdGF0aWNfY2FzdDxQbHVnaW4gKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBy
ZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIHRoaXNPYmotPm1faW5mby0+bWltZXMuYXQoc2xvdC5p
bmRleCgpKSk7CiB9CiAKLUpTVmFsdWUgKlBsdWdpbjo6bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZSAqUGx1Z2luOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmpl
Y3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBQbHVnaW4gKnRoaXNPYmogPSBzdGF0aWNfY2Fz
dDxQbHVnaW4gKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBmb3IgKE1pbWVDbGFzc0luZm8gKm0g
PSB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmZpcnN0KCk7IG07IG0gPSB0aGlzT2JqLT5tX2luZm8t
Pm1pbWVzLm5leHQoKSkgewpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3dp
bmRvdy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTk3CmRpZmYgLXAgLXUgLXIxLjE5NyBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9r
anNfd2luZG93LmNwcAkxMSBEZWMgMjAwNSAwOToyNjoxMCAtMDAwMAkxLjE5NworKysgV2ViQ29y
ZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwCTEyIERlYyAyMDA1IDIzOjA3OjQyIC0wMDAwCkBA
IC0xMjMsOCArMTIzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhF
eGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwogICAgIGVudW0geyBMZW5ndGgsIExvY2F0aW9uIH07CiAg
IHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFs
dWUgKm5hbWVHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICos
IEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtOTEzLDE5ICs5MTMsMTkgQEAgSlNWYWx1ZSAq
V2luZG93OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdAogICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKLUpTVmFsdWUgKldpbmRvdzo6Y2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZSAqV2luZG93OjpjaGlsZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgV2luZG93ICp0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8V2luZG93ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIHJldHVybiByZXRyaWV2ZSh0aGlzT2Jq
LT5tX3BhcnQtPmNoaWxkRnJhbWVOYW1lZChwcm9wZXJ0eU5hbWUucXN0cmluZygpKSk7CiB9CiAK
LUpTVmFsdWUgKldpbmRvdzo6bmFtZWRGcmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZSAqV2luZG93OjpuYW1lZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3Qg
Km9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgV2luZG93ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8V2lu
ZG93ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIHJldHVybiByZXRyaWV2ZSh0aGlzT2JqLT5tX3Bh
cnQtPmZpbmRGcmFtZShwcm9wZXJ0eU5hbWUucXN0cmluZygpKSk7CiB9CiAKLUpTVmFsdWUgKldp
bmRvdzo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKldpbmRvdzo6aW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICBXaW5kb3cgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxXaW5kb3cgKj4oc2xvdC5zbG90QmFzZSgp
KTsKICAgCkBAIC05MzYsNyArOTM2LDcgQEAgSlNWYWx1ZSAqV2luZG93OjppbmRleEdldHRlcihF
eGVjU3RhdGUgKgogICByZXR1cm4gcmV0cmlldmUoc3RhdGljX2Nhc3Q8S0hUTUxQYXJ0Kj4oZnJh
bWUpKTsKIH0KIAotSlNWYWx1ZSAqV2luZG93OjpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK0pTVmFsdWUgKldpbmRvdzo6bmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
SlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgV2luZG93ICp0aGlzT2JqID0gc3RhdGlj
X2Nhc3Q8V2luZG93ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIERvY3VtZW50SW1wbCAqZG9jID0g
dGhpc09iai0+bV9wYXJ0LT54bWxEb2NJbXBsKCk7CkBAIC0yMDI3LDcgKzIwMjcsNyBAQCBKU1Zh
bHVlICpGcmFtZUFycmF5OjpnZXRWYWx1ZVByb3BlcnR5KEV4CiAgIH0KIH0KIAotSlNWYWx1ZSAq
RnJhbWVBcnJheTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkZyYW1l
QXJyYXk6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgRnJhbWVBcnJheSAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEZyYW1lQXJyYXkg
Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgS1BhcnRzOjpSZWFkT25seVBhcnQgKmZyYW1lID0gdGhp
c09iai0+cGFydC0+ZnJhbWVzKCkuYXQoc2xvdC5pbmRleCgpKTsKQEAgLTIwNDAsNyArMjA0MCw3
IEBAIEpTVmFsdWUgKkZyYW1lQXJyYXk6OmluZGV4R2V0dGVyKEV4ZWNTdGEKICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgKkZyYW1lQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkZyYW1lQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBGcmFtZUFycmF5ICp0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8RnJhbWVBcnJheSAqPihzbG90LnNsb3RCYXNlKCkpOwogICBLUGFydHM6
OlJlYWRPbmx5UGFydCAqZnJhbWUgPSB0aGlzT2JqLT5wYXJ0LT5maW5kRnJhbWUocHJvcGVydHlO
YW1lLnFzdHJpbmcoKSk7CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRv
dy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYwCmRpZmYgLXAgLXUgLXIxLjYwIFdlYkNvcmUv
a2h0bWwvZWNtYS9ranNfd2luZG93LmgKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93
LmgJMTEgRGVjIDIwMDUgMDI6MDY6MDggLTAwMDAJMS42MAorKysgV2ViQ29yZS9raHRtbC9lY21h
L2tqc193aW5kb3cuaAkxMiBEZWMgMjAwNSAyMzowNzo0MiAtMDAwMApAQCAtMTk1LDEwICsxOTUs
MTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgSlNWYWx1ZSAqZ2V0TGlzdGVuZXIoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBET006OkF0b21pY1N0cmluZyAmZXZlbnRUeXBlKSBjb25zdDsKICAgICB2
b2lkIHNldExpc3RlbmVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgRE9NOjpBdG9taWNTdHJpbmcg
JmV2ZW50VHlwZSwgSlNWYWx1ZSAqZnVuYyk7CiAgIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFs
dWUgKmNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqbmFtZWRGcmFt
ZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpOwotICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAg
IHN0YXRpYyBKU1ZhbHVlICpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgSlNWYWx1
ZSAqY2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHN0YXRpYyBKU1ZhbHVl
ICpuYW1lZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUg
KmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVk
SXRlbUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogCiAgICAgdm9pZCB1cGRhdGVMYXlvdXQoKSBj
b25zdDsKIAo=
</data>
<flag name="review"
          id="996"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5066</attachid>
            <date>2005-12-13 12:29:50 -0800</date>
            <delta_ts>2005-12-13 13:18:47 -0800</delta_ts>
            <desc>Address more comments</desc>
            <filename>jscore-getters-setters-3.diff</filename>
            <type>text/plain</type>
            <size>105429</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg5
OQpkaWZmIC1wIC11IC1yMS44OTkgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCi0tLSBKYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJMTMgRGVjIDIwMDUgMTE6MDY6MDEgLTAwMDAJMS44OTkKKysrIEph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkxMyBEZWMgMjAwNSAyMDoyNTo1NyAtMDAwMApAQCAtMSwz
NiArMSwyMjIgQEAKLTIwMDUtMTItMTIgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNv
bT4KKzIwMDUtMTItMTMgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQG1hYy5jb20+CiAKLSAg
ICAgICAgUmV2aWV3ZWQgYnkgRXJpYy4KLQotCS0gYWRkZWQgYSBuZXcgSGFzaENvdW50ZWRTZXQg
Y2xhc3MgZm9yIHRoZSBjb21tb24gcGF0dGVybiBvZiBtYXBwaW5nIGl0ZW1zIHRvIGNvdW50cyB0
aGF0IGNhbiBjaGFuZ2UKLQkKLSAgICAgICAgKiBreG1sY29yZS9IYXNoQ291bnRlZFNldC5oOiBB
ZGRlZC4KLSAgICAgICAgKEtYTUxDb3JlOjpIYXNoQ291bnRlZFNldDo6Kik6IEltcGxlbWVudGVk
LCBvbiB0b3Agb2YgSGFzaE1hcC4KLSAgICAgICAgKiBreG1sY29yZS9IYXNoTWFwLmg6Ci0gICAg
ICAgIChLWE1MQ29yZTo6SGFzaE1hcDo6YWRkKTogTmV3IG1ldGhvZCAtIGRvZXMgbm90IHJlcGxh
Y2UgZXhpc3RpbmcgdmFsdWUgaWYga2V5IGFscmVhZHkgcHJlc2VudAotCWJ1dCBvdGhlcndpc2Ug
bGlrZSBzZXQoKS4KLSAgICAgICAgKEtYTUxDb3JlOjpIYXNoTWFwOjpzZXQpOiBJbXByb3ZlZCBj
b21tZW50cy4KLSAgICAgICAgKiBreG1sY29yZS9IYXNoTWFwUHRyU3BlYy5oOgotICAgICAgICAo
S1hNTENvcmU6Okhhc2hNYXA6OmFkZCk6IEFkZGVkIHRvIHNwZWNpYWxpemF0aW9ucyB0b28uCi0g
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIG5l
dyAgZmlsZS4KLSAgICAgICAgKiBreG1sY29yZS9IYXNoRnVuY3Rpb25zLmg6IEFkZGVkIGluY2x1
ZGUgb2Ygc3RkaW50LmgKLQkKLQktIHJlcGxhY2VkIHRoZSBjdXN0b20gaGFzaHRhYmxlIGZvciB2
YWx1ZXMgcHJvdGVjdGVkIGZyb20gR0Mgd2l0aCBIYXNoQ291bnRlZFNldAorICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICAtIEZpeGVzIDxodHRwOi8vYnVnemls
bGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTYwNDE+CisgICAgICAgIAorICAgICAg
ICAqIGJpbmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwOgorICAgICAgICAoUnVudGltZUFycmF5Ojps
ZW5ndGhHZXR0ZXIpOgorICAgICAgICAoUnVudGltZUFycmF5OjppbmRleEdldHRlcik6CisgICAg
ICAgICogYmluZGluZ3MvcnVudGltZV9hcnJheS5oOgorICAgICAgICAqIGJpbmRpbmdzL3J1bnRp
bWVfbWV0aG9kLmNwcDoKKyAgICAgICAgKFJ1bnRpbWVNZXRob2Q6Omxlbmd0aEdldHRlcik6Cisg
ICAgICAgICogYmluZGluZ3MvcnVudGltZV9tZXRob2QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9y
dW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChSdW50aW1lT2JqZWN0SW1wOjpmYWxsYmFja09i
amVjdEdldHRlcik6CisgICAgICAgIChSdW50aW1lT2JqZWN0SW1wOjpmaWVsZEdldHRlcik6Cisg
ICAgICAgIChSdW50aW1lT2JqZWN0SW1wOjptZXRob2RHZXR0ZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3J1bnRpbWVfb2JqZWN0Lmg6CisgICAgICAgICoga2pzL2FycmF5X2luc3RhbmNlLmg6Cisg
ICAgICAgICoga2pzL2FycmF5X29iamVjdC5jcHA6CisgICAgICAgIChBcnJheUluc3RhbmNlOjps
ZW5ndGhHZXR0ZXIpOgorICAgICAgICAoZ2V0UHJvcGVydHkpOgorICAgICAgICBVcGRhdGUgZm9y
IGNoYW5nZXMgdG8gUHJvcGVydHlTbG90OjpnZXRWYWx1ZSBhbmQKKyAgICAgICAgUHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmMuCisgICAgICAgIAogICAgICAgICAqIGtqcy9jb2xsZWN0b3IuY3Bw
OgotICAgICAgICAoS0pTOjpDb2xsZWN0b3I6OnByb3RlY3QpOiBNb3ZlZCBjb2RlIGhlcmUgZnJv
bSBQcm90ZWN0ZWRWYWx1ZXM6OmluY3JlYXNlUHJvdGVjdENvdW50Ci0Jc2luY2UgdGhlIGNvZGUg
aXMgc28gc2ltcGxlIG5vdy4KLSAgICAgICAgKEtKUzo6Q29sbGVjdG9yOjp1bnByb3RlY3QpOiBE
aXR0byBmb3IgUHJvdGVjdGVkVmFsdWVzOjpkZWNyZWFzZVByb3RlY3RDb3VudC4KLSAgICAgICAg
KEtKUzo6Q29sbGVjdG9yOjptYXJrUHJvdGVjdGVkT2JqZWN0cyk6IFVwZGF0ZWQgZm9yIG5ldyB3
YXkgb2YgZG9pbmcgdGhpbmdzLCBub3cKLQlzaW1wbGVyIGFuZCBzYWZlci4KLSAgICAgICAgKEtK
Uzo6Q29sbGVjdG9yOjpudW1SZWZlcmVuY2VkT2JqZWN0cyk6IGRpdHRvCi0gICAgICAgIChLSlM6
OkNvbGxlY3Rvcjo6cm9vdE9iamVjdENsYXNzZXMpOiBkaXR0bwotICAgICAgICAqIGtqcy9jb2xs
ZWN0b3IuaDogQWRkZWQgcHJvdGVjdCBhbmQgdW5wcm90ZWN0IHN0YXRpYyBtZXRob2RzCi0gICAg
ICAgICoga2pzL3Byb3RlY3QuaDoKLSAgICAgICAgKEtKUzo6Z2NQcm90ZWN0KTogVXBkYXRlZCBm
b3IgcmVtb3ZhbCBvZiBQcm90ZWN0ZWRWYWx1ZXMgY2xhc3MKLSAgICAgICAgKEtKUzo6Z2NVbnBy
b3RlY3QpOiBsaWtld2lzZQotICAgICAgICAqIGtqcy9wcm90ZWN0ZWRfdmFsdWVzLmNwcDogUmVt
b3ZlZC4KLSAgICAgICAgKiBranMvcHJvdGVjdGVkX3ZhbHVlcy5oOiBSZW1vdmVkLgorICAgICAg
ICAoS0pTOjpjbGFzc05hbWUpOgorICAgICAgICBIYW5kbGUgR2V0dGVyU2V0dGVyVHlwZS4KKyAg
ICAgICAgCisgICAgICAgICoga2pzL2Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEtKUzo6RnVuY3Rp
b25JbXA6OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgIChLSlM6OkZ1bmN0aW9uSW1wOjpsZW5n
dGhHZXR0ZXIpOgorICAgICAgICAoS0pTOjpBcmd1bWVudHM6Om1hcHBlZEluZGV4R2V0dGVyKToK
KyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKToKKyAgICAgICAg
KiBranMvZnVuY3Rpb24uaDoKKyAgICAgICAgVXBkYXRlIGZvciBjaGFuZ2VzIHRvIFByb3BlcnR5
U2xvdDo6Z2V0VmFsdWUgYW5kCisgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jLgor
ICAgICAgICAKKyAgICAgICAgKiBranMvZ3JhbW1hci55OgorICAgICAgICBSZXdvcmsgZ3JhbW1h
ciBwYXJ0cyBmb3IgZ2V0IHNldCBkZWNsYXJhdGlvbnMgZGlyZWN0bHkKKyAgICAgICAgaW4gdGhl
IG9iamVjdCBsaXRlcmFsLgorICAgICAgICAKKyAgICAgICAgKiBranMvaW50ZXJuYWwuY3BwOgor
ICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6Om1hcmspOgorICAgICAgICAoS0pTOjpHZXR0
ZXJTZXR0ZXJJbXA6OnRvUHJpbWl0aXZlKToKKyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1w
Ojp0b0Jvb2xlYW4pOgorICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6OnRvTnVtYmVyKToK
KyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1wOjp0b1N0cmluZyk6CisgICAgICAgIChLSlM6
OkdldHRlclNldHRlckltcDo6dG9PYmplY3QpOgorICAgICAgICBBZGQgdHlwZSBjb252ZXJzaW9u
IGZ1bmN0aW9ucy4gVGhlc2UgYXJlbid0IG1lYW50IHRvIGJlIGNhbGxlZC4KKyAgICAgICAgCisg
ICAgICAgIChLSlM6OnByaW50SW5mbyk6CisgICAgICAgIEhhbmRsZSBHZXR0ZXJTZXR0ZXJUeXBl
LgorICAgICAgICAKKyAgICAgICAgKiBranMvbG9va3VwLmg6ICAgICAgICAKKyAgICAgICAgKEtK
Uzo6c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoS0pTOjpzdGF0aWNWYWx1ZUdldHRl
cik6CisgICAgICAgIFVwZGF0ZSBmb3IgY2hhbmdlcyB0byBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYy4KKyAgICAgICAgCisgICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgUmVmYWN0
b3IgdGhleSB3YXkgcHJvcGVydGllcyBub2RlcyBhcmUgaW1wbGVtZW50ZWQuCisgICAgICAgIFdl
IG5vdyBoYXZlIGEgUHJvcGVydHlMaXN0Tm9kZSB3aGljaCBpcyBhIGxpc3Qgb2YgUHJvcGVydHlO
b2Rlcy4KKyAgICAgICAgRWFjaCBQcm9wZXJ0eU5vZGUgaGFzIGEgbmFtZSAod2hpY2ggaXMgYSBQ
cm9wZXJ0eU5hbWVOb2RlKSBhbmQgYW4gYXNzb2NpYXRlZAorICAgICAgICB2YWx1ZSBub2RlLiBQ
cm9wZXJ0eU5vZGVzIGNhbiBiZSBvZiBkaWZmZXJlbnQgdHlwZXMuIFRoZSBDb25zdGFudCB0eXBl
IGlzIHRoZQorICAgICAgICBvbGQgY29uc3RhbnQgZGVjbGFyYXRpb24gYW5kIHRoZSBHZXR0ZXIg
YW5kIFNldHRlciB0eXBlcyBhcmUgZm9yIHByb3BlcnR5IGdldHRlcnMKKyAgICAgICAgYW5kIHNl
dHRlcnMuCisgICAgICAgIChSZXNvbHZlTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICBVcGRhdGUg
Zm9yIGNoYW5nZXMgdG8gUHJvcGVydHlTbG90OjpnZXRWYWx1ZS4KKyAgICAgICAgCisgICAgICAg
IChQcm9wZXJ0eUxpc3ROb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIEdvIHRocm91Z2ggYWxsIHBy
b3BlcnR5IG5vZGVzIGFuZCBzZXQgdGhlbSBvbiB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuIElm
IHRoZQorICAgICAgICBwcm9wZXJ0eSBub2RlcyBhcmUgb2YgdHlwZSBHZXR0ZXIgb3IgU2V0dGVy
LCBkZWZpbmUgZ2V0dGVycyBhbmQgc2V0dGVycy4gT3RoZXJ3aXNlLAorICAgICAgICBqdXN0IGFk
ZCB0aGUgcHJvcGVydGllcyBsaWtlIGJlZm9yZS4KKyAgICAgICAgCisgICAgICAgIChQcm9wZXJ0
eU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGRp
cmVjdGx5LgorICAgICAgICAKKyAgICAgICAgKFByb3BlcnR5TmFtZU5vZGU6OmV2YWx1YXRlKToK
KyAgICAgICAgUmVuYW1lIGZyb20gUHJvcGVydHlOb2RlOjpldmFsdWF0ZS4KKyAgICAgICAgCisg
ICAgICAgIChGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKFBvc3RmaXhSZXNvbHZlTm9kZTo6ZXZhbHVhdGUp
OgorICAgICAgICAoUG9zdGZpeEJyYWNrZXROb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChQb3N0
Zml4RG90Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoVHlwZU9mUmVzb2x2ZU5vZGU6OmV2YWx1
YXRlKToKKyAgICAgICAgKFByZWZpeFJlc29sdmVOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChQ
cmVmaXhCcmFja2V0Tm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoUHJlZml4RG90Tm9kZTo6ZXZh
bHVhdGUpOgorICAgICAgICAoQXNzaWduUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAg
KEFzc2lnbkRvdE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEFzc2lnbkJyYWNrZXROb2RlOjpl
dmFsdWF0ZSk6CisgICAgICAgIFVwZGF0ZSBmb3IgY2hhbmdlcyB0byBQcm9wZXJ0eVNsb3Q6Omdl
dFZhbHVlLgorICAgICAgICAKKyAgICAgICAgKiBranMvbm9kZXMuaDoKKyAgICAgICAgKEtKUzo6
UHJvcGVydHlOYW1lTm9kZTo6UHJvcGVydHlOYW1lTm9kZSk6CisgICAgICAgIFJlbmFtZSBmcm9t
IFByb3BlcnR5Tm9kZS4KKyAgICAgICAgCisgICAgICAgIChLSlM6OlByb3BlcnR5Tm9kZTo6KToK
KyAgICAgICAgKEtKUzo6UHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUpOgorICAgICAgICBOZXcg
Y2xhc3MsIHJlcHJlc2VudGluZyBhIHNpbmdsZSBwcm9wZXJ0eS4KKyAgICAgICAgCisgICAgICAg
IChLSlM6OlByb3BlcnR5TGlzdE5vZGU6OlByb3BlcnR5TGlzdE5vZGUpOgorICAgICAgICBSZW5h
bWUgZnJvbSBQcm9wZXJ0eVZhbHVlTm9kZS4KKyAgICAgICAgCisgICAgICAgIChLSlM6OkZ1bmNF
eHByTm9kZTo6RnVuY0V4cHJOb2RlKToKKyAgICAgICAgUHV0IFBhcmFtZXRlck5vZGUgcGFyYW1l
dGVyIGxhc3QsIGFuZCBtYWtlIGl0IG9wdGlvbmFsLgorICAgICAgICAKKyAgICAgICAgKEtKUzo6
T2JqZWN0TGl0ZXJhbE5vZGU6Ok9iamVjdExpdGVyYWxOb2RlKToKKyAgICAgICAgVXNlIGEgUHJv
cGVydHlMaXN0Tm9kZSBoZXJlIG5vdy4KKyAgICAgICAgCisgICAgICAgICoga2pzL25vZGVzMnN0
cmluZy5jcHA6CisgICAgICAgIChQcm9wZXJ0eUxpc3ROb2RlOjpzdHJlYW1Ubyk6CisgICAgICAg
IEl0ZXJhdGUgdGhyb3VnaCBhbGwgcHJvcGVydHkgbm9kZXMuCisgICAgICAgIAorICAgICAgICAo
UHJvcGVydHlOb2RlOjpzdHJlYW1Ubyk6CisgICAgICAgIFByaW50IG91dCB0aGUgbmFtZSBhbmQg
dmFsdWUuIAorICAgICAgICAKKyAgICAgICAgKFByb3BlcnR5TmFtZU5vZGU6OnN0cmVhbVRvKToK
KyAgICAgICAgUmVuYW1lIGZyb20gUHJvcGVydHlOb2RlOjpzdHJlYW1Uby4KKyAgICAgICAgCisg
ICAgICAgICoga2pzL29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpnZXQpOgor
ICAgICAgICBVcGRhdGUgZm9yIGNoYW5nZXMgdG8gUHJvcGVydHlTbG90OjpnZXRWYWx1ZS4KKyAg
ICAgICAgCisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpwdXQpOgorICAgICAgICBJZiB0aGUgcHJv
cGVydHkgYWxyZWFkeSBleGlzdHMgYW5kIGhhcyBhIFNldHRlciwgaW52b2tlCisgICAgICAgIHRo
ZSBzZXR0ZXIgZnVuY3Rpb24gaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBwcm9wZXJ0eSBkaXJlY3Rs
eS4KKyAgICAgICAgCisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIpOgorICAg
ICAgICAoS0pTOjpKU09iamVjdDo6ZGVmaW5lU2V0dGVyKToKKyAgICAgICAgTmV3IGZ1bmN0aW9u
cyBmb3IgZGVmaW5pbmcgcHJvcGVydHkgZ2V0dGVycyBhbmQgc2V0dGVycyBvbiB0aGUgb2JqZWN0
LgorICAgICAgICAKKyAgICAgICAgKiBranMvb2JqZWN0Lmg6CisgICAgICAgIChLSlM6OkdldHRl
clNldHRlckltcDo6dHlwZSk6CisgICAgICAgIChLSlM6OkdldHRlclNldHRlckltcDo6R2V0dGVy
U2V0dGVySW1wKToKKyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVySW1wOjpnZXRHZXR0ZXIpOgor
ICAgICAgICAoS0pTOjpHZXR0ZXJTZXR0ZXJJbXA6OnNldEdldHRlcik6CisgICAgICAgIChLSlM6
OkdldHRlclNldHRlckltcDo6Z2V0U2V0dGVyKToKKyAgICAgICAgKEtKUzo6R2V0dGVyU2V0dGVy
SW1wOjpzZXRTZXR0ZXIpOgorICAgICAgICBOZXcgY2xhc3MgZm9yIHByb3BlcnRpZXMgd2hpY2gg
aGF2ZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGRlZmluZWQuCisgICAgICAgIFRoaXMgY2xhc3MgaXMg
b25seSB1c2VkIGludGVybmFsbHkgYW5kIHNob3VsZCBuZXZlciBiZSBzZWVuIGZyb20gdGhlIG91
dHNpZGUuCisgICAgICAgIAorICAgICAgICAoS0pTOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlT
bG90KToKKyAgICAgICAgIElmIHRoZSBwcm9wZXJ0eSBpcyBhIGdldHRlciwgY2FsbCBzZXRHZXR0
ZXJTbG90IG9uIHRoZSBwcm9wZXJ0eSBzbG90LgorICAgICAgICAgCisgICAgICAgICoga2pzL29i
amVjdF9vYmplY3QuY3BwOgorICAgICAgICAoT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5
cGUpOgorICAgICAgICBBZGQgX19kZWZpbmVHZXR0ZXJfXywgX19kZWZpbmVTZXR0ZXIsIF9fbG9v
a3VwR2V0dGVyX18sIF9fbG9va3VwU2V0dGVyX18KKyAgICAgICAgdG8gcHJvdG90eXBlLgorICAg
ICAgICAKKyAgICAgICAgKE9iamVjdFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAg
ICBJbXBsZW1lbnQgaGFuZGxlcnMgZm9yIG5ldyBmdW5jdGlvbnMuCisgICAgICAgIAorICAgICAg
ICAqIGtqcy9vYmplY3Rfb2JqZWN0Lmg6CisgICAgICAgIChLSlM6Ok9iamVjdFByb3RvRnVuYzo6
KToKKyAgICAgICAgQWRkIGlkcyBmb3IgbmV3IGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAg
ICoga2pzL3Byb3BlcnR5X3Nsb3QuY3BwOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OnVu
ZGVmaW5lZEdldHRlcik6CisgICAgICAgIFVwZGF0ZSBmb3IgY2hhbmdlcyB0byBQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYy4KKyAgICAgICAgCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6
ZnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICBDYWxsIHRoZSBmdW5jdGlvbiBnZXR0ZXIgb2JqZWN0
IGFuZCByZXR1cm4gaXRzIHZhbHVlLgorICAgICAgICAKKyAgICAgICAgKiBranMvcHJvcGVydHlf
c2xvdC5oOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlKToKKyAgICAgICAg
QWRkIGEgbmV3IGFyZ3VtZW50IHdoaWNoIGlzIHRoZSBvcmlnaW5hbCBvYmplY3QgdGhhdAorICAg
ICAgICBnZXRQcm9wZXJ0eVNsb3Qgd2FzIGNhbGxlZCBvbi4KKyAgICAgICAgCisgICAgICAgIChL
SlM6OlByb3BlcnR5U2xvdDo6c2V0R2V0dGVyU2xvdCk6CisgICAgICAgIChLSlM6OlByb3BlcnR5
U2xvdDo6KToKKyAgICAgICAgTmV3IGZ1bmN0aW9uIHdoaWNoIHNldHMgYSBnZXR0ZXIgc2xvdC4g
V2hlbiBnZXRWYWx1ZSBpcyBjYWxsZWQgb24gYSAKKyAgICAgICAgZ2V0dGVyIHNsb3QsIHRoZSBn
ZXR0ZXIgZnVuY3Rpb24gb2JqZWN0IGlzIGludm9rZWQuCisgICAgICAgIAorICAgICAgICAqIGtq
cy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAgICAgICAgKFN0cmluZ0luc3RhbmNlOjpsZW5ndGhHZXR0
ZXIpOgorICAgICAgICAoU3RyaW5nSW5zdGFuY2U6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKiBr
anMvc3RyaW5nX29iamVjdC5oOgorICAgICAgICBVcGRhdGUgZm9yIGNoYW5nZXMgdG8gUHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmMuCisgICAgICAgIAorICAgICAgICAqIGtqcy92YWx1ZS5oOgor
ICAgICAgICAoS0pTOjopOgorICAgICAgICBBZGQgR2V0dGVyU2V0dGVyVHlwZSBhbmQgbWFrZSBH
ZXR0ZXJTZXR0ZXJJbXAgYSBmcmllbmQgY2xhc3Mgb2YgSlNDZWxsLgorCiswNS0xMi0xMiAgTWFj
aWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICBSZXZpZXdlZCBieSBFcmlj
LgorCisgICAgICAtIGFkZGVkIGEgbmV3IEhhc2hDb3VudGVkU2V0IGNsYXNzIGZvciB0aGUgY29t
bW9uIHBhdHRlcm4gb2YgbWFwcGluZyBpdGVtcyB0byBjb3VudHMgdGhhdCBjYW4gY2hhbmdlCisg
ICAgICAKKyAgICAgICoga3htbGNvcmUvSGFzaENvdW50ZWRTZXQuaDogQWRkZWQuCisgICAgICAo
S1hNTENvcmU6Okhhc2hDb3VudGVkU2V0OjoqKTogSW1wbGVtZW50ZWQsIG9uIHRvcCBvZiBIYXNo
TWFwLgorICAgICAgKiBreG1sY29yZS9IYXNoTWFwLmg6CisgICAgICAoS1hNTENvcmU6Okhhc2hN
YXA6OmFkZCk6IE5ldyBtZXRob2QgLSBkb2VzIG5vdCByZXBsYWNlIGV4aXN0aW5nIHZhbHVlIGlm
IGtleSBhbHJlYWR5IHByZXNlbnQKKyAgICAgIGJ1dCBvdGhlcndpc2UgbGlrZSBzZXQoKS4KKyAg
ICAgIChLWE1MQ29yZTo6SGFzaE1hcDo6c2V0KTogSW1wcm92ZWQgY29tbWVudHMuCisgICAgICAq
IGt4bWxjb3JlL0hhc2hNYXBQdHJTcGVjLmg6CisgICAgICAoS1hNTENvcmU6Okhhc2hNYXA6OmFk
ZCk6IEFkZGVkIHRvIHNwZWNpYWxpemF0aW9ucyB0b28uCisgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBuZXcgIGZpbGUuCisgICAgICAqIGt4bWxj
b3JlL0hhc2hGdW5jdGlvbnMuaDogQWRkZWQgaW5jbHVkZSBvZiBzdGRpbnQuaAorICAgICAgCisg
ICAgICAtIHJlcGxhY2VkIHRoZSBjdXN0b20gaGFzaHRhYmxlIGZvciB2YWx1ZXMgcHJvdGVjdGVk
IGZyb20gR0Mgd2l0aCBIYXNoQ291bnRlZFNldAorCisgICAgICAqIGtqcy9jb2xsZWN0b3IuY3Bw
OgorICAgICAgKEtKUzo6Q29sbGVjdG9yOjpwcm90ZWN0KTogTW92ZWQgY29kZSBoZXJlIGZyb20g
UHJvdGVjdGVkVmFsdWVzOjppbmNyZWFzZVByb3RlY3RDb3VudAorICAgICAgc2luY2UgdGhlIGNv
ZGUgaXMgc28gc2ltcGxlIG5vdy4KKyAgICAgIChLSlM6OkNvbGxlY3Rvcjo6dW5wcm90ZWN0KTog
RGl0dG8gZm9yIFByb3RlY3RlZFZhbHVlczo6ZGVjcmVhc2VQcm90ZWN0Q291bnQuCisgICAgICAo
S0pTOjpDb2xsZWN0b3I6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKTogVXBkYXRlZCBmb3IgbmV3IHdh
eSBvZiBkb2luZyB0aGluZ3MsIG5vdworICAgICAgc2ltcGxlciBhbmQgc2FmZXIuCisgICAgICAo
S0pTOjpDb2xsZWN0b3I6Om51bVJlZmVyZW5jZWRPYmplY3RzKTogZGl0dG8KKyAgICAgIChLSlM6
OkNvbGxlY3Rvcjo6cm9vdE9iamVjdENsYXNzZXMpOiBkaXR0bworICAgICAgKiBranMvY29sbGVj
dG9yLmg6IEFkZGVkIHByb3RlY3QgYW5kIHVucHJvdGVjdCBzdGF0aWMgbWV0aG9kcworICAgICAg
KiBranMvcHJvdGVjdC5oOgorICAgICAgKEtKUzo6Z2NQcm90ZWN0KTogVXBkYXRlZCBmb3IgcmVt
b3ZhbCBvZiBQcm90ZWN0ZWRWYWx1ZXMgY2xhc3MKKyAgICAgIChLSlM6OmdjVW5wcm90ZWN0KTog
bGlrZXdpc2UKKyAgICAgICoga2pzL3Byb3RlY3RlZF92YWx1ZXMuY3BwOiBSZW1vdmVkLgorICAg
ICAgKiBranMvcHJvdGVjdGVkX3ZhbHVlcy5oOiBSZW1vdmVkLgogCiAyMDA1LTEyLTEwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIApJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE0CmRpZmYgLXAgLXUgLXIxLjE0IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVf
YXJyYXkuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX2FycmF5LmNwcAkx
MSBEZWMgMjAwNSAwMjowNTozMiAtMDAwMAkxLjE0CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9ydW50aW1lX2FycmF5LmNwcAkxMyBEZWMgMjAwNSAyMDoyNTo1OCAtMDAwMApAQCAtNDQsMTMg
KzQ0LDEzIEBAIFJ1bnRpbWVBcnJheTo6flJ1bnRpbWVBcnJheSgpCiAgICAgZGVsZXRlIF9hcnJh
eTsKIH0KIAotSlNWYWx1ZSAqUnVudGltZUFycmF5OjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK0pTVmFsdWUgKlJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBSdW50aW1lQXJyYXkgKnRoaXNP
YmogPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBy
ZXR1cm4ganNOdW1iZXIodGhpc09iai0+Z2V0TGVuZ3RoKCkpOwogfQogCi1KU1ZhbHVlICpSdW50
aW1lQXJyYXk6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpSdW50aW1l
QXJyYXk6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBSdW50aW1lQXJyYXkgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50aW1l
QXJyYXkgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4gdGhpc09iai0+Z2V0Q29uY3Jl
dGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIHNsb3QuaW5kZXgoKSk7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9ydW50aW1lX2FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMwpkaWZmIC1wIC11IC1yMS4xMyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX2FycmF5LmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXku
aAkxMSBEZWMgMjAwNSAwMjowNTozMiAtMDAwMAkxLjEzCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9ydW50aW1lX2FycmF5LmgJMTMgRGVjIDIwMDUgMjA6MjU6NTggLTAwMDAKQEAgLTU0LDgg
KzU0LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAogcHJp
dmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUg
KmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUgKmxlbmd0aEdldHRlcihFeGVjU3RhdGUgKiwg
SlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgQmluZGluZ3M6OkFy
cmF5ICpfYXJyYXk7CiB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9t
ZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlm
ZiAtcCAtdSAtcjEuMTYgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuY3Bw
Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAJMTEgRGVjIDIw
MDUgMDI6MDU6MzIgLTAwMDAJMS4xNgorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGlt
ZV9tZXRob2QuY3BwCTEzIERlYyAyMDA1IDIwOjI1OjU4IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBA
IFJ1bnRpbWVNZXRob2Q6On5SdW50aW1lTWV0aG9kKCkKIHsKIH0KIAotSlNWYWx1ZSAqUnVudGlt
ZU1ldGhvZDo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpSdW50aW1l
TWV0aG9kOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIFJ1bnRpbWVNZXRob2QgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxSdW50
aW1lTWV0aG9kICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0ph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuOApkaWZmIC1wIC11IC1yMS44IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVf
bWV0aG9kLmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgJMTEg
RGVjIDIwMDUgMDI6MDU6MzIgLTAwMDAJMS44CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX21ldGhvZC5oCTEzIERlYyAyMDA1IDIwOjI1OjU4IC0wMDAwCkBAIC00OCw3ICs0OCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4
ZWMpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0
YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgSlNWYWx1ZSAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAKICAgICBCaW5kaW5nczo6TWV0aG9k
TGlzdCBfbWV0aG9kTGlzdDsKIH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50
aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4z
MApkaWZmIC1wIC11IC1yMS4zMCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29iamVj
dC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmNwcAkxMSBE
ZWMgMjAwNSAwMjowNTozMiAtMDAwMAkxLjMwCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX29iamVjdC5jcHAJMTMgRGVjIDIwMDUgMjA6MjU6NTggLTAwMDAKQEAgLTYxLDcgKzYx
LDcgQEAgUnVudGltZU9iamVjdEltcDo6UnVudGltZU9iamVjdEltcChCaW5kaQogICAgIGluc3Rh
bmNlID0gaTsKIH0KIAotSlNWYWx1ZSAqUnVudGltZU9iamVjdEltcDo6ZmFsbGJhY2tPYmplY3RH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKlJ1bnRpbWVPYmplY3RJbXA6OmZhbGxi
YWNrT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBSdW50aW1lT2JqZWN0SW1wICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UnVudGlt
ZU9iamVjdEltcCAqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIEJpbmRpbmdzOjpJbnN0YW5jZSAq
aW5zdGFuY2UgPSB0aGlzT2JqLT5pbnN0YW5jZTsKQEAgLTc2LDcgKzc2LDcgQEAgSlNWYWx1ZSAq
UnVudGltZU9iamVjdEltcDo6ZmFsbGJhY2tPYmplYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LUpTVmFsdWUgKlJ1bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CitKU1ZhbHVlICpSdW50aW1lT2JqZWN0SW1wOjpmaWVsZEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgUnVudGltZU9iamVjdEltcCAqdGhp
c09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3RJbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsK
ICAgICBCaW5kaW5nczo6SW5zdGFuY2UgKmluc3RhbmNlID0gdGhpc09iai0+aW5zdGFuY2U7CkBA
IC05Miw3ICs5Miw3IEBAIEpTVmFsdWUgKlJ1bnRpbWVPYmplY3RJbXA6OmZpZWxkR2V0dGVyKEUK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlICpSdW50aW1lT2JqZWN0SW1wOjptZXRo
b2RHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKlJ1bnRpbWVPYmplY3RJbXA6Om1l
dGhvZEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgUnVudGltZU9iamVjdEltcCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmpl
Y3RJbXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICBCaW5kaW5nczo6SW5zdGFuY2UgKmluc3Rh
bmNlID0gdGhpc09iai0+aW5zdGFuY2U7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4
CmRpZmYgLXAgLXUgLXIxLjE4IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0
LmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmgJMTEgRGVjIDIw
MDUgMDI6MDU6MzIgLTAwMDAJMS4xOAorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGlt
ZV9vYmplY3QuaAkxMyBEZWMgMjAwNSAyMDoyNTo1OCAtMDAwMApAQCAtNTMsOSArNTMsOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCiBwcml2YXRlOgotICAg
IHN0YXRpYyBKU1ZhbHVlICpmYWxsYmFja09iamVjdEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlICpm
aWVsZEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlICptZXRob2RHZXR0ZXIoRXhlY1N0YXRlICosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1
ZSAqZmFsbGJhY2tPYmplY3RHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqZmll
bGRHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqbWV0aG9kR2V0dGVyKEV4ZWNT
dGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
Jik7CiAKICAgICBCaW5kaW5nczo6SW5zdGFuY2UgKmluc3RhbmNlOwogICAgIGJvb2wgb3duc0lu
c3RhbmNlOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3RhbmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5j
ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXAgLXUgLXIxLjE5IEphdmFTY3Jp
cHRDb3JlL2tqcy9hcnJheV9pbnN0YW5jZS5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlf
aW5zdGFuY2UuaAkxMSBEZWMgMjAwNSAwMjowNTo0MSAtMDAwMAkxLjE5CisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvYXJyYXlfaW5zdGFuY2UuaAkxMyBEZWMgMjAwNSAyMDoyNTo1OCAtMDAwMApAQCAt
NTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2b2lkIHNvcnQoRXhlY1N0YXRlICpl
eGVjLCBKU09iamVjdCAqY29tcGFyZUZ1bmN0aW9uKTsKICAgICAKICAgcHJpdmF0ZToKLSAgICBz
dGF0aWMgSlNWYWx1ZSAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUgKmxlbmd0aEdldHRl
cihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOwogCiAgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQgbmV3TGVuZ3RoLCBFeGVj
U3RhdGUgKmV4ZWMpOwogICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9h
cnJheV9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU3CmRpZmYgLXAgLXUgLXIx
LjU3IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvYXJyYXlfb2JqZWN0LmNwcAkxMSBEZWMgMjAwNSAwMjowNTo0MSAtMDAwMAkxLjU3Cisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmNwcAkxMyBEZWMgMjAwNSAyMDoyNTo1
OCAtMDAwMApAQCAtNzQsNyArNzQsNyBAQCBBcnJheUluc3RhbmNlOjp+QXJyYXlJbnN0YW5jZSgp
CiAgIGZhc3RGcmVlKHN0b3JhZ2UpOwogfQogCi1KU1ZhbHVlICpBcnJheUluc3RhbmNlOjpsZW5n
dGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkFycmF5SW5zdGFuY2U6Omxlbmd0
aEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
IHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxBcnJheUluc3RhbmNlICo+KHNsb3Quc2xvdEJh
c2UoKSktPmxlbmd0aCk7CiB9CkBAIC00MjgsNyArNDI4LDcgQEAgc3RhdGljIEpTVmFsdWUgKmdl
dFByb3BlcnR5KEV4ZWNTdGF0ZSAqZQogICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgIGlmICgh
b2JqLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaW5kZXgsIHNsb3QpKQogICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBpbmRleCk7CisgICAgcmV0dXJu
IHNsb3QuZ2V0VmFsdWUoZXhlYywgb2JqLCBpbmRleCk7CiB9CiAKIC8vIEVDTUEgMTUuNC40Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvY29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNTQKZGlmZiAtcCAtdSAtcjEuNTQgSmF2YVNjcmlwdENvcmUva2pzL2NvbGxl
Y3Rvci5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3BwCTEzIERlYyAyMDA1
IDExOjA2OjA0IC0wMDAwCTEuNTQKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9jb2xsZWN0b3IuY3Bw
CTEzIERlYyAyMDA1IDIwOjI1OjU4IC0wMDAwCkBAIC02MTgsNiArNjE4LDkgQEAgc3RhdGljIGNv
bnN0IGNoYXIgKmNsYXNzTmFtZShKU0NlbGwgKnZhbAogICAgICAgbmFtZSA9IGluZm8gPyBpbmZv
LT5jbGFzc05hbWUgOiAiT2JqZWN0IjsKICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIEdl
dHRlclNldHRlclR5cGU6CisgICAgICBuYW1lID0gImdldHRlcnNldHRlciI7CisgICAgICBicmVh
azsKICAgfQogICByZXR1cm4gbmFtZTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5j
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tq
cy9mdW5jdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjMKZGlmZiAtcCAtdSAtcjEu
NjMgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pz
L2Z1bmN0aW9uLmNwcAkxMSBEZWMgMjAwNSAwMjowNTo0MyAtMDAwMAkxLjYzCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCTEzIERlYyAyMDA1IDIwOjI1OjU4IC0wMDAwCkBAIC0y
MDYsNyArMjA2LDcgQEAgdm9pZCBGdW5jdGlvbkltcDo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdAog
ewogfQogCi1KU1ZhbHVlICpGdW5jdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlICpGdW5jdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRnVuY3Rpb25JbXAgKnRoaXNP
YmogPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkltcCAqPihzbG90LnNsb3RCYXNlKCkpOwogICBDb250
ZXh0SW1wICpjb250ZXh0ID0gZXhlYy0+X2NvbnRleHQ7CkBAIC0yMTksNyArMjE5LDcgQEAgSlNW
YWx1ZSAqRnVuY3Rpb25JbXA6OmFyZ3VtZW50c0dldHRlcihFeAogICByZXR1cm4ganNOdWxsKCk7
CiB9CiAKLUpTVmFsdWUgKkZ1bmN0aW9uSW1wOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKK0pTVmFsdWUgKkZ1bmN0aW9uSW1wOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBK
U09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBGdW5jdGlvbkltcCAqdGhpc09iaiA9IHN0
YXRpY19jYXN0PEZ1bmN0aW9uSW1wICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIGNvbnN0IFBhcmFt
ZXRlciAqcCA9IHRoaXNPYmotPnBhcmFtOwpAQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgQXJndW1l
bnRzOjptYXJrKCkgCiAgICAgX2FjdGl2YXRpb25PYmplY3QtPm1hcmsoKTsKIH0KIAotSlNWYWx1
ZSAqQXJndW1lbnRzOjptYXBwZWRJbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZSAqQXJndW1lbnRzOjptYXBwZWRJbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0
ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIEFyZ3VtZW50cyAqdGhpc09iaiA9IHN0YXRpY19jYXN0
PEFyZ3VtZW50cyAqPihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1cm4gdGhpc09iai0+X2FjdGl2
YXRpb25PYmplY3QtPmdldChleGVjLCB0aGlzT2JqLT5pbmRleFRvTmFtZU1hcFtwcm9wZXJ0eU5h
bWVdKTsKQEAgLTQ4OSw3ICs0ODksNyBAQCBBY3RpdmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wKEZ1
bmN0aW9uSW1wCiAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIHN1cHBvcnQgZW51bWVyYXRpbmcg
dGhlIGFyZ3VtZW50cyBwcm9wZXJ0eT8KIH0KIAotSlNWYWx1ZSAqQWN0aXZhdGlvbkltcDo6YXJn
dW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpBY3RpdmF0aW9uSW1wOjph
cmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3Qs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQogewogICBBY3RpdmF0aW9uSW1wICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbklt
cCAqPihzbG90LnNsb3RCYXNlKCkpOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2Z1
bmN0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzcKZGlmZiAtcCAtdSAtcjEuMzcgSmF2
YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlv
bi5oCTExIERlYyAyMDA1IDAyOjA1OjQzIC0wMDAwCTEuMzcKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9mdW5jdGlvbi5oCTEzIERlYyAyMDA1IDIwOjI1OjU4IC0wMDAwCkBAIC02NCw4ICs2NCw4IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIElkZW50aWZpZXIgaWRlbnQ7CiAKICAgcHJpdmF0ZToKLSAg
ICBzdGF0aWMgSlNWYWx1ZSAqYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVu
dGlmaWVyICYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlICpsZW5n
dGhHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXIgJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUgKmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUgKiwg
SlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciAmLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBj
b25zdCBJZGVudGlmaWVyICYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgdm9pZCBwcm9j
ZXNzUGFyYW1ldGVycyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJik7CiAgICAgdmlydHVh
bCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwpAQCAtMTE1LDcgKzExNSw3
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0lu
Zm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
aW5mbzsKICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSAqbWFwcGVkSW5kZXhHZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICYsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKm1hcHBlZEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciAmLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpOwogCiAgICAgQWN0aXZhdGlvbkltcCAqX2FjdGl2YXRpb25PYmplY3Q7IAogICAgIG11
dGFibGUgSW5kZXhUb05hbWVNYXAgaW5kZXhUb05hbWVNYXA7CkBAIC0xMzYsNyArMTM2LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgYm9vbCBpc0FjdGl2YXRpb24oKSB7IHJldHVybiB0cnVlOyB9
CiAgIHByaXZhdGU6CiAgICAgc3RhdGljIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldEFy
Z3VtZW50c0dldHRlcigpOwotICAgIHN0YXRpYyBKU1ZhbHVlICphcmd1bWVudHNHZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCk7CisgICAgc3RhdGljIEpTVmFsdWUgKmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXIgJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KTsKICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
OwogICAgIAogICAgIEZ1bmN0aW9uSW1wICpfZnVuY3Rpb247CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvZ3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0
Q29yZS9ranMvZ3JhbW1hci55LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXAgLXUg
LXIxLjMxIEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkKLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9ncmFtbWFyLnkJMjggU2VwIDIwMDUgMTg6NTE6MTMgLTAwMDAJMS4zMQorKysgSmF2YVNjcmlw
dENvcmUva2pzL2dyYW1tYXIueQkxMyBEZWMgMjAwNSAyMDoyNTo1OCAtMDAwMApAQCAtNTQsNiAr
NTQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogc3RhdGljIGJvb2wgbWFrZUFzc2lnbk5vZGUo
Tm9kZSomIHJlc3VsdCwgTm9kZSAqbG9jLCBPcGVyYXRvciBvcCwgTm9kZSAqZXhwcik7CiBzdGF0
aWMgYm9vbCBtYWtlUHJlZml4Tm9kZShOb2RlKiYgcmVzdWx0LCBOb2RlICpleHByLCBPcGVyYXRv
ciBvcCk7CiBzdGF0aWMgYm9vbCBtYWtlUG9zdGZpeE5vZGUoTm9kZSomIHJlc3VsdCwgTm9kZSAq
ZXhwciwgT3BlcmF0b3Igb3ApOworc3RhdGljIGJvb2wgbWFrZUdldHRlck9yU2V0dGVyUHJvcGVy
dHlOb2RlKFByb3BlcnR5Tm9kZSomIHJlc3VsdCwgSWRlbnRpZmllciAmZ2V0T3JTZXQsIElkZW50
aWZpZXImIG5hbWUsIFBhcmFtZXRlck5vZGUgKnBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9kZSAqYm9k
eSk7CiBzdGF0aWMgTm9kZSAqbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoTm9kZSAqZnVuYywgQXJndW1l
bnRzTm9kZSAqYXJncyk7CiBzdGF0aWMgTm9kZSAqbWFrZVR5cGVPZk5vZGUoTm9kZSAqZXhwcik7
CiBzdGF0aWMgTm9kZSAqbWFrZURlbGV0ZU5vZGUoTm9kZSAqZXhwcik7CkBAIC04NCw4ICs4NSw5
IEBAIHN0YXRpYyBOb2RlICptYWtlRGVsZXRlTm9kZShOb2RlICpleHByKTsKICAgQ2FzZUNsYXVz
ZU5vZGUgICAgICAqY2NsOwogICBFbGVtZW50Tm9kZSAgICAgICAgICplbG07CiAgIE9wZXJhdG9y
ICAgICAgICAgICAgb3A7Ci0gIFByb3BlcnR5VmFsdWVOb2RlICAgKnBsaXN0OwotICBQcm9wZXJ0
eU5vZGUgICAgICAgICpwbm9kZTsKKyAgUHJvcGVydHlMaXN0Tm9kZSAgICpwbGlzdDsKKyAgUHJv
cGVydHlOb2RlICAgICAgICpwbm9kZTsKKyAgUHJvcGVydHlOYW1lTm9kZSAgICpwbmFtZTsKIH0K
IAogJXN0YXJ0IFByb2dyYW0KQEAgLTE3OSw5ICsxODEsOSBAQCBzdGF0aWMgTm9kZSAqbWFrZURl
bGV0ZU5vZGUoTm9kZSAqZXhwcik7CiAldHlwZSA8Y2xpc3Q+IENhc2VDbGF1c2VzICBDYXNlQ2xh
dXNlc09wdAogJXR5cGUgPGl2YWw+ICBFbGlzaW9uIEVsaXNpb25PcHQKICV0eXBlIDxlbG0+ICAg
RWxlbWVudExpc3QKLSV0eXBlIDxwbGlzdD4gUHJvcGVydHlOYW1lQW5kVmFsdWVMaXN0Ci0ldHlw
ZSA8cG5vZGU+IFByb3BlcnR5TmFtZQotCisldHlwZSA8cG5hbWU+IFByb3BlcnR5TmFtZQorJXR5
cGUgPHBub2RlPiBQcm9wZXJ0eQorJXR5cGUgPHBsaXN0PiBQcm9wZXJ0eUxpc3QKICUlCiAKIExp
dGVyYWw6CkBAIC0yMDIsMTAgKzIwNCwyOCBAQCBMaXRlcmFsOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KIDsKIAorUHJvcGVydHlOYW1lOgorICAgIElERU5UICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgUHJvcGVydHlOYW1lTm9kZSgq
JDEpOyB9CisgIHwgU1RSSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5l
dyBQcm9wZXJ0eU5hbWVOb2RlKElkZW50aWZpZXIoKiQxKSk7IH0KKyAgfCBOVU1CRVIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IFByb3BlcnR5TmFtZU5vZGUoJDEpOyB9
Cis7CisKK1Byb3BlcnR5OgorICAgIFByb3BlcnR5TmFtZSAnOicgQXNzaWdubWVudEV4cHIgICAg
IHsgJCQgPSBuZXcgUHJvcGVydHlOb2RlKCQxLCAkMywgUHJvcGVydHlOb2RlOjpDb25zdGFudCk7
IH0KKyAgfCBJREVOVCBJREVOVCAnKCcgJyknIEZ1bmN0aW9uQm9keSAgICB7IGlmICghbWFrZUdl
dHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKCQkLCAqJDEsICokMiwgMCwgJDUpKSBZWUFCT1JUOyB9
CisgIHwgSURFTlQgSURFTlQgJygnIEZvcm1hbFBhcmFtZXRlckxpc3QgJyknIEZ1bmN0aW9uQm9k
eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaWYgKCFtYWtlR2V0
dGVyT3JTZXR0ZXJQcm9wZXJ0eU5vZGUoJCQsICokMSwgKiQyLCAkNCwgJDYpKSBZWUFCT1JUOyB9
Cis7CisKK1Byb3BlcnR5TGlzdDoKKyAgICBQcm9wZXJ0eSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7ICQkID0gbmV3IFByb3BlcnR5TGlzdE5vZGUoJDEpOyB9CisgIHwgUHJvcGVydHlMaXN0
ICcsJyBQcm9wZXJ0eSAgICAgICAgICAgeyAkJCA9IG5ldyBQcm9wZXJ0eUxpc3ROb2RlKCQzLCAk
MSk7IH0KKzsKKwogUHJpbWFyeUV4cHI6CiAgICAgUHJpbWFyeUV4cHJOb0JyYWNlCiAgIHwgJ3sn
ICd9JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBPYmplY3RMaXRlcmFs
Tm9kZSgpOyB9Ci0gIHwgJ3snIFByb3BlcnR5TmFtZUFuZFZhbHVlTGlzdCAnfScgICAgeyAkJCA9
IG5ldyBPYmplY3RMaXRlcmFsTm9kZSgkMik7IH0KKyAgfCAneycgUHJvcGVydHlMaXN0ICd9JyAg
ICAgICAgICAgICAgICB7ICQkID0gbmV3IE9iamVjdExpdGVyYWxOb2RlKCQyKTsgfQogOwogCiBQ
cmltYXJ5RXhwck5vQnJhY2U6CkBAIC0yMzgsMTggKzI1OCw2IEBAIEVsaXNpb246CiAgIHwgRWxp
c2lvbiAnLCcgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9ICQxICsgMTsgfQogOwogCi1Q
cm9wZXJ0eU5hbWVBbmRWYWx1ZUxpc3Q6Ci0gICAgUHJvcGVydHlOYW1lICc6JyBBc3NpZ25tZW50
RXhwciAgICAgeyAkJCA9IG5ldyBQcm9wZXJ0eVZhbHVlTm9kZSgkMSwgJDMpOyB9Ci0gIHwgUHJv
cGVydHlOYW1lQW5kVmFsdWVMaXN0ICcsJyBQcm9wZXJ0eU5hbWUgJzonIEFzc2lnbm1lbnRFeHBy
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBQcm9w
ZXJ0eVZhbHVlTm9kZSgkMywgJDUsICQxKTsgfQotOwotCi1Qcm9wZXJ0eU5hbWU6Ci0gICAgSURF
TlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBQcm9wZXJ0eU5vZGUo
KiQxKTsgfQotICB8IFNUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBu
ZXcgUHJvcGVydHlOb2RlKElkZW50aWZpZXIoKiQxKSk7IH0KLSAgfCBOVU1CRVIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IFByb3BlcnR5Tm9kZSgkMSk7IH0KLTsKLQog
TWVtYmVyRXhwcjoKICAgICBQcmltYXJ5RXhwcgogICB8IEZ1bmN0aW9uRXhwciAgICAgICAgICAg
ICAgICAgICAgICAgIHsgJCQgPSAkMTsgfQpAQCAtODA2LDEwICs4MTQsMTAgQEAgRnVuY3Rpb25E
ZWNsYXJhdGlvbjoKIEZ1bmN0aW9uRXhwcjoKICAgICBGVU5DVElPTiAnKCcgJyknIEZ1bmN0aW9u
Qm9keSAgICAgICB7ICQkID0gbmV3IEZ1bmNFeHByTm9kZShJZGVudGlmaWVyOjpudWxsKCksICQ0
KTsgfQogICB8IEZVTkNUSU9OICcoJyBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcpJyBGdW5jdGlvbkJv
ZHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IEZ1
bmNFeHByTm9kZShJZGVudGlmaWVyOjpudWxsKCksICQzLCAkNSk7IH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IEZ1bmNFeHByTm9kZShJZGVudGlm
aWVyOjpudWxsKCksICQ1LCAkMyk7IH0KICAgfCBGVU5DVElPTiBJREVOVCAnKCcgJyknIEZ1bmN0
aW9uQm9keSB7ICQkID0gbmV3IEZ1bmNFeHByTm9kZSgqJDIsICQ1KTsgfQogICB8IEZVTkNUSU9O
IElERU5UICcoJyBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcpJyBGdW5jdGlvbkJvZHkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IEZ1bmNFeHByTm9kZSgq
JDIsICQ0LCAkNik7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICQkID0gbmV3IEZ1bmNFeHByTm9kZSgqJDIsICQ2LCAkNCk7IH0KIDsKIAogRm9ybWFsUGFyYW1l
dGVyTGlzdDoKQEAgLTk2MCw2ICs5NjgsMjMgQEAgc3RhdGljIE5vZGUgKm1ha2VEZWxldGVOb2Rl
KE5vZGUgKmV4cHIpCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBtYWtlR2V0dGVyT3JTZXR0ZXJQ
cm9wZXJ0eU5vZGUoUHJvcGVydHlOb2RlKiYgcmVzdWx0LCBJZGVudGlmaWVyJiBnZXRPclNldCwg
SWRlbnRpZmllciYgbmFtZSwgUGFyYW1ldGVyTm9kZSAqcGFyYW1zLCBGdW5jdGlvbkJvZHlOb2Rl
ICpib2R5KQoreworICAgIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlOworICAgIAorICAgIGlmIChn
ZXRPclNldCA9PSAiZ2V0IikKKyAgICAgICAgdHlwZSA9IFByb3BlcnR5Tm9kZTo6R2V0dGVyOwor
ICAgIGVsc2UgaWYgKGdldE9yU2V0ID09ICJzZXQiKQorICAgICAgICB0eXBlID0gUHJvcGVydHlO
b2RlOjpTZXR0ZXI7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
cmVzdWx0ID0gbmV3IFByb3BlcnR5Tm9kZShuZXcgUHJvcGVydHlOYW1lTm9kZShuYW1lKSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRnVuY0V4cHJOb2RlKElkZW50aWZpZXI6
Om51bGwoKSwgYm9keSwgcGFyYW1zKSwgdHlwZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwog
aW50IHl5ZXJyb3IoY29uc3QgY2hhciAqIC8qIHMgKi8pICAvKiBDYWxsZWQgYnkgeXlwYXJzZSBv
biBlcnJvciAqLwogewogICAvLyBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiAlcyBhdCBsaW5lICVk
XG4iLCBzLCBLSlM6OkxleGVyOjpjdXJyKCktPmxpbmVObygpKTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9pbnRlcm5hbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFT
Y3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODIKZGlm
ZiAtcCAtdSAtcjEuODIgSmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmNwcAotLS0gSmF2YVNj
cmlwdENvcmUva2pzL2ludGVybmFsLmNwcAkxMSBEZWMgMjAwNSAwMjowNTo0NCAtMDAwMAkxLjgy
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCTEzIERlYyAyMDA1IDIwOjI1OjU4
IC0wMDAwCkBAIC0yMjMsNiArMjIzLDQ1IEBAIGJvb2wgTnVtYmVySW1wOjpnZXRVSW50MzIodWlu
dDMyX3QmIHVpbnQKICAgcmV0dXJuIChkb3VibGUpdWludDMyID09IHZhbDsKIH0KIAorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdldHRlclNldHRlckltcCAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgR2V0dGVyU2V0dGVySW1wOjptYXJrKCkKK3sKKyAgICBp
ZiAoZ2V0dGVyICYmICFnZXR0ZXItPm1hcmtlZCgpKQorICAgICAgICBnZXR0ZXItPm1hcmsoKTsK
KyAgICBpZiAoc2V0dGVyICYmICFzZXR0ZXItPm1hcmtlZCgpKQorICAgICAgICBzZXR0ZXItPm1h
cmsoKTsKK30KKworSlNWYWx1ZSAqR2V0dGVyU2V0dGVySW1wOjp0b1ByaW1pdGl2ZShFeGVjU3Rh
dGUgKmV4ZWMsIFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJl
dHVybiBqc051bGwoKTsKK30KKworYm9vbCBHZXR0ZXJTZXR0ZXJJbXA6OnRvQm9vbGVhbihFeGVj
U3RhdGUgKikgY29uc3QKK3sKKyAgICBhc3NlcnQoZmFsc2UpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworZG91YmxlIEdldHRlclNldHRlckltcDo6dG9OdW1iZXIoRXhlY1N0YXRlICopIGNvbnN0
Cit7CisgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICByZXR1cm4gMC4wOworfQorCitVU3RyaW5nIEdl
dHRlclNldHRlckltcDo6dG9TdHJpbmcoRXhlY1N0YXRlICopIGNvbnN0Cit7CisgICAgYXNzZXJ0
KGZhbHNlKTsKKyAgICByZXR1cm4gVVN0cmluZzo6bnVsbCgpOworfQorCitKU09iamVjdCAqR2V0
dGVyU2V0dGVySW1wOjp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Cit7CisgICAgYXNz
ZXJ0KGZhbHNlKTsKKyAgICByZXR1cm4ganNOdWxsKCktPnRvT2JqZWN0KGV4ZWMpOworfQorCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGFiZWxTdGFjayAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIExhYmVsU3RhY2s6OnB1c2goY29uc3QgSWRl
bnRpZmllciAmaWQpCkBAIC04MzUsNiArODc0LDkgQEAgdm9pZCBwcmludEluZm8oRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBjaAogICAgICAgaWYgKG5hbWUuaXNOdWxsKCkpCiAgICAgICAgIG5hbWUg
PSAiKHVua25vd24gY2xhc3MpIjsKICAgICAgIGJyZWFrOworICAgIGNhc2UgR2V0dGVyU2V0dGVy
VHlwZToKKyAgICAgIG5hbWUgPSAiR2V0dGVyU2V0dGVyIjsKKyAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBVU3RyaW5nIHZTdHJpbmcgPSB2LT50b1N0cmluZyhleGVjKTsKICAgICBpZiAoIHZTdHJp
bmcuc2l6ZSgpID4gNTAgKQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAtcCAtdSAtcjEuMjAgSmF2YVNjcmlwdENvcmUv
a2pzL2xvb2t1cC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgJMTEgRGVjIDIwMDUg
MDI6MDU6NDUgLTAwMDAJMS4yMAorKysgSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCTEzIERl
YyAyMDA1IDIwOjI1OjU4IC0wMDAwCkBAIC0xMjcsNyArMTI3LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAqIEhlbHBlciBmb3IgZ2V0U3RhdGljRnVuY3Rpb25TbG90IGFuZCBnZXRTdGF0aWNQcm9w
ZXJ0eVNsb3QKICAgICovCiAgIHRlbXBsYXRlIDxjbGFzcyBGdW5jSW1wPgotICBpbmxpbmUgSlNW
YWx1ZSAqc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKKyAgaW5saW5lIEpT
VmFsdWUgKnN0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9y
aWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKICAgewogICAgICAgLy8gTG9vayBmb3IgY2FjaGVkIHZhbHVlIGluIGR5
bmFtaWMgbWFwIG9mIHByb3BlcnRpZXMgKGluIEpTT2JqZWN0KQogICAgICAgSlNPYmplY3QgKnRo
aXNPYmogPSBzbG90LnNsb3RCYXNlKCk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAqIEhlbHBlciBmb3IgZ2V0U3RhdGljVmFsdWVTbG90IGFuZCBnZXRTdGF0aWNQcm9w
ZXJ0eVNsb3QKICAgICovCiAgIHRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wPgotICBpbmxpbmUgSlNW
YWx1ZSAqc3RhdGljVmFsdWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorICBpbmxpbmUgSlNWYWx1ZSAqc3RhdGljVmFs
dWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgIHsKICAgICAgIFRoaXNJ
bXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxUaGlzSW1wICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAg
ICAgICBjb25zdCBIYXNoRW50cnkgKmVudHJ5ID0gc2xvdC5zdGF0aWNFbnRyeSgpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45
MApkaWZmIC1wIC11IC1yMS45MCBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCi0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCTExIERlYyAyMDA1IDAyOjA1OjQ1IC0wMDAwCTEuOTAK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJMTMgRGVjIDIwMDUgMjA6MjU6NTkgLTAw
MDAKQEAgLTI3Nyw3ICsyNzcsNyBAQCBKU1ZhbHVlICpSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlCiAgICAgSlNPYmplY3QgKm8gPSAqaXRlcjsKIAogICAgIGlmIChvLT5nZXRQcm9wZXJ0
eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpKQotICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhl
YywgaWRlbnQpOworICAgICAgcmV0dXJuIHNsb3QuZ2V0VmFsdWUoZXhlYywgbywgaWRlbnQpOwog
ICAgIAogICAgICsraXRlcjsKICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwpAQCAtMzUzLDI5ICsz
NTMsNTAgQEAgSlNWYWx1ZSAqT2JqZWN0TGl0ZXJhbE5vZGU6OmV2YWx1YXRlKEV4ZQogICByZXR1
cm4gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3QoKS0+Y29uc3RydWN0
KGV4ZWMsTGlzdDo6ZW1wdHkoKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBQcm9wZXJ0eVZhbHVlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlMaXN0Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBFQ01BIDExLjEuNQotSlNWYWx1ZSAqUHJvcGVydHlW
YWx1ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKK0pTVmFsdWUgKlByb3BlcnR5TGlz
dE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKICAgSlNPYmplY3QgKm9iaiA9IGV4
ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0KCktPmNvbnN0cnVjdChleGVj
LCBMaXN0OjplbXB0eSgpKTsKICAgCi0gIGZvciAoUHJvcGVydHlWYWx1ZU5vZGUgKnAgPSB0aGlz
OyBwOyBwID0gcC0+bGlzdC5nZXQoKSkgewotICAgIEpTVmFsdWUgKm4gPSBwLT5uYW1lLT5ldmFs
dWF0ZShleGVjKTsKKyAgZm9yIChQcm9wZXJ0eUxpc3ROb2RlICpwID0gdGhpczsgcDsgcCA9IHAt
Pmxpc3QuZ2V0KCkpIHsKKyAgICBKU1ZhbHVlICpuID0gcC0+bm9kZS0+bmFtZS0+ZXZhbHVhdGUo
ZXhlYyk7CiAgICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKLSAgICBKU1ZhbHVlICp2ID0gcC0+
YXNzaWduLT5ldmFsdWF0ZShleGVjKTsKKyAgICBKU1ZhbHVlICp2ID0gcC0+bm9kZS0+YXNzaWdu
LT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQotCi0gICAgb2Jq
LT5wdXQoZXhlYywgSWRlbnRpZmllcihuLT50b1N0cmluZyhleGVjKSksIHYpOworICAgIAorICAg
IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcihuLT50b1N0cmluZyhleGVjKSk7
CisgICAgc3dpdGNoIChwLT5ub2RlLT50eXBlKSB7CisgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6
R2V0dGVyOgorICAgICAgICBpZiAodi0+aXNPYmplY3QoKSkKKyAgICAgICAgICBvYmotPmRlZmlu
ZUdldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6U2V0dGVyOgorICAgICAg
ICBpZiAodi0+aXNPYmplY3QoKSkKKyAgICAgICAgICBvYmotPmRlZmluZVNldHRlcihleGVjLCBw
cm9wZXJ0eU5hbWUsIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQ6CisgICAgICAgIG9iai0+cHV0KGV4
ZWMsIHByb3BlcnR5TmFtZSwgdik7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgfQogCiAgIHJl
dHVybiBvYmo7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0
eU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gUHJvcGVydHlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBFQ01BIDExLjEuNQorSlNWYWx1ZSAqUHJvcGVydHlOb2RlOjpldmFsdWF0ZShFeGVj
U3RhdGUgKmV4ZWMpCit7CisgIGFzc2VydChmYWxzZSk7CisgIHJldHVybiBqc051bGwoKTsKK30K
KworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eU5hbWVOb2RlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRUNNQSAxMS4xLjUKLUpTVmFsdWUgKlBy
b3BlcnR5Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICopCitKU1ZhbHVlICpQcm9wZXJ0eU5hbWVO
b2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKikKIHsKICAgSlNWYWx1ZSAqczsKIApAQCAtNTIwLDcg
KzU0MSw3IEBAIEpTVmFsdWUgKkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjpldmFsdWEKICAgZG8g
eyAKICAgICBiYXNlID0gKml0ZXI7CiAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVj
LCBpZGVudCwgc2xvdCkpIHsKLSAgICAgIEpTVmFsdWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMs
IGlkZW50KTsKKyAgICAgIEpTVmFsdWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIGlk
ZW50KTsKICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgICAgIAogICAgICAgaWYg
KCF2LT5pc09iamVjdCgpKSB7CkBAIC01NjksNyArNTkwLDcgQEAgSlNWYWx1ZSAqRnVuY3Rpb25D
YWxsQnJhY2tldE5vZGU6OmV2YWx1YQogICBKU1ZhbHVlICpmdW5jVmFsOwogICBpZiAoc3Vic2Ny
aXB0VmFsLT5nZXRVSW50MzIoaSkpIHsKICAgICBpZiAoYmFzZU9iai0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIGksIHNsb3QpKQotICAgICAgZnVuY1ZhbCA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaSk7
CisgICAgICBmdW5jVmFsID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlT2JqLCBpKTsKICAgICBl
bHNlCiAgICAgICBmdW5jVmFsID0ganNVbmRlZmluZWQoKTsKICAgfSBlbHNlIHsKQEAgLTYyMCw3
ICs2NDEsNyBAQCBKU1ZhbHVlICpGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0ZShFCiAKICAg
SlNPYmplY3QgKmJhc2VPYmogPSBiYXNlVmFsLT50b09iamVjdChleGVjKTsKICAgUHJvcGVydHlT
bG90IHNsb3Q7Ci0gIEpTVmFsdWUgKmZ1bmNWYWwgPSBiYXNlT2JqLT5nZXRQcm9wZXJ0eVNsb3Qo
ZXhlYywgaWRlbnQsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkgOiBqc1VuZGVm
aW5lZCgpOworICBKU1ZhbHVlICpmdW5jVmFsID0gYmFzZU9iai0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIGlkZW50LCBzbG90KSA/IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZU9iaiwgaWRlbnQpIDog
anNVbmRlZmluZWQoKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKIAogICBpZiAoIWZ1bmNW
YWwtPmlzT2JqZWN0KCkpCkBAIC02NjAsNyArNjgxLDcgQEAgSlNWYWx1ZSAqUG9zdGZpeFJlc29s
dmVOb2RlOjpldmFsdWF0ZShFeAogICBkbyB7IAogICAgIGJhc2UgPSAqaXRlcjsKICAgICBpZiAo
YmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgIEpT
VmFsdWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIG1faWRlbnQpOworICAgICAgICBKU1ZhbHVl
ICp2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KTsKIAogICAgICAgICBkb3Vi
bGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAKQEAgLTY5MCw3ICs3MTEsNyBAQCBK
U1ZhbHVlICpQb3N0Zml4QnJhY2tldE5vZGU6OmV2YWx1YXRlKEV4CiAgIHVpbnQzMl90IHByb3Bl
cnR5SW5kZXg7CiAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihwcm9wZXJ0eUluZGV4KSkgewog
ICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFsdWUgKnYgPSBiYXNlLT5nZXRQcm9wZXJ0
eVNsb3QoZXhlYywgcHJvcGVydHlJbmRleCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIHBy
b3BlcnR5SW5kZXgpIDoganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlICp2ID0gYmFzZS0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5SW5kZXgsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShl
eGVjLCBiYXNlLCBwcm9wZXJ0eUluZGV4KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OVkFMVUUKIAogICAgIGRvdWJsZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7CkBAIC03
MDMsNyArNzI0LDcgQEAgSlNWYWx1ZSAqUG9zdGZpeEJyYWNrZXROb2RlOjpldmFsdWF0ZShFeAog
CiAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwog
ICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgSlNWYWx1ZSAqdiA9IGJhc2UtPmdldFByb3BlcnR5U2xv
dChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpIDoganNVbmRlZmluZWQoKTsKKyAgSlNWYWx1ZSAqdiA9IGJhc2UtPmdldFByb3BlcnR5
U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNl
LCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFM
VUUKIAogICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtNzIzLDcgKzc0NCw3IEBA
IEpTVmFsdWUgKlBvc3RmaXhEb3ROb2RlOjpldmFsdWF0ZShFeGVjU3QKICAgSlNPYmplY3QgKmJh
c2UgPSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwogCiAgIFByb3BlcnR5U2xvdCBzbG90Owot
ICBKU1ZhbHVlICp2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3Qp
ID8gc2xvdC5nZXRWYWx1ZShleGVjLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7CisgIEpTVmFs
dWUgKnYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkgPyBzbG90
LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNVbmRlZmluZWQoKTsKICAgS0pTX0NI
RUNLRVhDRVBUSU9OVkFMVUUKIAogICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpAQCAt
ODQ4LDcgKzg2OSw3IEBAIEpTVmFsdWUgKlR5cGVPZlJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGUK
ICAgZG8geyAKICAgICBiYXNlID0gKml0ZXI7CiAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xv
dChleGVjLCBtX2lkZW50LCBzbG90KSkgewotICAgICAgICBKU1ZhbHVlICp2ID0gc2xvdC5nZXRW
YWx1ZShleGVjLCBtX2lkZW50KTsKKyAgICAgICAgSlNWYWx1ZSAqdiA9IHNsb3QuZ2V0VmFsdWUo
ZXhlYywgYmFzZSwgbV9pZGVudCk7CiAgICAgICAgIHJldHVybiB0eXBlU3RyaW5nRm9yVmFsdWUo
dik7CiAgICAgfQogCkBAIC04ODYsNyArOTA3LDcgQEAgSlNWYWx1ZSAqUHJlZml4UmVzb2x2ZU5v
ZGU6OmV2YWx1YXRlKEV4ZQogICBkbyB7IAogICAgIGJhc2UgPSAqaXRlcjsKICAgICBpZiAoYmFz
ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7Ci0gICAgICAgIEpTVmFs
dWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIG1faWRlbnQpOworICAgICAgICBKU1ZhbHVlICp2
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KTsKIAogICAgICAgICBkb3VibGUg
biA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgICAgICAKQEAgLTkxNyw3ICs5MzgsNyBAQCBKU1Zh
bHVlICpQcmVmaXhCcmFja2V0Tm9kZTo6ZXZhbHVhdGUoRXhlCiAgIHVpbnQzMl90IHByb3BlcnR5
SW5kZXg7CiAgIGlmIChzdWJzY3JpcHQtPmdldFVJbnQzMihwcm9wZXJ0eUluZGV4KSkgewogICAg
IFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFsdWUgKnYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNs
b3QoZXhlYywgcHJvcGVydHlJbmRleCwgc2xvdCkgPyBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5SW5kZXgpIDoganNVbmRlZmluZWQoKTsKKyAgICBKU1ZhbHVlICp2ID0gYmFzZS0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIHByb3BlcnR5SW5kZXgsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVj
LCBiYXNlLCBwcm9wZXJ0eUluZGV4KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgS0pTX0NIRUNLRVhD
RVBUSU9OVkFMVUUKIAogICAgIGRvdWJsZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7CkBAIC05MzEs
NyArOTUyLDcgQEAgSlNWYWx1ZSAqUHJlZml4QnJhY2tldE5vZGU6OmV2YWx1YXRlKEV4ZQogCiAg
IElkZW50aWZpZXIgcHJvcGVydHlOYW1lKHN1YnNjcmlwdC0+dG9TdHJpbmcoZXhlYykpOwogICBQ
cm9wZXJ0eVNsb3Qgc2xvdDsKLSAgSlNWYWx1ZSAqdiA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5h
bWUpIDoganNVbmRlZmluZWQoKTsKKyAgSlNWYWx1ZSAqdiA9IGJhc2UtPmdldFByb3BlcnR5U2xv
dChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBw
cm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUK
IAogICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtOTUyLDcgKzk3Myw3IEBAIEpT
VmFsdWUgKlByZWZpeERvdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGEKICAgSlNPYmplY3QgKmJhc2Ug
PSBiYXNlVmFsdWUtPnRvT2JqZWN0KGV4ZWMpOwogCiAgIFByb3BlcnR5U2xvdCBzbG90OwotICBK
U1ZhbHVlICp2ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpID8g
c2xvdC5nZXRWYWx1ZShleGVjLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7CisgIEpTVmFsdWUg
KnYgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkgPyBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpIDoganNVbmRlZmluZWQoKTsKICAgS0pTX0NIRUNL
RVhDRVBUSU9OVkFMVUUKIAogICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtMTI5
MSw3ICsxMzEyLDcgQEAgSlNWYWx1ZSAqQXNzaWduUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZQog
ICBpZiAobV9vcGVyID09IE9wRXF1YWwpIHsKICAgICB2ID0gbV9yaWdodC0+ZXZhbHVhdGUoZXhl
Yyk7CiAgIH0gZWxzZSB7Ci0gICAgSlNWYWx1ZSAqdjEgPSBzbG90LmdldFZhbHVlKGV4ZWMsIG1f
aWRlbnQpOworICAgIEpTVmFsdWUgKnYxID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lk
ZW50KTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIEpTVmFsdWUgKnYyID0gbV9y
aWdodC0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgdiA9IHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1l
bnQoZXhlYywgdjEsIHYyLCBtX29wZXIpOwpAQCAtMTMxNyw3ICsxMzM4LDcgQEAgSlNWYWx1ZSAq
QXNzaWduRG90Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YQogICAgIHYgPSBtX3JpZ2h0LT5ldmFsdWF0
ZShleGVjKTsKICAgfSBlbHNlIHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVl
ICp2MSA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSA/IHNsb3Qu
Z2V0VmFsdWUoZXhlYywgbV9pZGVudCkgOiBqc1VuZGVmaW5lZCgpOworICAgIEpTVmFsdWUgKnYx
ID0gYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpID8gc2xvdC5nZXRW
YWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OVkFMVUUKICAgICBKU1ZhbHVlICp2MiA9IG1fcmlnaHQtPmV2YWx1YXRlKGV4ZWMp
OwogICAgIHYgPSB2YWx1ZUZvclJlYWRNb2RpZnlBc3NpZ25tZW50KGV4ZWMsIHYxLCB2MiwgbV9v
cGVyKTsKQEAgLTEzNDcsNyArMTM2OCw3IEBAIEpTVmFsdWUgKkFzc2lnbkJyYWNrZXROb2RlOjpl
dmFsdWF0ZShFeGUKICAgICAgIHYgPSBtX3JpZ2h0LT5ldmFsdWF0ZShleGVjKTsKICAgICB9IGVs
c2UgewogICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICBKU1ZhbHVlICp2MSA9IGJhc2Ut
PmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eUluZGV4LCBzbG90KSA/IHNsb3QuZ2V0VmFs
dWUoZXhlYywgcHJvcGVydHlJbmRleCkgOiBqc1VuZGVmaW5lZCgpOworICAgICAgSlNWYWx1ZSAq
djEgPSBiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlJbmRleCwgc2xvdCkgPyBz
bG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIHByb3BlcnR5SW5kZXgpIDoganNVbmRlZmluZWQoKTsK
ICAgICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgICBKU1ZhbHVlICp2MiA9IG1fcmln
aHQtPmV2YWx1YXRlKGV4ZWMpOwogICAgICAgdiA9IHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1l
bnQoZXhlYywgdjEsIHYyLCBtX29wZXIpOwpAQCAtMTM2Niw3ICsxMzg3LDcgQEAgSlNWYWx1ZSAq
QXNzaWduQnJhY2tldE5vZGU6OmV2YWx1YXRlKEV4ZQogICAgIHYgPSBtX3JpZ2h0LT5ldmFsdWF0
ZShleGVjKTsKICAgfSBlbHNlIHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhbHVl
ICp2MSA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpID8g
c2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKTsKKyAgICBK
U1ZhbHVlICp2MSA9IGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpID8gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmlu
ZWQoKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICAgIEpTVmFsdWUgKnYyID0gbV9y
aWdodC0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgdiA9IHZhbHVlRm9yUmVhZE1vZGlmeUFzc2lnbm1l
bnQoZXhlYywgdjEsIHYyLCBtX29wZXIpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rl
cy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQzCmRpZmYgLXAgLXUgLXIxLjQzIEphdmFTY3Jp
cHRDb3JlL2tqcy9ub2Rlcy5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAkxMSBEZWMg
MjAwNSAwMjowNTo0NSAtMDAwMAkxLjQzCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaAkx
MyBEZWMgMjAwNSAyMDoyNTo1OSAtMDAwMApAQCAtMzIsOCArMzIsOCBAQAogbmFtZXNwYWNlIEtK
UyB7CiAKICAgY2xhc3MgUHJvZ3JhbU5vZGU7Ci0gIGNsYXNzIFByb3BlcnR5Tm9kZTsKLSAgY2xh
c3MgUHJvcGVydHlWYWx1ZU5vZGU7CisgIGNsYXNzIFByb3BlcnR5TmFtZU5vZGU7CisgIGNsYXNz
IFByb3BlcnR5TGlzdE5vZGU7CiAgIGNsYXNzIFJlZmVyZW5jZTsKICAgY2xhc3MgUmVnRXhwOwog
ICBjbGFzcyBTb3VyY2VFbGVtZW50c05vZGU7CkBAIC0yNDYsNDEgKzI0Niw1NCBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBib29sIG9wdDsKICAgfTsKIAotICBjbGFzcyBQcm9wZXJ0eVZhbHVlTm9k
ZSA6IHB1YmxpYyBOb2RlIHsKKyAgY2xhc3MgUHJvcGVydHlOYW1lTm9kZSA6IHB1YmxpYyBOb2Rl
IHsKICAgcHVibGljOgotICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWlsIG9mIGEgY2lyY3VsYXIg
bGlzdCwgY3JhY2tlZCBpbiB0aGUgT2JqZWN0TGl0ZXJhbE5vZGUgY3RvcgotICAgIFByb3BlcnR5
VmFsdWVOb2RlKFByb3BlcnR5Tm9kZSAqbiwgTm9kZSAqYSkKLSAgICAgIDogbmFtZShuKSwgYXNz
aWduKGEpLCBsaXN0KHRoaXMpIHsgfQotICAgIFByb3BlcnR5VmFsdWVOb2RlKFByb3BlcnR5Tm9k
ZSAqbiwgTm9kZSAqYSwgUHJvcGVydHlWYWx1ZU5vZGUgKmwpCi0gICAgICA6IG5hbWUobiksIGFz
c2lnbihhKSwgbGlzdChsLT5saXN0KSB7IGwtPmxpc3QgPSB0aGlzOyB9CisgICAgUHJvcGVydHlO
YW1lTm9kZShkb3VibGUgZCkgOiBudW1lcmljKGQpIHsgfQorICAgIFByb3BlcnR5TmFtZU5vZGUo
Y29uc3QgSWRlbnRpZmllciAmcykgOiBzdHIocykgeyB9CiAgICAgSlNWYWx1ZSAqZXZhbHVhdGUo
RXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
ICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgT2JqZWN0TGl0ZXJhbE5v
ZGU7Ci0gICAgUmVmUHRyPFByb3BlcnR5Tm9kZT4gbmFtZTsKKyAgICBkb3VibGUgbnVtZXJpYzsK
KyAgICBJZGVudGlmaWVyIHN0cjsKKyAgfTsKKyAgCisgIGNsYXNzIFByb3BlcnR5Tm9kZSA6IHB1
YmxpYyBOb2RlIHsKKyAgcHVibGljOgorICAgIGVudW0gVHlwZSB7IENvbnN0YW50LCBHZXR0ZXIs
IFNldHRlciB9OworICAgIFByb3BlcnR5Tm9kZShQcm9wZXJ0eU5hbWVOb2RlICpuLCBOb2RlICph
LCBUeXBlIHQpIAorICAgICAgOiBuYW1lKG4pLCBhc3NpZ24oYSksIHR5cGUodCkgeyB9CisgICAg
SlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKKyAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlM
aXN0Tm9kZTsKKyAgcHJpdmF0ZToKKyAgICBSZWZQdHI8UHJvcGVydHlOYW1lTm9kZT4gbmFtZTsK
ICAgICBSZWZQdHI8Tm9kZT4gYXNzaWduOwotICAgIFJlZlB0cjxQcm9wZXJ0eVZhbHVlTm9kZT4g
bGlzdDsKKyAgICBUeXBlIHR5cGU7CiAgIH07Ci0KLSAgY2xhc3MgT2JqZWN0TGl0ZXJhbE5vZGUg
OiBwdWJsaWMgTm9kZSB7CisgIAorICBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlIDogcHVibGljIE5v
ZGUgewogICBwdWJsaWM6Ci0gICAgT2JqZWN0TGl0ZXJhbE5vZGUoKSA6IGxpc3QoMCkgeyB9Ci0g
ICAgT2JqZWN0TGl0ZXJhbE5vZGUoUHJvcGVydHlWYWx1ZU5vZGUgKmwpIDogbGlzdChsLT5saXN0
KSB7IGwtPmxpc3QgPSAwOyB9CisgICAgLy8gbGlzdCBwb2ludGVyIGlzIHRhaWwgb2YgYSBjaXJj
dWxhciBsaXN0LCBjcmFja2VkIGluIHRoZSBPYmplY3RMaXRlcmFsTm9kZSBjdG9yCisgICAgUHJv
cGVydHlMaXN0Tm9kZShQcm9wZXJ0eU5vZGUgKm4pCworICAgICAgOiBub2RlKG4pLCBsaXN0KHRo
aXMpIHsgfQorICAgIFByb3BlcnR5TGlzdE5vZGUoUHJvcGVydHlOb2RlICpuLCBQcm9wZXJ0eUxp
c3ROb2RlICpsKQorICAgICAgOiBub2RlKG4pLCBsaXN0KGwtPmxpc3QpIHsgbC0+bGlzdCA9IHRo
aXM7IH0KICAgICBKU1ZhbHVlICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1
YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgotICAg
IFJlZlB0cjxQcm9wZXJ0eVZhbHVlTm9kZT4gbGlzdDsKKyAgICBmcmllbmQgY2xhc3MgT2JqZWN0
TGl0ZXJhbE5vZGU7CisgICAgUmVmUHRyPFByb3BlcnR5Tm9kZT4gbm9kZTsKKyAgICBSZWZQdHI8
UHJvcGVydHlMaXN0Tm9kZT4gbGlzdDsKICAgfTsKIAotICBjbGFzcyBQcm9wZXJ0eU5vZGUgOiBw
dWJsaWMgTm9kZSB7CisgIGNsYXNzIE9iamVjdExpdGVyYWxOb2RlIDogcHVibGljIE5vZGUgewog
ICBwdWJsaWM6Ci0gICAgUHJvcGVydHlOb2RlKGRvdWJsZSBkKSA6IG51bWVyaWMoZCkgeyB9Ci0g
ICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXIgJnMpIDogc3RyKHMpIHsgfQorICAgIE9i
amVjdExpdGVyYWxOb2RlKCkgOiBsaXN0KDApIHsgfQorICAgIE9iamVjdExpdGVyYWxOb2RlKFBy
b3BlcnR5TGlzdE5vZGUgKmwpIDogbGlzdChsLT5saXN0KSB7IGwtPmxpc3QgPSAwOyB9CiAgICAg
SlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBkb3VibGUgbnVt
ZXJpYzsKLSAgICBJZGVudGlmaWVyIHN0cjsKKyAgICBSZWZQdHI8UHJvcGVydHlMaXN0Tm9kZT4g
bGlzdDsKICAgfTsKIAogICBjbGFzcyBCcmFja2V0QWNjZXNzb3JOb2RlIDogcHVibGljIE5vZGUg
ewpAQCAtMTAzMCwxMyArMTA0MywxMyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBGdW5j
RXhwck5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBGdW5jRXhwck5vZGUoY29u
c3QgSWRlbnRpZmllciAmaSwgRnVuY3Rpb25Cb2R5Tm9kZSAqYikKLSAgICAgIDogaWRlbnQoaSks
IHBhcmFtKDApLCBib2R5KGIpIHsgfQotICAgIEZ1bmNFeHByTm9kZShjb25zdCBJZGVudGlmaWVy
ICZpLCBQYXJhbWV0ZXJOb2RlICpwLCBGdW5jdGlvbkJvZHlOb2RlICpiKQotICAgICAgOiBpZGVu
dChpKSwgcGFyYW0ocC0+bmV4dCksIGJvZHkoYikgeyBwLT5uZXh0ID0gMDsgfQorICAgIEZ1bmNF
eHByTm9kZShjb25zdCBJZGVudGlmaWVyICZpLCBGdW5jdGlvbkJvZHlOb2RlICpiLCBQYXJhbWV0
ZXJOb2RlICpwID0gMCkKKyAgICAgIDogaWRlbnQoaSksIHBhcmFtKHAgPyBwLT5uZXh0IDogMCks
IGJvZHkoYikgeyBpZiAocCkgcC0+bmV4dCA9IDA7IH0KICAgICB2aXJ0dWFsIEpTVmFsdWUgKmV2
YWx1YXRlKEV4ZWNTdGF0ZSAqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtICYpIGNvbnN0OwogICBwcml2YXRlOgorICAgIC8vIFVzZWQgZm9yIHN0cmVhbVRvCisgICAg
ZnJpZW5kIGNsYXNzIFByb3BlcnR5Tm9kZTsKICAgICBJZGVudGlmaWVyIGlkZW50OwogICAgIFJl
ZlB0cjxQYXJhbWV0ZXJOb2RlPiBwYXJhbTsKICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4g
Ym9keTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2RlczJzdHJpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMgpkaWZmIC1wIC11IC1yMS4yMiBKYXZhU2NyaXB0
Q29yZS9ranMvbm9kZXMyc3RyaW5nLmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0
cmluZy5jcHAJMSBEZWMgMjAwNSAxNzo1OToyNSAtMDAwMAkxLjIyCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvbm9kZXMyc3RyaW5nLmNwcAkxMyBEZWMgMjAwNSAyMDoyNTo1OSAtMDAwMApAQCAtMTU1
LDE0ICsxNTUsMzYgQEAgdm9pZCBPYmplY3RMaXRlcmFsTm9kZTo6c3RyZWFtVG8oU291cmNlUwog
ICAgIHMgPDwgInsgfSI7CiB9CiAKLXZvaWQgUHJvcGVydHlWYWx1ZU5vZGU6OnN0cmVhbVRvKFNv
dXJjZVN0cmVhbSAmcykgY29uc3QKK3ZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6c3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdAogewotICBmb3IgKGNvbnN0IFByb3BlcnR5VmFsdWVOb2RlICpu
ID0gdGhpczsgbjsgbiA9IG4tPmxpc3QuZ2V0KCkpCi0gICAgcyA8PCBuLT5uYW1lIDw8ICI6ICIg
PDwgbi0+YXNzaWduOworICBzIDw8IG5vZGU7CisgIAorICBmb3IgKGNvbnN0IFByb3BlcnR5TGlz
dE5vZGUgKm4gPSBsaXN0LmdldCgpOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkKKyAgICBzIDw8ICIs
ICIgPDwgbi0+bm9kZTsKIH0KIAogdm9pZCBQcm9wZXJ0eU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSAmcykgY29uc3QKIHsKKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDb25zdGFudDoK
KyAgICAgIHMgPDwgbmFtZSA8PCAiOiAiIDw8IGFzc2lnbjsKKyAgICAgIGJyZWFrOworICAgIGNh
c2UgR2V0dGVyOgorICAgIGNhc2UgU2V0dGVyOiB7CisgICAgICBjb25zdCBGdW5jRXhwck5vZGUg
KmZ1bmMgPSBzdGF0aWNfY2FzdDxjb25zdCBGdW5jRXhwck5vZGUgKj4oYXNzaWduLmdldCgpKTsK
KyAgICAgIGlmICh0eXBlID09IEdldHRlcikKKyAgICAgICAgcyA8PCAiZ2V0ICI7IAorICAgICAg
ZWxzZQorICAgICAgICBzIDw8ICJzZXQgIjsKKyAgICAgIAorICAgICAgcyA8PCBuYW1lIDw8ICIo
IiA8PCBmdW5jLT5wYXJhbSA8PCAiKSIgPDwgZnVuYy0+Ym9keTsKKyAgICAgIGJyZWFrOworICAg
IH0KKyAgfQorfQorCit2b2lkIFByb3BlcnR5TmFtZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVh
bSAmcykgY29uc3QKK3sKICAgaWYgKHN0ci5pc051bGwoKSkKICAgICBzIDw8IFVTdHJpbmc6OmZy
b20obnVtZXJpYyk7CiAgIGVsc2UKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41OApkaWZmIC1wIC11IC1yMS41OCBKYXZhU2Ny
aXB0Q29yZS9ranMvb2JqZWN0LmNwcAotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAJ
MTEgRGVjIDIwMDUgMDI6MDU6NDYgLTAwMDAJMS41OAorKysgSmF2YVNjcmlwdENvcmUva2pzL29i
amVjdC5jcHAJMTMgRGVjIDIwMDUgMjA6MjU6NTkgLTAwMDAKQEAgLTE1Myw3ICsxNTMsNyBAQCBK
U1ZhbHVlICpKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgCiAgIFByb3BlcnR5U2xvdCBz
bG90OwogCiAgIGlmIChjb25zdF9jYXN0PEpTT2JqZWN0ICo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNs
b3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKLSAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShl
eGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIGNvbnN0
X2Nhc3Q8SlNPYmplY3QgKj4odGhpcyksIHByb3BlcnR5TmFtZSk7CiAgICAgCiAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQpAQCAtMTYyLDcgKzE2Miw3IEBAIEpTVmFsdWUgKkpTT2JqZWN0Ojpn
ZXQoRXhlY1N0YXRlICpleGVjLCAKIHsKICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgIGlmIChjb25z
dF9jYXN0PEpTT2JqZWN0ICo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KSkKLSAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUp
OworICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIGNvbnN0X2Nhc3Q8SlNPYmplY3QgKj4o
dGhpcyksIHByb3BlcnR5TmFtZSk7CiAgICAgCiAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpA
QCAtMjEzLDYgKzIxMywzNSBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoRXhlY1N0YXRlICpleGVjLCBj
b25zCiAgICAgcmV0dXJuOwogICB9CiAKKyAgSlNPYmplY3QgKm9iaiA9IHRoaXM7CisgIHdoaWxl
ICh0cnVlKSB7CisgICAgaWYgKEpTVmFsdWUgKmdzID0gb2JqLT5fcHJvcC5nZXQocHJvcGVydHlO
YW1lKSkgeworICAgICAgaWYgKGdzLT50eXBlKCkgPT0gR2V0dGVyU2V0dGVyVHlwZSkgeworICAg
ICAgICBKU09iamVjdCAqc2V0dGVyRnVuYyA9IHN0YXRpY19jYXN0PEdldHRlclNldHRlckltcCAq
PihncyktPmdldFNldHRlcigpOworICAgICAgICAgICAgCisgICAgICAgIGlmICghc2V0dGVyRnVu
YykgeworICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAic2V0dGluZyBhIHBy
b3BlcnR5IHRoYXQgaGFzIG9ubHkgYSBnZXR0ZXIiKTsKKyAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBMaXN0IGFyZ3M7CisgICAgICAgIGFyZ3MuYXBw
ZW5kKHZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIHNldHRlckZ1bmMtPmNhbGwoZXhlYywgdGhp
cywgYXJncyk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0gZWxzZSAgeworICAgICAgICAvLyBJ
ZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHByb3BlcnR5IG9uIHRoZSBvYmplY3Qgb3Igb25lIG9mIGl0
cyAKKyAgICAgICAgLy8gcHJvdG90eXBlIGl0IHNob3VsZCBiZSByZXBsYWNlZCwgc28gd2UganVz
dCBicmVhayBoZXJlLgorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgIAorICAg
IGlmICghb2JqLT5fcHJvdG8gfHwgIW9iai0+X3Byb3RvLT5pc09iamVjdCgpKQorICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIG9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KG9iai0+X3By
b3RvKTsKKyAgfQorCiAgIF9wcm9wLnB1dChwcm9wZXJ0eU5hbWUsdmFsdWUsYXR0cik7CiB9CiAK
QEAgLTMzMiw2ICszNjEsMzYgQEAgY29uc3QgSGFzaEVudHJ5KiBKU09iamVjdDo6ZmluZFByb3Bl
cnR5SAogICByZXR1cm4gMDsKIH0KIAordm9pZCBKU09iamVjdDo6ZGVmaW5lR2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU09iamVjdCAqZ2V0
dGVyRnVuYykKK3sKKyAgICBKU1ZhbHVlICpvID0gZ2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7Cisg
ICAgR2V0dGVyU2V0dGVySW1wICpnczsKKyAgICAKKyAgICBpZiAobyAmJiBvLT50eXBlKCkgPT0g
R2V0dGVyU2V0dGVyVHlwZSkgeworICAgICAgICBncyA9IHN0YXRpY19jYXN0PEdldHRlclNldHRl
ckltcCAqPihvKTsKKyAgICB9IGVsc2UgeworICAgICAgICBncyA9IG5ldyBHZXR0ZXJTZXR0ZXJJ
bXA7CisgICAgICAgIHB1dERpcmVjdChwcm9wZXJ0eU5hbWUsIGdzKTsKKyAgICB9CisgICAgCisg
ICAgZ3MtPnNldEdldHRlcihnZXR0ZXJGdW5jKTsKK30KKwordm9pZCBKU09iamVjdDo6ZGVmaW5l
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U09iamVjdCAqc2V0dGVyRnVuYykKK3sKKyAgICBKU1ZhbHVlICpvID0gZ2V0RGlyZWN0KHByb3Bl
cnR5TmFtZSk7CisgICAgR2V0dGVyU2V0dGVySW1wICpnczsKKyAgICAKKyAgICBpZiAobyAmJiBv
LT50eXBlKCkgPT0gR2V0dGVyU2V0dGVyVHlwZSkgeworICAgICAgICBncyA9IHN0YXRpY19jYXN0
PEdldHRlclNldHRlckltcCAqPihvKTsKKyAgICB9IGVsc2UgeworICAgICAgICBncyA9IG5ldyBH
ZXR0ZXJTZXR0ZXJJbXA7CisgICAgICAgIHB1dERpcmVjdChwcm9wZXJ0eU5hbWUsIGdzKTsKKyAg
ICB9CisgICAgCisgICAgZ3MtPnNldFNldHRlcihzZXR0ZXJGdW5jKTsKK30KKwogYm9vbCBKU09i
amVjdDo6aW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0CiB7CiAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjUwCmRpZmYgLXAgLXUgLXIxLjUwIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAotLS0gSmF2
YVNjcmlwdENvcmUva2pzL29iamVjdC5oCTExIERlYyAyMDA1IDAyOjA1OjQ2IC0wMDAwCTEuNTAK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAkxMyBEZWMgMjAwNSAyMDoyNTo1OSAtMDAw
MApAQCAtODAsNiArODAsMzIgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdm9pZCAqZHVtbXk7CiAg
IH07CiAgIAorICAvLyBUaGlzIGlzIGFuIGludGVybmFsIHZhbHVlIG9iamVjdCB3aGljaCBzdG9y
ZXMgZ2V0dGVyIGFuZCBzZXR0ZXIgZnVuY3Rpb25zCisgIC8vIGZvciBhIHByb3BlcnR5LgorICBj
bGFzcyBHZXR0ZXJTZXR0ZXJJbXAgOiBwdWJsaWMgSlNDZWxsIHsKKyAgcHVibGljOgorICAgIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEdldHRlclNldHRlclR5cGU7IH0KKyAgICAgIAorICAg
IEdldHRlclNldHRlckltcCgpIDogZ2V0dGVyKDApLCBzZXR0ZXIoMCkgeyB9CisgICAgICAKKyAg
ICB2aXJ0dWFsIEpTVmFsdWUgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSBwcmVm
ZXJyZWQgPSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xl
YW4oRXhlY1N0YXRlICpleGVjKSBjb25zdDsKKyAgICB2aXJ0dWFsIGRvdWJsZSB0b051bWJlcihF
eGVjU3RhdGUgKmV4ZWMpIGNvbnN0OworICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVj
U3RhdGUgKmV4ZWMpIGNvbnN0OworICAgIHZpcnR1YWwgSlNPYmplY3QgKnRvT2JqZWN0KEV4ZWNT
dGF0ZSAqZXhlYykgY29uc3Q7CisgICAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworICAg
ICAgCisgICAgSlNPYmplY3QgKmdldEdldHRlcigpIHsgcmV0dXJuIGdldHRlcjsgfQorICAgIHZv
aWQgc2V0R2V0dGVyKEpTT2JqZWN0ICpnKSB7IGdldHRlciA9IGc7IH0KKyAgICBKU09iamVjdCAq
Z2V0U2V0dGVyKCkgeyByZXR1cm4gc2V0dGVyOyB9CisgICAgdm9pZCBzZXRTZXR0ZXIoSlNPYmpl
Y3QgKnMpIHsgc2V0dGVyID0gczsgfQorICAgICAgCisgIHByaXZhdGU6CisgICAgSlNPYmplY3Qg
KmdldHRlcjsKKyAgICBKU09iamVjdCAqc2V0dGVyOyAgCisgIH07CisgIAogICBjbGFzcyBKU09i
amVjdCA6IHB1YmxpYyBKU0NlbGwgewogICBwdWJsaWM6CiAgICAgLyoqCkBAIC00NzcsNiArNTAz
LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBwdXREaXJlY3QoY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIgPSAwKTsKICAgICB2b2lk
IHB1dERpcmVjdChjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGludCB2YWx1ZSwgaW50
IGF0dHIgPSAwKTsKICAgICAKKyAgICB2b2lkIGRlZmluZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNPYmplY3QgKmdldHRlckZ1bmMpOwor
ICAgIHZvaWQgZGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU09iamVjdCAqc2V0dGVyRnVuYyk7CisKICAgICAvKioKICAgICAgKiBS
ZW1vdmUgYWxsIHByb3BlcnRpZXMgZnJvbSB0aGlzIG9iamVjdC4KICAgICAgKiBUaGlzIGRvZXNu
J3QgdGFrZSBEb250RGVsZXRlIGludG8gYWNjb3VudCwgYW5kIGlzbid0IGluIHRoZSBFQ01BIHNw
ZWMuCkBAIC02MDYsNyArNjM1LDE2IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0
eVNsb3QoRXgKIGlubGluZSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICBpZiAoSlNWYWx1ZSAqKmxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24o
cHJvcGVydHlOYW1lKSkgewotICAgICAgICBzbG90LnNldFZhbHVlU2xvdCh0aGlzLCBsb2NhdGlv
bik7CisgICAgICAgIGlmICgoKmxvY2F0aW9uKS0+dHlwZSgpID09IEdldHRlclNldHRlclR5cGUp
IHsKKyAgICAgICAgICAgIEdldHRlclNldHRlckltcCAqZ3MgPSBzdGF0aWNfY2FzdDxHZXR0ZXJT
ZXR0ZXJJbXAgKj4oKmxvY2F0aW9uKTsKKyAgICAgICAgICAgIEpTT2JqZWN0ICpnZXR0ZXJGdW5j
ID0gZ3MtPmdldEdldHRlcigpOworICAgICAgICAgICAgaWYgKGdldHRlckZ1bmMpCisgICAgICAg
ICAgICAgICAgc2xvdC5zZXRHZXR0ZXJTbG90KHRoaXMsIGdldHRlckZ1bmMpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKHRoaXMpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgbG9jYXRpb24p
OworICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTgKZGlmZiAtcCAtdSAtcjEuMTggSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9v
YmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5jcHAJMTEgRGVj
IDIwMDUgMDI6MDU6NDYgLTAwMDAJMS4xOAorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9v
YmplY3QuY3BwCTEzIERlYyAyMDA1IDIwOjI1OjU5IC0wMDAwCkBAIC00Myw2ICs0MywxMSBAQCBP
YmplY3RQcm90b3R5cGU6Ok9iamVjdFByb3RvdHlwZShFeGVjU3RhCiAgICAgcHV0RGlyZWN0KHZh
bHVlT2ZQcm9wZXJ0eU5hbWUsIG5ldyBPYmplY3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBP
YmplY3RQcm90b0Z1bmM6OlZhbHVlT2YsICAgICAgICAgICAgICAgICAwKSwgRG9udEVudW0pOwog
ICAgIHB1dERpcmVjdCgiaGFzT3duUHJvcGVydHkiLCBuZXcgT2JqZWN0UHJvdG9GdW5jKGV4ZWMs
IGZ1bmNQcm90bywgT2JqZWN0UHJvdG9GdW5jOjpIYXNPd25Qcm9wZXJ0eSwgICAgICAgICAgICAg
MSksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3QoInByb3BlcnR5SXNFbnVtZXJhYmxlIiwgbmV3
IE9iamVjdFByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVuYzo6UHJvcGVy
dHlJc0VudW1lcmFibGUsIDEpLCBEb250RW51bSk7CisgICAgLy8gTW96aWxsYSBleHRlbnNpb25z
CisgICAgcHV0RGlyZWN0KCJfX2RlZmluZUdldHRlcl9fIiwgbmV3IE9iamVjdFByb3RvRnVuYyhl
eGVjLCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVuYzo6RGVmaW5lR2V0dGVyLCAgICAgICAgICAg
ICAyKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCgiX19kZWZpbmVTZXR0ZXJfXyIsIG5ldyBP
YmplY3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBPYmplY3RQcm90b0Z1bmM6OkRlZmluZVNl
dHRlciwgICAgICAgICAgICAgMiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoIl9fbG9va3Vw
R2V0dGVyX18iLCBuZXcgT2JqZWN0UHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgT2JqZWN0UHJv
dG9GdW5jOjpMb29rdXBHZXR0ZXIsICAgICAgICAgICAgIDEpLCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KCJfX2xvb2t1cFNldHRlcl9fIiwgbmV3IE9iamVjdFByb3RvRnVuYyhleGVjLCBmdW5j
UHJvdG8sIE9iamVjdFByb3RvRnVuYzo6TG9va3VwU2V0dGVyLCAgICAgICAgICAgICAxKSwgRG9u
dEVudW0pOwogfQogCiAKQEAgLTczLDYgKzc4LDUzIEBAIEpTVmFsdWUgKk9iamVjdFByb3RvRnVu
Yzo6Y2FsbEFzRnVuY3Rpb24KICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAg
ICAgICAgcmV0dXJuIGpzQm9vbGVhbih0aGlzT2JqLT5nZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywg
SWRlbnRpZmllcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSksIHNsb3QpKTsKICAgICAgICAgfQor
ICAgICAgICBjYXNlIERlZmluZUdldHRlcjogCisgICAgICAgIGNhc2UgRGVmaW5lU2V0dGVyOiB7
CisgICAgICAgICAgICBpZiAoIWFyZ3NbMV0tPmlzT2JqZWN0KCkgfHwKKyAgICAgICAgICAgICAg
ICAhc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oYXJnc1sxXSktPmltcGxlbWVudHNDYWxsKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoaWQgPT0gRGVmaW5lR2V0dGVyKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgImludmFsaWQgZ2V0dGVy
IHVzYWdlIik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgImludmFsaWQgc2V0dGVyIHVzYWdlIik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpZCA9PSBEZWZpbmVHZXR0ZXIpCisg
ICAgICAgICAgICAgICAgdGhpc09iai0+ZGVmaW5lR2V0dGVyKGV4ZWMsIElkZW50aWZpZXIoYXJn
c1swXS0+dG9TdHJpbmcoZXhlYykpLCBzdGF0aWNfY2FzdDxKU09iamVjdCAqPihhcmdzWzFdKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpc09iai0+ZGVmaW5lU2V0dGVy
KGV4ZWMsIElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpLCBzdGF0aWNfY2FzdDxK
U09iamVjdCAqPihhcmdzWzFdKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIExvb2t1cEdldHRlcjoKKyAgICAgICAgY2FzZSBMb29r
dXBTZXR0ZXI6IHsKKyAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRp
ZmllcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEpTT2JqZWN0ICpvYmogPSB0aGlzT2JqOworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgICAgICBKU1ZhbHVlICp2ID0gb2JqLT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodi0+dHlwZSgpICE9IEdldHRlclNldHRlclR5cGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgICAgICBK
U09iamVjdCAqZnVuY09iajsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAoaWQgPT0gTG9va3VwR2V0dGVyKQorICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY09iaiA9IHN0YXRpY19jYXN0PEdldHRlclNldHRlckltcCAqPih2KS0+Z2V0R2V0dGVyKCk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNP
YmogPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXJJbXAgKj4odiktPmdldFNldHRlcigpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bmNPYmopCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmNPYmo7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghb2JqLT5w
cm90b3R5cGUoKSB8fCAhb2JqLT5wcm90b3R5cGUoKS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgb2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4ob2JqLT5wcm90b3R5cGUoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgY2FzZSBQcm9wZXJ0eUlzRW51bWVy
YWJsZToKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odGhpc09iai0+cHJvcGVydHlJc0Vu
dW1lcmFibGUoZXhlYywgSWRlbnRpZmllcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpKTsKICAg
ICAgICAgY2FzZSBUb0xvY2FsZVN0cmluZzoKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9vYmpl
Y3Rfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3Jl
L2tqcy9vYmplY3Rfb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtcCAt
dSAtcjEuMTEgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuaAotLS0gSmF2YVNjcmlw
dENvcmUva2pzL29iamVjdF9vYmplY3QuaAkxMSBEZWMgMjAwNSAwMjowNTo0NiAtMDAwMAkxLjEx
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0X29iamVjdC5oCTEzIERlYyAyMDA1IDIwOjI1
OjU5IC0wMDAwCkBAIC01Miw3ICs1Miw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwg
Ym9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSlNWYWx1ZSAqY2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IExpc3QgJmFyZ3MpOwogCi0g
ICAgZW51bSB7IFRvU3RyaW5nLCBUb0xvY2FsZVN0cmluZywgVmFsdWVPZiwgSGFzT3duUHJvcGVy
dHksIFByb3BlcnR5SXNFbnVtZXJhYmxlIH07CisgICAgZW51bSB7IFRvU3RyaW5nLCBUb0xvY2Fs
ZVN0cmluZywgVmFsdWVPZiwgSGFzT3duUHJvcGVydHksIFByb3BlcnR5SXNFbnVtZXJhYmxlLAor
ICAgICAgICAgICBEZWZpbmVHZXR0ZXIsIERlZmluZVNldHRlciwgTG9va3VwR2V0dGVyLCBMb29r
dXBTZXR0ZXIgfTsKICAgcHJpdmF0ZToKICAgICBpbnQgaWQ7CiAgIH07CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUgSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Ns
b3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5jcHAJMTEgRGVjIDIw
MDUgMDI6MDU6NDcgLTAwMDAJMS41CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xv
dC5jcHAJMTMgRGVjIDIwMDUgMjA6MjU6NTkgLTAwMDAKQEAgLTIzLDEyICsyMywxOCBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicHJvcGVydHlfc2xvdC5oIgorI2luY2x1ZGUg
Im9iamVjdC5oIgogCiBuYW1lc3BhY2UgS0pTIHsKIAotSlNWYWx1ZSAqUHJvcGVydHlTbG90Ojp1
bmRlZmluZWRHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqUHJvcGVydHlTbG90Ojp1bmRl
ZmluZWRHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCitKU1ZhbHVlICpQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBzbG90Lm1fZGF0YS5n
ZXR0ZXJGdW5jLT5jYWxsKGV4ZWMsIG9yaWdpbmFsT2JqZWN0LCBMaXN0OjplbXB0eSgpKTsKK30K
KwogfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXAgLXUgLXIxLjcgSmF2YVNjcmlwdENvcmUv
a2pzL3Byb3BlcnR5X3Nsb3QuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3Qu
aAkxMSBEZWMgMjAwNSAwMjowNTo0NyAtMDAwMAkxLjcKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9w
cm9wZXJ0eV9zbG90LmgJMTMgRGVjIDIwMDUgMjA6MjU6NTkgLTAwMDAKQEAgLTM2LDIwICszNiwy
MCBAQCBjbGFzcyBKU09iamVjdDsKIGNsYXNzIFByb3BlcnR5U2xvdAogewogcHVibGljOgotICAg
IHR5cGVkZWYgSlNWYWx1ZSAqKCpHZXRWYWx1ZUZ1bmMpKEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgdHlwZWRlZiBKU1ZhbHVlICooKkdl
dFZhbHVlRnVuYykoRXhlY1N0YXRlICosIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCi0gICAgSlNWYWx1ZSAqZ2V0VmFs
dWUoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpIGNvbnN0
CisgICAgSlNWYWx1ZSAqZ2V0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2lu
YWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkgY29uc3QKICAgICB7IAog
ICAgICAgICBpZiAobV9nZXRWYWx1ZSA9PSBWQUxVRV9TTE9UX01BUktFUikKICAgICAgICAgICAg
IHJldHVybiAqbV9kYXRhLnZhbHVlU2xvdDsKLSAgICAgICAgcmV0dXJuIG1fZ2V0VmFsdWUoZXhl
YywgcHJvcGVydHlOYW1lLCAqdGhpcyk7IAorICAgICAgICByZXR1cm4gbV9nZXRWYWx1ZShleGVj
LCBvcmlnaW5hbE9iamVjdCwgcHJvcGVydHlOYW1lLCAqdGhpcyk7IAogICAgIH0KIAotICAgIEpT
VmFsdWUgKmdldFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBj
b25zdAorICAgIEpTVmFsdWUgKmdldFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9y
aWdpbmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAgICAgeyAKICAgICAg
ICAgaWYgKG1fZ2V0VmFsdWUgPT0gVkFMVUVfU0xPVF9NQVJLRVIpCiAgICAgICAgICAgICByZXR1
cm4gKm1fZGF0YS52YWx1ZVNsb3Q7Ci0gICAgICAgIHJldHVybiBtX2dldFZhbHVlKGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20ocHJvcGVydHlOYW1lKSwgKnRoaXMpOyAKKyAgICAgICAgcmV0dXJuIG1f
Z2V0VmFsdWUoZXhlYywgb3JpZ2luYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20ocHJvcGVydHlO
YW1lKSwgKnRoaXMpOyAKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRWYWx1ZVNsb3QoSlNPYmpl
Y3QgKnNsb3RCYXNlLCBKU1ZhbHVlICoqdmFsdWVTbG90KSAKQEAgLTgxLDcgKzgxLDE0IEBAIHB1
YmxpYzoKICAgICAgICAgbV9kYXRhLmluZGV4ID0gaW5kZXg7CiAgICAgICAgIG1fZ2V0VmFsdWUg
PSBnZXRWYWx1ZTsKICAgICB9Ci0KKyAgICAKKyAgICB2b2lkIHNldEdldHRlclNsb3QoSlNPYmpl
Y3QgKnNsb3RCYXNlLCBKU09iamVjdCAqZ2V0dGVyRnVuYykKKyAgICB7CisgICAgICAgIG1fZ2V0
VmFsdWUgPSBmdW5jdGlvbkdldHRlcjsKKyAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOwor
ICAgICAgICBtX2RhdGEuZ2V0dGVyRnVuYyA9IGdldHRlckZ1bmM7CisgICAgfQorICAgIAogICAg
IHZvaWQgc2V0VW5kZWZpbmVkKEpTT2JqZWN0ICpzbG90QmFzZSkKICAgICB7CiAgICAgICAgIG1f
c2xvdEJhc2UgPSBzbG90QmFzZTsKQEAgLTk0LDEyICsxMDEsMTQgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmluZGV4OyB9CiAKIHByaXZhdGU6
Ci0gICAgc3RhdGljIEpTVmFsdWUgKnVuZGVmaW5lZEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotCisgICAgc3RhdGljIEpTVmFsdWUg
KnVuZGVmaW5lZEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlICpmdW5jdGlvbkdl
dHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOworICAgIAogICAgIEdldFZhbHVlRnVuYyBtX2dldFZhbHVlOwogCiAgICAg
SlNPYmplY3QgKm1fc2xvdEJhc2U7CiAgICAgdW5pb24geworICAgICAgICBKU09iamVjdCAqZ2V0
dGVyRnVuYzsKICAgICAgICAgSlNWYWx1ZSAqKnZhbHVlU2xvdDsKICAgICAgICAgY29uc3QgSGFz
aEVudHJ5ICpzdGF0aWNFbnRyeTsKICAgICAgICAgdW5zaWduZWQgaW5kZXg7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS41MgpkaWZmIC1wIC11IC1yMS41MiBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5n
X29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkxMSBE
ZWMgMjAwNSAwMjowNTo0OSAtMDAwMAkxLjUyCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5n
X29iamVjdC5jcHAJMTMgRGVjIDIwMDUgMjA6MjU6NTkgLTAwMDAKQEAgLTUyLDEyICs1MiwxMiBA
QCBTdHJpbmdJbnN0YW5jZTo6U3RyaW5nSW5zdGFuY2UoSlNPYmplY3QgCiAgIHNldEludGVybmFs
VmFsdWUoanNTdHJpbmcoc3RyaW5nKSk7CiB9CiAKLUpTVmFsdWUgKlN0cmluZ0luc3RhbmNlOjps
ZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCAmc2xvdCkKK0pTVmFsdWUgKlN0cmluZ0luc3RhbmNlOjps
ZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90ICZzbG90KQog
ewogICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSAqPihzbG90
LnNsb3RCYXNlKCkpLT5pbnRlcm5hbFZhbHVlKCktPnRvU3RyaW5nKGV4ZWMpLnNpemUoKSk7CiB9
CiAKLUpTVmFsdWUgKlN0cmluZ0luc3RhbmNlOjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90ICZzbG90
KQorSlNWYWx1ZSAqU3RyaW5nSW5zdGFuY2U6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
SlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCAmc2xvdCkKIHsKICAgICBjb25zdCBVQ2hhciBjID0gc3RhdGlj
X2Nhc3Q8U3RyaW5nSW5zdGFuY2UgKj4oc2xvdC5zbG90QmFzZSgpKS0+aW50ZXJuYWxWYWx1ZSgp
LT50b1N0cmluZyhleGVjKVtzbG90LmluZGV4KCldOwogICAgIHJldHVybiBqc1N0cmluZyhVU3Ry
aW5nKCZjLCAxKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29i
amVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1IEphdmFT
Y3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJp
bmdfb2JqZWN0LmgJMTEgRGVjIDIwMDUgMDI6MDU6NDkgLTAwMDAJMS4xNQorKysgSmF2YVNjcmlw
dENvcmUva2pzL3N0cmluZ19vYmplY3QuaAkxMyBEZWMgMjAwNSAyMDoyNTo1OSAtMDAwMApAQCAt
MzksOCArMzksOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIGluZm87CiAgIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUgKmxlbmd0aEdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QgJnNsb3QpOwotICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QgJnNsb3QpOworICAgIHN0
YXRpYyBKU1ZhbHVlICpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90ICZzbG90KTsKKyAgICBzdGF0aWMg
SlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90ICZzbG90KTsKICAgfTsKIAogICAvKioKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
MApkaWZmIC1wIC11IC1yMS40MCBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaAotLS0gSmF2YVNj
cmlwdENvcmUva2pzL3ZhbHVlLmgJMTMgRGVjIDIwMDUgMTE6MDY6MDQgLTAwMDAJMS40MAorKysg
SmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJMTMgRGVjIDIwMDUgMjA6MjU6NTkgLTAwMDAKQEAg
LTU0LDcgKzU0LDggQEAgZW51bSBUeXBlIHsKICAgICBCb29sZWFuVHlwZSAgICAgICA9IDMsCiAg
ICAgU3RyaW5nVHlwZSAgICAgICAgPSA0LAogICAgIE51bWJlclR5cGUgICAgICAgID0gNSwKLSAg
ICBPYmplY3RUeXBlICAgICAgICA9IDYKKyAgICBPYmplY3RUeXBlICAgICAgICA9IDYsCisgICAg
R2V0dGVyU2V0dGVyVHlwZSAgPSA3CiB9OwogCiAvKioKQEAgLTEzMiw2ICsxMzMsNyBAQCBjbGFz
cyBKU0NlbGwgOiBwdWJsaWMgSlNWYWx1ZSB7CiAgICAgZnJpZW5kIGNsYXNzIE51bWJlckltcDsK
ICAgICBmcmllbmQgY2xhc3MgU3RyaW5nSW1wOwogICAgIGZyaWVuZCBjbGFzcyBKU09iamVjdDsK
KyAgICBmcmllbmQgY2xhc3MgR2V0dGVyU2V0dGVySW1wOwogcHJpdmF0ZToKICAgICBKU0NlbGwo
KTsKICAgICB2aXJ0dWFsIH5KU0NlbGwoKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjE0NwpkaWZmIC1wIC11IC1yMS4xNDcgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCi0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJMTMgRGVjIDIwMDUgMDE6NTA6MzAgLTAw
MDAJMS4xNDcKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkxMyBEZWMgMjAwNSAyMDoyNjoyMyAt
MDAwMApAQCAtMSwzICsxLDEyIEBACisyMDA1LTEyLTEzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRl
cnNjYUBtYWMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gQWRkIHRlc3QgZm9yIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjA0MQorICAgICAgICAKKyAgICAgICAgKiBmYXN0L2pzL3Byb3BlcnR5LWdl
dHRlcnMtYW5kLXNldHRlcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L3Byb3BlcnR5LWdldHRlcnMtYW5kLXNldHRlcnMuaHRtbDogQWRkZWQuCisKIDIwMDUtMTItMTIg
IEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBoYXJyaXNvbgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9wcm9wZXJ0eS1nZXR0
ZXJzLWFuZC1zZXR0ZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBmYXN0L2pz
L3Byb3BlcnR5LWdldHRlcnMtYW5kLXNldHRlcnMtZXhwZWN0ZWQudHh0CmRpZmYgLU4gTGF5b3V0
VGVzdHMvZmFzdC9qcy9wcm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJzLWV4cGVjdGVkLnR4dAot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9wcm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJzLWV4cGVj
dGVkLnR4dAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L3Byb3BlcnR5LWdldHRlcnMtYW5kLXNldHRlcnMtZXhwZWN0ZWQudHh0CTEzIERlYyAyMDA1IDIw
OjI2OjMyIC0wMDAwCkBAIC0wLDAgKzEsMyBAQAorVGhpcyBwZXJmb3JtcyBhIG51bWJlciBvZiBk
aWZmZXJlbnQgdGVzdHMgb24gSmF2YVNjcmlwdCBnZXR0ZXJzIGFuZCBzZXR0ZXJzLiBJZiB0aGlz
IHRlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIHRleHQgIlNVQ0NFU1MiIHNob3VsZCBiZSBzaG93biBi
ZWxvdy4gT3RoZXJ3aXNlLCAiRkFJTFVSRSIgYW5kIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJl
IGlzIHNob3duLgorU1VDQ0VTUyEKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9wcm9wZXJ0
eS1nZXR0ZXJzLWFuZC1zZXR0ZXJzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogZmFzdC9qcy9w
cm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJzLmh0bWwKZGlmZiAtTiBMYXlvdXRUZXN0cy9mYXN0
L2pzL3Byb3BlcnR5LWdldHRlcnMtYW5kLXNldHRlcnMuaHRtbAotLS0gTGF5b3V0VGVzdHMvZmFz
dC9qcy9wcm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0ZXJzLmh0bWwJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMAorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9wcm9wZXJ0eS1nZXR0ZXJzLWFuZC1zZXR0
ZXJzLmh0bWwJMTMgRGVjIDIwMDUgMjA6MjY6MzIgLTAwMDAKQEAgLTAsMCArMSwxNTIgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gZGVidWcoc3RyKSB7CisgICAgdmFyIGMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpCisgICAgYy5pbm5lckhUTUwgKz0g
KHN0ciArICI8YnI+IikKK30KKworCitmdW5jdGlvbiBydW5UZXN0cygpIHsKKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgICAgIAorICAgIC8vIHRoZSBnZXQgc2V0IG9iamVjdCBkZWNsYXJh
dGlvbiBzeW50YXgKKyAgICB2YXIgbzEgPSB7ICdhJzo3LCBnZXQgYigpIHsgcmV0dXJuIHRoaXMu
YSArIDEgfSwgc2V0IGIoeCkgeyB0aGlzLmEgPSB4IH0gfQorICAgIGlmIChvMS5iICE9IDgpIHsK
KyAgICAgICAgZGVidWcoJ0ZBSUxVUkU6IGdldCBmdW5jdGlvbiBkaWQgbm90IHJldHVybiB0aGUg
Y29ycmVjdCB2YWx1ZScpCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbzEuYiA9IDEwOwor
ICAgIGlmIChvMS5iICE9IDExKSB7CisgICAgICAgIGRlYnVnKCdGQUlMVVJFOiBnZXQgZnVuY3Rp
b24gZGlkIG5vdCByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUnKQorICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIC8vIF9fZGVmaW5lR2V0dGVyX18gYW5kIF9fZGVmaW5lU2V0dGVyX18K
KyAgICB2YXIgbzIgPSBuZXcgT2JqZWN0KCkKKyAgICBvMi5hID0gNzsKKyAgICBvMi5fX2RlZmlu
ZUdldHRlcl9fKCdiJywgZnVuY3Rpb24gZ2V0QigpIHsgcmV0dXJuIHRoaXMuYSArIDF9ICkKKyAg
ICBvMi5fX2RlZmluZVNldHRlcl9fKCdiJywgZnVuY3Rpb24gc2V0Qih4KSB7IHRoaXMuYSA9IHh9
KQorICAgIGlmIChvMi5iICE9IDgpIHsKKyAgICAgICAgICAgZGVidWcoJ0ZBSUxVUkU6IGdldCBm
dW5jdGlvbiBkaWQgbm90IHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZScpCisgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbzIuYiA9IDEwOworICAgIGlmIChvMi5iICE9IDExKSB7CisgICAg
ICAgIGRlYnVnKCdGQUlMVVJFOiBnZXQgZnVuY3Rpb24gZGlkIG5vdCByZXR1cm4gdGhlIGNvcnJl
Y3QgdmFsdWUnKQorICAgICAgICByZXR1cm47CisgICAgfSAgIAorICAgIAorICAgIC8vIFNldHRp
bmcgYSB2YWx1ZSB3aXRob3V0IGhhdmluZyBhIHNldHRlcgorICAgIHZhciBvMyA9IHsgZ2V0IHgo
KSB7IHJldHVybiA0MjsgfSB9CisgICAgdmFyIG51bUV4Y2VwdGlvbnMgPSAwOworICAgIHRyeSB7
CisgICAgICAgIG8zLnggPSAxMDsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIG51bUV4Y2Vw
dGlvbnMrKzsKKyAgICB9CisgICAgCisgICAgaWYgKG51bUV4Y2VwdGlvbnMgIT0gMSkgeworICAg
ICAgICBkZWJ1ZygnRkFJTFVSRTogU2V0dGluZyBhIHZhbHVlIHdpdGhvdXQgYSBzZXR0ZXIgZGlk
IG5vdCB0aHJvdyBhbiBleGNlcHRpb24nKQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIC8vIEdldHRpbmcgYSB2YWx1ZSB3aXRob3V0IGhhdmluZyBhIGdldHRlcgorICAgIHZhciBv
NCA9IHsgc2V0IHgoeSkgeyB9fQorICAgIGlmIChvNC54ICE9IHVuZGVmaW5lZCkgeworICAgICAg
ICBkZWJ1ZygnRkFJTFVSRTogR2V0dGluZyBhIHZhbHVlIHdpdGhvdXQgYSBnZXR0ZXIgZGlkIG5v
dCByZXR1cm4gdW5kZWZpbmVkJykKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIF9f
bG9va3VwR2V0dGVyX18gYW5kIF9fbG9va3VwU2V0dGVyX18KKyAgICB2YXIgbzQgPSBuZXcgT2Jq
ZWN0KCkKKyAgICBmdW5jdGlvbiBnZXRCKCkgeyByZXR1cm4gdGhpcy5hIH0KKyAgICBmdW5jdGlv
biBzZXRCKHgpIHsgdGhpcy5hID0geCB9CisgICAgbzQuX19kZWZpbmVHZXR0ZXJfXygnYicsIGdl
dEIpCisgICAgbzQuX19kZWZpbmVTZXR0ZXJfXygnYicsIHNldEIpCisgICAgCisgICAgaWYgKG80
Ll9fbG9va3VwR2V0dGVyX18oJ2InKSAhPSBnZXRCKSB7CisgICAgICAgIGRlYnVnKCdGQUlMVVJF
OiBfX2xvb2t1cEdldHRlcl9fIGRpZCBub3QgcmV0dXJuIHRoZSBjb3JyZWN0IGZ1bmN0aW9uJykK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobzQuX19sb29rdXBTZXR0ZXJfXygnYicp
ICE9IHNldEIpIHsKKyAgICAgICAgZGVidWcoJ0ZBSUxVUkU6IF9fbG9va3VwU2V0dGVyX18gZGlk
IG5vdCByZXR1cm4gdGhlIGNvcnJlY3QgZnVuY3Rpb24nKQorICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIC8vIF9fZGVmaW5lR2V0dGVyX18gYW5kIF9fZGVmaW5lU2V0dGVyX18gd2l0
aCB2YXJpb3VzIGludmFsaWQgYXJndW1lbnRzCisgICAgdmFyIG51bUV4Y2VwdGlvbnMgPSAwOwor
ICAgIHZhciBvNSA9IG5ldyBPYmplY3QoKTsKKyAgICB0cnkgeyBvNS5fX2RlZmluZVNldHRlcl9f
KCdhJywgbnVsbCkgfSBjYXRjaCAoZSkgeyBudW1FeGNlcHRpb25zKys7IH0KKyAgICB0cnkgeyBv
NS5fX2RlZmluZVNldHRlcl9fKCdhJywgbzUpIH0gY2F0Y2ggKGUpIHsgbnVtRXhjZXB0aW9ucysr
OyB9CisgICAgdHJ5IHsgbzUuX19kZWZpbmVHZXR0ZXJfXygnYScsIG51bGwpIH0gY2F0Y2ggKGUp
IHsgbnVtRXhjZXB0aW9ucysrOyB9CisgICAgdHJ5IHsgbzUuX19kZWZpbmVHZXR0ZXJfXygnYScs
IG81KSB9IGNhdGNoIChlKSB7IG51bUV4Y2VwdGlvbnMrKzsgfQorICAgIAorICAgIGlmIChudW1F
eGNlcHRpb25zICE9IDQpIHsKKyAgICAgICAgZGVidWcoJ0ZBSUxVUkU6IG9uZSBvZiB0aGUgaW52
YWxpZCBnZXR0ZXIvc2V0dGVyIGRlZmluaXRpb25zIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9u
JykKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBzZXR0ZXJzIGFuZCBnZXR0
ZXJzIHdpdGggZXhjZXB0aW9ucworICAgIHZhciBvNiA9IHsgZ2V0IHgoKSB7IHRocm93ICdFeGNl
cHRpb24gaW4gZ2V0J30sIHNldCB4KGYpIHsgdGhyb3cgJ0V4Y2VwdGlvbiBpbiBzZXQnfX0KKyAg
ICB2YXIgeCA9IDA7CisgICAgdmFyIG51bUV4Y2VwdGlvbnMgPSAwOworICAgIHRyeSB7CisgICAg
ICAgIHggPSBvNi54OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbnVtRXhjZXB0aW9ucysr
OworICAgICAgICBpZiAoeCAhPSAwKSB7CisgICAgICAgICAgICBkZWJ1ZygnRkFJTFVSRTogeCB3
YXMgdXBkYXRlZCBldmVuIHRob3VnaCB0aGUgZ2V0dGVyIHRocmV3IGFuIGV4Y2VwdGlvbicpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bUV4
Y2VwdGlvbnMgIT0gMSkgeworICAgICAgICBkZWJ1ZygnRkFJTFVSRTogZGlkIG5vdCBnZXQgYW4g
ZXhjZXB0aW9uIGV2ZW4gdGhvdWdoIHRoZSB4IGdldHRlciB0aHJldyBvbmUnKQorICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIHZhciBudW1FeGNlcHRpb25zID0gMDsKKyAgICB0cnkgeworICAg
ICAgICBvNi54ID0gNDI7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBudW1FeGNlcHRpb25z
Kys7CisgICAgfQorICAgIGlmIChudW1FeGNlcHRpb25zICE9IDEpIHsKKyAgICAgICAgZGVidWco
J0ZBSUxVUkU6IGRpZCBub3QgZ2V0IGFuIGV4Y2VwdGlvbiBldmVuIHRob3VnaCB0aGUgeCBzZXR0
ZXIgdGhyZXcgb25lJykKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERlZmluaW5n
IGEgc2V0dGVyIHNob3VsZCBhbHNvIGRlZmluZSBhIGdldHRlciBmb3IgdGhlIHNhbWUgcHJvcGVy
dHkKKyAgICAvLyB3aGljaCByZXR1cm5zIHVuZGVmaW5lZC4gVGh1cywgYSBnZXR0ZXIgZGVmaW5l
ZCBvbiB0aGUgcHJvdG90eXBlIHNob3VsZCBub3QKKyAgICAvLyBiZSBjYWxsZWQuCisgICAgbzYg
PSB7ICdhJzo3LCBzZXQgeChiKSB7IHRoaXMuYSA9IGI7IH19CisgICAgbzYucHJvdG90eXBlID0g
eyBnZXQgeCgpIHsgcmV0dXJuIDQyOyB9fQorICAgIAorICAgIGlmIChvNi54ICE9IHVuZGVmaW5l
ZCkgeworICAgICAgICBkZWJ1ZygnRkFJTFVSRTogeCBzaG91bGQgYmUgdW5kZWZpbmVkIScpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgYW4gb2JqZWN0IGhhcyBhIHByb3Bl
cnR5IGFuZCBpdHMgcHJvdG90eXBlIGhhcyBhIHNldHRlciBmdW5jdGlvbiBmb3IgdGhhdAorICAg
IC8vIHByb3BlcnR5LCB0aGVuIHNldHRpbmcgdGhlIHByb3BlcnR5IHNob3VsZCBzZXQgdGhlIHBy
b3BlcnR5IGRpcmVjdGx5IGFuZCBub3QgY2FsbAorICAgIC8vIHRoZSBzZXR0ZXIgZnVuY3Rpb24u
CisgICAgdmFyIG83ID0gbmV3IE9iamVjdCgpCisgICAgbzcubnVtU2V0cyA9IDA7CisgICAgbzcu
eCA9IDEwOworICAgIG83Ll9fcHJvdG9fXy5fX2RlZmluZVNldHRlcl9fKCd4JywgZnVuY3Rpb24o
KSB7IHRoaXMubnVtU2V0cysrOyB9KQorICAgIG83LnggPSAyMDsKKyAgICBpZiAobzcubnVtU2V0
cyAhPSAwKSB7CisgICAgICAgIGRlYnVnKCdGQUlMVVJFOiBzZXR0ZXIgZnVuY3Rpb24gc2hvdWxk
IG5vdCBiZSBjYWxsZWQuJykKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlYnVnKCdT
VUNDRVNTIScpCit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMo
KTsiPgorVGhpcyBwZXJmb3JtcyBhIG51bWJlciBvZiBkaWZmZXJlbnQgdGVzdHMgb24gSmF2YVNj
cmlwdCBnZXR0ZXJzIGFuZCBzZXR0ZXJzLiBJZiB0aGlzIHRlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhl
IHRleHQgIlNVQ0NFU1MiIHNob3VsZCBiZSBzaG93biBiZWxvdy4gT3RoZXJ3aXNlLCAiRkFJTFVS
RSIgYW5kIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlIGlzIHNob3duLgorPHByZSBpZD0iY29u
c29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CisKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL0NoYW5nZUxvZyx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS41MjAKZGlmZiAtcCAtdSAtcjEuNTIwIFdlYkNvcmUvQ2hhbmdlTG9n
Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkxMyBEZWMgMjAwNSAxMTo0Njo1MSAtMDAwMAkxLjUyMAor
KysgV2ViQ29yZS9DaGFuZ2VMb2cJMTMgRGVjIDIwMDUgMjA6Mjk6MDAgLTAwMDAKQEAgLTEsMyAr
MSw1NyBAQAorMjAwNS0xMi0xMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAbWFjLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGtodG1s
L2VjbWEva2pzX2Nzcy5jcHA6CisgICAgICAgIChLSlM6OkRPTUNTU1N0eWxlRGVjbGFyYXRpb246
OmluZGV4R2V0dGVyKToKKyAgICAgICAgKEtKUzo6RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y3Nz
UHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAoS0pTOjpET01TdHlsZVNoZWV0TGlzdDo6aW5kZXhH
ZXR0ZXIpOgorICAgICAgICAoS0pTOjpET01TdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRlcik6Cisg
ICAgICAgIChLSlM6OkRPTU1lZGlhTGlzdDo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAoS0pTOjpE
T01DU1NSdWxlTGlzdDo6aW5kZXhHZXR0ZXIpOgorICAgICAgICAoS0pTOjpET01DU1NWYWx1ZUxp
c3Q6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19jc3MuaDoKKyAgICAg
ICAgKiBraHRtbC9lY21hL2tqc19kb20uY3BwOgorICAgICAgICAoS0pTOjpET01Ob2RlTGlzdDo6
aW5kZXhHZXR0ZXIpOgorICAgICAgICAoS0pTOjpET01Ob2RlTGlzdDo6bmFtZUdldHRlcik6Cisg
ICAgICAgIChLSlM6OkRPTUVsZW1lbnQ6OmF0dHJpYnV0ZUdldHRlcik6CisgICAgICAgIChLSlM6
OkRPTU5hbWVkTm9kZU1hcDo6bGVuZ3RoR2V0dGVyKToKKyAgICAgICAgKEtKUzo6RE9NTmFtZWRO
b2RlTWFwOjppbmRleEdldHRlcik6CisgICAgICAgIChLSlM6OkRPTU5hbWVkTm9kZU1hcDo6bmFt
ZUdldHRlcik6CisgICAgICAgIChLSlM6OkRPTU5hbWVkTm9kZXNDb2xsZWN0aW9uOjpsZW5ndGhH
ZXR0ZXIpOgorICAgICAgICAoS0pTOjpET01OYW1lZE5vZGVzQ29sbGVjdGlvbjo6aW5kZXhHZXR0
ZXIpOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2RvbS5oOgorICAgICAgICAqIGtodG1sL2Vj
bWEva2pzX2h0bWwuY3BwOgorICAgICAgICAoS0pTOjpIVE1MRG9jdW1lbnQ6Om5hbWVkSXRlbUdl
dHRlcik6CisgICAgICAgIChLSlM6OkhUTUxFbGVtZW50Ojpmb3JtSW5kZXhHZXR0ZXIpOgorICAg
ICAgICAoS0pTOjpIVE1MRWxlbWVudDo6Zm9ybU5hbWVHZXR0ZXIpOgorICAgICAgICAoS0pTOjpI
VE1MRWxlbWVudDo6c2VsZWN0SW5kZXhHZXR0ZXIpOgorICAgICAgICAoS0pTOjpIVE1MRWxlbWVu
dDo6ZnJhbWVzZXROYW1lR2V0dGVyKToKKyAgICAgICAgKEtKUzo6SFRNTEVsZW1lbnQ6OmZyYW1l
V2luZG93UHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAoS0pTOjpIVE1MRWxlbWVudDo6cnVudGlt
ZU9iamVjdEdldHRlcik6CisgICAgICAgIChLSlM6OkhUTUxFbGVtZW50OjpydW50aW1lT2JqZWN0
UHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAoS0pTOjpIVE1MQ29sbGVjdGlvbjo6bGVuZ3RoR2V0
dGVyKToKKyAgICAgICAgKEtKUzo6SFRNTENvbGxlY3Rpb246OmluZGV4R2V0dGVyKToKKyAgICAg
ICAgKEtKUzo6SFRNTENvbGxlY3Rpb246Om5hbWVHZXR0ZXIpOgorICAgICAgICAoS0pTOjpIVE1M
U2VsZWN0Q29sbGVjdGlvbjo6c2VsZWN0ZWRJbmRleEdldHRlcik6CisgICAgICAgICoga2h0bWwv
ZWNtYS9ranNfaHRtbC5oOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX25hdmlnYXRvci5jcHA6
CisgICAgICAgIChLSlM6OlBsdWdpbnM6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKEtKUzo6UGx1
Z2luczo6bmFtZUdldHRlcik6CisgICAgICAgIChLSlM6Ok1pbWVUeXBlczo6aW5kZXhHZXR0ZXIp
OgorICAgICAgICAoS0pTOjpNaW1lVHlwZXM6Om5hbWVHZXR0ZXIpOgorICAgICAgICAoS0pTOjpQ
bHVnaW46OmluZGV4R2V0dGVyKToKKyAgICAgICAgKEtKUzo6UGx1Z2luOjpuYW1lR2V0dGVyKToK
KyAgICAgICAgKiBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwOgorICAgICAgICAoS0pTOjpXaW5k
b3c6OmNoaWxkRnJhbWVHZXR0ZXIpOgorICAgICAgICAoS0pTOjpXaW5kb3c6Om5hbWVkRnJhbWVH
ZXR0ZXIpOgorICAgICAgICAoS0pTOjpXaW5kb3c6OmluZGV4R2V0dGVyKToKKyAgICAgICAgKEtK
Uzo6V2luZG93OjpuYW1lZEl0ZW1HZXR0ZXIpOgorICAgICAgICAoS0pTOjpGcmFtZUFycmF5Ojpp
bmRleEdldHRlcik6CisgICAgICAgIChLSlM6OkZyYW1lQXJyYXk6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIGtodG1sL2VjbWEva2pzX3dpbmRvdy5oOgorICAgICAgICBVcGRhdGUgZm9yIGNoYW5n
ZXMgdG8gUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMuCisKIDIwMDUtMTItMTMgIE1hY2llaiBT
dGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICAtIGJ1aWxkIGZpeCBmb3IgbGFz
dC1taW51dGUgcGFydCBvZiBwcmV2aW91cyBjaGFuZ2UKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfY3NzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lY21hL2tqc19jc3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQzCmRpZmYgLXAgLXUg
LXIxLjQzIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcAotLS0gV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19jc3MuY3BwCTExIERlYyAyMDA1IDAyOjA2OjA0IC0wMDAwCTEuNDMKKysrIFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcAkxMyBEZWMgMjAwNSAyMDoyOTowNSAtMDAwMApAQCAt
MTM4LDEzICsxMzgsMTMgQEAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6fkRPTUNTU1N0eWxlRGVj
bAogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7CiB9
CiAKLUpTVmFsdWUgKkRPTUNTU1N0eWxlRGVjbGFyYXRpb246OmluZGV4R2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitKU1ZhbHVlICpET01DU1NTdHlsZURlY2xhcmF0aW9uOjppbmRleEdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTUNTU1N0
eWxlRGVjbGFyYXRpb24gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01DU1NTdHlsZURlY2xhcmF0
aW9uICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIHJldHVybiBqc1N0cmluZ09yTnVsbCh0aGlzT2Jq
LT5tX2ltcGwtPml0ZW0oc2xvdC5pbmRleCgpKSk7CiB9CiAKLUpTVmFsdWUgKkRPTUNTU1N0eWxl
RGVjbGFyYXRpb246OmNzc1Byb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
ICpET01DU1NTdHlsZURlY2xhcmF0aW9uOjpjc3NQcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTUNTU1N0eWxlRGVjbGFyYXRp
b24gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01DU1NTdHlsZURlY2xhcmF0aW9uICo+KHNsb3Qu
c2xvdEJhc2UoKSk7CiAKQEAgLTM4MCwxMyArMzgwLDEzIEBAIEpTVmFsdWUgKkRPTVN0eWxlU2hl
ZXRMaXN0OjpnZXRWYWx1ZVByb3AKICAgICB9CiB9CiAKLUpTVmFsdWUgKkRPTVN0eWxlU2hlZXRM
aXN0OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqRE9NU3R5bGVTaGVl
dExpc3Q6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgRE9NU3R5bGVTaGVldExpc3QgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01T
dHlsZVNoZWV0TGlzdCAqPihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1cm4gZ2V0RE9NU3R5bGVT
aGVldChleGVjLCB0aGlzT2JqLT5tX2ltcGwtPml0ZW0oc2xvdC5pbmRleCgpKSk7CiB9CiAKLUpT
VmFsdWUgKkRPTVN0eWxlU2hlZXRMaXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitK
U1ZhbHVlICpET01TdHlsZVNoZWV0TGlzdDo6bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpT
T2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTVN0eWxlU2hlZXRMaXN0ICp0aGlzT2Jq
ID0gc3RhdGljX2Nhc3Q8RE9NU3R5bGVTaGVldExpc3QgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAg
RWxlbWVudEltcGwgKmVsZW1lbnQgPSB0aGlzT2JqLT5tX2RvYy0+Z2V0RWxlbWVudEJ5SWQocHJv
cGVydHlOYW1lLmRvbVN0cmluZygpKTsKQEAgLTUwMSw3ICs1MDEsNyBAQCBKU1ZhbHVlICpET01N
ZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoCiAgIH0KIH0KIAotSlNWYWx1ZSAqRE9NTWVkaWFM
aXN0OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqRE9NTWVkaWFMaXN0
OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgIERPTU1lZGlhTGlzdCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PERPTU1lZGlhTGlzdCAq
PihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1cm4ganNTdHJpbmdPck51bGwodGhpc09iai0+bV9p
bXBsLT5pdGVtKHNsb3QuaW5kZXgoKSkpOwpAQCAtNjU4LDcgKzY1OCw3IEBAIEpTVmFsdWUgKkRP
TUNTU1J1bGVMaXN0OjpnZXRWYWx1ZVByb3BlcnQKICAgfQogfQogCi1KU1ZhbHVlICpET01DU1NS
dWxlTGlzdDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkRPTUNTU1J1
bGVMaXN0OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgIERPTUNTU1J1bGVMaXN0ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9NQ1NT
UnVsZUxpc3QgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgcmV0dXJuIGdldERPTUNTU1J1bGUoZXhl
YywgdGhpc09iai0+bV9pbXBsLT5pdGVtKHNsb3QuaW5kZXgoKSkpOwpAQCAtMTE5Miw3ICsxMTky
LDcgQEAgSlNWYWx1ZSAqRE9NQ1NTVmFsdWVMaXN0OjpnZXRWYWx1ZVByb3BlcgogICByZXR1cm4g
anNOdW1iZXIoc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0SW1wbCAqPihpbXBsKCkpLT5sZW5ndGgo
KSk7CiB9CiAKLUpTVmFsdWUgKkRPTUNTU1ZhbHVlTGlzdDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKK0pTVmFsdWUgKkRPTUNTU1ZhbHVlTGlzdDo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBET01DU1NWYWx1ZUxpc3Qg
KnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01DU1NWYWx1ZUxpc3QgKj4oc2xvdC5zbG90QmFzZSgp
KTsKICAgcmV0dXJuIGdldERPTUNTU1ZhbHVlKGV4ZWMsIHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dEltcGwgKj4odGhpc09iai0+aW1wbCgpKS0+aXRlbShzbG90LmluZGV4KCkpKTsKSW5kZXg6IFdl
YkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjMK
ZGlmZiAtcCAtdSAtcjEuMjMgV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuaAotLS0gV2ViQ29y
ZS9raHRtbC9lY21hL2tqc19jc3MuaAkxMSBEZWMgMjAwNSAwMjowNjowNSAtMDAwMAkxLjIzCisr
KyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5oCTEzIERlYyAyMDA1IDIwOjI5OjA1IC0wMDAw
CkBAIC02MCw4ICs2MCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICBHZXRQcm9wZXJ0
eVByaW9yaXR5LCBHZXRQcm9wZXJ0eVNob3J0aGFuZCwgSXNQcm9wZXJ0eUltcGxpY2l0LCBTZXRQ
cm9wZXJ0eSwgSXRlbSB9OwogICAgIERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKmltcGwo
KSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgcHJpdmF0ZToKLSAgICBzdGF0aWMg
SlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqY3NzUHJvcGVydHlHZXR0ZXIo
RXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1
ZSAqY3NzUHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIAogICAgIFJlZlB0cjxET006OkNTU1N0eWxl
RGVjbGFyYXRpb25JbXBsPiBtX2ltcGw7CiAgIH07CkBAIC0xMDMsOCArMTAzLDggQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgRE9NOjpTdHlsZVNoZWV0TGlzdEltcGwgKmltcGwoKSBjb25zdCB7IHJl
dHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgICBlbnVtIHsgSXRlbSwgTGVuZ3RoIH07CiAgIHByaXZh
dGU6Ci0gICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUgKm5h
bWVHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2Jq
ZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogCiAgICAgUmVmUHRyPERPTTo6U3R5bGVT
aGVldExpc3RJbXBsPiBtX2ltcGw7CiAgICAgUmVmUHRyPERPTTo6RG9jdW1lbnRJbXBsPiBtX2Rv
YzsKQEAgLTEyNyw3ICsxMjcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgSXRlbSwg
RGVsZXRlTWVkaXVtLCBBcHBlbmRNZWRpdW0gfTsKICAgICBET006Ok1lZGlhTGlzdEltcGwgKmlt
cGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgcHJpdmF0ZToKLSAgICBzdGF0
aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KTsKICAgICBSZWZQdHI8RE9NOjpNZWRpYUxpc3RJbXBsPiBt
X2ltcGw7CiAgIH07CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBl
bnVtIHsgSXRlbSwgTGVuZ3RoIH07CiAgICAgRE9NOjpDU1NSdWxlTGlzdEltcGwgKmltcGwoKSBj
b25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNW
YWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KTsKIAogICAgIFJlZlB0cjxET006OkNTU1J1bGVMaXN0SW1wbD4gbV9p
bXBsOwogICB9OwpAQCAtMjY5LDcgKzI2OSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBlbnVtIHsgTGVuZ3RoLCBJdGVtIH07CiAgIHBy
aXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGlj
IEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAgIH07CiAKICAgY2xhc3Mg
RE9NUkdCQ29sb3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfZG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lY21hL2tqc19kb20uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExOApkaWZmIC1wIC11
IC1yMS4xMTggV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwCi0tLSBXZWJDb3JlL2todG1s
L2VjbWEva2pzX2RvbS5jcHAJMTEgRGVjIDIwMDUgMDI6MDY6MDUgLTAwMDAJMS4xMTgKKysrIFdl
YkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcAkxMyBEZWMgMjAwNSAyMDoyOTowNiAtMDAwMApA
QCAtNzQzLDEzICs3NDMsMTMgQEAgSlNWYWx1ZSAqRE9NTm9kZUxpc3Q6OmdldFZhbHVlUHJvcGVy
dHkoRQogICByZXR1cm4ganNOdW1iZXIobV9pbXBsLT5sZW5ndGgoKSk7CiB9CiAKLUpTVmFsdWUg
KkRPTU5vZGVMaXN0OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqRE9N
Tm9kZUxpc3Q6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFs
T2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgRE9NTm9kZUxpc3QgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01Ob2Rl
TGlzdCAqPihzbG90LnNsb3RCYXNlKCkpOwogICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCB0aGlz
T2JqLT5tX2ltcGwtPml0ZW0oc2xvdC5pbmRleCgpKSk7CiB9CiAKLUpTVmFsdWUgKkRPTU5vZGVM
aXN0OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpET01Ob2RlTGlzdDo6
bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgIERPTU5vZGVMaXN0ICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9NTm9kZUxpc3QgKj4oc2xv
dC5zbG90QmFzZSgpKTsKICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGhpc09iai0+bV9pbXBs
LT5pdGVtQnlJZChwcm9wZXJ0eU5hbWUuZG9tU3RyaW5nKCkpKTsKQEAgLTExOTAsNyArMTE5MCw3
IEBAIEpTVmFsdWUgKkRPTUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXgKICAgfQogfQogCi1K
U1ZhbHVlICpET01FbGVtZW50OjphdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pT
VmFsdWUgKkRPTUVsZW1lbnQ6OmF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2Jq
ZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIERPTUVsZW1lbnQgKnRoaXNPYmogPSBzdGF0aWNf
Y2FzdDxET01FbGVtZW50ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAKQEAgLTE0NTIsMTkgKzE0NTIs
MTkgQEAgRE9NTmFtZWROb2RlTWFwOjp+RE9NTmFtZWROb2RlTWFwKCkKICAgU2NyaXB0SW50ZXJw
cmV0ZXI6OmZvcmdldERPTU9iamVjdChtX2ltcGwuZ2V0KCkpOwogfQogCi1KU1ZhbHVlICpET01O
YW1lZE5vZGVNYXA6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqRE9N
TmFtZWROb2RlTWFwOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCAqb3Jp
Z2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KQogewogICBET01OYW1lZE5vZGVNYXAgKnRoaXNPYmogPSBzdGF0aWNfY2Fz
dDxET01OYW1lZE5vZGVNYXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgcmV0dXJuIGpzTnVtYmVy
KHRoaXNPYmotPm1faW1wbC0+bGVuZ3RoKCkpOwogfQogCi1KU1ZhbHVlICpET01OYW1lZE5vZGVN
YXA6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpET01OYW1lZE5vZGVN
YXA6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgRE9NTmFtZWROb2RlTWFwICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RE9NTmFtZWRO
b2RlTWFwICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRo
aXNPYmotPm1faW1wbC0+aXRlbShzbG90LmluZGV4KCkpKTsKIH0KIAotSlNWYWx1ZSAqRE9NTmFt
ZWROb2RlTWFwOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpET01OYW1l
ZE5vZGVNYXA6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICBET01OYW1lZE5vZGVNYXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01O
YW1lZE5vZGVNYXAgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
YywgdGhpc09iai0+bV9pbXBsLT5nZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lLmRvbVN0cmluZygp
KSk7CkBAIC0xODY1LDEzICsxODY1LDEzIEBAIERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uOjpET01O
YW1lZE5vZGVzQ28KIHsKIH0KIAotSlNWYWx1ZSAqRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb246Omxl
bmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqRE9NTmFtZWROb2Rlc0NvbGxl
Y3Rpb246Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgIERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uICp0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8RE9NTmFtZWROb2Rlc0NvbGxlY3Rpb24gKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgcmV0dXJu
IGpzTnVtYmVyKHRoaXNPYmotPm1fbm9kZXMuY291bnQoKSk7CiB9CiAKLUpTVmFsdWUgKkRPTU5h
bWVkTm9kZXNDb2xsZWN0aW9uOjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1
ZSAqRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb246OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRE9NTmFtZWROb2Rlc0NvbGxlY3Rpb24g
KnRoaXNPYmogPSBzdGF0aWNfY2FzdDxET01OYW1lZE5vZGVzQ29sbGVjdGlvbiAqPihzbG90LnNs
b3RCYXNlKCkpOwogICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCB0aGlzT2JqLT5tX25vZGVzW3Ns
b3QuaW5kZXgoKV0uZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20u
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MgpkaWZmIC1wIC11IC1yMS42MiBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX2RvbS5oCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5oCTExIERl
YyAyMDA1IDAyOjA2OjA1IC0wMDAwCTEuNjIKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9t
LmgJMTMgRGVjIDIwMDUgMjA6Mjk6MDYgLTAwMDAKQEAgLTEwNiw4ICsxMDYsOCBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICB2aXJ0dWFsIEpTVmFsdWUgKnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSAqZXhl
YywgVHlwZSBwcmVmZXJyZWQgPSBVbmRlZmluZWRUeXBlKSBjb25zdDsKIAogICBwcml2YXRlOgot
ICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIHN0YXRpYyBKU1ZhbHVl
ICpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KTsKIAogICAgIFJlZlB0cjxET006Ok5vZGVMaXN0SW1wbD4gbV9pbXBsOwogICB9OwpAQCAt
MTczLDcgKzE3Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIC8vIENvbnN0cnVjdG9yIGZvciBp
bmhlcml0ZWQgY2xhc3NlczsgZG9lc24ndCBzZXQgdXAgYSBwcm90b3R5cGUuCiAgICAgRE9NRWxl
bWVudChET006OkVsZW1lbnRJbXBsICplKTsKICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1
ZSAqYXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKmF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogICB9OwogCiAgIERPTTo6RWxlbWVudEltcGwgKnRvRWxl
bWVudChKU1ZhbHVlICopOyAvLyByZXR1cm5zIDAgaWYgcGFzc2VkLWluIHZhbHVlIGlzIG5vdCBh
IERPTUVsZW1lbnQgb2JqZWN0CkBAIC0yMTksOSArMjE5LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgICAgICAgIEdldE5hbWVkSXRlbU5TLCBTZXROYW1lZEl0ZW1OUywgUmVtb3ZlTmFtZWRJdGVt
TlMgfTsKICAgICBET006Ok5hbWVkTm9kZU1hcEltcGwgKmltcGwoKSBjb25zdCB7IHJldHVybiBt
X2ltcGwuZ2V0KCk7IH0KICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSAqbGVuZ3RoR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Ci0gICAgc3Rh
dGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqbGVuZ3Ro
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KTsKIAogICAgIFJlZlB0cjxET006Ok5hbWVkTm9kZU1hcEltcGw+IG1faW1wbDsK
ICAgfTsKQEAgLTI5OCw4ICsyOTgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBET01OYW1lZE5v
ZGVzQ29sbGVjdGlvbihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IFFWYWx1ZUxpc3Q8IFJlZlB0cjxE
T006Ok5vZGVJbXBsPiA+JiBub2RlcyApOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAg
cHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Ci0gICAgc3Rh
dGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKmxlbmd0
aEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpOwogCiAgICAgUVZhbHVlTGlzdDwgUmVmUHRyPERPTTo6Tm9kZUlt
cGw+ID4gbV9ub2RlczsKICAgfTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNf
aHRtbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUzCmRpZmYgLXAgLXUgLXIxLjE1MyBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pz
X2h0bWwuY3BwCTExIERlYyAyMDA1IDAyOjA2OjA1IC0wMDAwCTEuMTUzCisrKyBXZWJDb3JlL2to
dG1sL2VjbWEva2pzX2h0bWwuY3BwCTEzIERlYyAyMDA1IDIwOjI5OjA3IC0wMDAwCkBAIC0yNjMs
NyArMjYzLDcgQEAgSFRNTERvY3VtZW50OjpIVE1MRG9jdW1lbnQoRXhlY1N0YXRlICpleAogewog
fQogCi1KU1ZhbHVlICpIVE1MRG9jdW1lbnQ6Om5hbWVkSXRlbUdldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQorSlNWYWx1ZSAqSFRNTERvY3VtZW50OjpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBIVE1MRG9jdW1lbnQgKnRoaXNP
YmogPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgSFRN
TERvY3VtZW50SW1wbCAmZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4odGhp
c09iai0+aW1wbCgpKTsKQEAgLTEyNTksNyArMTI1OSw3IEBAIEhUTUxFbGVtZW50OjpIVE1MRWxl
bWVudChFeGVjU3RhdGUgKmV4ZWMKIHsKIH0KIAotSlNWYWx1ZSAqSFRNTEVsZW1lbnQ6OmZvcm1J
bmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqSFRNTEVsZW1lbnQ6OmZvcm1J
bmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgSFRNTEVsZW1lbnQgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihz
bG90LnNsb3RCYXNlKCkpOwogICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm0gPSBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHRoaXNPYmotPmltcGwoKSk7CkBAIC0xMjY3LDcg
KzEyNjcsNyBAQCBKU1ZhbHVlICpIVE1MRWxlbWVudDo6Zm9ybUluZGV4R2V0dGVyKEV4CiAgICAg
cmV0dXJuIGdldERPTU5vZGUoZXhlYywgZm9ybS0+ZWxlbWVudHMoKS0+aXRlbShzbG90LmluZGV4
KCkpKTsKIH0KIAotSlNWYWx1ZSAqSFRNTEVsZW1lbnQ6OmZvcm1OYW1lR2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCitKU1ZhbHVlICpIVE1MRWxlbWVudDo6Zm9ybU5hbWVHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEhUTUxFbGVtZW50ICp0
aGlzT2JqID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4oc2xvdC5zbG90QmFzZSgpKTsKICAg
ICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50
SW1wbCAqPih0aGlzT2JqLT5pbXBsKCkpOwpAQCAtMTI3NSw3ICsxMjc1LDcgQEAgSlNWYWx1ZSAq
SFRNTEVsZW1lbnQ6OmZvcm1OYW1lR2V0dGVyKEV4ZQogICAgIHJldHVybiBIVE1MQ29sbGVjdGlv
bihleGVjLCBmb3JtLT5lbGVtZW50cygpLmdldCgpKS5nZXROYW1lZEl0ZW1zKGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CiB9CiAKLUpTVmFsdWUgKkhUTUxFbGVtZW50OjpzZWxlY3RJbmRleEdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqSFRNTEVsZW1lbnQ6OnNlbGVjdEluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBIVE1M
RWxlbWVudCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHNsb3Quc2xvdEJh
c2UoKSk7CiAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICpzZWxlY3QgPSBzdGF0aWNfY2FzdDxI
VE1MU2VsZWN0RWxlbWVudEltcGwgKj4odGhpc09iai0+aW1wbCgpKTsKQEAgLTEyODMsNyArMTI4
Myw3IEBAIEpTVmFsdWUgKkhUTUxFbGVtZW50OjpzZWxlY3RJbmRleEdldHRlcigKICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxlY3QtPm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVt
KHNsb3QuaW5kZXgoKSkpOwogfQogCi1KU1ZhbHVlICpIVE1MRWxlbWVudDo6ZnJhbWVzZXROYW1l
R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpIVE1MRWxlbWVudDo6ZnJhbWVzZXRO
YW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBIVE1MRWxlbWVudCAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHNs
b3Quc2xvdEJhc2UoKSk7CiAgICAgSFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsICo+KHRoaXNPYmotPmltcGwoKSk7CkBAIC0xMjk2LDcgKzEyOTYs
NyBAQCBKU1ZhbHVlICpIVE1MRWxlbWVudDo6ZnJhbWVzZXROYW1lR2V0dGVyCiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUgKkhUTUxFbGVtZW50OjpmcmFtZVdpbmRvd1By
b3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpIVE1MRWxlbWVudDo6ZnJh
bWVXaW5kb3dQcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5h
bE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgSFRNTEVsZW1lbnQgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudCAqPihzbG90LnNsb3RCYXNlKCkpOwogCkBAIC0xMzA3LDcgKzEzMDcsNyBAQCBKU1Zh
bHVlICpIVE1MRWxlbWVudDo6ZnJhbWVXaW5kb3dQcm9wZXJ0CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUgKkhUTUxFbGVtZW50OjpydW50aW1lT2JqZWN0R2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpIVE1MRWxlbWVudDo6cnVudGltZU9iamVjdEdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSFRN
TEVsZW1lbnQgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihzbG90LnNsb3RC
YXNlKCkpOwogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50SW1wbCAqPih0aGlzT2JqLT5pbXBsKCkpOwpAQCAtMTMxNSw3ICsxMzE1LDcgQEAgSlNW
YWx1ZSAqSFRNTEVsZW1lbnQ6OnJ1bnRpbWVPYmplY3RHZXR0ZQogICAgIHJldHVybiBnZXRSdW50
aW1lT2JqZWN0KGV4ZWMsIGVsZW1lbnQpOwogfQogCi1KU1ZhbHVlICpIVE1MRWxlbWVudDo6cnVu
dGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpIVE1M
RWxlbWVudDo6cnVudGltZU9iamVjdFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBIVE1MRWxlbWVudCAqdGhpc09iaiA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgSFRNTEVsZW1l
bnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHRoaXNPYmot
PmltcGwoKSk7CkBAIC0zMzIwLDE5ICszMzIwLDE5IEBAIEhUTUxDb2xsZWN0aW9uOjp+SFRNTENv
bGxlY3Rpb24oKQogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5n
ZXQoKSk7CiB9CiAKLUpTVmFsdWUgKkhUTUxDb2xsZWN0aW9uOjpsZW5ndGhHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKK0pTVmFsdWUgKkhUTUxDb2xsZWN0aW9uOjpsZW5ndGhHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEhUTUxDb2xsZWN0
aW9uICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24gKj4oc2xvdC5zbG90QmFz
ZSgpKTsKICAgICByZXR1cm4ganNOdW1iZXIodGhpc09iai0+bV9pbXBsLT5sZW5ndGgoKSk7CiB9
CiAKLUpTVmFsdWUgKkhUTUxDb2xsZWN0aW9uOjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZSAqSFRNTENvbGxlY3Rpb246OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
SlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBIVE1MQ29sbGVjdGlvbiAqdGhpc09i
aiA9IHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAg
cmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGhpc09iai0+bV9pbXBsLT5pdGVtKHNsb3QuaW5kZXgo
KSkpOwogfQogCi1KU1ZhbHVlICpIVE1MQ29sbGVjdGlvbjo6bmFtZUdldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQorSlNWYWx1ZSAqSFRNTENvbGxlY3Rpb246Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEhUTUxDb2xsZWN0aW9uICp0
aGlzT2JqID0gc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24gKj4oc2xvdC5zbG90QmFzZSgpKTsK
ICAgICByZXR1cm4gdGhpc09iai0+Z2V0TmFtZWRJdGVtcyhleGVjLCBwcm9wZXJ0eU5hbWUpOwpA
QCAtMzQ1Miw3ICszNDUyLDcgQEAgSFRNTFNlbGVjdENvbGxlY3Rpb246OkhUTUxTZWxlY3RDb2xs
ZWN0aQogewogfQogCi1KU1ZhbHVlICpIVE1MU2VsZWN0Q29sbGVjdGlvbjo6c2VsZWN0ZWRJbmRl
eEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqSFRNTFNlbGVjdENvbGxlY3Rpb246
OnNlbGVjdGVkSW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIEhUTUxTZWxlY3RDb2xsZWN0aW9uICp0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8SFRNTFNlbGVjdENvbGxlY3Rpb24gKj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICByZXR1cm4g
anNOdW1iZXIodGhpc09iai0+bV9lbGVtZW50LT5zZWxlY3RlZEluZGV4KCkpOwpJbmRleDogV2Vi
Q29yZS9raHRtbC9lY21hL2tqc19odG1sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYz
CmRpZmYgLXAgLXUgLXIxLjYzIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oCi0tLSBXZWJD
b3JlL2todG1sL2VjbWEva2pzX2h0bWwuaAkxMSBEZWMgMjAwNSAwMjowNjowNiAtMDAwMAkxLjYz
CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaAkxMyBEZWMgMjAwNSAyMDoyOTowNyAt
MDAwMApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgV3JpdGUs
IFdyaXRlTG4sIEdldEVsZW1lbnRzQnlOYW1lLCBDYXB0dXJlRXZlbnRzLCBSZWxlYXNlRXZlbnRz
LAogICAgICAgICAgICBCZ0NvbG9yLCBGZ0NvbG9yLCBBbGlua0NvbG9yLCBMaW5rQ29sb3IsIFZs
aW5rQ29sb3IsIExhc3RNb2RpZmllZCwgSGVpZ2h0LCBXaWR0aCwgRGlyLCBEZXNpZ25Nb2RlIH07
CiAgIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTVmFsdWUgKm5hbWVkSXRlbUdldHRlcihFeGVjU3Rh
dGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyBKU1ZhbHVlICpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgfTsKIAogICBjbGFzcyBIVE1M
RWxlbWVudCA6IHB1YmxpYyBET01FbGVtZW50IHsKQEAgLTI4NSwxMyArMjg1LDEzIEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICAgICBFbGVtZW50Q2xhc3NOYW1lLCBFbGVtZW50SW5uZXJUZXh0
LCBFbGVtZW50RG9jdW1lbnQsIEVsZW1lbnRDaGlsZHJlbiwgRWxlbWVudENvbnRlbnRFZGl0YWJs
ZSwKICAgICAgICAgICAgRWxlbWVudElzQ29udGVudEVkaXRhYmxlLCBFbGVtZW50T3V0ZXJIVE1M
LCBFbGVtZW50T3V0ZXJUZXh0fTsKICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSAqZm9y
bUluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgKmZvcm1OYW1lR2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgKnNlbGVjdEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Ci0gICAgc3Rh
dGljIEpTVmFsdWUgKmZyYW1lc2V0TmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIHN0YXRpYyBKU1ZhbHVl
ICpmcmFtZVdpbmRvd1Byb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgKnJ1
bnRpbWVPYmplY3RHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqcnVudGltZU9iamVj
dFByb3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKmZvcm1JbmRleEdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHN0YXRpYyBKU1ZhbHVlICpmb3JtTmFtZUdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpOworICAgIHN0YXRpYyBKU1ZhbHVlICpzZWxlY3RJbmRleEdldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpOworICAgIHN0YXRpYyBKU1ZhbHVlICpmcmFtZXNldE5hbWVHZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqZnJhbWVXaW5kb3dQcm9wZXJ0
eUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHN0YXRpYyBKU1ZhbHVlICpydW50aW1lT2Jq
ZWN0R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKnJ1bnRpbWVP
YmplY3RQcm9wZXJ0eUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogICB9OwogCiAgIERPTTo6SFRN
TEVsZW1lbnRJbXBsICp0b0hUTUxFbGVtZW50KEpTVmFsdWUgKik7IC8vIHJldHVybnMgMCBpZiBw
YXNzZWQtaW4gdmFsdWUgaXMgbm90IGEgSFRNTEVsZW1lbnQgb2JqZWN0CkBAIC0zMTQsOSArMzE0
LDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHByb3RlY3RlZDoKICAgICBSZWZQdHI8RE9NOjpIVE1M
Q29sbGVjdGlvbkltcGw+IG1faW1wbDsKICAgcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNWYWx1ZSAq
bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7
Ci0gICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICBzdGF0aWMgSlNWYWx1
ZSAqbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKmlu
ZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KTsKICAgfTsKIAogICBjbGFzcyBIVE1MU2VsZWN0Q29sbGVjdGlv
biA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbiB7CkBAIC0zMjUsNyArMzI1LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
KnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVl
ICpzZWxlY3RlZEluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKnNlbGVjdGVk
SW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKIAogICAgIFJlZlB0cjxET006OkhUTUxTZWxl
Y3RFbGVtZW50SW1wbD4gbV9lbGVtZW50OwogICB9OwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21h
L2tqc19uYXZpZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VjbWEva2pzX25hdmlnYXRvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzkK
ZGlmZiAtcCAtdSAtcjEuMzkgV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3BwCi0t
LSBXZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRvci5jcHAJMTEgRGVjIDIwMDUgMDI6MDY6
MDYgLTAwMDAJMS4zOQorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3BwCTEz
IERlYyAyMDA1IDIwOjI5OjA3IC0wMDAwCkBAIC03OSw4ICs3OSw4IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAgICAgIGVudW0geyBM
ZW5ndGgsIFJlZnJlc2ggfTsKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgSlNWYWx1ZSAq
aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIoRXhlY1N0YXRlICos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGlj
IEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlICpu
YW1lR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90Jik7CiAgICAgfTsKIAogICAgIGNsYXNzIE1pbWVUeXBlcyA6IHB1Ymxp
YyBQbHVnaW5CYXNlIHsKQEAgLTkyLDggKzkyLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICAgICAgZW51bSB7IExlbmd0aCB9Owog
ICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3Rh
dGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBz
dGF0aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSAqaW5kZXhHZXR0
ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIoRXhlY1N0YXRl
ICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICB9OwogCiAgICAgY2xhc3MgUGx1Z2luIDogcHVibGljIFBsdWdpbkJhc2UgewpAQCAtMTA1
LDggKzEwNSw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIGluZm87CiAgICAgICAgIGVudW0geyBOYW1lLCBGaWxlbmFtZSwgRGVzY3JpcHRpb24sIExl
bmd0aCB9OwogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRl
cihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwot
ICAgICAgICBzdGF0aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0aWMgSlNWYWx1ZSAq
aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIo
RXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKIAogICAgICAgICBQbHVnaW5JbmZvICptX2luZm87CiAgICAgfTsKQEAgLTMzNywx
MiArMzM3LDEyIEBAIEpTVmFsdWUgKlBsdWdpbnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1MKICAg
cmV0dXJuIGpzTnVtYmVyKHBsdWdpbnMtPmNvdW50KCkpOwogfQogCi1KU1ZhbHVlICpQbHVnaW5z
OjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqUGx1Z2luczo6aW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IHJldHVybiBuZXcgUGx1Z2luKGV4ZWMsIHBsdWdpbnMtPmF0KHNsb3QuaW5kZXgoKSkpOwogfQog
Ci1KU1ZhbHVlICpQbHVnaW5zOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVl
ICpQbHVnaW5zOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFs
T2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKICAgZm9yIChQbHVnaW5JbmZvICpwbCA9IHBsdWdpbnMtPmZpcnN0KCk7IHBs
OyBwbCA9IHBsdWdpbnMtPm5leHQoKSkgewogICAgIGlmIChwbC0+bmFtZSA9PSBwcm9wZXJ0eU5h
bWUucXN0cmluZygpKSB7CkBAIC0zOTYsMTIgKzM5NiwxMiBAQCBKU1ZhbHVlICpNaW1lVHlwZXM6
OmdldFZhbHVlUHJvcGVydHkoRXhlCiAgIHJldHVybiBqc051bWJlcihwbHVnaW5zLT5jb3VudCgp
KTsKIH0KIAotSlNWYWx1ZSAqTWltZVR5cGVzOjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
KQorSlNWYWx1ZSAqTWltZVR5cGVzOjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2Jq
ZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIG5ldyBNaW1lVHlwZShleGVjLCBt
aW1lcy0+YXQoc2xvdC5pbmRleCgpKSk7CiB9CiAKLUpTVmFsdWUgKk1pbWVUeXBlczo6bmFtZUdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNWYWx1ZSAqTWltZVR5cGVzOjpuYW1lR2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgZm9yIChNaW1l
Q2xhc3NJbmZvICptID0gbWltZXMtPmZpcnN0KCk7IG07IG0gPSBtaW1lcy0+bmV4dCgpKSB7CiAg
ICAgICBpZiAobS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUucXN0cmluZygpKQpAQCAtNDY2LDEzICs0
NjYsMTMgQEAgSlNWYWx1ZSAqUGx1Z2luOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdAogICAgIH0K
IH0KIAotSlNWYWx1ZSAqUGx1Z2luOjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorSlNW
YWx1ZSAqUGx1Z2luOjppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmln
aW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgUGx1Z2luICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2lu
ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgcmV0dXJuIG5ldyBNaW1lVHlwZShleGVjLCB0aGlz
T2JqLT5tX2luZm8tPm1pbWVzLmF0KHNsb3QuaW5kZXgoKSkpOwogfQogCi1KU1ZhbHVlICpQbHVn
aW46Om5hbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKlBsdWdpbjo6bmFtZUdl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
UGx1Z2luICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luICo+KHNsb3Quc2xvdEJhc2UoKSk7
CiAgICAgZm9yIChNaW1lQ2xhc3NJbmZvICptID0gdGhpc09iai0+bV9pbmZvLT5taW1lcy5maXJz
dCgpOyBtOyBtID0gdGhpc09iai0+bV9pbmZvLT5taW1lcy5uZXh0KCkpIHsKSW5kZXg6IFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE5NwpkaWZmIC1wIC11IC1yMS4xOTcgV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cu
Y3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJMTEgRGVjIDIwMDUgMDk6
MjY6MTAgLTAwMDAJMS4xOTcKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkx
MyBEZWMgMjAwNSAyMDoyOTowNyAtMDAwMApAQCAtMTIzLDggKzEyMyw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBl
bnVtIHsgTGVuZ3RoLCBMb2NhdGlvbiB9OwogICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVl
ICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlICpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFs
dWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIo
RXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKIAogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAg
LTkxMywxOSArOTEzLDE5IEBAIEpTVmFsdWUgKldpbmRvdzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3QKICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlICpXaW5kb3c6OmNoaWxk
RnJhbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKldpbmRvdzo6Y2hpbGRGcmFt
ZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
IFdpbmRvdyAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFdpbmRvdyAqPihzbG90LnNsb3RCYXNlKCkp
OwogICByZXR1cm4gcmV0cmlldmUodGhpc09iai0+bV9wYXJ0LT5jaGlsZEZyYW1lTmFtZWQocHJv
cGVydHlOYW1lLnFzdHJpbmcoKSkpOwogfQogCi1KU1ZhbHVlICpXaW5kb3c6Om5hbWVkRnJhbWVH
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK0pTVmFsdWUgKldpbmRvdzo6bmFtZWRGcmFtZUdldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIFdpbmRv
dyAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFdpbmRvdyAqPihzbG90LnNsb3RCYXNlKCkpOwogICBy
ZXR1cm4gcmV0cmlldmUodGhpc09iai0+bV9wYXJ0LT5maW5kRnJhbWUocHJvcGVydHlOYW1lLnFz
dHJpbmcoKSkpOwogfQogCi1KU1ZhbHVlICpXaW5kb3c6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitKU1ZhbHVlICpXaW5kb3c6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgV2luZG93ICp0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8V2luZG93ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIApAQCAtOTM2LDcgKzkzNiw3IEBAIEpT
VmFsdWUgKldpbmRvdzo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICoKICAgcmV0dXJuIHJldHJpZXZl
KHN0YXRpY19jYXN0PEtIVE1MUGFydCo+KGZyYW1lKSk7CiB9CiAKLUpTVmFsdWUgKldpbmRvdzo6
bmFtZWRJdGVtR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpXaW5kb3c6Om5hbWVk
SXRlbUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgIFdpbmRvdyAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFdpbmRvdyAqPihzbG90LnNsb3RCYXNl
KCkpOwogICBEb2N1bWVudEltcGwgKmRvYyA9IHRoaXNPYmotPm1fcGFydC0+eG1sRG9jSW1wbCgp
OwpAQCAtMjAyNyw3ICsyMDI3LDcgQEAgSlNWYWx1ZSAqRnJhbWVBcnJheTo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeAogICB9CiB9CiAKLUpTVmFsdWUgKkZyYW1lQXJyYXk6OmluZGV4R2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpGcmFtZUFycmF5OjppbmRleEdldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIEZyYW1lQXJyYXkgKnRoaXNP
YmogPSBzdGF0aWNfY2FzdDxGcmFtZUFycmF5ICo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIEtQYXJ0
czo6UmVhZE9ubHlQYXJ0ICpmcmFtZSA9IHRoaXNPYmotPnBhcnQtPmZyYW1lcygpLmF0KHNsb3Qu
aW5kZXgoKSk7CkBAIC0yMDQwLDcgKzIwNDAsNyBAQCBKU1ZhbHVlICpGcmFtZUFycmF5OjppbmRl
eEdldHRlcihFeGVjU3RhCiAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlICpG
cmFtZUFycmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitKU1ZhbHVlICpGcmFtZUFy
cmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgRnJhbWVBcnJheSAqdGhpc09iaiA9IHN0YXRpY19jYXN0PEZyYW1lQXJyYXkgKj4o
c2xvdC5zbG90QmFzZSgpKTsKICAgS1BhcnRzOjpSZWFkT25seVBhcnQgKmZyYW1lID0gdGhpc09i
ai0+cGFydC0+ZmluZEZyYW1lKHByb3BlcnR5TmFtZS5xc3RyaW5nKCkpOwpJbmRleDogV2ViQ29y
ZS9raHRtbC9lY21hL2tqc193aW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42
MApkaWZmIC1wIC11IC1yMS42MCBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5oCi0tLSBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5oCTExIERlYyAyMDA1IDAyOjA2OjA4IC0wMDAw
CTEuNjAKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmgJMTMgRGVjIDIwMDUgMjA6
Mjk6MDcgLTAwMDAKQEAgLTE5NSwxMCArMTk1LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEpT
VmFsdWUgKmdldExpc3RlbmVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgRE9NOjpBdG9taWNTdHJp
bmcgJmV2ZW50VHlwZSkgY29uc3Q7CiAgICAgdm9pZCBzZXRMaXN0ZW5lcihFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IERPTTo6QXRvbWljU3RyaW5nICZldmVudFR5cGUsIEpTVmFsdWUgKmZ1bmMpOwog
ICBwcml2YXRlOgotICAgIHN0YXRpYyBKU1ZhbHVlICpjaGlsZEZyYW1lR2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Ci0g
ICAgc3RhdGljIEpTVmFsdWUgKm5hbWVkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgSlNW
YWx1ZSAqaW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSAqbmFtZWRJdGVtR2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCk7CisgICAgc3RhdGljIEpTVmFsdWUgKmNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSAqbmFtZWRGcmFtZUdldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpOworICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
OworICAgIHN0YXRpYyBKU1ZhbHVlICpuYW1lZEl0ZW1HZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBK
U09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsK
IAogICAgIHZvaWQgdXBkYXRlTGF5b3V0KCkgY29uc3Q7CiAK
</data>
<flag name="review"
          id="998"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>