<?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>6644</bug_id>
          
          <creation_ts>2006-01-17 23:40:52 -0800</creation_ts>
          <short_desc>TinyMCE: Undo operation crashes Safari</short_desc>
          <delta_ts>2006-01-25 18:39:24 -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>HTML Editing</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>
          <dependson>6753</dependson>
    
    <dependson>6782</dependson>
          <blocked>6627</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Garcia">justin.garcia</reporter>
          <assigned_to name="Justin Garcia">justin.garcia</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>28799</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-17 23:40:52 -0800</bug_when>
    <thetext>Goto: http://tinymce.moxiecode.com/example.php?example=true
In the first editable area, select some text and click the Bold button.
Click the Undo button.

Safari crashes.
As an aside, our own Undo works fine (Command-Z).

Here&apos;s the trace:
#0	0x01e69830 in WebCore::maxDeepOffset at htmlediting.cpp:102
#1	0x01f70350 in Frame::selectContentsOfNode at Frame.cpp:2433
#2	0x01f7050c in Frame::selectAll at Frame.cpp:2427
#3	0x01e75b78 in WebCore::(anonymous namespace)::execSelectAll at jsediting.cpp:326
#4	0x01e77158 in WebCore::JSEditor::execCommand at jsediting.cpp:77
#5	0x01f9e010 in WebCore::DocumentImpl::execCommand at DocumentImpl.cpp:2611
#6	0x01d135d4 in KJS::DOMDocumentProtoFunc::callAsFunction at kjs_dom.cpp:1062</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28801</commentid>
    <comment_count>1</comment_count>
      <attachid>5757</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-18 00:07:47 -0800</bug_when>
    <thetext>Created attachment 5757
patch

During the undo operation, TinyMCE does a selectAll (seems weird, but OK). 
Frame::selectAll tries to get the rootEditableElement for the node associated
with the start of the selection.  This patch fixes a bug in
rootEditableElement:

The isEditableBlock check is incorrect (the node is already checked to ensure
isContentEditable, and the node doesn&apos;t need to be a block, it can be a span, a
text node, or whatever).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28802</commentid>
    <comment_count>2</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-18 00:09:54 -0800</bug_when>
    <thetext>The patch is kind of unclear without the surrounding code, here&apos;s the whole function:

ElementImpl *NodeImpl::rootEditableElement() const
{
    if (!isContentEditable())
        return 0;

    NodeImpl *n = const_cast&lt;NodeImpl *&gt;(this);
    if (n-&gt;hasTagName(bodyTag))
        return static_cast&lt;ElementImpl *&gt;(n);

    NodeImpl *result = n;
    while (1) {
        n = n-&gt;parentNode();
        if (!n || !n-&gt;isContentEditable())
            break;
        if (n-&gt;hasTagName(bodyTag)) {
            result = n;
            break;
        }
        if (n-&gt;isBlockFlow())
            result = n;
    }
    return static_cast&lt;ElementImpl *&gt;(result);
}
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28812</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-18 00:33:02 -0800</bug_when>
    <thetext>Please disregard the r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28853</commentid>
    <comment_count>4</comment_count>
      <attachid>5757</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-18 15:30:53 -0800</bug_when>
    <thetext>Comment on attachment 5757
patch

This patch is wrong, unsetting the review flag</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28940</commentid>
    <comment_count>5</comment_count>
      <attachid>5790</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-19 20:14:16 -0800</bug_when>
    <thetext>Created attachment 5790
patch

Makes a Frame&apos;s SelectionController a ref&apos;able object.	
SelectionController listens for node removal events and nulls out its Selection
if necessary.
Todo: 
More sophisticated adjustment of the selection when its endpoints are removed
Also listen for node insertions
We shouldn&apos;t have to go through Frame::setSelection to notify delegates of
selection changes.  This is filed as
&lt;http://bugzilla.opendarwin.org/show_bug.cgi?id=6498&gt; SelectionController&apos;s
setters should notify delegates of selection change</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28942</commentid>
    <comment_count>6</comment_count>
      <attachid>5791</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-19 20:49:08 -0800</bug_when>
    <thetext>Created attachment 5791
patch

I made a mistake in Frame::khtmlMouseReleaseEvent and removed some code that
cleared the selection if the mouse hadn&apos;t moved since the last mouse press. 
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28943</commentid>
    <comment_count>7</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-19 21:04:52 -0800</bug_when>
    <thetext>I don&apos;t know why I turned m_mark back into a SelectionController, I&apos;m fixing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28945</commentid>
    <comment_count>8</comment_count>
      <attachid>5791</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-19 22:06:59 -0800</bug_when>
    <thetext>Comment on attachment 5791
patch

You shouldn&apos;t need to call the EventListener constructor explicitly in the
SelectionController constructor initialization list. Should just work by
default.

The SelectionController::handleEvent method doesn&apos;t really need to check the
event type, since you only register for the one event.

SelectionController::handleEvent doesn&apos;t seem to arrange for a repaint of the
selection. Doesn&apos;t it need to do that?

What causes the selection controller to be removed as an event listener when
the Frame is destroyed?

Where is the code to set up the listener for the mark and drag caret?

I&apos;d prefer to see a function in the selection controller itself to
register/deregister the event handler; this doesn&apos;t seem to be a good division
of responsibilities -- the fact that the selection controller itself is an
event listener should be its own private business.

In fact (late to make this suggestion) the listener could just be an object
allocated inside the selection controller with a back pointer to the selection
controller. That would eliminate the need to change all the uses of
SelectionController to use pointers.

None of these comments is really &quot;mandatory&quot;, but please consider them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28947</commentid>
    <comment_count>9</comment_count>
      <attachid>5791</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-19 22:12:15 -0800</bug_when>
    <thetext>Comment on attachment 5791
patch

Marking review- based on my comments above. If you consider all my comments and
decide nothing needs to change, feel free to set this patch to review? again
without changing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29049</commentid>
    <comment_count>10</comment_count>
      <attachid>5804</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-20 18:00:40 -0800</bug_when>
    <thetext>Created attachment 5804
patch

Instead of making Frame&apos;s SC a ref&apos;able object, I did what darin suggested and gave SC an object that listens for mutations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29626</commentid>
    <comment_count>11</comment_count>
      <attachid>5891</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-23 15:24:50 -0800</bug_when>
    <thetext>Created attachment 5891
patch

A few tweaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29646</commentid>
    <comment_count>12</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-23 18:45:33 -0800</bug_when>
    <thetext>+    m_mutationListener = new MutationListener(this);

Why not use a C++-style initializer?

Also, there&apos;s a specific optimization for most types of mutation events that prevents dispatching them at all when there are no listeners, as a performance optimization. For instance, see this chunk in ContainerNodeImpl.cpp:

    // dispatch pre-removal mutation events
    if (getDocument()-&gt;hasListenerType(DocumentImpl::DOMNODEREMOVED_LISTENER)) {
        child-&gt;dispatchEvent(new MutationEventImpl(DOMNodeRemovedEvent, true, false,
            this, DOMString(), DOMString(), DOMString(), 0), ec, true);


 It looks like this patch will cause there to always be a listener for DOMNodeRemovedEvent and so will defeat the attempted optimization. You should verify that this change does not cause performance regressions for page load time (PLT, iBench) or basic DOM operations when no selection is set. If it does, one possibility is to register the listener only when the selection is either a range or caret, rather than None.

Here are some DOM benchmarks for comparisons:

http://www.hixie.ch/tests/adhoc/perf/dom/artificial/core/001.html
http://idanso.dyndns.org/maps/jsbench/

Oh wait, I wrote all that and then I noticed your code already avoids adding a mutation listener when there is no selection. So nevermind, but you may find it useful to do some performance testing anyway just to make sure this is working properly.

Also I see you did not take darin&apos;s advice on leaving out the event type check or arranging for a repaint. Is arranging for the repaint definitely unnecessary in all cases? What is the code that does it?

Despite all this, r=me.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29681</commentid>
    <comment_count>13</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-24 00:54:20 -0800</bug_when>
    <thetext>I changed the initializers for m_mutationLister as per maciej&apos;s suggestion, and addressed the rest of his comments over IRC.  I&apos;m going to land this + layout tests once I track down 6753.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5757</attachid>
            <date>2006-01-18 00:07:47 -0800</date>
            <delta_ts>2006-01-19 20:49:08 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6644.txt</filename>
            <type>text/plain</type>
            <size>460</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9Ob2RlSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwveG1sL05v
ZGVJbXBsLmNwcAkocmV2aXNpb24gMTIxNDgpCisrKyBraHRtbC94bWwvTm9kZUltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTY4LDcgKzE1NjgsNyBAQAogICAgIGlmIChuLT5oYXNUYWdOYW1l
KGJvZHlUYWcpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7
CiAKLSAgICBOb2RlSW1wbCAqcmVzdWx0ID0gbi0+aXNFZGl0YWJsZUJsb2NrKCkgPyBuIDogMDsK
KyAgICBOb2RlSW1wbCAqcmVzdWx0ID0gbjsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBuID0g
bi0+cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAoIW4gfHwgIW4tPmlzQ29udGVudEVkaXRhYmxl
KCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5790</attachid>
            <date>2006-01-19 20:14:16 -0800</date>
            <delta_ts>2006-01-19 20:49:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6644.txt</filename>
            <type>text/plain</type>
            <size>68031</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9Eb2N1bWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3ht
bC9Eb2N1bWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjI1MSkKKysrIGtodG1sL3htbC9Eb2N1bWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY0LDEzICsxMDY0LDEzIEBACiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBSZW5kZXJDYW52YXMgKmNhbnZhcyA9IHN0YXRpY19jYXN0PFJl
bmRlckNhbnZhcyo+KG1fcmVuZGVyKTsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHMgPSBmcmFt
ZSgpLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXMuaXNSYW5nZSgpKSB7CisgICAgU2VsZWN0aW9u
Q29udHJvbGxlciAqcyA9IGZyYW1lKCktPnNlbGVjdGlvbigpOworICAgIGlmICghcy0+aXNSYW5n
ZSgpKSB7CiAgICAgICAgIGNhbnZhcy0+Y2xlYXJTZWxlY3Rpb24oKTsKICAgICB9CiAgICAgZWxz
ZSB7Ci0gICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9zID0gVmlzaWJsZVBvc2l0aW9uKHMuc3RhcnQo
KSwgcy5hZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICBQb3NpdGlvbiBlbmRQ
b3MgPSBWaXNpYmxlUG9zaXRpb24ocy5lbmQoKSwgcy5hZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVu
dCgpOworICAgICAgICBQb3NpdGlvbiBzdGFydFBvcyA9IFZpc2libGVQb3NpdGlvbihzLT5zdGFy
dCgpLCBzLT5hZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICBQb3NpdGlvbiBl
bmRQb3MgPSBWaXNpYmxlUG9zaXRpb24ocy0+ZW5kKCksIHMtPmFmZmluaXR5KCkpLmRlZXBFcXVp
dmFsZW50KCk7CiAgICAgICAgIGlmIChzdGFydFBvcy5pc05vdE51bGwoKSAmJiBlbmRQb3MuaXNO
b3ROdWxsKCkpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCAqc3RhcnRSZW5kZXJlciA9IHN0
YXJ0UG9zLm5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCAqZW5k
UmVuZGVyZXIgPSBlbmRQb3Mubm9kZSgpLT5yZW5kZXJlcigpOwpAQCAtMTA4MSw3ICsxMDgxLDcg
QEAKICNpZiBfX0FQUExFX18KICAgICAvLyBzZW5kIHRoZSBBWFNlbGVjdGVkVGV4dENoYW5nZWQg
bm90aWZpY2F0aW9uIG9ubHkgaWYgdGhlIG5ldyBzZWxlY3Rpb24gaXMgbm9uLW51bGwsCiAgICAg
Ly8gYmVjYXVzZSBudWxsIHNlbGVjdGlvbnMgYXJlIG9ubHkgdHJhbnNpdG9yeSAoZS5nLiB3aGVu
IHN0YXJ0aW5nIGFuIEVkaXRDb21tYW5kLCBjdXJyZW50bHkpCi0gICAgaWYgKEtXUUFjY09iamVj
dENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIHMuc3RhcnQoKS5pc05vdE51bGwoKSAm
JiBzLmVuZCgpLmlzTm90TnVsbCgpKSB7CisgICAgaWYgKEtXUUFjY09iamVjdENhY2hlOjphY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpICYmIHMtPnN0YXJ0KCkuaXNOb3ROdWxsKCkgJiYgcy0+ZW5kKCku
aXNOb3ROdWxsKCkpIHsKICAgICAgICAgZ2V0QWNjT2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNh
dGlvblRvVG9wV2ViQXJlYShyZW5kZXJlcigpLCAiQVhTZWxlY3RlZFRleHRDaGFuZ2VkIik7CiAg
ICAgfQogI2VuZGlmCkBAIC0yMTE4LDEwICsyMTE4LDEwIEBACiAKICAgICAvLyBDbGVhciB0aGUg
c2VsZWN0aW9uIHdoZW4gY2hhbmdpbmcgdGhlIGZvY3VzIG5vZGUgdG8gbnVsbCBvciB0byBhIG5v
ZGUgdGhhdCBpcyBub3QgCiAgICAgLy8gY29udGFpbmVkIGJ5IHRoZSBjdXJyZW50IHNlbGVjdGlv
bi4KLSAgICBOb2RlSW1wbCAqc3RhcnRDb250YWluZXIgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS5z
dGFydCgpLm5vZGUoKTsKKyAgICBOb2RlSW1wbCAqc3RhcnRDb250YWluZXIgPSBmcmFtZSgpLT5z
ZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCk7CiAgICAgaWYgKCFuZXdGb2N1c05vZGUgfHwgKHN0
YXJ0Q29udGFpbmVyICYmIHN0YXJ0Q29udGFpbmVyICE9IG5ld0ZvY3VzTm9kZSAmJiAhc3RhcnRD
b250YWluZXItPmlzQW5jZXN0b3IobmV3Rm9jdXNOb2RlKSkpCiAgICAgICAgIC8vIEZJWE1FOiA2
NDk4IFNob3VsZCBqdXN0IGJlIGFibGUgdG8gY2FsbCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5jbGVh
cigpCi0gICAgICAgIGZyYW1lKCktPnNldFNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKCkp
OworICAgICAgICBmcmFtZSgpLT5zZXRTZWxlY3Rpb24obmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIo
KSk7CiB9CiAKIHZvaWQgRG9jdW1lbnRJbXBsOjpzZXRDU1NUYXJnZXQoTm9kZUltcGwqIG4pCklu
ZGV4OiBraHRtbC9lZGl0aW5nL2pzZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRp
dGluZy9qc2VkaXRpbmcuY3BwCShyZXZpc2lvbiAxMjI1MSkKKysrIGtodG1sL2VkaXRpbmcvanNl
ZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU1LDcgKzM1NSw3IEBACiBib29sIGV4ZWNV
bnNlbGVjdChGcmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5n
ICZ2YWx1ZSkKIHsKICAgICAvLyBGSVhNRTogNjQ5OCBTaG91bGQganVzdCBiZSBhYmxlIHRvIGNh
bGwgbV9mcmFtZS0+c2VsZWN0aW9uKCkuY2xlYXIoKQotICAgIGZyYW1lLT5zZXRTZWxlY3Rpb24o
a2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIoKSk7CisgICAgZnJhbWUtPnNldFNlbGVjdGlvbihu
ZXcga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTM3Niw3ICszNzYsNyBAQAogCiBib29sIGVuYWJsZWRBbnlTZWxlY3Rpb24oRnJhbWUgKmZy
YW1lKQogewotICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2UoKTsK
KyAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NhcmV0T3JSYW5nZSgpOwogfQogCiBi
b29sIGVuYWJsZWRQYXN0ZShGcmFtZSAqZnJhbWUpCkBAIC0zOTEsNyArMzkxLDcgQEAKIAogYm9v
bCBlbmFibGVkUmFuZ2VTZWxlY3Rpb24oRnJhbWUgKmZyYW1lKQogewotICAgIHJldHVybiBmcmFt
ZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkt
PmlzUmFuZ2UoKTsKIH0KIAogYm9vbCBlbmFibGVkUmVkbyhGcmFtZSAqZnJhbWUpCkluZGV4OiBr
aHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTIyNTEpCisrKyBraHRtbC9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJTZWxlY3Rpb24uaCIKICNpbmNs
dWRlICJkb20yX3JhbmdlaW1wbC5oIgorI2luY2x1ZGUgImRvbTJfZXZlbnRzLmgiCiAKIGNsYXNz
IEZyYW1lOwogY2xhc3MgUVBhaW50ZXI7CkBAIC0zOCw4ICszOSw3IEBACiBjbGFzcyBSZW5kZXJP
YmplY3Q7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKLWNsYXNzIFNlbGVjdGlvbkNvbnRyb2xs
ZXIKLXsKK2NsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7
CiBwdWJsaWM6CiAgICAgZW51bSBFQWx0ZXIgeyBNT1ZFLCBFWFRFTkQgfTsKICAgICBlbnVtIEVE
aXJlY3Rpb24geyBGT1JXQVJELCBCQUNLV0FSRCwgUklHSFQsIExFRlQgfTsKQEAgLTEwNCw2ICsx
MDQsOSBAQAogICAgIGZyaWVuZCBjbGFzcyA6OkZyYW1lOwogICAgIAogICAgIEZyYW1lICpmcmFt
ZSgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudExpc3Rl
bmVyRXZlbnQgZXZ0LCBib29sIGlzV2luZG93RXZlbnQpOworICAgIHZpcnR1YWwgRE9NU3RyaW5n
IGV2ZW50TGlzdGVuZXJUeXBlKCk7CiAKICAgICAvLyBTYWZhcmkgU2VsZWN0aW9uIE9iamVjdCBB
UEkKICAgICBOb2RlSW1wbCAqYmFzZU5vZGUoKSBjb25zdCB7IHJldHVybiBtX3NlbC5iYXNlKCku
bm9kZSgpOyB9CkluZGV4OiBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDEyMjUxKQorKysga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksOSArMzksMTEgQEAKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9u
LmgiCiAjaW5jbHVkZSAidmlzaWJsZV90ZXh0LmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5o
IgorI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9y
YW5nZWltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAi
eG1sL2RvbV90ZXh0aW1wbC5oIgorI2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHFldmVudC5oPgogI2luY2x1ZGUg
PHFwYWludGVyLmg+CkBAIC01MCw2ICs1Miw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
dXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVj
dGlvbkNvbnRyb2xsZXIoKQogICAgIDogbV9uZWVkc0xheW91dCh0cnVlKQogICAgICwgbV9tb2Rp
ZnlCaWFzU2V0KGZhbHNlKQpAQCAtOTksNyArMTAzLDggQEAKIH0KIAogU2VsZWN0aW9uQ29udHJv
bGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZvKQot
ICAgIDogbV9zZWwoby5tX3NlbCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoKQorICAgICwgbV9zZWwo
by5tX3NlbCkKICAgICAsIG1fbmVlZHNMYXlvdXQoby5tX25lZWRzTGF5b3V0KQogICAgICwgbV9t
b2RpZnlCaWFzU2V0KG8ubV9tb2RpZnlCaWFzU2V0KQogewpAQCAtODQ1LDQgKzg1MCw0NSBAQAog
fQogI2VuZGlmCiAKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlRXZlbnQoRXZlbnRJ
bXBsICpldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgp
ID09IERPTU5vZGVSZW1vdmVkRXZlbnQpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChpc05vbmUo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAgICAgTm9kZUltcGwgKm5vZGVUb1Jl
bW92ZSA9IGV2ZW50LT50YXJnZXQoKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbXBsICpiYXNl
ID0gbV9zZWwuYmFzZSgpLm5vZGUoKTsKKyAgICAgICAgTm9kZUltcGwgKmV4dGVudCA9IG1fc2Vs
LmV4dGVudCgpLm5vZGUoKTsKKyAgICAgICAgTm9kZUltcGwgKnN0YXJ0ID0gbV9zZWwuc3RhcnQo
KS5ub2RlKCk7CisgICAgICAgIE5vZGVJbXBsICplbmQgPSBtX3NlbC5lbmQoKS5ub2RlKCk7Cisg
ICAgICAgIAorICAgICAgICBib29sIGJhc2VSZW1vdmVkID0gbm9kZVRvUmVtb3ZlID09IGJhc2Ug
fHwgYmFzZS0+aXNBbmNlc3Rvcihub2RlVG9SZW1vdmUpOworICAgICAgICBib29sIGV4dGVudFJl
bW92ZWQgPSBub2RlVG9SZW1vdmUgPT0gZXh0ZW50IHx8IGV4dGVudC0+aXNBbmNlc3Rvcihub2Rl
VG9SZW1vdmUpOworICAgICAgICBib29sIHN0YXJ0UmVtb3ZlZCA9IG5vZGVUb1JlbW92ZSA9PSBz
dGFydCB8fCBzdGFydC0+aXNBbmNlc3Rvcihub2RlVG9SZW1vdmUpOworICAgICAgICBib29sIGVu
ZFJlbW92ZWQgPSBub2RlVG9SZW1vdmUgPT0gZW5kIHx8IGVuZC0+aXNBbmNlc3Rvcihub2RlVG9S
ZW1vdmUpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBub3RpZnkg
ZGVsZWdhdGVzIG9mIGEgc2VsZWN0aW9uIGNoYW5nZQorICAgICAgICAvLyBGSVhNRTogSWRlYWxs
eSwgdGhpcyB3b3VsZCBqdXN0IGFsdGVyIHRoZSBzZWxlY3Rpb24sIGluc3RlYWQgb2YgYmxvd2lu
ZyBpdCBhd2F5LCBpbiBjYXNlcyB3aGVyZSBlbmQgcG9pbnRzIGFyZSByZW1vdmVkLgorICAgICAg
ICBpZiAoc3RhcnRSZW1vdmVkIHx8IGVuZFJlbW92ZWQpIHsKKyAgICAgICAgICAgIG1fc2VsID0g
U2VsZWN0aW9uKCk7CisgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChiYXNlUmVtb3Zl
ZCB8fCBleHRlbnRSZW1vdmVkKSB7CisgICAgICAgICAgICBpZiAobV9zZWwuaXNCYXNlRmlyc3Qo
KSkgeworICAgICAgICAgICAgICAgIG1fc2VsLnNldEJhc2UobV9zZWwuc3RhcnQoKSk7CisgICAg
ICAgICAgICAgICAgbV9zZWwuc2V0RXh0ZW50KG1fc2VsLmVuZCgpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgbV9zZWwuc2V0QmFzZShtX3NlbC5zdGFydCgpKTsKKyAg
ICAgICAgICAgICAgICBtX3NlbC5zZXRFeHRlbnQobV9zZWwuZW5kKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQogfQorCitET01TdHJpbmcgU2VsZWN0aW9uQ29udHJvbGxlcjo6
ZXZlbnRMaXN0ZW5lclR5cGUoKQoreworICAgIHJldHVybiAiIjsKK30KKworfQpJbmRleDoga2h0
bWwvZWRpdGluZy90eXBpbmdfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRpdGlu
Zy90eXBpbmdfY29tbWFuZC5jcHAJKHJldmlzaW9uIDEyMjUxKQorKysga2h0bWwvZWRpdGluZy90
eXBpbmdfY29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAg
ICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihsYXN0RWRpdENvbW1hbmQuZ2V0KCkpLT5k
ZWxldGVLZXlQcmVzc2VkKCk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBTZWxlY3Rpb24g
c2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKICAgICAg
ICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5z
dGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSkucHJldmlvdXMoKS5pc051bGwoKSkgewogICAg
ICAgICAgICAgLy8gZG8gbm90aGluZyBmb3IgYSBkZWxldGUga2V5IGF0IHRoZSBzdGFydCBvZiBh
biBlZGl0YWJsZSBlbGVtZW50LgogICAgICAgICB9CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAg
IHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVkaXRDb21tYW5kLmdldCgpKS0+Zm9y
d2FyZERlbGV0ZUtleVByZXNzZWQoKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgICAg
IFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwog
ICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBpc0VuZE9mRG9jdW1lbnQoVmlzaWJs
ZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSkpKSB7CiAg
ICAgICAgICAgICAvLyBkbyBub3RoaW5nIGZvciBhIGRlbGV0ZSBrZXkgYXQgdGhlIHN0YXJ0IG9m
IGFuIGVkaXRhYmxlIGVsZW1lbnQuCiAgICAgICAgIH0KSW5kZXg6IGtodG1sL2VkaXRpbmcvZWRp
dF9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5j
cHAJKHJldmlzaW9uIDEyMjUxKQorKysga2h0bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAKIHsKICAgICBBU1NFUlQobV9kb2N1bWVu
dCk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIG1fc3RhcnRpbmdTZWxl
Y3Rpb24gPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICBtX3N0YXJ0aW5nU2VsZWN0aW9uID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpOwogICAgIG1fZW5kaW5nU2VsZWN0aW9uID0gbV9zdGFydGluZ1NlbGVjdGlv
bjsKIH0KIApJbmRleDoga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
aHRtbC9lY21hL2tqc193aW5kb3cuY3BwCShyZXZpc2lvbiAxMjI1MSkKKysrIGtodG1sL2VjbWEv
a2pzX3dpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMzAsMzIgKzIzMzAsMzIgQEAKIAog
SlNWYWx1ZSAqU2VsZWN0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgcyA9IG1fZnJhbWUtPnNl
bGVjdGlvbigpOworICAgIFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCk7CiAgICAgY29uc3QgV2luZG93KiB3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZl
V2luZG93KG1fZnJhbWUpOwogICAgIGlmICghd2luZG93KQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICAgICAgCiAgICAgc3dpdGNoICh0b2tlbikgewogICAgIGNhc2UgQW5jaG9y
Tm9kZToKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgcy5hbmNob3JOb2RlKCkpOwor
ICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzLT5hbmNob3JOb2RlKCkpOwogICAgIGNh
c2UgQmFzZU5vZGU6Ci0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHMuYmFzZU5vZGUo
KSk7CisgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHMtPmJhc2VOb2RlKCkpOwogICAg
IGNhc2UgQW5jaG9yT2Zmc2V0OgotICAgICAgICByZXR1cm4ganNOdW1iZXIocy5hbmNob3JPZmZz
ZXQoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihzLT5hbmNob3JPZmZzZXQoKSk7CiAgICAg
Y2FzZSBCYXNlT2Zmc2V0OgotICAgICAgICByZXR1cm4ganNOdW1iZXIocy5iYXNlT2Zmc2V0KCkp
OworICAgICAgICByZXR1cm4ganNOdW1iZXIocy0+YmFzZU9mZnNldCgpKTsKICAgICBjYXNlIEZv
Y3VzTm9kZToKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgcy5mb2N1c05vZGUoKSk7
CisgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHMtPmZvY3VzTm9kZSgpKTsKICAgICBj
YXNlIEV4dGVudE5vZGU6Ci0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHMuZXh0ZW50
Tm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgcy0+ZXh0ZW50Tm9kZSgp
KTsKICAgICBjYXNlIEZvY3VzT2Zmc2V0OgotICAgICAgICByZXR1cm4ganNOdW1iZXIocy5mb2N1
c09mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHMtPmZvY3VzT2Zmc2V0KCkpOwog
ICAgIGNhc2UgRXh0ZW50T2Zmc2V0OgotICAgICAgICByZXR1cm4ganNOdW1iZXIocy5leHRlbnRP
ZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihzLT5leHRlbnRPZmZzZXQoKSk7CiAg
ICAgY2FzZSBJc0NvbGxhcHNlZDoKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihzLmlzQ29sbGFw
c2VkKCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKHMtPmlzQ29sbGFwc2VkKCkpOwogICAg
IGNhc2UgX1R5cGU6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhzLnR5cGUoKSk7CisgICAgICAg
IHJldHVybiBqc1N0cmluZyhzLT50eXBlKCkpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzc2Vy
dCgwKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0yMzc3LDcgKzIzNzcsNyBA
QAogCiBVU3RyaW5nIFNlbGVjdGlvbjo6dG9TdHJpbmcoRXhlY1N0YXRlICopIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFVTdHJpbmcoKG1fZnJhbWUtPnNlbGVjdGlvbigpKS50b1N0cmluZygpKTsKKyAg
ICByZXR1cm4gVVN0cmluZyhtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9TdHJpbmcoKSk7CiB9CiAK
IEpTVmFsdWUgKlNlbGVjdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywg
SlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCkBAIC0yMzg3LDM3ICsyMzg3LDM3
IEBACiAgICAgU2VsZWN0aW9uICpzZWxlY3Rpb24gPSBzdGF0aWNfY2FzdDxTZWxlY3Rpb24gKj4o
dGhpc09iaik7CiAgICAgRnJhbWUgKmZyYW1lID0gc2VsZWN0aW9uLT5mcmFtZSgpOwogICAgIGlm
IChmcmFtZSkgewotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHMgPSBmcmFtZS0+c2VsZWN0
aW9uKCk7CisgICAgICAgIFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzID0gbmV3IFNlbGVj
dGlvbkNvbnRyb2xsZXIoKmZyYW1lLT5zZWxlY3Rpb24oKSk7CiAgICAgICAgIAogICAgICAgICBz
d2l0Y2ggKGlkKSB7CiAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q29sbGFwc2U6Ci0gICAg
ICAgICAgICAgICAgcy5jb2xsYXBzZSh0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0tPnRvSW50MzIo
ZXhlYykpOworICAgICAgICAgICAgICAgIHMtPmNvbGxhcHNlKHRvTm9kZShhcmdzWzBdKSwgYXJn
c1sxXS0+dG9JbnQzMihleGVjKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIFNlbGVjdGlvbjo6Q29sbGFwc2VUb0VuZDoKLSAgICAgICAgICAgICAgICBzLmNvbGxh
cHNlVG9FbmQoKTsKKyAgICAgICAgICAgICAgICBzLT5jb2xsYXBzZVRvRW5kKCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q29sbGFwc2VUb1N0
YXJ0OgotICAgICAgICAgICAgICAgIHMuY29sbGFwc2VUb1N0YXJ0KCk7CisgICAgICAgICAgICAg
ICAgcy0+Y29sbGFwc2VUb1N0YXJ0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFNlbGVjdGlvbjo6RW1wdHk6Ci0gICAgICAgICAgICAgICAgcy5lbXB0eSgpOwor
ICAgICAgICAgICAgICAgIHMtPmVtcHR5KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIFNlbGVjdGlvbjo6U2V0QmFzZUFuZEV4dGVudDoKLSAgICAgICAgICAgICAg
ICBzLnNldEJhc2VBbmRFeHRlbnQodG9Ob2RlKGFyZ3NbMF0pLCBhcmdzWzFdLT50b0ludDMyKGV4
ZWMpLCB0b05vZGUoYXJnc1syXSksIGFyZ3NbM10tPnRvSW50MzIoZXhlYykpOworICAgICAgICAg
ICAgICAgIHMtPnNldEJhc2VBbmRFeHRlbnQodG9Ob2RlKGFyZ3NbMF0pLCBhcmdzWzFdLT50b0lu
dDMyKGV4ZWMpLCB0b05vZGUoYXJnc1syXSksIGFyZ3NbM10tPnRvSW50MzIoZXhlYykpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb246OlNldFBvc2l0
aW9uOgotICAgICAgICAgICAgICAgIHMuc2V0UG9zaXRpb24odG9Ob2RlKGFyZ3NbMF0pLCBhcmdz
WzFdLT50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBzLT5zZXRQb3NpdGlvbih0b05v
ZGUoYXJnc1swXSksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok1vZGlmeToKLSAgICAgICAgICAgICAg
ICBzLm1vZGlmeShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSwgYXJnc1sxXS0+
dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCksIGFyZ3NbMl0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0
cmluZygpKTsKKyAgICAgICAgICAgICAgICBzLT5tb2RpZnkoYXJnc1swXS0+dG9TdHJpbmcoZXhl
YykuZG9tU3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLCBhcmdz
WzJdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbjo6R2V0UmFuZ2VBdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NUmFuZ2UoZXhlYywgcy5nZXRSYW5nZUF0KGFyZ3NbMF0tPnRvSW50MzIo
ZXhlYykpLmdldCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RE9NUmFuZ2UoZXhlYywg
cy0+Z2V0UmFuZ2VBdChhcmdzWzBdLT50b0ludDMyKGV4ZWMpKS5nZXQoKSk7CiAgICAgICAgICAg
ICBjYXNlIFNlbGVjdGlvbjo6VG9TdHJpbmc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKHMudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMtPnRv
U3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmcmFtZS0+c2V0U2VsZWN0
aW9uKHMpOworICAgICAgICBmcmFtZS0+c2V0U2VsZWN0aW9uKHMuZ2V0KCkpOwogICAgIH0KIAog
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAJKHJldmlzaW9uIDEy
MjUxKQorKysgcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NjQsOCArMTI2NCw4IEBACiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2FyZXQoUGFpbnRJbmZv
JiBpLCBDYXJldFR5cGUgdHlwZSkKIHsKLSAgICBjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZz
ID0gdHlwZSA9PSBDdXJzb3JDYXJldCA/IGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigp
IDogZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZHJhZ0NhcmV0KCk7Ci0gICAgTm9kZUltcGwgKmNhcmV0
Tm9kZSA9IHMuc3RhcnQoKS5ub2RlKCk7CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciAqcyA9IHR5
cGUgPT0gQ3Vyc29yQ2FyZXQgPyBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKSA6IGRv
Y3VtZW50KCktPmZyYW1lKCktPmRyYWdDYXJldCgpOworICAgIE5vZGVJbXBsICpjYXJldE5vZGUg
PSBzLT5zdGFydCgpLm5vZGUoKTsKICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gY2FyZXRO
b2RlID8gY2FyZXROb2RlLT5yZW5kZXJlcigpIDogMDsKICAgICBpZiAocmVuZGVyZXIgJiYgKHJl
bmRlcmVyID09IHRoaXMgfHwgcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpID09IHRoaXMpICYm
IGNhcmV0Tm9kZSAmJiBjYXJldE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKICAgICAgICAg
aWYgKHR5cGUgPT0gQ3Vyc29yQ2FyZXQpIHsKSW5kZXg6IGJyaWRnZS9tYWMvTWFjRnJhbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL01hY0ZyYW1lLmgJKHJldmlzaW9uIDEyMjUxKQorKysg
YnJpZGdlL21hYy9NYWNGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAK
ICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25T
dGFydCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtNaXNzcGVsbGluZ3NJbkFkamFj
ZW50V29yZHMoY29uc3Qga2h0bWw6OlZpc2libGVQb3NpdGlvbiAmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxsaW5ncyhraHRtbDo6U2VsZWN0aW9uQ29udHJv
bGxlciAqKTsKIAogICAgIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yRWxlbWVudChET006
OkVsZW1lbnRJbXBsICopOwogICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmlu
ZyhET006Ok5vZGVJbXBsICpzdGFydE5vZGUsIGludCBzdGFydE9mZnNldCwgRE9NOjpOb2RlSW1w
bCAqZW5kTm9kZSwgaW50IGVuZE9mZnNldCk7CkBAIC0yNzYsMTAgKzI3NiwxMCBAQAogICAgIHZp
cnR1YWwgdm9pZCBpc3N1ZVBhc3RlQ29tbWFuZCgpOwogICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVBh
c3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQoKTsKICAgICB2aXJ0dWFsIHZvaWQgaXNzdWVUcmFuc3Bv
c2VDb21tYW5kKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
Y29uc3Qga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9z
ZVR5cGluZyk7CisgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oa2h0
bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIgKm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZyk7
CiAgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogICAgIHZpcnR1
YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJm9sZFNl
bGVjdGlvbiwgY29uc3Qga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJm5ld1NlbGVjdGlvbiwg
a2h0bWw6OkVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihraHRtbDo6U2VsZWN0aW9uQ29u
dHJvbGxlciAqb2xkU2VsZWN0aW9uLCBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAqbmV3U2Vs
ZWN0aW9uLCBraHRtbDo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IERPTTo6UmFu
Z2VJbXBsICopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0
IERPTTo6UmFuZ2VJbXBsICopIGNvbnN0OwogCkluZGV4OiBicmlkZ2UvbWFjL01hY0ZyYW1lLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvTWFjRnJhbWUubW0JKHJldmlzaW9uIDEyMjUxKQor
KysgYnJpZGdlL21hYy9NYWNGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQyLDIyICs0NDIs
MjIgQEAKICAgICAKICAgICAvLyBJbml0aWFsbHkgc2VhcmNoIGZyb20gdGhlIHN0YXJ0IChpZiBm
b3J3YXJkKSBvciBlbmQgKGlmIGJhY2t3YXJkKSBvZiB0aGUgc2VsZWN0aW9uLCBhbmQgc2VhcmNo
IHRvIGVkZ2Ugb2YgZG9jdW1lbnQuCiAgICAgUmVmUHRyPFJhbmdlSW1wbD4gc2VhcmNoUmFuZ2Uo
cmFuZ2VPZkNvbnRlbnRzKHhtbERvY0ltcGwoKSkpOwotICAgIGlmIChzZWxlY3Rpb24oKS5zdGFy
dCgpLm5vZGUoKSkgeworICAgIGlmIChzZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCkpIHsKICAg
ICAgICAgaWYgKGZvcndhcmQpIHsKLSAgICAgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdl
dCgpLCBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uKCkuYWZm
aW5pdHkoKSkpOworICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIFZpc2li
bGVQb3NpdGlvbihzZWxlY3Rpb24oKS0+c3RhcnQoKSwgc2VsZWN0aW9uKCktPmFmZmluaXR5KCkp
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQo
KSwgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb24oKS5hZmZpbml0
eSgpKSk7CisgICAgICAgICAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIFZpc2libGVQb3Np
dGlvbihzZWxlY3Rpb24oKS0+ZW5kKCksIHNlbGVjdGlvbigpLT5hZmZpbml0eSgpKSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgUmVmUHRyPFJhbmdlSW1wbD4gcmVzdWx0UmFuZ2UoZmluZFBsYWlu
VGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZykpOwogICAg
IAogICAgIC8vIElmIHdlIHJlLWZvdW5kIHRoZSAobm9uLWVtcHR5KSBzZWxlY3RlZCByYW5nZSwg
dGhlbiBzZWFyY2ggYWdhaW4gc3RhcnRpbmcganVzdCBwYXN0IHRoZSBzZWxlY3RlZCByYW5nZS4K
LSAgICBpZiAoc2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCkgJiYgKnJlc3VsdFJhbmdlID09ICpz
ZWxlY3Rpb24oKS50b1JhbmdlKCkpIHsKKyAgICBpZiAoc2VsZWN0aW9uKCktPnN0YXJ0KCkubm9k
ZSgpICYmICpyZXN1bHRSYW5nZSA9PSAqKHNlbGVjdGlvbigpLT50b1JhbmdlKCkpKSB7CiAgICAg
ICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKHhtbERvY0ltcGwoKSk7CiAgICAgICAg
IGlmIChmb3J3YXJkKSB7Ci0gICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwg
VmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb24oKS5hZmZpbml0eSgp
KSk7CisgICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJsZVBvc2l0
aW9uKHNlbGVjdGlvbigpLT5lbmQoKSwgc2VsZWN0aW9uKCktPmFmZmluaXR5KCkpKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJs
ZVBvc2l0aW9uKHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLmFmZmluaXR5KCkpKTsK
KyAgICAgICAgICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJsZVBvc2l0aW9uKHNl
bGVjdGlvbigpLT5zdGFydCgpLCBzZWxlY3Rpb24oKS0+YWZmaW5pdHkoKSkpOwogICAgICAgICB9
CiAgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwg
dGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZyk7CiAgICAgfQpAQCAtNDc3LDggKzQ3Nyw4IEBACiAg
ICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSkgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotCi0gICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIo
cmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKTsKKyAgICAKKyAgICBzZXRTZWxlY3Rpb24o
bmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKTsK
ICAgICByZXZlYWxTZWxlY3Rpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTc1MiwxNSAr
NzUyLDE1IEBACiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBjb21tYW5kcyB3b3Jr
LgogICAgIFJlZlB0cjxSYW5nZUltcGw+IHNlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyh4bWxE
b2NJbXBsKCkpKTsKICAgICBib29sIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0gZmFsc2U7Ci0gICAg
aWYgKHNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpKSB7CisgICAgaWYgKHNlbGVjdGlvbigpLT5z
dGFydCgpLm5vZGUoKSkgewogICAgICAgICBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IHRydWU7CiAg
ICAgICAgIGlmIChzdGFydEJlZm9yZVNlbGVjdGlvbikgewotICAgICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0KHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLmFmZmluaXR5KCkp
OworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbigpLT5zdGFydCgp
LCBzZWxlY3Rpb24oKS0+YWZmaW5pdHkoKSk7CiAgICAgICAgICAgICAvLyBXZSBtYXRjaCBBcHBL
aXQncyBydWxlOiBTdGFydCAxIGNoYXJhY3RlciBiZWZvcmUgdGhlIHNlbGVjdGlvbi4KICAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBvbmVCZWZvcmVTdGFydCA9IHN0YXJ0LnByZXZpb3VzKCk7
CiAgICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgb25lQmVmb3JlU3RhcnQu
aXNOb3ROdWxsKCkgPyBvbmVCZWZvcmVTdGFydCA6IHN0YXJ0KTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBWaXNpYmxlUG9zaXRpb24o
c2VsZWN0aW9uKCkuZW5kKCksIHNlbGVjdGlvbigpLmFmZmluaXR5KCkpKTsKKyAgICAgICAgICAg
IHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkt
PmVuZCgpLCBzZWxlY3Rpb24oKS0+YWZmaW5pdHkoKSkpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC04MjQsNyArODI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyByZXN1bHQgPSBj
aGFycy5zdHJpbmcobWlzc3BlbGxpbmcubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgbWlz
c3BlbGxpbmdSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGV4Y2Vw
dGlvbiksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbiksIGV4Y2VwdGlvbik7
CiAKLSAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIo
bWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOworICAgICAgICAgICAgICAgICAg
ICBzZXRTZWxlY3Rpb24obmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIobWlzc3BlbGxpbmdSYW5nZS5n
ZXQoKSwgRE9XTlNUUkVBTSkpOwogICAgICAgICAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb24o
KTsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFyayBtaXNzcGVsbGluZyBpbiBkb2N1bWVudC4K
ICAgICAgICAgICAgICAgICAgICAgeG1sRG9jSW1wbCgpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdS
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKQEAgLTE4NTcsNyArMTg1Nyw3
IEBACiAvLyB0aGUgZXZlbnQgaGFuZGxlciBOT1Qgc2V0dGluZyB0aGUgcmV0dXJuIHZhbHVlIHRv
IGZhbHNlCiBib29sIE1hY0ZyYW1lOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmZXZlbnRUeXBlLCBLV1FDbGlwYm9hcmQ6OkFjY2Vzc1BvbGljeSBwb2xpY3kpCiB7Ci0gICAg
Tm9kZUltcGwgKnRhcmdldCA9IGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkuZWxlbWVudCgpOworICAg
IE5vZGVJbXBsICp0YXJnZXQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKS5lbGVtZW50KCk7CiAgICAg
aWYgKCF0YXJnZXQgJiYgeG1sRG9jSW1wbCgpKSB7CiAgICAgICAgIHRhcmdldCA9IHhtbERvY0lt
cGwoKS0+Ym9keSgpOwogICAgIH0KQEAgLTI4NjIsNyArMjg2Miw3IEBACiAgICAgaWYgKGhhc011
bHRpcGxlRm9udHMpCiAgICAgICAgICpoYXNNdWx0aXBsZUZvbnRzID0gZmFsc2U7CiAKLSAgICBp
ZiAoIWQtPm1fc2VsZWN0aW9uLmlzUmFuZ2UoKSkgeworICAgIGlmICghc2VsZWN0aW9uKCktPmlz
UmFuZ2UoKSkgewogICAgICAgICBOb2RlSW1wbCAqbm9kZVRvUmVtb3ZlOwogICAgICAgICBSZW5k
ZXJTdHlsZSAqc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5vZGVUb1JlbW92ZSk7IC8v
IHNldHMgbm9kZVRvUmVtb3ZlCiAKQEAgLTI4ODEsNyArMjg4MSw3IEBACiAKICAgICBOU0ZvbnQg
KmZvbnQgPSBuaWw7CiAKLSAgICBSZWZQdHI8UmFuZ2VJbXBsPiByYW5nZSA9IGQtPm1fc2VsZWN0
aW9uLnRvUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2VJbXBsPiByYW5nZSA9IHNlbGVjdGlvbigp
LT50b1JhbmdlKCk7CiAgICAgTm9kZUltcGwgKnN0YXJ0Tm9kZSA9IHJhbmdlLT5lZGl0aW5nU3Rh
cnRQb3NpdGlvbigpLm5vZGUoKTsKICAgICBpZiAoc3RhcnROb2RlICE9IG5pbCkgewogICAgICAg
ICBOb2RlSW1wbCAqcGFzdEVuZCA9IHJhbmdlLT5wYXN0RW5kTm9kZSgpOwpAQCAtMjk3NSw3ICsy
OTc1LDcgQEAKIHsKICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gcmVzdWx0ID0gTlNXcml0aW5nRGly
ZWN0aW9uTGVmdFRvUmlnaHQ7CiAKLSAgICBQb3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24o
ZC0+bV9zZWxlY3Rpb24uc3RhcnQoKSwgZC0+bV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkuZGVlcEVx
dWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
KCktPnN0YXJ0KCksIHNlbGVjdGlvbigpLT5hZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwog
ICAgIE5vZGVJbXBsICpub2RlID0gcG9zLm5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUt
PnJlbmRlcmVyKCkgfHwgIW5vZGUtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzI2NiwxMCArMzI2NiwxMCBAQAogewogICAgIGlmICgh
W19icmlkZ2UgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRdKQogICAgICAgICByZXR1
cm47Ci0gICAgbWFya01pc3NwZWxsaW5ncyhTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0T2ZXb3Jk
KHAsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHAsIFJpZ2h0V29yZElmT25Cb3Vu
ZGFyeSkpKTsKKyAgICBtYXJrTWlzc3BlbGxpbmdzKG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKHN0
YXJ0T2ZXb3JkKHAsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHAsIFJpZ2h0V29y
ZElmT25Cb3VuZGFyeSkpKTsKIH0KIAotdm9pZCBNYWNGcmFtZTo6bWFya01pc3NwZWxsaW5ncyhj
b25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZzZWxlY3Rpb24pCit2b2lkIE1hY0ZyYW1lOjptYXJr
TWlzc3BlbGxpbmdzKFNlbGVjdGlvbkNvbnRyb2xsZXIgKnNlbGVjdGlvbikKIHsKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVhZHkgZXhwYW5kZWQg
dG8gd29yZCBib3VuZGFyaWVzLgogICAgIC8vIE1pZ2h0IGJlIG5pY2UgdG8gYXNzZXJ0IHRoYXQg
aGVyZS4KQEAgLTMyNzcsNyArMzI3Nyw3IEBACiAgICAgaWYgKCFbX2JyaWRnZSBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxS
YW5nZUltcGw+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi50b1JhbmdlKCkpOworICAgIFJlZlB0cjxS
YW5nZUltcGw+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi0+dG9SYW5nZSgpKTsKICAgICBpZiAoIXNl
YXJjaFJhbmdlIHx8IHNlYXJjaFJhbmdlLT5pc0RldGFjaGVkKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKQEAgLTMzMjcsMjMgKzMzMjcsMjMgQEAKICAgICB9CiB9CiAKLXZvaWQgTWFjRnJhbWU6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmb2xk
U2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKQordm9pZCBNYWNGcmFtZTo6cmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyICpvbGRTZWxlY3Rpb24sIGJvb2wgY2xv
c2VUeXBpbmcpCiB7CiAgICAgaWYgKHhtbERvY0ltcGwoKSkgewogICAgICAgICBpZiAoW19icmlk
Z2UgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRdKSB7Ci0gICAgICAgICAgICBTZWxl
Y3Rpb25Db250cm9sbGVyIG9sZEFkamFjZW50V29yZHMgPSBTZWxlY3Rpb25Db250cm9sbGVyKCk7
Ci0gICAgICAgICAgICAKKyAgICAgICAgCisgICAgICAgICAgICBSZWZQdHI8U2VsZWN0aW9uQ29u
dHJvbGxlcj4gb2xkQWRqYWNlbnRXb3JkcyA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKCk7CiAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlvbiByZXN1bHRpbmcg
ZnJvbSBhIGRlbGV0ZSBvcGVyYXRpb24sIG9sZFNlbGVjdGlvbiBtYXkgbm8gbG9uZ2VyCiAgICAg
ICAgICAgICAvLyBiZSBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgICAgICBpZiAob2xkU2VsZWN0
aW9uLnN0YXJ0KCkubm9kZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1
bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNl
bGVjdGlvbi5zdGFydCgpLCBvbGRTZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0gICAgICAgICAgICAg
ICAgb2xkQWRqYWNlbnRXb3JkcyA9IFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnRPZldvcmQob2xk
U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdv
cmRJZk9uQm91bmRhcnkpKTsgICAKKyAgICAgICAgICAgIGlmIChvbGRTZWxlY3Rpb24tPnN0YXJ0
KCkubm9kZSgpICYmIG9sZFNlbGVjdGlvbi0+c3RhcnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBvbGRTdGFydChvbGRTZWxlY3Rpb24t
PnN0YXJ0KCksIG9sZFNlbGVjdGlvbi0+YWZmaW5pdHkoKSk7CisgICAgICAgICAgICAgICAgb2xk
QWRqYWNlbnRXb3JkcyA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0T2ZXb3JkKG9sZFN0
YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChvbGRTdGFydCwgUmlnaHRXb3Jk
SWZPbkJvdW5kYXJ5KSk7ICAgCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBuZXdTdGFydChzZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb24oKS5hZmZpbml0
eSgpKTsKLSAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgbmV3QWRqYWNlbnRXb3Jkcyhz
dGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQobmV3
U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIG5ld1N0YXJ0KHNlbGVjdGlvbigpLT5zdGFydCgpLCBzZWxlY3Rpb24oKS0+YWZmaW5pdHko
KSk7CisgICAgICAgICAgICBSZWZQdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gbmV3QWRqYWNlbnRX
b3JkcyA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0T2ZXb3JkKG5ld1N0YXJ0LCBMZWZ0
V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChuZXdTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5k
YXJ5KSk7CiAKLSAgICAgICAgICAgIGlmIChvbGRBZGphY2VudFdvcmRzICE9IG5ld0FkamFjZW50
V29yZHMpIHsKKyAgICAgICAgICAgIGlmICgqKG9sZEFkamFjZW50V29yZHMuZ2V0KCkpICE9ICoo
bmV3QWRqYWNlbnRXb3Jkcy5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBNYXJrIG1pc3Nw
ZWxsaW5ncyBpbiB0aGUgcG9ydGlvbiB0aGF0IHdhcyBwcmV2aW91c2x5IHVubWFya2VkIGJlY2F1
c2Ugb2YKICAgICAgICAgICAgICAgICAvLyB0aGUgcHJveGltaXR5IG9mIHRoZSBzdGFydCBvZiB0
aGUgc2VsZWN0aW9uLiBXZSBvbmx5IHNwZWxsIGNoZWNrIHdvcmRzIGluCiAgICAgICAgICAgICAg
ICAgLy8gdGhlIHZpY2luaXR5IG9mIHRoZSBzdGFydCBvZiB0aGUgb2xkIHNlbGVjdGlvbiBiZWNh
dXNlIHRoZSBzcGVsbGluZyBjaGVja2VyCkBAIC0zMzUzLDEyICszMzUzLDEyIEBACiAKICAgICAg
ICAgICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGluZyBlbHNld2hlcmUsIHNv
IGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgICAgICAgICBpZiAoY2xvc2VUeXBpbmcpIHsK
LSAgICAgICAgICAgICAgICAgICAgbWFya01pc3NwZWxsaW5ncyhvbGRBZGphY2VudFdvcmRzKTsK
KyAgICAgICAgICAgICAgICAgICAgbWFya01pc3NwZWxsaW5ncyhvbGRBZGphY2VudFdvcmRzLmdl
dCgpKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBUaGlzIG9ubHkg
ZXJhc2VzIGEgbWFya2VyIGluIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBzZWxlY3Rpb24uCiAgICAg
ICAgICAgICAgICAgLy8gUGVyaGFwcyBwZWN1bGlhciwgYnV0IGl0IG1hdGNoZXMgQXBwS2l0Lgot
ICAgICAgICAgICAgICAgIHhtbERvY0ltcGwoKS0+cmVtb3ZlTWFya2VycyhuZXdBZGphY2VudFdv
cmRzLnRvUmFuZ2UoKS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAg
ICAgICAgICB4bWxEb2NJbXBsKCktPnJlbW92ZU1hcmtlcnMobmV3QWRqYWNlbnRXb3Jkcy0+dG9S
YW5nZSgpLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2hlbiBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIGlzIG9mZiwgbm8gbWFya2VycyBhcHBlYXIgYWZ0ZXIgdGhlIHNlbGVjdGlvbiBjaGFu
Z2VzLgpAQCAtMzM2OSwxMCArMzM2OSwxMCBAQAogICAgIFtfYnJpZGdlIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb25dOwogfQogCi1ib29sIE1hY0ZyYW1lOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24o
Y29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmb2xkU2VsZWN0aW9uLCBjb25zdCBTZWxlY3Rpb25D
b250cm9sbGVyICZuZXdTZWxlY3Rpb24sIGtodG1sOjpFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wg
c3RpbGxTZWxlY3RpbmcpIGNvbnN0Citib29sIE1hY0ZyYW1lOjpzaG91bGRDaGFuZ2VTZWxlY3Rp
b24oU2VsZWN0aW9uQ29udHJvbGxlciAqb2xkU2VsZWN0aW9uLCBTZWxlY3Rpb25Db250cm9sbGVy
ICpuZXdTZWxlY3Rpb24sIGtodG1sOjpFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxl
Y3RpbmcpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFtfYnJpZGdlIHNob3VsZENoYW5nZVNlbGVjdGVk
RE9NUmFuZ2U6W0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOm9sZFNlbGVjdGlvbi50b1JhbmdlKCku
Z2V0KCldCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRE9NUmFuZ2U6
W0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOm5ld1NlbGVjdGlvbi50b1JhbmdlKCkuZ2V0KCldCisg
ICAgcmV0dXJuIFtfYnJpZGdlIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6W0RPTVJhbmdl
IF9yYW5nZVdpdGhJbXBsOm9sZFNlbGVjdGlvbi0+dG9SYW5nZSgpLmdldCgpXQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0RPTVJhbmdlOltET01SYW5nZSBfcmFuZ2VX
aXRoSW1wbDpuZXdTZWxlY3Rpb24tPnRvUmFuZ2UoKS5nZXQoKV0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZmZpbml0eTpzdGF0aWNfY2FzdDxOU1NlbGVjdGlvbkFm
ZmluaXR5PihhZmZpbml0eSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGls
bFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CiB9CkluZGV4OiBicmlkZ2UvbWFjL1dlYkNvcmVG
cmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRn
ZS5tbQkocmV2aXNpb24gMTIyNTEpCisrKyBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIE5POwogICAgICAgICAKLSAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlz
Tm9uZSgpKQorICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpKQogICAgICAgICBy
ZXR1cm4gTk87CiAKICAgICAvLyBJZiBhIHBhcnQgaGFzIGEgc2VsZWN0aW9uLCBpdCBzaG91bGQg
YWxzbyBoYXZlIGEgZG9jdW1lbnQuICAgICAgICAKQEAgLTgwNywxMyArODA3LDEzIEBACiAtIChC
T09MKWlzU2VsZWN0aW9uRWRpdGFibGUKIHsKICAgICAvLyBFRElUIEZJWE1FOiBUaGlzIG5lZWRz
IHRvIGNvbnNpZGVyIHRoZSBlbnRpcmUgc2VsZWN0ZWQgcmFuZ2UKLSAgICBOb2RlSW1wbCAqc3Rh
cnROb2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZUlt
cGwgKnN0YXJ0Tm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsKICAg
ICByZXR1cm4gc3RhcnROb2RlID8gc3RhcnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpIDogTk87
CiB9CiAKIC0gKFdlYlNlbGVjdGlvblN0YXRlKXNlbGVjdGlvblN0YXRlCiB7Ci0gICAgc3dpdGNo
IChtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zdGF0ZSgpKSB7CisgICAgc3dpdGNoIChtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c3RhdGUoKSkgewogICAgICAgICBjYXNlIFdlYkNvcmU6OlNlbGVjdGlvbjo6
Tk9ORToKICAgICAgICAgICAgIHJldHVybiBXZWJTZWxlY3Rpb25TdGF0ZU5vbmU7CiAgICAgICAg
IGNhc2UgV2ViQ29yZTo6U2VsZWN0aW9uOjpDQVJFVDoKQEAgLTkxNSw3ICs5MTUsNyBAQAogLSAo
dm9pZClkZXNlbGVjdFRleHQKIHsKICAgICAvLyBGSVhNRTogNjQ5OCBTaG91bGQganVzdCBiZSBh
YmxlIHRvIGNhbGwgbV9mcmFtZS0+c2VsZWN0aW9uKCkuY2xlYXIoKQotICAgIG1fZnJhbWUtPnNl
dFNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKCkpOworICAgIG1fZnJhbWUtPnNldFNlbGVj
dGlvbihuZXcgU2VsZWN0aW9uQ29udHJvbGxlcigpKTsKIH0KIAogLSAoQk9PTClpc0ZyYW1lU2V0
CkBAIC0xNTMwLDcgKzE1MzAsNyBAQAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopc2VsZWN0ZWRB
dHRyaWJ1dGVkU3RyaW5nCiB7CiAgICAgLy8gRklYTUU6IHNob3VsZCBiZSBhIG5vLWFyZyB2ZXJz
aW9uIG9mIGF0dHJpYnV0ZWRTdHJpbmcoKSB0aGF0IGRvZXMgdGhpcwotICAgIHJldHVybiBtX2Zy
YW1lLT5hdHRyaWJ1dGVkU3RyaW5nKG1fZnJhbWUtPnNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgp
LCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5zdGFydCgpLm9mZnNldCgpLCBtX2ZyYW1lLT5zZWxlY3Rp
b24oKS5lbmQoKS5ub2RlKCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLmVuZCgpLm9mZnNldCgpKTsK
KyAgICByZXR1cm4gbV9mcmFtZS0+YXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c3RhcnQoKS5ub2RlKCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm9mZnNldCgp
LCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCkubm9kZSgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+ZW5kKCkub2Zmc2V0KCkpOwogfQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1
dGVkU3RyaW5nRnJvbTooRE9NTm9kZSAqKXN0YXJ0IHN0YXJ0T2Zmc2V0OihpbnQpc3RhcnRPZmZz
ZXQgdG86KERPTU5vZGUgKillbmQgZW5kT2Zmc2V0OihpbnQpZW5kT2Zmc2V0CkBAIC0xODExLDkg
KzE4MTEsOSBAQAogICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAKICAgICAvLyBOT1RFOiBU
aGUgZW51bXMgKm11c3QqIG1hdGNoIHRoZSB2ZXJ5IHNpbWlsYXIgb25lcyBkZWNsYXJlZCBpbiBT
ZWxlY3Rpb25Db250cm9sbGVyLmgKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiht
X2ZyYW1lLT5zZWxlY3Rpb24oKSk7Ci0gICAgc2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJp
dHkoc3RhdGljX2Nhc3Q8RVRleHRHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpKTsKLSAgICByZXR1
cm4gW0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOnNlbGVjdGlvbi50b1JhbmdlKCkuZ2V0KCldOwor
ICAgIFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9u
Q29udHJvbGxlcigqbV9mcmFtZS0+c2VsZWN0aW9uKCkpOworICAgIHNlbGVjdGlvbi0+ZXhwYW5k
VXNpbmdHcmFudWxhcml0eShzdGF0aWNfY2FzdDxFVGV4dEdyYW51bGFyaXR5PihncmFudWxhcml0
eSkpOworICAgIHJldHVybiBbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6c2VsZWN0aW9uLT50b1Jh
bmdlKCkuZ2V0KCldOwogfQogCiAtIChET01SYW5nZSAqKXJhbmdlQnlBbHRlcmluZ0N1cnJlbnRT
ZWxlY3Rpb246KFdlYlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdl
YkJyaWRnZVNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkJyaWRn
ZVNlbGVjdGlvbkdyYW51bGFyaXR5KWdyYW51bGFyaXR5CkBAIC0xODIyLDExICsxODIyLDExIEBA
CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIAogICAgIC8vIE5PVEU6IFRoZSBlbnVtcyAq
bXVzdCogbWF0Y2ggdGhlIHZlcnkgc2ltaWxhciBvbmVzIGRlY2xhcmVkIGluIFNlbGVjdGlvbkNv
bnRyb2xsZXIuaAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uKG1fZnJhbWUtPnNl
bGVjdGlvbigpKTsKLSAgICBzZWxlY3Rpb24ubW9kaWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkVBbHRlcj4oYWx0ZXJhdGlvbiksIAorICAgIFJlZlB0cjxTZWxlY3Rpb25Db250
cm9sbGVyPiBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcigqbV9mcmFtZS0+c2Vs
ZWN0aW9uKCkpOworICAgIHNlbGVjdGlvbi0+bW9kaWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkVBbHRlcj4oYWx0ZXJhdGlvbiksIAogICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8U2VsZWN0aW9uQ29udHJvbGxlcjo6RURpcmVjdGlvbj4oZGlyZWN0aW9uKSwgCiAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFVGV4dEdyYW51bGFyaXR5PihncmFudWxh
cml0eSkpOwotICAgIHJldHVybiBbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6c2VsZWN0aW9uLnRv
UmFuZ2UoKS5nZXQoKV07CisgICAgcmV0dXJuIFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpzZWxl
Y3Rpb24tPnRvUmFuZ2UoKS5nZXQoKV07CiB9CiAKIC0gKHZvaWQpYWx0ZXJDdXJyZW50U2VsZWN0
aW9uOihXZWJTZWxlY3Rpb25BbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihXZWJCcmlk
Z2VTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJCcmlkZ2VTZWxl
Y3Rpb25HcmFudWxhcml0eSlncmFudWxhcml0eQpAQCAtMTgzNSwxMCArMTgzNSwxMCBAQAogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIC8vIE5PVEU6IFRoZSBlbnVtcyAqbXVzdCogbWF0
Y2ggdGhlIHZlcnkgc2ltaWxhciBvbmVzIGRlY2xhcmVkIGluIFNlbGVjdGlvbkNvbnRyb2xsZXIu
aAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigp
KTsKLSAgICBzZWxlY3Rpb24ubW9kaWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6
OkVBbHRlcj4oYWx0ZXJhdGlvbiksIAotICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
U2VsZWN0aW9uQ29udHJvbGxlcjo6RURpcmVjdGlvbj4oZGlyZWN0aW9uKSwgCi0gICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxFVGV4dEdyYW51bGFyaXR5PihncmFudWxhcml0eSkpOwor
ICAgIFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9u
Q29udHJvbGxlcigqbV9mcmFtZS0+c2VsZWN0aW9uKCkpOworICAgIHNlbGVjdGlvbi0+bW9kaWZ5
KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVBbHRlcj4oYWx0ZXJhdGlvbiksIAor
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVE
aXJlY3Rpb24+KGRpcmVjdGlvbiksIAorICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PEVUZXh0R3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSk7CiAKICAgICAvLyBzYXZlIHZlcnRpY2Fs
IG5hdmlnYXRpb24geCBwb3NpdGlvbiBpZiBuZWNlc3Nhcnk7IG1hbnkgdHlwZXMgb2YgbW90aW9u
IGJsb3cgaXQgYXdheQogICAgIGludCB4UG9zID0gRnJhbWU6Ok5vWFBvc0ZvclZlcnRpY2FsQXJy
b3dOYXZpZ2F0aW9uOwpAQCAtMTg1Nyw3ICsxODU3LDcgQEAKIAogICAgIAogICAgIC8vIHNldHRp
bmcgdGhlIHNlbGVjdGlvbiBhbHdheXMgY2xlYXJzIHNhdmVkIHZlcnRpY2FsIG5hdmlnYXRpb24g
eCBwb3NpdGlvbgotICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIG1f
ZnJhbWUtPnNldFNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCkpOwogICAgIAogICAgIC8vIGFsdGVy
aW5nIHRoZSBzZWxlY3Rpb24gYWxzbyBzZXRzIHRoZSBncmFudWxhcml0eSBiYWNrIHRvIGNoYXJh
Y3RlcgogICAgIC8vIE5PVEU6IFRoZSBvbmUgZXhjZXB0aW9uIGlzIHRoYXQgd2UgbmVlZCB0byBr
ZWVwIHdvcmQgZ3JhbnVsYXJpdHkKQEAgLTE4ODEsOSArMTg4MSw5IEBACiAgICAgaWYgKCFmcmFt
ZUhhc1NlbGVjdGlvbihzZWxmKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgCi0gICAg
U2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCkpOwotICAg
IHNlbGVjdGlvbi5tb2RpZnkoc3RhdGljX2Nhc3Q8U2VsZWN0aW9uQ29udHJvbGxlcjo6RUFsdGVy
PihhbHRlcmF0aW9uKSwgc3RhdGljX2Nhc3Q8aW50Pih2ZXJ0aWNhbERpc3RhbmNlKSk7Ci0gICAg
cmV0dXJuIFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpzZWxlY3Rpb24udG9SYW5nZSgpLmdldCgp
XTsKKyAgICBSZWZQdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gc2VsZWN0aW9uID0gbmV3IFNlbGVj
dGlvbkNvbnRyb2xsZXIoKm1fZnJhbWUtPnNlbGVjdGlvbigpKTsKKyAgICBzZWxlY3Rpb24tPm1v
ZGlmeShzdGF0aWNfY2FzdDxTZWxlY3Rpb25Db250cm9sbGVyOjpFQWx0ZXI+KGFsdGVyYXRpb24p
LCBzdGF0aWNfY2FzdDxpbnQ+KHZlcnRpY2FsRGlzdGFuY2UpKTsKKyAgICByZXR1cm4gW0RPTVJh
bmdlIF9yYW5nZVdpdGhJbXBsOnNlbGVjdGlvbi0+dG9SYW5nZSgpLmdldCgpXTsKIH0KIAogLSAo
dm9pZClhbHRlckN1cnJlbnRTZWxlY3Rpb246KFdlYlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJh
dGlvbiB2ZXJ0aWNhbERpc3RhbmNlOihmbG9hdCl2ZXJ0aWNhbERpc3RhbmNlCkBAIC0xODkxLDEy
ICsxODkxLDEyIEBACiAgICAgaWYgKCFmcmFtZUhhc1NlbGVjdGlvbihzZWxmKSkKICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbihtX2Zy
YW1lLT5zZWxlY3Rpb24oKSk7Ci0gICAgc2VsZWN0aW9uLm1vZGlmeShzdGF0aWNfY2FzdDxTZWxl
Y3Rpb25Db250cm9sbGVyOjpFQWx0ZXI+KGFsdGVyYXRpb24pLCBzdGF0aWNfY2FzdDxpbnQ+KHZl
cnRpY2FsRGlzdGFuY2UpKTsKKyAgICBSZWZQdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gc2VsZWN0
aW9uID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoKihtX2ZyYW1lLT5zZWxlY3Rpb24oKSkpOwor
ICAgIHNlbGVjdGlvbi0+bW9kaWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVB
bHRlcj4oYWx0ZXJhdGlvbiksIHN0YXRpY19jYXN0PGludD4odmVydGljYWxEaXN0YW5jZSkpOwog
CiAgICAgLy8gc2V0dGluZyB0aGUgc2VsZWN0aW9uIGFsd2F5cyBjbGVhcnMgc2F2ZWQgdmVydGlj
YWwgbmF2aWdhdGlvbiB4IHBvc2l0aW9uLCBzbyBwcmVzZXJ2ZSBpdAogICAgIGludCB4UG9zID0g
bV9mcmFtZS0+eFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCk7Ci0gICAgbV9mcmFtZS0+
c2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKHNlbGVj
dGlvbi5nZXQoKSk7CiAgICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoc3RhdGlj
X2Nhc3Q8RVRleHRHcmFudWxhcml0eT4oV2ViQnJpZGdlU2VsZWN0QnlDaGFyYWN0ZXIpKTsKICAg
ICBtX2ZyYW1lLT5zZXRYUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oeFBvcyk7CiAKQEAg
LTE5MjksMTYgKzE5MjksMTUgQEAKICAgICBpZiAoIVtyYW5nZSBjb2xsYXBzZWRdKQogICAgICAg
ICBhZmZpbml0eSA9IERPV05TVFJFQU07CiAgICAgCi0gICAgLy8gRklYTUU6IENhbiB3ZSBwcm92
aWRlIGV4dGVudEFmZmluaXR5PwogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQoc3Rh
cnRDb250YWluZXIsIFtyYW5nZSBzdGFydE9mZnNldF0sIGFmZmluaXR5KTsKICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZUVuZChlbmRDb250YWluZXIsIFtyYW5nZSBlbmRPZmZzZXRdLCBTRUxf
REVGQVVMVF9BRkZJTklUWSk7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24odmlz
aWJsZVN0YXJ0LCB2aXNpYmxlRW5kKTsKLSAgICBtX2ZyYW1lLT5zZXRTZWxlY3Rpb24oc2VsZWN0
aW9uLCBjbG9zZVR5cGluZyk7CisgICAgUmVmUHRyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IHNlbGVj
dGlvbiA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKHZpc2libGVTdGFydCwgdmlzaWJsZUVuZCk7
CisgICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbi5nZXQoKSwgY2xvc2VUeXBpbmcp
OwogfQogCiAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2UKIHsKLSAgICByZXR1cm4gW0RP
TVJhbmdlIF9yYW5nZVdpdGhJbXBsOm1fZnJhbWUtPnNlbGVjdGlvbigpLnRvUmFuZ2UoKS5nZXQo
KV07CisgICAgcmV0dXJuIFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDptX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+dG9SYW5nZSgpLmdldCgpXTsKIH0KIAogLSAoTlNSYW5nZSljb252ZXJ0VG9OU1Jhbmdl
OihSYW5nZUltcGwgKilyYW5nZQpAQCAtMTk4MSwyOCArMTk4MCwyNyBAQAogCiAtICh2b2lkKXNl
bGVjdE5TUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKIHsKLSAgICBtX2ZyYW1lLT5zZXRTZWxlY3Rpb24o
U2VsZWN0aW9uQ29udHJvbGxlcihbc2VsZiBjb252ZXJ0VG9ET01SYW5nZTpyYW5nZV0sIFNFTF9E
RUZBVUxUX0FGRklOSVRZKSk7CisgICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKG5ldyBTZWxlY3Rp
b25Db250cm9sbGVyKFtzZWxmIGNvbnZlcnRUb0RPTVJhbmdlOnJhbmdlXSwgU0VMX0RFRkFVTFRf
QUZGSU5JVFkpKTsKIH0KIAogLSAoTlNSYW5nZSlzZWxlY3RlZE5TUmFuZ2UKIHsKLSAgICByZXR1
cm4gW3NlbGYgY29udmVydFRvTlNSYW5nZTptX2ZyYW1lLT5zZWxlY3Rpb24oKS50b1JhbmdlKCku
Z2V0KCldOworICAgIHJldHVybiBbc2VsZiBjb252ZXJ0VG9OU1JhbmdlOm1fZnJhbWUtPnNlbGVj
dGlvbigpLT50b1JhbmdlKCkuZ2V0KCldOwogfQogCiAtIChOU1NlbGVjdGlvbkFmZmluaXR5KXNl
bGVjdGlvbkFmZmluaXR5CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TU2VsZWN0aW9uQWZm
aW5pdHk+KG1fZnJhbWUtPnNlbGVjdGlvbigpLmFmZmluaXR5KCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxOU1NlbGVjdGlvbkFmZmluaXR5PihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+YWZmaW5p
dHkoKSk7CiB9CiAKIC0gKHZvaWQpc2V0TWFya0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7
Ci0gICAgUmFuZ2VJbXBsKiByID0gW3JhbmdlIF9yYW5nZUltcGxdOwotICAgIG1fZnJhbWUtPnNl
dE1hcmsoU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24ociksIGVuZFBvc2l0aW9uKHIpLCBTRUxfREVG
QVVMVF9BRkZJTklUWSkpOworICAgIG1fZnJhbWUtPnNldE1hcmsobmV3IFNlbGVjdGlvbkNvbnRy
b2xsZXIoW3JhbmdlIF9yYW5nZUltcGxdLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogfQogCiAt
IChET01SYW5nZSAqKW1hcmtET01SYW5nZQogewotICAgIHJldHVybiBbRE9NUmFuZ2UgX3Jhbmdl
V2l0aEltcGw6bV9mcmFtZS0+bWFyaygpLnRvUmFuZ2UoKS5nZXQoKV07CisgICAgcmV0dXJuIFtE
T01SYW5nZSBfcmFuZ2VXaXRoSW1wbDptX2ZyYW1lLT5tYXJrKCktPnRvUmFuZ2UoKS5nZXQoKV07
CiB9CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4dERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGN1
c3RvbUF0dHJpYnV0ZXM6KE5TQXJyYXkgKilhdHRyaWJ1dGVzIHJhbmdlczooTlNBcnJheSAqKXJh
bmdlcwpAQCAtMjI1NCw3ICsyMjUyLDcgQEAKIAogLSAodm9pZCltb3ZlU2VsZWN0aW9uVG9EcmFn
Q2FyZXQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilzZWxlY3Rpb25GcmFnbWVudCBzbWFydE1vdmU6
KEJPT0wpc21hcnRNb3ZlCiB7Ci0gICAgUG9zaXRpb24gYmFzZSA9IG1fZnJhbWUtPmRyYWdDYXJl
dCgpLmJhc2UoKTsKKyAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS0+ZHJhZ0NhcmV0KCktPmJh
c2UoKTsKICAgICBFZGl0Q29tbWFuZFB0cihuZXcgTW92ZVNlbGVjdGlvbkNvbW1hbmQobV9mcmFt
ZS0+eG1sRG9jSW1wbCgpLCBbc2VsZWN0aW9uRnJhZ21lbnQgX2ZyYWdtZW50SW1wbF0sIGJhc2Us
IHNtYXJ0TW92ZSkpLmFwcGx5KCk7CiB9CiAKQEAgLTIyNzUsMTkgKzIyNzMsMTggQEAKIH0KIAog
LSAodm9pZCltb3ZlRHJhZ0NhcmV0VG9Qb2ludDooTlNQb2ludClwb2ludAoteyAgIAotICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXIgZHJhZ0NhcmV0KFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dDpwb2ludF0pOwotICAgIG1fZnJhbWUtPnNldERyYWdDYXJldChkcmFnQ2FyZXQpOworeworICAg
IG1fZnJhbWUtPnNldERyYWdDYXJldChuZXcgU2VsZWN0aW9uQ29udHJvbGxlcihbc2VsZiBfdmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdKSk7CiB9CiAKIC0gKHZvaWQpcmVtb3ZlRHJhZ0Nh
cmV0CiB7Ci0gICAgbV9mcmFtZS0+c2V0RHJhZ0NhcmV0KFNlbGVjdGlvbkNvbnRyb2xsZXIoKSk7
CisgICAgbV9mcmFtZS0+c2V0RHJhZ0NhcmV0KG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKCkpOwog
fQogCiAtIChET01SYW5nZSAqKWRyYWdDYXJldERPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtET01S
YW5nZSBfcmFuZ2VXaXRoSW1wbDptX2ZyYW1lLT5kcmFnQ2FyZXQoKS50b1JhbmdlKCkuZ2V0KCld
OworICAgIHJldHVybiBbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6bV9mcmFtZS0+ZHJhZ0NhcmV0
KCktPnRvUmFuZ2UoKS5nZXQoKV07CiB9CiAKIC0gKERPTVJhbmdlICopZWRpdGFibGVET01SYW5n
ZUZvclBvaW50OihOU1BvaW50KXBvaW50CkBAIC0yNDU1LDcgKzI0NTIsNyBAQAogICAgIGlmICgh
dikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS0+c2Vs
ZWN0aW9uKCkuZXh0ZW50KCk7CisgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS0+c2VsZWN0
aW9uKCktPmV4dGVudCgpOwogICAgIGlmIChleHRlbnQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKQEAgLTI0NjcsNyArMjQ2NCw3IEBACiAgICAgaWYgKCFkb2N1bWVudFZpZXcpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBJbnRSZWN0IGV4dGVudFJlY3QgPSByZW5kZXJlci0+
Y2FyZXRSZWN0KGV4dGVudC5vZmZzZXQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCkuYWZmaW5pdHko
KSk7CisgICAgSW50UmVjdCBleHRlbnRSZWN0ID0gcmVuZGVyZXItPmNhcmV0UmVjdChleHRlbnQu
b2Zmc2V0KCksIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5hZmZpbml0eSgpKTsKICAgICBSZW5kZXJM
YXllciAqbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICBpZiAobGF5ZXIp
CiAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKGV4dGVudFJlY3QpOwpAQCAtMjYy
MCwxMSArMjYxNywxMSBAQAogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICAgICAgCi0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24obV9mcmFtZS0+c2Vs
ZWN0aW9uKCkpOwotICAgIGlmICghc2VsZWN0aW9uLmlzQ2FyZXQoKSkKKyAgICBTZWxlY3Rpb25D
b250cm9sbGVyICpzZWxlY3Rpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNl
bGVjdGlvbi0+aXNDYXJldCgpKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgVmlzaWJsZVBv
c2l0aW9uIGNhcmV0KHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0KHNlbGVjdGlvbi0+c3RhcnQoKSwgc2VsZWN0aW9uLT5h
ZmZpbml0eSgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IGNhcmV0Lm5leHQoKTsKICAg
ICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSBjYXJldC5wcmV2aW91cygpOwogICAgIGlmIChw
cmV2aW91cy5pc051bGwoKSB8fCBuZXh0LmlzTnVsbCgpIHx8IGNhcmV0ID09IG5leHQgfHwgY2Fy
ZXQgPT0gcHJldmlvdXMpCkluZGV4OiBrd3EvS1dRQWNjT2JqZWN0Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGt3cS9LV1FBY2NPYmplY3QubW0JKHJldmlzaW9uIDEyMjUxKQorKysga3dxL0tXUUFjY09iamVj
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtOTE1LDE2ICs5MTUsMTYgQEAKICAgICAgICAgLy8gTk9U
RTogQlVHIHN1cHBvcnQgbmVzdGVkIFdlYkFyZWFzLCBsaWtlIGluIDxodHRwOi8vd2ViY291cnNl
cy5uaXUuZWR1Lz4KICAgICAgICAgLy8gKHRoZXJlIGlzIGEgd2ViIGFyY2hpdmUgb2YgdGhpcyBw
YWdlIGF0dGFjaGVkIHRvIDxyZGFyOi8vcHJvYmxlbS8zODg4OTczPikKICAgICAgICAgLy8gVHJv
dWJsZSBpcyB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggZG9jdW1lbnQgdmlldyB0byBhc2suCi0gICAg
ICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgICBzZWwgPSBbc2VsZiB0b3BWaWV3XS0+ZnJhbWUoKS0+
c2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChzZWwuaXNOb25lKCkpIHsKKyAgICAgICAgU2VsZWN0
aW9uQ29udHJvbGxlciAqc2VsID0gW3NlbGYgdG9wVmlld10tPmZyYW1lKCktPnNlbGVjdGlvbigp
OworICAgICAgICBpZiAoc2VsLT5pc05vbmUoKSkgewogICAgICAgICAgICAgc2VsID0gbV9yZW5k
ZXJlci0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+Y2FudmFzKCktPnZpZXcoKS0+ZnJhbWUoKS0+
c2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoc2VsLmlzTm9uZSgpKQorICAgICAgICAgICAg
aWYgKHNlbC0+aXNOb25lKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIC8vIHJldHVybiBhIG1hcmtlciByYW5nZSBmb3IgdGhl
IHNlbGVjdGlvbiBzdGFydCB0byBlbmQKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24gPSBWaXNpYmxlUG9zaXRpb24oc2VsLnN0YXJ0KCksIHNlbC5hZmZpbml0eSgpKTsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKHNlbC5l
bmQoKSwgc2VsLmFmZmluaXR5KCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3Np
dGlvbiA9IFZpc2libGVQb3NpdGlvbihzZWwtPnN0YXJ0KCksIHNlbC0+YWZmaW5pdHkoKSk7Cisg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihzZWwt
PmVuZCgpLCBzZWwtPmFmZmluaXR5KCkpOwogICAgICAgICByZXR1cm4gKGlkKSBbc2VsZiB0ZXh0
TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczpzdGFydFBvc2l0aW9uIGFuZEVuZFBvczpl
bmRQb3NpdGlvbl07CiAgICAgfQogICAgIApAQCAtMTg5OCw4ICsxODk4LDcgQEAKICAgICAKICAg
ICAvLyBtYWtlIHNlbGVjdGlvbiBhbmQgdGVsbCB0aGUgZG9jdW1lbnQgdG8gdXNlIGl0CiAgICAg
Ly8gTk9URTogQlVHIHN1cHBvcnQgbmVzdGVkIFdlYkFyZWFzCi0gICAgU2VsZWN0aW9uQ29udHJv
bGxlciBzZWwgPSBTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRW
aXNpYmxlUG9zaXRpb24pOwotICAgIFtzZWxmIHRvcERvY3VtZW50XS0+ZnJhbWUoKS0+c2V0U2Vs
ZWN0aW9uKHNlbCk7CisgICAgW3NlbGYgdG9wRG9jdW1lbnRdLT5mcmFtZSgpLT5zZXRTZWxlY3Rp
b24obmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnRWaXNpYmxlUG9zaXRpb24sIGVuZFZpc2li
bGVQb3NpdGlvbikpOwogfQogCiAtICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQpdmFs
dWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZU5hbWU7CkluZGV4OiBrd3EvS1dR
UmVuZGVyVHJlZURlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRUmVuZGVyVHJlZURlYnVn
LmNwcAkocmV2aXNpb24gMTIyNTEpCisrKyBrd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAyLDE1ICs0MDIsMTUgQEAKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9IGZyYW1lLT5z
ZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkgewotICAgICAgICB0cyA8
PCAiY2FyZXQ6IHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLnN0YXJ0KCkub2Zmc2V0KCkgPDwgIiBv
ZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpOwotICAgICAgICBp
ZiAoc2VsZWN0aW9uLmFmZmluaXR5KCkgPT0gVVBTVFJFQU0pCisgICAgU2VsZWN0aW9uQ29udHJv
bGxlciAqc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24t
PmlzQ2FyZXQoKSkgeworICAgICAgICB0cyA8PCAiY2FyZXQ6IHBvc2l0aW9uICIgPDwgc2VsZWN0
aW9uLT5zdGFydCgpLm9mZnNldCgpIDw8ICIgb2YgIiA8PCBub2RlUG9zaXRpb24oc2VsZWN0aW9u
LT5zdGFydCgpLm5vZGUoKSk7CisgICAgICAgIGlmIChzZWxlY3Rpb24tPmFmZmluaXR5KCkgPT0g
VVBTVFJFQU0pCiAgICAgICAgICAgICB0cyA8PCAiICh1cHN0cmVhbSBhZmZpbml0eSkiOwogICAg
ICAgICB0cyA8PCAiXG4iOyAKLSAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsK
LSAgICAgICAgdHMgPDwgInNlbGVjdGlvbiBzdGFydDogcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24u
c3RhcnQoKS5vZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFy
dCgpLm5vZGUoKSkgPDwgIlxuIgotICAgICAgICAgICA8PCAic2VsZWN0aW9uIGVuZDogICBwb3Np
dGlvbiAiIDw8IHNlbGVjdGlvbi5lbmQoKS5vZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0
aW9uKHNlbGVjdGlvbi5lbmQoKS5ub2RlKCkpIDw8ICJcbiI7IAorICAgIH0gZWxzZSBpZiAoc2Vs
ZWN0aW9uLT5pc1JhbmdlKCkpIHsKKyAgICAgICAgdHMgPDwgInNlbGVjdGlvbiBzdGFydDogcG9z
aXRpb24gIiA8PCBzZWxlY3Rpb24tPnN0YXJ0KCkub2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQ
b3NpdGlvbihzZWxlY3Rpb24tPnN0YXJ0KCkubm9kZSgpKSA8PCAiXG4iCisgICAgICAgICAgIDw8
ICJzZWxlY3Rpb24gZW5kOiAgIHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLT5lbmQoKS5vZmZzZXQo
KSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi0+ZW5kKCkubm9kZSgpKSA8PCAi
XG4iOyAKICAgICB9CiB9CiAKSW5kZXg6IHBhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdl
L0ZyYW1lLmgJKHJldmlzaW9uIDEyMjUxKQorKysgcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NzUsNyArNDc1LDcgQEAKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIHNlbGVjdGVkIHBh
cnQgb2YgdGhlIEhUTUwuCiAgICAqLwotICBXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyICZz
ZWxlY3Rpb24oKSBjb25zdDsKKyAgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciAqc2VsZWN0
aW9uKCkgY29uc3Q7CiAKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIGdyYW51bGFyaXR5IG9mIHRo
ZSBzZWxlY3Rpb24gKGNoYXJhY3Rlciwgd29yZCwgbGluZSwgcGFyYWdyYXBoKS4KQEAgLTQ5MCwz
MiArNDkwLDMyIEBACiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBkcmFnIGNhcmV0IG9mIHRoZSBI
VE1MLgogICAgKi8KLSAgY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciAmZHJhZ0Nh
cmV0KCkgY29uc3Q7CisgIFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgKmRyYWdDYXJldCgp
IGNvbnN0OwogCiAgIC8qKgogICAgKiBTZXRzIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KICAgICov
Ci0gIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIg
JiwgYm9vbCBjbG9zZVR5cGluZyA9IHRydWUsIGJvb2wga2VlcFR5cGluZ1N0eWxlID0gZmFsc2Up
OworICB2b2lkIHNldFNlbGVjdGlvbihXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyICosIGJv
b2wgY2xvc2VUeXBpbmcgPSB0cnVlLCBib29sIGtlZXBUeXBpbmdTdHlsZSA9IGZhbHNlKTsKIAog
ICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHNlbGVjdGlvbiBjYW4gYmUgY2hhbmdlZC4KICAg
ICovCi0gIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlv
bkNvbnRyb2xsZXIgJikgY29uc3Q7CisgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKFdlYkNv
cmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgKikgY29uc3Q7CiAKICAgLyoqCiAgICAqIFJldHVybnMg
YSBtYXJrLCB0byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCiAgICAqLwotICBjb25zdCBXZWJD
b3JlOjpTZWxlY3Rpb24gJm1hcmsoKSBjb25zdDsKKyAgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJv
bGxlciAqbWFyaygpIGNvbnN0OwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBtYXJrLgogICAg
Ki8KLSAgdm9pZCBzZXRNYXJrKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbiAmKTsKKyAgdm9pZCBz
ZXRNYXJrKFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgKik7CiAKICAgLyoqCiAgICAqIFNl
dHMgdGhlIGN1cnJlbnQgZHJhZyBjYXJldC4KICAgICovCi0gIHZvaWQgc2V0RHJhZ0NhcmV0KGNv
bnN0IFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJik7CisgIHZvaWQgc2V0RHJhZ0NhcmV0
KFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgKik7CiAgIAogICAvKioKICAgICogVHJhbnNw
b3NlcyBjaGFyYWN0ZXJzIGVpdGhlciBzaWRlIG9mIGNhcmV0IHNlbGVjdGlvbi4KQEAgLTgxMiw3
ICs4MTIsNyBAQAogICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpnZXRPYmplY3RJ
bnN0YW5jZUZvcldpZGdldChRV2lkZ2V0KikgPSAwOwogICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6
Okluc3RhbmNlICpnZXRBcHBsZXRJbnN0YW5jZUZvcldpZGdldChRV2lkZ2V0KikgPSAwOwogICB2
aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3Jkcyhjb25zdCBXZWJDb3Jl
OjpWaXNpYmxlUG9zaXRpb24gJikgPSAwOwotICB2aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxsaW5n
cyhjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyICYpID0gMDsKKyAgdmlydHVhbCB2
b2lkIG1hcmtNaXNzcGVsbGluZ3MoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciAqKSA9IDA7
CiAgIHZpcnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFdlYkNvcmU6OkRPTVN0
cmluZyYgbWVzc2FnZSwgIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBXZWJDb3JlOjpE
T01TdHJpbmcmIHNvdXJjZUlEKSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0QWxl
cnQoY29uc3QgV2ViQ29yZTo6RE9NU3RyaW5nJiBtZXNzYWdlKSA9IDA7CiAgIHZpcnR1YWwgYm9v
bCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBXZWJDb3JlOjpET01TdHJpbmcmIG1lc3NhZ2Up
ID0gMDsKQEAgLTgzNiw5ICs4MzYsOSBAQAogICB2aXJ0dWFsIHZvaWQgaXNzdWVQYXN0ZUNvbW1h
bmQoKSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBpc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQo
KSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBpc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKSA9IDA7Ci0gIHZp
cnR1YWwgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlNlbGVj
dGlvbkNvbnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZykgPSAwOworICB2
aXJ0dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihXZWJDb3JlOjpTZWxlY3Rpb25D
b250cm9sbGVyICpvbGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpID0gMDsKICAgdmlydHVh
bCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpID0gMDsKLSAgdmlydHVhbCBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyICZv
bGRTZWxlY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJm5ld1NlbGVj
dGlvbiwgV2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBj
b25zdCA9IDA7CisgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oV2ViQ29yZTo6
U2VsZWN0aW9uQ29udHJvbGxlciAqb2xkU2VsZWN0aW9uLCBXZWJDb3JlOjpTZWxlY3Rpb25Db250
cm9sbGVyICpuZXdTZWxlY3Rpb24sIGtodG1sOjpFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3Rp
bGxTZWxlY3RpbmcpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIHBhcnRDbGVhcmVkSW5CZWdp
bigpID0gMDsgCiAgIHZpcnR1YWwgdm9pZCBzYXZlRG9jdW1lbnRTdGF0ZSgpID0gMDsKICAgdmly
dHVhbCB2b2lkIHJlc3RvcmVEb2N1bWVudFN0YXRlKCkgPSAwOwpJbmRleDogcGFnZS9GcmFtZVZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTIyNTEp
CisrKyBwYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNCw3ICsyMzQsNyBA
QAogICAgIHNldFN0YXRpY0JhY2tncm91bmQoZmFsc2UpOwogICAgIAogICAgIC8vIEZJWE1FOiA2
NDk4IFNob3VsZCBqdXN0IGJlIGFibGUgdG8gY2FsbCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5jbGVh
cigpCi0gICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoKSk7Cisg
ICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKCkpOwogCiAg
ICAgZC0+cmVzZXQoKTsKIApJbmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFn
ZS9GcmFtZS5jcHAJKHJldmlzaW9uIDEyMjUxKQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1NSw3ICsxNTUsOSBAQAogICBmcmFtZUNvdW50ID0gMDsKIAogICBkID0gbmV3
IEZyYW1lUHJpdmF0ZShwYXJlbnQoKSk7Ci0KKyAgZC0+bV9zZWxlY3Rpb24gPSBuZXcgU2VsZWN0
aW9uQ29udHJvbGxlcigpOworICBkLT5tX2RyYWdDYXJldCA9IG5ldyBTZWxlY3Rpb25Db250cm9s
bGVyKCk7CisgIGQtPm1fbWFyayA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKCk7CiAgIGQtPm1f
dmlldyA9IHZpZXc7CiAgIHNldFdpZGdldCggZC0+bV92aWV3ICk7CiAgIApAQCAtMTMxOCwxNyAr
MTMyMCwxNyBAQAogCiBRU3RyaW5nIEZyYW1lOjpzZWxlY3RlZFRleHQoKSBjb25zdAogewotICAg
IHJldHVybiBwbGFpblRleHQoc2VsZWN0aW9uKCkudG9SYW5nZSgpLmdldCgpKTsKKyAgICByZXR1
cm4gcGxhaW5UZXh0KHNlbGVjdGlvbigpLT50b1JhbmdlKCkuZ2V0KCkpOwogfQogCiBib29sIEZy
YW1lOjpoYXNTZWxlY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBkLT5tX3NlbGVjdGlvbi5p
c0NhcmV0T3JSYW5nZSgpOworICAgIHJldHVybiBzZWxlY3Rpb24oKS0+aXNDYXJldE9yUmFuZ2Uo
KTsKIH0KIAotU2VsZWN0aW9uQ29udHJvbGxlciAmRnJhbWU6OnNlbGVjdGlvbigpIGNvbnN0CitT
ZWxlY3Rpb25Db250cm9sbGVyICpGcmFtZTo6c2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZC0+bV9zZWxlY3Rpb247CisgICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9uLmdldCgpOwogfQog
CiBFVGV4dEdyYW51bGFyaXR5IEZyYW1lOjpzZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0CkBA
IC0xMzQxLDMzICsxMzQzLDQwIEBACiAgICAgZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSA9IGdy
YW51bGFyaXR5OwogfQogCi1jb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZGcmFtZTo6ZHJhZ0Nh
cmV0KCkgY29uc3QKK1NlbGVjdGlvbkNvbnRyb2xsZXIgKkZyYW1lOjpkcmFnQ2FyZXQoKSBjb25z
dAogewotICAgIHJldHVybiBkLT5tX2RyYWdDYXJldDsKKyAgICByZXR1cm4gZC0+bV9kcmFnQ2Fy
ZXQuZ2V0KCk7CiB9CiAKLWNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbiYgRnJhbWU6Om1hcmsoKSBj
b25zdAorU2VsZWN0aW9uQ29udHJvbGxlciAqRnJhbWU6Om1hcmsoKSBjb25zdAogewotICAgIHJl
dHVybiBkLT5tX21hcms7CisgICAgcmV0dXJuIGQtPm1fbWFyay5nZXQoKTsKIH0KIAotdm9pZCBG
cmFtZTo6c2V0TWFyayhjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb24mIHMpCit2b2lkIEZyYW1lOjpz
ZXRNYXJrKFNlbGVjdGlvbkNvbnRyb2xsZXIgKnMpCiB7CiAgICAgZC0+bV9tYXJrID0gczsKIH0K
IAotdm9pZCBGcmFtZTo6c2V0U2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJnMs
IGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wga2VlcFR5cGluZ1N0eWxlKQordm9pZCBGcmFtZTo6c2V0
U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIgKm5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5
cGluZywgYm9vbCBrZWVwVHlwaW5nU3R5bGUpCiB7Ci0gICAgaWYgKGQtPm1fc2VsZWN0aW9uID09
IHMpIHsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyICpvbGRTZWxlY3Rpb24gPSBzZWxlY3Rpb24o
KTsKKworICAgIEFTU0VSVChuZXdTZWxlY3Rpb24pOworICAgIEFTU0VSVChvbGRTZWxlY3Rpb24p
OworICAgIAorICAgIGlmICgqbmV3U2VsZWN0aW9uID09ICpvbGRTZWxlY3Rpb24pCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAgICAgCiAgICAgY2xlYXJDYXJldFJlY3RJZk5lZWRlZCgpOwotCi0g
ICAgU2VsZWN0aW9uQ29udHJvbGxlciBvbGRTZWxlY3Rpb24gPSBkLT5tX3NlbGVjdGlvbjsKLQot
ICAgIGQtPm1fc2VsZWN0aW9uID0gczsKLSAgICBpZiAoIXMuaXNOb25lKCkpCisgICAgCisgICAg
RG9jdW1lbnRJbXBsICpkb2N1bWVudCA9IHhtbERvY0ltcGwoKTsKKyAgICBkb2N1bWVudC0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihET01Ob2RlUmVtb3ZlZEV2ZW50LCBvbGRTZWxlY3Rpb24sIGZhbHNl
KTsKKyAgICBkb2N1bWVudC0+YWRkRXZlbnRMaXN0ZW5lcihET01Ob2RlUmVtb3ZlZEV2ZW50LCBu
ZXdTZWxlY3Rpb24sIGZhbHNlKTsKKyAgICAKKyAgICBkLT5tX3NlbGVjdGlvbiA9IG5ld1NlbGVj
dGlvbjsKKyAgICAKKyAgICBpZiAoIXNlbGVjdGlvbigpLT5pc05vbmUoKSkKICAgICAgICAgc2V0
Rm9jdXNOb2RlSWZOZWVkZWQoKTsKICAgICAKICAgICBzZWxlY3Rpb25MYXlvdXRDaGFuZ2VkKCk7
CkBAIC0xMzg1LDE5ICsxMzk0LDIxIEBACiAgICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihv
bGRTZWxlY3Rpb24sIGNsb3NlVHlwaW5nKTsKIH0KIAotdm9pZCBGcmFtZTo6c2V0RHJhZ0NhcmV0
KGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJmRyYWdDYXJldCkKK3ZvaWQgRnJhbWU6OnNldERy
YWdDYXJldChTZWxlY3Rpb25Db250cm9sbGVyICpuZXdEcmFnQ2FyZXQpCiB7Ci0gICAgaWYgKGQt
Pm1fZHJhZ0NhcmV0ICE9IGRyYWdDYXJldCkgewotICAgICAgICBkLT5tX2RyYWdDYXJldC5uZWVk
c0NhcmV0UmVwYWludCgpOwotICAgICAgICBkLT5tX2RyYWdDYXJldCA9IGRyYWdDYXJldDsKLSAg
ICAgICAgZC0+bV9kcmFnQ2FyZXQubmVlZHNDYXJldFJlcGFpbnQoKTsKLSAgICB9CisgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlciAqb2xkRHJhZ0NhcmV0ID0gZHJhZ0NhcmV0KCk7CisgICAgaWYgKCpv
bGREcmFnQ2FyZXQgIT0gKm5ld0RyYWdDYXJldCkgeworICAgICAgICBkLT5tX2RyYWdDYXJldC0+
bmVlZHNDYXJldFJlcGFpbnQoKTsKKyAgICAgICAgZC0+bV9kcmFnQ2FyZXQgPSBuZXdEcmFnQ2Fy
ZXQ7CisgICAgICAgIGQtPm1fZHJhZ0NhcmV0LT5uZWVkc0NhcmV0UmVwYWludCgpOworICAgIH0g
ZWxzZSBpZiAob2xkRHJhZ0NhcmV0ICE9IG5ld0RyYWdDYXJldCkKKyAgICAgICAgZC0+bV9kcmFn
Q2FyZXQgPSBuZXdEcmFnQ2FyZXQ7CiB9CiAKIHZvaWQgRnJhbWU6OmludmFsaWRhdGVTZWxlY3Rp
b24oKQogewogICAgIGNsZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKTsKLSAgICBkLT5tX3NlbGVjdGlv
bi5zZXROZWVkc0xheW91dCgpOworICAgIHNlbGVjdGlvbigpLT5zZXROZWVkc0xheW91dCgpOwog
ICAgIHNlbGVjdGlvbkxheW91dENoYW5nZWQoKTsKIH0KIApAQCAtMTQxMiwxMyArMTQyMywxMiBA
QAogICAgIHNlbGVjdGlvbkxheW91dENoYW5nZWQoKTsKIH0KIAotCiB2b2lkIEZyYW1lOjpjbGVh
ckNhcmV0UmVjdElmTmVlZGVkKCkKIHsKICAgICBpZiAoZC0+bV9jYXJldFBhaW50KSB7CiAgICAg
ICAgIGQtPm1fY2FyZXRQYWludCA9IGZhbHNlOwotICAgICAgICBkLT5tX3NlbGVjdGlvbi5uZWVk
c0NhcmV0UmVwYWludCgpOwotICAgIH0gICAgICAgIAorICAgICAgICBzZWxlY3Rpb24oKS0+bmVl
ZHNDYXJldFJlcGFpbnQoKTsKKyAgICB9CiB9CiAKIC8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IHRl
bGxzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIG5vZGUgaXMgYW4gZWxlbWVudCB0aGF0IGhhcyBhbiBl
bnRpcmUKQEAgLTE0MzYsMTAgKzE0NDYsMTAgQEAKIAogdm9pZCBGcmFtZTo6c2V0Rm9jdXNOb2Rl
SWZOZWVkZWQoKQogewotICAgIGlmICgheG1sRG9jSW1wbCgpIHx8IGQtPm1fc2VsZWN0aW9uLmlz
Tm9uZSgpIHx8ICFkLT5tX2lzRm9jdXNlZCkKKyAgICBpZiAoIXhtbERvY0ltcGwoKSB8fCBzZWxl
Y3Rpb24oKS0+aXNOb25lKCkgfHwgIWQtPm1faXNGb2N1c2VkKQogICAgICAgICByZXR1cm47CiAK
LSAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gZC0+bV9zZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7
CisgICAgTm9kZUltcGwgKnN0YXJ0Tm9kZSA9IHNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsK
ICAgICBOb2RlSW1wbCAqdGFyZ2V0ID0gc3RhcnROb2RlID8gc3RhcnROb2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KCkgOiAwOwogICAgIAogICAgIGlmICh0YXJnZXQpIHsKQEAgLTE0NjYsMTAgKzE0
NzYsMTAgQEAKIAogICAgIC8vIHNlZSBpZiBhIG5ldyBjYXJldCBibGluayB0aW1lciBuZWVkcyB0
byBiZSBzdGFydGVkCiAgICAgaWYgKGQtPm1fY2FyZXRWaXNpYmxlICYmIGQtPm1fY2FyZXRCbGlu
a3MgJiYgCi0gICAgICAgIGQtPm1fc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBkLT5tX3NlbGVjdGlv
bi5zdGFydCgpLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkgeworICAgICAgICBzZWxlY3Rp
b24oKS0+aXNDYXJldCgpICYmIHNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKS0+aXNDb250ZW50
RWRpdGFibGUoKSkgewogICAgICAgICBkLT5tX2NhcmV0QmxpbmtUaW1lciA9IHN0YXJ0VGltZXIo
Q0FSRVRfQkxJTktfRlJFUVVFTkNZKTsKICAgICAgICAgZC0+bV9jYXJldFBhaW50ID0gdHJ1ZTsK
LSAgICAgICAgZC0+bV9zZWxlY3Rpb24ubmVlZHNDYXJldFJlcGFpbnQoKTsKKyAgICAgICAgc2Vs
ZWN0aW9uKCktPm5lZWRzQ2FyZXRSZXBhaW50KCk7CiAgICAgfQogCiAgICAgaWYgKGQtPm1fZG9j
KQpAQCAtMTQ5MSwxNiArMTUwMSwxNiBAQAogICAgIGlmIChlLT50aW1lcklkKCkgPT0gZC0+bV9j
YXJldEJsaW5rVGltZXIgJiYgCiAgICAgICAgIGQtPm1fY2FyZXRWaXNpYmxlICYmIAogICAgICAg
ICBkLT5tX2NhcmV0QmxpbmtzICYmIAotICAgICAgICBkLT5tX3NlbGVjdGlvbi5pc0NhcmV0KCkp
IHsKKyAgICAgICAgc2VsZWN0aW9uKCktPmlzQ2FyZXQoKSkgewogICAgICAgICBpZiAoZC0+bV9i
TW91c2VQcmVzc2VkKSB7CiAgICAgICAgICAgICBpZiAoIWQtPm1fY2FyZXRQYWludCkgewogICAg
ICAgICAgICAgICAgIGQtPm1fY2FyZXRQYWludCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZC0+
bV9zZWxlY3Rpb24ubmVlZHNDYXJldFJlcGFpbnQoKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rp
b24oKS0+bmVlZHNDYXJldFJlcGFpbnQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIGQtPm1fY2FyZXRQYWludCA9ICFkLT5tX2NhcmV0UGFp
bnQ7Ci0gICAgICAgICAgICBkLT5tX3NlbGVjdGlvbi5uZWVkc0NhcmV0UmVwYWludCgpOworICAg
ICAgICAgICAgc2VsZWN0aW9uKCktPm5lZWRzQ2FyZXRSZXBhaW50KCk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkBAIC0xNTA4LDEyICsxNTE4LDEyIEBACiB2b2lkIEZyYW1lOjpwYWludENhcmV0KFFQ
YWludGVyICpwLCBjb25zdCBJbnRSZWN0ICZyZWN0KSBjb25zdAogewogICAgIGlmIChkLT5tX2Nh
cmV0UGFpbnQpCi0gICAgICAgIGQtPm1fc2VsZWN0aW9uLnBhaW50Q2FyZXQocCwgcmVjdCk7Cisg
ICAgICAgIHNlbGVjdGlvbigpLT5wYWludENhcmV0KHAsIHJlY3QpOwogfQogCiB2b2lkIEZyYW1l
OjpwYWludERyYWdDYXJldChRUGFpbnRlciAqcCwgY29uc3QgSW50UmVjdCAmcmVjdCkgY29uc3QK
IHsKLSAgICBkLT5tX2RyYWdDYXJldC5wYWludENhcmV0KHAsIHJlY3QpOworICAgIGRyYWdDYXJl
dCgpLT5wYWludENhcmV0KHAsIHJlY3QpOwogfQogCiB2b2lkIEZyYW1lOjp1cmxTZWxlY3RlZCgg
Y29uc3QgUVN0cmluZyAmdXJsLCBpbnQgYnV0dG9uLCBpbnQgc3RhdGUsIGNvbnN0IFFTdHJpbmcg
Jl90YXJnZXQsCkBAIC0yMTQyLDcgKzIxNTIsNyBAQAogYm9vbCBGcmFtZTo6aXNQb2ludEluc2lk
ZVNlbGVjdGlvbihpbnQgeCwgaW50IHkpCiB7CiAgICAgLy8gVHJlYXQgYSBjb2xsYXBzZWQgc2Vs
ZWN0aW9uIGxpa2Ugbm8gc2VsZWN0aW9uLgotICAgIGlmICghZC0+bV9zZWxlY3Rpb24uaXNSYW5n
ZSgpKQorICAgIGlmICghc2VsZWN0aW9uKCktPmlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICgheG1sRG9jSW1wbCgpLT5yZW5kZXJlcigpKSAKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMjE1NywxNiArMjE2NywxNiBAQAogICAgIGlmIChwb3MuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5vZGVJbXBsICpuID0gZC0+bV9zZWxlY3Rpb24u
c3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZUltcGwgKm4gPSBzZWxlY3Rpb24oKS0+c3RhcnQoKS5u
b2RlKCk7CiAgICAgd2hpbGUgKG4pIHsKICAgICAgICAgaWYgKG4gPT0gcG9zLm5vZGUoKSkgewot
ICAgICAgICAgICAgaWYgKChuID09IGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpICYmIHBv
cy5vZmZzZXQoKSA8IGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkub2Zmc2V0KCkpIHx8Ci0gICAgICAg
ICAgICAgICAgKG4gPT0gZC0+bV9zZWxlY3Rpb24uZW5kKCkubm9kZSgpICYmIHBvcy5vZmZzZXQo
KSA+IGQtPm1fc2VsZWN0aW9uLmVuZCgpLm9mZnNldCgpKSkgeworICAgICAgICAgICAgaWYgKChu
ID09IHNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKSAmJiBwb3Mub2Zmc2V0KCkgPCBzZWxlY3Rp
b24oKS0+c3RhcnQoKS5vZmZzZXQoKSkgfHwKKyAgICAgICAgICAgICAgICAobiA9PSBzZWxlY3Rp
b24oKS0+ZW5kKCkubm9kZSgpICYmIHBvcy5vZmZzZXQoKSA+IHNlbGVjdGlvbigpLT5lbmQoKS5v
ZmZzZXQoKSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAobiA9PSBk
LT5tX3NlbGVjdGlvbi5lbmQoKS5ub2RlKCkpCisgICAgICAgIGlmIChuID09IHNlbGVjdGlvbigp
LT5lbmQoKS5ub2RlKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbiA9IG4tPnRyYXZl
cnNlTmV4dE5vZGUoKTsKICAgICB9CkBAIC0yMTc2LDI5ICsyMTg2LDMyIEBACiAKIHZvaWQgRnJh
bWU6OnNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQgKm1vdXNlLCBO
b2RlSW1wbCAqaW5uZXJOb2RlLCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJv
bGxlciBzZWxlY3Rpb247Ci0KICAgICBpZiAoaW5uZXJOb2RlICYmIGlubmVyTm9kZS0+cmVuZGVy
ZXIoKSAmJiBtb3VzZURvd25NYXlTdGFydFNlbGVjdCgpICYmIGlubmVyTm9kZS0+cmVuZGVyZXIo
KS0+c2hvdWxkU2VsZWN0KCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbm5lck5v
ZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCwgeSkpOwotICAgICAgICBp
ZiAocG9zLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHBvcyk7
Ci0gICAgICAgICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXT1JEKTsKKyAg
ICAgICAgaWYgKHBvcy5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0
aW9uQ29udHJvbGxlcigpOworICAgIAorICAgICAgICBzZWxlY3Rpb24tPm1vdmVUbyhwb3MpOwor
ICAgICAgICBzZWxlY3Rpb24tPmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV09SRCk7CisgICAgICAg
IAorICAgICAgICBpZiAoIXNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIHNldFNlbGVjdGlvbihz
ZWxlY3Rpb24uZ2V0KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKHNlbGVjdGlvbi0+aXNSYW5n
ZSgpKSB7CisgICAgICAgICAgICBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5ID0gV09SRDsKKyAg
ICAgICAgICAgIGQtPm1fYmVnYW5TZWxlY3RpbmdUZXh0ID0gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0KLSAgICAKLSAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICBkLT5tX3Nl
bGVjdGlvbkdyYW51bGFyaXR5ID0gV09SRDsKLSAgICAgICAgZC0+bV9iZWdhblNlbGVjdGluZ1Rl
eHQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNl
bGVjdGlvbikpCi0gICAgICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogfQogCiB2b2lkIEZy
YW1lOjpoYW5kbGVNb3VzZVByZXNzRXZlbnREb3VibGVDbGljayhNb3VzZVByZXNzRXZlbnQgKmV2
ZW50KQogewogICAgIGlmIChldmVudC0+cW1vdXNlRXZlbnQoKS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgewotICAgICAgICBpZiAoc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGlm
IChzZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7CiAgICAgICAgICAgICAvLyBBIGRvdWJsZS1jbGlj
ayB3aGVuIHJhbmdlIGlzIGFscmVhZHkgc2VsZWN0ZWQKICAgICAgICAgICAgIC8vIHNob3VsZCBu
b3QgY2hhbmdlIHRoZSBzZWxlY3Rpb24uICBTbywgZG8gbm90IGNhbGwKICAgICAgICAgICAgIC8v
IHNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQsIGJ1dCBkbyBzZXQKQEAgLTIyMTgsMTkg
KzIyMzEsMjQgQEAKICAgICAKICAgICBpZiAobW91c2UtPmJ1dHRvbigpID09IExlZnRCdXR0b24g
JiYgaW5uZXJOb2RlICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKSAmJgogICAgICAgICBtb3VzZURv
d25NYXlTdGFydFNlbGVjdCgpICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+c2hvdWxkU2VsZWN0
KCkpIHsKLSAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb247CisgICAgICAgIAor
ICAgICAgICBSZWZQdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gc2VsZWN0aW9uID0gbmV3IFNlbGVj
dGlvbkNvbnRyb2xsZXIoKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUt
PnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoZXZlbnQtPngoKSwgZXZlbnQtPnko
KSkpOwotICAgICAgICBpZiAocG9zLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgICAgICBzZWxlY3Rp
b24ubW92ZVRvKHBvcyk7Ci0gICAgICAgICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxh
cml0eShQQVJBR1JBUEgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzZWxlY3Rpb24uaXNSYW5n
ZSgpKSB7CisgICAgICAgIGlmIChwb3MuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgc2VsZWN0aW9uLT5tb3ZlVG8ocG9zKTsKKyAgICAgICAgc2VsZWN0aW9uLT5leHBh
bmRVc2luZ0dyYW51bGFyaXR5KFBBUkFHUkFQSCk7CisgICAgICAgIAorICAgICAgICBpZiAoIXNo
b3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgCisgICAgICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHNlbGVjdGlvbi0+aXNSYW5nZSgpKSB7CiAgICAgICAgICAg
ICBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5ID0gUEFSQUdSQVBIOwogICAgICAgICAgICAgZC0+
bV9iZWdhblNlbGVjdGluZ1RleHQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCi0gICAgICAgICAgICBzZXRT
ZWxlY3Rpb24oc2VsZWN0aW9uKTsKICAgICB9CiB9CiAKQEAgLTIyNDIsNyArMjI2MCw2IEBACiAg
ICAgaWYgKG1vdXNlLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChpbm5l
ck5vZGUgJiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpICYmCiAgICAgICAgICAgICBtb3VzZURvd25N
YXlTdGFydFNlbGVjdCgpICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+c2hvdWxkU2VsZWN0KCkp
IHsKLSAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBFeHRlbmQgdGhlIHNlbGVjdGlvbiBpZiB0aGUgU2hpZnQga2V5IGlzIGRv
d24sIHVubGVzcyB0aGUgY2xpY2sgaXMgaW4gYSBsaW5rLgogICAgICAgICAgICAgYm9vbCBleHRl
bmRTZWxlY3Rpb24gPSAobW91c2UtPnN0YXRlKCkgJiBTaGlmdEJ1dHRvbikgJiYgKGV2ZW50LT51
cmwoKS5pc051bGwoKSk7CkBAIC0yMjU4LDMxICsyMjc1LDM3IEBACiAgICAgICAgICAgICAgICAg
dmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihpbm5lck5vZGUsIGlubmVyTm9kZS0+Y2FyZXRN
aW5PZmZzZXQoKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBQb3NpdGlvbiBwb3MgPSB2aXNp
YmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNlbCA9
IHNlbGVjdGlvbigpOwotICAgICAgICAgICAgaWYgKGV4dGVuZFNlbGVjdGlvbiAmJiBzZWwuaXND
YXJldE9yUmFuZ2UoKSkgewotICAgICAgICAgICAgICAgIHNlbC5jbGVhck1vZGlmeUJpYXMoKTsK
KyAgICAgICAgICAgIFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzZWwgPSBuZXcgU2VsZWN0
aW9uQ29udHJvbGxlcigqc2VsZWN0aW9uKCkpOworICAgICAgICAgICAgaWYgKGV4dGVuZFNlbGVj
dGlvbiAmJiBzZWwtPmlzQ2FyZXRPclJhbmdlKCkpIHsKKyAgICAgICAgICAgICAgICBzZWwtPmNs
ZWFyTW9kaWZ5QmlhcygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFNl
ZSA8cmRhcjovL3Byb2JsZW0vMzY2ODE1Nz4gUkVHUkVTU0lPTiAoTWFpbCk6IHNoaWZ0LWNsaWNr
IGRlc2VsZWN0cyB3aGVuIHNlbGVjdGlvbiAKICAgICAgICAgICAgICAgICAvLyB3YXMgY3JlYXRl
ZCByaWdodC10by1sZWZ0Ci0gICAgICAgICAgICAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWwuc3Rh
cnQoKTsKKyAgICAgICAgICAgICAgICBQb3NpdGlvbiBzdGFydCA9IHNlbC0+c3RhcnQoKTsKKyAg
ICAgICAgICAgICAgICBQb3NpdGlvbiBlbmQgPSBzZWwtPmVuZCgpOwogICAgICAgICAgICAgICAg
IHNob3J0IGJlZm9yZSA9IFJhbmdlSW1wbDo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBvcy5ub2Rl
KCksIHBvcy5vZmZzZXQoKSwgc3RhcnQubm9kZSgpLCBzdGFydC5vZmZzZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGJlZm9yZSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbC5zZXRC
YXNlQW5kRXh0ZW50KHBvcy5ub2RlKCksIHBvcy5vZmZzZXQoKSwgc2VsLmVuZCgpLm5vZGUoKSwg
c2VsLmVuZCgpLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBzZWwuc2V0QmFzZUFuZEV4dGVudChzdGFydC5ub2RlKCksIHN0YXJ0Lm9mZnNl
dCgpLCBwb3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoYmVmb3JlIDw9IDApCisgICAgICAgICAgICAgICAgICAgIHNlbC0+c2V0
QmFzZUFuZEV4dGVudChwb3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCksIGVuZC5ub2RlKCksIGVuZC5v
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWwt
PnNldEJhc2VBbmRFeHRlbnQoc3RhcnQubm9kZSgpLCBzdGFydC5vZmZzZXQoKSwgcG9zLm5vZGUo
KSwgcG9zLm9mZnNldCgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChkLT5tX3NlbGVjdGlvbkdy
YW51bGFyaXR5ICE9IENIQVJBQ1RFUikgewotICAgICAgICAgICAgICAgICAgICBzZWwuZXhwYW5k
VXNpbmdHcmFudWxhcml0eShkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5KTsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkgIT0g
Q0hBUkFDVEVSKQorICAgICAgICAgICAgICAgICAgICBzZWwtPmV4cGFuZFVzaW5nR3JhbnVsYXJp
dHkoZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKCFzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsLmdldCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGQt
Pm1fYmVnYW5TZWxlY3RpbmdUZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzZXRTZWxlY3Rp
b24oc2VsLmdldCgpKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgc2VsID0gU2VsZWN0aW9uQ29udHJvbGxlcih2aXNpYmxlUG9zKTsKKyAg
ICAgICAgICAgICAgICBzZWwgPSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcih2aXNpYmxlUG9zKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwuZ2V0KCkpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSA9IENIQVJBQ1RFUjsKKyAgICAgICAgICAg
ICAgICBzZXRTZWxlY3Rpb24oc2VsLmdldCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKQotICAgICAgICAg
ICAgICAgIHNldFNlbGVjdGlvbihzZWwpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjM0MCwy
MCArMjM2MywyNCBAQAogCiAgICAgLy8gUmVzdGFydCB0aGUgc2VsZWN0aW9uIGlmIHRoaXMgaXMg
dGhlIGZpcnN0IG1vdXNlIG1vdmUuIFRoaXMgd29yayBpcyB1c3VhbGx5CiAgICAgLy8gZG9uZSBp
biBraHRtbE1vdXNlUHJlc3NFdmVudCwgYnV0IG5vdCBpZiB0aGUgbW91c2UgcHJlc3Mgd2FzIG9u
IGFuIGV4aXN0aW5nIHNlbGVjdGlvbi4KLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbCA9IHNl
bGVjdGlvbigpOwotICAgIHNlbC5jbGVhck1vZGlmeUJpYXMoKTsKKyAgICBSZWZQdHI8U2VsZWN0
aW9uQ29udHJvbGxlcj4gc2VsID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoKnNlbGVjdGlvbigp
KTsKKyAgICBzZWwtPmNsZWFyTW9kaWZ5QmlhcygpOwogICAgIAotICAgIGlmICghZC0+bV9iZWdh
blNlbGVjdGluZ1RleHQpIHsKKyAgICBpZiAoIWQtPm1fYmVnYW5TZWxlY3RpbmdUZXh0KQorICAg
ICAgICBzZWwtPm1vdmVUbyhwb3MpOworICAgIAorICAgIHNlbC0+c2V0RXh0ZW50KHBvcyk7Cisg
ICAgCisgICAgaWYgKGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkgIT0gQ0hBUkFDVEVSKQorICAg
ICAgICBzZWwtPmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0
eSk7CisgICAgCisgICAgaWYgKCFzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsLmdldCgpKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghZC0+bV9iZWdhblNlbGVjdGluZ1RleHQpCiAg
ICAgICAgIGQtPm1fYmVnYW5TZWxlY3RpbmdUZXh0ID0gdHJ1ZTsKLSAgICAgICAgc2VsLm1vdmVU
byhwb3MpOwotICAgIH0KIAotICAgIHNlbC5zZXRFeHRlbnQocG9zKTsKLSAgICBpZiAoZC0+bV9z
ZWxlY3Rpb25HcmFudWxhcml0eSAhPSBDSEFSQUNURVIpCi0gICAgICAgIHNlbC5leHBhbmRVc2lu
Z0dyYW51bGFyaXR5KGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkpOwotCi0gICAgaWYgKHNob3Vs
ZENoYW5nZVNlbGVjdGlvbihzZWwpKQotICAgICAgICBzZXRTZWxlY3Rpb24oc2VsKTsKKyAgICBz
ZXRTZWxlY3Rpb24oc2VsLmdldCgpKTsKIH0KIAogdm9pZCBGcmFtZTo6a2h0bWxNb3VzZU1vdmVF
dmVudChNb3VzZU1vdmVFdmVudCAqZXZlbnQpCkBAIC0yMzczLDE1ICsyNDAwLDE3IEBACiAgICAg
aWYgKG1vdXNlRG93bk1heVN0YXJ0U2VsZWN0KCkgJiYgIWQtPm1fYmVnYW5TZWxlY3RpbmdUZXh0
CiAgICAgICAgICAgICAmJiBkLT5tX2RyYWdTdGFydFBvcy54KCkgPT0gZXZlbnQtPnFtb3VzZUV2
ZW50KCktPngoKQogICAgICAgICAgICAgJiYgZC0+bV9kcmFnU3RhcnRQb3MueSgpID09IGV2ZW50
LT5xbW91c2VFdmVudCgpLT55KCkKLSAgICAgICAgICAgICYmIGQtPm1fc2VsZWN0aW9uLmlzUmFu
Z2UoKSkgewotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbjsKKyAgICAgICAg
ICAgICYmIHNlbGVjdGlvbigpLT5pc1JhbmdlKCkpIHsKKyAgICAgICAgCiAgICAgICAgIE5vZGVJ
bXBsICpub2RlID0gZXZlbnQtPmlubmVyTm9kZSgpOwogICAgICAgICBpZiAobm9kZSAmJiBub2Rl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uQ29u
dHJvbGxlcigpOwogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyA9IG5vZGUtPnJlbmRl
cmVyKCktPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoZXZlbnQtPngoKSwgZXZlbnQtPnkoKSk7Ci0g
ICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHBvcyk7CisgICAgICAgICAgICBzZWxlY3Rpb24t
Pm1vdmVUbyhwb3MpOworICAgICAgICAgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxl
Y3Rpb24uZ2V0KCkpKQorICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0
KCkpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0
aW9uKSkKLSAgICAgICAgICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pOworCiAgICAgfQogICAg
IHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7CiB9CkBAIC0yMzkx
LDcgKzI0MjAsNyBAQAogICAgIGlmICghZC0+bV9kb2MpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gZC0+bV9zZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7
CisgICAgTm9kZUltcGwgKnN0YXJ0Tm9kZSA9IHNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsK
ICAgICBOb2RlSW1wbCAqcm9vdCA9IHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkgPyBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IGQtPm1fZG9jLT5k
b2N1bWVudEVsZW1lbnQoKTsKICAgICAKICAgICBzZWxlY3RDb250ZW50c09mTm9kZShyb290KTsK
QEAgLTI0MDAsMTcgKzI0MjksMTcgQEAKIAogYm9vbCBGcmFtZTo6c2VsZWN0Q29udGVudHNPZk5v
ZGUoTm9kZUltcGwqIG5vZGUpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWwgPSBTZWxl
Y3Rpb25Db250cm9sbGVyKFBvc2l0aW9uKG5vZGUsIDApLCBQb3NpdGlvbihub2RlLCBtYXhEZWVw
T2Zmc2V0KG5vZGUpKSwgRE9XTlNUUkVBTSk7ICAgIAotICAgIGlmIChzaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oc2VsKSkgewotICAgICAgICBzZXRTZWxlY3Rpb24oc2VsKTsKKyAgICBSZWZQdHI8U2Vs
ZWN0aW9uQ29udHJvbGxlcj4gc2VsID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24o
bm9kZSwgMCksIFBvc2l0aW9uKG5vZGUsIG1heERlZXBPZmZzZXQobm9kZSkpLCBET1dOU1RSRUFN
KTsgICAgCisgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwuZ2V0KCkpKSB7CisgICAg
ICAgIHNldFNlbGVjdGlvbihzZWwuZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZyYW1lOjpzaG91bGRDaGFuZ2VTZWxlY3Rp
b24oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmbmV3c2VsZWN0aW9uKSBjb25zdAorYm9vbCBG
cmFtZTo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIgKm5ld1NlbGVj
dGlvbikgY29uc3QKIHsKLSAgICByZXR1cm4gc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGQtPm1fc2Vs
ZWN0aW9uLCBuZXdzZWxlY3Rpb24sIG5ld3NlbGVjdGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7Cisg
ICAgcmV0dXJuIHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9u
LCBuZXdTZWxlY3Rpb24tPmFmZmluaXR5KCksIGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZTo6c2hv
dWxkQmVnaW5FZGl0aW5nKGNvbnN0IFJhbmdlSW1wbCAqcmFuZ2UpIGNvbnN0CkBAIC0yNDM3LDkg
KzI0NjYsOSBAQAogCiB2b2lkIEZyYW1lOjphcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciAm
Y21kKQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsKGNtZC5lbmRpbmdTZWxlY3Rpb24o
KSk7Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKSB7Ci0gICAgICAgIHNldFNl
bGVjdGlvbihzZWwsIGZhbHNlKTsKKyAgICBSZWZQdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gc2Vs
ID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoY21kLmVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBp
ZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbC5nZXQoKSkpIHsKKyAgICAgICAgc2V0U2VsZWN0
aW9uKHNlbC5nZXQoKSwgZmFsc2UpOwogICAgIH0KIAogICAgIC8vIE5vdyBzZXQgdGhlIHR5cGlu
ZyBzdHlsZSBmcm9tIHRoZSBjb21tYW5kLiBDbGVhciBpdCB3aGVuIGRvbmUuCkBAIC0yNDY4LDkg
KzI0OTcsOSBAQAogCiB2b2lkIEZyYW1lOjp1bmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kUHRy
ICZjbWQpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWwoY21kLnN0YXJ0aW5nU2VsZWN0
aW9uKCkpOwotICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkgewotICAgICAgICBz
ZXRTZWxlY3Rpb24oc2VsLCB0cnVlKTsKKyAgICBSZWZQdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4g
c2VsID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoY21kLnN0YXJ0aW5nU2VsZWN0aW9uKCkpOwor
ICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsLmdldCgpKSkgeworICAgICAgICBzZXRT
ZWxlY3Rpb24oc2VsLmdldCgpLCB0cnVlKTsKICAgICB9CiAgICAgcmVnaXN0ZXJDb21tYW5kRm9y
UmVkbyhjbWQpOwogICAgIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwpAQCAtMjQ3OSw5ICsy
NTA4LDkgQEAKIAogdm9pZCBGcmFtZTo6cmVhcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciAm
Y21kKQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsKGNtZC5lbmRpbmdTZWxlY3Rpb24o
KSk7Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKSB7Ci0gICAgICAgIHNldFNl
bGVjdGlvbihzZWwsIHRydWUpOworICAgIFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzZWwg
PSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcihjbWQuc3RhcnRpbmdTZWxlY3Rpb24oKSk7CisgICAg
aWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwuZ2V0KCkpKSB7CisgICAgICAgIHNldFNlbGVj
dGlvbihzZWwuZ2V0KCksIHRydWUpOwogICAgIH0KICAgICByZWdpc3RlckNvbW1hbmRGb3JVbmRv
KGNtZCk7CiAgICAgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CkBAIC0yNjYwLDcgKzI2ODks
NyBAQAogICAgICAgICBtdXRhYmxlU3R5bGUtPnJlZigpOwogICAgIH0KIAotICAgIE5vZGVJbXBs
ICpub2RlID0gVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigp
LmFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgIE5vZGVJbXBsICpub2Rl
ID0gVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLT5zdGFydCgpLCBzZWxlY3Rpb24oKS0+YWZm
aW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7CiAgICAgQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uSW1wbCBjb21wdXRlZFN0eWxlKG5vZGUpOwogICAgIGNvbXB1dGVkU3R5bGUuZGlm
ZihtdXRhYmxlU3R5bGUpOwogICAgIApAQCAtMjY4MSw3ICsyNzEwLDcgQEAKIAogdm9pZCBGcmFt
ZTo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUsIEVkaXRBY3Rpb24g
ZWRpdGluZ0FjdGlvbikKIHsKLSAgICBzd2l0Y2ggKHNlbGVjdGlvbigpLnN0YXRlKCkpIHsKKyAg
ICBzd2l0Y2ggKHNlbGVjdGlvbigpLT5zdGF0ZSgpKSB7CiAgICAgICAgIGNhc2UgV2ViQ29yZTo6
U2VsZWN0aW9uOjpOT05FOgogICAgICAgICAgICAgLy8gZG8gbm90aGluZwogICAgICAgICAgICAg
YnJlYWs7CkBAIC0yNzAwLDcgKzI3MjksNyBAQAogCiB2b2lkIEZyYW1lOjphcHBseVBhcmFncmFw
aFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0aW9uKQogewotICAgIHN3aXRjaCAoc2VsZWN0aW9uKCkuc3RhdGUoKSkgeworICAgIHN3aXRj
aCAoc2VsZWN0aW9uKCktPnN0YXRlKCkpIHsKICAgICAgICAgY2FzZSBXZWJDb3JlOjpTZWxlY3Rp
b246Ok5PTkU6CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgICAgICBicmVhazsK
QEAgLTI3NDEsNyArMjc3MCw3IEBACiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBs
ICptdXRhYmxlU3R5bGUgPSBzdHlsZS0+bWFrZU11dGFibGUoKTsKICAgICBSZWZQdHI8Q1NTU3R5
bGVEZWNsYXJhdGlvbkltcGw+IHByb3RlY3RRdWVyeVN0eWxlKG11dGFibGVTdHlsZSk7CiAKLSAg
ICBpZiAoIWQtPm1fc2VsZWN0aW9uLmlzUmFuZ2UoKSkgeworICAgIGlmICghc2VsZWN0aW9uKCkt
PmlzUmFuZ2UoKSkgewogICAgICAgICBOb2RlSW1wbCAqbm9kZVRvUmVtb3ZlOwogICAgICAgICBD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpzZWxlY3Rpb25TdHlsZSA9IHNlbGVjdGlv
bkNvbXB1dGVkU3R5bGUobm9kZVRvUmVtb3ZlKTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb25TdHls
ZSkKQEAgLTI3NTUsNyArMjc4NCw3IEBACiAgICAgICAgICAgICBhc3NlcnQoZXhjZXB0aW9uQ29k
ZSA9PSAwKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoTm9kZUltcGwg
Km5vZGUgPSBkLT5tX3NlbGVjdGlvbi5zdGFydCgpLm5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBmb3IgKE5vZGVJbXBsICpub2RlID0gc2Vs
ZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpKSB7CiAgICAgICAgICAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpj
b21wdXRlZFN0eWxlID0gbmV3IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbkltcGwobm9kZSk7
CiAgICAgICAgICAgICBpZiAoY29tcHV0ZWRTdHlsZSkgewogICAgICAgICAgICAgICAgIGNvbXB1
dGVkU3R5bGUtPnJlZigpOwpAQCAtMjc2NCw3ICsyNzkzLDcgQEAKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChzdGF0ZSA9PSBtaXhlZFRyaVN0YXRlKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gZC0+bV9zZWxlY3Rpb24uZW5kKCkubm9kZSgp
KQorICAgICAgICAgICAgaWYgKG5vZGUgPT0gc2VsZWN0aW9uKCktPmVuZCgpLm5vZGUoKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTI4MzAsMTAgKzI4NTks
MTAgQEAKICAgICBpZiAoIXhtbERvY0ltcGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBp
ZiAoZC0+bV9zZWxlY3Rpb24uaXNOb25lKCkpCisgICAgaWYgKHNlbGVjdGlvbigpLT5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8UmFuZ2VJbXBsPiByYW5nZShkLT5t
X3NlbGVjdGlvbi50b1JhbmdlKCkpOworICAgIFJlZlB0cjxSYW5nZUltcGw+IHJhbmdlKHNlbGVj
dGlvbigpLT50b1JhbmdlKCkpOwogICAgIFBvc2l0aW9uIHBvcyA9IHJhbmdlLT5lZGl0aW5nU3Rh
cnRQb3NpdGlvbigpOwogCiAgICAgRWxlbWVudEltcGwgKmVsZW0gPSBwb3MuZWxlbWVudCgpOwpA
QCAtMzAyNywxMSArMzA1NiwxMSBAQAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDaGVjayBp
ZiB0aGUgc2VsZWN0aW9uIGNvbnRhaW5zIHRoZSBlbnRpcmUgZnJhbWUgY29udGVudHM7IGlmIG5v
dCwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLgotICAgIGlmICghZC0+bV9zZWxlY3Rpb24u
aXNSYW5nZSgpKQorICAgIGlmICghc2VsZWN0aW9uKCktPmlzUmFuZ2UoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGlmICghaXNTdGFydE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKGQtPm1fc2Vs
ZWN0aW9uLnN0YXJ0KCksIGQtPm1fc2VsZWN0aW9uLmFmZmluaXR5KCkpKSkKKyAgICBpZiAoIWlz
U3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS0+c3RhcnQoKSwgc2Vs
ZWN0aW9uKCktPmFmZmluaXR5KCkpKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNFbmRP
ZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihkLT5tX3NlbGVjdGlvbi5lbmQoKSwgZC0+bV9zZWxl
Y3Rpb24uYWZmaW5pdHkoKSkpKQorICAgIGlmICghaXNFbmRPZkRvY3VtZW50KFZpc2libGVQb3Np
dGlvbihzZWxlY3Rpb24oKS0+ZW5kKCksIHNlbGVjdGlvbigpLT5hZmZpbml0eSgpKSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEdldCB0byB0aGUgPGlmcmFtZT4gb3IgPGZyYW1lPiAob3Ig
ZXZlbiA8b2JqZWN0PikgZWxlbWVudCBpbiB0aGUgcGFyZW50IGZyYW1lLgpAQCAtMzA1MCwxMCAr
MzA3OSwxMSBAQAogICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVPd25lckVsZW1lbnQoVmlzaWJs
ZVBvc2l0aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVtZW50Tm9kZUluZGV4LCBTRUxf
REVGQVVMVF9BRkZJTklUWSkpOwogICAgIFZpc2libGVQb3NpdGlvbiBhZnRlck93bmVyRWxlbWVu
dChWaXNpYmxlUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5k
ZXggKyAxLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSkpOwogCisgICAgUmVmUHRyPFNlbGVjdGlv
bkNvbnRyb2xsZXI+IHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKGJlZm9yZU93
bmVyRWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQpOwogICAgIC8vIEZvY3VzIG9uIHRoZSBwYXJl
bnQgZnJhbWUsIGFuZCB0aGVuIHNlbGVjdCBmcm9tIGJlZm9yZSB0aGlzIGVsZW1lbnQgdG8gYWZ0
ZXIuCi0gICAgaWYgKHBhcmVudC0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRy
b2xsZXIoYmVmb3JlT3duZXJFbGVtZW50LCBhZnRlck93bmVyRWxlbWVudCkpKSB7CisgICAgaWYg
KHBhcmVudC0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbi5nZXQoKSkpIHsKICAgICAg
ICAgcGFyZW50Vmlldy0+c2V0Rm9jdXMoKTsKLSAgICAgICAgcGFyZW50LT5zZXRTZWxlY3Rpb24o
U2VsZWN0aW9uQ29udHJvbGxlcihiZWZvcmVPd25lckVsZW1lbnQsIGFmdGVyT3duZXJFbGVtZW50
KSk7CisgICAgICAgIHBhcmVudC0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbi5nZXQoKSk7CiAgICAg
fQogfQogCkBAIC0zMTY0LDcgKzMxOTQsNyBAQAogICAgIC8vIHN0YXJ0IGxvb2tpbmcgZWl0aGVy
IGF0IHRoZSBhY3RpdmUgKGZpcnN0IHJlc3BvbmRlcikgbm9kZSwgb3Igd2hlcmUgdGhlIHNlbGVj
dGlvbiBpcwogICAgIE5vZGVJbXBsICpzdGFydCA9IGQtPm1fZG9jID8gZC0+bV9kb2MtPmZvY3Vz
Tm9kZSgpIDogMDsKICAgICBpZiAoIXN0YXJ0KQotICAgICAgICBzdGFydCA9IHNlbGVjdGlvbigp
LnN0YXJ0KCkubm9kZSgpOworICAgICAgICBzdGFydCA9IHNlbGVjdGlvbigpLT5zdGFydCgpLm5v
ZGUoKTsKICAgICAKICAgICAvLyB0cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRvIGZpbmQg
YSBmb3JtIGVsZW1lbnQKICAgICBOb2RlSW1wbCAqbjsKQEAgLTMyMDEsMTIgKzMyMzEsMTIgQEAK
IHsKICAgICBJbnRSZWN0IHJlY3Q7CiAgICAgCi0gICAgc3dpdGNoIChzZWxlY3Rpb24oKS5zdGF0
ZSgpKSB7CisgICAgc3dpdGNoIChzZWxlY3Rpb24oKS0+c3RhdGUoKSkgewogICAgICAgICBjYXNl
IFdlYkNvcmU6OlNlbGVjdGlvbjo6Tk9ORToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFdlYkNvcmU6OlNlbGVjdGlvbjo6Q0FSRVQ6Ci0gICAgICAgICAg
ICByZWN0ID0gc2VsZWN0aW9uKCkuY2FyZXRSZWN0KCk7CisgICAgICAgICAgICByZWN0ID0gc2Vs
ZWN0aW9uKCktPmNhcmV0UmVjdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBXZWJDb3JlOjpTZWxlY3Rpb246OlJBTkdFOgpAQCAtMzIxNCw4ICszMjQ0
LDggQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBQb3NpdGlvbiBzdGFy
dCA9IHNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAgUG9zaXRpb24gZW5kID0gc2VsZWN0aW9uKCku
ZW5kKCk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKTsKKyAgICBQ
b3NpdGlvbiBlbmQgPSBzZWxlY3Rpb24oKS0+ZW5kKCk7CiAgICAgQVNTRVJUKHN0YXJ0Lm5vZGUo
KSk7CiAgICAgaWYgKHN0YXJ0Lm5vZGUoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCkpIHsK
ICAgICAgICAgUmVuZGVyTGF5ZXIgKmxheWVyID0gc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5l
bmNsb3NpbmdMYXllcigpOwpAQCAtMzYyNSwxMiArMzY1NSwxMiBAQAogewogICAgIEludFJlY3Qg
cmVjdDsKICAgICAKLSAgICBzd2l0Y2ggKHNlbGVjdGlvbigpLnN0YXRlKCkpIHsKKyAgICBzd2l0
Y2ggKHNlbGVjdGlvbigpLT5zdGF0ZSgpKSB7CiAgICAgICAgIGNhc2UgV2ViQ29yZTo6U2VsZWN0
aW9uOjpOT05FOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgV2ViQ29yZTo6U2VsZWN0aW9uOjpDQVJFVDoKLSAgICAgICAgICAgIHJlY3QgPSBzZWxlY3Rp
b24oKS5jYXJldFJlY3QoKTsKKyAgICAgICAgICAgIHJlY3QgPSBzZWxlY3Rpb24oKS0+Y2FyZXRS
ZWN0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFdl
YkNvcmU6OlNlbGVjdGlvbjo6UkFOR0U6CkBAIC0zNjM4LDggKzM2NjgsOCBAQAogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIAotICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uKCku
c3RhcnQoKTsKLSAgICBQb3NpdGlvbiBlbmQgPSBzZWxlY3Rpb24oKS5lbmQoKTsKKyAgICBQb3Np
dGlvbiBzdGFydCA9IHNlbGVjdGlvbigpLT5zdGFydCgpOworICAgIFBvc2l0aW9uIGVuZCA9IHNl
bGVjdGlvbigpLT5lbmQoKTsKICAgICBBU1NFUlQoc3RhcnQubm9kZSgpKTsKICAgICBpZiAoc3Rh
cnQubm9kZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSkgewogICAgICAgICBSZW5kZXJM
YXllciAqbGF5ZXIgPSBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7
CkBAIC0zNjU3LDEwICszNjg3LDEwIEBACiAgICAgCiAgICAgaWYgKCF4bWxEb2NJbXBsKCkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIGlmIChkLT5tX3NlbGVjdGlvbi5pc05vbmUoKSkKKyAgICBp
ZiAoc2VsZWN0aW9uKCktPmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBQ
b3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uc3RhcnQoKSwgZC0+
bV9zZWxlY3Rpb24uYWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBw
b3MgPSBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCktPnN0YXJ0KCksIHNlbGVjdGlvbigpLT5h
ZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwogICAgIGlmICghcG9zLmluUmVuZGVyZWRDb250
ZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIE5vZGVJbXBsICpub2RlID0gcG9zLm5vZGUo
KTsKQEAgLTM3MDQsNyArMzczNCw3IEBACiAgICAgLy8gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBm
bGFzaGluZyB0aGUgY2FyZXQgaW4gYSBjb250ZW50RWRpdGFibGUgdmlldyBhdXRvbWF0aWNhbGx5
IAogICAgIC8vIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9ncmFtbWVyIHRvIHNldCBhIHNlbGVj
dGlvbiBleHBsaWNpdGx5LgogICAgIERvY3VtZW50SW1wbCAqZG9jID0geG1sRG9jSW1wbCgpOwot
ICAgIGlmIChkb2MgJiYgc2VsZWN0aW9uKCkuaXNOb25lKCkgJiYgaXNDb250ZW50RWRpdGFibGUo
KSkgeworICAgIGlmIChkb2MgJiYgc2VsZWN0aW9uKCktPmlzTm9uZSgpICYmIGlzQ29udGVudEVk
aXRhYmxlKCkpIHsKICAgICAgICAgTm9kZUltcGwgKm5vZGUgPSBkb2MtPmRvY3VtZW50RWxlbWVu
dCgpOwogICAgICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICAgICAgLy8gTG9vayBmb3IgYSBi
bG9jayBmbG93LCBidXQgc2tpcCBvdmVyIHRoZSBIVE1MIGVsZW1lbnQsIHNpbmNlIHdlIHJlYWxs
eQpAQCAtMzcxNCw3ICszNzQ0LDcgQEAKICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICBz
ZXRTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihQb3NpdGlvbihub2RlLCAwKSwgRE9XTlNU
UkVBTSkpOworICAgICAgICAgICAgc2V0U2VsZWN0aW9uKG5ldyBTZWxlY3Rpb25Db250cm9sbGVy
KFBvc2l0aW9uKG5vZGUsIDApLCBET1dOU1RSRUFNKSk7CiAgICAgfQogfQogCkluZGV4OiBwYWdl
L0ZyYW1lUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWVQcml2YXRlLmgJKHJldmlz
aW9uIDEyMjUxKQorKysgcGFnZS9GcmFtZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU1
LDkgKzI1NSwxMCBAQAogICBXZWJDb3JlOjpFVGV4dEdyYW51bGFyaXR5IG1fc2VsZWN0aW9uR3Jh
bnVsYXJpdHk7CiAgIGJvb2wgbV9iZWdhblNlbGVjdGluZ1RleHQ7CiAKLSAgV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlciBtX3NlbGVjdGlvbjsKLSAgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJv
bGxlciBtX2RyYWdDYXJldDsKLSAgV2ViQ29yZTo6U2VsZWN0aW9uIG1fbWFyazsKKyAgUmVmUHRy
PFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI+IG1fc2VsZWN0aW9uOworICBSZWZQdHI8V2Vi
Q29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcj4gbV9kcmFnQ2FyZXQ7CisgIFJlZlB0cjxXZWJDb3Jl
OjpTZWxlY3Rpb25Db250cm9sbGVyPiBtX21hcms7CisKICAgaW50IG1fY2FyZXRCbGlua1RpbWVy
OwogCiAgIGJvb2wgbV9jYXJldFZpc2libGU6MTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5791</attachid>
            <date>2006-01-19 20:49:08 -0800</date>
            <delta_ts>2006-01-20 18:00:40 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6644.txt</filename>
            <type>text/plain</type>
            <size>68449</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL0RvY3VtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9raHRtbC94bWwvRG9jdW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTIyNTEpCisrKyBX
ZWJDb3JlL2todG1sL3htbC9Eb2N1bWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDY0
LDEzICsxMDY0LDEzIEBACiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBSZW5kZXJDYW52YXMg
KmNhbnZhcyA9IHN0YXRpY19jYXN0PFJlbmRlckNhbnZhcyo+KG1fcmVuZGVyKTsKLSAgICBTZWxl
Y3Rpb25Db250cm9sbGVyIHMgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXMuaXNS
YW5nZSgpKSB7CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciAqcyA9IGZyYW1lKCktPnNlbGVjdGlv
bigpOworICAgIGlmICghcy0+aXNSYW5nZSgpKSB7CiAgICAgICAgIGNhbnZhcy0+Y2xlYXJTZWxl
Y3Rpb24oKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9zID0g
VmlzaWJsZVBvc2l0aW9uKHMuc3RhcnQoKSwgcy5hZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgp
OwotICAgICAgICBQb3NpdGlvbiBlbmRQb3MgPSBWaXNpYmxlUG9zaXRpb24ocy5lbmQoKSwgcy5h
ZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICBQb3NpdGlvbiBzdGFydFBvcyA9
IFZpc2libGVQb3NpdGlvbihzLT5zdGFydCgpLCBzLT5hZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVu
dCgpOworICAgICAgICBQb3NpdGlvbiBlbmRQb3MgPSBWaXNpYmxlUG9zaXRpb24ocy0+ZW5kKCks
IHMtPmFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgIGlmIChzdGFydFBvcy5p
c05vdE51bGwoKSAmJiBlbmRQb3MuaXNOb3ROdWxsKCkpIHsKICAgICAgICAgICAgIFJlbmRlck9i
amVjdCAqc3RhcnRSZW5kZXJlciA9IHN0YXJ0UG9zLm5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCAqZW5kUmVuZGVyZXIgPSBlbmRQb3Mubm9kZSgpLT5yZW5kZXJl
cigpOwpAQCAtMTA4MSw3ICsxMDgxLDcgQEAKICNpZiBfX0FQUExFX18KICAgICAvLyBzZW5kIHRo
ZSBBWFNlbGVjdGVkVGV4dENoYW5nZWQgbm90aWZpY2F0aW9uIG9ubHkgaWYgdGhlIG5ldyBzZWxl
Y3Rpb24gaXMgbm9uLW51bGwsCiAgICAgLy8gYmVjYXVzZSBudWxsIHNlbGVjdGlvbnMgYXJlIG9u
bHkgdHJhbnNpdG9yeSAoZS5nLiB3aGVuIHN0YXJ0aW5nIGFuIEVkaXRDb21tYW5kLCBjdXJyZW50
bHkpCi0gICAgaWYgKEtXUUFjY09iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYm
IHMuc3RhcnQoKS5pc05vdE51bGwoKSAmJiBzLmVuZCgpLmlzTm90TnVsbCgpKSB7CisgICAgaWYg
KEtXUUFjY09iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIHMtPnN0YXJ0KCku
aXNOb3ROdWxsKCkgJiYgcy0+ZW5kKCkuaXNOb3ROdWxsKCkpIHsKICAgICAgICAgZ2V0QWNjT2Jq
ZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvblRvVG9wV2ViQXJlYShyZW5kZXJlcigpLCAiQVhT
ZWxlY3RlZFRleHRDaGFuZ2VkIik7CiAgICAgfQogI2VuZGlmCkBAIC0yMTE4LDEwICsyMTE4LDEw
IEBACiAKICAgICAvLyBDbGVhciB0aGUgc2VsZWN0aW9uIHdoZW4gY2hhbmdpbmcgdGhlIGZvY3Vz
IG5vZGUgdG8gbnVsbCBvciB0byBhIG5vZGUgdGhhdCBpcyBub3QgCiAgICAgLy8gY29udGFpbmVk
IGJ5IHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KLSAgICBOb2RlSW1wbCAqc3RhcnRDb250YWluZXIg
PSBmcmFtZSgpLT5zZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKTsKKyAgICBOb2RlSW1wbCAqc3Rh
cnRDb250YWluZXIgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCk7CiAgICAg
aWYgKCFuZXdGb2N1c05vZGUgfHwgKHN0YXJ0Q29udGFpbmVyICYmIHN0YXJ0Q29udGFpbmVyICE9
IG5ld0ZvY3VzTm9kZSAmJiAhc3RhcnRDb250YWluZXItPmlzQW5jZXN0b3IobmV3Rm9jdXNOb2Rl
KSkpCiAgICAgICAgIC8vIEZJWE1FOiA2NDk4IFNob3VsZCBqdXN0IGJlIGFibGUgdG8gY2FsbCBt
X2ZyYW1lLT5zZWxlY3Rpb24oKS5jbGVhcigpCi0gICAgICAgIGZyYW1lKCktPnNldFNlbGVjdGlv
bihTZWxlY3Rpb25Db250cm9sbGVyKCkpOworICAgICAgICBmcmFtZSgpLT5zZXRTZWxlY3Rpb24o
bmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnRJbXBsOjpzZXRD
U1NUYXJnZXQoTm9kZUltcGwqIG4pCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvanNlZGl0
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvanNlZGl0aW5nLmNw
cAkocmV2aXNpb24gMTIyNTEpCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvanNlZGl0aW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzU1LDcgKzM1NSw3IEBACiBib29sIGV4ZWNVbnNlbGVjdChG
cmFtZSAqZnJhbWUsIGJvb2wgdXNlckludGVyZmFjZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkK
IHsKICAgICAvLyBGSVhNRTogNjQ5OCBTaG91bGQganVzdCBiZSBhYmxlIHRvIGNhbGwgbV9mcmFt
ZS0+c2VsZWN0aW9uKCkuY2xlYXIoKQotICAgIGZyYW1lLT5zZXRTZWxlY3Rpb24oa2h0bWw6OlNl
bGVjdGlvbkNvbnRyb2xsZXIoKSk7CisgICAgZnJhbWUtPnNldFNlbGVjdGlvbihuZXcga2h0bWw6
OlNlbGVjdGlvbkNvbnRyb2xsZXIoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM3Niw3
ICszNzYsNyBAQAogCiBib29sIGVuYWJsZWRBbnlTZWxlY3Rpb24oRnJhbWUgKmZyYW1lKQogewot
ICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2UoKTsKKyAgICByZXR1
cm4gZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NhcmV0T3JSYW5nZSgpOwogfQogCiBib29sIGVuYWJs
ZWRQYXN0ZShGcmFtZSAqZnJhbWUpCkBAIC0zOTEsNyArMzkxLDcgQEAKIAogYm9vbCBlbmFibGVk
UmFuZ2VTZWxlY3Rpb24oRnJhbWUgKmZyYW1lKQogewotICAgIHJldHVybiBmcmFtZS0+c2VsZWN0
aW9uKCkuaXNSYW5nZSgpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2Uo
KTsKIH0KIAogYm9vbCBlbmFibGVkUmVkbyhGcmFtZSAqZnJhbWUpCkluZGV4OiBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDEyMjUxKQorKysg
V2ViQ29yZS9raHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJTZWxl
Y3Rpb24uaCIKICNpbmNsdWRlICJkb20yX3JhbmdlaW1wbC5oIgorI2luY2x1ZGUgImRvbTJfZXZl
bnRzLmgiCiAKIGNsYXNzIEZyYW1lOwogY2xhc3MgUVBhaW50ZXI7CkBAIC0zOCw4ICszOSw3IEBA
CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKLWNsYXNzIFNl
bGVjdGlvbkNvbnRyb2xsZXIKLXsKK2NsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMg
RXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6CiAgICAgZW51bSBFQWx0ZXIgeyBNT1ZFLCBFWFRFTkQg
fTsKICAgICBlbnVtIEVEaXJlY3Rpb24geyBGT1JXQVJELCBCQUNLV0FSRCwgUklHSFQsIExFRlQg
fTsKQEAgLTEwNCw2ICsxMDQsOSBAQAogICAgIGZyaWVuZCBjbGFzcyA6OkZyYW1lOwogICAgIAog
ICAgIEZyYW1lICpmcmFtZSgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVF
dmVudChFdmVudExpc3RlbmVyRXZlbnQgZXZ0LCBib29sIGlzV2luZG93RXZlbnQpOworICAgIHZp
cnR1YWwgRE9NU3RyaW5nIGV2ZW50TGlzdGVuZXJUeXBlKCk7CiAKICAgICAvLyBTYWZhcmkgU2Vs
ZWN0aW9uIE9iamVjdCBBUEkKICAgICBOb2RlSW1wbCAqYmFzZU5vZGUoKSBjb25zdCB7IHJldHVy
biBtX3NlbC5iYXNlKCkubm9kZSgpOyB9CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvU2Vs
ZWN0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjI1MSkKKysrIFdlYkNvcmUva2h0
bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
OSArMzksMTEgQEAKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlz
aWJsZV90ZXh0LmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorI2luY2x1ZGUgInhtbC9k
b20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKICNpbmNs
dWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5o
IgorI2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0
aW9ucy5oPgogI2luY2x1ZGUgPHFldmVudC5oPgogI2luY2x1ZGUgPHFwYWludGVyLmg+CkBAIC01
MCw2ICs1Miw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7CisKIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIoKQog
ICAgIDogbV9uZWVkc0xheW91dCh0cnVlKQogICAgICwgbV9tb2RpZnlCaWFzU2V0KGZhbHNlKQpA
QCAtOTksNyArMTAzLDggQEAKIH0KIAogU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29u
dHJvbGxlcihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZvKQotICAgIDogbV9zZWwoby5tX3Nl
bCkKKyAgICA6IEV2ZW50TGlzdGVuZXIoKQorICAgICwgbV9zZWwoby5tX3NlbCkKICAgICAsIG1f
bmVlZHNMYXlvdXQoby5tX25lZWRzTGF5b3V0KQogICAgICwgbV9tb2RpZnlCaWFzU2V0KG8ubV9t
b2RpZnlCaWFzU2V0KQogewpAQCAtODQ1LDQgKzg1MCw0NSBAQAogfQogI2VuZGlmCiAKK3ZvaWQg
U2VsZWN0aW9uQ29udHJvbGxlcjo6aGFuZGxlRXZlbnQoRXZlbnRJbXBsICpldmVudCwgYm9vbCBp
c1dpbmRvd0V2ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgpID09IERPTU5vZGVSZW1vdmVk
RXZlbnQpIHsKKyAgICAgICAgCisgICAgICAgIGlmIChpc05vbmUoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAgICAgTm9kZUltcGwgKm5vZGVUb1JlbW92ZSA9IGV2ZW50LT50YXJn
ZXQoKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbXBsICpiYXNlID0gbV9zZWwuYmFzZSgpLm5v
ZGUoKTsKKyAgICAgICAgTm9kZUltcGwgKmV4dGVudCA9IG1fc2VsLmV4dGVudCgpLm5vZGUoKTsK
KyAgICAgICAgTm9kZUltcGwgKnN0YXJ0ID0gbV9zZWwuc3RhcnQoKS5ub2RlKCk7CisgICAgICAg
IE5vZGVJbXBsICplbmQgPSBtX3NlbC5lbmQoKS5ub2RlKCk7CisgICAgICAgIAorICAgICAgICBi
b29sIGJhc2VSZW1vdmVkID0gbm9kZVRvUmVtb3ZlID09IGJhc2UgfHwgYmFzZS0+aXNBbmNlc3Rv
cihub2RlVG9SZW1vdmUpOworICAgICAgICBib29sIGV4dGVudFJlbW92ZWQgPSBub2RlVG9SZW1v
dmUgPT0gZXh0ZW50IHx8IGV4dGVudC0+aXNBbmNlc3Rvcihub2RlVG9SZW1vdmUpOworICAgICAg
ICBib29sIHN0YXJ0UmVtb3ZlZCA9IG5vZGVUb1JlbW92ZSA9PSBzdGFydCB8fCBzdGFydC0+aXNB
bmNlc3Rvcihub2RlVG9SZW1vdmUpOworICAgICAgICBib29sIGVuZFJlbW92ZWQgPSBub2RlVG9S
ZW1vdmUgPT0gZW5kIHx8IGVuZC0+aXNBbmNlc3Rvcihub2RlVG9SZW1vdmUpOworICAgICAgICAK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCBub3RpZnkgZGVsZWdhdGVzIG9mIGEgc2Vs
ZWN0aW9uIGNoYW5nZQorICAgICAgICAvLyBGSVhNRTogSWRlYWxseSwgdGhpcyB3b3VsZCBqdXN0
IGFsdGVyIHRoZSBzZWxlY3Rpb24sIGluc3RlYWQgb2YgYmxvd2luZyBpdCBhd2F5LCBpbiBjYXNl
cyB3aGVyZSBlbmQgcG9pbnRzIGFyZSByZW1vdmVkLgorICAgICAgICBpZiAoc3RhcnRSZW1vdmVk
IHx8IGVuZFJlbW92ZWQpIHsKKyAgICAgICAgICAgIG1fc2VsID0gU2VsZWN0aW9uKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChiYXNlUmVtb3ZlZCB8fCBleHRlbnRSZW1vdmVk
KSB7CisgICAgICAgICAgICBpZiAobV9zZWwuaXNCYXNlRmlyc3QoKSkgeworICAgICAgICAgICAg
ICAgIG1fc2VsLnNldEJhc2UobV9zZWwuc3RhcnQoKSk7CisgICAgICAgICAgICAgICAgbV9zZWwu
c2V0RXh0ZW50KG1fc2VsLmVuZCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgbV9zZWwuc2V0QmFzZShtX3NlbC5zdGFydCgpKTsKKyAgICAgICAgICAgICAgICBtX3Nl
bC5zZXRFeHRlbnQobV9zZWwuZW5kKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQogfQorCitET01TdHJpbmcgU2VsZWN0aW9uQ29udHJvbGxlcjo6ZXZlbnRMaXN0ZW5lclR5cGUo
KQoreworICAgIHJldHVybiAiIjsKK30KKworfQpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5n
L3R5cGluZ19jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcv
dHlwaW5nX2NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMjI1MSkKKysrIFdlYkNvcmUva2h0bWwvZWRp
dGluZy90eXBpbmdfY29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAK
ICAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCAqPihsYXN0RWRpdENvbW1hbmQuZ2V0
KCkpLT5kZWxldGVLZXlQcmVzc2VkKCk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAg
ICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsK
ICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgVmlzaWJsZVBvc2l0aW9uKHNlbGVj
dGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSkucHJldmlvdXMoKS5pc051bGwoKSkg
ewogICAgICAgICAgICAgLy8gZG8gbm90aGluZyBmb3IgYSBkZWxldGUga2V5IGF0IHRoZSBzdGFy
dCBvZiBhbiBlZGl0YWJsZSBlbGVtZW50LgogICAgICAgICB9CkBAIC05Myw3ICs5Myw3IEBACiAg
ICAgICAgIHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVkaXRDb21tYW5kLmdldCgp
KS0+Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAg
IFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Cisg
ICAgICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBpc0VuZE9mRG9jdW1lbnQo
VmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSkp
KSB7CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5nIGZvciBhIGRlbGV0ZSBrZXkgYXQgdGhlIHN0
YXJ0IG9mIGFuIGVkaXRhYmxlIGVsZW1lbnQuCiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUva2h0
bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9lZGl0X2NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMjI1MSkKKysrIFdlYkNvcmUva2h0
bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4
LDcgQEAKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQt
PmZyYW1lKCkpOwotICAgIG1fc3RhcnRpbmdTZWxlY3Rpb24gPSBtX2RvY3VtZW50LT5mcmFtZSgp
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBtX3N0YXJ0aW5nU2VsZWN0aW9uID0gbV9k
b2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgIG1fZW5kaW5n
U2VsZWN0aW9uID0gbV9zdGFydGluZ1NlbGVjdGlvbjsKIH0KIApJbmRleDogV2ViQ29yZS9raHRt
bC9lY21hL2tqc193aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9r
anNfd2luZG93LmNwcAkocmV2aXNpb24gMTIyNTEpCisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pz
X3dpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMzAsMzIgKzIzMzAsMzIgQEAKIAogSlNW
YWx1ZSAqU2VsZWN0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgcyA9IG1fZnJhbWUtPnNlbGVj
dGlvbigpOworICAgIFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzID0gbV9mcmFtZS0+c2Vs
ZWN0aW9uKCk7CiAgICAgY29uc3QgV2luZG93KiB3aW5kb3cgPSBXaW5kb3c6OnJldHJpZXZlV2lu
ZG93KG1fZnJhbWUpOwogICAgIGlmICghd2luZG93KQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAgICAgCiAgICAgc3dpdGNoICh0b2tlbikgewogICAgIGNhc2UgQW5jaG9yTm9k
ZToKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgcy5hbmNob3JOb2RlKCkpOworICAg
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzLT5hbmNob3JOb2RlKCkpOwogICAgIGNhc2Ug
QmFzZU5vZGU6Ci0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHMuYmFzZU5vZGUoKSk7
CisgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHMtPmJhc2VOb2RlKCkpOwogICAgIGNh
c2UgQW5jaG9yT2Zmc2V0OgotICAgICAgICByZXR1cm4ganNOdW1iZXIocy5hbmNob3JPZmZzZXQo
KSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihzLT5hbmNob3JPZmZzZXQoKSk7CiAgICAgY2Fz
ZSBCYXNlT2Zmc2V0OgotICAgICAgICByZXR1cm4ganNOdW1iZXIocy5iYXNlT2Zmc2V0KCkpOwor
ICAgICAgICByZXR1cm4ganNOdW1iZXIocy0+YmFzZU9mZnNldCgpKTsKICAgICBjYXNlIEZvY3Vz
Tm9kZToKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgcy5mb2N1c05vZGUoKSk7Cisg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHMtPmZvY3VzTm9kZSgpKTsKICAgICBjYXNl
IEV4dGVudE5vZGU6Ci0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHMuZXh0ZW50Tm9k
ZSgpKTsKKyAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgcy0+ZXh0ZW50Tm9kZSgpKTsK
ICAgICBjYXNlIEZvY3VzT2Zmc2V0OgotICAgICAgICByZXR1cm4ganNOdW1iZXIocy5mb2N1c09m
ZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHMtPmZvY3VzT2Zmc2V0KCkpOwogICAg
IGNhc2UgRXh0ZW50T2Zmc2V0OgotICAgICAgICByZXR1cm4ganNOdW1iZXIocy5leHRlbnRPZmZz
ZXQoKSk7CisgICAgICAgIHJldHVybiBqc051bWJlcihzLT5leHRlbnRPZmZzZXQoKSk7CiAgICAg
Y2FzZSBJc0NvbGxhcHNlZDoKLSAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihzLmlzQ29sbGFwc2Vk
KCkpOworICAgICAgICByZXR1cm4ganNCb29sZWFuKHMtPmlzQ29sbGFwc2VkKCkpOwogICAgIGNh
c2UgX1R5cGU6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhzLnR5cGUoKSk7CisgICAgICAgIHJl
dHVybiBqc1N0cmluZyhzLT50eXBlKCkpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzc2VydCgw
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0yMzc3LDcgKzIzNzcsNyBAQAog
CiBVU3RyaW5nIFNlbGVjdGlvbjo6dG9TdHJpbmcoRXhlY1N0YXRlICopIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIFVTdHJpbmcoKG1fZnJhbWUtPnNlbGVjdGlvbigpKS50b1N0cmluZygpKTsKKyAgICBy
ZXR1cm4gVVN0cmluZyhtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9TdHJpbmcoKSk7CiB9CiAKIEpT
VmFsdWUgKlNlbGVjdGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCkBAIC0yMzg3LDM3ICsyMzg3LDM3IEBA
CiAgICAgU2VsZWN0aW9uICpzZWxlY3Rpb24gPSBzdGF0aWNfY2FzdDxTZWxlY3Rpb24gKj4odGhp
c09iaik7CiAgICAgRnJhbWUgKmZyYW1lID0gc2VsZWN0aW9uLT5mcmFtZSgpOwogICAgIGlmIChm
cmFtZSkgewotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHMgPSBmcmFtZS0+c2VsZWN0aW9u
KCk7CisgICAgICAgIFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzID0gbmV3IFNlbGVjdGlv
bkNvbnRyb2xsZXIoKmZyYW1lLT5zZWxlY3Rpb24oKSk7CiAgICAgICAgIAogICAgICAgICBzd2l0
Y2ggKGlkKSB7CiAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q29sbGFwc2U6Ci0gICAgICAg
ICAgICAgICAgcy5jb2xsYXBzZSh0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0tPnRvSW50MzIoZXhl
YykpOworICAgICAgICAgICAgICAgIHMtPmNvbGxhcHNlKHRvTm9kZShhcmdzWzBdKSwgYXJnc1sx
XS0+dG9JbnQzMihleGVjKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIFNlbGVjdGlvbjo6Q29sbGFwc2VUb0VuZDoKLSAgICAgICAgICAgICAgICBzLmNvbGxhcHNl
VG9FbmQoKTsKKyAgICAgICAgICAgICAgICBzLT5jb2xsYXBzZVRvRW5kKCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q29sbGFwc2VUb1N0YXJ0
OgotICAgICAgICAgICAgICAgIHMuY29sbGFwc2VUb1N0YXJ0KCk7CisgICAgICAgICAgICAgICAg
cy0+Y29sbGFwc2VUb1N0YXJ0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIFNlbGVjdGlvbjo6RW1wdHk6Ci0gICAgICAgICAgICAgICAgcy5lbXB0eSgpOworICAg
ICAgICAgICAgICAgIHMtPmVtcHR5KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFNlbGVjdGlvbjo6U2V0QmFzZUFuZEV4dGVudDoKLSAgICAgICAgICAgICAgICBz
LnNldEJhc2VBbmRFeHRlbnQodG9Ob2RlKGFyZ3NbMF0pLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMp
LCB0b05vZGUoYXJnc1syXSksIGFyZ3NbM10tPnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAg
ICAgIHMtPnNldEJhc2VBbmRFeHRlbnQodG9Ob2RlKGFyZ3NbMF0pLCBhcmdzWzFdLT50b0ludDMy
KGV4ZWMpLCB0b05vZGUoYXJnc1syXSksIGFyZ3NbM10tPnRvSW50MzIoZXhlYykpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb246OlNldFBvc2l0aW9u
OgotICAgICAgICAgICAgICAgIHMuc2V0UG9zaXRpb24odG9Ob2RlKGFyZ3NbMF0pLCBhcmdzWzFd
LT50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBzLT5zZXRQb3NpdGlvbih0b05vZGUo
YXJnc1swXSksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok1vZGlmeToKLSAgICAgICAgICAgICAgICBz
Lm1vZGlmeShhcmdzWzBdLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSwgYXJnc1sxXS0+dG9T
dHJpbmcoZXhlYykuZG9tU3RyaW5nKCksIGFyZ3NbMl0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmlu
ZygpKTsKKyAgICAgICAgICAgICAgICBzLT5tb2RpZnkoYXJnc1swXS0+dG9TdHJpbmcoZXhlYyku
ZG9tU3RyaW5nKCksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLCBhcmdzWzJd
LT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIFNlbGVjdGlvbjo6R2V0UmFuZ2VBdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2V0RE9NUmFuZ2UoZXhlYywgcy5nZXRSYW5nZUF0KGFyZ3NbMF0tPnRvSW50MzIoZXhl
YykpLmdldCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RE9NUmFuZ2UoZXhlYywgcy0+
Z2V0UmFuZ2VBdChhcmdzWzBdLT50b0ludDMyKGV4ZWMpKS5nZXQoKSk7CiAgICAgICAgICAgICBj
YXNlIFNlbGVjdGlvbjo6VG9TdHJpbmc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KHMudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHMtPnRvU3Ry
aW5nKCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmcmFtZS0+c2V0U2VsZWN0aW9u
KHMpOworICAgICAgICBmcmFtZS0+c2V0U2VsZWN0aW9uKHMuZ2V0KCkpOwogICAgIH0KIAogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2Js
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfYmxvY2suY3Bw
CShyZXZpc2lvbiAxMjI1MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNjQsOCArMTI2NCw4IEBACiAKIHZvaWQgUmVuZGVyQmxvY2s6
OnBhaW50Q2FyZXQoUGFpbnRJbmZvJiBpLCBDYXJldFR5cGUgdHlwZSkKIHsKLSAgICBjb25zdCBT
ZWxlY3Rpb25Db250cm9sbGVyICZzID0gdHlwZSA9PSBDdXJzb3JDYXJldCA/IGRvY3VtZW50KCkt
PmZyYW1lKCktPnNlbGVjdGlvbigpIDogZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZHJhZ0NhcmV0KCk7
Ci0gICAgTm9kZUltcGwgKmNhcmV0Tm9kZSA9IHMuc3RhcnQoKS5ub2RlKCk7CisgICAgU2VsZWN0
aW9uQ29udHJvbGxlciAqcyA9IHR5cGUgPT0gQ3Vyc29yQ2FyZXQgPyBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5zZWxlY3Rpb24oKSA6IGRvY3VtZW50KCktPmZyYW1lKCktPmRyYWdDYXJldCgpOworICAg
IE5vZGVJbXBsICpjYXJldE5vZGUgPSBzLT5zdGFydCgpLm5vZGUoKTsKICAgICBSZW5kZXJPYmpl
Y3QgKnJlbmRlcmVyID0gY2FyZXROb2RlID8gY2FyZXROb2RlLT5yZW5kZXJlcigpIDogMDsKICAg
ICBpZiAocmVuZGVyZXIgJiYgKHJlbmRlcmVyID09IHRoaXMgfHwgcmVuZGVyZXItPmNvbnRhaW5p
bmdCbG9jaygpID09IHRoaXMpICYmIGNhcmV0Tm9kZSAmJiBjYXJldE5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkpIHsKICAgICAgICAgaWYgKHR5cGUgPT0gQ3Vyc29yQ2FyZXQpIHsKSW5kZXg6IFdl
YkNvcmUvYnJpZGdlL21hYy9NYWNGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdl
L21hYy9NYWNGcmFtZS5oCShyZXZpc2lvbiAxMjI1MSkKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9N
YWNGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICBOU1dyaXRp
bmdEaXJlY3Rpb24gYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0
OwogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtNaXNzcGVsbGluZ3NJbkFkamFjZW50V29yZHMoY29u
c3Qga2h0bWw6OlZpc2libGVQb3NpdGlvbiAmKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya01pc3Nw
ZWxsaW5ncyhjb25zdCBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbWFya01pc3NwZWxsaW5ncyhraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAqKTsKIAog
ICAgIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yRWxlbWVudChET006OkVsZW1lbnRJbXBs
ICopOwogICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyhET006Ok5vZGVJ
bXBsICpzdGFydE5vZGUsIGludCBzdGFydE9mZnNldCwgRE9NOjpOb2RlSW1wbCAqZW5kTm9kZSwg
aW50IGVuZE9mZnNldCk7CkBAIC0yNzYsMTAgKzI3NiwxMCBAQAogICAgIHZpcnR1YWwgdm9pZCBp
c3N1ZVBhc3RlQ29tbWFuZCgpOwogICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVBhc3RlQW5kTWF0Y2hT
dHlsZUNvbW1hbmQoKTsKICAgICB2aXJ0dWFsIHZvaWQgaXNzdWVUcmFuc3Bvc2VDb21tYW5kKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qga2h0bWw6
OlNlbGVjdGlvbkNvbnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZyk7Cisg
ICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oa2h0bWw6OlNlbGVjdGlv
bkNvbnRyb2xsZXIgKm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZyk7CiAgICAgdmlydHVh
bCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oY29uc3Qga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgY29u
c3Qga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJm5ld1NlbGVjdGlvbiwga2h0bWw6OkVBZmZp
bml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAqb2xk
U2VsZWN0aW9uLCBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAqbmV3U2VsZWN0aW9uLCBraHRt
bDo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IERPTTo6UmFuZ2VJbXBsICopIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IERPTTo6UmFuZ2VJ
bXBsICopIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9tYWMvTWFjRnJhbWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL01hY0ZyYW1lLm1tCShyZXZpc2lvbiAxMjI1
MSkKKysrIFdlYkNvcmUvYnJpZGdlL21hYy9NYWNGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDQyLDIyICs0NDIsMjIgQEAKICAgICAKICAgICAvLyBJbml0aWFsbHkgc2VhcmNoIGZyb20gdGhl
IHN0YXJ0IChpZiBmb3J3YXJkKSBvciBlbmQgKGlmIGJhY2t3YXJkKSBvZiB0aGUgc2VsZWN0aW9u
LCBhbmQgc2VhcmNoIHRvIGVkZ2Ugb2YgZG9jdW1lbnQuCiAgICAgUmVmUHRyPFJhbmdlSW1wbD4g
c2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKHhtbERvY0ltcGwoKSkpOwotICAgIGlmIChzZWxl
Y3Rpb24oKS5zdGFydCgpLm5vZGUoKSkgeworICAgIGlmIChzZWxlY3Rpb24oKS0+c3RhcnQoKS5u
b2RlKCkpIHsKICAgICAgICAgaWYgKGZvcndhcmQpIHsKLSAgICAgICAgICAgIHNldFN0YXJ0KHNl
YXJjaFJhbmdlLmdldCgpLCBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2Vs
ZWN0aW9uKCkuYWZmaW5pdHkoKSkpOworICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2Uu
Z2V0KCksIFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS0+c3RhcnQoKSwgc2VsZWN0aW9uKCkt
PmFmZmluaXR5KCkpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEVuZChzZWFy
Y2hSYW5nZS5nZXQoKSwgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rp
b24oKS5hZmZpbml0eSgpKSk7CisgICAgICAgICAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCks
IFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS0+ZW5kKCksIHNlbGVjdGlvbigpLT5hZmZpbml0
eSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgUmVmUHRyPFJhbmdlSW1wbD4gcmVzdWx0UmFu
Z2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNl
RmxhZykpOwogICAgIAogICAgIC8vIElmIHdlIHJlLWZvdW5kIHRoZSAobm9uLWVtcHR5KSBzZWxl
Y3RlZCByYW5nZSwgdGhlbiBzZWFyY2ggYWdhaW4gc3RhcnRpbmcganVzdCBwYXN0IHRoZSBzZWxl
Y3RlZCByYW5nZS4KLSAgICBpZiAoc2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCkgJiYgKnJlc3Vs
dFJhbmdlID09ICpzZWxlY3Rpb24oKS50b1JhbmdlKCkpIHsKKyAgICBpZiAoc2VsZWN0aW9uKCkt
PnN0YXJ0KCkubm9kZSgpICYmICpyZXN1bHRSYW5nZSA9PSAqKHNlbGVjdGlvbigpLT50b1Jhbmdl
KCkpKSB7CiAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKHhtbERvY0ltcGwo
KSk7CiAgICAgICAgIGlmIChmb3J3YXJkKSB7Ci0gICAgICAgICAgICBzZXRTdGFydChzZWFyY2hS
YW5nZS5nZXQoKSwgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb24o
KS5hZmZpbml0eSgpKSk7CisgICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwg
VmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLT5lbmQoKSwgc2VsZWN0aW9uKCktPmFmZmluaXR5
KCkpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldEVuZChzZWFyY2hSYW5nZS5n
ZXQoKSwgVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigpLmFm
ZmluaXR5KCkpKTsKKyAgICAgICAgICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgVmlzaWJs
ZVBvc2l0aW9uKHNlbGVjdGlvbigpLT5zdGFydCgpLCBzZWxlY3Rpb24oKS0+YWZmaW5pdHkoKSkp
OwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hS
YW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZyk7CiAgICAgfQpAQCAtNDc3LDgg
KzQ3Nyw4IEBACiAgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSkgewog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlv
bkNvbnRyb2xsZXIocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKTsKKyAgICAKKyAgICBz
ZXRTZWxlY3Rpb24obmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIocmVzdWx0UmFuZ2UuZ2V0KCksIERP
V05TVFJFQU0pKTsKICAgICByZXZlYWxTZWxlY3Rpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTc1MiwxNSArNzUyLDE1IEBACiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBj
b21tYW5kcyB3b3JrLgogICAgIFJlZlB0cjxSYW5nZUltcGw+IHNlYXJjaFJhbmdlKHJhbmdlT2ZD
b250ZW50cyh4bWxEb2NJbXBsKCkpKTsKICAgICBib29sIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0g
ZmFsc2U7Ci0gICAgaWYgKHNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpKSB7CisgICAgaWYgKHNl
bGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKSkgewogICAgICAgICBzdGFydGVkV2l0aFNlbGVjdGlv
biA9IHRydWU7CiAgICAgICAgIGlmIChzdGFydEJlZm9yZVNlbGVjdGlvbikgewotICAgICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbigp
LmFmZmluaXR5KCkpOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlv
bigpLT5zdGFydCgpLCBzZWxlY3Rpb24oKS0+YWZmaW5pdHkoKSk7CiAgICAgICAgICAgICAvLyBX
ZSBtYXRjaCBBcHBLaXQncyBydWxlOiBTdGFydCAxIGNoYXJhY3RlciBiZWZvcmUgdGhlIHNlbGVj
dGlvbi4KICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBvbmVCZWZvcmVTdGFydCA9IHN0YXJ0
LnByZXZpb3VzKCk7CiAgICAgICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgb25l
QmVmb3JlU3RhcnQuaXNOb3ROdWxsKCkgPyBvbmVCZWZvcmVTdGFydCA6IHN0YXJ0KTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBWaXNp
YmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuZW5kKCksIHNlbGVjdGlvbigpLmFmZmluaXR5KCkpKTsK
KyAgICAgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBWaXNpYmxlUG9zaXRpb24o
c2VsZWN0aW9uKCktPmVuZCgpLCBzZWxlY3Rpb24oKS0+YWZmaW5pdHkoKSkpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC04MjQsNyArODI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgUVN0cmlu
ZyByZXN1bHQgPSBjaGFycy5zdHJpbmcobWlzc3BlbGxpbmcubGVuZ3RoKTsKICAgICAgICAgICAg
ICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29u
dGFpbmVyKGV4Y2VwdGlvbiksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbiks
IGV4Y2VwdGlvbik7CiAKLSAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlv
bkNvbnRyb2xsZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOworICAgICAg
ICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24obmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIobWlzc3Bl
bGxpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOwogICAgICAgICAgICAgICAgICAgICByZXZl
YWxTZWxlY3Rpb24oKTsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFyayBtaXNzcGVsbGluZyBp
biBkb2N1bWVudC4KICAgICAgICAgICAgICAgICAgICAgeG1sRG9jSW1wbCgpLT5hZGRNYXJrZXIo
bWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKQEAgLTE4
NTcsNyArMTg1Nyw3IEBACiAvLyB0aGUgZXZlbnQgaGFuZGxlciBOT1Qgc2V0dGluZyB0aGUgcmV0
dXJuIHZhbHVlIHRvIGZhbHNlCiBib29sIE1hY0ZyYW1lOjpkaXNwYXRjaENQUEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBLV1FDbGlwYm9hcmQ6OkFjY2Vzc1BvbGljeSBwb2xp
Y3kpCiB7Ci0gICAgTm9kZUltcGwgKnRhcmdldCA9IGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkuZWxl
bWVudCgpOworICAgIE5vZGVJbXBsICp0YXJnZXQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKS5lbGVt
ZW50KCk7CiAgICAgaWYgKCF0YXJnZXQgJiYgeG1sRG9jSW1wbCgpKSB7CiAgICAgICAgIHRhcmdl
dCA9IHhtbERvY0ltcGwoKS0+Ym9keSgpOwogICAgIH0KQEAgLTI4NjIsNyArMjg2Miw3IEBACiAg
ICAgaWYgKGhhc011bHRpcGxlRm9udHMpCiAgICAgICAgICpoYXNNdWx0aXBsZUZvbnRzID0gZmFs
c2U7CiAKLSAgICBpZiAoIWQtPm1fc2VsZWN0aW9uLmlzUmFuZ2UoKSkgeworICAgIGlmICghc2Vs
ZWN0aW9uKCktPmlzUmFuZ2UoKSkgewogICAgICAgICBOb2RlSW1wbCAqbm9kZVRvUmVtb3ZlOwog
ICAgICAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5vZGVU
b1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKQEAgLTI4ODEsNyArMjg4MSw3IEBACiAK
ICAgICBOU0ZvbnQgKmZvbnQgPSBuaWw7CiAKLSAgICBSZWZQdHI8UmFuZ2VJbXBsPiByYW5nZSA9
IGQtPm1fc2VsZWN0aW9uLnRvUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2VJbXBsPiByYW5nZSA9
IHNlbGVjdGlvbigpLT50b1JhbmdlKCk7CiAgICAgTm9kZUltcGwgKnN0YXJ0Tm9kZSA9IHJhbmdl
LT5lZGl0aW5nU3RhcnRQb3NpdGlvbigpLm5vZGUoKTsKICAgICBpZiAoc3RhcnROb2RlICE9IG5p
bCkgewogICAgICAgICBOb2RlSW1wbCAqcGFzdEVuZCA9IHJhbmdlLT5wYXN0RW5kTm9kZSgpOwpA
QCAtMjk3NSw3ICsyOTc1LDcgQEAKIHsKICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gcmVzdWx0ID0g
TlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7CiAKLSAgICBQb3NpdGlvbiBwb3MgPSBWaXNp
YmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uc3RhcnQoKSwgZC0+bV9zZWxlY3Rpb24uYWZmaW5p
dHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRp
b24oc2VsZWN0aW9uKCktPnN0YXJ0KCksIHNlbGVjdGlvbigpLT5hZmZpbml0eSgpKS5kZWVwRXF1
aXZhbGVudCgpOwogICAgIE5vZGVJbXBsICpub2RlID0gcG9zLm5vZGUoKTsKICAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdC
bG9jaygpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzI2NiwxMCArMzI2NiwxMCBAQAog
ewogICAgIGlmICghW19icmlkZ2UgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRdKQog
ICAgICAgICByZXR1cm47Ci0gICAgbWFya01pc3NwZWxsaW5ncyhTZWxlY3Rpb25Db250cm9sbGVy
KHN0YXJ0T2ZXb3JkKHAsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHAsIFJpZ2h0
V29yZElmT25Cb3VuZGFyeSkpKTsKKyAgICBtYXJrTWlzc3BlbGxpbmdzKG5ldyBTZWxlY3Rpb25D
b250cm9sbGVyKHN0YXJ0T2ZXb3JkKHAsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3Jk
KHAsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpKTsKIH0KIAotdm9pZCBNYWNGcmFtZTo6bWFya01p
c3NwZWxsaW5ncyhjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZzZWxlY3Rpb24pCit2b2lkIE1h
Y0ZyYW1lOjptYXJrTWlzc3BlbGxpbmdzKFNlbGVjdGlvbkNvbnRyb2xsZXIgKnNlbGVjdGlvbikK
IHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVh
ZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgogICAgIC8vIE1pZ2h0IGJlIG5pY2UgdG8g
YXNzZXJ0IHRoYXQgaGVyZS4KQEAgLTMyNzcsNyArMzI3Nyw3IEBACiAgICAgaWYgKCFbX2JyaWRn
ZSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZF0pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxSYW5nZUltcGw+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi50b1JhbmdlKCkpOwor
ICAgIFJlZlB0cjxSYW5nZUltcGw+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi0+dG9SYW5nZSgpKTsK
ICAgICBpZiAoIXNlYXJjaFJhbmdlIHx8IHNlYXJjaFJhbmdlLT5pc0RldGFjaGVkKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKQEAgLTMzMjcsMjMgKzMzMjcsMjMgQEAKICAgICB9CiB9CiAKLXZv
aWQgTWFjRnJhbWU6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29u
dHJvbGxlciAmb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKQordm9pZCBNYWNGcmFtZTo6
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyICpvbGRTZWxlY3Rp
b24sIGJvb2wgY2xvc2VUeXBpbmcpCiB7CiAgICAgaWYgKHhtbERvY0ltcGwoKSkgewogICAgICAg
ICBpZiAoW19icmlkZ2UgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRdKSB7Ci0gICAg
ICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIG9sZEFkamFjZW50V29yZHMgPSBTZWxlY3Rpb25D
b250cm9sbGVyKCk7Ci0gICAgICAgICAgICAKKyAgICAgICAgCisgICAgICAgICAgICBSZWZQdHI8
U2VsZWN0aW9uQ29udHJvbGxlcj4gb2xkQWRqYWNlbnRXb3JkcyA9IG5ldyBTZWxlY3Rpb25Db250
cm9sbGVyKCk7CiAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlv
biByZXN1bHRpbmcgZnJvbSBhIGRlbGV0ZSBvcGVyYXRpb24sIG9sZFNlbGVjdGlvbiBtYXkgbm8g
bG9uZ2VyCiAgICAgICAgICAgICAvLyBiZSBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgICAgICBp
ZiAob2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLm5v
ZGUoKS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9s
ZFN0YXJ0KG9sZFNlbGVjdGlvbi5zdGFydCgpLCBvbGRTZWxlY3Rpb24uYWZmaW5pdHkoKSk7Ci0g
ICAgICAgICAgICAgICAgb2xkQWRqYWNlbnRXb3JkcyA9IFNlbGVjdGlvbkNvbnRyb2xsZXIoc3Rh
cnRPZldvcmQob2xkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG9sZFN0
YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsgICAKKyAgICAgICAgICAgIGlmIChvbGRTZWxl
Y3Rpb24tPnN0YXJ0KCkubm9kZSgpICYmIG9sZFNlbGVjdGlvbi0+c3RhcnQoKS5ub2RlKCktPmlu
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBvbGRTdGFydChv
bGRTZWxlY3Rpb24tPnN0YXJ0KCksIG9sZFNlbGVjdGlvbi0+YWZmaW5pdHkoKSk7CisgICAgICAg
ICAgICAgICAgb2xkQWRqYWNlbnRXb3JkcyA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0
T2ZXb3JkKG9sZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChvbGRTdGFy
dCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7ICAgCiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChzZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rp
b24oKS5hZmZpbml0eSgpKTsKLSAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgbmV3QWRq
YWNlbnRXb3JkcyhzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBl
bmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KHNlbGVjdGlvbigpLT5zdGFydCgpLCBzZWxlY3Rpb24o
KS0+YWZmaW5pdHkoKSk7CisgICAgICAgICAgICBSZWZQdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4g
bmV3QWRqYWNlbnRXb3JkcyA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0T2ZXb3JkKG5l
d1N0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChuZXdTdGFydCwgUmlnaHRX
b3JkSWZPbkJvdW5kYXJ5KSk7CiAKLSAgICAgICAgICAgIGlmIChvbGRBZGphY2VudFdvcmRzICE9
IG5ld0FkamFjZW50V29yZHMpIHsKKyAgICAgICAgICAgIGlmICgqKG9sZEFkamFjZW50V29yZHMu
Z2V0KCkpICE9ICoobmV3QWRqYWNlbnRXb3Jkcy5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAv
LyBNYXJrIG1pc3NwZWxsaW5ncyBpbiB0aGUgcG9ydGlvbiB0aGF0IHdhcyBwcmV2aW91c2x5IHVu
bWFya2VkIGJlY2F1c2Ugb2YKICAgICAgICAgICAgICAgICAvLyB0aGUgcHJveGltaXR5IG9mIHRo
ZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLiBXZSBvbmx5IHNwZWxsIGNoZWNrIHdvcmRzIGluCiAg
ICAgICAgICAgICAgICAgLy8gdGhlIHZpY2luaXR5IG9mIHRoZSBzdGFydCBvZiB0aGUgb2xkIHNl
bGVjdGlvbiBiZWNhdXNlIHRoZSBzcGVsbGluZyBjaGVja2VyCkBAIC0zMzUzLDEyICszMzUzLDEy
IEBACiAKICAgICAgICAgICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGluZyBl
bHNld2hlcmUsIHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgICAgICAgICBpZiAoY2xv
c2VUeXBpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgbWFya01pc3NwZWxsaW5ncyhvbGRBZGph
Y2VudFdvcmRzKTsKKyAgICAgICAgICAgICAgICAgICAgbWFya01pc3NwZWxsaW5ncyhvbGRBZGph
Y2VudFdvcmRzLmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAv
LyBUaGlzIG9ubHkgZXJhc2VzIGEgbWFya2VyIGluIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBzZWxl
Y3Rpb24uCiAgICAgICAgICAgICAgICAgLy8gUGVyaGFwcyBwZWN1bGlhciwgYnV0IGl0IG1hdGNo
ZXMgQXBwS2l0LgotICAgICAgICAgICAgICAgIHhtbERvY0ltcGwoKS0+cmVtb3ZlTWFya2Vycyhu
ZXdBZGphY2VudFdvcmRzLnRvUmFuZ2UoKS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
KTsKKyAgICAgICAgICAgICAgICB4bWxEb2NJbXBsKCktPnJlbW92ZU1hcmtlcnMobmV3QWRqYWNl
bnRXb3Jkcy0+dG9SYW5nZSgpLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2hlbiBjb250aW51
b3VzIHNwZWxsIGNoZWNraW5nIGlzIG9mZiwgbm8gbWFya2VycyBhcHBlYXIgYWZ0ZXIgdGhlIHNl
bGVjdGlvbiBjaGFuZ2VzLgpAQCAtMzM2OSwxMCArMzM2OSwxMCBAQAogICAgIFtfYnJpZGdlIHJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb25dOwogfQogCi1ib29sIE1hY0ZyYW1lOjpzaG91bGRDaGFu
Z2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmb2xkU2VsZWN0aW9uLCBjb25z
dCBTZWxlY3Rpb25Db250cm9sbGVyICZuZXdTZWxlY3Rpb24sIGtodG1sOjpFQWZmaW5pdHkgYWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0Citib29sIE1hY0ZyYW1lOjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlciAqb2xkU2VsZWN0aW9uLCBTZWxlY3Rp
b25Db250cm9sbGVyICpuZXdTZWxlY3Rpb24sIGtodG1sOjpFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFtfYnJpZGdlIHNob3VsZENo
YW5nZVNlbGVjdGVkRE9NUmFuZ2U6W0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOm9sZFNlbGVjdGlv
bi50b1JhbmdlKCkuZ2V0KCldCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvRE9NUmFuZ2U6W0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOm5ld1NlbGVjdGlvbi50b1Jhbmdl
KCkuZ2V0KCldCisgICAgcmV0dXJuIFtfYnJpZGdlIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFu
Z2U6W0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOm9sZFNlbGVjdGlvbi0+dG9SYW5nZSgpLmdldCgp
XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0RPTVJhbmdlOltET01S
YW5nZSBfcmFuZ2VXaXRoSW1wbDpuZXdTZWxlY3Rpb24tPnRvUmFuZ2UoKS5nZXQoKV0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpbml0eTpzdGF0aWNfY2FzdDxO
U1NlbGVjdGlvbkFmZmluaXR5PihhZmZpbml0eSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CiB9CkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9uIDEyMjUxKQorKysgV2Vi
Q29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTY1LDcgKzE2NSw3IEBACiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIE5POwogICAg
ICAgICAKLSAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIGlmIChmcmFt
ZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gTk87CiAKICAgICAvLyBJ
ZiBhIHBhcnQgaGFzIGEgc2VsZWN0aW9uLCBpdCBzaG91bGQgYWxzbyBoYXZlIGEgZG9jdW1lbnQu
ICAgICAgICAKQEAgLTgwNywxMyArODA3LDEzIEBACiAtIChCT09MKWlzU2VsZWN0aW9uRWRpdGFi
bGUKIHsKICAgICAvLyBFRElUIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGNvbnNpZGVyIHRoZSBlbnRp
cmUgc2VsZWN0ZWQgcmFuZ2UKLSAgICBOb2RlSW1wbCAqc3RhcnROb2RlID0gbV9mcmFtZS0+c2Vs
ZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZUltcGwgKnN0YXJ0Tm9kZSA9IG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsKICAgICByZXR1cm4gc3RhcnROb2RlID8g
c3RhcnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpIDogTk87CiB9CiAKIC0gKFdlYlNlbGVjdGlv
blN0YXRlKXNlbGVjdGlvblN0YXRlCiB7Ci0gICAgc3dpdGNoIChtX2ZyYW1lLT5zZWxlY3Rpb24o
KS5zdGF0ZSgpKSB7CisgICAgc3dpdGNoIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhdGUoKSkg
ewogICAgICAgICBjYXNlIFdlYkNvcmU6OlNlbGVjdGlvbjo6Tk9ORToKICAgICAgICAgICAgIHJl
dHVybiBXZWJTZWxlY3Rpb25TdGF0ZU5vbmU7CiAgICAgICAgIGNhc2UgV2ViQ29yZTo6U2VsZWN0
aW9uOjpDQVJFVDoKQEAgLTkxNSw3ICs5MTUsNyBAQAogLSAodm9pZClkZXNlbGVjdFRleHQKIHsK
ICAgICAvLyBGSVhNRTogNjQ5OCBTaG91bGQganVzdCBiZSBhYmxlIHRvIGNhbGwgbV9mcmFtZS0+
c2VsZWN0aW9uKCkuY2xlYXIoKQotICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbihTZWxlY3Rpb25D
b250cm9sbGVyKCkpOworICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbihuZXcgU2VsZWN0aW9uQ29u
dHJvbGxlcigpKTsKIH0KIAogLSAoQk9PTClpc0ZyYW1lU2V0CkBAIC0xNTMwLDcgKzE1MzAsNyBA
QAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nCiB7CiAg
ICAgLy8gRklYTUU6IHNob3VsZCBiZSBhIG5vLWFyZyB2ZXJzaW9uIG9mIGF0dHJpYnV0ZWRTdHJp
bmcoKSB0aGF0IGRvZXMgdGhpcwotICAgIHJldHVybiBtX2ZyYW1lLT5hdHRyaWJ1dGVkU3RyaW5n
KG1fZnJhbWUtPnNlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS5zdGFydCgpLm9mZnNldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS5lbmQoKS5ub2RlKCksIG1f
ZnJhbWUtPnNlbGVjdGlvbigpLmVuZCgpLm9mZnNldCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+
YXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCksIG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm9mZnNldCgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+ZW5kKCkubm9kZSgpLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCkub2Zmc2V0KCkpOwog
fQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nRnJvbTooRE9NTm9k
ZSAqKXN0YXJ0IHN0YXJ0T2Zmc2V0OihpbnQpc3RhcnRPZmZzZXQgdG86KERPTU5vZGUgKillbmQg
ZW5kT2Zmc2V0OihpbnQpZW5kT2Zmc2V0CkBAIC0xODExLDkgKzE4MTEsOSBAQAogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgICAgICAKICAgICAvLyBOT1RFOiBUaGUgZW51bXMgKm11c3QqIG1hdGNo
IHRoZSB2ZXJ5IHNpbWlsYXIgb25lcyBkZWNsYXJlZCBpbiBTZWxlY3Rpb25Db250cm9sbGVyLmgK
LSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKSk7
Ci0gICAgc2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoc3RhdGljX2Nhc3Q8RVRleHRH
cmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpKTsKLSAgICByZXR1cm4gW0RPTVJhbmdlIF9yYW5nZVdp
dGhJbXBsOnNlbGVjdGlvbi50b1JhbmdlKCkuZ2V0KCldOworICAgIFJlZlB0cjxTZWxlY3Rpb25D
b250cm9sbGVyPiBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcigqbV9mcmFtZS0+
c2VsZWN0aW9uKCkpOworICAgIHNlbGVjdGlvbi0+ZXhwYW5kVXNpbmdHcmFudWxhcml0eShzdGF0
aWNfY2FzdDxFVGV4dEdyYW51bGFyaXR5PihncmFudWxhcml0eSkpOworICAgIHJldHVybiBbRE9N
UmFuZ2UgX3JhbmdlV2l0aEltcGw6c2VsZWN0aW9uLT50b1JhbmdlKCkuZ2V0KCldOwogfQogCiAt
IChET01SYW5nZSAqKXJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYlNlbGVjdGlv
bkFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkJyaWRnZVNlbGVjdGlvbkRpcmVj
dGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkJyaWRnZVNlbGVjdGlvbkdyYW51bGFyaXR5
KWdyYW51bGFyaXR5CkBAIC0xODIyLDExICsxODIyLDExIEBACiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgICAgIAogICAgIC8vIE5PVEU6IFRoZSBlbnVtcyAqbXVzdCogbWF0Y2ggdGhlIHZlcnkg
c2ltaWxhciBvbmVzIGRlY2xhcmVkIGluIFNlbGVjdGlvbkNvbnRyb2xsZXIuaAotICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpKTsKLSAgICBzZWxl
Y3Rpb24ubW9kaWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVBbHRlcj4oYWx0
ZXJhdGlvbiksIAorICAgIFJlZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzZWxlY3Rpb24gPSBu
ZXcgU2VsZWN0aW9uQ29udHJvbGxlcigqbV9mcmFtZS0+c2VsZWN0aW9uKCkpOworICAgIHNlbGVj
dGlvbi0+bW9kaWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVBbHRlcj4oYWx0
ZXJhdGlvbiksIAogICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U2VsZWN0aW9uQ29u
dHJvbGxlcjo6RURpcmVjdGlvbj4oZGlyZWN0aW9uKSwgCiAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxFVGV4dEdyYW51bGFyaXR5PihncmFudWxhcml0eSkpOwotICAgIHJldHVybiBb
RE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6c2VsZWN0aW9uLnRvUmFuZ2UoKS5nZXQoKV07CisgICAg
cmV0dXJuIFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpzZWxlY3Rpb24tPnRvUmFuZ2UoKS5nZXQo
KV07CiB9CiAKIC0gKHZvaWQpYWx0ZXJDdXJyZW50U2VsZWN0aW9uOihXZWJTZWxlY3Rpb25BbHRl
cmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihXZWJCcmlkZ2VTZWxlY3Rpb25EaXJlY3Rpb24p
ZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJCcmlkZ2VTZWxlY3Rpb25HcmFudWxhcml0eSlncmFu
dWxhcml0eQpAQCAtMTgzNSwxMCArMTgzNSwxMCBAQAogICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgIC8vIE5PVEU6IFRoZSBlbnVtcyAqbXVzdCogbWF0Y2ggdGhlIHZlcnkgc2ltaWxhciBv
bmVzIGRlY2xhcmVkIGluIFNlbGVjdGlvbkNvbnRyb2xsZXIuaAotICAgIFNlbGVjdGlvbkNvbnRy
b2xsZXIgc2VsZWN0aW9uKG1fZnJhbWUtPnNlbGVjdGlvbigpKTsKLSAgICBzZWxlY3Rpb24ubW9k
aWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVBbHRlcj4oYWx0ZXJhdGlvbiks
IAotICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U2VsZWN0aW9uQ29udHJvbGxlcjo6
RURpcmVjdGlvbj4oZGlyZWN0aW9uKSwgCi0gICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxFVGV4dEdyYW51bGFyaXR5PihncmFudWxhcml0eSkpOworICAgIFJlZlB0cjxTZWxlY3Rpb25D
b250cm9sbGVyPiBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcigqbV9mcmFtZS0+
c2VsZWN0aW9uKCkpOworICAgIHNlbGVjdGlvbi0+bW9kaWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlv
bkNvbnRyb2xsZXI6OkVBbHRlcj4oYWx0ZXJhdGlvbiksIAorICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVEaXJlY3Rpb24+KGRpcmVjdGlvbiks
IAorICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVUZXh0R3JhbnVsYXJpdHk+KGdy
YW51bGFyaXR5KSk7CiAKICAgICAvLyBzYXZlIHZlcnRpY2FsIG5hdmlnYXRpb24geCBwb3NpdGlv
biBpZiBuZWNlc3Nhcnk7IG1hbnkgdHlwZXMgb2YgbW90aW9uIGJsb3cgaXQgYXdheQogICAgIGlu
dCB4UG9zID0gRnJhbWU6Ok5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwpAQCAtMTg1
Nyw3ICsxODU3LDcgQEAKIAogICAgIAogICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBhbHdh
eXMgY2xlYXJzIHNhdmVkIHZlcnRpY2FsIG5hdmlnYXRpb24geCBwb3NpdGlvbgotICAgIG1fZnJh
bWUtPnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIG1fZnJhbWUtPnNldFNlbGVjdGlvbihz
ZWxlY3Rpb24uZ2V0KCkpOwogICAgIAogICAgIC8vIGFsdGVyaW5nIHRoZSBzZWxlY3Rpb24gYWxz
byBzZXRzIHRoZSBncmFudWxhcml0eSBiYWNrIHRvIGNoYXJhY3RlcgogICAgIC8vIE5PVEU6IFRo
ZSBvbmUgZXhjZXB0aW9uIGlzIHRoYXQgd2UgbmVlZCB0byBrZWVwIHdvcmQgZ3JhbnVsYXJpdHkK
QEAgLTE4ODEsOSArMTg4MSw5IEBACiAgICAgaWYgKCFmcmFtZUhhc1NlbGVjdGlvbihzZWxmKSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgCi0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBz
ZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCkpOwotICAgIHNlbGVjdGlvbi5tb2RpZnkoc3Rh
dGljX2Nhc3Q8U2VsZWN0aW9uQ29udHJvbGxlcjo6RUFsdGVyPihhbHRlcmF0aW9uKSwgc3RhdGlj
X2Nhc3Q8aW50Pih2ZXJ0aWNhbERpc3RhbmNlKSk7Ci0gICAgcmV0dXJuIFtET01SYW5nZSBfcmFu
Z2VXaXRoSW1wbDpzZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpXTsKKyAgICBSZWZQdHI8U2VsZWN0
aW9uQ29udHJvbGxlcj4gc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoKm1fZnJh
bWUtPnNlbGVjdGlvbigpKTsKKyAgICBzZWxlY3Rpb24tPm1vZGlmeShzdGF0aWNfY2FzdDxTZWxl
Y3Rpb25Db250cm9sbGVyOjpFQWx0ZXI+KGFsdGVyYXRpb24pLCBzdGF0aWNfY2FzdDxpbnQ+KHZl
cnRpY2FsRGlzdGFuY2UpKTsKKyAgICByZXR1cm4gW0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOnNl
bGVjdGlvbi0+dG9SYW5nZSgpLmdldCgpXTsKIH0KIAogLSAodm9pZClhbHRlckN1cnJlbnRTZWxl
Y3Rpb246KFdlYlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiB2ZXJ0aWNhbERpc3RhbmNl
OihmbG9hdCl2ZXJ0aWNhbERpc3RhbmNlCkBAIC0xODkxLDEyICsxODkxLDEyIEBACiAgICAgaWYg
KCFmcmFtZUhhc1NlbGVjdGlvbihzZWxmKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAg
ICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbihtX2ZyYW1lLT5zZWxlY3Rpb24oKSk7Ci0g
ICAgc2VsZWN0aW9uLm1vZGlmeShzdGF0aWNfY2FzdDxTZWxlY3Rpb25Db250cm9sbGVyOjpFQWx0
ZXI+KGFsdGVyYXRpb24pLCBzdGF0aWNfY2FzdDxpbnQ+KHZlcnRpY2FsRGlzdGFuY2UpKTsKKyAg
ICBSZWZQdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbkNv
bnRyb2xsZXIoKihtX2ZyYW1lLT5zZWxlY3Rpb24oKSkpOworICAgIHNlbGVjdGlvbi0+bW9kaWZ5
KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVBbHRlcj4oYWx0ZXJhdGlvbiksIHN0
YXRpY19jYXN0PGludD4odmVydGljYWxEaXN0YW5jZSkpOwogCiAgICAgLy8gc2V0dGluZyB0aGUg
c2VsZWN0aW9uIGFsd2F5cyBjbGVhcnMgc2F2ZWQgdmVydGljYWwgbmF2aWdhdGlvbiB4IHBvc2l0
aW9uLCBzbyBwcmVzZXJ2ZSBpdAogICAgIGludCB4UG9zID0gbV9mcmFtZS0+eFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKCk7Ci0gICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlv
bik7CisgICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbi5nZXQoKSk7CiAgICAgbV9m
cmFtZS0+c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoc3RhdGljX2Nhc3Q8RVRleHRHcmFudWxhcml0
eT4oV2ViQnJpZGdlU2VsZWN0QnlDaGFyYWN0ZXIpKTsKICAgICBtX2ZyYW1lLT5zZXRYUG9zRm9y
VmVydGljYWxBcnJvd05hdmlnYXRpb24oeFBvcyk7CiAKQEAgLTE5MjksMTYgKzE5MjksMTUgQEAK
ICAgICBpZiAoIVtyYW5nZSBjb2xsYXBzZWRdKQogICAgICAgICBhZmZpbml0eSA9IERPV05TVFJF
QU07CiAgICAgCi0gICAgLy8gRklYTUU6IENhbiB3ZSBwcm92aWRlIGV4dGVudEFmZmluaXR5Pwog
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQoc3RhcnRDb250YWluZXIsIFtyYW5nZSBz
dGFydE9mZnNldF0sIGFmZmluaXR5KTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChl
bmRDb250YWluZXIsIFtyYW5nZSBlbmRPZmZzZXRdLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7Ci0g
ICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5k
KTsKLSAgICBtX2ZyYW1lLT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBjbG9zZVR5cGluZyk7Cisg
ICAgUmVmUHRyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25D
b250cm9sbGVyKHZpc2libGVTdGFydCwgdmlzaWJsZUVuZCk7CisgICAgbV9mcmFtZS0+c2V0U2Vs
ZWN0aW9uKHNlbGVjdGlvbi5nZXQoKSwgY2xvc2VUeXBpbmcpOwogfQogCiAtIChET01SYW5nZSAq
KXNlbGVjdGVkRE9NUmFuZ2UKIHsKLSAgICByZXR1cm4gW0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBs
Om1fZnJhbWUtPnNlbGVjdGlvbigpLnRvUmFuZ2UoKS5nZXQoKV07CisgICAgcmV0dXJuIFtET01S
YW5nZSBfcmFuZ2VXaXRoSW1wbDptX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9SYW5nZSgpLmdldCgp
XTsKIH0KIAogLSAoTlNSYW5nZSljb252ZXJ0VG9OU1JhbmdlOihSYW5nZUltcGwgKilyYW5nZQpA
QCAtMTk4MSwyOCArMTk4MCwyNyBAQAogCiAtICh2b2lkKXNlbGVjdE5TUmFuZ2U6KE5TUmFuZ2Up
cmFuZ2UKIHsKLSAgICBtX2ZyYW1lLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihb
c2VsZiBjb252ZXJ0VG9ET01SYW5nZTpyYW5nZV0sIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7Cisg
ICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKFtzZWxmIGNv
bnZlcnRUb0RPTVJhbmdlOnJhbmdlXSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKIH0KIAogLSAo
TlNSYW5nZSlzZWxlY3RlZE5TUmFuZ2UKIHsKLSAgICByZXR1cm4gW3NlbGYgY29udmVydFRvTlNS
YW5nZTptX2ZyYW1lLT5zZWxlY3Rpb24oKS50b1JhbmdlKCkuZ2V0KCldOworICAgIHJldHVybiBb
c2VsZiBjb252ZXJ0VG9OU1JhbmdlOm1fZnJhbWUtPnNlbGVjdGlvbigpLT50b1JhbmdlKCkuZ2V0
KCldOwogfQogCiAtIChOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5CiB7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TU2VsZWN0aW9uQWZmaW5pdHk+KG1fZnJhbWUtPnNlbGVj
dGlvbigpLmFmZmluaXR5KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOU1NlbGVjdGlvbkFm
ZmluaXR5PihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+YWZmaW5pdHkoKSk7CiB9CiAKIC0gKHZvaWQp
c2V0TWFya0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgUmFuZ2VJbXBsKiByID0g
W3JhbmdlIF9yYW5nZUltcGxdOwotICAgIG1fZnJhbWUtPnNldE1hcmsoU2VsZWN0aW9uKHN0YXJ0
UG9zaXRpb24ociksIGVuZFBvc2l0aW9uKHIpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAg
IG1fZnJhbWUtPnNldE1hcmsobmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoW3JhbmdlIF9yYW5nZUlt
cGxdLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogfQogCiAtIChET01SYW5nZSAqKW1hcmtET01S
YW5nZQogewotICAgIHJldHVybiBbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6bV9mcmFtZS0+bWFy
aygpLnRvUmFuZ2UoKS5nZXQoKV07CisgICAgcmV0dXJuIFtET01SYW5nZSBfcmFuZ2VXaXRoSW1w
bDptX2ZyYW1lLT5tYXJrKCktPnRvUmFuZ2UoKS5nZXQoKV07CiB9CiAKIC0gKHZvaWQpc2V0TWFy
a2VkVGV4dERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGN1c3RvbUF0dHJpYnV0ZXM6KE5TQXJy
YXkgKilhdHRyaWJ1dGVzIHJhbmdlczooTlNBcnJheSAqKXJhbmdlcwpAQCAtMjI1NCw3ICsyMjUy
LDcgQEAKIAogLSAodm9pZCltb3ZlU2VsZWN0aW9uVG9EcmFnQ2FyZXQ6KERPTURvY3VtZW50RnJh
Z21lbnQgKilzZWxlY3Rpb25GcmFnbWVudCBzbWFydE1vdmU6KEJPT0wpc21hcnRNb3ZlCiB7Ci0g
ICAgUG9zaXRpb24gYmFzZSA9IG1fZnJhbWUtPmRyYWdDYXJldCgpLmJhc2UoKTsKKyAgICBQb3Np
dGlvbiBiYXNlID0gbV9mcmFtZS0+ZHJhZ0NhcmV0KCktPmJhc2UoKTsKICAgICBFZGl0Q29tbWFu
ZFB0cihuZXcgTW92ZVNlbGVjdGlvbkNvbW1hbmQobV9mcmFtZS0+eG1sRG9jSW1wbCgpLCBbc2Vs
ZWN0aW9uRnJhZ21lbnQgX2ZyYWdtZW50SW1wbF0sIGJhc2UsIHNtYXJ0TW92ZSkpLmFwcGx5KCk7
CiB9CiAKQEAgLTIyNzUsMTkgKzIyNzMsMTggQEAKIH0KIAogLSAodm9pZCltb3ZlRHJhZ0NhcmV0
VG9Qb2ludDooTlNQb2ludClwb2ludAoteyAgIAotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgZHJh
Z0NhcmV0KFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF0pOwotICAgIG1fZnJh
bWUtPnNldERyYWdDYXJldChkcmFnQ2FyZXQpOworeworICAgIG1fZnJhbWUtPnNldERyYWdDYXJl
dChuZXcgU2VsZWN0aW9uQ29udHJvbGxlcihbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6
cG9pbnRdKSk7CiB9CiAKIC0gKHZvaWQpcmVtb3ZlRHJhZ0NhcmV0CiB7Ci0gICAgbV9mcmFtZS0+
c2V0RHJhZ0NhcmV0KFNlbGVjdGlvbkNvbnRyb2xsZXIoKSk7CisgICAgbV9mcmFtZS0+c2V0RHJh
Z0NhcmV0KG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKCkpOwogfQogCiAtIChET01SYW5nZSAqKWRy
YWdDYXJldERPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpt
X2ZyYW1lLT5kcmFnQ2FyZXQoKS50b1JhbmdlKCkuZ2V0KCldOworICAgIHJldHVybiBbRE9NUmFu
Z2UgX3JhbmdlV2l0aEltcGw6bV9mcmFtZS0+ZHJhZ0NhcmV0KCktPnRvUmFuZ2UoKS5nZXQoKV07
CiB9CiAKIC0gKERPTVJhbmdlICopZWRpdGFibGVET01SYW5nZUZvclBvaW50OihOU1BvaW50KXBv
aW50CkBAIC0yNDU1LDcgKzI0NTIsNyBAQAogICAgIGlmICghdikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCkuZXh0ZW50KCk7Cisg
ICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPmV4dGVudCgpOwogICAg
IGlmIChleHRlbnQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTI0NjcsNyAr
MjQ2NCw3IEBACiAgICAgaWYgKCFkb2N1bWVudFZpZXcpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBJbnRSZWN0IGV4dGVudFJlY3QgPSByZW5kZXJlci0+Y2FyZXRSZWN0KGV4dGVudC5vZmZz
ZXQoKSwgbV9mcmFtZS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CisgICAgSW50UmVjdCBleHRl
bnRSZWN0ID0gcmVuZGVyZXItPmNhcmV0UmVjdChleHRlbnQub2Zmc2V0KCksIG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5hZmZpbml0eSgpKTsKICAgICBSZW5kZXJMYXllciAqbGF5ZXIgPSByZW5kZXJl
ci0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICBpZiAobGF5ZXIpCiAgICAgICAgIGxheWVyLT5zY3Jv
bGxSZWN0VG9WaXNpYmxlKGV4dGVudFJlY3QpOwpAQCAtMjYyMCwxMSArMjYxNywxMSBAQAogICAg
IGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgCi0gICAgU2VsZWN0
aW9uQ29udHJvbGxlciBzZWxlY3Rpb24obV9mcmFtZS0+c2VsZWN0aW9uKCkpOwotICAgIGlmICgh
c2VsZWN0aW9uLmlzQ2FyZXQoKSkKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyICpzZWxlY3Rpb24g
PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNlbGVjdGlvbi0+aXNDYXJldCgpKQog
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0KHNlbGVjdGlv
bi5zdGFydCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0KHNlbGVjdGlvbi0+c3RhcnQoKSwgc2VsZWN0aW9uLT5hZmZpbml0eSgpKTsKICAgICBWaXNp
YmxlUG9zaXRpb24gbmV4dCA9IGNhcmV0Lm5leHQoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gcHJl
dmlvdXMgPSBjYXJldC5wcmV2aW91cygpOwogICAgIGlmIChwcmV2aW91cy5pc051bGwoKSB8fCBu
ZXh0LmlzTnVsbCgpIHx8IGNhcmV0ID09IG5leHQgfHwgY2FyZXQgPT0gcHJldmlvdXMpCkluZGV4
OiBXZWJDb3JlL2t3cS9LV1FBY2NPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rd3Ev
S1dRQWNjT2JqZWN0Lm1tCShyZXZpc2lvbiAxMjI1MSkKKysrIFdlYkNvcmUva3dxL0tXUUFjY09i
amVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtOTE1LDE2ICs5MTUsMTYgQEAKICAgICAgICAgLy8g
Tk9URTogQlVHIHN1cHBvcnQgbmVzdGVkIFdlYkFyZWFzLCBsaWtlIGluIDxodHRwOi8vd2ViY291
cnNlcy5uaXUuZWR1Lz4KICAgICAgICAgLy8gKHRoZXJlIGlzIGEgd2ViIGFyY2hpdmUgb2YgdGhp
cyBwYWdlIGF0dGFjaGVkIHRvIDxyZGFyOi8vcHJvYmxlbS8zODg4OTczPikKICAgICAgICAgLy8g
VHJvdWJsZSBpcyB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggZG9jdW1lbnQgdmlldyB0byBhc2suCi0g
ICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgICBzZWwgPSBbc2VsZiB0b3BWaWV3XS0+ZnJhbWUo
KS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChzZWwuaXNOb25lKCkpIHsKKyAgICAgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlciAqc2VsID0gW3NlbGYgdG9wVmlld10tPmZyYW1lKCktPnNlbGVjdGlv
bigpOworICAgICAgICBpZiAoc2VsLT5pc05vbmUoKSkgewogICAgICAgICAgICAgc2VsID0gbV9y
ZW5kZXJlci0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+Y2FudmFzKCktPnZpZXcoKS0+ZnJhbWUo
KS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoc2VsLmlzTm9uZSgpKQorICAgICAgICAg
ICAgaWYgKHNlbC0+aXNOb25lKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIC8vIHJldHVybiBhIG1hcmtlciByYW5nZSBmb3Ig
dGhlIHNlbGVjdGlvbiBzdGFydCB0byBlbmQKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
UG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24oc2VsLnN0YXJ0KCksIHNlbC5hZmZpbml0eSgpKTsK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKHNl
bC5lbmQoKSwgc2VsLmFmZmluaXR5KCkpOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQ
b3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihzZWwtPnN0YXJ0KCksIHNlbC0+YWZmaW5pdHkoKSk7
CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihz
ZWwtPmVuZCgpLCBzZWwtPmFmZmluaXR5KCkpOwogICAgICAgICByZXR1cm4gKGlkKSBbc2VsZiB0
ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczpzdGFydFBvc2l0aW9uIGFuZEVuZFBv
czplbmRQb3NpdGlvbl07CiAgICAgfQogICAgIApAQCAtMTg5OCw4ICsxODk4LDcgQEAKICAgICAK
ICAgICAvLyBtYWtlIHNlbGVjdGlvbiBhbmQgdGVsbCB0aGUgZG9jdW1lbnQgdG8gdXNlIGl0CiAg
ICAgLy8gTk9URTogQlVHIHN1cHBvcnQgbmVzdGVkIFdlYkFyZWFzCi0gICAgU2VsZWN0aW9uQ29u
dHJvbGxlciBzZWwgPSBTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBl
bmRWaXNpYmxlUG9zaXRpb24pOwotICAgIFtzZWxmIHRvcERvY3VtZW50XS0+ZnJhbWUoKS0+c2V0
U2VsZWN0aW9uKHNlbCk7CisgICAgW3NlbGYgdG9wRG9jdW1lbnRdLT5mcmFtZSgpLT5zZXRTZWxl
Y3Rpb24obmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnRWaXNpYmxlUG9zaXRpb24sIGVuZFZp
c2libGVQb3NpdGlvbikpOwogfQogCiAtICh2b2lkKWFjY2Vzc2liaWxpdHlTZXRWYWx1ZTooaWQp
dmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyAqKWF0dHJpYnV0ZU5hbWU7CkluZGV4OiBXZWJD
b3JlL2t3cS9LV1FSZW5kZXJUcmVlRGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3dx
L0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAJKHJldmlzaW9uIDEyMjUxKQorKysgV2ViQ29yZS9rd3Ev
S1dRUmVuZGVyVHJlZURlYnVnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDE1ICs0MDIsMTUg
QEAKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBTZWxlY3Rpb25Db250
cm9sbGVyIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9u
LmlzQ2FyZXQoKSkgewotICAgICAgICB0cyA8PCAiY2FyZXQ6IHBvc2l0aW9uICIgPDwgc2VsZWN0
aW9uLnN0YXJ0KCkub2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24u
c3RhcnQoKS5ub2RlKCkpOwotICAgICAgICBpZiAoc2VsZWN0aW9uLmFmZmluaXR5KCkgPT0gVVBT
VFJFQU0pCisgICAgU2VsZWN0aW9uQ29udHJvbGxlciAqc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVj
dGlvbigpOworICAgIGlmIChzZWxlY3Rpb24tPmlzQ2FyZXQoKSkgeworICAgICAgICB0cyA8PCAi
Y2FyZXQ6IHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLT5zdGFydCgpLm9mZnNldCgpIDw8ICIgb2Yg
IiA8PCBub2RlUG9zaXRpb24oc2VsZWN0aW9uLT5zdGFydCgpLm5vZGUoKSk7CisgICAgICAgIGlm
IChzZWxlY3Rpb24tPmFmZmluaXR5KCkgPT0gVVBTVFJFQU0pCiAgICAgICAgICAgICB0cyA8PCAi
ICh1cHN0cmVhbSBhZmZpbml0eSkiOwogICAgICAgICB0cyA8PCAiXG4iOyAKLSAgICB9IGVsc2Ug
aWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAgICAgdHMgPDwgInNlbGVjdGlvbiBzdGFy
dDogcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24uc3RhcnQoKS5vZmZzZXQoKSA8PCAiIG9mICIgPDwg
bm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKSkgPDwgIlxuIgotICAgICAgICAg
ICA8PCAic2VsZWN0aW9uIGVuZDogICBwb3NpdGlvbiAiIDw8IHNlbGVjdGlvbi5lbmQoKS5vZmZz
ZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmQoKS5ub2RlKCkpIDw8
ICJcbiI7IAorICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLT5pc1JhbmdlKCkpIHsKKyAgICAgICAg
dHMgPDwgInNlbGVjdGlvbiBzdGFydDogcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24tPnN0YXJ0KCku
b2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24tPnN0YXJ0KCkubm9k
ZSgpKSA8PCAiXG4iCisgICAgICAgICAgIDw8ICJzZWxlY3Rpb24gZW5kOiAgIHBvc2l0aW9uICIg
PDwgc2VsZWN0aW9uLT5lbmQoKS5vZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNl
bGVjdGlvbi0+ZW5kKCkubm9kZSgpKSA8PCAiXG4iOyAKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZp
c2lvbiAxMjI1MSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NzUsNyArNDc1LDcgQEAKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIHNlbGVjdGVkIHBhcnQgb2Yg
dGhlIEhUTUwuCiAgICAqLwotICBXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyICZzZWxlY3Rp
b24oKSBjb25zdDsKKyAgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciAqc2VsZWN0aW9uKCkg
Y29uc3Q7CiAKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBzZWxl
Y3Rpb24gKGNoYXJhY3Rlciwgd29yZCwgbGluZSwgcGFyYWdyYXBoKS4KQEAgLTQ5MCwzMiArNDkw
LDMyIEBACiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBkcmFnIGNhcmV0IG9mIHRoZSBIVE1MLgog
ICAgKi8KLSAgY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciAmZHJhZ0NhcmV0KCkg
Y29uc3Q7CisgIFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgKmRyYWdDYXJldCgpIGNvbnN0
OwogCiAgIC8qKgogICAgKiBTZXRzIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KICAgICovCi0gIHZv
aWQgc2V0U2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJiwgYm9v
bCBjbG9zZVR5cGluZyA9IHRydWUsIGJvb2wga2VlcFR5cGluZ1N0eWxlID0gZmFsc2UpOworICB2
b2lkIHNldFNlbGVjdGlvbihXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyICosIGJvb2wgY2xv
c2VUeXBpbmcgPSB0cnVlLCBib29sIGtlZXBUeXBpbmdTdHlsZSA9IGZhbHNlKTsKIAogICAvKioK
ICAgICogUmV0dXJucyB3aGV0aGVyIHNlbGVjdGlvbiBjYW4gYmUgY2hhbmdlZC4KICAgICovCi0g
IGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRy
b2xsZXIgJikgY29uc3Q7CisgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKFdlYkNvcmU6OlNl
bGVjdGlvbkNvbnRyb2xsZXIgKikgY29uc3Q7CiAKICAgLyoqCiAgICAqIFJldHVybnMgYSBtYXJr
LCB0byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCiAgICAqLwotICBjb25zdCBXZWJDb3JlOjpT
ZWxlY3Rpb24gJm1hcmsoKSBjb25zdDsKKyAgV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciAq
bWFyaygpIGNvbnN0OwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBtYXJrLgogICAgKi8KLSAg
dm9pZCBzZXRNYXJrKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbiAmKTsKKyAgdm9pZCBzZXRNYXJr
KFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgKik7CiAKICAgLyoqCiAgICAqIFNldHMgdGhl
IGN1cnJlbnQgZHJhZyBjYXJldC4KICAgICovCi0gIHZvaWQgc2V0RHJhZ0NhcmV0KGNvbnN0IFdl
YkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJik7CisgIHZvaWQgc2V0RHJhZ0NhcmV0KFdlYkNv
cmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgKik7CiAgIAogICAvKioKICAgICogVHJhbnNwb3NlcyBj
aGFyYWN0ZXJzIGVpdGhlciBzaWRlIG9mIGNhcmV0IHNlbGVjdGlvbi4KQEAgLTgxMiw3ICs4MTIs
NyBAQAogICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpnZXRPYmplY3RJbnN0YW5j
ZUZvcldpZGdldChRV2lkZ2V0KikgPSAwOwogICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3Rh
bmNlICpnZXRBcHBsZXRJbnN0YW5jZUZvcldpZGdldChRV2lkZ2V0KikgPSAwOwogICB2aXJ0dWFs
IHZvaWQgbWFya01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3Jkcyhjb25zdCBXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb24gJikgPSAwOwotICB2aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxsaW5ncyhjb25z
dCBXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyICYpID0gMDsKKyAgdmlydHVhbCB2b2lkIG1h
cmtNaXNzcGVsbGluZ3MoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlciAqKSA9IDA7CiAgIHZp
cnR1YWwgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFdlYkNvcmU6OkRPTVN0cmluZyYg
bWVzc2FnZSwgIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBXZWJDb3JlOjpET01TdHJp
bmcmIHNvdXJjZUlEKSA9IDA7CiAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoY29u
c3QgV2ViQ29yZTo6RE9NU3RyaW5nJiBtZXNzYWdlKSA9IDA7CiAgIHZpcnR1YWwgYm9vbCBydW5K
YXZhU2NyaXB0Q29uZmlybShjb25zdCBXZWJDb3JlOjpET01TdHJpbmcmIG1lc3NhZ2UpID0gMDsK
QEAgLTgzNiw5ICs4MzYsOSBAQAogICB2aXJ0dWFsIHZvaWQgaXNzdWVQYXN0ZUNvbW1hbmQoKSA9
IDA7CiAgIHZpcnR1YWwgdm9pZCBpc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQoKSA9IDA7
CiAgIHZpcnR1YWwgdm9pZCBpc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKSA9IDA7Ci0gIHZpcnR1YWwg
dm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkNv
bnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZykgPSAwOworICB2aXJ0dWFs
IHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9s
bGVyICpvbGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpID0gMDsKICAgdmlydHVhbCB2b2lk
IHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpID0gMDsKLSAgdmlydHVhbCBib29sIHNob3VsZENo
YW5nZVNlbGVjdGlvbihjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyICZvbGRTZWxl
Y3Rpb24sIGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJm5ld1NlbGVjdGlvbiwg
V2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdCA9
IDA7CisgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oV2ViQ29yZTo6U2VsZWN0
aW9uQ29udHJvbGxlciAqb2xkU2VsZWN0aW9uLCBXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVy
ICpuZXdTZWxlY3Rpb24sIGtodG1sOjpFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxl
Y3RpbmcpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB2b2lkIHBhcnRDbGVhcmVkSW5CZWdpbigpID0g
MDsgCiAgIHZpcnR1YWwgdm9pZCBzYXZlRG9jdW1lbnRTdGF0ZSgpID0gMDsKICAgdmlydHVhbCB2
b2lkIHJlc3RvcmVEb2N1bWVudFN0YXRlKCkgPSAwOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlz
aW9uIDEyMjUxKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzNCw3ICsyMzQsNyBAQAogICAgIHNldFN0YXRpY0JhY2tncm91bmQoZmFsc2UpOwogICAg
IAogICAgIC8vIEZJWE1FOiA2NDk4IFNob3VsZCBqdXN0IGJlIGFibGUgdG8gY2FsbCBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS5jbGVhcigpCi0gICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKFNlbGVjdGlv
bkNvbnRyb2xsZXIoKSk7CisgICAgbV9mcmFtZS0+c2V0U2VsZWN0aW9uKG5ldyBTZWxlY3Rpb25D
b250cm9sbGVyKCkpOwogCiAgICAgZC0+cmVzZXQoKTsKIApJbmRleDogV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAx
MjI1MSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3
ICsxNTUsOSBAQAogICBmcmFtZUNvdW50ID0gMDsKIAogICBkID0gbmV3IEZyYW1lUHJpdmF0ZShw
YXJlbnQoKSk7Ci0KKyAgZC0+bV9zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcigp
OworICBkLT5tX2RyYWdDYXJldCA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKCk7CisgIGQtPm1f
bWFyayA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKCk7CiAgIGQtPm1fdmlldyA9IHZpZXc7CiAg
IHNldFdpZGdldCggZC0+bV92aWV3ICk7CiAgIApAQCAtMTMxOCwxNyArMTMyMCwxNyBAQAogCiBR
U3RyaW5nIEZyYW1lOjpzZWxlY3RlZFRleHQoKSBjb25zdAogewotICAgIHJldHVybiBwbGFpblRl
eHQoc2VsZWN0aW9uKCkudG9SYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KHNl
bGVjdGlvbigpLT50b1JhbmdlKCkuZ2V0KCkpOwogfQogCiBib29sIEZyYW1lOjpoYXNTZWxlY3Rp
b24oKSBjb25zdAogewotICAgIHJldHVybiBkLT5tX3NlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgp
OworICAgIHJldHVybiBzZWxlY3Rpb24oKS0+aXNDYXJldE9yUmFuZ2UoKTsKIH0KIAotU2VsZWN0
aW9uQ29udHJvbGxlciAmRnJhbWU6OnNlbGVjdGlvbigpIGNvbnN0CitTZWxlY3Rpb25Db250cm9s
bGVyICpGcmFtZTo6c2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZC0+bV9zZWxlY3Rp
b247CisgICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9uLmdldCgpOwogfQogCiBFVGV4dEdyYW51bGFy
aXR5IEZyYW1lOjpzZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0CkBAIC0xMzQxLDMzICsxMzQz
LDQwIEBACiAgICAgZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSA9IGdyYW51bGFyaXR5OwogfQog
Ci1jb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZGcmFtZTo6ZHJhZ0NhcmV0KCkgY29uc3QKK1Nl
bGVjdGlvbkNvbnRyb2xsZXIgKkZyYW1lOjpkcmFnQ2FyZXQoKSBjb25zdAogewotICAgIHJldHVy
biBkLT5tX2RyYWdDYXJldDsKKyAgICByZXR1cm4gZC0+bV9kcmFnQ2FyZXQuZ2V0KCk7CiB9CiAK
LWNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvbiYgRnJhbWU6Om1hcmsoKSBjb25zdAorU2VsZWN0aW9u
Q29udHJvbGxlciAqRnJhbWU6Om1hcmsoKSBjb25zdAogewotICAgIHJldHVybiBkLT5tX21hcms7
CisgICAgcmV0dXJuIGQtPm1fbWFyay5nZXQoKTsKIH0KIAotdm9pZCBGcmFtZTo6c2V0TWFyayhj
b25zdCBXZWJDb3JlOjpTZWxlY3Rpb24mIHMpCit2b2lkIEZyYW1lOjpzZXRNYXJrKFNlbGVjdGlv
bkNvbnRyb2xsZXIgKnMpCiB7CiAgICAgZC0+bV9tYXJrID0gczsKIH0KIAotdm9pZCBGcmFtZTo6
c2V0U2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJnMsIGJvb2wgY2xvc2VUeXBp
bmcsIGJvb2wga2VlcFR5cGluZ1N0eWxlKQordm9pZCBGcmFtZTo6c2V0U2VsZWN0aW9uKFNlbGVj
dGlvbkNvbnRyb2xsZXIgKm5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBrZWVw
VHlwaW5nU3R5bGUpCiB7Ci0gICAgaWYgKGQtPm1fc2VsZWN0aW9uID09IHMpIHsKKyAgICBTZWxl
Y3Rpb25Db250cm9sbGVyICpvbGRTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKKworICAgIEFTU0VS
VChuZXdTZWxlY3Rpb24pOworICAgIEFTU0VSVChvbGRTZWxlY3Rpb24pOworICAgIAorICAgIGlm
ICgqbmV3U2VsZWN0aW9uID09ICpvbGRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKLSAgICB9
CiAgICAgCiAgICAgY2xlYXJDYXJldFJlY3RJZk5lZWRlZCgpOwotCi0gICAgU2VsZWN0aW9uQ29u
dHJvbGxlciBvbGRTZWxlY3Rpb24gPSBkLT5tX3NlbGVjdGlvbjsKLQotICAgIGQtPm1fc2VsZWN0
aW9uID0gczsKLSAgICBpZiAoIXMuaXNOb25lKCkpCisgICAgCisgICAgRG9jdW1lbnRJbXBsICpk
b2N1bWVudCA9IHhtbERvY0ltcGwoKTsKKyAgICBkb2N1bWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5l
cihET01Ob2RlUmVtb3ZlZEV2ZW50LCBvbGRTZWxlY3Rpb24sIGZhbHNlKTsKKyAgICBkb2N1bWVu
dC0+YWRkRXZlbnRMaXN0ZW5lcihET01Ob2RlUmVtb3ZlZEV2ZW50LCBuZXdTZWxlY3Rpb24sIGZh
bHNlKTsKKyAgICAKKyAgICBkLT5tX3NlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKKyAgICAKKyAg
ICBpZiAoIXNlbGVjdGlvbigpLT5pc05vbmUoKSkKICAgICAgICAgc2V0Rm9jdXNOb2RlSWZOZWVk
ZWQoKTsKICAgICAKICAgICBzZWxlY3Rpb25MYXlvdXRDaGFuZ2VkKCk7CkBAIC0xMzg1LDE5ICsx
Mzk0LDIxIEBACiAgICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIGNs
b3NlVHlwaW5nKTsKIH0KIAotdm9pZCBGcmFtZTo6c2V0RHJhZ0NhcmV0KGNvbnN0IFNlbGVjdGlv
bkNvbnRyb2xsZXIgJmRyYWdDYXJldCkKK3ZvaWQgRnJhbWU6OnNldERyYWdDYXJldChTZWxlY3Rp
b25Db250cm9sbGVyICpuZXdEcmFnQ2FyZXQpCiB7Ci0gICAgaWYgKGQtPm1fZHJhZ0NhcmV0ICE9
IGRyYWdDYXJldCkgewotICAgICAgICBkLT5tX2RyYWdDYXJldC5uZWVkc0NhcmV0UmVwYWludCgp
OwotICAgICAgICBkLT5tX2RyYWdDYXJldCA9IGRyYWdDYXJldDsKLSAgICAgICAgZC0+bV9kcmFn
Q2FyZXQubmVlZHNDYXJldFJlcGFpbnQoKTsKLSAgICB9CisgICAgU2VsZWN0aW9uQ29udHJvbGxl
ciAqb2xkRHJhZ0NhcmV0ID0gZHJhZ0NhcmV0KCk7CisgICAgaWYgKCpvbGREcmFnQ2FyZXQgIT0g
Km5ld0RyYWdDYXJldCkgeworICAgICAgICBkLT5tX2RyYWdDYXJldC0+bmVlZHNDYXJldFJlcGFp
bnQoKTsKKyAgICAgICAgZC0+bV9kcmFnQ2FyZXQgPSBuZXdEcmFnQ2FyZXQ7CisgICAgICAgIGQt
Pm1fZHJhZ0NhcmV0LT5uZWVkc0NhcmV0UmVwYWludCgpOworICAgIH0gZWxzZSBpZiAob2xkRHJh
Z0NhcmV0ICE9IG5ld0RyYWdDYXJldCkKKyAgICAgICAgZC0+bV9kcmFnQ2FyZXQgPSBuZXdEcmFn
Q2FyZXQ7CiB9CiAKIHZvaWQgRnJhbWU6OmludmFsaWRhdGVTZWxlY3Rpb24oKQogewogICAgIGNs
ZWFyQ2FyZXRSZWN0SWZOZWVkZWQoKTsKLSAgICBkLT5tX3NlbGVjdGlvbi5zZXROZWVkc0xheW91
dCgpOworICAgIHNlbGVjdGlvbigpLT5zZXROZWVkc0xheW91dCgpOwogICAgIHNlbGVjdGlvbkxh
eW91dENoYW5nZWQoKTsKIH0KIApAQCAtMTQxMiwxMyArMTQyMywxMiBAQAogICAgIHNlbGVjdGlv
bkxheW91dENoYW5nZWQoKTsKIH0KIAotCiB2b2lkIEZyYW1lOjpjbGVhckNhcmV0UmVjdElmTmVl
ZGVkKCkKIHsKICAgICBpZiAoZC0+bV9jYXJldFBhaW50KSB7CiAgICAgICAgIGQtPm1fY2FyZXRQ
YWludCA9IGZhbHNlOwotICAgICAgICBkLT5tX3NlbGVjdGlvbi5uZWVkc0NhcmV0UmVwYWludCgp
OwotICAgIH0gICAgICAgIAorICAgICAgICBzZWxlY3Rpb24oKS0+bmVlZHNDYXJldFJlcGFpbnQo
KTsKKyAgICB9CiB9CiAKIC8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IHRlbGxzIHdoZXRoZXIgYSBw
YXJ0aWN1bGFyIG5vZGUgaXMgYW4gZWxlbWVudCB0aGF0IGhhcyBhbiBlbnRpcmUKQEAgLTE0MzYs
MTAgKzE0NDYsMTAgQEAKIAogdm9pZCBGcmFtZTo6c2V0Rm9jdXNOb2RlSWZOZWVkZWQoKQogewot
ICAgIGlmICgheG1sRG9jSW1wbCgpIHx8IGQtPm1fc2VsZWN0aW9uLmlzTm9uZSgpIHx8ICFkLT5t
X2lzRm9jdXNlZCkKKyAgICBpZiAoIXhtbERvY0ltcGwoKSB8fCBzZWxlY3Rpb24oKS0+aXNOb25l
KCkgfHwgIWQtPm1faXNGb2N1c2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBOb2RlSW1wbCAq
c3RhcnROb2RlID0gZC0+bV9zZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZUltcGwg
KnN0YXJ0Tm9kZSA9IHNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsKICAgICBOb2RlSW1wbCAq
dGFyZ2V0ID0gc3RhcnROb2RlID8gc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAw
OwogICAgIAogICAgIGlmICh0YXJnZXQpIHsKQEAgLTE0NjYsMTAgKzE0NzYsMTAgQEAKIAogICAg
IC8vIHNlZSBpZiBhIG5ldyBjYXJldCBibGluayB0aW1lciBuZWVkcyB0byBiZSBzdGFydGVkCiAg
ICAgaWYgKGQtPm1fY2FyZXRWaXNpYmxlICYmIGQtPm1fY2FyZXRCbGlua3MgJiYgCi0gICAgICAg
IGQtPm1fc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBkLT5tX3NlbGVjdGlvbi5zdGFydCgpLm5vZGUo
KS0+aXNDb250ZW50RWRpdGFibGUoKSkgeworICAgICAgICBzZWxlY3Rpb24oKS0+aXNDYXJldCgp
ICYmIHNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkgewog
ICAgICAgICBkLT5tX2NhcmV0QmxpbmtUaW1lciA9IHN0YXJ0VGltZXIoQ0FSRVRfQkxJTktfRlJF
UVVFTkNZKTsKICAgICAgICAgZC0+bV9jYXJldFBhaW50ID0gdHJ1ZTsKLSAgICAgICAgZC0+bV9z
ZWxlY3Rpb24ubmVlZHNDYXJldFJlcGFpbnQoKTsKKyAgICAgICAgc2VsZWN0aW9uKCktPm5lZWRz
Q2FyZXRSZXBhaW50KCk7CiAgICAgfQogCiAgICAgaWYgKGQtPm1fZG9jKQpAQCAtMTQ5MSwxNiAr
MTUwMSwxNiBAQAogICAgIGlmIChlLT50aW1lcklkKCkgPT0gZC0+bV9jYXJldEJsaW5rVGltZXIg
JiYgCiAgICAgICAgIGQtPm1fY2FyZXRWaXNpYmxlICYmIAogICAgICAgICBkLT5tX2NhcmV0Qmxp
bmtzICYmIAotICAgICAgICBkLT5tX3NlbGVjdGlvbi5pc0NhcmV0KCkpIHsKKyAgICAgICAgc2Vs
ZWN0aW9uKCktPmlzQ2FyZXQoKSkgewogICAgICAgICBpZiAoZC0+bV9iTW91c2VQcmVzc2VkKSB7
CiAgICAgICAgICAgICBpZiAoIWQtPm1fY2FyZXRQYWludCkgewogICAgICAgICAgICAgICAgIGQt
Pm1fY2FyZXRQYWludCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZC0+bV9zZWxlY3Rpb24ubmVl
ZHNDYXJldFJlcGFpbnQoKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24oKS0+bmVlZHNDYXJl
dFJlcGFpbnQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIGQtPm1fY2FyZXRQYWludCA9ICFkLT5tX2NhcmV0UGFpbnQ7Ci0gICAgICAgICAg
ICBkLT5tX3NlbGVjdGlvbi5uZWVkc0NhcmV0UmVwYWludCgpOworICAgICAgICAgICAgc2VsZWN0
aW9uKCktPm5lZWRzQ2FyZXRSZXBhaW50KCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNTA4
LDEyICsxNTE4LDEyIEBACiB2b2lkIEZyYW1lOjpwYWludENhcmV0KFFQYWludGVyICpwLCBjb25z
dCBJbnRSZWN0ICZyZWN0KSBjb25zdAogewogICAgIGlmIChkLT5tX2NhcmV0UGFpbnQpCi0gICAg
ICAgIGQtPm1fc2VsZWN0aW9uLnBhaW50Q2FyZXQocCwgcmVjdCk7CisgICAgICAgIHNlbGVjdGlv
bigpLT5wYWludENhcmV0KHAsIHJlY3QpOwogfQogCiB2b2lkIEZyYW1lOjpwYWludERyYWdDYXJl
dChRUGFpbnRlciAqcCwgY29uc3QgSW50UmVjdCAmcmVjdCkgY29uc3QKIHsKLSAgICBkLT5tX2Ry
YWdDYXJldC5wYWludENhcmV0KHAsIHJlY3QpOworICAgIGRyYWdDYXJldCgpLT5wYWludENhcmV0
KHAsIHJlY3QpOwogfQogCiB2b2lkIEZyYW1lOjp1cmxTZWxlY3RlZCggY29uc3QgUVN0cmluZyAm
dXJsLCBpbnQgYnV0dG9uLCBpbnQgc3RhdGUsIGNvbnN0IFFTdHJpbmcgJl90YXJnZXQsCkBAIC0y
MTQyLDcgKzIxNTIsNyBAQAogYm9vbCBGcmFtZTo6aXNQb2ludEluc2lkZVNlbGVjdGlvbihpbnQg
eCwgaW50IHkpCiB7CiAgICAgLy8gVHJlYXQgYSBjb2xsYXBzZWQgc2VsZWN0aW9uIGxpa2Ugbm8g
c2VsZWN0aW9uLgotICAgIGlmICghZC0+bV9zZWxlY3Rpb24uaXNSYW5nZSgpKQorICAgIGlmICgh
c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
eG1sRG9jSW1wbCgpLT5yZW5kZXJlcigpKSAKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE1
NywxNiArMjE2NywxNiBAQAogICAgIGlmIChwb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIE5vZGVJbXBsICpuID0gZC0+bV9zZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7
CisgICAgTm9kZUltcGwgKm4gPSBzZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCk7CiAgICAgd2hp
bGUgKG4pIHsKICAgICAgICAgaWYgKG4gPT0gcG9zLm5vZGUoKSkgewotICAgICAgICAgICAgaWYg
KChuID09IGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpICYmIHBvcy5vZmZzZXQoKSA8IGQt
Pm1fc2VsZWN0aW9uLnN0YXJ0KCkub2Zmc2V0KCkpIHx8Ci0gICAgICAgICAgICAgICAgKG4gPT0g
ZC0+bV9zZWxlY3Rpb24uZW5kKCkubm9kZSgpICYmIHBvcy5vZmZzZXQoKSA+IGQtPm1fc2VsZWN0
aW9uLmVuZCgpLm9mZnNldCgpKSkgeworICAgICAgICAgICAgaWYgKChuID09IHNlbGVjdGlvbigp
LT5zdGFydCgpLm5vZGUoKSAmJiBwb3Mub2Zmc2V0KCkgPCBzZWxlY3Rpb24oKS0+c3RhcnQoKS5v
ZmZzZXQoKSkgfHwKKyAgICAgICAgICAgICAgICAobiA9PSBzZWxlY3Rpb24oKS0+ZW5kKCkubm9k
ZSgpICYmIHBvcy5vZmZzZXQoKSA+IHNlbGVjdGlvbigpLT5lbmQoKS5vZmZzZXQoKSkpIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAobiA9PSBkLT5tX3NlbGVjdGlvbi5l
bmQoKS5ub2RlKCkpCisgICAgICAgIGlmIChuID09IHNlbGVjdGlvbigpLT5lbmQoKS5ub2RlKCkp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKTsK
ICAgICB9CkBAIC0yMTc2LDI5ICsyMTg2LDMyIEBACiAKIHZvaWQgRnJhbWU6OnNlbGVjdENsb3Nl
c3RXb3JkRnJvbU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQgKm1vdXNlLCBOb2RlSW1wbCAqaW5uZXJO
b2RlLCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb247
Ci0KICAgICBpZiAoaW5uZXJOb2RlICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKSAmJiBtb3VzZURv
d25NYXlTdGFydFNlbGVjdCgpICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+c2hvdWxkU2VsZWN0
KCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCkt
PnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCwgeSkpOwotICAgICAgICBpZiAocG9zLmlzTm90TnVs
bCgpKSB7Ci0gICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHBvcyk7Ci0gICAgICAgICAgICBz
ZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXT1JEKTsKKyAgICAgICAgaWYgKHBvcy5p
c051bGwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxT
ZWxlY3Rpb25Db250cm9sbGVyPiBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcigp
OworICAgIAorICAgICAgICBzZWxlY3Rpb24tPm1vdmVUbyhwb3MpOworICAgICAgICBzZWxlY3Rp
b24tPmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV09SRCk7CisgICAgICAgIAorICAgICAgICBpZiAo
IXNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCkpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgCisgICAgICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCkp
OworICAgICAgICAKKyAgICAgICAgaWYgKHNlbGVjdGlvbi0+aXNSYW5nZSgpKSB7CisgICAgICAg
ICAgICBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5ID0gV09SRDsKKyAgICAgICAgICAgIGQtPm1f
YmVnYW5TZWxlY3RpbmdUZXh0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBp
ZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICBkLT5tX3NlbGVjdGlvbkdyYW51bGFy
aXR5ID0gV09SRDsKLSAgICAgICAgZC0+bV9iZWdhblNlbGVjdGluZ1RleHQgPSB0cnVlOwotICAg
IH0KLSAgICAKLSAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCi0gICAg
ICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogfQogCiB2b2lkIEZyYW1lOjpoYW5kbGVNb3Vz
ZVByZXNzRXZlbnREb3VibGVDbGljayhNb3VzZVByZXNzRXZlbnQgKmV2ZW50KQogewogICAgIGlm
IChldmVudC0+cW1vdXNlRXZlbnQoKS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewotICAgICAg
ICBpZiAoc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7CisgICAgICAgIGlmIChzZWxlY3Rpb24oKS0+
aXNSYW5nZSgpKSB7CiAgICAgICAgICAgICAvLyBBIGRvdWJsZS1jbGljayB3aGVuIHJhbmdlIGlz
IGFscmVhZHkgc2VsZWN0ZWQKICAgICAgICAgICAgIC8vIHNob3VsZCBub3QgY2hhbmdlIHRoZSBz
ZWxlY3Rpb24uICBTbywgZG8gbm90IGNhbGwKICAgICAgICAgICAgIC8vIHNlbGVjdENsb3Nlc3RX
b3JkRnJvbU1vdXNlRXZlbnQsIGJ1dCBkbyBzZXQKQEAgLTIyMTgsMTkgKzIyMzEsMjQgQEAKICAg
ICAKICAgICBpZiAobW91c2UtPmJ1dHRvbigpID09IExlZnRCdXR0b24gJiYgaW5uZXJOb2RlICYm
IGlubmVyTm9kZS0+cmVuZGVyZXIoKSAmJgogICAgICAgICBtb3VzZURvd25NYXlTdGFydFNlbGVj
dCgpICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+c2hvdWxkU2VsZWN0KCkpIHsKLSAgICAgICAg
U2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb247CisgICAgICAgIAorICAgICAgICBSZWZQdHI8
U2VsZWN0aW9uQ29udHJvbGxlcj4gc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIo
KTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBv
c2l0aW9uRm9yQ29vcmRpbmF0ZXMoZXZlbnQtPngoKSwgZXZlbnQtPnkoKSkpOwotICAgICAgICBp
ZiAocG9zLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHBvcyk7
Ci0gICAgICAgICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShQQVJBR1JBUEgp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CisgICAgICAg
IGlmIChwb3MuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2VsZWN0
aW9uLT5tb3ZlVG8ocG9zKTsKKyAgICAgICAgc2VsZWN0aW9uLT5leHBhbmRVc2luZ0dyYW51bGFy
aXR5KFBBUkFHUkFQSCk7CisgICAgICAgIAorICAgICAgICBpZiAoIXNob3VsZENoYW5nZVNlbGVj
dGlvbihzZWxlY3Rpb24uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCkpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHNlbGVjdGlvbi0+aXNSYW5nZSgpKSB7CiAgICAgICAgICAgICBkLT5tX3NlbGVjdGlv
bkdyYW51bGFyaXR5ID0gUEFSQUdSQVBIOwogICAgICAgICAgICAgZC0+bV9iZWdhblNlbGVjdGlu
Z1RleHQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpCi0gICAgICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0
aW9uKTsKICAgICB9CiB9CiAKQEAgLTIyNDIsNyArMjI2MCw2IEBACiAgICAgaWYgKG1vdXNlLT5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChpbm5lck5vZGUgJiYgaW5uZXJO
b2RlLT5yZW5kZXJlcigpICYmCiAgICAgICAgICAgICBtb3VzZURvd25NYXlTdGFydFNlbGVjdCgp
ICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+c2hvdWxkU2VsZWN0KCkpIHsKLSAgICAgICAgICAg
IFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBF
eHRlbmQgdGhlIHNlbGVjdGlvbiBpZiB0aGUgU2hpZnQga2V5IGlzIGRvd24sIHVubGVzcyB0aGUg
Y2xpY2sgaXMgaW4gYSBsaW5rLgogICAgICAgICAgICAgYm9vbCBleHRlbmRTZWxlY3Rpb24gPSAo
bW91c2UtPnN0YXRlKCkgJiBTaGlmdEJ1dHRvbikgJiYgKGV2ZW50LT51cmwoKS5pc051bGwoKSk7
CkBAIC0yMjU4LDMxICsyMjc1LDM3IEBACiAgICAgICAgICAgICAgICAgdmlzaWJsZVBvcyA9IFZp
c2libGVQb3NpdGlvbihpbm5lck5vZGUsIGlubmVyTm9kZS0+Y2FyZXRNaW5PZmZzZXQoKSwgRE9X
TlNUUkVBTSk7CiAgICAgICAgICAgICBQb3NpdGlvbiBwb3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVp
dmFsZW50KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNlbCA9IHNlbGVjdGlvbigpOwot
ICAgICAgICAgICAgaWYgKGV4dGVuZFNlbGVjdGlvbiAmJiBzZWwuaXNDYXJldE9yUmFuZ2UoKSkg
ewotICAgICAgICAgICAgICAgIHNlbC5jbGVhck1vZGlmeUJpYXMoKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxTZWxlY3Rpb25Db250cm9sbGVyPiBzZWwgPSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcigq
c2VsZWN0aW9uKCkpOworICAgICAgICAgICAgaWYgKGV4dGVuZFNlbGVjdGlvbiAmJiBzZWwtPmlz
Q2FyZXRPclJhbmdlKCkpIHsKKyAgICAgICAgICAgICAgICBzZWwtPmNsZWFyTW9kaWZ5Qmlhcygp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFNlZSA8cmRhcjovL3Byb2Js
ZW0vMzY2ODE1Nz4gUkVHUkVTU0lPTiAoTWFpbCk6IHNoaWZ0LWNsaWNrIGRlc2VsZWN0cyB3aGVu
IHNlbGVjdGlvbiAKICAgICAgICAgICAgICAgICAvLyB3YXMgY3JlYXRlZCByaWdodC10by1sZWZ0
Ci0gICAgICAgICAgICAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWwuc3RhcnQoKTsKKyAgICAgICAg
ICAgICAgICBQb3NpdGlvbiBzdGFydCA9IHNlbC0+c3RhcnQoKTsKKyAgICAgICAgICAgICAgICBQ
b3NpdGlvbiBlbmQgPSBzZWwtPmVuZCgpOwogICAgICAgICAgICAgICAgIHNob3J0IGJlZm9yZSA9
IFJhbmdlSW1wbDo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKHBvcy5ub2RlKCksIHBvcy5vZmZzZXQo
KSwgc3RhcnQubm9kZSgpLCBzdGFydC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJl
Zm9yZSA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbC5zZXRCYXNlQW5kRXh0ZW50KHBv
cy5ub2RlKCksIHBvcy5vZmZzZXQoKSwgc2VsLmVuZCgpLm5vZGUoKSwgc2VsLmVuZCgpLm9mZnNl
dCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzZWwu
c2V0QmFzZUFuZEV4dGVudChzdGFydC5ub2RlKCksIHN0YXJ0Lm9mZnNldCgpLCBwb3Mubm9kZSgp
LCBwb3Mub2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
YmVmb3JlIDw9IDApCisgICAgICAgICAgICAgICAgICAgIHNlbC0+c2V0QmFzZUFuZEV4dGVudChw
b3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCksIGVuZC5ub2RlKCksIGVuZC5vZmZzZXQoKSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWwtPnNldEJhc2VBbmRFeHRl
bnQoc3RhcnQubm9kZSgpLCBzdGFydC5vZmZzZXQoKSwgcG9zLm5vZGUoKSwgcG9zLm9mZnNldCgp
KTsKIAotICAgICAgICAgICAgICAgIGlmIChkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5ICE9IENI
QVJBQ1RFUikgewotICAgICAgICAgICAgICAgICAgICBzZWwuZXhwYW5kVXNpbmdHcmFudWxhcml0
eShkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkgIT0gQ0hBUkFDVEVSKQorICAg
ICAgICAgICAgICAgICAgICBzZWwtPmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoZC0+bV9zZWxlY3Rp
b25HcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFz
aG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsLmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGQtPm1fYmVnYW5TZWxlY3Rp
bmdUZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oc2VsLmdldCgpKTsK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
c2VsID0gU2VsZWN0aW9uQ29udHJvbGxlcih2aXNpYmxlUG9zKTsKKyAgICAgICAgICAgICAgICBz
ZWwgPSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcih2aXNpYmxlUG9zKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwuZ2V0KCkpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZC0+bV9zZWxl
Y3Rpb25HcmFudWxhcml0eSA9IENIQVJBQ1RFUjsKKyAgICAgICAgICAgICAgICBzZXRTZWxlY3Rp
b24oc2VsLmdldCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKQotICAgICAgICAgICAgICAgIHNldFNlbGVj
dGlvbihzZWwpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjM0MCwyMCArMjM2MywyNCBAQAog
CiAgICAgLy8gUmVzdGFydCB0aGUgc2VsZWN0aW9uIGlmIHRoaXMgaXMgdGhlIGZpcnN0IG1vdXNl
IG1vdmUuIFRoaXMgd29yayBpcyB1c3VhbGx5CiAgICAgLy8gZG9uZSBpbiBraHRtbE1vdXNlUHJl
c3NFdmVudCwgYnV0IG5vdCBpZiB0aGUgbW91c2UgcHJlc3Mgd2FzIG9uIGFuIGV4aXN0aW5nIHNl
bGVjdGlvbi4KLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbCA9IHNlbGVjdGlvbigpOwotICAg
IHNlbC5jbGVhck1vZGlmeUJpYXMoKTsKKyAgICBSZWZQdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4g
c2VsID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoKnNlbGVjdGlvbigpKTsKKyAgICBzZWwtPmNs
ZWFyTW9kaWZ5QmlhcygpOwogICAgIAotICAgIGlmICghZC0+bV9iZWdhblNlbGVjdGluZ1RleHQp
IHsKKyAgICBpZiAoIWQtPm1fYmVnYW5TZWxlY3RpbmdUZXh0KQorICAgICAgICBzZWwtPm1vdmVU
byhwb3MpOworICAgIAorICAgIHNlbC0+c2V0RXh0ZW50KHBvcyk7CisgICAgCisgICAgaWYgKGQt
Pm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkgIT0gQ0hBUkFDVEVSKQorICAgICAgICBzZWwtPmV4cGFu
ZFVzaW5nR3JhbnVsYXJpdHkoZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSk7CisgICAgCisgICAg
aWYgKCFzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmICghZC0+bV9iZWdhblNlbGVjdGluZ1RleHQpCiAgICAgICAgIGQtPm1fYmVn
YW5TZWxlY3RpbmdUZXh0ID0gdHJ1ZTsKLSAgICAgICAgc2VsLm1vdmVUbyhwb3MpOwotICAgIH0K
IAotICAgIHNlbC5zZXRFeHRlbnQocG9zKTsKLSAgICBpZiAoZC0+bV9zZWxlY3Rpb25HcmFudWxh
cml0eSAhPSBDSEFSQUNURVIpCi0gICAgICAgIHNlbC5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGQt
Pm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkpOwotCi0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlv
bihzZWwpKQotICAgICAgICBzZXRTZWxlY3Rpb24oc2VsKTsKKyAgICBzZXRTZWxlY3Rpb24oc2Vs
LmdldCgpKTsKIH0KIAogdm9pZCBGcmFtZTo6a2h0bWxNb3VzZU1vdmVFdmVudChNb3VzZU1vdmVF
dmVudCAqZXZlbnQpCkBAIC0yMzczLDE1ICsyNDAwLDE4IEBACiAgICAgaWYgKG1vdXNlRG93bk1h
eVN0YXJ0U2VsZWN0KCkgJiYgIWQtPm1fYmVnYW5TZWxlY3RpbmdUZXh0CiAgICAgICAgICAgICAm
JiBkLT5tX2RyYWdTdGFydFBvcy54KCkgPT0gZXZlbnQtPnFtb3VzZUV2ZW50KCktPngoKQogICAg
ICAgICAgICAgJiYgZC0+bV9kcmFnU3RhcnRQb3MueSgpID09IGV2ZW50LT5xbW91c2VFdmVudCgp
LT55KCkKLSAgICAgICAgICAgICYmIGQtPm1fc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAg
ICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbjsKKyAgICAgICAgICAgICYmIHNlbGVjdGlv
bigpLT5pc1JhbmdlKCkpIHsKKyAgICAgICAgICAgIAorICAgICAgICBSZWZQdHI8U2VsZWN0aW9u
Q29udHJvbGxlcj4gc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoKTsKKyAgICAg
ICAgCiAgICAgICAgIE5vZGVJbXBsICpub2RlID0gZXZlbnQtPmlubmVyTm9kZSgpOwogICAgICAg
ICBpZiAobm9kZSAmJiBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUtPnJlbmRlcmVy
KCkpIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBub2RlLT5yZW5kZXJlcigp
LT5wb3NpdGlvbkZvckNvb3JkaW5hdGVzKGV2ZW50LT54KCksIGV2ZW50LT55KCkpOwotICAgICAg
ICAgICAgc2VsZWN0aW9uLm1vdmVUbyhwb3MpOworICAgICAgICAgICAgc2VsZWN0aW9uLT5tb3Zl
VG8ocG9zKTsKICAgICAgICAgfQotICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNl
bGVjdGlvbikpCi0gICAgICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uLmdldCgpKSkKKyAg
ICAgICAgICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCkpOwogICAgIH0KICAgICBzZWxl
Y3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOwogfQpAQCAtMjM5MSw3ICsy
NDIxLDcgQEAKICAgICBpZiAoIWQtPm1fZG9jKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
Tm9kZUltcGwgKnN0YXJ0Tm9kZSA9IGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpOworICAg
IE5vZGVJbXBsICpzdGFydE5vZGUgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCk7CiAgICAg
Tm9kZUltcGwgKnJvb3QgPSBzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpID8gc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiBkLT5tX2RvYy0+ZG9jdW1l
bnRFbGVtZW50KCk7CiAgICAgCiAgICAgc2VsZWN0Q29udGVudHNPZk5vZGUocm9vdCk7CkBAIC0y
NDAwLDE3ICsyNDMwLDE3IEBACiAKIGJvb2wgRnJhbWU6OnNlbGVjdENvbnRlbnRzT2ZOb2RlKE5v
ZGVJbXBsKiBub2RlKQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsID0gU2VsZWN0aW9u
Q29udHJvbGxlcihQb3NpdGlvbihub2RlLCAwKSwgUG9zaXRpb24obm9kZSwgbWF4RGVlcE9mZnNl
dChub2RlKSksIERPV05TVFJFQU0pOyAgICAKLSAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KHNlbCkpIHsKLSAgICAgICAgc2V0U2VsZWN0aW9uKHNlbCk7CisgICAgUmVmUHRyPFNlbGVjdGlv
bkNvbnRyb2xsZXI+IHNlbCA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKFBvc2l0aW9uKG5vZGUs
IDApLCBQb3NpdGlvbihub2RlLCBtYXhEZWVwT2Zmc2V0KG5vZGUpKSwgRE9XTlNUUkVBTSk7ICAg
IAorICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsLmdldCgpKSkgeworICAgICAgICBz
ZXRTZWxlY3Rpb24oc2VsLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGcmFtZTo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNv
bnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm5ld3NlbGVjdGlvbikgY29uc3QKK2Jvb2wgRnJhbWU6
OnNob3VsZENoYW5nZVNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyICpuZXdTZWxlY3Rpb24p
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNob3VsZENoYW5nZVNlbGVjdGlvbihkLT5tX3NlbGVjdGlv
biwgbmV3c2VsZWN0aW9uLCBuZXdzZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOworICAgIHJl
dHVybiBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3
U2VsZWN0aW9uLT5hZmZpbml0eSgpLCBmYWxzZSk7CiB9CiAKIGJvb2wgRnJhbWU6OnNob3VsZEJl
Z2luRWRpdGluZyhjb25zdCBSYW5nZUltcGwgKnJhbmdlKSBjb25zdApAQCAtMjQzNyw5ICsyNDY3
LDkgQEAKIAogdm9pZCBGcmFtZTo6YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQdHIgJmNtZCkK
IHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbChjbWQuZW5kaW5nU2VsZWN0aW9uKCkpOwot
ICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkgewotICAgICAgICBzZXRTZWxlY3Rp
b24oc2VsLCBmYWxzZSk7CisgICAgUmVmUHRyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IHNlbCA9IG5l
dyBTZWxlY3Rpb25Db250cm9sbGVyKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSk7CisgICAgaWYgKHNo
b3VsZENoYW5nZVNlbGVjdGlvbihzZWwuZ2V0KCkpKSB7CisgICAgICAgIHNldFNlbGVjdGlvbihz
ZWwuZ2V0KCksIGZhbHNlKTsKICAgICB9CiAKICAgICAvLyBOb3cgc2V0IHRoZSB0eXBpbmcgc3R5
bGUgZnJvbSB0aGUgY29tbWFuZC4gQ2xlYXIgaXQgd2hlbiBkb25lLgpAQCAtMjQ2OCw5ICsyNDk4
LDkgQEAKIAogdm9pZCBGcmFtZTo6dW5hcHBsaWVkRWRpdGluZyhFZGl0Q29tbWFuZFB0ciAmY21k
KQogewotICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsKGNtZC5zdGFydGluZ1NlbGVjdGlvbigp
KTsKLSAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKLSAgICAgICAgc2V0U2Vs
ZWN0aW9uKHNlbCwgdHJ1ZSk7CisgICAgUmVmUHRyPFNlbGVjdGlvbkNvbnRyb2xsZXI+IHNlbCA9
IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKGNtZC5zdGFydGluZ1NlbGVjdGlvbigpKTsKKyAgICBp
ZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbC5nZXQoKSkpIHsKKyAgICAgICAgc2V0U2VsZWN0
aW9uKHNlbC5nZXQoKSwgdHJ1ZSk7CiAgICAgfQogICAgIHJlZ2lzdGVyQ29tbWFuZEZvclJlZG8o
Y21kKTsKICAgICByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKQEAgLTI0NzksOSArMjUwOSw5
IEBACiAKIHZvaWQgRnJhbWU6OnJlYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQdHIgJmNtZCkK
IHsKLSAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbChjbWQuZW5kaW5nU2VsZWN0aW9uKCkpOwot
ICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkgewotICAgICAgICBzZXRTZWxlY3Rp
b24oc2VsLCB0cnVlKTsKKyAgICBSZWZQdHI8U2VsZWN0aW9uQ29udHJvbGxlcj4gc2VsID0gbmV3
IFNlbGVjdGlvbkNvbnRyb2xsZXIoY21kLnN0YXJ0aW5nU2VsZWN0aW9uKCkpOworICAgIGlmIChz
aG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsLmdldCgpKSkgeworICAgICAgICBzZXRTZWxlY3Rpb24o
c2VsLmdldCgpLCB0cnVlKTsKICAgICB9CiAgICAgcmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhjbWQp
OwogICAgIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwpAQCAtMjY2MCw3ICsyNjkwLDcgQEAK
ICAgICAgICAgbXV0YWJsZVN0eWxlLT5yZWYoKTsKICAgICB9CiAKLSAgICBOb2RlSW1wbCAqbm9k
ZSA9IFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb24oKS5hZmZp
bml0eSgpKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKKyAgICBOb2RlSW1wbCAqbm9kZSA9IFZp
c2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS0+c3RhcnQoKSwgc2VsZWN0aW9uKCktPmFmZmluaXR5
KCkpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOwogICAgIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbkltcGwgY29tcHV0ZWRTdHlsZShub2RlKTsKICAgICBjb21wdXRlZFN0eWxlLmRpZmYobXV0
YWJsZVN0eWxlKTsKICAgICAKQEAgLTI2ODEsNyArMjcxMSw3IEBACiAKIHZvaWQgRnJhbWU6OmFw
cGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24pCiB7Ci0gICAgc3dpdGNoIChzZWxlY3Rpb24oKS5zdGF0ZSgpKSB7CisgICAgc3dp
dGNoIChzZWxlY3Rpb24oKS0+c3RhdGUoKSkgewogICAgICAgICBjYXNlIFdlYkNvcmU6OlNlbGVj
dGlvbjo6Tk9ORToKICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMjcwMCw3ICsyNzMwLDcgQEAKIAogdm9pZCBGcmFtZTo6YXBwbHlQYXJhZ3JhcGhTdHls
ZShDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
bikKIHsKLSAgICBzd2l0Y2ggKHNlbGVjdGlvbigpLnN0YXRlKCkpIHsKKyAgICBzd2l0Y2ggKHNl
bGVjdGlvbigpLT5zdGF0ZSgpKSB7CiAgICAgICAgIGNhc2UgV2ViQ29yZTo6U2VsZWN0aW9uOjpO
T05FOgogICAgICAgICAgICAgLy8gZG8gbm90aGluZwogICAgICAgICAgICAgYnJlYWs7CkBAIC0y
NzQxLDcgKzI3NzEsNyBAQAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCAqbXV0
YWJsZVN0eWxlID0gc3R5bGUtPm1ha2VNdXRhYmxlKCk7CiAgICAgUmVmUHRyPENTU1N0eWxlRGVj
bGFyYXRpb25JbXBsPiBwcm90ZWN0UXVlcnlTdHlsZShtdXRhYmxlU3R5bGUpOwogCi0gICAgaWYg
KCFkLT5tX3NlbGVjdGlvbi5pc1JhbmdlKCkpIHsKKyAgICBpZiAoIXNlbGVjdGlvbigpLT5pc1Jh
bmdlKCkpIHsKICAgICAgICAgTm9kZUltcGwgKm5vZGVUb1JlbW92ZTsKICAgICAgICAgQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbCAqc2VsZWN0aW9uU3R5bGUgPSBzZWxlY3Rpb25Db21w
dXRlZFN0eWxlKG5vZGVUb1JlbW92ZSk7CiAgICAgICAgIGlmICghc2VsZWN0aW9uU3R5bGUpCkBA
IC0yNzU1LDcgKzI3ODUsNyBAQAogICAgICAgICAgICAgYXNzZXJ0KGV4Y2VwdGlvbkNvZGUgPT0g
MCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKE5vZGVJbXBsICpub2Rl
ID0gZC0+bV9zZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2
ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgZm9yIChOb2RlSW1wbCAqbm9kZSA9IHNlbGVjdGlv
bigpLT5zdGFydCgpLm5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
KSkgewogICAgICAgICAgICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbCAqY29tcHV0
ZWRTdHlsZSA9IG5ldyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsKG5vZGUpOwogICAg
ICAgICAgICAgaWYgKGNvbXB1dGVkU3R5bGUpIHsKICAgICAgICAgICAgICAgICBjb21wdXRlZFN0
eWxlLT5yZWYoKTsKQEAgLTI3NjQsNyArMjc5NCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoc3RhdGUgPT0gbWl4ZWRUcmlTdGF0ZSkKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGlmIChub2RlID09IGQtPm1fc2VsZWN0aW9uLmVuZCgpLm5vZGUoKSkKKyAg
ICAgICAgICAgIGlmIChub2RlID09IHNlbGVjdGlvbigpLT5lbmQoKS5ub2RlKCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0yODMwLDEwICsyODYwLDEwIEBA
CiAgICAgaWYgKCF4bWxEb2NJbXBsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKGQt
Pm1fc2VsZWN0aW9uLmlzTm9uZSgpKQorICAgIGlmIChzZWxlY3Rpb24oKS0+aXNOb25lKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPFJhbmdlSW1wbD4gcmFuZ2UoZC0+bV9zZWxl
Y3Rpb24udG9SYW5nZSgpKTsKKyAgICBSZWZQdHI8UmFuZ2VJbXBsPiByYW5nZShzZWxlY3Rpb24o
KS0+dG9SYW5nZSgpKTsKICAgICBQb3NpdGlvbiBwb3MgPSByYW5nZS0+ZWRpdGluZ1N0YXJ0UG9z
aXRpb24oKTsKIAogICAgIEVsZW1lbnRJbXBsICplbGVtID0gcG9zLmVsZW1lbnQoKTsKQEAgLTMw
MjcsMTEgKzMwNTcsMTEgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhl
IHNlbGVjdGlvbiBjb250YWlucyB0aGUgZW50aXJlIGZyYW1lIGNvbnRlbnRzOyBpZiBub3QsIHRo
ZW4gdGhlcmUgaXMgbm90aGluZyB0byBkby4KLSAgICBpZiAoIWQtPm1fc2VsZWN0aW9uLmlzUmFu
Z2UoKSkKKyAgICBpZiAoIXNlbGVjdGlvbigpLT5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoIWlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihkLT5tX3NlbGVjdGlv
bi5zdGFydCgpLCBkLT5tX3NlbGVjdGlvbi5hZmZpbml0eSgpKSkpCisgICAgaWYgKCFpc1N0YXJ0
T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCktPnN0YXJ0KCksIHNlbGVjdGlv
bigpLT5hZmZpbml0eSgpKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzRW5kT2ZEb2N1
bWVudChWaXNpYmxlUG9zaXRpb24oZC0+bV9zZWxlY3Rpb24uZW5kKCksIGQtPm1fc2VsZWN0aW9u
LmFmZmluaXR5KCkpKSkKKyAgICBpZiAoIWlzRW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24o
c2VsZWN0aW9uKCktPmVuZCgpLCBzZWxlY3Rpb24oKS0+YWZmaW5pdHkoKSkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBHZXQgdG8gdGhlIDxpZnJhbWU+IG9yIDxmcmFtZT4gKG9yIGV2ZW4g
PG9iamVjdD4pIGVsZW1lbnQgaW4gdGhlIHBhcmVudCBmcmFtZS4KQEAgLTMwNTAsMTAgKzMwODAs
MTEgQEAKICAgICBWaXNpYmxlUG9zaXRpb24gYmVmb3JlT3duZXJFbGVtZW50KFZpc2libGVQb3Np
dGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRleCwgU0VMX0RFRkFV
TFRfQUZGSU5JVFkpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gYWZ0ZXJPd25lckVsZW1lbnQoVmlz
aWJsZVBvc2l0aW9uKG93bmVyRWxlbWVudFBhcmVudCwgb3duZXJFbGVtZW50Tm9kZUluZGV4ICsg
MSwgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpKTsKIAorICAgIFJlZlB0cjxTZWxlY3Rpb25Db250
cm9sbGVyPiBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uQ29udHJvbGxlcihiZWZvcmVPd25lckVs
ZW1lbnQsIGFmdGVyT3duZXJFbGVtZW50KTsKICAgICAvLyBGb2N1cyBvbiB0aGUgcGFyZW50IGZy
YW1lLCBhbmQgdGhlbiBzZWxlY3QgZnJvbSBiZWZvcmUgdGhpcyBlbGVtZW50IHRvIGFmdGVyLgot
ICAgIGlmIChwYXJlbnQtPnNob3VsZENoYW5nZVNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVy
KGJlZm9yZU93bmVyRWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQpKSkgeworICAgIGlmIChwYXJl
bnQtPnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCkpKSB7CiAgICAgICAgIHBh
cmVudFZpZXctPnNldEZvY3VzKCk7Ci0gICAgICAgIHBhcmVudC0+c2V0U2VsZWN0aW9uKFNlbGVj
dGlvbkNvbnRyb2xsZXIoYmVmb3JlT3duZXJFbGVtZW50LCBhZnRlck93bmVyRWxlbWVudCkpOwor
ICAgICAgICBwYXJlbnQtPnNldFNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCkpOwogICAgIH0KIH0K
IApAQCAtMzE2NCw3ICszMTk1LDcgQEAKICAgICAvLyBzdGFydCBsb29raW5nIGVpdGhlciBhdCB0
aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24g
aXMKICAgICBOb2RlSW1wbCAqc3RhcnQgPSBkLT5tX2RvYyA/IGQtPm1fZG9jLT5mb2N1c05vZGUo
KSA6IDA7CiAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb24oKS5zdGFy
dCgpLm5vZGUoKTsKKyAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCk7
CiAgICAgCiAgICAgLy8gdHJ5IHdhbGtpbmcgdXAgdGhlIG5vZGUgdHJlZSB0byBmaW5kIGEgZm9y
bSBlbGVtZW50CiAgICAgTm9kZUltcGwgKm47CkBAIC0zMjAxLDEyICszMjMyLDEyIEBACiB7CiAg
ICAgSW50UmVjdCByZWN0OwogICAgIAotICAgIHN3aXRjaCAoc2VsZWN0aW9uKCkuc3RhdGUoKSkg
eworICAgIHN3aXRjaCAoc2VsZWN0aW9uKCktPnN0YXRlKCkpIHsKICAgICAgICAgY2FzZSBXZWJD
b3JlOjpTZWxlY3Rpb246Ok5PTkU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBXZWJDb3JlOjpTZWxlY3Rpb246OkNBUkVUOgotICAgICAgICAgICAgcmVj
dCA9IHNlbGVjdGlvbigpLmNhcmV0UmVjdCgpOworICAgICAgICAgICAgcmVjdCA9IHNlbGVjdGlv
bigpLT5jYXJldFJlY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgV2ViQ29yZTo6U2VsZWN0aW9uOjpSQU5HRToKQEAgLTMyMTQsOCArMzI0NSw4IEBA
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgUG9zaXRpb24gc3RhcnQgPSBz
ZWxlY3Rpb24oKS5zdGFydCgpOwotICAgIFBvc2l0aW9uIGVuZCA9IHNlbGVjdGlvbigpLmVuZCgp
OworICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uKCktPnN0YXJ0KCk7CisgICAgUG9zaXRp
b24gZW5kID0gc2VsZWN0aW9uKCktPmVuZCgpOwogICAgIEFTU0VSVChzdGFydC5ub2RlKCkpOwog
ICAgIGlmIChzdGFydC5ub2RlKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpKSB7CiAgICAg
ICAgIFJlbmRlckxheWVyICpsYXllciA9IHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9z
aW5nTGF5ZXIoKTsKQEAgLTM2MjUsMTIgKzM2NTYsMTIgQEAKIHsKICAgICBJbnRSZWN0IHJlY3Q7
CiAgICAgCi0gICAgc3dpdGNoIChzZWxlY3Rpb24oKS5zdGF0ZSgpKSB7CisgICAgc3dpdGNoIChz
ZWxlY3Rpb24oKS0+c3RhdGUoKSkgewogICAgICAgICBjYXNlIFdlYkNvcmU6OlNlbGVjdGlvbjo6
Tk9ORToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFdl
YkNvcmU6OlNlbGVjdGlvbjo6Q0FSRVQ6Ci0gICAgICAgICAgICByZWN0ID0gc2VsZWN0aW9uKCku
Y2FyZXRSZWN0KCk7CisgICAgICAgICAgICByZWN0ID0gc2VsZWN0aW9uKCktPmNhcmV0UmVjdCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBXZWJDb3Jl
OjpTZWxlY3Rpb246OlJBTkdFOgpAQCAtMzYzOCw4ICszNjY5LDggQEAKICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAKLSAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbigpLnN0YXJ0
KCk7Ci0gICAgUG9zaXRpb24gZW5kID0gc2VsZWN0aW9uKCkuZW5kKCk7CisgICAgUG9zaXRpb24g
c3RhcnQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKTsKKyAgICBQb3NpdGlvbiBlbmQgPSBzZWxlY3Rp
b24oKS0+ZW5kKCk7CiAgICAgQVNTRVJUKHN0YXJ0Lm5vZGUoKSk7CiAgICAgaWYgKHN0YXJ0Lm5v
ZGUoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCkpIHsKICAgICAgICAgUmVuZGVyTGF5ZXIg
KmxheWVyID0gc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwpAQCAt
MzY1NywxMCArMzY4OCwxMCBAQAogICAgIAogICAgIGlmICgheG1sRG9jSW1wbCgpKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICBpZiAoZC0+bV9zZWxlY3Rpb24uaXNOb25lKCkpCisgICAgaWYgKHNl
bGVjdGlvbigpLT5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgUG9zaXRp
b24gcG9zID0gVmlzaWJsZVBvc2l0aW9uKGQtPm1fc2VsZWN0aW9uLnN0YXJ0KCksIGQtPm1fc2Vs
ZWN0aW9uLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgUG9zaXRpb24gcG9zID0g
VmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLT5zdGFydCgpLCBzZWxlY3Rpb24oKS0+YWZmaW5p
dHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBpZiAoIXBvcy5pblJlbmRlcmVkQ29udGVudCgp
KQogICAgICAgICByZXR1cm4gMDsKICAgICBOb2RlSW1wbCAqbm9kZSA9IHBvcy5ub2RlKCk7CkBA
IC0zNzA0LDcgKzM3MzUsNyBAQAogICAgIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgZmxhc2hp
bmcgdGhlIGNhcmV0IGluIGEgY29udGVudEVkaXRhYmxlIHZpZXcgYXV0b21hdGljYWxseSAKICAg
ICAvLyB3aXRob3V0IHJlcXVpcmluZyB0aGUgcHJvZ3JhbW1lciB0byBzZXQgYSBzZWxlY3Rpb24g
ZXhwbGljaXRseS4KICAgICBEb2N1bWVudEltcGwgKmRvYyA9IHhtbERvY0ltcGwoKTsKLSAgICBp
ZiAoZG9jICYmIHNlbGVjdGlvbigpLmlzTm9uZSgpICYmIGlzQ29udGVudEVkaXRhYmxlKCkpIHsK
KyAgICBpZiAoZG9jICYmIHNlbGVjdGlvbigpLT5pc05vbmUoKSAmJiBpc0NvbnRlbnRFZGl0YWJs
ZSgpKSB7CiAgICAgICAgIE5vZGVJbXBsICpub2RlID0gZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsK
ICAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgICAgIC8vIExvb2sgZm9yIGEgYmxvY2sg
ZmxvdywgYnV0IHNraXAgb3ZlciB0aGUgSFRNTCBlbGVtZW50LCBzaW5jZSB3ZSByZWFsbHkKQEAg
LTM3MTQsNyArMzc0NSw3IEBACiAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgc2V0U2Vs
ZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24obm9kZSwgMCksIERPV05TVFJFQU0p
KTsKKyAgICAgICAgICAgIHNldFNlbGVjdGlvbihuZXcgU2VsZWN0aW9uQ29udHJvbGxlcihQb3Np
dGlvbihub2RlLCAwKSwgRE9XTlNUUkVBTSkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9w
YWdlL0ZyYW1lUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVByaXZh
dGUuaAkocmV2aXNpb24gMTIyNTEpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVQcml2YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1NSw5ICsyNTUsMTAgQEAKICAgV2ViQ29yZTo6RVRleHRHcmFudWxh
cml0eSBtX3NlbGVjdGlvbkdyYW51bGFyaXR5OwogICBib29sIG1fYmVnYW5TZWxlY3RpbmdUZXh0
OwogCi0gIFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgbV9zZWxlY3Rpb247Ci0gIFdlYkNv
cmU6OlNlbGVjdGlvbkNvbnRyb2xsZXIgbV9kcmFnQ2FyZXQ7Ci0gIFdlYkNvcmU6OlNlbGVjdGlv
biBtX21hcms7CisgIFJlZlB0cjxXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyPiBtX3NlbGVj
dGlvbjsKKyAgUmVmUHRyPFdlYkNvcmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI+IG1fZHJhZ0NhcmV0
OworICBSZWZQdHI8V2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcj4gbV9tYXJrOworCiAgIGlu
dCBtX2NhcmV0QmxpbmtUaW1lcjsKIAogICBib29sIG1fY2FyZXRWaXNpYmxlOjE7Cg==
</data>
<flag name="review"
          id="1329"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5804</attachid>
            <date>2006-01-20 18:00:40 -0800</date>
            <delta_ts>2006-01-23 15:24:50 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6644-2.txt</filename>
            <type>text/plain</type>
            <size>13034</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxMjI1MSkKKysr
IGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9u
LmgiCisjaW5jbHVkZSAiZG9tMl9ldmVudHMuaCIKICNpbmNsdWRlICJkb20yX3JhbmdlaW1wbC5o
IgogCiBjbGFzcyBGcmFtZTsKQEAgLTM3LDcgKzM4LDIyIEBACiAKIGNsYXNzIFJlbmRlck9iamVj
dDsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKK2NsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7CiAK
K2NsYXNzIE11dGF0aW9uTGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lcgoreworcHVibGlj
OgorICAgIE11dGF0aW9uTGlzdGVuZXIoKSB7IG1fc2VsZWN0aW9uQ29udHJvbGxlciA9IDA7IH0K
KyAgICBNdXRhdGlvbkxpc3RlbmVyKFNlbGVjdGlvbkNvbnRyb2xsZXIgKnMpIHsgbV9zZWxlY3Rp
b25Db250cm9sbGVyID0gczsgfQorICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgKnNlbGVjdGlvbkNv
bnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRyb2xsZXI7IH0KKyAgICB2
b2lkIHNldFNlbGVjdGlvbkNvbnRyb2xsZXIoU2VsZWN0aW9uQ29udHJvbGxlciAqcykgeyBtX3Nl
bGVjdGlvbkNvbnRyb2xsZXIgPSBzOyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2
ZW50KEV2ZW50TGlzdGVuZXJFdmVudCBldnQsIGJvb2wgaXNXaW5kb3dFdmVudCk7CisgICAgCitw
cml2YXRlOgorICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgKm1fc2VsZWN0aW9uQ29udHJvbGxlcjsK
K307CisKIGNsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXIKIHsKIHB1YmxpYzoKQEAgLTUzLDYgKzY5
LDggQEAKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFBvc2l0aW9uICYsIEVBZmZpbml0
eSBhZmZpbml0eSk7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBQb3NpdGlvbiAmLCBj
b25zdCBQb3NpdGlvbiAmLCBFQWZmaW5pdHkpOwogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoY29u
c3QgU2VsZWN0aW9uQ29udHJvbGxlciAmKTsKKyAgICAKKyAgICB+U2VsZWN0aW9uQ29udHJvbGxl
cigpOwogCiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciAmb3BlcmF0b3I9KGNvbnN0IFNlbGVjdGlv
bkNvbnRyb2xsZXIgJm8pOwogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgJm9wZXJhdG9yPShjb25z
dCBWaXNpYmxlUG9zaXRpb24gJnIpIHsgbW92ZVRvKHIpOyByZXR1cm4gKnRoaXM7IH0KQEAgLTY1
LDYgKzgzLDcgQEAKICAgICB2b2lkIG1vdmVUbyhjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICYp
OwogCiAgICAgY29uc3QgU2VsZWN0aW9uICZzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3Nl
bDsgfQorICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmKTsKIAogICAgIFNl
bGVjdGlvbjo6RVN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuc3RhdGUoKTsgfQog
CkBAIC0xMDQsNiArMTIzLDggQEAKICAgICBmcmllbmQgY2xhc3MgOjpGcmFtZTsKICAgICAKICAg
ICBGcmFtZSAqZnJhbWUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVk
KE5vZGVJbXBsICopOwogCiAgICAgLy8gU2FmYXJpIFNlbGVjdGlvbiBPYmplY3QgQVBJCiAgICAg
Tm9kZUltcGwgKmJhc2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuYmFzZSgpLm5vZGUoKTsg
fQpAQCAtMTc2LDYgKzE5Nyw3IEBACiAgICAgYm9vbCBtX25lZWRzTGF5b3V0IDogMTsgICAgICAg
Ly8gdHJ1ZSBpZiB0aGUgY2FyZXQgYW5kIGV4cGVjdGVkVmlzaWJsZSByZWN0YW5nbGVzIG5lZWQg
dG8gYmUgY2FsY3VsYXRlZAogICAgIGJvb2wgbV9tb2RpZnlCaWFzU2V0IDogMTsgICAgIC8vIHRy
dWUgaWYgdGhlIHNlbGVjdGlvbiBoYXMgYmVlbiBob3Jpem9udGFsbHkgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbW9kaWZpZWQgd2l0aCBFQWx0ZXI6OkVYVEVORAorICAg
IFJlZlB0cjxNdXRhdGlvbkxpc3RlbmVyPiBtX211dGF0aW9uTGlzdGVuZXI7CiB9OwogCiBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJmEsIGNvbnN0IFNl
bGVjdGlvbkNvbnRyb2xsZXIgJmIpCkluZGV4OiBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDEyMjUxKQorKysga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDE3IEBACiAjaW5jbHVkZSAiZG9t
L2RvbV9ub2RlLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJodG1s
ZWRpdGluZy5oIgorI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgiCiAjaW5jbHVk
ZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVy
X3N0eWxlLmgiCiAjaW5jbHVkZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgInZpc2li
bGVfdGV4dC5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKICNpbmNsdWRlICJ4bWwvZG9t
Ml9yYW5nZWltcGwuaCIKKyNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIK
KyNpbmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDxxZXZlbnQuaD4KICNpbmNsdWRlIDxxcGFpbnRlci5oPgpAQCAtNTAs
NTkgKzUzLDc5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7CisKK3ZvaWQgTXV0YXRpb25MaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnRJbXBs
ICpldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KQoreworICAgIGlmICghbV9zZWxlY3Rpb25Db250
cm9sbGVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZnByaW50ZihzdGRlcnIsICJFdmVu
dCBoYW5kbGVkXG4iKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBET01Ob2RlUmVtb3ZlZEV2
ZW50KQorICAgICAgICBtX3NlbGVjdGlvbkNvbnRyb2xsZXItPm5vZGVXaWxsQmVSZW1vdmVkKGV2
ZW50LT50YXJnZXQoKSk7Cit9CisKIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRy
b2xsZXIoKQogICAgIDogbV9uZWVkc0xheW91dCh0cnVlKQotICAgICwgbV9tb2RpZnlCaWFzU2V0
KGZhbHNlKQogeworICAgIG1fbXV0YXRpb25MaXN0ZW5lciA9IG5ldyBNdXRhdGlvbkxpc3RlbmVy
KHRoaXMpOworICAgIHNldFNlbGVjdGlvbihTZWxlY3Rpb24oKSk7CiB9CiAKIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgU2VsZWN0aW9uICZzZWwpCi0gICAg
OiBtX3NlbChzZWwpCi0gICAgLCBtX25lZWRzTGF5b3V0KHRydWUpCisgICAgOiBtX25lZWRzTGF5
b3V0KHRydWUpCiAgICAgLCBtX21vZGlmeUJpYXNTZXQoZmFsc2UpCiB7CisgICAgbV9tdXRhdGlv
bkxpc3RlbmVyID0gbmV3IE11dGF0aW9uTGlzdGVuZXIodGhpcyk7CisgICAgc2V0U2VsZWN0aW9u
KHNlbCk7CiB9CiAKIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIoY29u
c3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5KQotICAgIDogbV9zZWwocG9zLCBw
b3MsIGFmZmluaXR5KQotICAgICwgbV9uZWVkc0xheW91dCh0cnVlKQorICAgIDogbV9uZWVkc0xh
eW91dCh0cnVlKQogICAgICwgbV9tb2RpZnlCaWFzU2V0KGZhbHNlKQogeworICAgIG1fbXV0YXRp
b25MaXN0ZW5lciA9IG5ldyBNdXRhdGlvbkxpc3RlbmVyKHRoaXMpOworICAgIHNldFNlbGVjdGlv
bihTZWxlY3Rpb24ocG9zLCBwb3MsIGFmZmluaXR5KSk7CiB9CiAKIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgUmFuZ2VJbXBsICpyLCBFQWZmaW5pdHkgYWZm
aW5pdHkpCi0gICAgOiBtX3NlbChzdGFydFBvc2l0aW9uKHIpLCBlbmRQb3NpdGlvbihyKSwgYWZm
aW5pdHkpCi0gICAgLCBtX25lZWRzTGF5b3V0KHRydWUpCisgICAgOiBtX25lZWRzTGF5b3V0KHRy
dWUpCiAgICAgLCBtX21vZGlmeUJpYXNTZXQoZmFsc2UpCiB7CisgICAgbV9tdXRhdGlvbkxpc3Rl
bmVyID0gbmV3IE11dGF0aW9uTGlzdGVuZXIodGhpcyk7CisgICAgc2V0U2VsZWN0aW9uKFNlbGVj
dGlvbihzdGFydFBvc2l0aW9uKHIpLCBlbmRQb3NpdGlvbihyKSwgYWZmaW5pdHkpKTsKIH0KIAog
U2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBQb3NpdGlvbiAm
YmFzZSwgY29uc3QgUG9zaXRpb24gJmV4dGVudCwgRUFmZmluaXR5IGFmZmluaXR5KQotICAgIDog
bV9zZWwoYmFzZSwgZXh0ZW50LCBhZmZpbml0eSkKLSAgICAsIG1fbmVlZHNMYXlvdXQodHJ1ZSkK
KyAgICA6IG1fbmVlZHNMYXlvdXQodHJ1ZSkKICAgICAsIG1fbW9kaWZ5Qmlhc1NldChmYWxzZSkK
IHsKKyAgICBtX211dGF0aW9uTGlzdGVuZXIgPSBuZXcgTXV0YXRpb25MaXN0ZW5lcih0aGlzKTsK
KyAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKGJhc2UsIGV4dGVudCwgYWZmaW5pdHkpKTsKIH0K
IAogU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBWaXNpYmxl
UG9zaXRpb24gJnZpc2libGVQb3MpCi0gICAgOiBtX3NlbCh2aXNpYmxlUG9zLmRlZXBFcXVpdmFs
ZW50KCksIHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKSwgdmlzaWJsZVBvcy5hZmZpbml0eSgp
KQotICAgICwgbV9uZWVkc0xheW91dCh0cnVlKQorICAgIDogbV9uZWVkc0xheW91dCh0cnVlKQog
ICAgICwgbV9tb2RpZnlCaWFzU2V0KGZhbHNlKQogeworICAgIG1fbXV0YXRpb25MaXN0ZW5lciA9
IG5ldyBNdXRhdGlvbkxpc3RlbmVyKHRoaXMpOworICAgIHNldFNlbGVjdGlvbihTZWxlY3Rpb24o
dmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLCB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCks
IHZpc2libGVQb3MuYWZmaW5pdHkoKSkpOwogfQogCiBTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxl
Y3Rpb25Db250cm9sbGVyKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYmFzZSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZleHRlbnQpCi0gICAgOiBtX3NlbChiYXNlLmRlZXBFcXVpdmFsZW50KCksIGV4
dGVudC5kZWVwRXF1aXZhbGVudCgpLCBiYXNlLmFmZmluaXR5KCkpCi0gICAgLCBtX25lZWRzTGF5
b3V0KHRydWUpCisgICAgOiBtX25lZWRzTGF5b3V0KHRydWUpCiAgICAgLCBtX21vZGlmeUJpYXNT
ZXQoZmFsc2UpCiB7CisgICAgbV9tdXRhdGlvbkxpc3RlbmVyID0gbmV3IE11dGF0aW9uTGlzdGVu
ZXIodGhpcyk7CisgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbihiYXNlLmRlZXBFcXVpdmFsZW50
KCksIGV4dGVudC5kZWVwRXF1aXZhbGVudCgpLCBiYXNlLmFmZmluaXR5KCkpKTsKIH0KIAogU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBTZWxlY3Rpb25Db250
cm9sbGVyICZvKQotICAgIDogbV9zZWwoby5tX3NlbCkKLSAgICAsIG1fbmVlZHNMYXlvdXQoby5t
X25lZWRzTGF5b3V0KQorICAgIDogbV9uZWVkc0xheW91dChvLm1fbmVlZHNMYXlvdXQpCiAgICAg
LCBtX21vZGlmeUJpYXNTZXQoby5tX21vZGlmeUJpYXNTZXQpCiB7CisgICAgbV9tdXRhdGlvbkxp
c3RlbmVyID0gbmV3IE11dGF0aW9uTGlzdGVuZXIodGhpcyk7CisgICAgc2V0U2VsZWN0aW9uKG8u
bV9zZWwpOyAKICAgICAvLyBPbmx5IGNvcHkgdGhlIGNvb3JkaW5hdGVzIG92ZXIgaWYgdGhlIG90
aGVyIG9iamVjdAogICAgIC8vIGhhcyBoYWQgYSBsYXlvdXQsIG90aGVyd2lzZSBrZWVwIHRoZSBj
dXJyZW50CiAgICAgLy8gY29vcmRpbmF0ZXMuIFRoaXMgcHJldmVudHMgZHJhd2luZyBhcnRpZmFj
dHMgZnJvbQpAQCAtMTE0LDkgKzEzNywxNyBAQAogICAgIH0KIH0KIAorU2VsZWN0aW9uQ29udHJv
bGxlcjo6flNlbGVjdGlvbkNvbnRyb2xsZXIoKQoreworICAgIGlmICghaXNOb25lKCkpIHsKKyAg
ICAgICAgRG9jdW1lbnRJbXBsICpkb2N1bWVudCA9IG1fc2VsLnN0YXJ0KCkubm9kZSgpLT5nZXRE
b2N1bWVudCgpOworICAgICAgICBkb2N1bWVudC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihET01Ob2Rl
UmVtb3ZlZEV2ZW50LCBtX211dGF0aW9uTGlzdGVuZXIuZ2V0KCksIGZhbHNlKTsKKyAgICB9Cit9
CisKIFNlbGVjdGlvbkNvbnRyb2xsZXIgJlNlbGVjdGlvbkNvbnRyb2xsZXI6Om9wZXJhdG9yPShj
b25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZvKQogewotICAgIG1fc2VsID0gby5tX3NlbDsKKyAg
ICBzZXRTZWxlY3Rpb24oby5tX3NlbCk7CiAKICAgICBtX25lZWRzTGF5b3V0ID0gby5tX25lZWRz
TGF5b3V0OwogICAgIG1fbW9kaWZ5Qmlhc1NldCA9IG8ubV9tb2RpZnlCaWFzU2V0OwpAQCAtMTM2
LDQwICsxNjcsODkgQEAKIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZwb3MpCiB7Ci0gICAgbV9zZWwgPSBTZWxlY3Rpb24ocG9zLmRlZXBF
cXVpdmFsZW50KCksIHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3MuYWZmaW5pdHkoKSk7CisgICAg
c2V0U2VsZWN0aW9uKFNlbGVjdGlvbihwb3MuZGVlcEVxdWl2YWxlbnQoKSwgcG9zLmRlZXBFcXVp
dmFsZW50KCksIHBvcy5hZmZpbml0eSgpKSk7CiAgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9
CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmYmFzZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZleHRlbnQpCiB7Ci0gICAgbV9zZWwgPSBT
ZWxlY3Rpb24oYmFzZS5kZWVwRXF1aXZhbGVudCgpLCBleHRlbnQuZGVlcEVxdWl2YWxlbnQoKSwg
YmFzZS5hZmZpbml0eSgpKTsKKyAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKGJhc2UuZGVlcEVx
dWl2YWxlbnQoKSwgZXh0ZW50LmRlZXBFcXVpdmFsZW50KCksIGJhc2UuYWZmaW5pdHkoKSkpOwog
ICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Om1vdmVUbyhjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZvKQogewotICAgIG1fc2VsID0gby5t
X3NlbDsKKyAgICBzZXRTZWxlY3Rpb24oby5tX3NlbCk7CiAgICAgbV9uZWVkc0xheW91dCA9IHRy
dWU7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9u
ICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKLSAgICBtX3NlbCA9IFNlbGVjdGlvbihwb3Ms
IGFmZmluaXR5KTsKKyAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHBvcywgYWZmaW5pdHkpKTsK
ICAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVy
Ojptb3ZlVG8oY29uc3QgUmFuZ2VJbXBsICpyLCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7Ci0gICAg
bV9zZWwgPSBTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbihyKSwgZW5kUG9zaXRpb24ociksIGFmZmlu
aXR5KTsKKyAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24ociksIGVuZFBv
c2l0aW9uKHIpLCBhZmZpbml0eSkpOwogICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCiB2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVUbyhjb25zdCBQb3NpdGlvbiAmYmFzZSwgY29u
c3QgUG9zaXRpb24gJmV4dGVudCwgRUFmZmluaXR5IGFmZmluaXR5KQogewotICAgIG1fc2VsID0g
U2VsZWN0aW9uKGJhc2UsIGV4dGVudCwgYWZmaW5pdHkpOworICAgIHNldFNlbGVjdGlvbihTZWxl
Y3Rpb24oYmFzZSwgZXh0ZW50LCBhZmZpbml0eSkpOwogICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVl
OwogfQogCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbihjb25zdCBTZWxl
Y3Rpb24gJm5ld1NlbGVjdGlvbikKK3sKKyAgICBTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gbV9z
ZWw7CisgICAgRG9jdW1lbnRJbXBsICpvbGREb2N1bWVudCA9IG9sZFNlbGVjdGlvbi5zdGFydCgp
Lm5vZGUoKSA/IG9sZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKSA6IDA7
CisgICAgRG9jdW1lbnRJbXBsICpuZXdEb2N1bWVudCA9IG5ld1NlbGVjdGlvbi5zdGFydCgpLm5v
ZGUoKSA/IG5ld1NlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKSA6IDA7Cisg
ICAgCisgICAgaWYgKG9sZERvY3VtZW50ICE9IG5ld0RvY3VtZW50KSB7CisgICAgICAgIGlmIChv
bGREb2N1bWVudCkKKyAgICAgICAgICAgIG9sZERvY3VtZW50LT5yZW1vdmVFdmVudExpc3RlbmVy
KERPTU5vZGVSZW1vdmVkRXZlbnQsIG1fbXV0YXRpb25MaXN0ZW5lci5nZXQoKSwgZmFsc2UpOwor
ICAgICAgICBpZiAobmV3RG9jdW1lbnQpCisgICAgICAgICAgICBuZXdEb2N1bWVudC0+YWRkRXZl
bnRMaXN0ZW5lcihET01Ob2RlUmVtb3ZlZEV2ZW50LCBtX211dGF0aW9uTGlzdGVuZXIuZ2V0KCks
IGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgbV9zZWwgPSBuZXdTZWxlY3Rpb247Cit9CisKK3Zv
aWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZUltcGwgKm5vZGUp
Cit7CisgICAgaWYgKGlzTm9uZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTm9kZUlt
cGwgKmJhc2UgPSBtX3NlbC5iYXNlKCkubm9kZSgpOworICAgIE5vZGVJbXBsICpleHRlbnQgPSBt
X3NlbC5leHRlbnQoKS5ub2RlKCk7CisgICAgTm9kZUltcGwgKnN0YXJ0ID0gbV9zZWwuc3RhcnQo
KS5ub2RlKCk7CisgICAgTm9kZUltcGwgKmVuZCA9IG1fc2VsLmVuZCgpLm5vZGUoKTsKKyAgICAK
KyAgICBib29sIGJhc2VSZW1vdmVkID0gbm9kZSA9PSBiYXNlIHx8IGJhc2UtPmlzQW5jZXN0b3Io
bm9kZSk7CisgICAgYm9vbCBleHRlbnRSZW1vdmVkID0gbm9kZSA9PSBleHRlbnQgfHwgZXh0ZW50
LT5pc0FuY2VzdG9yKG5vZGUpOworICAgIGJvb2wgc3RhcnRSZW1vdmVkID0gbm9kZSA9PSBzdGFy
dCB8fCBzdGFydC0+aXNBbmNlc3Rvcihub2RlKTsKKyAgICBib29sIGVuZFJlbW92ZWQgPSBub2Rl
ID09IGVuZCB8fCBlbmQtPmlzQW5jZXN0b3Iobm9kZSk7CisgICAgCisgICAgLy8gRklYTUU6IFRo
aXMgZG9lc24ndCBub3RpZnkgdGhlIGVkaXRpbmcgZGVsZWdhdGUgb2YgYSBzZWxlY3Rpb24gY2hh
bmdlCisgICAgLy8gRklYTUU6IElkZWFsbHksIHRoaXMgd291bGQganVzdCBhbHRlciB0aGUgc2Vs
ZWN0aW9uLCBpbnN0ZWFkIG9mIGJsb3dpbmcgaXQgYXdheSwgaW4gY2FzZXMgd2hlcmUgZW5kIHBv
aW50cyBhcmUgcmVtb3ZlZC4KKyAgICBpZiAoc3RhcnRSZW1vdmVkIHx8IGVuZFJlbW92ZWQpIHsK
KyAgICAgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbigpKTsKKyAgICAgICAgaWYgKHN0YXJ0LT5y
ZW5kZXJlcigpICYmIHN0YXJ0LT5yZW5kZXJlcigpLT5jYW52YXMoKSkKKyAgICAgICAgICAgIHN0
YXJ0LT5yZW5kZXJlcigpLT5jYW52YXMoKS0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgCisg
ICAgfSBlbHNlIGlmIChiYXNlUmVtb3ZlZCB8fCBleHRlbnRSZW1vdmVkKSB7CisgICAgICAgIGlm
IChtX3NlbC5pc0Jhc2VGaXJzdCgpKSB7CisgICAgICAgICAgICBtX3NlbC5zZXRCYXNlKG1fc2Vs
LnN0YXJ0KCkpOworICAgICAgICAgICAgbV9zZWwuc2V0RXh0ZW50KG1fc2VsLmVuZCgpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc2VsLnNldEJhc2UobV9zZWwuc3RhcnQoKSk7
CisgICAgICAgICAgICBtX3NlbC5zZXRFeHRlbnQobV9zZWwuZW5kKCkpOworICAgICAgICB9Cisg
ICAgfQorfQorCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldE1vZGlmeUJpYXMoRUFsdGVy
IGFsdGVyLCBFRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBzd2l0Y2ggKGFsdGVyKSB7CkBA
IC01NDIsMzEgKzYyMiwzMSBAQAogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNsZWFyKCkK
IHsKLSAgICBtX3NlbCA9IFNlbGVjdGlvbigpOworICAgIHNldFNlbGVjdGlvbihTZWxlY3Rpb24o
KSk7CiAgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29udHJv
bGxlcjo6c2V0QmFzZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykKIHsKLSAgICBtX3NlbCA9
IFNlbGVjdGlvbihwb3MuZGVlcEVxdWl2YWxlbnQoKSwgbV9zZWwuZXh0ZW50KCksIHBvcy5hZmZp
bml0eSgpKTsKKyAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHBvcy5kZWVwRXF1aXZhbGVudCgp
LCBtX3NlbC5leHRlbnQoKSwgcG9zLmFmZmluaXR5KCkpKTsKICAgICBtX25lZWRzTGF5b3V0ID0g
dHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFeHRlbnQoY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZwb3MpCiB7Ci0gICAgbV9zZWwgPSBTZWxlY3Rpb24obV9zZWwuYmFzZSgp
LCBwb3MuZGVlcEVxdWl2YWxlbnQoKSwgcG9zLmFmZmluaXR5KCkpOworICAgIHNldFNlbGVjdGlv
bihTZWxlY3Rpb24obV9zZWwuYmFzZSgpLCBwb3MuZGVlcEVxdWl2YWxlbnQoKSwgcG9zLmFmZmlu
aXR5KCkpKTsKICAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rpb25D
b250cm9sbGVyOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0
eSkKIHsKLSAgICBtX3NlbCA9IFNlbGVjdGlvbihwb3MsIG1fc2VsLmV4dGVudCgpLCBhZmZpbml0
eSk7CisgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbihwb3MsIG1fc2VsLmV4dGVudCgpLCBhZmZp
bml0eSkpOwogICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCiB2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnNldEV4dGVudChjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5p
dHkpCiB7Ci0gICAgbV9zZWwgPSBTZWxlY3Rpb24obV9zZWwuYmFzZSgpLCBwb3MsIGFmZmluaXR5
KTsKKyAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKG1fc2VsLmJhc2UoKSwgcG9zLCBhZmZpbml0
eSkpOwogICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCkluZGV4OiByZW5kZXJpbmcvcmVu
ZGVyX2NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9jb250YWlu
ZXIuY3BwCShyZXZpc2lvbiAxMjI1MSkKKysrIHJlbmRlcmluZy9yZW5kZXJfY29udGFpbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDE4ICsxNjksNiBAQAogICAgICAgICAKICAgICAgICAg
Ly8gS2VlcCBvdXIgbGF5ZXIgaGllcmFyY2h5IHVwZGF0ZWQuCiAgICAgICAgIG9sZENoaWxkLT5y
ZW1vdmVMYXllcnMoZW5jbG9zaW5nTGF5ZXIoKSk7Ci0gICAgCi0gICAgICAgIC8vIGlmIG9sZENo
aWxkIGlzIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHNlbGVjdGlvbiwgdGhlbiBjbGVhciB0aGUg
c2VsZWN0aW9uIHRvCi0gICAgICAgIC8vIGF2b2lkIHByb2JsZW1zIG9mIGludmFsaWQgcG9pbnRl
cnMKLSAgICAKLSAgICAgICAgLy8gIyMjIFRoaXMgaXMgbm90IHRoZSAicHJvcGVyIiBzb2x1dGlv
bi4uLiBpZGVhbGx5IHRoZSBzZWxlY3Rpb24gc2hvdWxkIGJlIG1haW50YWluZWQKLSAgICAgICAg
Ly8gYmFzZWQgb24gRE9NIE5vZGVzIGFuZCBhIFJhbmdlLCB3aGljaCBnZXRzIGFkanVzdGVkIGFw
cHJvcHJpYXRlbHkgd2hlbiBub2RlcyBhcmUKLSAgICAgICAgLy8gZGVsZXRlZC9pbnNlcnRlZCBu
ZWFyIGV0Yy4gQnV0IHRoaXMgYXQgbGVhc3QgcHJldmVudHMgY3Jhc2hlcyBjYXVzZWQgd2hlbiB0
aGUgc3RhcnQKLSAgICAgICAgLy8gb3IgZW5kIG9mIHRoZSBzZWxlY3Rpb24gaXMgZGVsZXRlZCBh
bmQgdGhlbiBhY2Nlc3NlZCB3aGVuIHRoZSB1c2VyIG5leHQgc2VsZWN0cwotICAgICAgICAvLyBz
b21ldGhpbmcuCi0gICAgCi0gICAgICAgIGlmIChvbGRDaGlsZC0+aXNTZWxlY3Rpb25Cb3JkZXIo
KSkKLSAgICAgICAgICAgIGNhbnZhcygpLT5jbGVhclNlbGVjdGlvbigpOwogICAgIH0KICAgICAK
ICAgICAvLyByZW1vdmUgdGhlIGNoaWxkCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJKHJldmlzaW9uIDEyMjUx
KQorKysgcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDEw
ICsxOTAsNiBAQAogICAgIAogICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CiAg
ICAgICAgIGlmIChtX2ZpcnN0TGluZUJveCkgewotICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgd2Fp
dCBmb3IgUmVuZGVyQ29udGFpbmVyOjpkZXN0cm95IHRvIGNsZWFyIHRoZSBzZWxlY3Rpb24sCi0g
ICAgICAgICAgICAvLyBiZWNhdXNlIGJ5IHRoZW4gd2Ugd2lsbCBoYXZlIG51a2VkIHRoZSBsaW5l
IGJveGVzLgotICAgICAgICAgICAgaWYgKGlzU2VsZWN0aW9uQm9yZGVyKCkpCi0gICAgICAgICAg
ICAgICAgY2FudmFzKCktPmNsZWFyU2VsZWN0aW9uKCk7CiAKICAgICAgICAgICAgIC8vIElmIGxp
bmUgYm94ZXMgYXJlIGNvbnRhaW5lZCBpbnNpZGUgYSByb290LCB0aGF0IG1lYW5zIHdlJ3JlIGFu
IGlubGluZS4KICAgICAgICAgICAgIC8vIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byByZW1vdmUg
YWxsIHRoZSBsaW5lIGJveGVzIHNvIHRoYXQgdGhlIHBhcmVudAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5891</attachid>
            <date>2006-01-23 15:24:50 -0800</date>
            <delta_ts>2006-01-23 18:47:52 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6644-2.txt</filename>
            <type>text/plain</type>
            <size>12980</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxMjI1MSkKKysr
IGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9u
LmgiCisjaW5jbHVkZSAiZG9tMl9ldmVudHMuaCIKICNpbmNsdWRlICJkb20yX3JhbmdlaW1wbC5o
IgogCiBjbGFzcyBGcmFtZTsKQEAgLTM3LDcgKzM4LDIyIEBACiAKIGNsYXNzIFJlbmRlck9iamVj
dDsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKK2NsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7CiAK
K2NsYXNzIE11dGF0aW9uTGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lcgoreworcHVibGlj
OgorICAgIE11dGF0aW9uTGlzdGVuZXIoKSB7IG1fc2VsZWN0aW9uQ29udHJvbGxlciA9IDA7IH0K
KyAgICBNdXRhdGlvbkxpc3RlbmVyKFNlbGVjdGlvbkNvbnRyb2xsZXIgKnMpIHsgbV9zZWxlY3Rp
b25Db250cm9sbGVyID0gczsgfQorICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgKnNlbGVjdGlvbkNv
bnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRyb2xsZXI7IH0KKyAgICB2
b2lkIHNldFNlbGVjdGlvbkNvbnRyb2xsZXIoU2VsZWN0aW9uQ29udHJvbGxlciAqcykgeyBtX3Nl
bGVjdGlvbkNvbnRyb2xsZXIgPSBzOyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2
ZW50KEV2ZW50TGlzdGVuZXJFdmVudCBldnQsIGJvb2wgaXNXaW5kb3dFdmVudCk7CisgICAgCitw
cml2YXRlOgorICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgKm1fc2VsZWN0aW9uQ29udHJvbGxlcjsK
K307CisKIGNsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXIKIHsKIHB1YmxpYzoKQEAgLTUzLDYgKzY5
LDggQEAKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFBvc2l0aW9uICYsIEVBZmZpbml0
eSBhZmZpbml0eSk7CiAgICAgU2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBQb3NpdGlvbiAmLCBj
b25zdCBQb3NpdGlvbiAmLCBFQWZmaW5pdHkpOwogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoY29u
c3QgU2VsZWN0aW9uQ29udHJvbGxlciAmKTsKKyAgICAKKyAgICB+U2VsZWN0aW9uQ29udHJvbGxl
cigpOwogCiAgICAgU2VsZWN0aW9uQ29udHJvbGxlciAmb3BlcmF0b3I9KGNvbnN0IFNlbGVjdGlv
bkNvbnRyb2xsZXIgJm8pOwogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgJm9wZXJhdG9yPShjb25z
dCBWaXNpYmxlUG9zaXRpb24gJnIpIHsgbW92ZVRvKHIpOyByZXR1cm4gKnRoaXM7IH0KQEAgLTY1
LDYgKzgzLDcgQEAKICAgICB2b2lkIG1vdmVUbyhjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICYp
OwogCiAgICAgY29uc3QgU2VsZWN0aW9uICZzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3Nl
bDsgfQorICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmKTsKIAogICAgIFNl
bGVjdGlvbjo6RVN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuc3RhdGUoKTsgfQog
CkBAIC0xMDQsNiArMTIzLDggQEAKICAgICBmcmllbmQgY2xhc3MgOjpGcmFtZTsKICAgICAKICAg
ICBGcmFtZSAqZnJhbWUoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVk
KE5vZGVJbXBsICopOwogCiAgICAgLy8gU2FmYXJpIFNlbGVjdGlvbiBPYmplY3QgQVBJCiAgICAg
Tm9kZUltcGwgKmJhc2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuYmFzZSgpLm5vZGUoKTsg
fQpAQCAtMTc2LDYgKzE5Nyw3IEBACiAgICAgYm9vbCBtX25lZWRzTGF5b3V0IDogMTsgICAgICAg
Ly8gdHJ1ZSBpZiB0aGUgY2FyZXQgYW5kIGV4cGVjdGVkVmlzaWJsZSByZWN0YW5nbGVzIG5lZWQg
dG8gYmUgY2FsY3VsYXRlZAogICAgIGJvb2wgbV9tb2RpZnlCaWFzU2V0IDogMTsgICAgIC8vIHRy
dWUgaWYgdGhlIHNlbGVjdGlvbiBoYXMgYmVlbiBob3Jpem9udGFsbHkgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbW9kaWZpZWQgd2l0aCBFQWx0ZXI6OkVYVEVORAorICAg
IFJlZlB0cjxNdXRhdGlvbkxpc3RlbmVyPiBtX211dGF0aW9uTGlzdGVuZXI7CiB9OwogCiBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJmEsIGNvbnN0IFNl
bGVjdGlvbkNvbnRyb2xsZXIgJmIpCkluZGV4OiBraHRtbC9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDEyMjUxKQorKysga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDE3IEBACiAjaW5jbHVkZSAiZG9t
L2RvbV9ub2RlLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJodG1s
ZWRpdGluZy5oIgorI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgiCiAjaW5jbHVk
ZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVy
X3N0eWxlLmgiCiAjaW5jbHVkZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgInZpc2li
bGVfdGV4dC5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKICNpbmNsdWRlICJ4bWwvZG9t
Ml9yYW5nZWltcGwuaCIKKyNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIK
KyNpbmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDxxZXZlbnQuaD4KICNpbmNsdWRlIDxxcGFpbnRlci5oPgpAQCAtNTAs
NTkgKzUzLDc4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7CisKK3ZvaWQgTXV0YXRpb25MaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnRJbXBs
ICpldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KQoreworICAgIGlmICghbV9zZWxlY3Rpb25Db250
cm9sbGVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0g
RE9NTm9kZVJlbW92ZWRFdmVudCkKKyAgICAgICAgbV9zZWxlY3Rpb25Db250cm9sbGVyLT5ub2Rl
V2lsbEJlUmVtb3ZlZChldmVudC0+dGFyZ2V0KCkpOworfQorCiBTZWxlY3Rpb25Db250cm9sbGVy
OjpTZWxlY3Rpb25Db250cm9sbGVyKCkKICAgICA6IG1fbmVlZHNMYXlvdXQodHJ1ZSkKLSAgICAs
IG1fbW9kaWZ5Qmlhc1NldChmYWxzZSkKIHsKKyAgICBtX211dGF0aW9uTGlzdGVuZXIgPSBuZXcg
TXV0YXRpb25MaXN0ZW5lcih0aGlzKTsKKyAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKCkpOwog
fQogCiBTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFNlbGVj
dGlvbiAmc2VsKQotICAgIDogbV9zZWwoc2VsKQotICAgICwgbV9uZWVkc0xheW91dCh0cnVlKQor
ICAgIDogbV9uZWVkc0xheW91dCh0cnVlKQogICAgICwgbV9tb2RpZnlCaWFzU2V0KGZhbHNlKQog
eworICAgIG1fbXV0YXRpb25MaXN0ZW5lciA9IG5ldyBNdXRhdGlvbkxpc3RlbmVyKHRoaXMpOwor
ICAgIHNldFNlbGVjdGlvbihzZWwpOwogfQogCiBTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rp
b25Db250cm9sbGVyKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSkKLSAg
ICA6IG1fc2VsKHBvcywgcG9zLCBhZmZpbml0eSkKLSAgICAsIG1fbmVlZHNMYXlvdXQodHJ1ZSkK
KyAgICA6IG1fbmVlZHNMYXlvdXQodHJ1ZSkKICAgICAsIG1fbW9kaWZ5Qmlhc1NldChmYWxzZSkK
IHsKKyAgICBtX211dGF0aW9uTGlzdGVuZXIgPSBuZXcgTXV0YXRpb25MaXN0ZW5lcih0aGlzKTsK
KyAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHBvcywgcG9zLCBhZmZpbml0eSkpOwogfQogCiBT
ZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFJhbmdlSW1wbCAq
ciwgRUFmZmluaXR5IGFmZmluaXR5KQotICAgIDogbV9zZWwoc3RhcnRQb3NpdGlvbihyKSwgZW5k
UG9zaXRpb24ociksIGFmZmluaXR5KQotICAgICwgbV9uZWVkc0xheW91dCh0cnVlKQorICAgIDog
bV9uZWVkc0xheW91dCh0cnVlKQogICAgICwgbV9tb2RpZnlCaWFzU2V0KGZhbHNlKQogeworICAg
IG1fbXV0YXRpb25MaXN0ZW5lciA9IG5ldyBNdXRhdGlvbkxpc3RlbmVyKHRoaXMpOworICAgIHNl
dFNlbGVjdGlvbihTZWxlY3Rpb24oc3RhcnRQb3NpdGlvbihyKSwgZW5kUG9zaXRpb24ociksIGFm
ZmluaXR5KSk7CiB9CiAKIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIo
Y29uc3QgUG9zaXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZpbml0eSBh
ZmZpbml0eSkKLSAgICA6IG1fc2VsKGJhc2UsIGV4dGVudCwgYWZmaW5pdHkpCi0gICAgLCBtX25l
ZWRzTGF5b3V0KHRydWUpCisgICAgOiBtX25lZWRzTGF5b3V0KHRydWUpCiAgICAgLCBtX21vZGlm
eUJpYXNTZXQoZmFsc2UpCiB7CisgICAgbV9tdXRhdGlvbkxpc3RlbmVyID0gbmV3IE11dGF0aW9u
TGlzdGVuZXIodGhpcyk7CisgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbihiYXNlLCBleHRlbnQs
IGFmZmluaXR5KSk7CiB9CiAKIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xs
ZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zKQotICAgIDogbV9zZWwodmlzaWJs
ZVBvcy5kZWVwRXF1aXZhbGVudCgpLCB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCksIHZpc2li
bGVQb3MuYWZmaW5pdHkoKSkKLSAgICAsIG1fbmVlZHNMYXlvdXQodHJ1ZSkKKyAgICA6IG1fbmVl
ZHNMYXlvdXQodHJ1ZSkKICAgICAsIG1fbW9kaWZ5Qmlhc1NldChmYWxzZSkKIHsKKyAgICBtX211
dGF0aW9uTGlzdGVuZXIgPSBuZXcgTXV0YXRpb25MaXN0ZW5lcih0aGlzKTsKKyAgICBzZXRTZWxl
Y3Rpb24oU2VsZWN0aW9uKHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKSwgdmlzaWJsZVBvcy5k
ZWVwRXF1aXZhbGVudCgpLCB2aXNpYmxlUG9zLmFmZmluaXR5KCkpKTsKIH0KIAogU2VsZWN0aW9u
Q29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihjb25zdCBWaXNpYmxlUG9zaXRpb24gJmJh
c2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmZXh0ZW50KQotICAgIDogbV9zZWwoYmFzZS5kZWVw
RXF1aXZhbGVudCgpLCBleHRlbnQuZGVlcEVxdWl2YWxlbnQoKSwgYmFzZS5hZmZpbml0eSgpKQot
ICAgICwgbV9uZWVkc0xheW91dCh0cnVlKQorICAgIDogbV9uZWVkc0xheW91dCh0cnVlKQogICAg
ICwgbV9tb2RpZnlCaWFzU2V0KGZhbHNlKQogeworICAgIG1fbXV0YXRpb25MaXN0ZW5lciA9IG5l
dyBNdXRhdGlvbkxpc3RlbmVyKHRoaXMpOworICAgIHNldFNlbGVjdGlvbihTZWxlY3Rpb24oYmFz
ZS5kZWVwRXF1aXZhbGVudCgpLCBleHRlbnQuZGVlcEVxdWl2YWxlbnQoKSwgYmFzZS5hZmZpbml0
eSgpKSk7CiB9CiAKIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNvbnRyb2xsZXIoY29u
c3QgU2VsZWN0aW9uQ29udHJvbGxlciAmbykKLSAgICA6IG1fc2VsKG8ubV9zZWwpCi0gICAgLCBt
X25lZWRzTGF5b3V0KG8ubV9uZWVkc0xheW91dCkKKyAgICA6IG1fbmVlZHNMYXlvdXQoby5tX25l
ZWRzTGF5b3V0KQogICAgICwgbV9tb2RpZnlCaWFzU2V0KG8ubV9tb2RpZnlCaWFzU2V0KQogewor
ICAgIG1fbXV0YXRpb25MaXN0ZW5lciA9IG5ldyBNdXRhdGlvbkxpc3RlbmVyKHRoaXMpOworICAg
IHNldFNlbGVjdGlvbihvLm1fc2VsKTsgCiAgICAgLy8gT25seSBjb3B5IHRoZSBjb29yZGluYXRl
cyBvdmVyIGlmIHRoZSBvdGhlciBvYmplY3QKICAgICAvLyBoYXMgaGFkIGEgbGF5b3V0LCBvdGhl
cndpc2Uga2VlcCB0aGUgY3VycmVudAogICAgIC8vIGNvb3JkaW5hdGVzLiBUaGlzIHByZXZlbnRz
IGRyYXdpbmcgYXJ0aWZhY3RzIGZyb20KQEAgLTExNCw5ICsxMzYsMTcgQEAKICAgICB9CiB9CiAK
K1NlbGVjdGlvbkNvbnRyb2xsZXI6On5TZWxlY3Rpb25Db250cm9sbGVyKCkKK3sKKyAgICBpZiAo
IWlzTm9uZSgpKSB7CisgICAgICAgIERvY3VtZW50SW1wbCAqZG9jdW1lbnQgPSBtX3NlbC5zdGFy
dCgpLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKTsKKyAgICAgICAgZG9jdW1lbnQtPnJlbW92ZUV2ZW50
TGlzdGVuZXIoRE9NTm9kZVJlbW92ZWRFdmVudCwgbV9tdXRhdGlvbkxpc3RlbmVyLmdldCgpLCBm
YWxzZSk7CisgICAgfQorfQorCiBTZWxlY3Rpb25Db250cm9sbGVyICZTZWxlY3Rpb25Db250cm9s
bGVyOjpvcGVyYXRvcj0oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmbykKIHsKLSAgICBtX3Nl
bCA9IG8ubV9zZWw7CisgICAgc2V0U2VsZWN0aW9uKG8ubV9zZWwpOwogCiAgICAgbV9uZWVkc0xh
eW91dCA9IG8ubV9uZWVkc0xheW91dDsKICAgICBtX21vZGlmeUJpYXNTZXQgPSBvLm1fbW9kaWZ5
Qmlhc1NldDsKQEAgLTEzNiw0MCArMTY2LDg5IEBACiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zKQogewotICAgIG1fc2VsID0gU2Vs
ZWN0aW9uKHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3MuZGVlcEVxdWl2YWxlbnQoKSwgcG9zLmFm
ZmluaXR5KCkpOworICAgIHNldFNlbGVjdGlvbihTZWxlY3Rpb24ocG9zLmRlZXBFcXVpdmFsZW50
KCksIHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3MuYWZmaW5pdHkoKSkpOwogICAgIG1fbmVlZHNM
YXlvdXQgPSB0cnVlOwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVUbyhjb25z
dCBWaXNpYmxlUG9zaXRpb24gJmJhc2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmZXh0ZW50KQog
ewotICAgIG1fc2VsID0gU2VsZWN0aW9uKGJhc2UuZGVlcEVxdWl2YWxlbnQoKSwgZXh0ZW50LmRl
ZXBFcXVpdmFsZW50KCksIGJhc2UuYWZmaW5pdHkoKSk7CisgICAgc2V0U2VsZWN0aW9uKFNlbGVj
dGlvbihiYXNlLmRlZXBFcXVpdmFsZW50KCksIGV4dGVudC5kZWVwRXF1aXZhbGVudCgpLCBiYXNl
LmFmZmluaXR5KCkpKTsKICAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxl
Y3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmbykKIHsK
LSAgICBtX3NlbCA9IG8ubV9zZWw7CisgICAgc2V0U2VsZWN0aW9uKG8ubV9zZWwpOwogICAgIG1f
bmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVU
byhjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7Ci0gICAgbV9zZWwg
PSBTZWxlY3Rpb24ocG9zLCBhZmZpbml0eSk7CisgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbihw
b3MsIGFmZmluaXR5KSk7CiAgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9CiAKIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFJhbmdlSW1wbCAqciwgRUFmZmluaXR5IGFm
ZmluaXR5KQogewotICAgIG1fc2VsID0gU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24ociksIGVuZFBv
c2l0aW9uKHIpLCBhZmZpbml0eSk7CisgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbihzdGFydFBv
c2l0aW9uKHIpLCBlbmRQb3NpdGlvbihyKSwgYWZmaW5pdHkpKTsKICAgICBtX25lZWRzTGF5b3V0
ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8oY29uc3QgUG9z
aXRpb24gJmJhc2UsIGNvbnN0IFBvc2l0aW9uICZleHRlbnQsIEVBZmZpbml0eSBhZmZpbml0eSkK
IHsKLSAgICBtX3NlbCA9IFNlbGVjdGlvbihiYXNlLCBleHRlbnQsIGFmZmluaXR5KTsKKyAgICBz
ZXRTZWxlY3Rpb24oU2VsZWN0aW9uKGJhc2UsIGV4dGVudCwgYWZmaW5pdHkpKTsKICAgICBtX25l
ZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxl
Y3Rpb24oY29uc3QgU2VsZWN0aW9uICZuZXdTZWxlY3Rpb24pCit7CisgICAgU2VsZWN0aW9uIG9s
ZFNlbGVjdGlvbiA9IG1fc2VsOworICAgIERvY3VtZW50SW1wbCAqb2xkRG9jdW1lbnQgPSBvbGRT
ZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkgPyBvbGRTZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCktPmdl
dERvY3VtZW50KCkgOiAwOworICAgIERvY3VtZW50SW1wbCAqbmV3RG9jdW1lbnQgPSBuZXdTZWxl
Y3Rpb24uc3RhcnQoKS5ub2RlKCkgPyBuZXdTZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCktPmdldERv
Y3VtZW50KCkgOiAwOworICAgIAorICAgIGlmIChvbGREb2N1bWVudCAhPSBuZXdEb2N1bWVudCkg
eworICAgICAgICBpZiAob2xkRG9jdW1lbnQpCisgICAgICAgICAgICBvbGREb2N1bWVudC0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihET01Ob2RlUmVtb3ZlZEV2ZW50LCBtX211dGF0aW9uTGlzdGVuZXIu
Z2V0KCksIGZhbHNlKTsKKyAgICAgICAgaWYgKG5ld0RvY3VtZW50KQorICAgICAgICAgICAgbmV3
RG9jdW1lbnQtPmFkZEV2ZW50TGlzdGVuZXIoRE9NTm9kZVJlbW92ZWRFdmVudCwgbV9tdXRhdGlv
bkxpc3RlbmVyLmdldCgpLCBmYWxzZSk7CisgICAgfQorICAgIAorICAgIG1fc2VsID0gbmV3U2Vs
ZWN0aW9uOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vZGVXaWxsQmVSZW1vdmVk
KE5vZGVJbXBsICpub2RlKQoreworICAgIGlmIChpc05vbmUoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIE5vZGVJbXBsICpiYXNlID0gbV9zZWwuYmFzZSgpLm5vZGUoKTsKKyAgICBOb2Rl
SW1wbCAqZXh0ZW50ID0gbV9zZWwuZXh0ZW50KCkubm9kZSgpOworICAgIE5vZGVJbXBsICpzdGFy
dCA9IG1fc2VsLnN0YXJ0KCkubm9kZSgpOworICAgIE5vZGVJbXBsICplbmQgPSBtX3NlbC5lbmQo
KS5ub2RlKCk7CisgICAgCisgICAgYm9vbCBiYXNlUmVtb3ZlZCA9IG5vZGUgPT0gYmFzZSB8fCBi
YXNlLT5pc0FuY2VzdG9yKG5vZGUpOworICAgIGJvb2wgZXh0ZW50UmVtb3ZlZCA9IG5vZGUgPT0g
ZXh0ZW50IHx8IGV4dGVudC0+aXNBbmNlc3Rvcihub2RlKTsKKyAgICBib29sIHN0YXJ0UmVtb3Zl
ZCA9IG5vZGUgPT0gc3RhcnQgfHwgc3RhcnQtPmlzQW5jZXN0b3Iobm9kZSk7CisgICAgYm9vbCBl
bmRSZW1vdmVkID0gbm9kZSA9PSBlbmQgfHwgZW5kLT5pc0FuY2VzdG9yKG5vZGUpOworICAgIAor
ICAgIC8vIEZJWE1FICg2NDk4KTogVGhpcyBkb2Vzbid0IG5vdGlmeSB0aGUgZWRpdGluZyBkZWxl
Z2F0ZSBvZiBhIHNlbGVjdGlvbiBjaGFuZ2UuCisgICAgLy8gRklYTUU6IFdoZW4gZW5kcG9pbnRz
IGFyZSByZW1vdmVkLCB3ZSBzaG91bGQganVzdCBhbHRlciB0aGUgc2VsZWN0aW9uLCBpbnN0ZWFk
IG9mIGJsb3dpbmcgaXQgYXdheS4KKyAgICBpZiAoc3RhcnRSZW1vdmVkIHx8IGVuZFJlbW92ZWQp
IHsKKyAgICAgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbigpKTsKKyAgICAgICAgaWYgKHN0YXJ0
LT5yZW5kZXJlcigpICYmIHN0YXJ0LT5yZW5kZXJlcigpLT5jYW52YXMoKSkKKyAgICAgICAgICAg
IHN0YXJ0LT5yZW5kZXJlcigpLT5jYW52YXMoKS0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAg
CisgICAgfSBlbHNlIGlmIChiYXNlUmVtb3ZlZCB8fCBleHRlbnRSZW1vdmVkKSB7CisgICAgICAg
IGlmIChtX3NlbC5pc0Jhc2VGaXJzdCgpKSB7CisgICAgICAgICAgICBtX3NlbC5zZXRCYXNlKG1f
c2VsLnN0YXJ0KCkpOworICAgICAgICAgICAgbV9zZWwuc2V0RXh0ZW50KG1fc2VsLmVuZCgpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc2VsLnNldEJhc2UobV9zZWwuc3RhcnQo
KSk7CisgICAgICAgICAgICBtX3NlbC5zZXRFeHRlbnQobV9zZWwuZW5kKCkpOworICAgICAgICB9
CisgICAgfQorfQorCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldE1vZGlmeUJpYXMoRUFs
dGVyIGFsdGVyLCBFRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBzd2l0Y2ggKGFsdGVyKSB7
CkBAIC01NDIsMzEgKzYyMSwzMSBAQAogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNsZWFy
KCkKIHsKLSAgICBtX3NlbCA9IFNlbGVjdGlvbigpOworICAgIHNldFNlbGVjdGlvbihTZWxlY3Rp
b24oKSk7CiAgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CiB9CiAKIHZvaWQgU2VsZWN0aW9uQ29u
dHJvbGxlcjo6c2V0QmFzZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcykKIHsKLSAgICBtX3Nl
bCA9IFNlbGVjdGlvbihwb3MuZGVlcEVxdWl2YWxlbnQoKSwgbV9zZWwuZXh0ZW50KCksIHBvcy5h
ZmZpbml0eSgpKTsKKyAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHBvcy5kZWVwRXF1aXZhbGVu
dCgpLCBtX3NlbC5leHRlbnQoKSwgcG9zLmFmZmluaXR5KCkpKTsKICAgICBtX25lZWRzTGF5b3V0
ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRFeHRlbnQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZwb3MpCiB7Ci0gICAgbV9zZWwgPSBTZWxlY3Rpb24obV9zZWwuYmFz
ZSgpLCBwb3MuZGVlcEVxdWl2YWxlbnQoKSwgcG9zLmFmZmluaXR5KCkpOworICAgIHNldFNlbGVj
dGlvbihTZWxlY3Rpb24obV9zZWwuYmFzZSgpLCBwb3MuZGVlcEVxdWl2YWxlbnQoKSwgcG9zLmFm
ZmluaXR5KCkpKTsKICAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKIH0KIAogdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZp
bml0eSkKIHsKLSAgICBtX3NlbCA9IFNlbGVjdGlvbihwb3MsIG1fc2VsLmV4dGVudCgpLCBhZmZp
bml0eSk7CisgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbihwb3MsIG1fc2VsLmV4dGVudCgpLCBh
ZmZpbml0eSkpOwogICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCiB2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OnNldEV4dGVudChjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZm
aW5pdHkpCiB7Ci0gICAgbV9zZWwgPSBTZWxlY3Rpb24obV9zZWwuYmFzZSgpLCBwb3MsIGFmZmlu
aXR5KTsKKyAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKG1fc2VsLmJhc2UoKSwgcG9zLCBhZmZp
bml0eSkpOwogICAgIG1fbmVlZHNMYXlvdXQgPSB0cnVlOwogfQogCkluZGV4OiByZW5kZXJpbmcv
cmVuZGVyX2NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9jb250
YWluZXIuY3BwCShyZXZpc2lvbiAxMjI1MSkKKysrIHJlbmRlcmluZy9yZW5kZXJfY29udGFpbmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDE4ICsxNjksNiBAQAogICAgICAgICAKICAgICAg
ICAgLy8gS2VlcCBvdXIgbGF5ZXIgaGllcmFyY2h5IHVwZGF0ZWQuCiAgICAgICAgIG9sZENoaWxk
LT5yZW1vdmVMYXllcnMoZW5jbG9zaW5nTGF5ZXIoKSk7Ci0gICAgCi0gICAgICAgIC8vIGlmIG9s
ZENoaWxkIGlzIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHNlbGVjdGlvbiwgdGhlbiBjbGVhciB0
aGUgc2VsZWN0aW9uIHRvCi0gICAgICAgIC8vIGF2b2lkIHByb2JsZW1zIG9mIGludmFsaWQgcG9p
bnRlcnMKLSAgICAKLSAgICAgICAgLy8gIyMjIFRoaXMgaXMgbm90IHRoZSAicHJvcGVyIiBzb2x1
dGlvbi4uLiBpZGVhbGx5IHRoZSBzZWxlY3Rpb24gc2hvdWxkIGJlIG1haW50YWluZWQKLSAgICAg
ICAgLy8gYmFzZWQgb24gRE9NIE5vZGVzIGFuZCBhIFJhbmdlLCB3aGljaCBnZXRzIGFkanVzdGVk
IGFwcHJvcHJpYXRlbHkgd2hlbiBub2RlcyBhcmUKLSAgICAgICAgLy8gZGVsZXRlZC9pbnNlcnRl
ZCBuZWFyIGV0Yy4gQnV0IHRoaXMgYXQgbGVhc3QgcHJldmVudHMgY3Jhc2hlcyBjYXVzZWQgd2hl
biB0aGUgc3RhcnQKLSAgICAgICAgLy8gb3IgZW5kIG9mIHRoZSBzZWxlY3Rpb24gaXMgZGVsZXRl
ZCBhbmQgdGhlbiBhY2Nlc3NlZCB3aGVuIHRoZSB1c2VyIG5leHQgc2VsZWN0cwotICAgICAgICAv
LyBzb21ldGhpbmcuCi0gICAgCi0gICAgICAgIGlmIChvbGRDaGlsZC0+aXNTZWxlY3Rpb25Cb3Jk
ZXIoKSkKLSAgICAgICAgICAgIGNhbnZhcygpLT5jbGVhclNlbGVjdGlvbigpOwogICAgIH0KICAg
ICAKICAgICAvLyByZW1vdmUgdGhlIGNoaWxkCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2Zsb3cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJKHJldmlzaW9uIDEy
MjUxKQorKysgcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkw
LDEwICsxOTAsNiBAQAogICAgIAogICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7
CiAgICAgICAgIGlmIChtX2ZpcnN0TGluZUJveCkgewotICAgICAgICAgICAgLy8gV2UgY2FuJ3Qg
d2FpdCBmb3IgUmVuZGVyQ29udGFpbmVyOjpkZXN0cm95IHRvIGNsZWFyIHRoZSBzZWxlY3Rpb24s
Ci0gICAgICAgICAgICAvLyBiZWNhdXNlIGJ5IHRoZW4gd2Ugd2lsbCBoYXZlIG51a2VkIHRoZSBs
aW5lIGJveGVzLgotICAgICAgICAgICAgaWYgKGlzU2VsZWN0aW9uQm9yZGVyKCkpCi0gICAgICAg
ICAgICAgICAgY2FudmFzKCktPmNsZWFyU2VsZWN0aW9uKCk7CiAKICAgICAgICAgICAgIC8vIElm
IGxpbmUgYm94ZXMgYXJlIGNvbnRhaW5lZCBpbnNpZGUgYSByb290LCB0aGF0IG1lYW5zIHdlJ3Jl
IGFuIGlubGluZS4KICAgICAgICAgICAgIC8vIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byByZW1v
dmUgYWxsIHRoZSBsaW5lIGJveGVzIHNvIHRoYXQgdGhlIHBhcmVudAo=
</data>
<flag name="review"
          id="1375"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>