<?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>12078</bug_id>
          
          <creation_ts>2007-01-02 11:56:27 -0800</creation_ts>
          <short_desc>Clean up RenderTable*</short_desc>
          <delta_ts>2007-01-04 22:12:37 -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>Layout and Rendering</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>37677</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2007-01-02 11:56:27 -0800</bug_when>
    <thetext>Going to attach a patch with some cleanup and reorganization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37678</commentid>
    <comment_count>1</comment_count>
      <attachid>12169</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-02 11:58:50 -0800</bug_when>
    <thetext>Created attachment 12169
RenderTable* cleanup and reorg

No layout test regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37644</commentid>
    <comment_count>2</comment_count>
      <attachid>12169</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-01-02 13:59:54 -0800</bug_when>
    <thetext>Comment on attachment 12169
RenderTable* cleanup and reorg

Looks great!! But r- for now.


In AutoTableLayout.cpp and FixedTableLayout.cpp:

Put spaces around infix operators.

+    m_table-&gt;columnPositions()[m_table-&gt;columnPositions().size()-1] = pos;

It should be alright to remove the remaining qDebug() calls from these files as well.


In RenderTable.cpp:

Resize and fill can be done with one call to Vector::fill(value, newSize)

+    m_columnPos.resize(2);
+    m_columnPos.fill(0);
+    m_columns.resize(1);
+    m_columns.fill(ColumnStruct());

Put spaces around &apos;==&apos;

+    if (m_caption &amp;&amp; m_caption-&gt;style()-&gt;captionSide()==CAPBOTTOM) {

Missing spaces around infix &apos;-&apos;

+    memmove(m_columns.data() + pos + 1, m_columns.data() + pos, (oldSize-pos) * sizeof(ColumnStruct));

Use &apos;unsigned&apos; instead of &apos;unsigned int&apos;

+    for (unsigned int i = 0; i &lt; m_columns.size(); i++)


In RenderTableCell.cpp:

in function updateFromElement() there is no reason to declare the variables &apos;oldRSpan&apos; and &apos;oldCSpan&apos; outside of the if-statement, since that is the only place they are used.


In RenderTableCell.h:

No reason to be inconsistent here, choose either setFoo(int foo) or setFoo(int f)

+    int col() const { return m_column; }
+    void setCol(int col) { m_column = col; }
+    int row() const { return m_row; }
+    void setRow(int r) { m_row = r; }


In RenderTableSection.cpp:

Convert to use max(a,b)

+            if (pos &gt; m_rowPos[r + 1])
+                m_rowPos[r + 1] = pos;

same here

+            if (m_rowPos[r + 1] &lt; bRowPos)
+                m_rowPos[r + 1] = bRowPos;

and here

+        if (m_rowPos[r + 1] &lt; m_rowPos[r])
+            m_rowPos[r + 1] = m_rowPos[r];

Put spaces around infix &apos;+&apos;

+                cell-&gt;setPos(table()-&gt;columnPositions()[nEffCols] - table()-&gt;columnPositions()[table()-&gt;colToEffCol(cell-&gt;col()+cell-&gt;colSpan())] + hspacing, m_rowPos[rindx]);

Use &apos;!foo&apos; instead of &apos;foo == 0&apos; (in a couple of identical places)

+    if (m_gridRows == 0 || totalCols == 0)

also here

+        if (endcol == 0 &amp;&amp; tx + table()-&gt;columnPositions()[0] - table()-&gt;outerBorderLeft() &lt;= y + w + os)


In RenderTableSection.h:

* on the wrong side

+    virtual const char *renderName() const { return &quot;RenderTableSection&quot;; }

and here

virtual void addChild(RenderObject *child, RenderObject *beforeChild = 0);

and here

+    virtual void dump(TextStream *, DeprecatedString ind = &quot;&quot;) const;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37173</commentid>
    <comment_count>3</comment_count>
      <attachid>12213</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-04 04:35:33 -0800</bug_when>
    <thetext>Created attachment 12213
RenderTable* cleanup and reorg

Did as Sam asked, except for removing qdebug()s from the table layout classes, since it&apos;s outside the scope of this bug. Did another change that Sam suggested on IRC, which is the addition of recalcCellsIfNeeded().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37168</commentid>
    <comment_count>4</comment_count>
      <attachid>12213</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-01-04 06:30:58 -0800</bug_when>
    <thetext>Comment on attachment 12213
RenderTable* cleanup and reorg

A couple more nits

In FixedTableLayout.cpp:

put spaces around the infix &apos;+&apos;

m_width[cCol+i].setRawValue(w.type(), w.rawValue() * eSpan);

and here

if (m_width[cCol+i].isAuto() &amp;&amp; w.type() != Auto) {
    m_width[cCol+i].setRawValue(w.type(), w.rawValue() * eSpan);

and here around the infix &apos;-&apos;

+    m_table-&gt;columnPositions()[m_table-&gt;columnPositions().size()-1] = pos;


In RenderTableSection.cpp:

Convert to use max()

if (totalPercent &gt; 100 * percentScaleFactor)
    totalPercent = 100 * percentScaleFactor;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37152</commentid>
    <comment_count>5</comment_count>
      <attachid>12219</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-04 07:03:59 -0800</bug_when>
    <thetext>Created attachment 12219
RenderTable* cleanup and reorg

Discussed it with Sam on IRC and made a few changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37153</commentid>
    <comment_count>6</comment_count>
      <attachid>12219</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-01-04 07:06:11 -0800</bug_when>
    <thetext>Comment on attachment 12219
RenderTable* cleanup and reorg

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36976</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-01-04 22:12:37 -0800</bug_when>
    <thetext>Committed revision 18608.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12169</attachid>
            <date>2007-01-02 11:58:50 -0800</date>
            <delta_ts>2007-01-04 04:35:33 -0800</delta_ts>
            <desc>RenderTable* cleanup and reorg</desc>
            <filename>12078_r1.patch</filename>
            <type>text/plain</type>
            <size>118254</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODUyOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTY5IEBACisyMDA3LTAxLTAyICBNaXR6IFBldHRlbCAgPG1pdHpAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDc4CisgICAgICAgICAgQ2xl
YW4gdXAgUmVuZGVyVGFibGUqCisKKyAgICAgICAgLSBDb2Rpbmcgc3R5bGUgY2xlYW51cC4KKyAg
ICAgICAgLSBDYW5jZWxlZCBBdXRvVGFibGVMYXlvdXQgYW5kIEZpeGVkVGFibGVMYXlvdXQgYmVp
bmcgZnJpZW5kIGNsYXNzZXMgb2YKKyAgICAgICAgICBSZW5kZXJUYWJsZS4gSW5zdGVhZCwgYWRk
ZWQgcHVibGljIGFjY2Vzc29ycyB0byBSZW5kZXJUYWJsZSBmb3Igd2hhdAorICAgICAgICAgIHRo
ZSB0YWJsZSBsYXlvdXQgY2xhc3NlcyBuZWVkIGFuZCBjaGFuZ2VkIFRhYmxlTGF5b3V0OjpjYWxj
TWluTWF4V2lkdGgoKQorICAgICAgICAgIHRvIHRha2UgcmVmZXJlbmNlcyB0byB0aGUgY2FsbGVy
J3MgbWluIGFuZCBtYXggd2lkdGhzLgorICAgICAgICAtIE1hZGUgUmVuZGVyVGFibGVTZWN0aW9u
J3MgZ3JpZCBwcm90ZWN0ZWQgYW5kIG1vdmVkIGNvZGUgdGhhdCBhY2Nlc3NlZCBpdAorICAgICAg
ICAgIGZyb20gUmVuZGVyVGFibGUgaW50byBSZW5kZXJUYWJsZVNlY3Rpb24uCisKKyAgICAgICAg
Tm8gdGVzdCBwb3NzaWJsZSAobm8gY2hhbmdlIHRvIGZ1bmN0aW9uYWxpdHkpLgorCisgICAgICAg
ICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRv
VGFibGVMYXlvdXQ6OmNhbGNNaW5NYXhXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpBdXRvVGFi
bGVMYXlvdXQ6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNhbGNNaW5NYXhXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9GaXhlZFRh
YmxlTGF5b3V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpSZW5kZXJUYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6flJlbmRlclRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNhbGNXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpzZXRDZWxsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2FsY01pbk1heFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzcGxpdENvbHVtbik6IEZhY3RvcmVkIG91dCB0aGUg
c2VjdGlvbiB3b3JrCisgICAgICAgIHRvIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4o
KS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjphcHBlbmRDb2x1bW4pOiBGYWN0b3Jl
ZCBvdXQgdGhlIHNlY3Rpb24gd29yaworICAgICAgICB0byBSZW5kZXJUYWJsZVNlY3Rpb246OmFw
cGVuZENvbHVtbigpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNvbEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpyZW1vdmVDaGlsZE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGU6OmNhbGNCb3JkZXJMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlOjpjYWxjQm9yZGVyUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGU6Om91dGVyQm9yZGVyVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpvdXRl
ckJvcmRlckJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6b3V0ZXJCb3Jk
ZXJMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpvdXRlckJvcmRlclJpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzZWN0aW9uQWJvdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNlY3Rpb25CZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
OjpjZWxsQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNlbGxCZWZvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmdldE92ZXJmbG93Q2xpcFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmR1bXApOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmdldENvbHVt
blBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6aEJvcmRlclNwYWNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnZCb3JkZXJTcGFjaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjpnZXRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZTo6Y2VsbFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNl
dENlbGxQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpDb2x1bW5TdHJ1
Y3Q6OkNvbHVtblN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29sdW1u
cyk6IEFkZGVkIHRoaXMgYWNjZXNzb3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6
Y29sdW1uUG9zaXRpb25zKTogQWRkZWQgdGhpcyBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpoZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmZv
b3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Zmlyc3RCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpudW1FZmZDb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpzcGFuT2ZFZmZDb2wpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGU6OmNvbFRvRWZmQ29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjplZmZDb2xU
b0NvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Ym9yZGVyc1BhZGRpbmdBbmRT
cGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpuZWVkc1NlY3Rpb25SZWNh
bGMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNldE5lZWRzU2VjdGlvblJlY2Fs
Yyk6IFJlbmFtZWQgc2V0TmVlZFNlY3Rpb25SZWNhbGMoKQorICAgICAgICB0byB0aGlzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Omhhc1NlY3Rpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlOjpyZWNhbGNTZWN0aW9uc0lmTmVlZGVkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q2VsbDo6UmVuZGVyVGFibGVDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2Vs
bDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUZy
b21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c3R5bGVPckNv
bFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUFic29s
dXRlUmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjphYnNv
bHV0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6YmFzZWxp
bmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnNldFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGFwc2VkQm9y
ZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyOjpDb2xsYXBzZWRC
b3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyczo6Q29sbGFwc2VkQm9y
ZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb2xsYXBzZWRCb3JkZXJzOjphZGRCb3JkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyczo6bmV4dEJvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludEJveERlY29yYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6ZHVtcCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVDZWxsOjpjb2xTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2V0
Q29sU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnJvd1NwYW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpzZXRSb3dTcGFuKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlQ2VsbDo6c2V0Q29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6
cm93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2V0Um93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2VjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q2VsbDo6eVBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnNldENlbGxU
b3BFeHRyYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnNldENlbGxCb3R0
b21FeHRyYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlclRvcEV4
dHJhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQm90dG9tRXh0
cmEpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZVJvdzo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6
OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93OjpsYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OmdldEFic29sdXRlUmVwYWludFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OnBhaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Um93OjpzZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93Ojp0YWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6bGluZUhlaWdodCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OlJlbmRlclRhYmxlU2VjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZVNlY3Rpb246OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNl
Y3Rpb246OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6
ZW5zdXJlUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENl
bGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzZXRDZWxsV2lkdGhz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jvd0hlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpsb3dlc3RQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnJpZ2h0bW9zdFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGVmdG1vc3RQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclRvcCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckJv
dHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJv
cmRlckxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0
ZXJCb3JkZXJSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVjYWxjQ2VsbHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjbGVhckdyaWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6YXBwZW5kQ29sdW1uKTogQWRkZWQuIE1vdmVk
IGNvZGUgZnJvbQorICAgICAgICBSZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1uKCkgaW50byBoZXJl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbik6IEFk
ZGVkLiBNb3ZlZCBjb2RlIGZyb20KKyAgICAgICAgUmVuZGVyVGFibGU6OnNwbGl0Q29sdW1uKCkg
aW50byBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpyZW1vdmVD
aGlsZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpkdW1wKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjppc1RhYmxlU2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OmxpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjp0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rp
b246OmNlbGxBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om51bVJv
d3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpuZWVkc0NlbGxSZWNh
bGMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzZXROZWVkc0NlbGxS
ZWNhbGMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpnZXRCYXNlbGlu
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1RhYmxlTGF5b3V0Lmg6CisKIDIwMDctMDEtMDIgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNaXR6LgpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiAxODUxNykK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0MSwxNiArMjQxLDEzIEBAIHN0YXRpYyBib29sIHNob3VsZFNjYWxlQ29sdW1ucyhSZW5k
ZXJUYWIKICAgICByZXR1cm4gc2NhbGU7CiB9CiAKLXZvaWQgQXV0b1RhYmxlTGF5b3V0OjpjYWxj
TWluTWF4V2lkdGgoKQordm9pZCBBdXRvVGFibGVMYXlvdXQ6OmNhbGNNaW5NYXhXaWR0aChpbnQm
IG1pbldpZHRoLCBpbnQmIG1heFdpZHRoKQogewotI2lmZGVmIERFQlVHX0xBWU9VVAotICAgIHFE
ZWJ1ZygiQXV0b1RhYmxlTGF5b3V0OjpjYWxjTWluTWF4V2lkdGgiKTsKLSNlbmRpZgogICAgIGZ1
bGxSZWNhbGMoKTsKIAogICAgIGludCBzcGFuTWF4V2lkdGggPSBjYWxjRWZmZWN0aXZlV2lkdGgo
KTsKLSAgICBpbnQgbWluV2lkdGggPSAwOwotICAgIGludCBtYXhXaWR0aCA9IDA7CisgICAgbWlu
V2lkdGggPSAwOworICAgIG1heFdpZHRoID0gMDsKICAgICBpbnQgbWF4UGVyY2VudCA9IDA7CiAg
ICAgaW50IG1heE5vblBlcmNlbnQgPSAwOwogCkBAIC0yODUsMTIgKzI4Miw2IEBAIHZvaWQgQXV0
b1RhYmxlTGF5b3V0OjpjYWxjTWluTWF4V2lkdGgoKQogICAgICAgICBtaW5XaWR0aCA9IG1heCht
aW5XaWR0aCwgdHcudmFsdWUoKSk7CiAgICAgICAgIG1heFdpZHRoID0gbWluV2lkdGg7CiAgICAg
fQotCi0gICAgbV90YWJsZS0+bV9tYXhXaWR0aCA9IG1heFdpZHRoOwotICAgIG1fdGFibGUtPm1f
bWluV2lkdGggPSBtaW5XaWR0aDsKLSNpZmRlZiBERUJVR19MQVlPVVQKLSAgICBxRGVidWcoIiAg
ICBtaW5XaWR0aD0lZCwgbWF4V2lkdGg9JWQiLCBtX3RhYmxlLT5tX21pbldpZHRoLCBtX3RhYmxl
LT5tX21heFdpZHRoKTsKLSNlbmRpZgogfQogCiAvKgpAQCAtODI0LDEwICs4MTUsMTAgQEAgdm9p
ZCBBdXRvVGFibGVMYXlvdXQ6OmxheW91dCgpCiAjaWZkZWYgREVCVUdfTEFZT1VUCiAgICAgICAg
IHFEZWJ1ZygiY29sICVkOiAlZCAod2lkdGggJWQpIiwgaSwgcG9zLCBtX2xheW91dFN0cnVjdFtp
XS5jYWxjV2lkdGgpOwogI2VuZGlmCi0gICAgICAgIG1fdGFibGUtPmNvbHVtblBvc1tpXSA9IHBv
czsKKyAgICAgICAgbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKClbaV0gPSBwb3M7CiAgICAgICAg
IHBvcyArPSBtX2xheW91dFN0cnVjdFtpXS5jYWxjV2lkdGggKyBtX3RhYmxlLT5oQm9yZGVyU3Bh
Y2luZygpOwogICAgIH0KLSAgICBtX3RhYmxlLT5jb2x1bW5Qb3NbbV90YWJsZS0+Y29sdW1uUG9z
LnNpemUoKS0xXSA9IHBvczsKKyAgICBtX3RhYmxlLT5jb2x1bW5Qb3NpdGlvbnMoKVttX3RhYmxl
LT5jb2x1bW5Qb3NpdGlvbnMoKS5zaXplKCktMV0gPSBwb3M7CiB9CiAKIApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHJldmlzaW9uIDE4NTE3KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAg
cHVibGljOgogICAgIEF1dG9UYWJsZUxheW91dChSZW5kZXJUYWJsZSopOwogICAgIH5BdXRvVGFi
bGVMYXlvdXQoKTsKIAotICAgIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7Ci0gICAgdm9pZCBsYXlv
dXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKGludCYgbWluV2lkdGgsIGlu
dCYgbWF4V2lkdGgpOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogcHJvdGVjdGVkOgog
ICAgIHZvaWQgZnVsbFJlY2FsYygpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJs
ZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxh
eW91dC5jcHAJKHJldmlzaW9uIDE4NTE3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvRml4ZWRUYWJs
ZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwxMSArMTY1LDExIEBAIGludCBGaXhl
ZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICBxRGVidWcoIiAgICBmaXJzdCBy
b3c6Iik7CiAjZW5kaWYKICAgICAvLyBpdGVyYXRlIG92ZXIgdGhlIGZpcnN0IHJvdyBpbiBjYXNl
IHNvbWUgYXJlIHVuc3BlY2lmaWVkLgotICAgIFJlbmRlclRhYmxlU2VjdGlvbiAqc2VjdGlvbiA9
IG1fdGFibGUtPmhlYWQ7CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gbV90YWJs
ZS0+aGVhZGVyKCk7CiAgICAgaWYgKCFzZWN0aW9uKQotICAgICAgICBzZWN0aW9uID0gbV90YWJs
ZS0+Zmlyc3RCb2R5OworICAgICAgICBzZWN0aW9uID0gbV90YWJsZS0+Zmlyc3RCb2R5KCk7CiAg
ICAgaWYgKCFzZWN0aW9uKQotICAgICAgICBzZWN0aW9uID0gbV90YWJsZS0+Zm9vdDsKKyAgICAg
ICAgc2VjdGlvbiA9IG1fdGFibGUtPmZvb3RlcigpOwogICAgIGlmIChzZWN0aW9uKSB7CiAgICAg
ICAgIGNDb2wgPSAwOwogICAgICAgICAvLyBGSVhNRTogVGVjaG5pY2FsbHkgdGhlIGZpcnN0IHJv
dyBjb3VsZCBiZSBpbiBhbiBhcmJpdHJhcnkgc2VjdGlvbiAoZS5nLiwgYW4gbnRoIHNlY3Rpb24K
QEAgLTIyMSw3ICsyMjEsNyBAQCBpbnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXko
aW50CiAKIH0KIAotdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjTWluTWF4V2lkdGgoKQordm9p
ZCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjTWluTWF4V2lkdGgoaW50JiBtaW5XaWR0aCwgaW50JiBt
YXhXaWR0aCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBlbnRpcmUgY2FsY3VsYXRpb24gaXMgaW5j
b3JyZWN0IGZvciBib3RoIG1pbndpZHRoIGFuZCBtYXh3aWR0aC4KICAgICAKQEAgLTIzNyw4ICsy
MzcsOCBAQCB2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNNaW5NYXhXaWR0aCgpCiAgICAgaW50
IHRhYmxlV2lkdGggPSBtX3RhYmxlLT5zdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSA/IG1fdGFi
bGUtPnN0eWxlKCktPndpZHRoKCkudmFsdWUoKSAtIGJzIDogMDsKICAgICBpbnQgbXcgPSBjYWxj
V2lkdGhBcnJheSh0YWJsZVdpZHRoKSArIGJzOwogCi0gICAgbV90YWJsZS0+bV9taW5XaWR0aCA9
IG1heChtdywgdGFibGVXaWR0aCk7Ci0gICAgbV90YWJsZS0+bV9tYXhXaWR0aCA9IG1fdGFibGUt
Pm1fbWluV2lkdGg7CisgICAgbWluV2lkdGggPSBtYXgobXcsIHRhYmxlV2lkdGgpOworICAgIG1h
eFdpZHRoID0gbWluV2lkdGg7CiB9CiAKIHZvaWQgRml4ZWRUYWJsZUxheW91dDo6bGF5b3V0KCkK
QEAgLTMyOCwxMCArMzI4LDEwIEBAIHZvaWQgRml4ZWRUYWJsZUxheW91dDo6bGF5b3V0KCkKICNp
ZmRlZiBERUJVR19MQVlPVVQKICAgICAgICAgcURlYnVnKCJjb2wgJWQ6ICVkIChtX3dpZHRoICVk
KSIsIGksIHBvcywgY2FsY1dpZHRoW2ldKTsKICNlbmRpZgotICAgICAgICBtX3RhYmxlLT5jb2x1
bW5Qb3NbaV0gPSBwb3M7CisgICAgICAgIG1fdGFibGUtPmNvbHVtblBvc2l0aW9ucygpW2ldID0g
cG9zOwogICAgICAgICBwb3MgKz0gY2FsY1dpZHRoW2ldICsgaHNwYWNpbmc7CiAgICAgfQotICAg
IG1fdGFibGUtPmNvbHVtblBvc1ttX3RhYmxlLT5jb2x1bW5Qb3Muc2l6ZSgpLTFdID0gcG9zOwor
ICAgIG1fdGFibGUtPmNvbHVtblBvc2l0aW9ucygpW21fdGFibGUtPmNvbHVtblBvc2l0aW9ucygp
LnNpemUoKS0xXSA9IHBvczsKIH0KIAogI3VuZGVmIERFQlVHX0xBWU9VVApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkocmV2aXNpb24gMTg1MTcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDgg
QEAgcHVibGljOgogICAgIEZpeGVkVGFibGVMYXlvdXQoUmVuZGVyVGFibGUqKTsKICAgICB+Rml4
ZWRUYWJsZUxheW91dCgpOwogCi0gICAgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKLSAgICB2b2lk
IGxheW91dCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoaW50JiBtaW5XaWR0
aCwgaW50JiBtYXhXaWR0aCk7CisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcm90ZWN0
ZWQ6CiAgICAgaW50IGNhbGNXaWR0aEFycmF5KGludCB0YWJsZVdpZHRoKTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDE4NTE3KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMCArMzMsMTAgQEAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZpeGVkVGFibGVMYXlvdXQuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZVNlY3Rpb24uaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKQEAgLTQ2LDU1ICs0Niw1MiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCiBSZW5kZXJUYWJsZTo6UmVuZGVyVGFibGUoTm9kZSogbm9kZSkKICAgICA6IFJlbmRl
ckJsb2NrKG5vZGUpCi17Ci0gICAgdENhcHRpb24gPSAwOwotICAgIGhlYWQgPSBmb290ID0gZmly
c3RCb2R5ID0gMDsKLSAgICB0YWJsZUxheW91dCA9IDA7Ci0gICAgbV9jdXJyZW50Qm9yZGVyID0g
MDsKLSAgICAKLSAgICBydWxlcyA9IE5vbmU7Ci0gICAgZnJhbWUgPSBWb2lkOwotICAgIGhhc19j
b2xfZWxlbXMgPSBmYWxzZTsKLSAgICBoc3BhY2luZyA9IDA7Ci0gICAgdnNwYWNpbmcgPSAwOwot
ICAgIHBhZGRpbmcgPSAwOwotICAgIG5lZWRTZWN0aW9uUmVjYWxjID0gZmFsc2U7Ci0gICAgcGFk
ZGluZyA9IDA7Ci0gICAgbV9ib3JkZXJMZWZ0ID0gMDsKLSAgICBtX2JvcmRlclJpZ2h0ID0gMDsK
LQotICAgIGNvbHVtblBvcy5yZXNpemUoMik7Ci0gICAgY29sdW1uUG9zLmZpbGwoMCk7Ci0gICAg
Y29sdW1ucy5yZXNpemUoMSk7Ci0gICAgY29sdW1ucy5maWxsKENvbHVtblN0cnVjdCgpKTsKLQot
ICAgIGNvbHVtblBvc1swXSA9IDA7CisgICAgLCBtX2NhcHRpb24oMCkKKyAgICAsIG1faGVhZCgw
KQorICAgICwgbV9mb290KDApCisgICAgLCBtX2ZpcnN0Qm9keSgwKQorICAgICwgbV90YWJsZUxh
eW91dCgwKQorICAgICwgbV9jdXJyZW50Qm9yZGVyKDApCisgICAgLCBtX2ZyYW1lKFZvaWQpCisg
ICAgLCBtX3J1bGVzKE5vbmUpCisgICAgLCBtX2hhc0NvbEVsZW1lbnRzKGZhbHNlKQorICAgICwg
bV9wYWRkaW5nKDApCisgICAgLCBtX25lZWRzU2VjdGlvblJlY2FsYygwKQorICAgICwgbV9oU3Bh
Y2luZygwKQorICAgICwgbV92U3BhY2luZygwKQorICAgICwgbV9ib3JkZXJMZWZ0KDApCisgICAg
LCBtX2JvcmRlclJpZ2h0KDApCit7CisgICAgbV9jb2x1bW5Qb3MucmVzaXplKDIpOworICAgIG1f
Y29sdW1uUG9zLmZpbGwoMCk7CisgICAgbV9jb2x1bW5zLnJlc2l6ZSgxKTsKKyAgICBtX2NvbHVt
bnMuZmlsbChDb2x1bW5TdHJ1Y3QoKSk7CiB9CiAKIFJlbmRlclRhYmxlOjp+UmVuZGVyVGFibGUo
KQogewotICAgIGRlbGV0ZSB0YWJsZUxheW91dDsKKyAgICBkZWxldGUgbV90YWJsZUxheW91dDsK
IH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgKl9zdHlsZSkKK3Zv
aWQgUmVuZGVyVGFibGU6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKICAgICBF
VGFibGVMYXlvdXQgb2xkVGFibGVMYXlvdXQgPSBzdHlsZSgpID8gc3R5bGUoKS0+dGFibGVMYXlv
dXQoKSA6IFRBVVRPOwotICAgIFJlbmRlckJsb2NrOjpzZXRTdHlsZShfc3R5bGUpOworICAgIFJl
bmRlckJsb2NrOjpzZXRTdHlsZShuZXdTdHlsZSk7CiAKICAgICAvLyBJbiB0aGUgY29sbGFwc2Vk
IGJvcmRlciBtb2RlbCwgdGhlcmUgaXMgbm8gY2VsbCBzcGFjaW5nLgotICAgIGhzcGFjaW5nID0g
Y29sbGFwc2VCb3JkZXJzKCkgPyAwIDogc3R5bGUoKS0+aG9yaXpvbnRhbEJvcmRlclNwYWNpbmco
KTsKLSAgICB2c3BhY2luZyA9IGNvbGxhcHNlQm9yZGVycygpID8gMCA6IHN0eWxlKCktPnZlcnRp
Y2FsQm9yZGVyU3BhY2luZygpOwotICAgIGNvbHVtblBvc1swXSA9IGhzcGFjaW5nOworICAgIG1f
aFNwYWNpbmcgPSBjb2xsYXBzZUJvcmRlcnMoKSA/IDAgOiBzdHlsZSgpLT5ob3Jpem9udGFsQm9y
ZGVyU3BhY2luZygpOworICAgIG1fdlNwYWNpbmcgPSBjb2xsYXBzZUJvcmRlcnMoKSA/IDAgOiBz
dHlsZSgpLT52ZXJ0aWNhbEJvcmRlclNwYWNpbmcoKTsKKyAgICBtX2NvbHVtblBvc1swXSA9IG1f
aFNwYWNpbmc7CiAKLSAgICBpZiAoIXRhYmxlTGF5b3V0IHx8IHN0eWxlKCktPnRhYmxlTGF5b3V0
KCkgIT0gb2xkVGFibGVMYXlvdXQpIHsKLSAgICAgICAgZGVsZXRlIHRhYmxlTGF5b3V0OworICAg
IGlmICghbV90YWJsZUxheW91dCB8fCBzdHlsZSgpLT50YWJsZUxheW91dCgpICE9IG9sZFRhYmxl
TGF5b3V0KSB7CisgICAgICAgIGRlbGV0ZSBtX3RhYmxlTGF5b3V0OwogCiAgICAgICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgQ1NTMiBzcGVjLCB5b3Ugb25seSB1c2UgZml4ZWQgdGFibGUgbGF5b3V0
IGlmIGFuCiAgICAgICAgIC8vIGV4cGxpY2l0IHdpZHRoIGlzIHNwZWNpZmllZCBvbiB0aGUgdGFi
bGUuICBBdXRvIHdpZHRoIGltcGxpZXMgYXV0byB0YWJsZSBsYXlvdXQuCiAgICAgICAgIGlmIChz
dHlsZSgpLT50YWJsZUxheW91dCgpID09IFRGSVhFRCAmJiAhc3R5bGUoKS0+d2lkdGgoKS5pc0F1
dG8oKSkKLSAgICAgICAgICAgIHRhYmxlTGF5b3V0ID0gbmV3IEZpeGVkVGFibGVMYXlvdXQodGhp
cyk7CisgICAgICAgICAgICBtX3RhYmxlTGF5b3V0ID0gbmV3IEZpeGVkVGFibGVMYXlvdXQodGhp
cyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRhYmxlTGF5b3V0ID0gbmV3IEF1dG9UYWJs
ZUxheW91dCh0aGlzKTsKKyAgICAgICAgICAgIG1fdGFibGVMYXlvdXQgPSBuZXcgQXV0b1RhYmxl
TGF5b3V0KHRoaXMpOwogICAgIH0KIH0KIApAQCAtMTA2LDM2ICsxMDMsMzYgQEAgdm9pZCBSZW5k
ZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgIHN3aXRjaCAoY2hpbGQtPnN0eWxl
KCktPmRpc3BsYXkoKSkgewogICAgICAgICBjYXNlIFRBQkxFX0NBUFRJT046CiAgICAgICAgICAg
ICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgICAgICAgICB0Q2FwdGlvbiA9
IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrICo+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICBtX2Nh
cHRpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKTsKICAgICAgICAgICAgIHdy
YXBJbkFub255bW91c1NlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFRBQkxFX0NPTFVNTjoKICAgICAgICAgY2FzZSBUQUJMRV9DT0xVTU5fR1JPVVA6Ci0g
ICAgICAgICAgICBoYXNfY29sX2VsZW1zID0gdHJ1ZTsKKyAgICAgICAgICAgIG1faGFzQ29sRWxl
bWVudHMgPSB0cnVlOwogICAgICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNl
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVEFCTEVfSEVBREVSX0dST1VQOgot
ICAgICAgICAgICAgaWYgKCFoZWFkKSB7CisgICAgICAgICAgICBpZiAoIW1faGVhZCkgewogICAg
ICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKLSAgICAgICAgICAgICAg
ICAgICAgaGVhZCA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGlsZCk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKCFmaXJzdEJvZHkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9oZWFkID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpOworICAgICAg
ICAgICAgfSBlbHNlIGlmICghbV9maXJzdEJvZHkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2hp
bGQtPmlzVGFibGVTZWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0Qm9keSA9IHN0
YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGlsZCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVEFCTEVfRk9PVEVSX0dST1VQ
OgotICAgICAgICAgICAgaWYgKCFmb290KSB7CisgICAgICAgICAgICBpZiAoIW1fZm9vdCkgewog
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKLSAgICAgICAgICAg
ICAgICAgICAgZm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGlsZCk7
CisgICAgICAgICAgICAgICAgICAgIG1fZm9vdCA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2Vj
dGlvbio+KGNoaWxkKTsKICAgICAgICAgICAgICAgICB3cmFwSW5Bbm9ueW1vdXNTZWN0aW9uID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAvLyBmYWxsIHRocm91Z2gKICAgICAgICAgY2FzZSBUQUJMRV9ST1dfR1JPVVA6Ci0gICAgICAg
ICAgICBpZiAoIWZpcnN0Qm9keSkKKyAgICAgICAgICAgIGlmICghbV9maXJzdEJvZHkpCiAgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQotICAgICAgICAgICAgICAg
ICAgICBmaXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4oY2hpbGQp
OworICAgICAgICAgICAgICAgICAgICBtX2ZpcnN0Qm9keSA9IHN0YXRpY19jYXN0PFJlbmRlclRh
YmxlU2VjdGlvbio+KGNoaWxkKTsKICAgICAgICAgICAgIHdyYXBJbkFub255bW91c1NlY3Rpb24g
PSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRBQkxFX0NFTEw6CkBA
IC0xNjMsOCArMTYwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0
KgogICAgICAgICB9CiAKICAgICBpZiAoIXdyYXBJbkFub255bW91c1NlY3Rpb24pIHsKLSAgICAg
ICAgCi0gICAgICAgIC8vIElmIHRoZSBuZXh0IHJlbmRlcmVyIGlzIGFjdHVhbGx5IHdyYXBwZWQg
aW4gYW4gYW5vbnltb3VzIHRhYmxlIHNlY3Rpb24sIHdlIG5lZWQgdG8gZ28gdXAgYW5kIGZpbmQg
dGhhdAorICAgICAgICAvLyBJZiB0aGUgbmV4dCByZW5kZXJlciBpcyBhY3R1YWxseSB3cmFwcGVk
IGluIGFuIGFub255bW91cyB0YWJsZSBzZWN0aW9uLCB3ZSBuZWVkIHRvIGdvIHVwIGFuZCBmaW5k
IHRoYXQuCiAgICAgICAgIHdoaWxlIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzVGFi
bGVTZWN0aW9uKCkgJiYgIWJlZm9yZUNoaWxkLT5pc1RhYmxlQ29sKCkpCiAgICAgICAgICAgICBi
ZWZvcmVDaGlsZCA9IGJlZm9yZUNoaWxkLT5wYXJlbnQoKTsKIApAQCAtMTc3LDEwICsxNzMsOSBA
QCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QqCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZW5kZXJPYmplY3QgKmxhc3RCb3ggPSBiZWZvcmVDaGlsZDsKLSAg
ICBSZW5kZXJPYmplY3QgKm5leHRUb0xhc3RCb3ggPSBiZWZvcmVDaGlsZDsKLSAgICB3aGlsZSAo
bGFzdEJveCAmJiBsYXN0Qm94LT5wYXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAmJgotICAgICAgICAg
ICAgIWxhc3RCb3gtPmlzVGFibGVTZWN0aW9uKCkgJiYgbGFzdEJveC0+c3R5bGUoKS0+ZGlzcGxh
eSgpICE9IFRBQkxFX0NBUFRJT04pIHsKKyAgICBSZW5kZXJPYmplY3QqIGxhc3RCb3ggPSBiZWZv
cmVDaGlsZDsKKyAgICBSZW5kZXJPYmplY3QqIG5leHRUb0xhc3RCb3ggPSBiZWZvcmVDaGlsZDsK
KyAgICB3aGlsZSAobGFzdEJveCAmJiBsYXN0Qm94LT5wYXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAm
JiAhbGFzdEJveC0+aXNUYWJsZVNlY3Rpb24oKSAmJiBsYXN0Qm94LT5zdHlsZSgpLT5kaXNwbGF5
KCkgIT0gVEFCTEVfQ0FQVElPTikgewogICAgICAgICBuZXh0VG9MYXN0Qm94ID0gbGFzdEJveDsK
ICAgICAgICAgbGFzdEJveCA9IGxhc3RCb3gtPnBhcmVudCgpOwogICAgIH0KQEAgLTIwNSw3ICsy
MDAsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpjYWxjV2lkdGgoKQogICAgIGlmIChpc1Bvc2l0aW9u
ZWQoKSkKICAgICAgICAgY2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpOwogCi0gICAgUmVuZGVyQmxv
Y2sgKmNiID0gY29udGFpbmluZ0Jsb2NrKCk7CisgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFp
bmluZ0Jsb2NrKCk7CiAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gY2ItPmNvbnRlbnRXaWR0aCgp
OwogCiAgICAgTGVuZ3RoVHlwZSB3aWR0aFR5cGUgPSBzdHlsZSgpLT53aWR0aCgpLnR5cGUoKTsK
QEAgLTIzOCw1MyArMjMzLDU1IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNhbGNXaWR0aCgpCiAgICAg
Ly8gRmluYWxseSwgd2l0aCBvdXIgdHJ1ZSB3aWR0aCBkZXRlcm1pbmVkLCBjb21wdXRlIG91ciBt
YXJnaW5zIGZvciByZWFsLgogICAgIG1fbWFyZ2luUmlnaHQgPSAwOwogICAgIG1fbWFyZ2luTGVm
dCA9IDA7Ci0gICAgY2FsY0hvcml6b250YWxNYXJnaW5zKHN0eWxlKCktPm1hcmdpbkxlZnQoKSxz
dHlsZSgpLT5tYXJnaW5SaWdodCgpLGF2YWlsYWJsZVdpZHRoKTsKKyAgICBjYWxjSG9yaXpvbnRh
bE1hcmdpbnMoc3R5bGUoKS0+bWFyZ2luTGVmdCgpLCBzdHlsZSgpLT5tYXJnaW5SaWdodCgpLCBh
dmFpbGFibGVXaWR0aCk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiB7CiAgICAg
QVNTRVJUKG5lZWRzTGF5b3V0KCkpOwogICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKLSAgICBB
U1NFUlQoIW5lZWRTZWN0aW9uUmVjYWxjKTsKKyAgICBBU1NFUlQoIW1fbmVlZHNTZWN0aW9uUmVj
YWxjKTsKIAogICAgIGlmIChwb3NDaGlsZE5lZWRzTGF5b3V0KCkgJiYgIW5vcm1hbENoaWxkTmVl
ZHNMYXlvdXQoKSAmJiAhc2VsZk5lZWRzTGF5b3V0KCkpIHsKLSAgICAgICAgLy8gQWxsIHdlIGhh
dmUgdG8gaXMgbGF5IG91dCBvdXIgcG9zaXRpb25lZCBvYmplY3RzLgorICAgICAgICAvLyBBbGwg
d2UgaGF2ZSB0byBkbyBpcyBsYXkgb3V0IG91ciBwb3NpdGlvbmVkIG9iamVjdHMuCiAgICAgICAg
IGxheW91dFBvc2l0aW9uZWRPYmplY3RzKGZhbHNlKTsKICAgICAgICAgc2V0TmVlZHNMYXlvdXQo
ZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSW50UmVjdCBvbGRCb3VuZHMs
IG9sZEZ1bGxCb3VuZHM7CisgICAgSW50UmVjdCBvbGRCb3VuZHM7CisgICAgSW50UmVjdCBvbGRG
dWxsQm91bmRzOwogICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCk7CiAgICAgaWYgKGNoZWNrRm9yUmVwYWludCkKICAgICAgICAgZ2V0QWJzb2x1
dGVSZXBhaW50UmVjdEluY2x1ZGluZ0Zsb2F0cyhvbGRCb3VuZHMsIG9sZEZ1bGxCb3VuZHMpOwog
ICAgIAotICAgIG1faGVpZ2h0ID0gbV9vdmVyZmxvd0hlaWdodCA9IDA7CisgICAgbV9oZWlnaHQg
PSAwOworICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSAwOwogICAgIGluaXRNYXhNYXJnaW5WYWx1ZXMo
KTsKICAgICAKICAgICAvL2ludCBvbGRXaWR0aCA9IG1fd2lkdGg7CiAgICAgY2FsY1dpZHRoKCk7
CiAKLSAgICAvLyB0aGUgb3B0aW1pc2F0aW9uIGJlbG93IGRvZXNuJ3Qgd29yayBzaW5jZSB0aGUg
aW50ZXJuYWwgdGFibGUKKyAgICAvLyBGSVhNRTogVGhlIG9wdGltaXNhdGlvbiBiZWxvdyBkb2Vz
bid0IHdvcmsgc2luY2UgdGhlIGludGVybmFsIHRhYmxlCiAgICAgLy8gbGF5b3V0IGNvdWxkIGhh
dmUgY2hhbmdlZC4gIHdlIG5lZWQgdG8gYWRkIGEgZmxhZyB0byB0aGUgdGFibGUKICAgICAvLyBs
YXlvdXQgdGhhdCB0ZWxscyB1cyBpZiBzb21ldGhpbmcgaGFzIGNoYW5nZWQgaW4gdGhlIG1pbiBt
YXgKICAgICAvLyBjYWxjdWxhdGlvbnMgdG8gZG8gaXQgY29ycmVjdGx5LgogLy8gICAgIGlmICgg
b2xkV2lkdGggIT0gbV93aWR0aCB8fCBjb2x1bW5zLnNpemUoKSArIDEgIT0gY29sdW1uUG9zLnNp
emUoKSApCi0gICAgdGFibGVMYXlvdXQtPmxheW91dCgpOworICAgIG1fdGFibGVMYXlvdXQtPmxh
eW91dCgpOwogCiAgICAgc2V0Q2VsbFdpZHRocygpOwogCiAgICAgLy8gbGF5b3V0IGNoaWxkIG9i
amVjdHMKICAgICBpbnQgY2FsY3VsYXRlZEhlaWdodCA9IDA7CiAKLSAgICBSZW5kZXJPYmplY3Qg
KmNoaWxkID0gZmlyc3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENo
aWxkKCk7CiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0
IGEgZm9ybSB0aGF0IGhhcyBhIGRpc3BsYXkgdmFsdWUgdGhhdCBtYWtlcyBpdCBhIHRhYmxlIHNl
Y3Rpb24/CiAgICAgICAgIGlmIChjaGlsZC0+bmVlZHNMYXlvdXQoKSAmJiAhKGNoaWxkLT5lbGVt
ZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShmb3JtVGFnKSkpCiAgICAgICAg
ICAgICBjaGlsZC0+bGF5b3V0KCk7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24o
KSkgewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+KGNoaWxk
KS0+Y2FsY1Jvd0hlaWdodCgpOwotICAgICAgICAgICAgY2FsY3VsYXRlZEhlaWdodCArPSBzdGF0
aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4oY2hpbGQpLT5sYXlvdXRSb3dzKDApOworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpLT5jYWxjUm93
SGVpZ2h0KCk7CisgICAgICAgICAgICBjYWxjdWxhdGVkSGVpZ2h0ICs9IHN0YXRpY19jYXN0PFJl
bmRlclRhYmxlU2VjdGlvbio+KGNoaWxkKS0+bGF5b3V0Um93cygwKTsKICAgICAgICAgfQogICAg
ICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgIH0KQEAgLTI5MiwxMCArMjg5
LDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgbV9vdmVyZmxvd1dpZHRoID0g
bV93aWR0aCArIChjb2xsYXBzZUJvcmRlcnMoKSA/IG91dGVyQm9yZGVyUmlnaHQoKSAtIGJvcmRl
clJpZ2h0KCkgOiAwKTsKICAgICBtX292ZXJmbG93TGVmdCA9IGNvbGxhcHNlQm9yZGVycygpID8g
Ym9yZGVyTGVmdCgpIC0gb3V0ZXJCb3JkZXJMZWZ0KCkgOiAwOwogCi0gICAgLy8gIyMjIGNvbGxh
cHNlIGNhcHRpb24gbWFyZ2luCi0gICAgaWYgKHRDYXB0aW9uICYmIHRDYXB0aW9uLT5zdHlsZSgp
LT5jYXB0aW9uU2lkZSgpICE9IENBUEJPVFRPTSkgewotICAgICAgICB0Q2FwdGlvbi0+c2V0UG9z
KHRDYXB0aW9uLT5tYXJnaW5MZWZ0KCksIG1faGVpZ2h0KTsKLSAgICAgICAgbV9oZWlnaHQgKz0g
dENhcHRpb24tPmhlaWdodCgpICsgdENhcHRpb24tPm1hcmdpblRvcCgpICsgdENhcHRpb24tPm1h
cmdpbkJvdHRvbSgpOworICAgIC8vIEZJWE1FOiBDb2xsYXBzZSBjYXB0aW9uIG1hcmdpbi4KKyAg
ICBpZiAobV9jYXB0aW9uICYmIG1fY2FwdGlvbi0+c3R5bGUoKS0+Y2FwdGlvblNpZGUoKSAhPSBD
QVBCT1RUT00pIHsKKyAgICAgICAgbV9jYXB0aW9uLT5zZXRQb3MobV9jYXB0aW9uLT5tYXJnaW5M
ZWZ0KCksIG1faGVpZ2h0KTsKKyAgICAgICAgbV9oZWlnaHQgKz0gbV9jYXB0aW9uLT5oZWlnaHQo
KSArIG1fY2FwdGlvbi0+bWFyZ2luVG9wKCkgKyBtX2NhcHRpb24tPm1hcmdpbkJvdHRvbSgpOwog
ICAgIH0KIAogICAgIGludCBicFRvcCA9IGJvcmRlclRvcCgpICsgKGNvbGxhcHNlQm9yZGVycygp
ID8gMCA6IHBhZGRpbmdUb3AoKSk7CkBAIC0zMjEsMTEgKzMxOCwxMSBAQCB2b2lkIFJlbmRlclRh
YmxlOjpsYXlvdXQoKQogICAgIGlmICh0aCA+IGNhbGN1bGF0ZWRIZWlnaHQpIHsKICAgICAgICAg
Ly8gd2UgaGF2ZSB0byByZWRpc3RyaWJ1dGUgdGhhdCBoZWlnaHQgdG8gZ2V0IHRoZSBjb25zdHJh
aW50IGNvcnJlY3RseQogICAgICAgICAvLyBqdXN0IGZvcmNlIHRoZSBmaXJzdCBib2R5IHRvIHRo
ZSBoZWlnaHQgbmVlZGVkCi0gICAgICAgIC8vICMjIyBGSVhNRSBUaGlzIHNob3VsZCB0YWtlIGhl
aWdodCBjb25zdHJhaW50cyBvbiBhbGwgdGFibGUgc2VjdGlvbnMgaW50byBhY2NvdW50IGFuZCBk
aXN0cmlidXRlCi0gICAgICAgIC8vIGFjY29yZGluZ2x5LiBGb3Igbm93IHRoaXMgc2hvdWxkIGJl
IGdvb2QgZW5vdWdoCi0gICAgICAgIGlmIChmaXJzdEJvZHkpIHsKLSAgICAgICAgICAgIGZpcnN0
Qm9keS0+Y2FsY1Jvd0hlaWdodCgpOwotICAgICAgICAgICAgZmlyc3RCb2R5LT5sYXlvdXRSb3dz
KHRoIC0gY2FsY3VsYXRlZEhlaWdodCk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB0
YWtlIGhlaWdodCBjb25zdHJhaW50cyBvbiBhbGwgdGFibGUgc2VjdGlvbnMgaW50byBhY2NvdW50
IGFuZCBkaXN0cmlidXRlCisgICAgICAgIC8vIGFjY29yZGluZ2x5LiBGb3Igbm93IHRoaXMgc2hv
dWxkIGJlIGdvb2QgZW5vdWdoLgorICAgICAgICBpZiAobV9maXJzdEJvZHkpIHsKKyAgICAgICAg
ICAgIG1fZmlyc3RCb2R5LT5jYWxjUm93SGVpZ2h0KCk7CisgICAgICAgICAgICBtX2ZpcnN0Qm9k
eS0+bGF5b3V0Um93cyh0aCAtIGNhbGN1bGF0ZWRIZWlnaHQpOwogICAgICAgICB9IGVsc2UgaWYg
KCFzdHlsZSgpLT5odG1sSGFja3MoKSkKICAgICAgICAgICAgIC8vIENvbXBsZXRlbHkgZW1wdHkg
dGFibGVzICh3aXRoIG5vIHNlY3Rpb25zIG9yIGFueXRoaW5nKSBzaG91bGQgYXQgbGVhc3QgaG9u
b3Igc3BlY2lmaWVkIGhlaWdodAogICAgICAgICAgICAgLy8gaW4gc3RyaWN0IG1vZGUuCkBAIC0z
MzcsMzMgKzMzNCwzMyBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogICAgICAgICBibCAr
PSBwYWRkaW5nTGVmdCgpOwogCiAgICAgLy8gcG9zaXRpb24gdGhlIHRhYmxlIHNlY3Rpb25zCi0g
ICAgaWYgKGhlYWQpIHsKLSAgICAgICAgaGVhZC0+c2V0UG9zKGJsLCBtX2hlaWdodCk7Ci0gICAg
ICAgIG1faGVpZ2h0ICs9IGhlYWQtPmhlaWdodCgpOworICAgIGlmIChtX2hlYWQpIHsKKyAgICAg
ICAgbV9oZWFkLT5zZXRQb3MoYmwsIG1faGVpZ2h0KTsKKyAgICAgICAgbV9oZWlnaHQgKz0gbV9o
ZWFkLT5oZWlnaHQoKTsKICAgICB9Ci0gICAgZm9yIChSZW5kZXJPYmplY3QgKmJvZHkgPSBmaXJz
dEJvZHk7IGJvZHk7IGJvZHkgPSBib2R5LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChi
b2R5ICE9IGhlYWQgJiYgYm9keSAhPSBmb290ICYmIGJvZHktPmlzVGFibGVTZWN0aW9uKCkpIHsK
KyAgICBmb3IgKFJlbmRlck9iamVjdCogYm9keSA9IG1fZmlyc3RCb2R5OyBib2R5OyBib2R5ID0g
Ym9keS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoYm9keSAhPSBtX2hlYWQgJiYgYm9k
eSAhPSBtX2Zvb3QgJiYgYm9keS0+aXNUYWJsZVNlY3Rpb24oKSkgewogICAgICAgICAgICAgYm9k
eS0+c2V0UG9zKGJsLCBtX2hlaWdodCk7CiAgICAgICAgICAgICBtX2hlaWdodCArPSBib2R5LT5o
ZWlnaHQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoZm9vdCkgewotICAgICAgICBmb290
LT5zZXRQb3MoYmwsIG1faGVpZ2h0KTsKLSAgICAgICAgbV9oZWlnaHQgKz0gZm9vdC0+aGVpZ2h0
KCk7CisgICAgaWYgKG1fZm9vdCkgeworICAgICAgICBtX2Zvb3QtPnNldFBvcyhibCwgbV9oZWln
aHQpOworICAgICAgICBtX2hlaWdodCArPSBtX2Zvb3QtPmhlaWdodCgpOwogICAgIH0KIAogICAg
IG1faGVpZ2h0ICs9IGJwQm90dG9tOwogICAgICAgICAgICAgICAgCi0gICAgaWYgKHRDYXB0aW9u
ICYmIHRDYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9uU2lkZSgpPT1DQVBCT1RUT00pIHsKLSAgICAg
ICAgdENhcHRpb24tPnNldFBvcyh0Q2FwdGlvbi0+bWFyZ2luTGVmdCgpLCBtX2hlaWdodCk7Ci0g
ICAgICAgIG1faGVpZ2h0ICs9IHRDYXB0aW9uLT5oZWlnaHQoKSArIHRDYXB0aW9uLT5tYXJnaW5U
b3AoKSArIHRDYXB0aW9uLT5tYXJnaW5Cb3R0b20oKTsKKyAgICBpZiAobV9jYXB0aW9uICYmIG1f
Y2FwdGlvbi0+c3R5bGUoKS0+Y2FwdGlvblNpZGUoKT09Q0FQQk9UVE9NKSB7CisgICAgICAgIG1f
Y2FwdGlvbi0+c2V0UG9zKG1fY2FwdGlvbi0+bWFyZ2luTGVmdCgpLCBtX2hlaWdodCk7CisgICAg
ICAgIG1faGVpZ2h0ICs9IG1fY2FwdGlvbi0+aGVpZ2h0KCkgKyBtX2NhcHRpb24tPm1hcmdpblRv
cCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Cb3R0b20oKTsKICAgICB9CiAKICAgICBpZiAoaXNQb3Np
dGlvbmVkKCkpCiAgICAgICAgIGNhbGNIZWlnaHQoKTsKIAogICAgIC8vIHRhYmxlIGNhbiBiZSBj
b250YWluaW5nIGJsb2NrIG9mIHBvc2l0aW9uZWQgZWxlbWVudHMuCi0gICAgLy8gIyMjIG9ubHkg
cGFzcyB0cnVlIGlmIHdpZHRoIG9yIGhlaWdodCBjaGFuZ2VkLgorICAgIC8vIEZJWE1FOiBPbmx5
IHBhc3MgdHJ1ZSBpZiB3aWR0aCBvciBoZWlnaHQgY2hhbmdlZC4KICAgICBsYXlvdXRQb3NpdGlv
bmVkT2JqZWN0cyh0cnVlKTsKIAogICAgIC8vIFJlcGFpbnQgd2l0aCBvdXIgbmV3IGJvdW5kcyBp
ZiB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBvdXIgb2xkIGJvdW5kcy4KQEAgLTM3NSw5ICszNzIs
MTAgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKIAogdm9pZCBSZW5kZXJUYWJsZTo6c2V0
Q2VsbFdpZHRocygpCiB7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgaWYgKCBj
aGlsZC0+aXNUYWJsZVNlY3Rpb24oKSApCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJU
YWJsZVNlY3Rpb24gKj4oY2hpbGQpLT5zZXRDZWxsV2lkdGhzKCk7CisgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGlsZCktPnNldENlbGxXaWR0
aHMoKTsKKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSkKQEAgLTM5Myw4ICszOTEsNyBAQCB2b2lkIFJlbmRlclRh
YmxlOjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgaWYgKHR4ID49IHBhaW50SW5mby5yZWN0
LnJpZ2h0KCkgKyBvcyB8fCB0eCArIHdpZHRoKCkgPD0gcGFpbnRJbmZvLnJlY3QueCgpIC0gb3Mp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICgocGFpbnRQaGFzZSA9PSBQYWludFBoYXNlQmxv
Y2tCYWNrZ3JvdW5kIHx8IHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3Jv
dW5kKQotICAgICAgICAmJiBzaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcigpICYmIHN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQorICAgIGlmICgocGFpbnRQaGFzZSA9PSBQYWlu
dFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxv
Y2tCYWNrZ3JvdW5kKSAmJiBzaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcigpICYmIHN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQogICAgICAgICBwYWludEJveERlY29yYXRpb25z
KHBhaW50SW5mbywgdHgsIHR5KTsKIAogICAgIC8vIFdlJ3JlIGRvbmUuICBXZSBkb24ndCBib3Ro
ZXIgcGFpbnRpbmcgYW55IGNoaWxkcmVuLgpAQCAtNDA5LDcgKzQwNiw3IEBAIHZvaWQgUmVuZGVy
VGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICBpbmZvLnBhaW50aW5nUm9vdCA9IHBh
aW50aW5nUm9vdEZvckNoaWxkcmVuKHBhaW50SW5mbyk7CiAKICAgICBmb3IgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgIGlmICghY2hpbGQtPmxheWVyKCkgJiYgKGNoaWxkLT5pc1RhYmxlU2Vj
dGlvbigpIHx8IGNoaWxkID09IHRDYXB0aW9uKSkKKyAgICAgICAgaWYgKCFjaGlsZC0+bGF5ZXIo
KSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9uKSkKICAg
ICAgICAgICAgIGNoaWxkLT5wYWludChpbmZvLCB0eCwgdHkpOwogICAgIH0KIApAQCAtNDM4LDEw
ICs0MzUsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYQogICAg
IGludCBoID0gaGVpZ2h0KCk7CiAKICAgICAvLyBBY2NvdW50IGZvciB0aGUgY2FwdGlvbi4KLSAg
ICBpZiAodENhcHRpb24pIHsKLSAgICAgICAgaW50IGNhcHRpb25IZWlnaHQgPSAodENhcHRpb24t
PmhlaWdodCgpICsgdENhcHRpb24tPm1hcmdpbkJvdHRvbSgpICsgIHRDYXB0aW9uLT5tYXJnaW5U
b3AoKSk7CisgICAgaWYgKG1fY2FwdGlvbikgeworICAgICAgICBpbnQgY2FwdGlvbkhlaWdodCA9
IChtX2NhcHRpb24tPmhlaWdodCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Cb3R0b20oKSArICBtX2Nh
cHRpb24tPm1hcmdpblRvcCgpKTsKICAgICAgICAgaCAtPSBjYXB0aW9uSGVpZ2h0OwotICAgICAg
ICBpZiAodENhcHRpb24tPnN0eWxlKCktPmNhcHRpb25TaWRlKCkgIT0gQ0FQQk9UVE9NKQorICAg
ICAgICBpZiAobV9jYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9uU2lkZSgpICE9IENBUEJPVFRPTSkK
ICAgICAgICAgICAgIHR5ICs9IGNhcHRpb25IZWlnaHQ7CiAgICAgfQogCkBAIC00NjIsMTQgKzQ1
OSwxMyBAQCB2b2lkIFJlbmRlclRhYmxlOjpjYWxjTWluTWF4V2lkdGgoKQogewogICAgIEFTU0VS
VCghbWluTWF4S25vd24oKSk7CiAKLSAgICBpZiAobmVlZFNlY3Rpb25SZWNhbGMpCi0gICAgICAg
IHJlY2FsY1NlY3Rpb25zKCk7CisgICAgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwogICAgIHJl
Y2FsY0hvcml6b250YWxCb3JkZXJzKCk7CiAKLSAgICB0YWJsZUxheW91dC0+Y2FsY01pbk1heFdp
ZHRoKCk7CisgICAgbV90YWJsZUxheW91dC0+Y2FsY01pbk1heFdpZHRoKG1fbWluV2lkdGgsIG1f
bWF4V2lkdGgpOwogCi0gICAgaWYgKHRDYXB0aW9uICYmIHRDYXB0aW9uLT5taW5XaWR0aCgpID4g
bV9taW5XaWR0aCkKLSAgICAgICAgbV9taW5XaWR0aCA9IHRDYXB0aW9uLT5taW5XaWR0aCgpOwor
ICAgIGlmIChtX2NhcHRpb24pCisgICAgICAgIG1fbWluV2lkdGggPSBtYXgobV9taW5XaWR0aCwg
bV9jYXB0aW9uLT5taW5XaWR0aCgpKTsKIAogICAgIHNldE1pbk1heEtub3duKCk7CiB9CkBAIC00
NzcsNjggKzQ3Myw1MiBAQCB2b2lkIFJlbmRlclRhYmxlOjpjYWxjTWluTWF4V2lkdGgoKQogdm9p
ZCBSZW5kZXJUYWJsZTo6c3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0U3BhbikKIHsKICAg
ICAvLyB3ZSBuZWVkIHRvIGFkZCBhIG5ldyBjb2x1bW5TdHJ1Y3QKLSAgICBpbnQgb2xkU2l6ZSA9
IGNvbHVtbnMuc2l6ZSgpOwotICAgIGNvbHVtbnMucmVzaXplKG9sZFNpemUgKyAxKTsKLSAgICBp
bnQgb2xkU3BhbiA9IGNvbHVtbnNbcG9zXS5zcGFuOworICAgIGludCBvbGRTaXplID0gbV9jb2x1
bW5zLnNpemUoKTsKKyAgICBtX2NvbHVtbnMucmVzaXplKG9sZFNpemUgKyAxKTsKKyAgICBpbnQg
b2xkU3BhbiA9IG1fY29sdW1uc1twb3NdLnNwYW47CiAgICAgQVNTRVJUKG9sZFNwYW4gPiBmaXJz
dFNwYW4pOwotICAgIGNvbHVtbnNbcG9zXS5zcGFuID0gZmlyc3RTcGFuOwotICAgIG1lbW1vdmUo
Y29sdW1ucy5kYXRhKCkgKyBwb3MgKyAxLCBjb2x1bW5zLmRhdGEoKSArIHBvcywgKG9sZFNpemUt
cG9zKSpzaXplb2YoQ29sdW1uU3RydWN0KSk7Ci0gICAgY29sdW1uc1twb3MrMV0uc3BhbiA9IG9s
ZFNwYW4gLSBmaXJzdFNwYW47CisgICAgbV9jb2x1bW5zW3Bvc10uc3BhbiA9IGZpcnN0U3BhbjsK
KyAgICBtZW1tb3ZlKG1fY29sdW1ucy5kYXRhKCkgKyBwb3MgKyAxLCBtX2NvbHVtbnMuZGF0YSgp
ICsgcG9zLCAob2xkU2l6ZS1wb3MpICogc2l6ZW9mKENvbHVtblN0cnVjdCkpOworICAgIG1fY29s
dW1uc1twb3MgKyAxXS5zcGFuID0gb2xkU3BhbiAtIGZpcnN0U3BhbjsKIAogICAgIC8vIGNoYW5n
ZSB3aWR0aCBvZiBhbGwgcm93cy4KLSAgICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAg
IGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewotICAgICAgICAgICAgUmVuZGVyVGFibGVT
ZWN0aW9uICpzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+KGNoaWxk
KTsKLSAgICAgICAgICAgIGlmIChzZWN0aW9uLT5jQ29sID4gcG9zKQotICAgICAgICAgICAgICAg
IHNlY3Rpb24tPmNDb2wrKzsKLSAgICAgICAgICAgIGludCBzaXplID0gc2VjdGlvbi0+bnVtUm93
cygpOwotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgc2l6ZTsgKytyb3cpIHsK
LSAgICAgICAgICAgICAgICBzZWN0aW9uLT5ncmlkW3Jvd10ucm93LT5yZXNpemUob2xkU2l6ZSAr
IDEpOwotICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbjo6Um93ICZyID0gKnNlY3Rp
b24tPmdyaWRbcm93XS5yb3c7Ci0gICAgICAgICAgICAgICAgbWVtbW92ZShyLmRhdGEoKSArIHBv
cyArIDEsIHIuZGF0YSgpICsgcG9zLCAob2xkU2l6ZSAtIHBvcykgKiBzaXplb2YoUmVuZGVyVGFi
bGVTZWN0aW9uOjpDZWxsU3RydWN0KSk7Ci0gICAgICAgICAgICAgICAgcltwb3MgKyAxXS5jZWxs
ID0gMDsKLSAgICAgICAgICAgICAgICByW3BvcyArIDFdLmluQ29sU3BhbiA9IHJbcG9zXS5pbkNv
bFNwYW4gfHwgcltwb3NdLmNlbGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KGNoaWxkKS0+c3Bs
aXRDb2x1bW4ocG9zLCBvbGRTaXplICsgMSk7CiAgICAgfQotICAgIGNvbHVtblBvcy5yZXNpemUo
bnVtRWZmQ29scygpICsgMSk7CisKKyAgICBtX2NvbHVtblBvcy5yZXNpemUobnVtRWZmQ29scygp
ICsgMSk7CiAgICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKIH0KIAogdm9pZCBS
ZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1uKGludCBzcGFuKQogewogICAgIC8vIGVhc3kgY2FzZS4K
LSAgICBpbnQgcG9zID0gY29sdW1ucy5zaXplKCk7CisgICAgaW50IHBvcyA9IG1fY29sdW1ucy5z
aXplKCk7CiAgICAgaW50IG5ld1NpemUgPSBwb3MgKyAxOwotICAgIGNvbHVtbnMucmVzaXplKG5l
d1NpemUpOwotICAgIGNvbHVtbnNbcG9zXS5zcGFuID0gc3BhbjsKKyAgICBtX2NvbHVtbnMucmVz
aXplKG5ld1NpemUpOworICAgIG1fY29sdW1uc1twb3NdLnNwYW4gPSBzcGFuOwogCiAgICAgLy8g
Y2hhbmdlIHdpZHRoIG9mIGFsbCByb3dzLgotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7Ci0gICAgICAgICAgICBSZW5kZXJU
YWJsZVNlY3Rpb24gKnNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4o
Y2hpbGQpOwotICAgICAgICAgICAgaW50IHNpemUgPSBzZWN0aW9uLT5udW1Sb3dzKCk7Ci0gICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyArK3JvdykgewotICAgICAgICAg
ICAgICAgIHNlY3Rpb24tPmdyaWRbcm93XS5yb3ctPnJlc2l6ZShuZXdTaXplKTsKLSAgICAgICAg
ICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIGMgPSBzZWN0aW9uLT5jZWxs
QXQocm93LCBwb3MpOwotICAgICAgICAgICAgICAgIGMuY2VsbCA9IDA7Ci0gICAgICAgICAgICAg
ICAgYy5pbkNvbFNwYW4gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigp
KQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpLT5h
cHBlbmRDb2x1bW4ocG9zKTsKICAgICB9Ci0gICAgY29sdW1uUG9zLnJlc2l6ZShudW1FZmZDb2xz
KCkgKyAxKTsKKworICAgIG1fY29sdW1uUG9zLnJlc2l6ZShudW1FZmZDb2xzKCkgKyAxKTsKICAg
ICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwogfQogCi1SZW5kZXJUYWJsZUNvbCAq
UmVuZGVyVGFibGU6OmNvbEVsZW1lbnQoaW50IGNvbCkgY29uc3QKK1JlbmRlclRhYmxlQ29sKiBS
ZW5kZXJUYWJsZTo6Y29sRWxlbWVudChpbnQgY29sKSBjb25zdAogewotICAgIGlmICghaGFzX2Nv
bF9lbGVtcykKKyAgICBpZiAoIW1faGFzQ29sRWxlbWVudHMpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICBpbnQgY0NvbCA9IDA7CisKICAgICB3aGlsZSAo
Y2hpbGQpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ29sKCkpIHsKLSAgICAgICAgICAg
IFJlbmRlclRhYmxlQ29sICpjb2xFbGVtID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDb2wgKj4o
Y2hpbGQpOworICAgICAgICAgICAgUmVuZGVyVGFibGVDb2wqIGNvbEVsZW0gPSBzdGF0aWNfY2Fz
dDxSZW5kZXJUYWJsZUNvbCo+KGNoaWxkKTsKICAgICAgICAgICAgIGludCBzcGFuID0gY29sRWxl
bS0+c3BhbigpOwogICAgICAgICAgICAgaWYgKCFjb2xFbGVtLT5maXJzdENoaWxkKCkpIHsKICAg
ICAgICAgICAgICAgICBjQ29sICs9IHNwYW47CkBAIC01NDYsNzMgKzUyNiw3MCBAQCBSZW5kZXJU
YWJsZUNvbCAqUmVuZGVyVGFibGU6OmNvbEVsZW1lbnQoCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjb2xFbGVtOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBSZW5kZXJPYmplY3Qg
Km5leHQgPSBjaGlsZC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBu
ZXh0ID0gY2hpbGQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGlmICghbmV4dCkKICAgICAg
ICAgICAgICAgICBuZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBpZiAo
IW5leHQgJiYgY2hpbGQtPnBhcmVudCgpLT5pc1RhYmxlQ29sKCkpCiAgICAgICAgICAgICAgICAg
bmV4dCA9IGNoaWxkLT5wYXJlbnQoKS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGNoaWxk
ID0gbmV4dDsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZCA9PSB0Q2FwdGlvbikKKyAgICAgICAg
fSBlbHNlIGlmIChjaGlsZCA9PSBtX2NhcHRpb24pCiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgcmV0dXJuIDA7Ci19CiAKLXZvaWQgUmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zSWZO
ZWVkZWQoKQotewotICAgIGlmIChuZWVkU2VjdGlvblJlY2FsYykKLSAgICAgICAgcmVjYWxjU2Vj
dGlvbnMoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZTo6cmVjYWxjU2Vj
dGlvbnMoKQogewotICAgIHRDYXB0aW9uID0gMDsKLSAgICBoZWFkID0gZm9vdCA9IGZpcnN0Qm9k
eSA9IDA7Ci0gICAgaGFzX2NvbF9lbGVtcyA9IGZhbHNlOworICAgIG1fY2FwdGlvbiA9IDA7Cisg
ICAgbV9oZWFkID0gMDsKKyAgICBtX2Zvb3QgPSAwOworICAgIG1fZmlyc3RCb2R5ID0gMDsKKyAg
ICBtX2hhc0NvbEVsZW1lbnRzID0gZmFsc2U7CiAKLSAgICAvLyBXZSBuZWVkIHRvIGdldCB2YWxp
ZCBwb2ludGVycyB0byBjYXB0aW9uLCBoZWFkLCBmb290IGFuZCBmaXJzdGJvZHkgYWdhaW4KLSAg
ICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgLy8gV2UgbmVlZCB0byBnZXQgdmFsaWQgcG9p
bnRlcnMgdG8gY2FwdGlvbiwgaGVhZCwgZm9vdCBhbmQgZmlyc3QgYm9keSBhZ2FpbgorICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgc3dpdGNoIChjaGlsZC0+c3R5bGUoKS0+ZGlz
cGxheSgpKSB7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX0NBUFRJT046Ci0gICAgICAgICAgICAg
ICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRDYXB0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjaGlsZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHRDYXB0aW9uLT5zZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fY2FwdGlvbiAmJiBjaGlsZC0+aXNSZW5kZXJCbG9jaygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fY2FwdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4o
Y2hpbGQpOworICAgICAgICAgICAgICAgICAgICBtX2NhcHRpb24tPnNldE5lZWRzTGF5b3V0KHRy
dWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgVEFCTEVfQ09MVU1OOgogICAgICAgICAgICAgY2FzZSBUQUJMRV9DT0xVTU5fR1JP
VVA6Ci0gICAgICAgICAgICAgICAgaGFzX2NvbF9lbGVtcyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgbV9oYXNDb2xFbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIFRBQkxFX0hFQURFUl9HUk9VUDoKICAgICAgICAgICAgICAgICBpZiAoY2hp
bGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVT
ZWN0aW9uICpzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+KGNoaWxk
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkKQotICAgICAgICAgICAgICAgICAgICAg
ICAgaGVhZCA9IHNlY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFmaXJzdEJv
ZHkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEJvZHkgPSBzZWN0aW9uOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoc2VjdGlvbi0+bmVlZENlbGxSZWNhbGMpCisgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRh
YmxlU2VjdGlvbio+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hlYWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2hlYWQgPSBzZWN0aW9uOworICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmICghbV9maXJzdEJvZHkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Zp
cnN0Qm9keSA9IHNlY3Rpb247CisgICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLT5uZWVk
c0NlbGxSZWNhbGMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24tPnJlY2FsY0Nl
bGxzKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBUQUJMRV9GT09URVJfR1JPVVA6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
LT5pc1RhYmxlU2VjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiAqc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGlsZCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZm9vdCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvb3QgPSBzZWN0aW9uOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghZmlyc3RCb2R5
KQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RCb2R5ID0gc2VjdGlvbjsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHNlY3Rpb24tPm5lZWRDZWxsUmVjYWxjKQorICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJs
ZVNlY3Rpb24qPihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9mb290KQorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9mb290ID0gc2VjdGlvbjsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoIW1fZmlyc3RCb2R5KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9maXJz
dEJvZHkgPSBzZWN0aW9uOworICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi0+bmVlZHND
ZWxsUmVjYWxjKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5yZWNhbGNDZWxs
cygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgVEFCTEVfUk9XX0dST1VQOgogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNU
YWJsZVNlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24g
KnNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4oY2hpbGQpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Qm9keSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZpcnN0Qm9keSA9IHNlY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uLT5u
ZWVkQ2VsbFJlY2FsYykKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBz
ZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1fZmlyc3RCb2R5KQorICAgICAgICAgICAgICAgICAgICAgICAg
bV9maXJzdEJvZHkgPSBzZWN0aW9uOworICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi0+
bmVlZHNDZWxsUmVjYWxjKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5yZWNh
bGNDZWxscygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTYyMywyNSArNjAwLDI1IEBAIHZvaWQgUmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKCkKIAog
ICAgIC8vIHJlcGFpciBjb2x1bW4gY291bnQgKGFkZENoaWxkIGNhbiBncm93IGl0IHRvbyBtdWNo
LCBiZWNhdXNlIGl0IGFsd2F5cyBhZGRzIGVsZW1lbnRzIHRvIHRoZSBsYXN0IHJvdyBvZiBhIHNl
Y3Rpb24pCiAgICAgaW50IG1heENvbHMgPSAwOwotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
KyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNl
Y3Rpb24oKSkgewotICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uICpzZWN0aW9uID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+KGNoaWxkKTsKKyAgICAgICAgICAgIFJlbmRl
clRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+
KGNoaWxkKTsKICAgICAgICAgICAgIGludCBzZWN0aW9uQ29scyA9IHNlY3Rpb24tPm51bUNvbHVt
bnMoKTsKICAgICAgICAgICAgIGlmIChzZWN0aW9uQ29scyA+IG1heENvbHMpCiAgICAgICAgICAg
ICAgICAgbWF4Q29scyA9IHNlY3Rpb25Db2xzOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IGNvbHVtbnMucmVzaXplKG1heENvbHMpOwotICAgIGNvbHVtblBvcy5yZXNpemUobWF4Q29scysx
KTsKKyAgICBtX2NvbHVtbnMucmVzaXplKG1heENvbHMpOworICAgIG1fY29sdW1uUG9zLnJlc2l6
ZShtYXhDb2xzICsgMSk7CiAgICAgCi0gICAgbmVlZFNlY3Rpb25SZWNhbGMgPSBmYWxzZTsKKyAg
ICBtX25lZWRzU2VjdGlvblJlY2FsYyA9IGZhbHNlOwogICAgIHNldE5lZWRzTGF5b3V0KHRydWUp
OwogfQogCiBSZW5kZXJPYmplY3QqIFJlbmRlclRhYmxlOjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0KiBjaGlsZCkKIHsKLSAgICBzZXROZWVkU2VjdGlvblJlY2FsYygpOworICAgIHNldE5l
ZWRzU2VjdGlvblJlY2FsYygpOwogICAgIHJldHVybiBSZW5kZXJDb250YWluZXI6OnJlbW92ZUNo
aWxkTm9kZShjaGlsZCk7CiB9CiAKQEAgLTY2MSwxNiArNjM4LDE2IEBAIGludCBSZW5kZXJUYWJs
ZTo6Y2FsY0JvcmRlckxlZnQoKSBjb25zdAogICAgICAgICAgICAgYm9yZGVyV2lkdGggPSB0Yi53
aWR0aDsKIAogICAgICAgICBpbnQgbGVmdG1vc3RDb2x1bW4gPSBzdHlsZSgpLT5kaXJlY3Rpb24o
KSA9PSBSVEwgPyBudW1FZmZDb2xzKCkgLSAxIDogMDsKLSAgICAgICAgUmVuZGVyVGFibGVDb2wg
KmNvbEdyb3VwID0gY29sRWxlbWVudChsZWZ0bW9zdENvbHVtbik7CisgICAgICAgIFJlbmRlclRh
YmxlQ29sKiBjb2xHcm91cCA9IGNvbEVsZW1lbnQobGVmdG1vc3RDb2x1bW4pOwogICAgICAgICBp
ZiAoY29sR3JvdXApIHsKICAgICAgICAgICAgIGNvbnN0IEJvcmRlclZhbHVlJiBnYiA9IHN0eWxl
KCktPmJvcmRlckxlZnQoKTsKICAgICAgICAgICAgIGlmIChnYi5zdHlsZSgpID09IEJISURERU4p
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpZiAoZ2Iuc3R5bGUoKSA+
IEJISURERU4gJiYgZ2Iud2lkdGggPiBib3JkZXJXaWR0aCkKLSAgICAgICAgICAgICAgICBib3Jk
ZXJXaWR0aCA9IGdiLndpZHRoOworICAgICAgICAgICAgaWYgKGdiLnN0eWxlKCkgPiBCSElEREVO
KQorICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCBnYi53aWR0
aCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBm
aXJzdENoaWxkKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7
CiAgICAgICAgIHdoaWxlIChjaGlsZCAmJiAhY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpCiAgICAg
ICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICBpZiAoY2hpbGQg
JiYgY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKQEAgLTY4Miw4ICs2NTksOCBAQCBpbnQgUmVu
ZGVyVGFibGU6OmNhbGNCb3JkZXJMZWZ0KCkgY29uc3QKICAgICAgICAgICAgIGNvbnN0IEJvcmRl
clZhbHVlJiBzYiA9IHNlY3Rpb24tPnN0eWxlKCktPmJvcmRlckxlZnQoKTsKICAgICAgICAgICAg
IGlmIChzYi5zdHlsZSgpID09IEJISURERU4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICBpZiAoc2Iuc3R5bGUoKSA+IEJISURERU4gJiYgc2Iud2lkdGggPiBib3JkZXJX
aWR0aCkKLSAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IHNiLndpZHRoOworICAgICAgICAg
ICAgaWYgKHNiLnN0eWxlKCkgPiBCSElEREVOKQorICAgICAgICAgICAgICAgIGJvcmRlcldpZHRo
ID0gbWF4KGJvcmRlcldpZHRoLCBzYi53aWR0aCk7CiAKICAgICAgICAgICAgIGNvbnN0IFJlbmRl
clRhYmxlU2VjdGlvbjo6Q2VsbFN0cnVjdCYgY3MgPSBzZWN0aW9uLT5jZWxsQXQoMCwgbGVmdG1v
c3RDb2x1bW4pOwogICAgICAgICAgICAgCkBAIC02OTUsMTAgKzY3MiwxMCBAQCBpbnQgUmVuZGVy
VGFibGU6OmNhbGNCb3JkZXJMZWZ0KCkgY29uc3QKICAgICAgICAgICAgICAgICBpZiAocmIuc3R5
bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAg
ICAgICAgICAgIGlmIChjYi5zdHlsZSgpID4gQkhJRERFTiAmJiBjYi53aWR0aCA+IGJvcmRlcldp
ZHRoKQotICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IGNiLndpZHRoOwotICAgICAg
ICAgICAgICAgIGlmIChyYi5zdHlsZSgpID4gQkhJRERFTiAmJiByYi53aWR0aCA+IGJvcmRlcldp
ZHRoKQotICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IHJiLndpZHRoOworICAgICAg
ICAgICAgICAgIGlmIChjYi5zdHlsZSgpID4gQkhJRERFTikKKyAgICAgICAgICAgICAgICAgICAg
Ym9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIGNiLndpZHRoKTsKKyAgICAgICAgICAgICAg
ICBpZiAocmIuc3R5bGUoKSA+IEJISURERU4pCisgICAgICAgICAgICAgICAgICAgIGJvcmRlcldp
ZHRoID0gbWF4KGJvcmRlcldpZHRoLCByYi53aWR0aCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGJvcmRlcldpZHRoIC8gMjsKQEAgLTcyMiwxNiArNjk5LDE2IEBA
IGludCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclJpZ2h0KCkgY29uc3QKICAgICAgICAgICAgIGJv
cmRlcldpZHRoID0gdGIud2lkdGg7CiAKICAgICAgICAgaW50IHJpZ2h0bW9zdENvbHVtbiA9IHN0
eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCA/IDAgOiBudW1FZmZDb2xzKCkgLSAxOwotICAgICAg
ICBSZW5kZXJUYWJsZUNvbCAqY29sR3JvdXAgPSBjb2xFbGVtZW50KHJpZ2h0bW9zdENvbHVtbik7
CisgICAgICAgIFJlbmRlclRhYmxlQ29sKiBjb2xHcm91cCA9IGNvbEVsZW1lbnQocmlnaHRtb3N0
Q29sdW1uKTsKICAgICAgICAgaWYgKGNvbEdyb3VwKSB7CiAgICAgICAgICAgICBjb25zdCBCb3Jk
ZXJWYWx1ZSYgZ2IgPSBzdHlsZSgpLT5ib3JkZXJSaWdodCgpOwogICAgICAgICAgICAgaWYgKGdi
LnN0eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgIGlmIChnYi5zdHlsZSgpID4gQkhJRERFTiAmJiBnYi53aWR0aCA+IGJvcmRlcldpZHRoKQot
ICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gZ2Iud2lkdGg7CisgICAgICAgICAgICBpZiAo
Z2Iuc3R5bGUoKSA+IEJISURERU4pCisgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgo
Ym9yZGVyV2lkdGgsIGdiLndpZHRoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUmVu
ZGVyT2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICAgICAgd2hpbGUgKGNoaWxkICYmICFjaGlsZC0+aXNU
YWJsZVNlY3Rpb24oKSkKICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7
CiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewpAQCAtNzQz
LDggKzcyMCw4IEBAIGludCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclJpZ2h0KCkgY29uc3QKICAg
ICAgICAgICAgIGNvbnN0IEJvcmRlclZhbHVlJiBzYiA9IHNlY3Rpb24tPnN0eWxlKCktPmJvcmRl
clJpZ2h0KCk7CiAgICAgICAgICAgICBpZiAoc2Iuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKHNiLnN0eWxlKCkgPiBCSElEREVO
ICYmIHNiLndpZHRoID4gYm9yZGVyV2lkdGgpCi0gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGgg
PSBzYi53aWR0aDsKKyAgICAgICAgICAgIGlmIChzYi5zdHlsZSgpID4gQkhJRERFTikKKyAgICAg
ICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgc2Iud2lkdGgpOwogCiAg
ICAgICAgICAgICBjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIGNzID0gc2Vj
dGlvbi0+Y2VsbEF0KDAsIHJpZ2h0bW9zdENvbHVtbik7CiAgICAgICAgICAgICAKQEAgLTc1Niwx
MCArNzMzLDEwIEBAIGludCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclJpZ2h0KCkgY29uc3QKICAg
ICAgICAgICAgICAgICBpZiAocmIuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgICAgIGlmIChjYi5zdHlsZSgpID4gQkhJRERF
TiAmJiBjYi53aWR0aCA+IGJvcmRlcldpZHRoKQotICAgICAgICAgICAgICAgICAgICBib3JkZXJX
aWR0aCA9IGNiLndpZHRoOwotICAgICAgICAgICAgICAgIGlmIChyYi5zdHlsZSgpID4gQkhJRERF
TiAmJiByYi53aWR0aCA+IGJvcmRlcldpZHRoKQotICAgICAgICAgICAgICAgICAgICBib3JkZXJX
aWR0aCA9IHJiLndpZHRoOworICAgICAgICAgICAgICAgIGlmIChjYi5zdHlsZSgpID4gQkhJRERF
TikKKyAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIGNi
LndpZHRoKTsKKyAgICAgICAgICAgICAgICBpZiAocmIuc3R5bGUoKSA+IEJISURERU4pCisgICAg
ICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCByYi53aWR0aCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIChib3JkZXJXaWR0aCAr
IDEpIC8gMjsKQEAgLTc5MywxMiArNzcwLDEyIEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3Jk
ZXJUb3AoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBpbnQgYm9yZGVyV2lkdGggPSAw
OwogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogdG9wU2VjdGlvbjsKLSAgICBpZiAoaGVhZCkKLSAg
ICAgICAgdG9wU2VjdGlvbiA9IGhlYWQ7Ci0gICAgZWxzZSBpZiAoZmlyc3RCb2R5KQotICAgICAg
ICB0b3BTZWN0aW9uID0gZmlyc3RCb2R5OwotICAgIGVsc2UgaWYgKGZvb3QpCi0gICAgICAgIHRv
cFNlY3Rpb24gPSBmb290OworICAgIGlmIChtX2hlYWQpCisgICAgICAgIHRvcFNlY3Rpb24gPSBt
X2hlYWQ7CisgICAgZWxzZSBpZiAobV9maXJzdEJvZHkpCisgICAgICAgIHRvcFNlY3Rpb24gPSBt
X2ZpcnN0Qm9keTsKKyAgICBlbHNlIGlmIChtX2Zvb3QpCisgICAgICAgIHRvcFNlY3Rpb24gPSBt
X2Zvb3Q7CiAgICAgZWxzZQogICAgICAgICB0b3BTZWN0aW9uID0gMDsKICAgICBpZiAodG9wU2Vj
dGlvbikgewpAQCAtODA5LDggKzc4Niw4IEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJU
b3AoKSBjb25zdAogICAgIGNvbnN0IEJvcmRlclZhbHVlJiB0YiA9IHN0eWxlKCktPmJvcmRlclRv
cCgpOwogICAgIGlmICh0Yi5zdHlsZSgpID09IEJISURERU4pCiAgICAgICAgIHJldHVybiAwOwot
ICAgIGlmICh0Yi5zdHlsZSgpID4gQkhJRERFTiAmJiAoaW50KSh0Yi53aWR0aCAvIDIpID4gYm9y
ZGVyV2lkdGgpCi0gICAgICAgIGJvcmRlcldpZHRoID0gdGIud2lkdGggLyAyOworICAgIGlmICh0
Yi5zdHlsZSgpID4gQkhJRERFTikKKyAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lk
dGgsIHN0YXRpY19jYXN0PGludD4odGIud2lkdGggLyAyKSk7CiAgICAgcmV0dXJuIGJvcmRlcldp
ZHRoOwogfQogCkBAIC04MjAsMTIgKzc5NywxMiBAQCBpbnQgUmVuZGVyVGFibGU6Om91dGVyQm9y
ZGVyQm90dG9tKCkgY29uCiAgICAgICAgIHJldHVybiAwOwogICAgIGludCBib3JkZXJXaWR0aCA9
IDA7CiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBib3R0b21TZWN0aW9uOwotICAgIGlmIChmb290
KQotICAgICAgICBib3R0b21TZWN0aW9uID0gZm9vdDsKKyAgICBpZiAobV9mb290KQorICAgICAg
ICBib3R0b21TZWN0aW9uID0gbV9mb290OwogICAgIGVsc2UgewogICAgICAgICBSZW5kZXJPYmpl
Y3QqIGNoaWxkOwogICAgICAgICBmb3IgKGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkICYmICFj
aGlsZC0+aXNUYWJsZVNlY3Rpb24oKTsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkp
OwotICAgICAgICBib3R0b21TZWN0aW9uID0gY2hpbGQgPyBzdGF0aWNfY2FzdDxSZW5kZXJUYWJs
ZVNlY3Rpb24gKj4oY2hpbGQpIDogMDsKKyAgICAgICAgYm90dG9tU2VjdGlvbiA9IGNoaWxkID8g
c3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpIDogMDsKICAgICB9CiAgICAg
aWYgKGJvdHRvbVNlY3Rpb24pIHsKICAgICAgICAgYm9yZGVyV2lkdGggPSBib3R0b21TZWN0aW9u
LT5vdXRlckJvcmRlckJvdHRvbSgpOwpAQCAtODM1LDggKzgxMiw4IEBAIGludCBSZW5kZXJUYWJs
ZTo6b3V0ZXJCb3JkZXJCb3R0b20oKSBjb24KICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgdGIgPSBz
dHlsZSgpLT5ib3JkZXJCb3R0b20oKTsKICAgICBpZiAodGIuc3R5bGUoKSA9PSBCSElEREVOKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAodGIuc3R5bGUoKSA+IEJISURERU4gJiYgKGludCko
dGIud2lkdGggKyAxKSAvIDIgPiBib3JkZXJXaWR0aCkKLSAgICAgICAgYm9yZGVyV2lkdGggPSAo
dGIud2lkdGggKyAxKSAvIDI7CisgICAgaWYgKHRiLnN0eWxlKCkgPiBCSElEREVOKQorICAgICAg
ICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8aW50PigodGIud2lk
dGggKyAxKSAvIDIpKTsKICAgICByZXR1cm4gYm9yZGVyV2lkdGg7CiB9CiAKQEAgLTg1NCwxMCAr
ODMxLDEwIEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJMZWZ0KCkgY29uc3QKICAgICAg
ICAgYm9yZGVyV2lkdGggPSB0Yi53aWR0aCAvIDI7CiAKICAgICBib29sIGFsbEhpZGRlbiA9IHRy
dWU7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKICAgICAgICAgaWYgKCFjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpbnQgc3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24g
Kj4oY2hpbGQpLT5vdXRlckJvcmRlckxlZnQoKTsKKyAgICAgICAgaW50IHN3ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpLT5vdXRlckJvcmRlckxlZnQoKTsKICAgICAg
ICAgaWYgKHN3ID09IC0xKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGVsc2UKQEAg
LTg4NCwxMCArODYxLDEwIEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJSaWdodCgpIGNv
bnMKICAgICAgICAgYm9yZGVyV2lkdGggPSAodGIud2lkdGggKyAxKSAvIDI7CiAKICAgICBib29s
IGFsbEhpZGRlbiA9IHRydWU7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpbnQgc3cgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUYWJsZVNlY3Rpb24gKj4oY2hpbGQpLT5vdXRlckJvcmRlclJpZ2h0KCk7CisgICAgICAgIGlu
dCBzdyA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KGNoaWxkKS0+b3V0ZXJCb3Jk
ZXJSaWdodCgpOwogICAgICAgICBpZiAoc3cgPT0gLTEpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgZWxzZQpAQCAtOTAyLDMxICs4NzksMzEgQEAgaW50IFJlbmRlclRhYmxlOjpvdXRl
ckJvcmRlclJpZ2h0KCkgY29ucwogCiBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpz
ZWN0aW9uQWJvdmUoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uLCBib29sIHNraXBF
bXB0eVNlY3Rpb25zKSBjb25zdAogewotICAgIGlmIChzZWN0aW9uID09IGhlYWQpCisgICAgaWYg
KHNlY3Rpb24gPT0gbV9oZWFkKQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJPYmplY3Qg
KnByZXZTZWN0aW9uID0gKHNlY3Rpb24gPT0gZm9vdCA/IGxhc3RDaGlsZCgpIDogc2VjdGlvbikt
PnByZXZpb3VzU2libGluZygpOworICAgIFJlbmRlck9iamVjdCogcHJldlNlY3Rpb24gPSAoc2Vj
dGlvbiA9PSBtX2Zvb3QgPyBsYXN0Q2hpbGQoKSA6IHNlY3Rpb24pLT5wcmV2aW91c1NpYmxpbmco
KTsKICAgICB3aGlsZSAocHJldlNlY3Rpb24pIHsKLSAgICAgICAgaWYgKHByZXZTZWN0aW9uLT5p
c1RhYmxlU2VjdGlvbigpICYmIHByZXZTZWN0aW9uICE9IGhlYWQgJiYgcHJldlNlY3Rpb24gIT0g
Zm9vdCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2Vj
dGlvbio+KHByZXZTZWN0aW9uKS0+bnVtUm93cygpKSkKKyAgICAgICAgaWYgKHByZXZTZWN0aW9u
LT5pc1RhYmxlU2VjdGlvbigpICYmIHByZXZTZWN0aW9uICE9IG1faGVhZCAmJiBwcmV2U2VjdGlv
biAhPSBtX2Zvb3QgJiYgKCFza2lwRW1wdHlTZWN0aW9ucyB8fCBzdGF0aWNfY2FzdDxSZW5kZXJU
YWJsZVNlY3Rpb24qPihwcmV2U2VjdGlvbiktPm51bVJvd3MoKSkpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgcHJldlNlY3Rpb24gPSBwcmV2U2VjdGlvbi0+cHJldmlvdXNTaWJsaW5nKCk7
CiAgICAgfQotICAgIGlmICghcHJldlNlY3Rpb24gJiYgaGVhZCAmJiAoIXNraXBFbXB0eVNlY3Rp
b25zIHx8IGhlYWQtPm51bVJvd3MoKSkpCi0gICAgICAgIHByZXZTZWN0aW9uID0gaGVhZDsKKyAg
ICBpZiAoIXByZXZTZWN0aW9uICYmIG1faGVhZCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IG1f
aGVhZC0+bnVtUm93cygpKSkKKyAgICAgICAgcHJldlNlY3Rpb24gPSBtX2hlYWQ7CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KHByZXZTZWN0aW9uKTsKIH0KIAog
UmVuZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6c2VjdGlvbkJlbG93KGNvbnN0IFJlbmRl
clRhYmxlU2VjdGlvbiogc2VjdGlvbiwgYm9vbCBza2lwRW1wdHlTZWN0aW9ucykgY29uc3QKIHsK
LSAgICBpZiAoc2VjdGlvbiA9PSBmb290KQorICAgIGlmIChzZWN0aW9uID09IG1fZm9vdCkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyT2JqZWN0ICpuZXh0U2VjdGlvbiA9IChzZWN0aW9u
ID09IGhlYWQgPyBmaXJzdENoaWxkKCkgOiBzZWN0aW9uKS0+bmV4dFNpYmxpbmcoKTsKKyAgICBS
ZW5kZXJPYmplY3QqIG5leHRTZWN0aW9uID0gKHNlY3Rpb24gPT0gbV9oZWFkID8gZmlyc3RDaGls
ZCgpIDogc2VjdGlvbiktPm5leHRTaWJsaW5nKCk7CiAgICAgd2hpbGUgKG5leHRTZWN0aW9uKSB7
Ci0gICAgICAgIGlmIChuZXh0U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAmJiBuZXh0U2VjdGlv
biAhPSBoZWFkICYmIG5leHRTZWN0aW9uICE9IGZvb3QgJiYgKCFza2lwRW1wdHlTZWN0aW9ucyB8
fCBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihuZXh0U2VjdGlvbiktPm51bVJvd3Mo
KSkpCisgICAgICAgIGlmIChuZXh0U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAmJiBuZXh0U2Vj
dGlvbiAhPSBtX2hlYWQgJiYgbmV4dFNlY3Rpb24gIT0gbV9mb290ICYmICghc2tpcEVtcHR5U2Vj
dGlvbnMgfHwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4obmV4dFNlY3Rpb24pLT5u
dW1Sb3dzKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5leHRTZWN0aW9uID0gbmV4
dFNlY3Rpb24tPm5leHRTaWJsaW5nKCk7CiAgICAgfQotICAgIGlmICghbmV4dFNlY3Rpb24gJiYg
Zm9vdCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IGZvb3QtPm51bVJvd3MoKSkpCi0gICAgICAg
IG5leHRTZWN0aW9uID0gZm9vdDsKKyAgICBpZiAoIW5leHRTZWN0aW9uICYmIG1fZm9vdCAmJiAo
IXNraXBFbXB0eVNlY3Rpb25zIHx8IG1fZm9vdC0+bnVtUm93cygpKSkKKyAgICAgICAgbmV4dFNl
Y3Rpb24gPSBtX2Zvb3Q7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlv
bio+KG5leHRTZWN0aW9uKTsKIH0KIApAQCAtOTM5LDcgKzkxNiw3IEBAIFJlbmRlclRhYmxlQ2Vs
bCogUmVuZGVyVGFibGU6OmNlbGxBYm92ZSgKICAgICBpZiAociA+IDApIHsKICAgICAgICAgLy8g
Y2VsbCBpcyBub3QgaW4gdGhlIGZpcnN0IHJvdywgc28gdXNlIHRoZSBhYm92ZSByb3cgaW4gaXRz
IG93biBzZWN0aW9uCiAgICAgICAgIHNlY3Rpb24gPSBjZWxsLT5zZWN0aW9uKCk7Ci0gICAgICAg
IHJBYm92ZSA9IHItMTsKKyAgICAgICAgckFib3ZlID0gciAtIDE7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgc2VjdGlvbiA9IHNlY3Rpb25BYm92ZShjZWxsLT5zZWN0aW9uKCksIHRydWUpOwogICAg
ICAgICBpZiAoc2VjdGlvbikKQEAgLTk1NCw3ICs5MzEsNyBAQCBSZW5kZXJUYWJsZUNlbGwqIFJl
bmRlclRhYmxlOjpjZWxsQWJvdmUoCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGFib3ZlQ2Vs
bCA9IHNlY3Rpb24tPmNlbGxBdChyQWJvdmUsIGVmZkNvbCk7CiAgICAgICAgICAgICBlZmZDb2wt
LTsKLSAgICAgICAgfSB3aGlsZSAoIWFib3ZlQ2VsbC5jZWxsICYmIGFib3ZlQ2VsbC5pbkNvbFNw
YW4gJiYgZWZmQ29sID49MCk7CisgICAgICAgIH0gd2hpbGUgKCFhYm92ZUNlbGwuY2VsbCAmJiBh
Ym92ZUNlbGwuaW5Db2xTcGFuICYmIGVmZkNvbCA+PSAwKTsKICAgICAgICAgcmV0dXJuIGFib3Zl
Q2VsbC5jZWxsOwogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gMDsKQEAgLTk2OSw3ICs5NDYs
NyBAQCBSZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQmVsb3coCiAgICAgaWYgKHIg
PCBjZWxsLT5zZWN0aW9uKCktPm51bVJvd3MoKSAtIDEpIHsKICAgICAgICAgLy8gVGhlIGNlbGwg
aXMgbm90IGluIHRoZSBsYXN0IHJvdywgc28gdXNlIHRoZSBuZXh0IHJvdyBpbiB0aGUgc2VjdGlv
bi4KICAgICAgICAgc2VjdGlvbiA9IGNlbGwtPnNlY3Rpb24oKTsKLSAgICAgICAgckJlbG93PSBy
KzE7CisgICAgICAgIHJCZWxvdyA9IHIgKyAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNlY3Rp
b24gPSBzZWN0aW9uQmVsb3coY2VsbC0+c2VjdGlvbigpLCB0cnVlKTsKICAgICAgICAgaWYgKHNl
Y3Rpb24pCkBAIC05ODQsNyArOTYxLDcgQEAgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6
Y2VsbEJlbG93KAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBiZWxvd0NlbGwgPSBzZWN0aW9u
LT5jZWxsQXQockJlbG93LCBlZmZDb2wpOwogICAgICAgICAgICAgZWZmQ29sLS07Ci0gICAgICAg
IH0gd2hpbGUgKCFiZWxvd0NlbGwuY2VsbCAmJiBiZWxvd0NlbGwuaW5Db2xTcGFuICYmIGVmZkNv
bCA+PTApOworICAgICAgICB9IHdoaWxlICghYmVsb3dDZWxsLmNlbGwgJiYgYmVsb3dDZWxsLmlu
Q29sU3BhbiAmJiBlZmZDb2wgPj0gMCk7CiAgICAgICAgIHJldHVybiBiZWxvd0NlbGwuY2VsbDsK
ICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDAwLDkgKzk3Nyw5IEBAIFJlbmRl
clRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNlbGxCZWZvcmUKICAgICAvLyBJZiB3ZSBoaXQgYSBj
b2xzcGFuIGJhY2sgdXAgdG8gYSByZWFsIGNlbGwuCiAgICAgUmVuZGVyVGFibGVTZWN0aW9uOjpD
ZWxsU3RydWN0IHByZXZDZWxsOwogICAgIGRvIHsKLSAgICAgICAgcHJldkNlbGwgPSBzZWN0aW9u
LT5jZWxsQXQoY2VsbC0+cm93KCksIGVmZkNvbC0xKTsKKyAgICAgICAgcHJldkNlbGwgPSBzZWN0
aW9uLT5jZWxsQXQoY2VsbC0+cm93KCksIGVmZkNvbCAtIDEpOwogICAgICAgICBlZmZDb2wtLTsK
LSAgICB9IHdoaWxlICghcHJldkNlbGwuY2VsbCAmJiBwcmV2Q2VsbC5pbkNvbFNwYW4gJiYgZWZm
Q29sID49MCk7CisgICAgfSB3aGlsZSAoIXByZXZDZWxsLmNlbGwgJiYgcHJldkNlbGwuaW5Db2xT
cGFuICYmIGVmZkNvbCA+PSAwKTsKICAgICByZXR1cm4gcHJldkNlbGwuY2VsbDsKIH0KIApAQCAt
MTAzMyw3ICsxMDEwLDcgQEAgSW50UmVjdCBSZW5kZXJUYWJsZTo6Z2V0T3ZlcmZsb3dDbGlwUmVj
dAogICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgYXNzdW1lcyAobGlrZSBhbGwgb3VyIG90aGVyIGNh
cHRpb24gY29kZSkgdGhhdCBvbmx5IHRvcC9ib3R0b20gYXJlCiAgICAgLy8gc3VwcG9ydGVkLiAg
V2hlbiB3ZSBhY3R1YWxseSBzdXBwb3J0IGxlZnQvcmlnaHQgYW5kIHN0b3AgbWFwcGluZyB0aGVt
IHRvIHRvcC9ib3R0b20sCiAgICAgLy8gd2UgbWlnaHQgaGF2ZSB0byBoYWNrIHRoaXMgY29kZSBm
aXJzdCAoZGVwZW5kaW5nIG9uIHdoYXQgb3JkZXIgd2UgZG8gdGhlc2UgYnVnIGZpeGVzIGluKS4K
LSAgICBpZiAodENhcHRpb24pIHsKKyAgICBpZiAobV9jYXB0aW9uKSB7CiAgICAgICAgIHJlY3Qu
c2V0SGVpZ2h0KGhlaWdodCgpKTsKICAgICAgICAgcmVjdC5zZXRZKHR5KTsKICAgICB9CkBAIC0x
MDQyLDIxICsxMDE5LDIxIEBAIEludFJlY3QgUmVuZGVyVGFibGU6OmdldE92ZXJmbG93Q2xpcFJl
Y3QKIH0KIAogI2lmbmRlZiBOREVCVUcKLXZvaWQgUmVuZGVyVGFibGU6OmR1bXAoVGV4dFN0cmVh
bSAqc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGluZCkgY29uc3QKK3ZvaWQgUmVuZGVyVGFibGU6
OmR1bXAoVGV4dFN0cmVhbSogc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGluZCkgY29uc3QKIHsK
LSAgICBpZiAodENhcHRpb24pCisgICAgaWYgKG1fY2FwdGlvbikKICAgICAgICAgKnN0cmVhbSA8
PCAiIHRDYXB0aW9uIjsKLSAgICBpZiAoaGVhZCkKKyAgICBpZiAobV9oZWFkKQogICAgICAgICAq
c3RyZWFtIDw8ICIgaGVhZCI7Ci0gICAgaWYgKGZvb3QpCisgICAgaWYgKG1fZm9vdCkKICAgICAg
ICAgKnN0cmVhbSA8PCAiIGZvb3QiOwogCiAgICAgKnN0cmVhbSA8PCBlbmRsIDw8IGluZCA8PCAi
Y3NwYW5zOiI7Ci0gICAgZm9yICggdW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29sdW1ucy5zaXpl
KCk7IGkrKyApCi0gICAgICAgICpzdHJlYW0gPDwgIiAiIDw8IGNvbHVtbnNbaV0uc3BhbjsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fY29sdW1ucy5zaXplKCk7IGkrKykKKyAg
ICAgICAgKnN0cmVhbSA8PCAiICIgPDwgbV9jb2x1bW5zW2ldLnNwYW47CiAgICAgKnN0cmVhbSA8
PCBlbmRsIDw8IGluZDsKIAotICAgIFJlbmRlckJsb2NrOjpkdW1wKHN0cmVhbSxpbmQpOworICAg
IFJlbmRlckJsb2NrOjpkdW1wKHN0cmVhbSwgaW5kKTsKIH0KICNlbmRpZgogCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDE4NTE3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJUYWJsZV9ICi0jZGVm
aW5lIFJlbmRlclRhYmxlX0gKKyNpZm5kZWYgUmVuZGVyVGFibGVfaAorI2RlZmluZSBSZW5kZXJU
YWJsZV9oCiAKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KQEAgLTY0LDE2ICs2NCwxNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyVGFibGUiOyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKLQogICAgIHZpcnR1YWwgYm9vbCBpc1Rh
YmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCB2b2lkIHNldFN0eWxl
KFJlbmRlclN0eWxlKik7CisKICAgICB2aXJ0dWFsIGJvb2wgYXZvaWRzRmxvYXRzKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgaW50IGdldENvbHVtblBvcyhpbnQgY29sKSBjb25zdCB7
IHJldHVybiBjb2x1bW5Qb3NbY29sXTsgfQorICAgIGludCBnZXRDb2x1bW5Qb3MoaW50IGNvbCkg
Y29uc3QgeyByZXR1cm4gbV9jb2x1bW5Qb3NbY29sXTsgfQogCi0gICAgaW50IGhCb3JkZXJTcGFj
aW5nKCkgY29uc3QgeyByZXR1cm4gaHNwYWNpbmc7IH0KLSAgICBpbnQgdkJvcmRlclNwYWNpbmco
KSBjb25zdCB7IHJldHVybiB2c3BhY2luZzsgfQorICAgIGludCBoQm9yZGVyU3BhY2luZygpIGNv
bnN0IHsgcmV0dXJuIG1faFNwYWNpbmc7IH0KKyAgICBpbnQgdkJvcmRlclNwYWNpbmcoKSBjb25z
dCB7IHJldHVybiBtX3ZTcGFjaW5nOyB9CiAgICAgCiAgICAgYm9vbCBjb2xsYXBzZUJvcmRlcnMo
KSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJDb2xsYXBzZSgpOyB9CiAgICAgaW50IGJv
cmRlckxlZnQoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlckxlZnQ7IH0KQEAgLTgxLDEyICs4MSwx
MiBAQCBwdWJsaWM6CiAgICAgaW50IGJvcmRlclRvcCgpIGNvbnN0OwogICAgIGludCBib3JkZXJC
b3R0b20oKSBjb25zdDsKICAgICAKLSAgICBSdWxlcyBnZXRSdWxlcygpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFJ1bGVzPihydWxlcyk7IH0KKyAgICBSdWxlcyBnZXRSdWxlcygpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJ1bGVzPihtX3J1bGVzKTsgfQogCiAgICAgY29uc3QgQ29s
b3ImIGJnQ29sb3IoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsg
fQogCi0gICAgdW5zaWduZWQgY2VsbFBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBwYWRkaW5nOyB9
Ci0gICAgdm9pZCBzZXRDZWxsUGFkZGluZyh1bnNpZ25lZCBwKSB7IHBhZGRpbmcgPSBwOyB9Cisg
ICAgdW5zaWduZWQgY2VsbFBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBtX3BhZGRpbmc7IH0KKyAg
ICB2b2lkIHNldENlbGxQYWRkaW5nKHVuc2lnbmVkIHApIHsgbV9wYWRkaW5nID0gcDsgfQogCiAg
ICAgaW50IG91dGVyQm9yZGVyVG9wKCkgY29uc3Q7CiAgICAgaW50IG91dGVyQm9yZGVyQm90dG9t
KCkgY29uc3Q7CkBAIC0xMTIsMzUgKzExMiwzOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgY2FsY1dpZHRoKCk7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgdmlydHVhbCB2b2lkIGR1bXAo
VGV4dFN0cmVhbSAqc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGluZCA9ICIiKSBjb25zdDsKLSNl
bmRpZgogICAgIHN0cnVjdCBDb2x1bW5TdHJ1Y3QgewogICAgICAgICBlbnVtIHsKICAgICAgICAg
ICAgIFdpZHRoVW5kZWZpbmVkID0gMHhmZmZmCiAgICAgICAgIH07Ci0gICAgICAgIENvbHVtblN0
cnVjdCgpIHsKLSAgICAgICAgICAgIHNwYW4gPSAxOwotICAgICAgICAgICAgd2lkdGggPSBXaWR0
aFVuZGVmaW5lZDsKKworICAgICAgICBDb2x1bW5TdHJ1Y3QoKQorICAgICAgICAgICAgOiBzcGFu
KDEpCisgICAgICAgICAgICAsIHdpZHRoKFdpZHRoVW5kZWZpbmVkKQorICAgICAgICB7CiAgICAg
ICAgIH0KKwogICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcGFuOwogICAgICAgICB1bnNpZ25lZCB3
aWR0aDsgLy8gdGhlIGNhbGN1bGF0ZWQgcG9zaXRpb24gb2YgdGhlIGNvbHVtbgogICAgIH07CiAK
LSAgICBWZWN0b3I8aW50PiBjb2x1bW5Qb3M7Ci0gICAgVmVjdG9yPENvbHVtblN0cnVjdD4gY29s
dW1uczsKKyAgICBWZWN0b3I8Q29sdW1uU3RydWN0PiYgY29sdW1ucygpIHsgcmV0dXJuIG1fY29s
dW1uczsgfQorICAgIFZlY3RvcjxpbnQ+JiBjb2x1bW5Qb3NpdGlvbnMoKSB7IHJldHVybiBtX2Nv
bHVtblBvczsgfQorICAgIFJlbmRlclRhYmxlU2VjdGlvbiogaGVhZGVyKCkgY29uc3QgeyByZXR1
cm4gbV9oZWFkOyB9CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBmb290ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2Zvb3Q7IH0KKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGZpcnN0Qm9keSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlyc3RCb2R5OyB9CiAKICAgICB2b2lkIHNwbGl0Q29sdW1uKGludCBwb3Ms
IGludCBmaXJzdFNwYW4pOwogICAgIHZvaWQgYXBwZW5kQ29sdW1uKGludCBzcGFuKTsKLSAgICBp
bnQgbnVtRWZmQ29scygpIGNvbnN0IHsgcmV0dXJuIGNvbHVtbnMuc2l6ZSgpOyB9Ci0gICAgaW50
IHNwYW5PZkVmZkNvbChpbnQgZWZmQ29sKSBjb25zdCB7IHJldHVybiBjb2x1bW5zW2VmZkNvbF0u
c3BhbjsgfQorICAgIGludCBudW1FZmZDb2xzKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5zLnNp
emUoKTsgfQorICAgIGludCBzcGFuT2ZFZmZDb2woaW50IGVmZkNvbCkgY29uc3QgeyByZXR1cm4g
bV9jb2x1bW5zW2VmZkNvbF0uc3BhbjsgfQogICAgIAogICAgIGludCBjb2xUb0VmZkNvbChpbnQg
Y29sKSBjb25zdAogICAgIHsKICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICBpbnQgZWZmQ29s
ID0gbnVtRWZmQ29scygpOwogICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbCAmJiBpIDwg
ZWZmQ29sOyArK2kpCi0gICAgICAgICAgICBjICs9IGNvbHVtbnNbaV0uc3BhbjsKKyAgICAgICAg
ICAgIGMgKz0gbV9jb2x1bW5zW2ldLnNwYW47CiAgICAgICAgIHJldHVybiBpOwogICAgIH0KICAg
ICAKQEAgLTE0OCwxOSArMTUxLDIwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGludCBjID0g
MDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlZmZDb2w7IGkrKykKLSAgICAgICAgICAg
IGMgKz0gY29sdW1uc1tpXS5zcGFuOworICAgICAgICAgICAgYyArPSBtX2NvbHVtbnNbaV0uc3Bh
bjsKICAgICAgICAgcmV0dXJuIGM7CiAgICAgfQogCi0gICAgaW50IGJvcmRlcnNQYWRkaW5nQW5k
U3BhY2luZygpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIGJvcmRlckxlZnQoKSArIGJvcmRlclJp
Z2h0KCkgKyAKKyAgICBpbnQgYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsKICAgICAgICAg
ICAgICAgIChjb2xsYXBzZUJvcmRlcnMoKSA/IDAgOiAocGFkZGluZ0xlZnQoKSArIHBhZGRpbmdS
aWdodCgpICsgKG51bUVmZkNvbHMoKSArIDEpICogaEJvcmRlclNwYWNpbmcoKSkpOwogICAgIH0K
IAogICAgIFJlbmRlclRhYmxlQ29sKiBjb2xFbGVtZW50KGludCBjb2wpIGNvbnN0OwogCi0gICAg
Ym9vbCBuZWVkc1NlY3Rpb25SZWNhbGMoKSBjb25zdCB7IHJldHVybiBuZWVkU2VjdGlvblJlY2Fs
YzsgfQotICAgIHZvaWQgc2V0TmVlZFNlY3Rpb25SZWNhbGMoKSB7IG5lZWRTZWN0aW9uUmVjYWxj
ID0gdHJ1ZTsgfQorICAgIGJvb2wgbmVlZHNTZWN0aW9uUmVjYWxjKCkgY29uc3QgeyByZXR1cm4g
bV9uZWVkc1NlY3Rpb25SZWNhbGM7IH0KKyAgICB2b2lkIHNldE5lZWRzU2VjdGlvblJlY2FsYygp
IHsgbV9uZWVkc1NlY3Rpb25SZWNhbGMgPSB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogcmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCopOwogCkBAIC0xNzQsNDAgKzE3OCw0
OCBAQCBwdWJsaWM6CiAgCiAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUqIGN1cnJlbnRCb3JkZXJT
dHlsZSgpIHsgcmV0dXJuIG1fY3VycmVudEJvcmRlcjsgfQogICAgIAotICAgIGJvb2wgaGFzU2Vj
dGlvbnMoKSBjb25zdCB7IHJldHVybiBoZWFkIHx8IGZvb3QgfHwgZmlyc3RCb2R5OyB9CisgICAg
Ym9vbCBoYXNTZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faGVhZCB8fCBtX2Zvb3QgfHwgbV9m
aXJzdEJvZHk7IH0KIAogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRPdmVyZmxvd0NsaXBSZWN0KGlu
dCB0eCwgaW50IHR5KTsKIAotICAgIHZvaWQgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOworICAg
IHZvaWQgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpCisgICAgeworICAgICAgICBpZiAobV9uZWVk
c1NlY3Rpb25SZWNhbGMpCisgICAgICAgICAgICByZWNhbGNTZWN0aW9ucygpOworICAgIH0KKwor
I2lmbmRlZiBOREVCVUcKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtKiwgRGVwcmVj
YXRlZFN0cmluZyBpbmQgPSAiIikgY29uc3Q7CisjZW5kaWYKIAogcHJpdmF0ZToKICAgICB2b2lk
IHJlY2FsY1NlY3Rpb25zKCk7CiAKLSAgICBmcmllbmQgY2xhc3MgQXV0b1RhYmxlTGF5b3V0Owot
ICAgIGZyaWVuZCBjbGFzcyBGaXhlZFRhYmxlTGF5b3V0OworICAgIFZlY3RvcjxpbnQ+IG1fY29s
dW1uUG9zOworICAgIFZlY3RvcjxDb2x1bW5TdHJ1Y3Q+IG1fY29sdW1uczsKIAotICAgIFJlbmRl
ckJsb2NrKiB0Q2FwdGlvbjsKLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGhlYWQ7Ci0gICAgUmVu
ZGVyVGFibGVTZWN0aW9uKiBmb290OwotICAgIFJlbmRlclRhYmxlU2VjdGlvbiogZmlyc3RCb2R5
OworICAgIFJlbmRlckJsb2NrKiBtX2NhcHRpb247CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBt
X2hlYWQ7CisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBtX2Zvb3Q7CisgICAgUmVuZGVyVGFibGVT
ZWN0aW9uKiBtX2ZpcnN0Qm9keTsKIAotICAgIFRhYmxlTGF5b3V0KiB0YWJsZUxheW91dDsKKyAg
ICBUYWJsZUxheW91dCogbV90YWJsZUxheW91dDsKIAogICAgIENvbGxhcHNlZEJvcmRlclZhbHVl
KiBtX2N1cnJlbnRCb3JkZXI7CiAgICAgCi0gICAgdW5zaWduZWQgZnJhbWUgOiA0OyAvLyBGcmFt
ZQotICAgIHVuc2lnbmVkIHJ1bGVzIDogNDsgLy8gUnVsZXMKKyAgICB1bnNpZ25lZCBtX2ZyYW1l
IDogNDsgLy8gRnJhbWUKKyAgICB1bnNpZ25lZCBtX3J1bGVzIDogNDsgLy8gUnVsZXMKIAotICAg
IGJvb2wgaGFzX2NvbF9lbGVtcyA6IDE7Ci0gICAgdW5zaWduZWQgcGFkZGluZyA6IDIyOwotICAg
IGJvb2wgbmVlZFNlY3Rpb25SZWNhbGMgOiAxOworICAgIGJvb2wgbV9oYXNDb2xFbGVtZW50cyA6
IDE7CisgICAgdW5zaWduZWQgbV9wYWRkaW5nIDogMjI7CisgICAgYm9vbCBtX25lZWRzU2VjdGlv
blJlY2FsYyA6IDE7CiAgICAgCi0gICAgc2hvcnQgaHNwYWNpbmc7Ci0gICAgc2hvcnQgdnNwYWNp
bmc7Ci0gICAgaW50IG1fYm9yZGVyUmlnaHQ7CisgICAgc2hvcnQgbV9oU3BhY2luZzsKKyAgICBz
aG9ydCBtX3ZTcGFjaW5nOwogICAgIGludCBtX2JvcmRlckxlZnQ7CisgICAgaW50IG1fYm9yZGVy
UmlnaHQ7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlm
IC8vIFJlbmRlclRhYmxlX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNw
cAkocmV2aXNpb24gMTg1MTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGVDZWxsLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUYWJsZUNvbC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxUYWJs
ZUNlbGxFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKICNpbmNsdWRlICJU
ZXh0U3RyZWFtLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0zOSw0MCArMzksNDEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1SZW5k
ZXJUYWJsZUNlbGw6OlJlbmRlclRhYmxlQ2VsbChOb2RlKiBfbm9kZSkKLSAgOiBSZW5kZXJCbG9j
ayhfbm9kZSkKK1JlbmRlclRhYmxlQ2VsbDo6UmVuZGVyVGFibGVDZWxsKE5vZGUqIG5vZGUpCisg
ICAgOiBSZW5kZXJCbG9jayhub2RlKQorICAgICwgbV9yb3coLTEpCisgICAgLCBtX2NvbHVtbigt
MSkKKyAgICAsIG1fcm93U3BhbigxKQorICAgICwgbV9jb2x1bW5TcGFuKDEpCisgICAgLCBtX3Rv
cEV4dHJhKDApCisgICAgLCBtX2JvdHRvbUV4dHJhKDApCisgICAgLCBtX3dpZHRoQ2hhbmdlZChm
YWxzZSkKKyAgICAsIG1fcGVyY2VudGFnZUhlaWdodCgwKQogewotICBfY29sID0gLTE7Ci0gIF9y
b3cgPSAtMTsKLSAgY1NwYW4gPSByU3BhbiA9IDE7Ci0gIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0g
IHNldFNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVyKHRydWUpOwotICBfdG9wRXh0cmEgPSAw
OwotICBfYm90dG9tRXh0cmEgPSAwOwotICBtX3BlcmNlbnRhZ2VIZWlnaHQgPSAwOwotICBtX3dp
ZHRoQ2hhbmdlZCA9IGZhbHNlOworICAgIHVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgc2V0U2hv
dWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZUNlbGw6
OmRlc3Ryb3koKQogewogICAgIGlmIChwYXJlbnQoKSAmJiBzZWN0aW9uKCkpCi0gICAgICAgIHNl
Y3Rpb24oKS0+c2V0TmVlZENlbGxSZWNhbGMoKTsKKyAgICAgICAgc2VjdGlvbigpLT5zZXROZWVk
c0NlbGxSZWNhbGMoKTsKIAogICAgIFJlbmRlckJsb2NrOjpkZXN0cm95KCk7CiB9CiAKIHZvaWQg
UmVuZGVyVGFibGVDZWxsOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7Ci0gICAgaW50IG9sZFJTcGFu
ID0gclNwYW47Ci0gICAgaW50IG9sZENTcGFuID0gY1NwYW47CisgICAgaW50IG9sZFJTcGFuID0g
bV9yb3dTcGFuOworICAgIGludCBvbGRDU3BhbiA9IG1fY29sdW1uU3BhbjsKICAgICBOb2RlKiBu
b2RlID0gZWxlbWVudCgpOwogICAgIGlmIChub2RlICYmIChub2RlLT5oYXNUYWdOYW1lKHRkVGFn
KSB8fCBub2RlLT5oYXNUYWdOYW1lKHRoVGFnKSkpIHsKICAgICAgICAgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQqIHRjID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihub2RlKTsKLSAg
ICAgICAgY1NwYW4gPSB0Yy0+Y29sU3BhbigpOwotICAgICAgICByU3BhbiA9IHRjLT5yb3dTcGFu
KCk7CisgICAgICAgIG1fY29sdW1uU3BhbiA9IHRjLT5jb2xTcGFuKCk7CisgICAgICAgIG1fcm93
U3BhbiA9IHRjLT5yb3dTcGFuKCk7CisgICAgICAgIGlmICgob2xkUlNwYW4gIT0gbV9yb3dTcGFu
IHx8IG9sZENTcGFuICE9IG1fY29sdW1uU3BhbikgJiYgc3R5bGUoKSAmJiBwYXJlbnQoKSkKKyAg
ICAgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CiAgICAgfQotICAgIGlm
ICgob2xkUlNwYW4gIT0gclNwYW4gfHwgb2xkQ1NwYW4gIT0gY1NwYW4pICYmIHN0eWxlKCkgJiYg
cGFyZW50KCkpCi0gICAgICAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CiB9CiAK
IExlbmd0aCBSZW5kZXJUYWJsZUNlbGw6OnN0eWxlT3JDb2xXaWR0aCgpCkBAIC04MCw5ICs4MSw5
IEBAIExlbmd0aCBSZW5kZXJUYWJsZUNlbGw6OnN0eWxlT3JDb2xXaWR0aCgKICAgICBMZW5ndGgg
dyA9IHN0eWxlKCktPndpZHRoKCk7CiAgICAgaWYgKGNvbFNwYW4oKSA+IDEgfHwgIXcuaXNBdXRv
KCkpCiAgICAgICAgIHJldHVybiB3OwotICAgIFJlbmRlclRhYmxlQ29sKiBjb2wgPSB0YWJsZSgp
LT5jb2xFbGVtZW50KF9jb2wpOwotICAgIGlmIChjb2wpIHsKLSAgICAgICAgdyA9IGNvbC0+c3R5
bGUoKS0+d2lkdGgoKTsKKyAgICBSZW5kZXJUYWJsZUNvbCogdGFibGVDb2wgPSB0YWJsZSgpLT5j
b2xFbGVtZW50KGNvbCgpKTsKKyAgICBpZiAodGFibGVDb2wpIHsKKyAgICAgICAgdyA9IHRhYmxl
Q29sLT5zdHlsZSgpLT53aWR0aCgpOwogICAgICAgICAKICAgICAgICAgLy8gQ29sdW1uIHdpZHRo
cyBzcGVjaWZpZWQgb24gPGNvbD4gYXBwbHkgdG8gdGhlIGJvcmRlciBib3ggb2YgdGhlIGNlbGwu
CiAgICAgICAgIC8vIFBlcmNlbnRhZ2VzIGRvbid0IG5lZWQgdG8gYmUgaGFuZGxlZCBzaW5jZSB0
aGV5J3JlIGFsd2F5cyB0cmVhdGVkIHRoaXMgd2F5IChldmVuIHdoZW4gc3BlY2lmaWVkIG9uIHRo
ZSBjZWxscykuCkBAIC0xODEsMjIgKzE4MiwyMiBAQCBJbnRSZWN0IFJlbmRlclRhYmxlQ2VsbDo6
Z2V0QWJzb2x1dGVSZXBhCiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpnZXRBYnNvbHV0ZVJlcGFp
bnRSZWN0KCk7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQWJzb2x1dGVSZXBh
aW50UmVjdChJbnRSZWN0JiByLCBib29sIGYpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0
ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmaXhlZCkKIHsKLSAgICByLnNl
dFkoci55KCkgKyBfdG9wRXh0cmEpOworICAgIHIuc2V0WShyLnkoKSArIG1fdG9wRXh0cmEpOwog
ICAgIHIubW92ZSgtcGFyZW50KCktPnhQb3MoKSwgLXBhcmVudCgpLT55UG9zKCkpOyAvLyBSb3dz
IGFyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zm
c2V0IGluLgotICAgIFJlbmRlckJsb2NrOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBm
KTsKKyAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QociwgZml4ZWQp
OwogfQogCi1ib29sIFJlbmRlclRhYmxlQ2VsbDo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQb3Ms
IGludCAmeVBvcywgYm9vbCBmKQorYm9vbCBSZW5kZXJUYWJsZUNlbGw6OmFic29sdXRlUG9zaXRp
b24oaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQpCiB7Ci0gICAgYm9vbCByZXN1bHQg
PSBSZW5kZXJCbG9jazo6YWJzb2x1dGVQb3NpdGlvbih4UG9zLCB5UG9zLCBmKTsKKyAgICBib29s
IHJlc3VsdCA9IFJlbmRlckJsb2NrOjphYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGZpeGVk
KTsKICAgICB4UG9zIC09IHBhcmVudCgpLT54UG9zKCk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1l
IGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCiAgICAgeVBv
cyAtPSBwYXJlbnQoKS0+eVBvcygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXNob3J0IFJl
bmRlclRhYmxlQ2VsbDo6YmFzZWxpbmVQb3NpdGlvbihib29sKSBjb25zdAorc2hvcnQgUmVuZGVy
VGFibGVDZWxsOjpiYXNlbGluZVBvc2l0aW9uKGJvb2wgLypmaXJzdExpbmUqLywgYm9vbCAvKmlz
Um9vdExpbmVCb3gqLykgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIG8gPSBmaXJzdENoaWxk
KCk7CiAgICAgaW50IG9mZnNldCA9IHBhZGRpbmdUb3AoKSArIGJvcmRlclRvcCgpOwpAQCAtMjE2
LDE3ICsyMTcsMTcgQEAgc2hvcnQgUmVuZGVyVGFibGVDZWxsOjpiYXNlbGluZVBvc2l0aW9uKAog
ICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVDZWxsOjpzZXRTdHlsZShS
ZW5kZXJTdHlsZSAqbmV3U3R5bGUpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0U3R5bGUoUmVu
ZGVyU3R5bGUqIG5ld1N0eWxlKQogewogICAgIGlmIChwYXJlbnQoKSAmJiBzZWN0aW9uKCkgJiYg
c3R5bGUoKSAmJiBzdHlsZSgpLT5oZWlnaHQoKSAhPSBuZXdTdHlsZS0+aGVpZ2h0KCkpCi0gICAg
ICAgIHNlY3Rpb24oKS0+c2V0TmVlZENlbGxSZWNhbGMoKTsKKyAgICAgICAgc2VjdGlvbigpLT5z
ZXROZWVkc0NlbGxSZWNhbGMoKTsKIAogICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NF
TEwpOwogCiAgICAgaWYgKG5ld1N0eWxlLT53aGl0ZVNwYWNlKCkgPT0gS0hUTUxfTk9XUkFQKSB7
CiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgYXJlIHJlYWxseSBub3dyYXBwaW5nIG9yIGlm
IHdlIHNob3VsZCBqdXN0CiAgICAgICAgIC8vIHVzZSBub3JtYWwgaW5zdGVhZC4gIElmIHRoZSB3
aWR0aCBvZiB0aGUgY2VsbCBpcyBmaXhlZCwgdGhlbgotICAgICAgICAvLyB3ZSBkb24ndCBhY3R1
YWxseSB1c2UgTk9XUkFQLiAKKyAgICAgICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIE5PV1JB
UC4KICAgICAgICAgaWYgKG5ld1N0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSkKICAgICAgICAgICAg
IG5ld1N0eWxlLT5zZXRXaGl0ZVNwYWNlKE5PUk1BTCk7CiAgICAgICAgIGVsc2UKQEAgLTIzNCw3
ICsyMzUsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0U3R5bGUoUmVuZGVyU3R5CiAgICAg
fQogCiAgICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKG5ld1N0eWxlKTsKLSAgICBzZXRTaG91bGRQ
YWludEJhY2tncm91bmRPckJvcmRlcih0cnVlKTsKKyAgICBzZXRTaG91bGRQYWludEJhY2tncm91
bmRPckJvcmRlcigpOwogfQogCiBib29sIFJlbmRlclRhYmxlQ2VsbDo6cmVxdWlyZXNMYXllcigp
CkBAIC0yNTUsMjEgKzI1NiwyNCBAQCBib29sIFJlbmRlclRhYmxlQ2VsbDo6cmVxdWlyZXNMYXll
cigpCiAvLyAoNCkgSWYgYm9yZGVyIHN0eWxlcyBkaWZmZXIgb25seSBpbiBjb2xvciwgdGhlbiBh
IHN0eWxlIHNldCBvbiBhIGNlbGwgd2lucyBvdmVyIG9uZSBvbiBhIHJvdywgCiAvLyB3aGljaCB3
aW5zIG92ZXIgYSByb3cgZ3JvdXAsIGNvbHVtbiwgY29sdW1uIGdyb3VwIGFuZCwgbGFzdGx5LCB0
YWJsZS4gSXQgaXMgdW5kZWZpbmVkIHdoaWNoIGNvbG9yIAogLy8gaXMgdXNlZCB3aGVuIHR3byBl
bGVtZW50cyBvZiB0aGUgc2FtZSB0eXBlIGRpc2FncmVlLgotc3RhdGljIENvbGxhcHNlZEJvcmRl
clZhbHVlIGNvbXBhcmVCb3JkZXJzKGNvbnN0IENvbGxhcHNlZEJvcmRlclZhbHVlJiBib3JkZXIx
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb2xs
YXBzZWRCb3JkZXJWYWx1ZSYgYm9yZGVyMikKK3N0YXRpYyBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBj
b21wYXJlQm9yZGVycyhjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgYm9yZGVyMSwgY29uc3Qg
Q29sbGFwc2VkQm9yZGVyVmFsdWUmIGJvcmRlcjIpCiB7CiAgICAgLy8gU2FuaXR5IGNoZWNrIHRo
ZSB2YWx1ZXMgcGFzc2VkIGluLiAgSWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiB0aGUgb3RoZXIu
Ci0gICAgaWYgKCFib3JkZXIyLmV4aXN0cygpKSByZXR1cm4gYm9yZGVyMTsKLSAgICBpZiAoIWJv
cmRlcjEuZXhpc3RzKCkpIHJldHVybiBib3JkZXIyOwotICAgIAorICAgIGlmICghYm9yZGVyMi5l
eGlzdHMoKSkKKyAgICAgICAgcmV0dXJuIGJvcmRlcjE7CisgICAgaWYgKCFib3JkZXIxLmV4aXN0
cygpKQorICAgICAgICByZXR1cm4gYm9yZGVyMjsKKwogICAgIC8vIFJ1bGUgIzEgYWJvdmUuCiAg
ICAgaWYgKGJvcmRlcjEuc3R5bGUoKSA9PSBCSElEREVOIHx8IGJvcmRlcjIuc3R5bGUoKSA9PSBC
SElEREVOKQogICAgICAgICByZXR1cm4gQ29sbGFwc2VkQm9yZGVyVmFsdWUoKTsgLy8gTm8gYm9y
ZGVyIHNob3VsZCBleGlzdCBhdCB0aGlzIGxvY2F0aW9uLgogICAgIAogICAgIC8vIFJ1bGUgIzIg
YWJvdmUuICBBIHN0eWxlIG9mICdub25lJyBoYXMgbG93ZXN0IHByaW9yaXR5IGFuZCBhbHdheXMg
bG9zZXMgdG8gYW55IG90aGVyIGJvcmRlci4KLSAgICBpZiAoYm9yZGVyMi5zdHlsZSgpID09IEJO
T05FKSByZXR1cm4gYm9yZGVyMTsKLSAgICBpZiAoYm9yZGVyMS5zdHlsZSgpID09IEJOT05FKSBy
ZXR1cm4gYm9yZGVyMjsKLSAgICAKKyAgICBpZiAoYm9yZGVyMi5zdHlsZSgpID09IEJOT05FKQor
ICAgICAgICByZXR1cm4gYm9yZGVyMTsKKyAgICBpZiAoYm9yZGVyMS5zdHlsZSgpID09IEJOT05F
KQorICAgICAgICByZXR1cm4gYm9yZGVyMjsKKwogICAgIC8vIFRoZSBmaXJzdCBwYXJ0IG9mIHJ1
bGUgIzMgYWJvdmUuIFdpZGVyIGJvcmRlcnMgd2luLgogICAgIGlmIChib3JkZXIxLndpZHRoKCkg
IT0gYm9yZGVyMi53aWR0aCgpKQogICAgICAgICByZXR1cm4gYm9yZGVyMS53aWR0aCgpID4gYm9y
ZGVyMi53aWR0aCgpID8gYm9yZGVyMSA6IGJvcmRlcjI7CkBAIC01OTMsMzEgKzU5NywzMyBAQCB2
b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnQoUGFpbnRJbmZvJiBwCiAKICAgICBpZiAocGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMgJiYgc3R5bGUoKS0+
dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAgaWYgKHR5IC0gdGFibGUoKS0+b3V0
ZXJCb3JkZXJUb3AoKSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8Ci0gICAgICAg
ICAgICAgICAgdHkgKyBfdG9wRXh0cmEgKyBtX2hlaWdodCArIF9ib3R0b21FeHRyYSArIHRhYmxl
KCktPm91dGVyQm9yZGVyQm90dG9tKCkgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCisgICAg
ICAgICAgICAgICAgdHkgKyBtX3RvcEV4dHJhICsgbV9oZWlnaHQgKyBtX2JvdHRvbUV4dHJhICsg
dGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaW50IHcgPSB3aWR0aCgpOwogICAgICAgICBp
bnQgaCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7
CiAgICAgICAgIHBhaW50Q29sbGFwc2VkQm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHks
IHcsIGgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0eSA+PSBwYWludEluZm8ucmVjdC5i
b3R0b20oKSArIG9zIHx8IHR5ICsgX3RvcEV4dHJhICsgbV9oZWlnaHQgKyBfYm90dG9tRXh0cmEg
PD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCisgICAgICAgIGlmICh0eSA+PSBwYWludEluZm8u
cmVjdC5ib3R0b20oKSArIG9zIHx8IHR5ICsgbV90b3BFeHRyYSArIG1faGVpZ2h0ICsgbV9ib3R0
b21FeHRyYSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgdHgsIHR5ICsgX3Rv
cEV4dHJhKTsKKyAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgdHgs
IHR5ICsgbV90b3BFeHRyYSk7CiAgICAgfQogfQogCiBzdGF0aWMgRUJvcmRlclN0eWxlIGNvbGxh
cHNlZEJvcmRlclN0eWxlKEVCb3JkZXJTdHlsZSBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUgPT0g
T1VUU0VUKQotICAgICAgICBzdHlsZSA9IEdST09WRTsKLSAgICBlbHNlIGlmIChzdHlsZSA9PSBJ
TlNFVCkKLSAgICAgICAgc3R5bGUgPSBSSURHRTsKKyAgICAgICAgcmV0dXJuIEdST09WRTsKKyAg
ICBpZiAoc3R5bGUgPT0gSU5TRVQpCisgICAgICAgIHJldHVybiBSSURHRTsKICAgICByZXR1cm4g
c3R5bGU7CiB9CiAKIHN0cnVjdCBDb2xsYXBzZWRCb3JkZXIgewotICAgIENvbGxhcHNlZEJvcmRl
cigpe30KKyAgICBDb2xsYXBzZWRCb3JkZXIoKQorICAgIHsKKyAgICB9CiAgICAgCi0gICAgQ29s
bGFwc2VkQm9yZGVyVmFsdWUgYm9yZGVyOworICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvcmRl
clZhbHVlOwogICAgIFJlbmRlck9iamVjdDo6Qm9yZGVyU2lkZSBzaWRlOwogICAgIGJvb2wgc2hv
dWxkUGFpbnQ7CiAgICAgaW50IHgxOwpAQCAtNjI3LDQxICs2MzMsNDMgQEAgc3RydWN0IENvbGxh
cHNlZEJvcmRlciB7CiAgICAgRUJvcmRlclN0eWxlIHN0eWxlOwogfTsKIAotY2xhc3MgQ29sbGFw
c2VkQm9yZGVycwoteworY2xhc3MgQ29sbGFwc2VkQm9yZGVycyB7CiBwdWJsaWM6Ci0gICAgQ29s
bGFwc2VkQm9yZGVycyhpbnQgaSkgOmNvdW50KDApIHt9CisgICAgQ29sbGFwc2VkQm9yZGVycygp
CisgICAgICAgIDogbV9jb3VudCgwKQorICAgIHsKKyAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRC
b3JkZXIoY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGIsIFJlbmRlck9iamVjdDo6Qm9yZGVy
U2lkZSBzLCBib29sIHBhaW50LCAKLSAgICAgICAgICAgICAgICAgICBpbnQgX3gxLCBpbnQgX3kx
LCBpbnQgX3gyLCBpbnQgX3kyLAotICAgICAgICAgICAgICAgICAgIEVCb3JkZXJTdHlsZSBfc3R5
bGUpCisgICAgdm9pZCBhZGRCb3JkZXIoY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGJvcmRl
clZhbHVlLCBSZW5kZXJPYmplY3Q6OkJvcmRlclNpZGUgYm9yZGVyU2lkZSwgYm9vbCBzaG91bGRQ
YWludCwKKyAgICAgICAgICAgICAgICAgICBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIs
IEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSkKICAgICB7Ci0gICAgICAgIGlmIChiLmV4aXN0cygp
ICYmIHBhaW50KSB7Ci0gICAgICAgICAgICBib3JkZXJzW2NvdW50XS5ib3JkZXIgPSBiOwotICAg
ICAgICAgICAgYm9yZGVyc1tjb3VudF0uc2lkZSA9IHM7Ci0gICAgICAgICAgICBib3JkZXJzW2Nv
dW50XS5zaG91bGRQYWludCA9IHBhaW50OwotICAgICAgICAgICAgYm9yZGVyc1tjb3VudF0ueDEg
PSBfeDE7Ci0gICAgICAgICAgICBib3JkZXJzW2NvdW50XS54MiA9IF94MjsKLSAgICAgICAgICAg
IGJvcmRlcnNbY291bnRdLnkxID0gX3kxOwotICAgICAgICAgICAgYm9yZGVyc1tjb3VudF0ueTIg
PSBfeTI7Ci0gICAgICAgICAgICBib3JkZXJzW2NvdW50XS5zdHlsZSA9IF9zdHlsZTsKLSAgICAg
ICAgICAgIGNvdW50Kys7CisgICAgICAgIGlmIChib3JkZXJWYWx1ZS5leGlzdHMoKSAmJiBzaG91
bGRQYWludCkgeworICAgICAgICAgICAgbV9ib3JkZXJzW21fY291bnRdLmJvcmRlclZhbHVlID0g
Ym9yZGVyVmFsdWU7CisgICAgICAgICAgICBtX2JvcmRlcnNbbV9jb3VudF0uc2lkZSA9IGJvcmRl
clNpZGU7CisgICAgICAgICAgICBtX2JvcmRlcnNbbV9jb3VudF0uc2hvdWxkUGFpbnQgPSBzaG91
bGRQYWludDsKKyAgICAgICAgICAgIG1fYm9yZGVyc1ttX2NvdW50XS54MSA9IHgxOworICAgICAg
ICAgICAgbV9ib3JkZXJzW21fY291bnRdLngyID0geDI7CisgICAgICAgICAgICBtX2JvcmRlcnNb
bV9jb3VudF0ueTEgPSB5MTsKKyAgICAgICAgICAgIG1fYm9yZGVyc1ttX2NvdW50XS55MiA9IHky
OworICAgICAgICAgICAgbV9ib3JkZXJzW21fY291bnRdLnN0eWxlID0gYm9yZGVyU3R5bGU7Cisg
ICAgICAgICAgICBtX2NvdW50Kys7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBDb2xsYXBzZWRC
b3JkZXIqIG5leHRCb3JkZXIoKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgewotICAgICAgICAgICAgaWYgKGJvcmRlcnNbaV0uYm9yZGVyLmV4aXN0cygpICYmIGJv
cmRlcnNbaV0uc2hvdWxkUGFpbnQpIHsKLSAgICAgICAgICAgICAgICBib3JkZXJzW2ldLnNob3Vs
ZFBhaW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZib3JkZXJzW2ldOworICAg
IENvbGxhcHNlZEJvcmRlciogbmV4dEJvcmRlcigpCisgICAgeworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1fY291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKG1fYm9yZGVyc1tpXS5i
b3JkZXJWYWx1ZS5leGlzdHMoKSAmJiBtX2JvcmRlcnNbaV0uc2hvdWxkUGFpbnQpIHsKKyAgICAg
ICAgICAgICAgICBtX2JvcmRlcnNbaV0uc2hvdWxkUGFpbnQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJm1fYm9yZGVyc1tpXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIENvbGxhcHNlZEJvcmRl
ciBib3JkZXJzWzRdOwotICAgIGludCBjb3VudDsKKyAgICBDb2xsYXBzZWRCb3JkZXIgbV9ib3Jk
ZXJzWzRdOworICAgIGludCBtX2NvdW50OwogfTsKIAogc3RhdGljIHZvaWQgYWRkQm9yZGVyU3R5
bGUoRGVwcmVjYXRlZFZhbHVlTGlzdDxDb2xsYXBzZWRCb3JkZXJWYWx1ZT4mIGJvcmRlclN0eWxl
cywgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9yZGVyVmFsdWUpCkBAIC02OTEsNyArNjk5LDcgQEAg
dm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNvbGxlY3RCb3JkZXJzKERlcAogICAgIGFkZEJvcmRlclN0
eWxlKGJvcmRlclN0eWxlcywgY29sbGFwc2VkQm90dG9tQm9yZGVyKCkpOwogfQogCi12b2lkIFJl
bmRlclRhYmxlQ2VsbDo6cGFpbnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiBwLCBp
bnQgX3R4LCBpbnQgX3R5LCBpbnQgdywgaW50IGgpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFp
bnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0
eCwgaW50IHR5LCBpbnQgdywgaW50IGgpCiB7CiAgICAgaWYgKCF0YWJsZSgpLT5jdXJyZW50Qm9y
ZGVyU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzA4LDM4ICs3MTYsMzMgQEAgdm9pZCBS
ZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZAogICAgIGludCBsZWZ0V2lkdGggPSBs
ZWZ0VmFsLndpZHRoKCk7CiAgICAgaW50IHJpZ2h0V2lkdGggPSByaWdodFZhbC53aWR0aCgpOwog
ICAgIAotICAgIF90eCAtPSBsZWZ0V2lkdGggLyAyOwotICAgIF90eSAtPSB0b3BXaWR0aCAvIDI7
CisgICAgdHggLT0gbGVmdFdpZHRoIC8gMjsKKyAgICB0eSAtPSB0b3BXaWR0aCAvIDI7CiAgICAg
dyArPSBsZWZ0V2lkdGggLyAyICsgKHJpZ2h0V2lkdGggKyAxKSAvIDI7CiAgICAgaCArPSB0b3BX
aWR0aCAvIDIgKyAoYm90dG9tV2lkdGggKyAxKSAvIDI7CiAgICAgCi0gICAgYm9vbCB0dCA9IHRv
cFZhbC5pc1RyYW5zcGFyZW50KCk7Ci0gICAgYm9vbCBidCA9IGJvdHRvbVZhbC5pc1RyYW5zcGFy
ZW50KCk7Ci0gICAgYm9vbCBydCA9IHJpZ2h0VmFsLmlzVHJhbnNwYXJlbnQoKTsKLSAgICBib29s
IGx0ID0gbGVmdFZhbC5pc1RyYW5zcGFyZW50KCk7Ci0gICAgCi0gICAgRUJvcmRlclN0eWxlIHRz
ID0gY29sbGFwc2VkQm9yZGVyU3R5bGUodG9wVmFsLnN0eWxlKCkpOwotICAgIEVCb3JkZXJTdHls
ZSBicyA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKGJvdHRvbVZhbC5zdHlsZSgpKTsKLSAgICBFQm9y
ZGVyU3R5bGUgbHMgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZShsZWZ0VmFsLnN0eWxlKCkpOwotICAg
IEVCb3JkZXJTdHlsZSBycyA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKHJpZ2h0VmFsLnN0eWxlKCkp
OwotICAgIAotICAgIGJvb2wgcmVuZGVyX3QgPSB0cyA+IEJISURERU4gJiYgIXR0OwotICAgIGJv
b2wgcmVuZGVyX2wgPSBscyA+IEJISURERU4gJiYgIWx0OwotICAgIGJvb2wgcmVuZGVyX3IgPSBy
cyA+IEJISURERU4gJiYgIXJ0OwotICAgIGJvb2wgcmVuZGVyX2IgPSBicyA+IEJISURERU4gJiYg
IWJ0OworICAgIEVCb3JkZXJTdHlsZSB0b3BTdHlsZSA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKHRv
cFZhbC5zdHlsZSgpKTsKKyAgICBFQm9yZGVyU3R5bGUgYm90dG9tU3R5bGUgPSBjb2xsYXBzZWRC
b3JkZXJTdHlsZShib3R0b21WYWwuc3R5bGUoKSk7CisgICAgRUJvcmRlclN0eWxlIGxlZnRTdHls
ZSA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKGxlZnRWYWwuc3R5bGUoKSk7CisgICAgRUJvcmRlclN0
eWxlIHJpZ2h0U3R5bGUgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZShyaWdodFZhbC5zdHlsZSgpKTsK
KyAgICAKKyAgICBib29sIHJlbmRlclRvcCA9IHRvcFN0eWxlID4gQkhJRERFTiAmJiAhdG9wVmFs
LmlzVHJhbnNwYXJlbnQoKTsKKyAgICBib29sIHJlbmRlckJvdHRvbSA9IGJvdHRvbVN0eWxlID4g
QkhJRERFTiAmJiAhYm90dG9tVmFsLmlzVHJhbnNwYXJlbnQoKTsKKyAgICBib29sIHJlbmRlckxl
ZnQgPSBsZWZ0U3R5bGUgPiBCSElEREVOICYmICFsZWZ0VmFsLmlzVHJhbnNwYXJlbnQoKTsKKyAg
ICBib29sIHJlbmRlclJpZ2h0ID0gcmlnaHRTdHlsZSA+IEJISURERU4gJiYgIXJpZ2h0VmFsLmlz
VHJhbnNwYXJlbnQoKTsKIAogICAgIC8vIFdlIG5ldmVyIHBhaW50IGRpYWdvbmFscyBhdCB0aGUg
am9pbnMuICBXZSBzaW1wbHkgbGV0IHRoZSBib3JkZXIgd2l0aCB0aGUgaGlnaGVzdAogICAgIC8v
IHByZWNlZGVuY2UgcGFpbnQgb24gdG9wIG9mIGJvcmRlcnMgd2l0aCBsb3dlciBwcmVjZWRlbmNl
LiAgCi0gICAgQ29sbGFwc2VkQm9yZGVycyBib3JkZXJzKDQpOwotICAgIGJvcmRlcnMuYWRkQm9y
ZGVyKHRvcFZhbCwgQlNUb3AsIHJlbmRlcl90LCBfdHgsIF90eSwgX3R4ICsgdywgX3R5ICsgdG9w
V2lkdGgsIHRzKTsKLSAgICBib3JkZXJzLmFkZEJvcmRlcihib3R0b21WYWwsIEJTQm90dG9tLCBy
ZW5kZXJfYiwgX3R4LCBfdHkgKyBoIC0gYm90dG9tV2lkdGgsIF90eCArIHcsIF90eSArIGgsIGJz
KTsKLSAgICBib3JkZXJzLmFkZEJvcmRlcihsZWZ0VmFsLCBCU0xlZnQsIHJlbmRlcl9sLCBfdHgs
IF90eSwgX3R4ICsgbGVmdFdpZHRoLCBfdHkgKyBoLCBscyk7Ci0gICAgYm9yZGVycy5hZGRCb3Jk
ZXIocmlnaHRWYWwsIEJTUmlnaHQsIHJlbmRlcl9yLCBfdHggKyB3IC0gcmlnaHRXaWR0aCwgX3R5
LCBfdHggKyB3LCBfdHkgKyBoLCBycyk7CisgICAgQ29sbGFwc2VkQm9yZGVycyBib3JkZXJzOwor
ICAgIGJvcmRlcnMuYWRkQm9yZGVyKHRvcFZhbCwgQlNUb3AsIHJlbmRlclRvcCwgdHgsIHR5LCB0
eCArIHcsIHR5ICsgdG9wV2lkdGgsIHRvcFN0eWxlKTsKKyAgICBib3JkZXJzLmFkZEJvcmRlcihi
b3R0b21WYWwsIEJTQm90dG9tLCByZW5kZXJCb3R0b20sIHR4LCB0eSArIGggLSBib3R0b21XaWR0
aCwgdHggKyB3LCB0eSArIGgsIGJvdHRvbVN0eWxlKTsKKyAgICBib3JkZXJzLmFkZEJvcmRlcihs
ZWZ0VmFsLCBCU0xlZnQsIHJlbmRlckxlZnQsIHR4LCB0eSwgdHggKyBsZWZ0V2lkdGgsIHR5ICsg
aCwgbGVmdFN0eWxlKTsKKyAgICBib3JkZXJzLmFkZEJvcmRlcihyaWdodFZhbCwgQlNSaWdodCwg
cmVuZGVyUmlnaHQsIHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5LCB0eCArIHcsIHR5ICsgaCwgcmln
aHRTdHlsZSk7CiAgICAgCiAgICAgZm9yIChDb2xsYXBzZWRCb3JkZXIqIGJvcmRlciA9IGJvcmRl
cnMubmV4dEJvcmRlcigpOyBib3JkZXI7IGJvcmRlciA9IGJvcmRlcnMubmV4dEJvcmRlcigpKSB7
Ci0gICAgICAgIGlmIChib3JkZXItPmJvcmRlciA9PSAqdGFibGUoKS0+Y3VycmVudEJvcmRlclN0
eWxlKCkpCi0gICAgICAgICAgICBkcmF3Qm9yZGVyKHAsIGJvcmRlci0+eDEsIGJvcmRlci0+eTEs
IGJvcmRlci0+eDIsIGJvcmRlci0+eTIsIGJvcmRlci0+c2lkZSwgCi0gICAgICAgICAgICAgICAg
ICAgICAgIGJvcmRlci0+Ym9yZGVyLmNvbG9yKCksIHN0eWxlKCktPmNvbG9yKCksIGJvcmRlci0+
c3R5bGUsIDAsIDApOworICAgICAgICBpZiAoYm9yZGVyLT5ib3JkZXJWYWx1ZSA9PSAqdGFibGUo
KS0+Y3VycmVudEJvcmRlclN0eWxlKCkpCisgICAgICAgICAgICBkcmF3Qm9yZGVyKGdyYXBoaWNz
Q29udGV4dCwgYm9yZGVyLT54MSwgYm9yZGVyLT55MSwgYm9yZGVyLT54MiwgYm9yZGVyLT55Miwg
Ym9yZGVyLT5zaWRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLT5ib3JkZXJWYWx1
ZS5jb2xvcigpLCBzdHlsZSgpLT5jb2xvcigpLCBib3JkZXItPnN0eWxlLCAwLCAwKTsKICAgICB9
CiB9CiAKQEAgLTc1NCw3ICs3NTcsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNr
Z3JvdW5kc0JlCiAKICAgICBpZiAoYmFja2dyb3VuZE9iamVjdCAhPSB0aGlzKSB7CiAgICAgICAg
IHR4ICs9IG1feDsKLSAgICAgICAgdHkgKz0gbV95ICsgX3RvcEV4dHJhOworICAgICAgICB0eSAr
PSBtX3kgKyBtX3RvcEV4dHJhOwogICAgIH0KIAogICAgIGludCB3ID0gd2lkdGgoKTsKQEAgLTc3
MSwxNSArNzc0LDE1IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludEJhY2tncm91bmRzQmUK
ICAgICBpZiAoYmdMYXllci0+aGFzSW1hZ2UoKSB8fCBjLmlzVmFsaWQoKSkgewogICAgICAgICAv
LyBXZSBoYXZlIHRvIGNsaXAgaGVyZSBiZWNhdXNlIHRoZSBiYWNrZ3JvdW5kIHdvdWxkIHBhaW50
CiAgICAgICAgIC8vIG9uIHRvcCBvZiB0aGUgYm9yZGVycyBvdGhlcndpc2UuICBUaGlzIG9ubHkg
bWF0dGVycyBmb3IgY2VsbHMgYW5kIHJvd3MuCi0gICAgICAgIGJvb2wgaGFzTGF5ZXIgPSBiYWNr
Z3JvdW5kT2JqZWN0LT5sYXllcigpICYmIChiYWNrZ3JvdW5kT2JqZWN0ID09IHRoaXMgfHwgYmFj
a2dyb3VuZE9iamVjdCA9PSBwYXJlbnQoKSk7Ci0gICAgICAgIGlmIChoYXNMYXllciAmJiB0YWJs
ZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCkpIHsKKyAgICAgICAgYm9vbCBzaG91bGRDbGlwID0gYmFj
a2dyb3VuZE9iamVjdC0+bGF5ZXIoKSAmJiAoYmFja2dyb3VuZE9iamVjdCA9PSB0aGlzIHx8IGJh
Y2tncm91bmRPYmplY3QgPT0gcGFyZW50KCkpICYmIHRhYmxlRWx0LT5jb2xsYXBzZUJvcmRlcnMo
KTsKKyAgICAgICAgaWYgKHNob3VsZENsaXApIHsKICAgICAgICAgICAgIEludFJlY3QgY2xpcFJl
Y3QodHggKyBib3JkZXJMZWZ0KCksIHR5ICsgYm9yZGVyVG9wKCksCiAgICAgICAgICAgICAgICAg
dyAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGggLSBib3JkZXJUb3AoKSAtIGJvcmRl
ckJvdHRvbSgpKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAg
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChjbGlwUmVjdCk7CiAgICAgICAgIH0KICAg
ICAgICAgcGFpbnRCYWNrZ3JvdW5kKHBhaW50SW5mby5jb250ZXh0LCBjLCBiZ0xheWVyLCBteSwg
bWgsIHR4LCB0eSwgdywgaCk7Ci0gICAgICAgIGlmIChoYXNMYXllciAmJiB0YWJsZUVsdC0+Y29s
bGFwc2VCb3JkZXJzKCkpCisgICAgICAgIGlmIChzaG91bGRDbGlwKQogICAgICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiB9CkBAIC03OTMsMjUgKzc5NiwyNSBA
QCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCb3hEZWNvcmF0aW9uCiAgICAgLy8gUGFpbnQg
b3VyIGNlbGwgYmFja2dyb3VuZC4KICAgICBwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChwYWlu
dEluZm8sIHR4LCB0eSwgdGhpcyk7CiAKKyAgICBpZiAoIXN0eWxlKCktPmhhc0JvcmRlcigpIHx8
IHRhYmxlRWx0LT5jb2xsYXBzZUJvcmRlcnMoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaW50
IHcgPSB3aWR0aCgpOwogICAgIGludCBoID0gaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsg
Ym9yZGVyQm90dG9tRXh0cmEoKTsKICAgICB0eSAtPSBib3JkZXJUb3BFeHRyYSgpOwotCi0gICAg
aWYgKHN0eWxlKCktPmhhc0JvcmRlcigpICYmICF0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCkp
Ci0gICAgICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0
eWxlKCkpOworICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgs
IHN0eWxlKCkpOwogfQogCiAjaWZuZGVmIE5ERUJVRwotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmR1
bXAoVGV4dFN0cmVhbSAqc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGluZCkgY29uc3QKK3ZvaWQg
UmVuZGVyVGFibGVDZWxsOjpkdW1wKFRleHRTdHJlYW0qIHN0cmVhbSwgRGVwcmVjYXRlZFN0cmlu
ZyBpbmQpIGNvbnN0CiB7Ci0gICAgKnN0cmVhbSA8PCAiIHJvdz0iIDw8IF9yb3c7Ci0gICAgKnN0
cmVhbSA8PCAiIGNvbD0iIDw8IF9jb2w7Ci0gICAgKnN0cmVhbSA8PCAiIHJTcGFuPSIgPDwgclNw
YW47Ci0gICAgKnN0cmVhbSA8PCAiIGNTcGFuPSIgPDwgY1NwYW47Ci0vLyAgICAqc3RyZWFtIDw8
ICIgbldyYXA9IiA8PCBuV3JhcDsKKyAgICAqc3RyZWFtIDw8ICIgcm93PSIgPDwgcm93KCk7Cisg
ICAgKnN0cmVhbSA8PCAiIGNvbD0iIDw8IGNvbCgpOworICAgICpzdHJlYW0gPDwgIiByU3Bhbj0i
IDw8IHJvd1NwYW4oKTsKKyAgICAqc3RyZWFtIDw8ICIgY1NwYW49IiA8PCBjb2xTcGFuKCk7CiAK
ICAgICBSZW5kZXJCbG9jazo6ZHVtcChzdHJlYW0saW5kKTsKIH0KICNlbmRpZgogCi19Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAko
cmV2aXNpb24gMTg1MTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJUYWJsZUNlbGxfSAotI2RlZmluZSBSZW5kZXJU
YWJsZUNlbGxfSAorI2lmbmRlZiBSZW5kZXJUYWJsZUNlbGxfaAorI2RlZmluZSBSZW5kZXJUYWJs
ZUNlbGxfaAogCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgiCiAKQEAgLTM1LDI1ICsz
NSwyOSBAQCBjbGFzcyBSZW5kZXJUYWJsZUNlbGwgOiBwdWJsaWMgUmVuZGVyQmxvCiBwdWJsaWM6
CiAgICAgUmVuZGVyVGFibGVDZWxsKE5vZGUqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
KCk7Ci0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVy
biAiUmVuZGVyVGFibGVDZWxsIjsgfQorCiAgICAgdmlydHVhbCBib29sIGlzVGFibGVDZWxsKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKwog
ICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCBjZWxsSW5kZXgKICAgICBpbnQgY2VsbElu
ZGV4KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZvaWQgc2V0Q2VsbEluZGV4KGludCkgeyB9
CiAKLSAgICBpbnQgY29sU3BhbigpIGNvbnN0IHsgcmV0dXJuIGNTcGFuOyB9Ci0gICAgdm9pZCBz
ZXRDb2xTcGFuKGludCBjKSB7IGNTcGFuID0gYzsgfQorICAgIGludCBjb2xTcGFuKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2x1bW5TcGFuOyB9CisgICAgdm9pZCBzZXRDb2xTcGFuKGludCBjKSB7IG1f
Y29sdW1uU3BhbiA9IGM7IH0KIAotICAgIGludCByb3dTcGFuKCkgY29uc3QgeyByZXR1cm4gclNw
YW47IH0KLSAgICB2b2lkIHNldFJvd1NwYW4oaW50IHIpIHsgclNwYW4gPSByOyB9CisgICAgaW50
IHJvd1NwYW4oKSBjb25zdCB7IHJldHVybiBtX3Jvd1NwYW47IH0KKyAgICB2b2lkIHNldFJvd1Nw
YW4oaW50IHIpIHsgbV9yb3dTcGFuID0gcjsgfQogCi0gICAgaW50IGNvbCgpIGNvbnN0IHsgcmV0
dXJuIF9jb2w7IH0KLSAgICB2b2lkIHNldENvbChpbnQgY29sKSB7IF9jb2wgPSBjb2w7IH0KLSAg
ICBpbnQgcm93KCkgY29uc3QgeyByZXR1cm4gX3JvdzsgfQotICAgIHZvaWQgc2V0Um93KGludCBy
KSB7IF9yb3cgPSByOyB9CisgICAgaW50IGNvbCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uOyB9
CisgICAgdm9pZCBzZXRDb2woaW50IGNvbCkgeyBtX2NvbHVtbiA9IGNvbDsgfQorICAgIGludCBy
b3coKSBjb25zdCB7IHJldHVybiBtX3JvdzsgfQorICAgIHZvaWQgc2V0Um93KGludCByKSB7IG1f
cm93ID0gcjsgfQorCisgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4ocGFyZW50KCktPnBhcmVudCgp
KTsgfQorICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PFJlbmRlclRhYmxlKj4ocGFyZW50KCktPnBhcmVudCgpLT5wYXJlbnQoKSk7IH0KIAogICAgIExl
bmd0aCBzdHlsZU9yQ29sV2lkdGgoKTsKIApAQCAtODUsNDkgKzg5LDQyIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXQoKTsKLSAgICAKLSAgICB2b2lkIHNldENlbGxUb3BFeHRyYShpbnQgcCkgeyBfdG9wRXh0
cmEgPSBwOyB9Ci0gICAgdm9pZCBzZXRDZWxsQm90dG9tRXh0cmEoaW50IHApIHsgX2JvdHRvbUV4
dHJhID0gcDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwg
aW50IHR5KTsKLQorICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5m
byYsIGludCB0eCwgaW50IHR5KTsKICAgICB2b2lkIHBhaW50Q29sbGFwc2VkQm9yZGVyKEdyYXBo
aWNzQ29udGV4dCosIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKTsKLSAgICAKLSAgICAvLyBs
aWUgYWJvdXQgcG9zaXRpb24gdG8gb3V0c2lkZSBvYnNlcnZlcnMKLSAgICB2aXJ0dWFsIGludCB5
UG9zKCkgY29uc3QgeyByZXR1cm4gbV95ICsgX3RvcEV4dHJhOyB9CisgICAgdm9pZCBwYWludEJh
Y2tncm91bmRzQmVoaW5kQ2VsbChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgUmVuZGVyT2Jq
ZWN0KiBiYWNrZ3JvdW5kT2JqZWN0KTsKKworICAgIC8vIExpZSBhYm91dCBwb3NpdGlvbiB0byBv
dXRzaWRlIG9ic2VydmVycy4KKyAgICB2aXJ0dWFsIGludCB5UG9zKCkgY29uc3QgeyByZXR1cm4g
bV95ICsgbV90b3BFeHRyYTsgfQogCiAgICAgdmlydHVhbCBJbnRSZWN0IGdldEFic29sdXRlUmVw
YWludFJlY3QoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3Qo
SW50UmVjdCYsIGJvb2wgZj1mYWxzZSk7Ci0gICAgdmlydHVhbCBib29sIGFic29sdXRlUG9zaXRp
b24oaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZiA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxz
ZSk7CisgICAgdmlydHVhbCBib29sIGFic29sdXRlUG9zaXRpb24oaW50JiB4UG9zLCBpbnQmIHlQ
b3MsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CiAKLSAgICB2aXJ0dWFsIHNob3J0IGJhc2VsaW5lUG9z
aXRpb24oYm9vbCA9IGZhbHNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHNob3J0IGJhc2VsaW5lUG9z
aXRpb24oYm9vbCBmaXJzdExpbmUgPSBmYWxzZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2Up
IGNvbnN0OwogCi0gICAgdmlydHVhbCBpbnQgYm9yZGVyVG9wRXh0cmEoKSBjb25zdCB7IHJldHVy
biBfdG9wRXh0cmE7IH0KLSAgICB2aXJ0dWFsIGludCBib3JkZXJCb3R0b21FeHRyYSgpIGNvbnN0
IHsgcmV0dXJuIF9ib3R0b21FeHRyYTsgfQorICAgIHZvaWQgc2V0Q2VsbFRvcEV4dHJhKGludCBw
KSB7IG1fdG9wRXh0cmEgPSBwOyB9CisgICAgdm9pZCBzZXRDZWxsQm90dG9tRXh0cmEoaW50IHAp
IHsgbV9ib3R0b21FeHRyYSA9IHA7IH0KIAotICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlKj4ocGFyZW50KCktPnBhcmVudCgpLT5w
YXJlbnQoKSk7IH0KLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihwYXJlbnQoKS0+cGFyZW50KCkp
OyB9CisgICAgdmlydHVhbCBpbnQgYm9yZGVyVG9wRXh0cmEoKSBjb25zdCB7IHJldHVybiBtX3Rv
cEV4dHJhOyB9CisgICAgdmlydHVhbCBpbnQgYm9yZGVyQm90dG9tRXh0cmEoKSBjb25zdCB7IHJl
dHVybiBtX2JvdHRvbUV4dHJhOyB9CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgdmlydHVhbCB2b2lk
IGR1bXAoVGV4dFN0cmVhbSAqc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGluZCA9ICIiKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtKiwgRGVwcmVjYXRlZFN0cmluZyBp
bmQgPSAiIikgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kc0JlaGlu
ZENlbGwoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIFJlbmRlck9iamVjdCogYmFja2dyb3Vu
ZE9iamVjdCk7Ci0KIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0KLSAgICBpbnQgX3JvdzsKLSAgICBp
bnQgX2NvbDsKLSAgICBpbnQgclNwYW47Ci0gICAgaW50IGNTcGFuOwotICAgIGludCBfdG9wRXh0
cmEgOiAzMTsKLSAgICBpbnQgX2JvdHRvbUV4dHJhIDogMzE7CisgICAgaW50IG1fcm93OworICAg
IGludCBtX2NvbHVtbjsKKyAgICBpbnQgbV9yb3dTcGFuOworICAgIGludCBtX2NvbHVtblNwYW47
CisgICAgaW50IG1fdG9wRXh0cmEgOiAzMTsKKyAgICBpbnQgbV9ib3R0b21FeHRyYSA6IDMxOwog
ICAgIGJvb2wgbV93aWR0aENoYW5nZWQgOiAxOwotCiAgICAgaW50IG1fcGVyY2VudGFnZUhlaWdo
dDsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8g
UmVuZGVyVGFibGVDZWxsX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJ
KHJldmlzaW9uIDE4NTE3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwu
aCIKKwogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMs
OSArNDQsOCBAQCBSZW5kZXJUYWJsZVJvdzo6UmVuZGVyVGFibGVSb3coTm9kZSogbm9kCiAKIHZv
aWQgUmVuZGVyVGFibGVSb3c6OmRlc3Ryb3koKQogewotICAgIFJlbmRlclRhYmxlU2VjdGlvbiAq
cyA9IHNlY3Rpb24oKTsKLSAgICBpZiAocykKLSAgICAgICAgcy0+c2V0TmVlZENlbGxSZWNhbGMo
KTsKKyAgICBpZiAoUmVuZGVyVGFibGVTZWN0aW9uKiBzID0gc2VjdGlvbigpKQorICAgICAgICBz
LT5zZXROZWVkc0NlbGxSZWNhbGMoKTsKICAgICAKICAgICBSZW5kZXJDb250YWluZXI6OmRlc3Ry
b3koKTsKIH0KQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6ZGVzdHJveSgp
CiB2b2lkIFJlbmRlclRhYmxlUm93OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7
CiAgICAgaWYgKHNlY3Rpb24oKSAmJiBzdHlsZSgpICYmIHN0eWxlKCktPmhlaWdodCgpICE9IG5l
d1N0eWxlLT5oZWlnaHQoKSkKLSAgICAgICAgc2VjdGlvbigpLT5zZXROZWVkQ2VsbFJlY2FsYygp
OworICAgICAgICBzZWN0aW9uKCktPnNldE5lZWRzQ2VsbFJlY2FsYygpOwogCiAgICAgbmV3U3R5
bGUtPnNldERpc3BsYXkoVEFCTEVfUk9XKTsKIApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFJlbmRl
clRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAgICAgIHJldHVybjsKICAgICB9IAog
ICAgIAotICAgIC8vIElmIHRoZSBuZXh0IHJlbmRlcmVyIGlzIGFjdHVhbGx5IHdyYXBwZWQgaW4g
YW4gYW5vbnltb3VzIHRhYmxlIGNlbGwsIHdlIG5lZWQgdG8gZ28gdXAgYW5kIGZpbmQgdGhhdAor
ICAgIC8vIElmIHRoZSBuZXh0IHJlbmRlcmVyIGlzIGFjdHVhbGx5IHdyYXBwZWQgaW4gYW4gYW5v
bnltb3VzIHRhYmxlIGNlbGwsIHdlIG5lZWQgdG8gZ28gdXAgYW5kIGZpbmQgdGhhdC4KICAgICB3
aGlsZSAoYmVmb3JlQ2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc1RhYmxlQ2VsbCgpKQogICAgICAg
ICBiZWZvcmVDaGlsZCA9IGJlZm9yZUNoaWxkLT5wYXJlbnQoKTsKIApAQCAtMTA1LDcgKzEwNSw3
IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamUKICAgICBSZW5kZXJD
b250YWluZXI6OmFkZENoaWxkKGNlbGwsIGJlZm9yZUNoaWxkKTsKIAogICAgIGlmIChiZWZvcmVD
aGlsZCB8fCBuZXh0U2libGluZygpKQotICAgICAgICBzZWN0aW9uKCktPnNldE5lZWRDZWxsUmVj
YWxjKCk7CisgICAgICAgIHNlY3Rpb24oKS0+c2V0TmVlZHNDZWxsUmVjYWxjKCk7CiB9CiAKIHZv
aWQgUmVuZGVyVGFibGVSb3c6OmxheW91dCgpCkBAIC0xMTMsOSArMTEzLDkgQEAgdm9pZCBSZW5k
ZXJUYWJsZVJvdzo6bGF5b3V0KCkKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAgICAgQVNT
RVJUKG1pbk1heEtub3duKCkpOwogCi0gICAgZm9yIChSZW5kZXJPYmplY3QgKmNoaWxkID0gZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ2VsbCgpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwgKmNlbGwgPSBzdGF0aWNfY2FzdDxSZW5kZXJU
YWJsZUNlbGwgKj4oY2hpbGQpOworICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oY2hpbGQpOwogICAgICAgICAgICAgaWYgKGNo
aWxkLT5uZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAgICAgICAgY2VsbC0+Y2FsY1ZlcnRpY2Fs
TWFyZ2lucygpOwogICAgICAgICAgICAgICAgIGNlbGwtPmxheW91dCgpOwpAQCAtMTMwLDExICsx
MzAsMTAgQEAgSW50UmVjdCBSZW5kZXJUYWJsZVJvdzo6Z2V0QWJzb2x1dGVSZXBhaQogICAgIC8v
IEZvciBub3csIGp1c3QgcmVwYWludCB0aGUgd2hvbGUgdGFibGUuCiAgICAgLy8gRklYTUU6IEZp
bmQgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMsIGUuZy4sIG5lZWQgdG8gcmVwYWludCBhbGwgdGhl
IGNlbGxzIHRoYXQgd2UKICAgICAvLyBtaWdodCBoYXZlIHByb3BhZ2F0ZWQgYSBiYWNrZ3JvdW5k
IGNvbG9yIGludG8uCi0gICAgUmVuZGVyVGFibGUqIHBhcmVudFRhYmxlID0gdGFibGUoKTsKLSAg
ICBpZiAocGFyZW50VGFibGUpCisgICAgaWYgKFJlbmRlclRhYmxlKiBwYXJlbnRUYWJsZSA9IHRh
YmxlKCkpCiAgICAgICAgIHJldHVybiBwYXJlbnRUYWJsZS0+Z2V0QWJzb2x1dGVSZXBhaW50UmVj
dCgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIHJldHVybiBJ
bnRSZWN0KCk7CiB9CiAKIC8vIEhpdCBUZXN0aW5nCkBAIC0xNTgsNyArMTU3LDcgQEAgYm9vbCBS
ZW5kZXJUYWJsZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSAogCiB2b2lkIFJlbmRlclRhYmxlUm93
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgYXNz
ZXJ0KG1fbGF5ZXIpOworICAgIEFTU0VSVChtX2xheWVyKTsKICAgICBpZiAoIW1fbGF5ZXIpCiAg
ICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCShyZXZp
c2lvbiAxODUxNykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDI0ICsyNCwyOSBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJUYWJsZVJvd19ICi0jZGVmaW5lIFJlbmRlclRhYmxl
Um93X0gKKyNpZm5kZWYgUmVuZGVyVGFibGVSb3dfaAorI2RlZmluZSBSZW5kZXJUYWJsZVJvd19o
CiAKICNpbmNsdWRlICJSZW5kZXJUYWJsZVNlY3Rpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBSZW5kZXJUYWJsZVJvdyA6IHB1YmxpYyBSZW5kZXJDb250YWluZXIKLXsKK2Ns
YXNzIFJlbmRlclRhYmxlUm93IDogcHVibGljIFJlbmRlckNvbnRhaW5lciB7CiBwdWJsaWM6CiAg
ICAgUmVuZGVyVGFibGVSb3coTm9kZSopOwogCi0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyVGFibGVSb3ciOyB9
CisKICAgICB2aXJ0dWFsIGJvb2wgaXNUYWJsZVJvdygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisKKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24q
IHNlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24q
PihwYXJlbnQoKSk7IH0KKyAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBhcmVudCgpLT5wYXJlbnQoKSk7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9pZCBhZGRD
aGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7
Ci0gICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290
TGluZUJveCA9IGZhbHNlKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIHBv
c2l0aW9uKElubGluZUJveCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2
aXJ0dWFsIEludFJlY3QgZ2V0QWJzb2x1dGVSZXBhaW50UmVjdCgpOwpAQCAtNTEsMTEgKzU2LDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgeyByZXR1cm4gaXNU
cmFuc3BhcmVudCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotCi0gICAgUmVuZGVyVGFibGUqIHRh
YmxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihwYXJlbnQoKS0+
cGFyZW50KCkpOyB9Ci0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4ocGFyZW50KCkpOyB9CiB9Owog
Ci19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlclRh
YmxlUm93X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAko
cmV2aXNpb24gMTg1MTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKIAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgog
I2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTQ1LDE3ICs0NSwxNyBAQCB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBSZW5kZXJUYWJsZVNlY3Rpb246OlJlbmRlclRh
YmxlU2VjdGlvbihOb2RlKiBub2RlKQogICAgIDogUmVuZGVyQ29udGFpbmVyKG5vZGUpCisgICAg
LCBtX2dyaWRSb3dzKDApCisgICAgLCBtX2NDb2woMCkKKyAgICAsIG1fY1JvdygtMSkKKyAgICAs
IG1fbmVlZHNDZWxsUmVjYWxjKGZhbHNlKQorICAgICwgbV9vdXRlckJvcmRlckxlZnQoMCkKKyAg
ICAsIG1fb3V0ZXJCb3JkZXJSaWdodCgwKQorICAgICwgbV9vdXRlckJvcmRlclRvcCgwKQorICAg
ICwgbV9vdXRlckJvcmRlckJvdHRvbSgwKQogewogICAgIC8vIGluaXQgUmVuZGVyT2JqZWN0IGF0
dHJpYnV0ZXMKICAgICBzZXRJbmxpbmUoZmFsc2UpOyAgIC8vIG91ciBvYmplY3QgaXMgbm90IElu
bGluZQotICAgIGdyaWRSb3dzID0gMDsKLSAgICBjQ29sID0gMDsKLSAgICBjUm93ID0gLTE7Ci0g
ICAgbmVlZENlbGxSZWNhbGMgPSBmYWxzZTsKLSAgICBtX291dGVyQm9yZGVyTGVmdCA9IDA7Ci0g
ICAgbV9vdXRlckJvcmRlclJpZ2h0ID0gMDsKLSAgICBtX291dGVyQm9yZGVyVG9wID0gMDsKLSAg
ICBtX291dGVyQm9yZGVyQm90dG9tID0gMDsKIH0KIAogUmVuZGVyVGFibGVTZWN0aW9uOjp+UmVu
ZGVyVGFibGVTZWN0aW9uKCkKQEAgLTY4LDIwICs2OCwyMCBAQCB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6ZGVzdHJveSgpCiAgICAgLy8gcmVjYWxjIGNlbGwgaW5mbyBiZWNhdXNlIFJlbmRlclRh
YmxlIGhhcyB1bmd1YXJkZWQgcG9pbnRlcnMKICAgICAvLyBzdG9yZWQgdGhhdCBwb2ludCB0byB0
aGlzIFJlbmRlclRhYmxlU2VjdGlvbi4KICAgICBpZiAodGFibGUoKSkKLSAgICAgICAgdGFibGUo
KS0+c2V0TmVlZFNlY3Rpb25SZWNhbGMoKTsKKyAgICAgICAgdGFibGUoKS0+c2V0TmVlZHNTZWN0
aW9uUmVjYWxjKCk7CiAKICAgICBSZW5kZXJDb250YWluZXI6OmRlc3Ryb3koKTsKIH0KIAotdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNldFN0eWxlKFJlbmRlclN0eWxlKiBfc3R5bGUpCit2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQogewog
ICAgIC8vIHdlIGRvbid0IGFsbG93IGNoYW5naW5nIHRoaXMgb25lCiAgICAgaWYgKHN0eWxlKCkp
Ci0gICAgICAgIF9zdHlsZS0+c2V0RGlzcGxheShzdHlsZSgpLT5kaXNwbGF5KCkpOwotICAgIGVs
c2UgaWYgKF9zdHlsZS0+ZGlzcGxheSgpICE9IFRBQkxFX0ZPT1RFUl9HUk9VUCAmJiBfc3R5bGUt
PmRpc3BsYXkoKSAhPSBUQUJMRV9IRUFERVJfR1JPVVApCi0gICAgICAgIF9zdHlsZS0+c2V0RGlz
cGxheShUQUJMRV9ST1dfR1JPVVApOworICAgICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShzdHls
ZSgpLT5kaXNwbGF5KCkpOworICAgIGVsc2UgaWYgKG5ld1N0eWxlLT5kaXNwbGF5KCkgIT0gVEFC
TEVfRk9PVEVSX0dST1VQICYmIG5ld1N0eWxlLT5kaXNwbGF5KCkgIT0gVEFCTEVfSEVBREVSX0dS
T1VQKQorICAgICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShUQUJMRV9ST1dfR1JPVVApOwogCi0g
ICAgUmVuZGVyQ29udGFpbmVyOjpzZXRTdHlsZShfc3R5bGUpOworICAgIFJlbmRlckNvbnRhaW5l
cjo6c2V0U3R5bGUobmV3U3R5bGUpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRk
Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKQEAg
LTEyMywyMSArMTIzLDIxIEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5k
ZXIKICAgICB9CiAKICAgICBpZiAoYmVmb3JlQ2hpbGQpCi0gICAgICAgIHNldE5lZWRDZWxsUmVj
YWxjKCk7CisgICAgICAgIHNldE5lZWRzQ2VsbFJlY2FsYygpOwogCi0gICAgKytjUm93OwotICAg
IGNDb2wgPSAwOworICAgICsrbV9jUm93OworICAgIG1fY0NvbCA9IDA7CiAKLSAgICBlbnN1cmVS
b3dzKGNSb3cgKyAxKTsKLSAgICBncmlkW2NSb3ddLnJvd1JlbmRlcmVyID0gY2hpbGQ7CisgICAg
ZW5zdXJlUm93cyhtX2NSb3cgKyAxKTsKKyAgICBtX2dyaWRbbV9jUm93XS5yb3dSZW5kZXJlciA9
IGNoaWxkOwogCiAgICAgaWYgKCFiZWZvcmVDaGlsZCkgewotICAgICAgICBncmlkW2NSb3ddLmhl
aWdodCA9IGNoaWxkLT5zdHlsZSgpLT5oZWlnaHQoKTsKLSAgICAgICAgaWYgKGdyaWRbY1Jvd10u
aGVpZ2h0LmlzUmVsYXRpdmUoKSkKLSAgICAgICAgICAgIGdyaWRbY1Jvd10uaGVpZ2h0ID0gTGVu
Z3RoKCk7CisgICAgICAgIG1fZ3JpZFttX2NSb3ddLmhlaWdodCA9IGNoaWxkLT5zdHlsZSgpLT5o
ZWlnaHQoKTsKKyAgICAgICAgaWYgKG1fZ3JpZFttX2NSb3ddLmhlaWdodC5pc1JlbGF0aXZlKCkp
CisgICAgICAgICAgICBtX2dyaWRbbV9jUm93XS5oZWlnaHQgPSBMZW5ndGgoKTsKICAgICB9CiAK
LSAgICAvLyBJZiB0aGUgbmV4dCByZW5kZXJlciBpcyBhY3R1YWxseSB3cmFwcGVkIGluIGFuIGFu
b255bW91cyB0YWJsZSByb3csIHdlIG5lZWQgdG8gZ28gdXAgYW5kIGZpbmQgdGhhdAorICAgIC8v
IElmIHRoZSBuZXh0IHJlbmRlcmVyIGlzIGFjdHVhbGx5IHdyYXBwZWQgaW4gYW4gYW5vbnltb3Vz
IHRhYmxlIHJvdywgd2UgbmVlZCB0byBnbyB1cCBhbmQgZmluZCB0aGF0LgogICAgIHdoaWxlIChi
ZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzVGFibGVSb3coKSkKICAgICAgICAgYmVmb3Jl
Q2hpbGQgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7CiAKQEAgLTE0NiwyNCArMTQ2LDI0IEBAIHZv
aWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXIKIAogYm9vbCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmVuc3VyZVJvd3MoaW50IG51bVJvd3MpCiB7Ci0gICAgaW50IG5Sb3dzID0gZ3Jp
ZFJvd3M7CisgICAgaW50IG5Sb3dzID0gbV9ncmlkUm93czsKICAgICBpZiAobnVtUm93cyA+IG5S
b3dzKSB7Ci0gICAgICAgIGlmIChudW1Sb3dzID4gc3RhdGljX2Nhc3Q8aW50PihncmlkLnNpemUo
KSkpIHsKKyAgICAgICAgaWYgKG51bVJvd3MgPiBzdGF0aWNfY2FzdDxpbnQ+KG1fZ3JpZC5zaXpl
KCkpKSB7CiAgICAgICAgICAgICBpZiAobnVtUm93cyA+IHN0YXRpY19jYXN0PGludD4obnVtZXJp
Y19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoUm93U3RydWN0KSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZ3JpZC5yZXNpemUobnVtUm93cyk7Cisg
ICAgICAgICAgICBtX2dyaWQucmVzaXplKG51bVJvd3MpOwogICAgICAgICB9Ci0gICAgICAgIGdy
aWRSb3dzID0gbnVtUm93czsKKyAgICAgICAgbV9ncmlkUm93cyA9IG51bVJvd3M7CiAgICAgICAg
IGludCBuQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKICAgICAgICAgQ2VsbFN0cnVjdCBl
bXB0eUNlbGxTdHJ1Y3Q7CiAgICAgICAgIGVtcHR5Q2VsbFN0cnVjdC5jZWxsID0gMDsKICAgICAg
ICAgZW1wdHlDZWxsU3RydWN0LmluQ29sU3BhbiA9IGZhbHNlOwogICAgICAgICBmb3IgKGludCBy
ID0gblJvd3M7IHIgPCBudW1Sb3dzOyByKyspIHsKLSAgICAgICAgICAgIGdyaWRbcl0ucm93ID0g
bmV3IFJvdyhuQ29scyk7Ci0gICAgICAgICAgICBncmlkW3JdLnJvdy0+ZmlsbChlbXB0eUNlbGxT
dHJ1Y3QpOwotICAgICAgICAgICAgZ3JpZFtyXS5yb3dSZW5kZXJlciA9IDA7Ci0gICAgICAgICAg
ICBncmlkW3JdLmJhc2VMaW5lID0gMDsKLSAgICAgICAgICAgIGdyaWRbcl0uaGVpZ2h0ID0gTGVu
Z3RoKCk7CisgICAgICAgICAgICBtX2dyaWRbcl0ucm93ID0gbmV3IFJvdyhuQ29scyk7CisgICAg
ICAgICAgICBtX2dyaWRbcl0ucm93LT5maWxsKGVtcHR5Q2VsbFN0cnVjdCk7CisgICAgICAgICAg
ICBtX2dyaWRbcl0ucm93UmVuZGVyZXIgPSAwOworICAgICAgICAgICAgbV9ncmlkW3JdLmJhc2VM
aW5lID0gMDsKKyAgICAgICAgICAgIG1fZ3JpZFtyXS5oZWlnaHQgPSBMZW5ndGgoKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9u
OjphZGRDZWxsKFJlbmRlclQKIHsKICAgICBpbnQgclNwYW4gPSBjZWxsLT5yb3dTcGFuKCk7CiAg
ICAgaW50IGNTcGFuID0gY2VsbC0+Y29sU3BhbigpOwotICAgIFZlY3RvcjxSZW5kZXJUYWJsZTo6
Q29sdW1uU3RydWN0PiYgY29sdW1ucyA9IHRhYmxlKCktPmNvbHVtbnM7CisgICAgVmVjdG9yPFJl
bmRlclRhYmxlOjpDb2x1bW5TdHJ1Y3Q+JiBjb2x1bW5zID0gdGFibGUoKS0+Y29sdW1ucygpOwog
ICAgIGludCBuQ29scyA9IGNvbHVtbnMuc2l6ZSgpOwogCiAgICAgLy8gIyMjIG1vemlsbGEgc3Rp
bGwgc2VlbXMgdG8gZG8gdGhlIG9sZCBIVE1MIHdheSwgZXZlbiBmb3Igc3RyaWN0IERURApAQCAt
MTg0LDI0ICsxODQsMjQgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwoUmVuZGVy
VAogICAgIC8vIDxUUj48VEQgY29sc3Bhbj0iMiI+NQogICAgIC8vIDwvVEFCTEU+CiAKLSAgICB3
aGlsZSAoY0NvbCA8IG5Db2xzICYmIChjZWxsQXQoY1JvdywgY0NvbCkuY2VsbCB8fCBjZWxsQXQo
Y1JvdywgY0NvbCkuaW5Db2xTcGFuKSkKLSAgICAgICAgY0NvbCsrOworICAgIHdoaWxlIChtX2ND
b2wgPCBuQ29scyAmJiAoY2VsbEF0KG1fY1JvdywgbV9jQ29sKS5jZWxsIHx8IGNlbGxBdChtX2NS
b3csIG1fY0NvbCkuaW5Db2xTcGFuKSkKKyAgICAgICAgbV9jQ29sKys7CiAKICAgICBpZiAoclNw
YW4gPT0gMSkgewogICAgICAgICAvLyB3ZSBpZ25vcmUgaGVpZ2h0IHNldHRpbmdzIG9uIHJvd3Nw
YW4gY2VsbHMKICAgICAgICAgTGVuZ3RoIGhlaWdodCA9IGNlbGwtPnN0eWxlKCktPmhlaWdodCgp
OwogICAgICAgICBpZiAoaGVpZ2h0LnZhbHVlKCkgPiAwIHx8IChoZWlnaHQuaXNSZWxhdGl2ZSgp
ICYmIGhlaWdodC52YWx1ZSgpID49IDApKSB7Ci0gICAgICAgICAgICBMZW5ndGggY1Jvd0hlaWdo
dCA9IGdyaWRbY1Jvd10uaGVpZ2h0OworICAgICAgICAgICAgTGVuZ3RoIGNSb3dIZWlnaHQgPSBt
X2dyaWRbbV9jUm93XS5oZWlnaHQ7CiAgICAgICAgICAgICBzd2l0Y2ggKGhlaWdodC50eXBlKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIFBlcmNlbnQ6CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghKGNSb3dIZWlnaHQuaXNQZXJjZW50KCkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAo
Y1Jvd0hlaWdodC5pc1BlcmNlbnQoKSAmJiBjUm93SGVpZ2h0LnZhbHVlKCkgPCBoZWlnaHQudmFs
dWUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBncmlkW2NSb3ddLmhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JpZFttX2NSb3ddLmhlaWdodCA9IGhlaWdo
dDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
Rml4ZWQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIChjUm93SGVpZ2h0LnR5cGUoKSA8IFBlcmNl
bnQgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIChjUm93SGVpZ2h0LmlzRml4ZWQoKSAmJiBj
Um93SGVpZ2h0LnZhbHVlKCkgPCBoZWlnaHQudmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBncmlkW2NSb3ddLmhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JpZFttX2NSb3ddLmhlaWdodCA9IGhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZToKICAgICAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMjExLDY1ICsyMTEsNjIgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENl
bGwoUmVuZGVyVAogICAgIH0KIAogICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCByb3dz
Ci0gICAgaWYgKCFlbnN1cmVSb3dzKGNSb3cgKyByU3BhbikpCisgICAgaWYgKCFlbnN1cmVSb3dz
KG1fY1JvdyArIHJTcGFuKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ3JpZFtjUm93XS5yb3dS
ZW5kZXJlciA9IHJvdzsKKyAgICBtX2dyaWRbbV9jUm93XS5yb3dSZW5kZXJlciA9IHJvdzsKIAot
ICAgIGludCBjb2wgPSBjQ29sOworICAgIGludCBjb2wgPSBtX2NDb2w7CiAgICAgLy8gdGVsbCB0
aGUgY2VsbCB3aGVyZSBpdCBpcwogICAgIENlbGxTdHJ1Y3QgY3VycmVudENlbGw7CiAgICAgY3Vy
cmVudENlbGwuY2VsbCA9IGNlbGw7CiAgICAgY3VycmVudENlbGwuaW5Db2xTcGFuID0gZmFsc2U7
CiAgICAgd2hpbGUgKGNTcGFuKSB7CiAgICAgICAgIGludCBjdXJyZW50U3BhbjsKLSAgICAgICAg
aWYgKGNDb2wgPj0gbkNvbHMpIHsKKyAgICAgICAgaWYgKG1fY0NvbCA+PSBuQ29scykgewogICAg
ICAgICAgICAgdGFibGUoKS0+YXBwZW5kQ29sdW1uKGNTcGFuKTsKICAgICAgICAgICAgIGN1cnJl
bnRTcGFuID0gY1NwYW47CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY1NwYW4g
PCBjb2x1bW5zW2NDb2xdLnNwYW4pCi0gICAgICAgICAgICAgICAgdGFibGUoKS0+c3BsaXRDb2x1
bW4oY0NvbCwgY1NwYW4pOwotICAgICAgICAgICAgY3VycmVudFNwYW4gPSBjb2x1bW5zW2NDb2xd
LnNwYW47CisgICAgICAgICAgICBpZiAoY1NwYW4gPCBjb2x1bW5zW21fY0NvbF0uc3BhbikKKyAg
ICAgICAgICAgICAgICB0YWJsZSgpLT5zcGxpdENvbHVtbihtX2NDb2wsIGNTcGFuKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRTcGFuID0gY29sdW1uc1ttX2NDb2xdLnNwYW47CiAgICAgICAgIH0KIAog
ICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJTcGFuOyByKyspIHsKLSAgICAgICAgICAgIENl
bGxTdHJ1Y3QmIGMgPSBjZWxsQXQoY1JvdyArIHIsIGNDb2wpOworICAgICAgICAgICAgQ2VsbFN0
cnVjdCYgYyA9IGNlbGxBdChtX2NSb3cgKyByLCBtX2NDb2wpOwogICAgICAgICAgICAgaWYgKGN1
cnJlbnRDZWxsLmNlbGwgJiYgIWMuY2VsbCkKICAgICAgICAgICAgICAgICBjLmNlbGwgPSBjdXJy
ZW50Q2VsbC5jZWxsOwogICAgICAgICAgICAgaWYgKGN1cnJlbnRDZWxsLmluQ29sU3BhbikKICAg
ICAgICAgICAgICAgICBjLmluQ29sU3BhbiA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgY0Nv
bCsrOworICAgICAgICBtX2NDb2wrKzsKICAgICAgICAgY1NwYW4gLT0gY3VycmVudFNwYW47CiAg
ICAgICAgIGN1cnJlbnRDZWxsLmNlbGwgPSAwOwogICAgICAgICBjdXJyZW50Q2VsbC5pbkNvbFNw
YW4gPSB0cnVlOwogICAgIH0KICAgICBpZiAoY2VsbCkgewotICAgICAgICBjZWxsLT5zZXRSb3co
Y1Jvdyk7CisgICAgICAgIGNlbGwtPnNldFJvdyhtX2NSb3cpOwogICAgICAgICBjZWxsLT5zZXRD
b2wodGFibGUoKS0+ZWZmQ29sVG9Db2woY29sKSk7CiAgICAgfQogfQogCi0KLQogdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OnNldENlbGxXaWR0aHMoKQogewotICAgIFZlY3RvcjxpbnQ+JiBjb2x1
bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3M7CisgICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9
IHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpOwogCi0gICAgaW50IHJvd3MgPSBncmlkUm93czsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykgewotICAgICAgICBSb3cgJnJvdyA9
ICpncmlkW2ldLnJvdzsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fZ3JpZFJvd3M7IGkrKykg
eworICAgICAgICBSb3cmIHJvdyA9ICptX2dyaWRbaV0ucm93OwogICAgICAgICBpbnQgY29scyA9
IHJvdy5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgY29sczsgaisrKSB7CiAg
ICAgICAgICAgICBDZWxsU3RydWN0IGN1cnJlbnQgPSByb3dbal07Ci0gICAgICAgICAgICBSZW5k
ZXJUYWJsZUNlbGwgKmNlbGwgPSBjdXJyZW50LmNlbGw7CisgICAgICAgICAgICBSZW5kZXJUYWJs
ZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGw7CiAKICAgICAgICAgICAgIGlmICghY2VsbCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGludCBlbmRDb2wgPSBqOwogICAg
ICAgICAgICAgaW50IGNzcGFuID0gY2VsbC0+Y29sU3BhbigpOwogICAgICAgICAgICAgd2hpbGUg
KGNzcGFuICYmIGVuZENvbCA8IGNvbHMpIHsKLSAgICAgICAgICAgICAgICBjc3BhbiAtPSB0YWJs
ZSgpLT5jb2x1bW5zW2VuZENvbF0uc3BhbjsKKyAgICAgICAgICAgICAgICBjc3BhbiAtPSB0YWJs
ZSgpLT5jb2x1bW5zKClbZW5kQ29sXS5zcGFuOwogICAgICAgICAgICAgICAgIGVuZENvbCsrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaW50IHcgPSBjb2x1bW5Qb3NbZW5kQ29sXSAtIGNv
bHVtblBvc1tqXSAtIHRhYmxlKCktPmhCb3JkZXJTcGFjaW5nKCk7CkBAIC0yODUsNDMgKzI4Miwz
OCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q2VsbFdpZHRocygpCiAgICAgfQogfQog
Ci0KIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93SGVpZ2h0KCkKIHsKLSAgICBpbnQg
aW5keDsKLSAgICBSZW5kZXJUYWJsZUNlbGwgKmNlbGw7CisgICAgUmVuZGVyVGFibGVDZWxsKiBj
ZWxsOwogCi0gICAgaW50IHRvdGFsUm93cyA9IGdyaWRSb3dzOwogICAgIGludCBzcGFjaW5nID0g
dGFibGUoKS0+dkJvcmRlclNwYWNpbmcoKTsKIAotICAgIHJvd1Bvcy5yZXNpemUodG90YWxSb3dz
ICsgMSk7Ci0gICAgcm93UG9zWzBdID0gc3BhY2luZzsKKyAgICBtX3Jvd1Bvcy5yZXNpemUobV9n
cmlkUm93cyArIDEpOworICAgIG1fcm93UG9zWzBdID0gc3BhY2luZzsKIAotICAgIGZvciAoaW50
IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKLSAgICAgICAgcm93UG9zW3IgKyAxXSA9IDA7
CisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtX2dyaWRSb3dzOyByKyspIHsKKyAgICAgICAgbV9y
b3dQb3NbciArIDFdID0gMDsKIAogICAgICAgICBpbnQgYmFzZWxpbmUgPSAwOwogICAgICAgICBp
bnQgYmRlc2MgPSAwOwotICAgICAgICBpbnQgY2ggPSBncmlkW3JdLmhlaWdodC5jYWxjTWluVmFs
dWUoMCk7Ci0gICAgICAgIGludCBwb3MgPSByb3dQb3Nbcl0gKyBjaCArIChncmlkW3JdLnJvd1Jl
bmRlcmVyID8gc3BhY2luZyA6IDApOworICAgICAgICBpbnQgY2ggPSBtX2dyaWRbcl0uaGVpZ2h0
LmNhbGNNaW5WYWx1ZSgwKTsKKyAgICAgICAgaW50IHBvcyA9IG1fcm93UG9zW3JdICsgY2ggKyAo
bV9ncmlkW3JdLnJvd1JlbmRlcmVyID8gc3BhY2luZyA6IDApOwogCi0gICAgICAgIGlmIChwb3Mg
PiByb3dQb3NbciArIDFdKQotICAgICAgICAgICAgcm93UG9zW3IgKyAxXSA9IHBvczsKKyAgICAg
ICAgaWYgKHBvcyA+IG1fcm93UG9zW3IgKyAxXSkKKyAgICAgICAgICAgIG1fcm93UG9zW3IgKyAx
XSA9IHBvczsKIAotICAgICAgICBSb3cgKnJvdyA9IGdyaWRbcl0ucm93OworICAgICAgICBSb3cq
IHJvdyA9IG1fZ3JpZFtyXS5yb3c7CiAgICAgICAgIGludCB0b3RhbENvbHMgPSByb3ctPnNpemUo
KTsKLSAgICAgICAgaW50IHRvdGFsUm93cyA9IGdyaWRSb3dzOwogCiAgICAgICAgIGZvciAoaW50
IGMgPSAwOyBjIDwgdG90YWxDb2xzOyBjKyspIHsKICAgICAgICAgICAgIENlbGxTdHJ1Y3QgY3Vy
cmVudCA9IGNlbGxBdChyLCBjKTsKICAgICAgICAgICAgIGNlbGwgPSBjdXJyZW50LmNlbGw7CiAg
ICAgICAgICAgICBpZiAoIWNlbGwgfHwgY3VycmVudC5pbkNvbFNwYW4pCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAociA8IHRvdGFsUm93cyAtIDEgJiYgY2VsbEF0
KHIgKyAxLCBjKS5jZWxsID09IGNlbGwpCisgICAgICAgICAgICBpZiAociA8IG1fZ3JpZFJvd3Mg
LSAxICYmIGNlbGxBdChyICsgMSwgYykuY2VsbCA9PSBjZWxsKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgICAgICBpZiAoKGluZHggPSByIC0gY2VsbC0+cm93U3BhbigpICsg
MSkgPCAwKQotICAgICAgICAgICAgICAgIGluZHggPSAwOworICAgICAgICAgICAgaW50IGluZHgg
PSBtYXgociAtIGNlbGwtPnJvd1NwYW4oKSArIDEsIDApOwogCiAgICAgICAgICAgICBpZiAoY2Vs
bC0+b3ZlcnJpZGVTaXplKCkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICBjZWxsLT5zZXRPdmVy
cmlkZVNpemUoLTEpOwpAQCAtMzM0LDI2ICszMjYsMjAgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rp
b246OmNhbGNSb3dIZWlnaHQoKQogICAgICAgICAgICAgY2ggPSBjZWxsLT5zdHlsZSgpLT5oZWln
aHQoKS5jYWxjVmFsdWUoMCkgKyAKICAgICAgICAgICAgICAgICAoY2VsbC0+c3R5bGUoKS0+aHRt
bEhhY2tzKCkgPyAwIDogKGNlbGwtPnBhZGRpbmdUb3AoKSArIGNlbGwtPnBhZGRpbmdCb3R0b20o
KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
ZWxsLT5ib3JkZXJUb3AoKSArIGNlbGwtPmJvcmRlckJvdHRvbSgpKSk7Ci0gICAgICAgICAgICBp
ZiAoY2VsbC0+aGVpZ2h0KCkgPiBjaCkKLSAgICAgICAgICAgICAgICBjaCA9IGNlbGwtPmhlaWdo
dCgpOworICAgICAgICAgICAgY2ggPSBtYXgoY2gsIGNlbGwtPmhlaWdodCgpKTsKIAotICAgICAg
ICAgICAgcG9zID0gcm93UG9zW2luZHhdICsgY2ggKyAoZ3JpZFtyXS5yb3dSZW5kZXJlciA/IHNw
YWNpbmcgOiAwKTsKKyAgICAgICAgICAgIHBvcyA9IG1fcm93UG9zW2luZHhdICsgY2ggKyAobV9n
cmlkW3JdLnJvd1JlbmRlcmVyID8gc3BhY2luZyA6IDApOwogCi0gICAgICAgICAgICBpZiAocG9z
ID4gcm93UG9zW3IgKyAxXSkKLSAgICAgICAgICAgICAgICByb3dQb3NbciArIDFdID0gcG9zOwor
ICAgICAgICAgICAgaWYgKHBvcyA+IG1fcm93UG9zW3IgKyAxXSkKKyAgICAgICAgICAgICAgICBt
X3Jvd1Bvc1tyICsgMV0gPSBwb3M7CiAKICAgICAgICAgICAgIC8vIGZpbmQgb3V0IHRoZSBiYXNl
bGluZQogICAgICAgICAgICAgRVZlcnRpY2FsQWxpZ24gdmEgPSBjZWxsLT5zdHlsZSgpLT52ZXJ0
aWNhbEFsaWduKCk7Ci0gICAgICAgICAgICBpZiAodmEgPT0gQkFTRUxJTkUgfHwgdmEgPT0gVEVY
VF9CT1RUT00gfHwgdmEgPT0gVEVYVF9UT1AKLSAgICAgICAgICAgICAgICB8fCB2YSA9PSBTVVBF
UiB8fCB2YSA9PSBTVUIpIHsKKyAgICAgICAgICAgIGlmICh2YSA9PSBCQVNFTElORSB8fCB2YSA9
PSBURVhUX0JPVFRPTSB8fCB2YSA9PSBURVhUX1RPUCB8fCB2YSA9PSBTVVBFUiB8fCB2YSA9PSBT
VUIpIHsKICAgICAgICAgICAgICAgICBpbnQgYiA9IGNlbGwtPmJhc2VsaW5lUG9zaXRpb24oKTsK
ICAgICAgICAgICAgICAgICBpZiAoYiA+IGNlbGwtPmJvcmRlclRvcCgpICsgY2VsbC0+cGFkZGlu
Z1RvcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiID4gYmFzZWxpbmUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlbGluZSA9IGI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW50
IHRkID0gcm93UG9zW2luZHhdICsgY2ggLSBiOwotICAgICAgICAgICAgICAgICAgICBpZiAodGQg
PiBiZGVzYykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJkZXNjID0gdGQ7CisgICAgICAgICAg
ICAgICAgICAgIGJhc2VsaW5lID0gbWF4KGJhc2VsaW5lLCBiKTsKKyAgICAgICAgICAgICAgICAg
ICAgYmRlc2MgPSBtYXgoYmRlc2MsIG1fcm93UG9zW2luZHhdICsgY2ggLSBiKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM2MSwxNSArMzQ3LDE1IEBA
IHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93SGVpZ2h0KCkKICAgICAgICAgLy9kbyB3
ZSBoYXZlIGJhc2VsaW5lIGFsaWduZWQgZWxlbWVudHM/CiAgICAgICAgIGlmIChiYXNlbGluZSkg
ewogICAgICAgICAgICAgLy8gaW5jcmVhc2Ugcm93aGVpZ2h0IGlmIGJhc2VsaW5lIHJlcXVpcmVz
Ci0gICAgICAgICAgICBpbnQgYlJvd1BvcyA9IGJhc2VsaW5lICsgYmRlc2MgKyAoZ3JpZFtyXS5y
b3dSZW5kZXJlciA/IHNwYWNpbmcgOiAwKTsKLSAgICAgICAgICAgIGlmIChyb3dQb3NbciArIDFd
IDwgYlJvd1BvcykKLSAgICAgICAgICAgICAgICByb3dQb3NbciArIDFdID0gYlJvd1BvczsKKyAg
ICAgICAgICAgIGludCBiUm93UG9zID0gYmFzZWxpbmUgKyBiZGVzYyArIChtX2dyaWRbcl0ucm93
UmVuZGVyZXIgPyBzcGFjaW5nIDogMCk7CisgICAgICAgICAgICBpZiAobV9yb3dQb3NbciArIDFd
IDwgYlJvd1BvcykKKyAgICAgICAgICAgICAgICBtX3Jvd1Bvc1tyICsgMV0gPSBiUm93UG9zOwog
Ci0gICAgICAgICAgICBncmlkW3JdLmJhc2VMaW5lID0gYmFzZWxpbmU7CisgICAgICAgICAgICBt
X2dyaWRbcl0uYmFzZUxpbmUgPSBiYXNlbGluZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChy
b3dQb3NbciArIDFdIDwgcm93UG9zW3JdKQotICAgICAgICAgICAgcm93UG9zW3IgKyAxXSA9IHJv
d1Bvc1tyXTsKKyAgICAgICAgaWYgKG1fcm93UG9zW3IgKyAxXSA8IG1fcm93UG9zW3JdKQorICAg
ICAgICAgICAgbV9yb3dQb3NbciArIDFdID0gbV9yb3dQb3Nbcl07CiAgICAgfQogfQogCkBAIC0z
NzcsOTAgKzM2Myw4NyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKGludCB0
CiB7CiAgICAgaW50IHJIZWlnaHQ7CiAgICAgaW50IHJpbmR4OwotICAgIGludCB0b3RhbFJvd3Mg
PSBncmlkUm93czsKLSAgICBpbnQgaHNwYWNpbmcgPSB0YWJsZSgpLT5oQm9yZGVyU3BhY2luZygp
OwotICAgIGludCB2c3BhY2luZyA9IHRhYmxlKCktPnZCb3JkZXJTcGFjaW5nKCk7CisgICAgaW50
IHRvdGFsUm93cyA9IG1fZ3JpZFJvd3M7CiAgICAgCiAgICAgLy8gU2V0IHRoZSB3aWR0aCBvZiBv
dXIgc2VjdGlvbiBub3cuICBUaGUgcm93cyB3aWxsIGFsc28gYmUgdGhpcyB3aWR0aC4KICAgICBt
X3dpZHRoID0gdGFibGUoKS0+Y29udGVudFdpZHRoKCk7CiAgICAgaWYgKHRhYmxlKCktPmNvbGxh
cHNlQm9yZGVycygpKQogICAgICAgICByZWNhbGNPdXRlckJvcmRlcigpOwogICAgIAotICAgIGlm
ICh0b0FkZCAmJiB0b3RhbFJvd3MgJiYgKHJvd1Bvc1t0b3RhbFJvd3NdIHx8ICFuZXh0U2libGlu
ZygpKSkgewotCi0gICAgICAgIGludCB0b3RhbEhlaWdodCA9IHJvd1Bvc1t0b3RhbFJvd3NdICsg
dG9BZGQ7CisgICAgaWYgKHRvQWRkICYmIHRvdGFsUm93cyAmJiAobV9yb3dQb3NbdG90YWxSb3dz
XSB8fCAhbmV4dFNpYmxpbmcoKSkpIHsKKyAgICAgICAgaW50IHRvdGFsSGVpZ2h0ID0gbV9yb3dQ
b3NbdG90YWxSb3dzXSArIHRvQWRkOwogCiAgICAgICAgIGludCBkaCA9IHRvQWRkOwogICAgICAg
ICBpbnQgdG90YWxQZXJjZW50ID0gMDsKICAgICAgICAgaW50IG51bUF1dG8gPSAwOwogICAgICAg
ICBmb3IgKGludCByID0gMDsgciA8IHRvdGFsUm93czsgcisrKSB7Ci0gICAgICAgICAgICBpZiAo
Z3JpZFtyXS5oZWlnaHQuaXNBdXRvKCkpCisgICAgICAgICAgICBpZiAobV9ncmlkW3JdLmhlaWdo
dC5pc0F1dG8oKSkKICAgICAgICAgICAgICAgICBudW1BdXRvKys7Ci0gICAgICAgICAgICBlbHNl
IGlmIChncmlkW3JdLmhlaWdodC5pc1BlcmNlbnQoKSkKLSAgICAgICAgICAgICAgICB0b3RhbFBl
cmNlbnQgKz0gZ3JpZFtyXS5oZWlnaHQudmFsdWUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1f
Z3JpZFtyXS5oZWlnaHQuaXNQZXJjZW50KCkpCisgICAgICAgICAgICAgICAgdG90YWxQZXJjZW50
ICs9IG1fZ3JpZFtyXS5oZWlnaHQudmFsdWUoKTsKICAgICAgICAgfQogICAgICAgICBpZiAodG90
YWxQZXJjZW50KSB7CiAgICAgICAgICAgICAvLyB0cnkgdG8gc2F0aXNmeSBwZXJjZW50CiAgICAg
ICAgICAgICBpbnQgYWRkID0gMDsKICAgICAgICAgICAgIGlmICh0b3RhbFBlcmNlbnQgPiAxMDAp
CiAgICAgICAgICAgICAgICAgdG90YWxQZXJjZW50ID0gMTAwOwotICAgICAgICAgICAgaW50IHJo
ID0gcm93UG9zWzFdIC0gcm93UG9zWzBdOworICAgICAgICAgICAgaW50IHJoID0gbV9yb3dQb3Nb
MV0gLSBtX3Jvd1Bvc1swXTsKICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgdG90YWxS
b3dzOyByKyspIHsKLSAgICAgICAgICAgICAgICBpZiAodG90YWxQZXJjZW50ID4gMCAmJiBncmlk
W3JdLmhlaWdodC5pc1BlcmNlbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgdG9BZGQg
PSBtaW4oZGgsICh0b3RhbEhlaWdodCAqIGdyaWRbcl0uaGVpZ2h0LnZhbHVlKCkgLyAxMDApIC0g
cmgpOworICAgICAgICAgICAgICAgIGlmICh0b3RhbFBlcmNlbnQgPiAwICYmIG1fZ3JpZFtyXS5o
ZWlnaHQuaXNQZXJjZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRvQWRkID0gbWlu
KGRoLCAodG90YWxIZWlnaHQgKiBtX2dyaWRbcl0uaGVpZ2h0LnZhbHVlKCkgLyAxMDApIC0gcmgp
OwogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0b0FkZCBpcyBuZWdhdGl2ZSwgdGhlbiB3ZSBk
b24ndCB3YW50IHRvIHNocmluayB0aGUgcm93ICh0aGlzIGJ1ZwogICAgICAgICAgICAgICAgICAg
ICAvLyBhZmZlY3RlZCBPdXRsb29rIFdlYiBBY2Nlc3MpLgogICAgICAgICAgICAgICAgICAgICB0
b0FkZCA9IG1heCgwLCB0b0FkZCk7CiAgICAgICAgICAgICAgICAgICAgIGFkZCArPSB0b0FkZDsK
ICAgICAgICAgICAgICAgICAgICAgZGggLT0gdG9BZGQ7Ci0gICAgICAgICAgICAgICAgICAgIHRv
dGFsUGVyY2VudCAtPSBncmlkW3JdLmhlaWdodC52YWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICB0b3RhbFBlcmNlbnQgLT0gbV9ncmlkW3JdLmhlaWdodC52YWx1ZSgpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBpZiAociA8IHRvdGFsUm93cyAtIDEpCi0gICAgICAgICAg
ICAgICAgICAgIHJoID0gcm93UG9zW3IgKyAyXSAtIHJvd1Bvc1tyICsgMV07Ci0gICAgICAgICAg
ICAgICAgcm93UG9zW3IgKyAxXSArPSBhZGQ7CisgICAgICAgICAgICAgICAgICAgIHJoID0gbV9y
b3dQb3NbciArIDJdIC0gbV9yb3dQb3NbciArIDFdOworICAgICAgICAgICAgICAgIG1fcm93UG9z
W3IgKyAxXSArPSBhZGQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKG51
bUF1dG8pIHsKICAgICAgICAgICAgIC8vIGRpc3RyaWJ1dGUgb3ZlciB2YXJpYWJsZSBjb2xzCiAg
ICAgICAgICAgICBpbnQgYWRkID0gMDsKICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwg
dG90YWxSb3dzOyByKyspIHsKLSAgICAgICAgICAgICAgICBpZiAobnVtQXV0byA+IDAgJiYgZ3Jp
ZFtyXS5oZWlnaHQuaXNBdXRvKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobnVtQXV0byA+IDAg
JiYgbV9ncmlkW3JdLmhlaWdodC5pc0F1dG8oKSkgewogICAgICAgICAgICAgICAgICAgICBpbnQg
dG9BZGQgPSBkaC9udW1BdXRvOwogICAgICAgICAgICAgICAgICAgICBhZGQgKz0gdG9BZGQ7CiAg
ICAgICAgICAgICAgICAgICAgIGRoIC09IHRvQWRkOwogICAgICAgICAgICAgICAgICAgICBudW1B
dXRvLS07CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJvd1Bvc1tyICsgMV0g
Kz0gYWRkOworICAgICAgICAgICAgICAgIG1fcm93UG9zW3IgKyAxXSArPSBhZGQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGRoID4gMCAmJiByb3dQb3NbdG90YWxSb3dz
XSkgeworICAgICAgICBpZiAoZGggPiAwICYmIG1fcm93UG9zW3RvdGFsUm93c10pIHsKICAgICAg
ICAgICAgIC8vIGlmIHNvbWUgbGVmdCBvdmVycywgZGlzdHJpYnV0ZSBlcXVhbGx5LgotICAgICAg
ICAgICAgaW50IHRvdCA9IHJvd1Bvc1t0b3RhbFJvd3NdOworICAgICAgICAgICAgaW50IHRvdCA9
IG1fcm93UG9zW3RvdGFsUm93c107CiAgICAgICAgICAgICBpbnQgYWRkID0gMDsKLSAgICAgICAg
ICAgIGludCBwcmV2ID0gcm93UG9zWzBdOworICAgICAgICAgICAgaW50IHByZXYgPSBtX3Jvd1Bv
c1swXTsKICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsK
ICAgICAgICAgICAgICAgICAvL3dlaWdodCB3aXRoIHRoZSBvcmlnaW5hbCBoZWlnaHQKLSAgICAg
ICAgICAgICAgICBhZGQgKz0gZGggKiAocm93UG9zW3IgKyAxXSAtIHByZXYpIC8gdG90OwotICAg
ICAgICAgICAgICAgIHByZXYgPSByb3dQb3NbciArIDFdOwotICAgICAgICAgICAgICAgIHJvd1Bv
c1tyICsgMV0gKz0gYWRkOworICAgICAgICAgICAgICAgIGFkZCArPSBkaCAqIChtX3Jvd1Bvc1ty
ICsgMV0gLSBwcmV2KSAvIHRvdDsKKyAgICAgICAgICAgICAgICBwcmV2ID0gbV9yb3dQb3NbciAr
IDFdOworICAgICAgICAgICAgICAgIG1fcm93UG9zW3IgKyAxXSArPSBhZGQ7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQgbGVmdE9mZnNldCA9IGhzcGFjaW5nOwot
CisgICAgaW50IGhzcGFjaW5nID0gdGFibGUoKS0+aEJvcmRlclNwYWNpbmcoKTsKKyAgICBpbnQg
dnNwYWNpbmcgPSB0YWJsZSgpLT52Qm9yZGVyU3BhY2luZygpOwogICAgIGludCBuRWZmQ29scyA9
IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKKwogICAgIGZvciAoaW50IHIgPSAwOyByIDwgdG90YWxS
b3dzOyByKyspIHsKICAgICAgICAgLy8gU2V0IHRoZSByb3cncyB4L3kgcG9zaXRpb24gYW5kIHdp
ZHRoL2hlaWdodC4KLSAgICAgICAgaWYgKGdyaWRbcl0ucm93UmVuZGVyZXIpIHsKLSAgICAgICAg
ICAgIGdyaWRbcl0ucm93UmVuZGVyZXItPnNldFBvcygwLCByb3dQb3Nbcl0pOwotICAgICAgICAg
ICAgZ3JpZFtyXS5yb3dSZW5kZXJlci0+c2V0V2lkdGgobV93aWR0aCk7Ci0gICAgICAgICAgICBn
cmlkW3JdLnJvd1JlbmRlcmVyLT5zZXRIZWlnaHQocm93UG9zW3IrMV0gLSByb3dQb3Nbcl0gLSB2
c3BhY2luZyk7CisgICAgICAgIGlmIChtX2dyaWRbcl0ucm93UmVuZGVyZXIpIHsKKyAgICAgICAg
ICAgIG1fZ3JpZFtyXS5yb3dSZW5kZXJlci0+c2V0UG9zKDAsIG1fcm93UG9zW3JdKTsKKyAgICAg
ICAgICAgIG1fZ3JpZFtyXS5yb3dSZW5kZXJlci0+c2V0V2lkdGgobV93aWR0aCk7CisgICAgICAg
ICAgICBtX2dyaWRbcl0ucm93UmVuZGVyZXItPnNldEhlaWdodChtX3Jvd1Bvc1tyICsgMV0gLSBt
X3Jvd1Bvc1tyXSAtIHZzcGFjaW5nKTsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IGMg
PSAwOyBjIDwgbkVmZkNvbHM7IGMrKykgewotICAgICAgICAgICAgQ2VsbFN0cnVjdCBjdXJyZW50
ID0gY2VsbEF0KHIsIGMpOwotICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY3Vy
cmVudC5jZWxsOworICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0gY2VsbEF0KHIs
IGMpLmNlbGw7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghY2VsbCkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTQ3MCw3ICs0NTMsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0
aW9uOjpsYXlvdXRSb3dzKGludCB0CiAgICAgICAgICAgICBpZiAoKHJpbmR4ID0gci1jZWxsLT5y
b3dTcGFuKCkgKyAxKSA8IDApCiAgICAgICAgICAgICAgICAgcmluZHggPSAwOwogCi0gICAgICAg
ICAgICBySGVpZ2h0ID0gcm93UG9zW3IgKyAxXSAtIHJvd1Bvc1tyaW5keF0gLSB2c3BhY2luZzsK
KyAgICAgICAgICAgIHJIZWlnaHQgPSBtX3Jvd1Bvc1tyICsgMV0gLSBtX3Jvd1Bvc1tyaW5keF0g
LSB2c3BhY2luZzsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRm9yY2UgcGVyY2VudCBo
ZWlnaHQgY2hpbGRyZW4gdG8gbGF5IHRoZW1zZWx2ZXMgb3V0IGFnYWluLgogICAgICAgICAgICAg
Ly8gVGhpcyB3aWxsIGNhdXNlIHRoZXNlIGNoaWxkcmVuIHRvIGdyb3cgdG8gZmlsbCB0aGUgY2Vs
bC4KQEAgLTUxMSw5ICs0OTQsOCBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dz
KGludCB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNlbGwtPmJvcmRlckJvdHRvbSgpIC0gY2VsbC0+cGFkZGluZ0JvdHRvbSgpKSk7CiAgICAg
ICAgICAgICAgICAgY2VsbC0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgRVZlcnRpY2FsQWxpZ24gdmEgPSBjZWxsLT5zdHlsZSgpLT52ZXJ0
aWNhbEFsaWduKCk7CiAgICAgICAgICAgICAgICAgaW50IHRlID0gMDsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHZhKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjZWxsLT5zdHlsZSgpLT52
ZXJ0aWNhbEFsaWduKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTVUI6CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgU1VQRVI6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVYVF9U
T1A6CkBAIC01NDcsMTMgKzUyOSw5IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJv
d3MoaW50IHQKICAgICAgICAgICAgIEludFJlY3Qgb2xkQ2VsbFJlY3QoY2VsbC0+eFBvcygpLCBj
ZWxsLT55UG9zKCkgLSBjZWxsLT5ib3JkZXJUb3BFeHRyYSgpICwgY2VsbC0+d2lkdGgoKSwgY2Vs
bC0+aGVpZ2h0KCkpOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBSVEwpIHsKLSAgICAgICAgICAgICAgICBjZWxsLT5zZXRQb3MoCi0gICAgICAgICAg
ICAgICAgICAgIHRhYmxlKCktPmNvbHVtblBvc1tuRWZmQ29sc10gLQotICAgICAgICAgICAgICAg
ICAgICB0YWJsZSgpLT5jb2x1bW5Qb3NbdGFibGUoKS0+Y29sVG9FZmZDb2woY2VsbC0+Y29sKCkr
Y2VsbC0+Y29sU3BhbigpKV0gKwotICAgICAgICAgICAgICAgICAgICBsZWZ0T2Zmc2V0LAotICAg
ICAgICAgICAgICAgICAgICByb3dQb3NbcmluZHhdKTsKKyAgICAgICAgICAgICAgICBjZWxsLT5z
ZXRQb3ModGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClbbkVmZkNvbHNdIC0gdGFibGUoKS0+Y29s
dW1uUG9zaXRpb25zKClbdGFibGUoKS0+Y29sVG9FZmZDb2woY2VsbC0+Y29sKCkrY2VsbC0+Y29s
U3BhbigpKV0gKyBoc3BhY2luZywgbV9yb3dQb3NbcmluZHhdKTsKICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIGNlbGwtPnNldFBvcyh0YWJsZSgpLT5jb2x1bW5Qb3NbY10gKyBs
ZWZ0T2Zmc2V0LCByb3dQb3NbcmluZHhdKTsKKyAgICAgICAgICAgICAgICBjZWxsLT5zZXRQb3Mo
dGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClbY10gKyBoc3BhY2luZywgbV9yb3dQb3NbcmluZHhd
KTsKIAogICAgICAgICAgICAgLy8gSWYgdGhlIGNlbGwgbW92ZWQsIHdlIGhhdmUgdG8gcmVwYWlu
dCBpdCBhcyB3ZWxsIGFzIGFueSBmbG9hdGluZy9wb3NpdGlvbmVkCiAgICAgICAgICAgICAvLyBk
ZXNjZW5kYW50cy4gIEFuIGV4Y2VwdGlvbiBpcyBpZiB3ZSBuZWVkIGEgbGF5b3V0LiAgSW4gdGhp
cyBjYXNlLCB3ZSBrbm93IHdlJ3JlIGdvaW5nIHRvCkBAIC01NjMsNyArNTQxLDcgQEAgaW50IFJl
bmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdAogICAgICAgICB9CiAgICAgfQogCi0g
ICAgbV9oZWlnaHQgPSByb3dQb3NbdG90YWxSb3dzXTsKKyAgICBtX2hlaWdodCA9IG1fcm93UG9z
W3RvdGFsUm93c107CiAgICAgcmV0dXJuIG1faGVpZ2h0OwogfQogCkBAIC01NzMsMTEgKzU1MSwx
MCBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsb3dlc3RQb3NpdGlvbihiCiAgICAgaWYgKCFp
bmNsdWRlT3ZlcmZsb3dJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmV0
dXJuIGJvdHRvbTsKIAotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpyb3cgPSBmaXJzdENoaWxkKCk7
IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0ICpjZWxsID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2li
bGluZygpKQotICAgICAgICAgICAgaWYgKGNlbGwtPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbnQgYnAgPSBjZWxsLT55UG9zKCkgKyBjZWxsLT5sb3dlc3RQb3NpdGlvbihmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgYnApOworICAgIGZvciAo
UmVuZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2li
bGluZygpKSB7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0gcm93LT5maXJzdENo
aWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBp
ZiAoY2VsbC0+aXNUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90
dG9tLCBjZWxsLT55UG9zKCkgKyBjZWxsLT5sb3dlc3RQb3NpdGlvbihmYWxzZSkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIApAQCAtNTkwLDExICs1NjcsMTAgQEAgaW50IFJlbmRlclRhYmxlU2Vj
dGlvbjo6cmlnaHRtb3N0UG9zaXRpbwogICAgIGlmICghaW5jbHVkZU92ZXJmbG93SW50ZXJpb3Ig
JiYgaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiByaWdodDsKIAotICAgIGZvciAo
UmVuZGVyT2JqZWN0ICpyb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjZWxsID0gcm93LT5maXJzdENo
aWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgaWYg
KGNlbGwtPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgcnAgPSBjZWxsLT54
UG9zKCkgKyBjZWxsLT5yaWdodG1vc3RQb3NpdGlvbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAg
cmlnaHQgPSBtYXgocmlnaHQsIHJwKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogcm93ID0gZmly
c3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBmb3Ig
KFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGlsZCgpOyBjZWxsOyBjZWxsID0gY2Vs
bC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKGNlbGwtPmlzVGFibGVDZWxsKCkp
CisgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIGNlbGwtPnhQb3MoKSArIGNlbGwt
PnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02
MDcsMTEgKzU4MywxMCBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsZWZ0bW9zdFBvc2l0aW9u
CiAgICAgaWYgKCFpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkK
ICAgICAgICAgcmV0dXJuIGxlZnQ7CiAgICAgCi0gICAgZm9yIChSZW5kZXJPYmplY3QgKnJvdyA9
IGZpcnN0Q2hpbGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAg
Zm9yIChSZW5kZXJPYmplY3QgKmNlbGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9
IGNlbGwtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICBpZiAoY2VsbC0+aXNUYWJsZUNlbGwo
KSkgewotICAgICAgICAgICAgICAgIGludCBscCA9IGNlbGwtPnhQb3MoKSArIGNlbGwtPmxlZnRt
b3N0UG9zaXRpb24oZmFsc2UpOwotICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgbHAp
OworICAgIGZvciAoUmVuZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0g
cm93LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0g
cm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7Cisg
ICAgICAgICAgICBpZiAoY2VsbC0+aXNUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBsZWZ0
ID0gbWluKGxlZnQsIGNlbGwtPnhQb3MoKSArIGNlbGwtPmxlZnRtb3N0UG9zaXRpb24oZmFsc2Up
KTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTYyMSw3ICs1OTYsNyBAQCBpbnQgUmVuZGVy
VGFibGVTZWN0aW9uOjpsZWZ0bW9zdFBvc2l0aW9uCiBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpj
YWxjT3V0ZXJCb3JkZXJUb3AoKSBjb25zdAogewogICAgIGludCB0b3RhbENvbHMgPSB0YWJsZSgp
LT5udW1FZmZDb2xzKCk7Ci0gICAgaWYgKGdyaWRSb3dzID09IDAgfHwgdG90YWxDb2xzID09IDAp
CisgICAgaWYgKG1fZ3JpZFJvd3MgPT0gMCB8fCB0b3RhbENvbHMgPT0gMCkKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICB1bnNpZ25lZCBib3JkZXJXaWR0aCA9IDA7CkBAIC02NzQsNyArNjQ5LDcg
QEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyVAogaW50IFJlbmRlclRh
YmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyQm90dG9tKCkgY29uc3QKIHsKICAgICBpbnQgdG90
YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOwotICAgIGlmIChncmlkUm93cyA9PSAwIHx8
IHRvdGFsQ29scyA9PSAwKQorICAgIGlmIChtX2dyaWRSb3dzID09IDAgfHwgdG90YWxDb2xzID09
IDApCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgdW5zaWduZWQgYm9yZGVyV2lkdGggPSAwOwpA
QCAtNjkzLDcgKzY2OCw3IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRl
ckIKIAogICAgIGJvb2wgYWxsSGlkZGVuID0gdHJ1ZTsKICAgICBmb3IgKGludCBjID0gMDsgYyA8
IHRvdGFsQ29sczsgYysrKSB7Ci0gICAgICAgIGNvbnN0IENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBj
ZWxsQXQoZ3JpZFJvd3MgLSAxLCBjKTsKKyAgICAgICAgY29uc3QgQ2VsbFN0cnVjdCYgY3VycmVu
dCA9IGNlbGxBdChtX2dyaWRSb3dzIC0gMSwgYyk7CiAgICAgICAgIGlmIChjdXJyZW50LmluQ29s
U3BhbiB8fCAhY3VycmVudC5jZWxsKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGNv
bnN0IEJvcmRlclZhbHVlJiBjYiA9IGN1cnJlbnQuY2VsbC0+c3R5bGUoKS0+Ym9yZGVyQm90dG9t
KCk7CkBAIC03MjcsNyArNzAyLDcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVy
Qm9yZGVyQgogaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyTGVmdChib29s
IHJ0bCkgY29uc3QKIHsKICAgICBpbnQgdG90YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygp
OwotICAgIGlmIChncmlkUm93cyA9PSAwIHx8IHRvdGFsQ29scyA9PSAwKQorICAgIGlmIChtX2dy
aWRSb3dzID09IDAgfHwgdG90YWxDb2xzID09IDApCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
dW5zaWduZWQgYm9yZGVyV2lkdGggPSAwOwpAQCAtNzQ5LDcgKzcyNCw3IEBAIGludCBSZW5kZXJU
YWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckwKICAgICB9CiAKICAgICBib29sIGFsbEhpZGRl
biA9IHRydWU7Ci0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBncmlkUm93czsgcisrKSB7CisgICAg
Zm9yIChpbnQgciA9IDA7IHIgPCBtX2dyaWRSb3dzOyByKyspIHsKICAgICAgICAgY29uc3QgQ2Vs
bFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChyLCBsZWZ0bW9zdENvbHVtbik7CiAgICAgICAgIGlm
ICghY3VycmVudC5jZWxsKQogICAgICAgICAgICAgY29udGludWU7CkBAIC03NzQsNyArNzQ5LDcg
QEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyTAogaW50IFJlbmRlclRh
YmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyUmlnaHQoYm9vbCBydGwpIGNvbnN0CiB7CiAgICAg
aW50IHRvdGFsQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKLSAgICBpZiAoZ3JpZFJvd3Mg
PT0gMCB8fCB0b3RhbENvbHMgPT0gMCkKKyAgICBpZiAobV9ncmlkUm93cyA9PSAwIHx8IHRvdGFs
Q29scyA9PSAwKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHVuc2lnbmVkIGJvcmRlcldpZHRo
ID0gMDsKQEAgLTc5Niw3ICs3NzEsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0
ZXJCb3JkZXJSCiAgICAgfQogCiAgICAgYm9vbCBhbGxIaWRkZW4gPSB0cnVlOwotICAgIGZvciAo
aW50IHIgPSAwOyByIDwgZ3JpZFJvd3M7IHIrKykgeworICAgIGZvciAoaW50IHIgPSAwOyByIDwg
bV9ncmlkUm93czsgcisrKSB7CiAgICAgICAgIGNvbnN0IENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBj
ZWxsQXQociwgcmlnaHRtb3N0Q29sdW1uKTsKICAgICAgICAgaWYgKCFjdXJyZW50LmNlbGwpCiAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTgzMCw4ICs4MDUsOCBAQCB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6cmVjYWxjT3V0ZXJCb3JkCiAKIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgdW5zaWduZWQg
aW50IHRvdGFsUm93cyA9IGdyaWRSb3dzOwotICAgIHVuc2lnbmVkIGludCB0b3RhbENvbHMgPSB0
YWJsZSgpLT5jb2x1bW5zLnNpemUoKTsKKyAgICB1bnNpZ25lZCBpbnQgdG90YWxSb3dzID0gbV9n
cmlkUm93czsKKyAgICB1bnNpZ25lZCBpbnQgdG90YWxDb2xzID0gdGFibGUoKS0+Y29sdW1ucygp
LnNpemUoKTsKIAogICAgIGlmICh0b3RhbFJvd3MgPT0gMCB8fCB0b3RhbENvbHMgPT0gMCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtODM5LDggKzgxNCw4IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9u
OjpwYWludChQYWludEluZm8KICAgICB0eCArPSBtX3g7CiAgICAgdHkgKz0gbV95OwogCi0gICAg
Ly8gY2hlY2sgd2hpY2ggcm93cyBhbmQgY29scyBhcmUgdmlzaWJsZSBhbmQgb25seSBwYWludCB0
aGVzZQotICAgIC8vICMjIyBmaXhtZTogY291bGQgdXNlIGEgYmluYXJ5IHNlYXJjaCBoZXJlCisg
ICAgLy8gQ2hlY2sgd2hpY2ggcm93cyBhbmQgY29scyBhcmUgdmlzaWJsZSBhbmQgb25seSBwYWlu
dCB0aGVzZS4KKyAgICAvLyBGSVhNRTogQ291bGQgdXNlIGEgYmluYXJ5IHNlYXJjaCBoZXJlLgog
ICAgIFBhaW50UGhhc2UgcGFpbnRQaGFzZSA9IHBhaW50SW5mby5waGFzZTsKICAgICBpbnQgeCA9
IHBhaW50SW5mby5yZWN0LngoKTsKICAgICBpbnQgeSA9IHBhaW50SW5mby5yZWN0LnkoKTsKQEAg
LTg1MSwzNCArODI2LDM0IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQYWludElu
Zm8KICAgICB1bnNpZ25lZCBpbnQgc3RhcnRyb3cgPSAwOwogICAgIHVuc2lnbmVkIGludCBlbmRy
b3cgPSB0b3RhbFJvd3M7CiAgICAgZm9yICg7IHN0YXJ0cm93IDwgdG90YWxSb3dzOyBzdGFydHJv
dysrKSB7Ci0gICAgICAgIGlmICh0eSArIHJvd1Bvc1tzdGFydHJvdysxXSA+PSB5IC0gb3MpCisg
ICAgICAgIGlmICh0eSArIG1fcm93UG9zW3N0YXJ0cm93ICsgMV0gPj0geSAtIG9zKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmIChzdGFydHJvdyA9PSB0b3RhbFJvd3MgJiYgdHkg
KyByb3dQb3NbdG90YWxSb3dzXSArIHRhYmxlKCktPm91dGVyQm9yZGVyQm90dG9tKCkgPj0geSAt
IG9zKQorICAgIGlmIChzdGFydHJvdyA9PSB0b3RhbFJvd3MgJiYgdHkgKyBtX3Jvd1Bvc1t0b3Rh
bFJvd3NdICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA+PSB5IC0gb3MpCiAgICAgICAg
IHN0YXJ0cm93LS07CiAKICAgICBmb3IgKDsgZW5kcm93ID4gMDsgZW5kcm93LS0pIHsKLSAgICAg
ICAgaWYgKHR5ICsgcm93UG9zW2VuZHJvdy0xXSA8PSB5ICsgaCArIG9zKQorICAgICAgICBpZiAo
dHkgKyBtX3Jvd1Bvc1tlbmRyb3ctMV0gPD0geSArIGggKyBvcykKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBpZiAoZW5kcm93ID09IDAgJiYgdHkgKyByb3dQb3NbMF0gLSB0YWJsZSgp
LT5vdXRlckJvcmRlclRvcCgpIDw9IHkgKyBoICsgb3MpCisgICAgaWYgKGVuZHJvdyA9PSAwICYm
IHR5ICsgbV9yb3dQb3NbMF0gLSB0YWJsZSgpLT5vdXRlckJvcmRlclRvcCgpIDw9IHkgKyBoICsg
b3MpCiAgICAgICAgIGVuZHJvdysrOwogCiAgICAgdW5zaWduZWQgaW50IHN0YXJ0Y29sID0gMDsK
ICAgICB1bnNpZ25lZCBpbnQgZW5kY29sID0gdG90YWxDb2xzOwogICAgIGlmIChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgZm9yICg7IHN0YXJ0Y29sIDwgdG90YWxDb2xz
OyBzdGFydGNvbCsrKSB7Ci0gICAgICAgICAgICBpZiAodHggKyB0YWJsZSgpLT5jb2x1bW5Qb3Nb
c3RhcnRjb2wgKyAxXSA+PSB4IC0gb3MpCisgICAgICAgICAgICBpZiAodHggKyB0YWJsZSgpLT5j
b2x1bW5Qb3NpdGlvbnMoKVtzdGFydGNvbCArIDFdID49IHggLSBvcykKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhcnRjb2wgPT0gdG90YWxDb2xzICYm
IHR4ICsgdGFibGUoKS0+Y29sdW1uUG9zW3RvdGFsQ29sc10gKyB0YWJsZSgpLT5vdXRlckJvcmRl
clJpZ2h0KCkgPj0geCAtIG9zKQorICAgICAgICBpZiAoc3RhcnRjb2wgPT0gdG90YWxDb2xzICYm
IHR4ICsgdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClbdG90YWxDb2xzXSArIHRhYmxlKCktPm91
dGVyQm9yZGVyUmlnaHQoKSA+PSB4IC0gb3MpCiAgICAgICAgICAgICBzdGFydGNvbC0tOwogCiAg
ICAgICAgIGZvciAoOyBlbmRjb2wgPiAwOyBlbmRjb2wtLSkgewotICAgICAgICAgICAgaWYgKHR4
ICsgdGFibGUoKS0+Y29sdW1uUG9zW2VuZGNvbCAtIDFdIDw9IHggKyB3ICsgb3MpCisgICAgICAg
ICAgICBpZiAodHggKyB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKVtlbmRjb2wgLSAxXSA8PSB4
ICsgdyArIG9zKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChlbmRjb2wgPT0gMCAmJiB0eCArIHRhYmxlKCktPmNvbHVtblBvc1swXSAtIHRhYmxlKCktPm91
dGVyQm9yZGVyTGVmdCgpIDw9IHkgKyB3ICsgb3MpCisgICAgICAgIGlmIChlbmRjb2wgPT0gMCAm
JiB0eCArIHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpWzBdIC0gdGFibGUoKS0+b3V0ZXJCb3Jk
ZXJMZWZ0KCkgPD0geSArIHcgKyBvcykKICAgICAgICAgICAgIGVuZGNvbCsrOwogICAgIH0KIApA
QCAtOTA0LDExICs4NzksOSBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJ
bmZvCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjb2x1bW4gZ3JvdXAsIGNvbHVtbiwgcm93
IGdyb3VwLCByb3csIGFuZCB0aGVuIHRoZSBjZWxsLgogICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIGNvbCA9IHRhYmxlKCktPmNvbEVsZW1lbnQoYyk7CiAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogY29sR3JvdXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAo
Y29sKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSBjb2wt
PnBhcmVudCgpLT5zdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5k
aXNwbGF5KCkgPT0gVEFCTEVfQ09MVU1OX0dST1VQKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbEdyb3VwID0gY29sLT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAoY29sICYmIGNvbC0+cGFyZW50KCktPnN0eWxlKCktPmRpc3Bs
YXkoKSA9PSBUQUJMRV9DT0xVTU5fR1JPVVApCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xH
cm91cCA9IGNvbC0+cGFyZW50KCk7CisKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiByb3cgPSBjZWxsLT5wYXJlbnQoKTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBDb2x1bW4g
Z3JvdXBzIGFuZCBjb2x1bW5zIGZpcnN0LgpAQCAtOTM3LDM5ICs5MTAsNDAgQEAgdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbwogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlv
bjo6cmVjYWxjQ2VsbHMoKQogewotICAgIGNDb2wgPSAwOwotICAgIGNSb3cgPSAtMTsKKyAgICBt
X2NDb2wgPSAwOworICAgIG1fY1JvdyA9IC0xOwogICAgIGNsZWFyR3JpZCgpOwotICAgIGdyaWRS
b3dzID0gMDsKKyAgICBtX2dyaWRSb3dzID0gMDsKIAotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpy
b3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGluZygpKSB7CisgICAg
Zm9yIChSZW5kZXJPYmplY3QqIHJvdyA9IGZpcnN0Q2hpbGQoKTsgcm93OyByb3cgPSByb3ctPm5l
eHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKHJvdy0+aXNUYWJsZVJvdygpKSB7Ci0gICAgICAg
ICAgICBjUm93Kys7Ci0gICAgICAgICAgICBjQ29sID0gMDsKLSAgICAgICAgICAgIGVuc3VyZVJv
d3MoY1JvdyArIDEpOwotICAgICAgICAgICAgZ3JpZFtjUm93XS5yb3dSZW5kZXJlciA9IHJvdzsK
KyAgICAgICAgICAgIG1fY1JvdysrOworICAgICAgICAgICAgbV9jQ29sID0gMDsKKyAgICAgICAg
ICAgIGVuc3VyZVJvd3MobV9jUm93ICsgMSk7CisgICAgICAgICAgICBtX2dyaWRbbV9jUm93XS5y
b3dSZW5kZXJlciA9IHJvdzsKIAotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QgKmNlbGwg
PSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5nKCkpCisg
ICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGlsZCgpOyBj
ZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgIGlmIChj
ZWxsLT5pc1RhYmxlQ2VsbCgpKQotICAgICAgICAgICAgICAgICAgICBhZGRDZWxsKHN0YXRpY19j
YXN0PFJlbmRlclRhYmxlQ2VsbCAqPihjZWxsKSwgcm93KTsKKyAgICAgICAgICAgICAgICAgICAg
YWRkQ2VsbChzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNlbGwqPihjZWxsKSwgcm93KTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBuZWVkQ2VsbFJlY2FsYyA9IGZhbHNlOwor
ICAgIG1fbmVlZHNDZWxsUmVjYWxjID0gZmFsc2U7CiAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7
CiB9CiAKIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpjbGVhckdyaWQoKQogewotICAgIGludCBy
b3dzID0gZ3JpZFJvd3M7CisgICAgaW50IHJvd3MgPSBtX2dyaWRSb3dzOwogICAgIHdoaWxlIChy
b3dzLS0pCi0gICAgICAgIGRlbGV0ZSBncmlkW3Jvd3NdLnJvdzsKKyAgICAgICAgZGVsZXRlIG1f
Z3JpZFtyb3dzXS5yb3c7CiB9CiAKIGludCBSZW5kZXJUYWJsZVNlY3Rpb246Om51bUNvbHVtbnMo
KSBjb25zdAogewogICAgIGludCByZXN1bHQgPSAwOwogICAgIAotICAgIGZvciAoaW50IHIgPSAw
OyByIDwgZ3JpZFJvd3M7ICsrcikgeworICAgIGZvciAoaW50IHIgPSAwOyByIDwgbV9ncmlkUm93
czsgKytyKSB7CiAgICAgICAgIGZvciAoaW50IGMgPSByZXN1bHQ7IGMgPCB0YWJsZSgpLT5udW1F
ZmZDb2xzKCk7ICsrYykgewogICAgICAgICAgICAgY29uc3QgQ2VsbFN0cnVjdCYgY2VsbCA9IGNl
bGxBdChyLCBjKTsKICAgICAgICAgICAgIGlmIChjZWxsLmNlbGwgfHwgY2VsbC5pbkNvbFNwYW4p
CkBAIC05ODAsOSArOTU0LDMyIEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246Om51bUNvbHVtbnMo
KSBjb24KICAgICByZXR1cm4gcmVzdWx0ICsgMTsKIH0KIAordm9pZCBSZW5kZXJUYWJsZVNlY3Rp
b246OmFwcGVuZENvbHVtbihpbnQgcG9zKQoreworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8
IG1fZ3JpZFJvd3M7ICsrcm93KSB7CisgICAgICAgIG1fZ3JpZFtyb3ddLnJvdy0+cmVzaXplKHBv
cyArIDEpOworICAgICAgICBDZWxsU3RydWN0JiBjID0gY2VsbEF0KHJvdywgcG9zKTsKKyAgICAg
ICAgYy5jZWxsID0gMDsKKyAgICAgICAgYy5pbkNvbFNwYW4gPSBmYWxzZTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbihpbnQgcG9zLCBpbnQgbmV3U2l6
ZSkKK3sKKyAgICBpZiAobV9jQ29sID4gcG9zKQorICAgICAgICBtX2NDb2wrKzsKKyAgICBmb3Ig
KGludCByb3cgPSAwOyByb3cgPCBtX2dyaWRSb3dzOyArK3JvdykgeworICAgICAgICBtX2dyaWRb
cm93XS5yb3ctPnJlc2l6ZShuZXdTaXplKTsKKyAgICAgICAgUm93JiByID0gKm1fZ3JpZFtyb3dd
LnJvdzsKKyAgICAgICAgbWVtbW92ZShyLmRhdGEoKSArIHBvcyArIDEsIHIuZGF0YSgpICsgcG9z
LCAobmV3U2l6ZSAtIDEgLSBwb3MpICogc2l6ZW9mKENlbGxTdHJ1Y3QpKTsKKyAgICAgICAgcltw
b3MgKyAxXS5jZWxsID0gMDsKKyAgICAgICAgcltwb3MgKyAxXS5pbkNvbFNwYW4gPSByW3Bvc10u
aW5Db2xTcGFuIHx8IHJbcG9zXS5jZWxsOworICAgIH0KK30KKwogUmVuZGVyT2JqZWN0KiBSZW5k
ZXJUYWJsZVNlY3Rpb246OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkKQogewot
ICAgIHNldE5lZWRDZWxsUmVjYWxjKCk7CisgICAgc2V0TmVlZHNDZWxsUmVjYWxjKCk7CiAgICAg
cmV0dXJuIFJlbmRlckNvbnRhaW5lcjo6cmVtb3ZlQ2hpbGROb2RlKGNoaWxkKTsKIH0KIApAQCAt
MTAwOSwxMiArMTAwNiwxMiBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQo
Y29uCiB9CiAKICNpZm5kZWYgTkRFQlVHCi12b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6ZHVtcChU
ZXh0U3RyZWFtICpzdHJlYW0sIERlcHJlY2F0ZWRTdHJpbmcgaW5kKSBjb25zdAordm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OmR1bXAoVGV4dFN0cmVhbSogc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5n
IGluZCkgY29uc3QKIHsKLSAgICAqc3RyZWFtIDw8IGVuZGwgPDwgaW5kIDw8ICJncmlkPSgiIDw8
IGdyaWRSb3dzIDw8ICIsIiA8PCB0YWJsZSgpLT5udW1FZmZDb2xzKCkgPDwgIikiIDw8IGVuZGwg
PDwgaW5kOwotICAgIGZvciAoaW50IHIgPSAwOyByIDwgZ3JpZFJvd3M7IHIrKykgeworICAgICpz
dHJlYW0gPDwgZW5kbCA8PCBpbmQgPDwgImdyaWQ9KCIgPDwgbV9ncmlkUm93cyA8PCAiLCIgPDwg
dGFibGUoKS0+bnVtRWZmQ29scygpIDw8ICIpIiA8PCBlbmRsIDw8IGluZDsKKyAgICBmb3IgKGlu
dCByID0gMDsgciA8IG1fZ3JpZFJvd3M7IHIrKykgewogICAgICAgICBmb3IgKGludCBjID0gMDsg
YyA8IHRhYmxlKCktPm51bUVmZkNvbHMoKTsgYysrKSB7Ci0gICAgICAgICAgICBpZiAoY2VsbEF0
KCByLCBjKS5jZWxsICYmICFjZWxsQXQociwgYykuaW5Db2xTcGFuKQorICAgICAgICAgICAgaWYg
KGNlbGxBdChyLCBjKS5jZWxsICYmICFjZWxsQXQociwgYykuaW5Db2xTcGFuKQogICAgICAgICAg
ICAgICAgICpzdHJlYW0gPDwgIigiIDw8IGNlbGxBdChyLCBjKS5jZWxsLT5yb3coKSA8PCAiLCIg
PDwgY2VsbEF0KHIsIGMpLmNlbGwtPmNvbCgpIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAg
ICAgPDwgY2VsbEF0KHIsIGMpLmNlbGwtPnJvd1NwYW4oKSA8PCAiLCIgPDwgY2VsbEF0KHIsIGMp
LmNlbGwtPmNvbFNwYW4oKSA8PCAiKSAiOwogICAgICAgICAgICAgZWxzZQpAQCAtMTAyNiw0ICsx
MDIzLDQgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmR1bXAoVGV4dFN0cmVhbQogfQogI2Vu
ZGlmCiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5oCShyZXZpc2lvbiAxODUxNykKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaWZuZGVmIFJlbmRlclRhYmxl
U2VjdGlvbl9ICi0jZGVmaW5lIFJlbmRlclRhYmxlU2VjdGlvbl9ICisjaWZuZGVmIFJlbmRlclRh
YmxlU2VjdGlvbl9oCisjZGVmaW5lIFJlbmRlclRhYmxlU2VjdGlvbl9oCiAKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM0LDQxICszNCwzOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlclRhYmxlQ2VsbDsKIAotY2xhc3Mg
UmVuZGVyVGFibGVTZWN0aW9uIDogcHVibGljIFJlbmRlckNvbnRhaW5lcgoteworY2xhc3MgUmVu
ZGVyVGFibGVTZWN0aW9uIDogcHVibGljIFJlbmRlckNvbnRhaW5lciB7CiBwdWJsaWM6CiAgICAg
UmVuZGVyVGFibGVTZWN0aW9uKE5vZGUqKTsKICAgICB+UmVuZGVyVGFibGVTZWN0aW9uKCk7CisK
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyVGFibGVTZWN0aW9uIjsgfQorCisgICAgdmlydHVhbCBib29sIGlzVGFibGVTZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogCi0gICAgdmlydHVhbCBj
b25zdCBjaGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclRhYmxlU2VjdGlv
biI7IH0KLQotICAgIC8vIG92ZXJyaWRlcwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5k
ZXJPYmplY3QgKmNoaWxkLCBSZW5kZXJPYmplY3QgKmJlZm9yZUNoaWxkID0gMCk7Ci0gICAgdmly
dHVhbCBib29sIGlzVGFibGVTZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
dmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJv
eCA9IGZhbHNlKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9u
KElubGluZUJveCopIHsgfQogCi0jaWZuZGVmIE5ERUJVRwotICAgIHZpcnR1YWwgdm9pZCBkdW1w
KFRleHRTdHJlYW0gKnN0cmVhbSwgRGVwcmVjYXRlZFN0cmluZyBpbmQgPSAiIikgY29uc3Q7Ci0j
ZW5kaWYKLQotICAgIHZvaWQgYWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwgKmNlbGwsIFJlbmRlck9i
amVjdCogcm93KTsKKyAgICB2b2lkIGFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiwgUmVuZGVyT2Jq
ZWN0KiByb3cpOwogCiAgICAgdm9pZCBzZXRDZWxsV2lkdGhzKCk7CiAgICAgdm9pZCBjYWxjUm93
SGVpZ2h0KCk7CiAgICAgaW50IGxheW91dFJvd3MoaW50IGhlaWdodCk7CiAKLSAgICBSZW5kZXJU
YWJsZSAqdGFibGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSAqPihw
YXJlbnQoKSk7IH0KKyAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBhcmVudCgpKTsgfQogCiAgICAgc3RydWN0IENlbGxTdHJ1
Y3QgewotICAgICAgICBSZW5kZXJUYWJsZUNlbGwgKmNlbGw7CisgICAgICAgIFJlbmRlclRhYmxl
Q2VsbCogY2VsbDsKICAgICAgICAgYm9vbCBpbkNvbFNwYW47IC8vIHRydWUgZm9yIGNvbHVtbnMg
YWZ0ZXIgdGhlIGZpcnN0IGluIGEgY29sc3BhbgogICAgIH07CisKICAgICB0eXBlZGVmIFZlY3Rv
cjxDZWxsU3RydWN0PiBSb3c7CisKICAgICBzdHJ1Y3QgUm93U3RydWN0IHsKICAgICAgICAgUm93
KiByb3c7CiAgICAgICAgIFJlbmRlck9iamVjdCogcm93UmVuZGVyZXI7CkBAIC03NiwxMiArNzQs
MTEgQEAgcHVibGljOgogICAgICAgICBMZW5ndGggaGVpZ2h0OwogICAgIH07CiAKLSAgICBDZWxs
U3RydWN0JiBjZWxsQXQoaW50IHJvdywgIGludCBjb2wpIHsKLSAgICAgICAgcmV0dXJuICgqZ3Jp
ZFtyb3ddLnJvdylbY29sXTsKLSAgICB9Ci0gICAgY29uc3QgQ2VsbFN0cnVjdCYgY2VsbEF0KGlu
dCByb3csIGludCBjb2wpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuICgqZ3JpZFtyb3ddLnJvdylb
Y29sXTsKLSAgICB9CisgICAgQ2VsbFN0cnVjdCYgY2VsbEF0KGludCByb3csICBpbnQgY29sKSB7
IHJldHVybiAoKm1fZ3JpZFtyb3ddLnJvdylbY29sXTsgfQorICAgIGNvbnN0IENlbGxTdHJ1Y3Qm
IGNlbGxBdChpbnQgcm93LCBpbnQgY29sKSBjb25zdCB7IHJldHVybiAoKm1fZ3JpZFtyb3ddLnJv
dylbY29sXTsgfQorCisgICAgdm9pZCBhcHBlbmRDb2x1bW4oaW50IHBvcyk7CisgICAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKGludCBwb3MsIGludCBuZXdTaXplKTsKIAog
ICAgIHZpcnR1YWwgaW50IGxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJp
b3IsIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHJpZ2h0bW9zdFBv
c2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wgaW5jbHVkZVNlbGYpIGNv
bnN0OwpAQCAtMTAwLDQwICs5Nyw0NiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCi0gICAgaW50IG51bVJvd3MoKSBjb25z
dCB7IHJldHVybiBncmlkUm93czsgfQorICAgIGludCBudW1Sb3dzKCkgY29uc3QgeyByZXR1cm4g
bV9ncmlkUm93czsgfQogICAgIGludCBudW1Db2x1bW5zKCkgY29uc3Q7Ci0gICAgaW50IGdldEJh
c2VsaW5lKGludCByb3cpIHsgcmV0dXJuIGdyaWRbcm93XS5iYXNlTGluZTsgfQorICAgIHZvaWQg
cmVjYWxjQ2VsbHMoKTsKIAotICAgIHZvaWQgc2V0TmVlZENlbGxSZWNhbGMoKQorICAgIGJvb2wg
bmVlZHNDZWxsUmVjYWxjKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc0NlbGxSZWNhbGM7IH0KKyAg
ICB2b2lkIHNldE5lZWRzQ2VsbFJlY2FsYygpCiAgICAgewotICAgICAgICBuZWVkQ2VsbFJlY2Fs
YyA9IHRydWU7Ci0gICAgICAgIHRhYmxlKCktPnNldE5lZWRTZWN0aW9uUmVjYWxjKCk7CisgICAg
ICAgIG1fbmVlZHNDZWxsUmVjYWxjID0gdHJ1ZTsKKyAgICAgICAgdGFibGUoKS0+c2V0TmVlZHNT
ZWN0aW9uUmVjYWxjKCk7CiAgICAgfQogCi0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIHJlbW92
ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkKTsKKyAgICBpbnQgZ2V0QmFzZWxpbmUoaW50
IHJvdykgeyByZXR1cm4gbV9ncmlkW3Jvd10uYmFzZUxpbmU7IH0KIAotICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQg
eCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICB2aXJ0dWFsIFJl
bmRlck9iamVjdCogcmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCopOwogCi0gICAgLy8gdGhp
cyBnZXRzIGEgY2VsbCBncmlkIGRhdGEgc3RydWN0dXJlLiBjaGFuZ2luZyB0aGUgbnVtYmVyIG9m
Ci0gICAgLy8gY29sdW1ucyBpcyBkb25lIGJ5IHRoZSB0YWJsZQotICAgIFZlY3RvcjxSb3dTdHJ1
Y3Q+IGdyaWQ7Ci0gICAgaW50IGdyaWRSb3dzOwotICAgIFZlY3RvcjxpbnQ+IHJvd1BvczsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAK
LSAgICAvLyB0aGUgY3VycmVudCBpbnNlcnRpb24gcG9zaXRpb24KLSAgICBpbnQgY0NvbDsKLSAg
ICBpbnQgY1JvdzsKLSAgICBib29sIG5lZWRDZWxsUmVjYWxjOworI2lmbmRlZiBOREVCVUcKKyAg
ICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtICosIERlcHJlY2F0ZWRTdHJpbmcgaW5kID0g
IiIpIGNvbnN0OworI2VuZGlmCiAKLSAgICB2b2lkIHJlY2FsY0NlbGxzKCk7CiBwcm90ZWN0ZWQ6
Ci0gICAgYm9vbCBlbnN1cmVSb3dzKGludCBudW1Sb3dzKTsKKyAgICBib29sIGVuc3VyZVJvd3Mo
aW50KTsKICAgICB2b2lkIGNsZWFyR3JpZCgpOworCisgICAgVmVjdG9yPFJvd1N0cnVjdD4gbV9n
cmlkOworICAgIGludCBtX2dyaWRSb3dzOworICAgIFZlY3RvcjxpbnQ+IG1fcm93UG9zOworCisg
ICAgLy8gdGhlIGN1cnJlbnQgaW5zZXJ0aW9uIHBvc2l0aW9uCisgICAgaW50IG1fY0NvbDsKKyAg
ICBpbnQgbV9jUm93OworICAgIGJvb2wgbV9uZWVkc0NlbGxSZWNhbGM7CisKICAgICBpbnQgbV9v
dXRlckJvcmRlckxlZnQ7CiAgICAgaW50IG1fb3V0ZXJCb3JkZXJSaWdodDsKICAgICBpbnQgbV9v
dXRlckJvcmRlclRvcDsKICAgICBpbnQgbV9vdXRlckJvcmRlckJvdHRvbTsKIH07CiAKLX0KLSNl
bmRpZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVuZGVyVGFibGVTZWN0
aW9uX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaAkocmV2aXNpb24gMTg1MTcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9UYWJsZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgflRhYmxlTGF5b3V0KCkgeyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjYWxj
TWluTWF4V2lkdGgoaW50JiBtaW5XaWR0aCwgaW50JiBtYXhXaWR0aCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKSA9IDA7CiAKIHByb3RlY3RlZDoK
</data>
<flag name="review"
          id="4509"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12213</attachid>
            <date>2007-01-04 04:35:33 -0800</date>
            <delta_ts>2007-01-04 07:03:59 -0800</delta_ts>
            <desc>RenderTable* cleanup and reorg</desc>
            <filename>12078_r2.patch</filename>
            <type>text/plain</type>
            <size>124302</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODU3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcxIEBACisyMDA3LTAxLTA0ICBNaXR6IFBldHRlbCAgPG1pdHpAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDc4CisgICAgICAgICAgQ2xl
YW4gdXAgUmVuZGVyVGFibGUqCisKKyAgICAgICAgLSBDb2Rpbmcgc3R5bGUgY2xlYW51cC4KKyAg
ICAgICAgLSBDYW5jZWxlZCBBdXRvVGFibGVMYXlvdXQgYW5kIEZpeGVkVGFibGVMYXlvdXQgYmVp
bmcgZnJpZW5kIGNsYXNzZXMgb2YKKyAgICAgICAgICBSZW5kZXJUYWJsZS4gSW5zdGVhZCwgYWRk
ZWQgcHVibGljIGFjY2Vzc29ycyB0byBSZW5kZXJUYWJsZSBmb3Igd2hhdAorICAgICAgICAgIHRo
ZSB0YWJsZSBsYXlvdXQgY2xhc3NlcyBuZWVkIGFuZCBjaGFuZ2VkIFRhYmxlTGF5b3V0OjpjYWxj
TWluTWF4V2lkdGgoKQorICAgICAgICAgIHRvIHRha2UgcmVmZXJlbmNlcyB0byB0aGUgY2FsbGVy
J3MgbWluIGFuZCBtYXggd2lkdGhzLgorICAgICAgICAtIE1hZGUgUmVuZGVyVGFibGVTZWN0aW9u
J3MgZ3JpZCBwcm90ZWN0ZWQgYW5kIG1vdmVkIGNvZGUgdGhhdCBhY2Nlc3NlZCBpdAorICAgICAg
ICAgIGZyb20gUmVuZGVyVGFibGUgaW50byBSZW5kZXJUYWJsZVNlY3Rpb24uCisKKyAgICAgICAg
Tm8gdGVzdCBwb3NzaWJsZSAobm8gY2hhbmdlIHRvIGZ1bmN0aW9uYWxpdHkpLgorCisgICAgICAg
ICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRv
VGFibGVMYXlvdXQ6OmNhbGNNaW5NYXhXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpBdXRvVGFi
bGVMYXlvdXQ6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNhbGNNaW5NYXhXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9GaXhlZFRh
YmxlTGF5b3V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpSZW5kZXJUYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6flJlbmRlclRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNhbGNXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpzZXRDZWxsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2FsY01pbk1heFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzcGxpdENvbHVtbik6IEZhY3RvcmVkIG91dCB0aGUg
c2VjdGlvbiB3b3JrCisgICAgICAgIHRvIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4o
KS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjphcHBlbmRDb2x1bW4pOiBGYWN0b3Jl
ZCBvdXQgdGhlIHNlY3Rpb24gd29yaworICAgICAgICB0byBSZW5kZXJUYWJsZVNlY3Rpb246OmFw
cGVuZENvbHVtbigpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNvbEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpyZW1vdmVDaGlsZE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGU6OmNhbGNCb3JkZXJMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlOjpjYWxjQm9yZGVyUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGU6Om91dGVyQm9yZGVyVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpvdXRl
ckJvcmRlckJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6b3V0ZXJCb3Jk
ZXJMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpvdXRlckJvcmRlclJpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzZWN0aW9uQWJvdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNlY3Rpb25CZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
OjpjZWxsQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNlbGxCZWZvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmdldE92ZXJmbG93Q2xpcFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmR1bXApOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmdldENvbHVt
blBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6aEJvcmRlclNwYWNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnZCb3JkZXJTcGFjaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjpnZXRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZTo6Y2VsbFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNl
dENlbGxQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpDb2x1bW5TdHJ1
Y3Q6OkNvbHVtblN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29sdW1u
cyk6IEFkZGVkIHRoaXMgYWNjZXNzb3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6
Y29sdW1uUG9zaXRpb25zKTogQWRkZWQgdGhpcyBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpoZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmZv
b3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Zmlyc3RCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpudW1FZmZDb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpzcGFuT2ZFZmZDb2wpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGU6OmNvbFRvRWZmQ29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjplZmZDb2xU
b0NvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Ym9yZGVyc1BhZGRpbmdBbmRT
cGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpuZWVkc1NlY3Rpb25SZWNh
bGMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNldE5lZWRzU2VjdGlvblJlY2Fs
Yyk6IFJlbmFtZWQgc2V0TmVlZFNlY3Rpb25SZWNhbGMoKQorICAgICAgICB0byB0aGlzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Omhhc1NlY3Rpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlOjpyZWNhbGNTZWN0aW9uc0lmTmVlZGVkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q2VsbDo6UmVuZGVyVGFibGVDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2Vs
bDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUZy
b21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c3R5bGVPckNv
bFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUFic29s
dXRlUmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjphYnNv
bHV0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6YmFzZWxp
bmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnNldFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkVG9wQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGFwc2VkQm9y
ZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyOjpDb2xsYXBzZWRC
b3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyczo6Q29sbGFwc2VkQm9y
ZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb2xsYXBzZWRCb3JkZXJzOjphZGRCb3JkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyczo6bmV4dEJvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludEJveERlY29yYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6ZHVtcCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVDZWxsOjpjb2xTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2V0
Q29sU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnJvd1NwYW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpzZXRSb3dTcGFuKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlQ2VsbDo6c2V0Q29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6
cm93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2V0Um93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2VjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q2VsbDo6eVBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnNldENlbGxU
b3BFeHRyYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnNldENlbGxCb3R0
b21FeHRyYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlclRvcEV4
dHJhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQm90dG9tRXh0
cmEpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZVJvdzo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6
OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93OjpsYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OmdldEFic29sdXRlUmVwYWludFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OnBhaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Um93OjpzZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93Ojp0YWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6bGluZUhlaWdodCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OlJlbmRlclRhYmxlU2VjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZVNlY3Rpb246OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNl
Y3Rpb246OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6
ZW5zdXJlUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENl
bGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzZXRDZWxsV2lkdGhz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jvd0hlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpsb3dlc3RQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnJpZ2h0bW9zdFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGVmdG1vc3RQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclRvcCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckJv
dHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJv
cmRlckxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0
ZXJCb3JkZXJSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVjYWxjQ2VsbHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjbGVhckdyaWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6YXBwZW5kQ29sdW1uKTogQWRkZWQuIE1vdmVk
IGNvZGUgZnJvbQorICAgICAgICBSZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1uKCkgaW50byBoZXJl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbik6IEFk
ZGVkLiBNb3ZlZCBjb2RlIGZyb20KKyAgICAgICAgUmVuZGVyVGFibGU6OnNwbGl0Q29sdW1uKCkg
aW50byBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpyZW1vdmVD
aGlsZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpkdW1wKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjppc1RhYmxlU2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OmxpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjp0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rp
b246OmNlbGxBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om51bVJv
d3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpyZWNhbGNDZWxsc0lm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bmVlZHNDZWxs
UmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6c2V0TmVlZHND
ZWxsUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Z2V0QmFz
ZWxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9UYWJsZUxheW91dC5oOgorCiAyMDA3LTAxLTA0
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbi4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkocmV2
aXNpb24gMTg1NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDQsMTYgKzI0NCwxMyBAQCBzdGF0aWMgYm9vbCBzaG91bGRTY2Fs
ZUNvbHVtbnMoUmVuZGVyVGFiCiAgICAgcmV0dXJuIHNjYWxlOwogfQogCi12b2lkIEF1dG9UYWJs
ZUxheW91dDo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjTWlu
TWF4V2lkdGgoaW50JiBtaW5XaWR0aCwgaW50JiBtYXhXaWR0aCkKIHsKLSNpZmRlZiBERUJVR19M
QVlPVVQKLSAgICBxRGVidWcoIkF1dG9UYWJsZUxheW91dDo6Y2FsY01pbk1heFdpZHRoIik7Ci0j
ZW5kaWYKICAgICBmdWxsUmVjYWxjKCk7CiAKICAgICBpbnQgc3Bhbk1heFdpZHRoID0gY2FsY0Vm
ZmVjdGl2ZVdpZHRoKCk7Ci0gICAgaW50IG1pbldpZHRoID0gMDsKLSAgICBpbnQgbWF4V2lkdGgg
PSAwOworICAgIG1pbldpZHRoID0gMDsKKyAgICBtYXhXaWR0aCA9IDA7CiAgICAgaW50IG1heFBl
cmNlbnQgPSAwOwogICAgIGludCBtYXhOb25QZXJjZW50ID0gMDsKIApAQCAtMjg5LDEyICsyODYs
NiBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6Y2FsY01pbk1heFdpZHRoKCkKICAgICAgICAgbWlu
V2lkdGggPSBtYXgobWluV2lkdGgsIHR3LnZhbHVlKCkpOwogICAgICAgICBtYXhXaWR0aCA9IG1p
bldpZHRoOwogICAgIH0KLQotICAgIG1fdGFibGUtPm1fbWF4V2lkdGggPSBtYXhXaWR0aDsKLSAg
ICBtX3RhYmxlLT5tX21pbldpZHRoID0gbWluV2lkdGg7Ci0jaWZkZWYgREVCVUdfTEFZT1VUCi0g
ICAgcURlYnVnKCIgICAgbWluV2lkdGg9JWQsIG1heFdpZHRoPSVkIiwgbV90YWJsZS0+bV9taW5X
aWR0aCwgbV90YWJsZS0+bV9tYXhXaWR0aCk7Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTgyOCwxMCAr
ODE5LDEwIEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogI2lmZGVmIERFQlVHX0xB
WU9VVAogICAgICAgICBxRGVidWcoImNvbCAlZDogJWQgKHdpZHRoICVkKSIsIGksIHBvcywgbV9s
YXlvdXRTdHJ1Y3RbaV0uY2FsY1dpZHRoKTsKICNlbmRpZgotICAgICAgICBtX3RhYmxlLT5jb2x1
bW5Qb3NbaV0gPSBwb3M7CisgICAgICAgIG1fdGFibGUtPmNvbHVtblBvc2l0aW9ucygpW2ldID0g
cG9zOwogICAgICAgICBwb3MgKz0gbV9sYXlvdXRTdHJ1Y3RbaV0uY2FsY1dpZHRoICsgbV90YWJs
ZS0+aEJvcmRlclNwYWNpbmcoKTsKICAgICB9Ci0gICAgbV90YWJsZS0+Y29sdW1uUG9zW21fdGFi
bGUtPmNvbHVtblBvcy5zaXplKCktMV0gPSBwb3M7CisgICAgbV90YWJsZS0+Y29sdW1uUG9zaXRp
b25zKClbbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKCkuc2l6ZSgpIC0gMV0gPSBwb3M7CiB9CiAK
IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHJldmlzaW9uIDE4NTc0KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDggKzM3LDggQEAgcHVibGljOgogICAgIEF1dG9UYWJsZUxheW91dChSZW5kZXJUYWJsZSop
OwogICAgIH5BdXRvVGFibGVMYXlvdXQoKTsKIAotICAgIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7
Ci0gICAgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKGlu
dCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
IAogcHJvdGVjdGVkOgogICAgIHZvaWQgZnVsbFJlY2FsYygpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHJldmlzaW9uIDE4NTc0KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMSArMTAx
LDYgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGludAogICAgIG1fd2lk
dGgucmVzaXplKG5FZmZDb2xzKTsKICAgICBtX3dpZHRoLmZpbGwoTGVuZ3RoKEF1dG8pKTsKIAot
I2lmZGVmIERFQlVHX0xBWU9VVAotICAgIHFEZWJ1ZygiRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dp
ZHRoQXJyYXkoJWQpIiwgdGFibGVXaWR0aCk7Ci0gICAgcURlYnVnKCIgICAgY29sIGVsZW1lbnRz
OiIpOwotI2VuZGlmCi0KICAgICBMZW5ndGggZ3JwV2lkdGg7CiAgICAgd2hpbGUgKGNoaWxkKSB7
CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNvbCgpKSB7CkBAIC0xMjEsMTAgKzExNiw2IEBA
IGludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgICAgICAg
ICBpZiAody5pc0ZpeGVkKCkgJiYgdy52YWx1ZSgpID4gMCkKICAgICAgICAgICAgICAgICAgICAg
ZWZmV2lkdGggPSB3LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCi0jaWZkZWYgREVCVUdfTEFZ
T1VUCi0gICAgICAgICAgICAgICAgcURlYnVnKCIgICAgY29sIGVsZW1lbnQ6IGVmZkNvbD0lZCwg
c3Bhbj0lZDogJWQgdz0lZCB0eXBlPSVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgY0NvbCwg
c3BhbiwgZWZmV2lkdGgsICB3LnZhbHVlLCB3LnR5cGUoKSk7Ci0jZW5kaWYKICAgICAgICAgICAg
ICAgICBpbnQgdXNlZFNwYW4gPSAwOwogICAgICAgICAgICAgICAgIGludCBpID0gMDsKICAgICAg
ICAgICAgICAgICB3aGlsZSAodXNlZFNwYW4gPCBzcGFuKSB7CkBAIC0xMzgsMTAgKzEyOSw2IEBA
IGludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCh3LmlzRml4ZWQoKSB8fCB3LmlzUGVyY2VudCgpKSAmJiB3LmlzUG9zaXRpdmUo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV93aWR0aFtjQ29sK2ldLnNldFJhd1ZhbHVl
KHcudHlwZSgpLCB3LnJhd1ZhbHVlKCkgKiBlU3Bhbik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VkV2lkdGggKz0gZWZmV2lkdGggKiBlU3BhbjsKLSNpZmRlZiBERUJVR19MQVlPVVQKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHFEZWJ1ZygiICAgIHNldHRpbmcgZWZmQ29sICVkIChzcGFu
PSVkKSB0byBtX3dpZHRoICVkKHR5cGU9JWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjQ29sK2ksIGVTcGFuLCBtX3dpZHRoW2NDb2wraV0udmFsdWUsIG1fd2lkdGhbY0NvbCtp
XS50eXBlKCkpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgdXNlZFNwYW4gKz0gZVNwYW47CiAgICAgICAgICAgICAgICAgICAgIGkrKzsKQEAgLTE2
MSwxNSArMTQ4LDEyIEBAIGludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQK
ICAgICAgICAgY2hpbGQgPSBuZXh0OwogICAgIH0KIAotI2lmZGVmIERFQlVHX0xBWU9VVAotICAg
IHFEZWJ1ZygiICAgIGZpcnN0IHJvdzoiKTsKLSNlbmRpZgogICAgIC8vIGl0ZXJhdGUgb3ZlciB0
aGUgZmlyc3Qgcm93IGluIGNhc2Ugc29tZSBhcmUgdW5zcGVjaWZpZWQuCi0gICAgUmVuZGVyVGFi
bGVTZWN0aW9uICpzZWN0aW9uID0gbV90YWJsZS0+aGVhZDsKKyAgICBSZW5kZXJUYWJsZVNlY3Rp
b24qIHNlY3Rpb24gPSBtX3RhYmxlLT5oZWFkZXIoKTsKICAgICBpZiAoIXNlY3Rpb24pCi0gICAg
ICAgIHNlY3Rpb24gPSBtX3RhYmxlLT5maXJzdEJvZHk7CisgICAgICAgIHNlY3Rpb24gPSBtX3Rh
YmxlLT5maXJzdEJvZHkoKTsKICAgICBpZiAoIXNlY3Rpb24pCi0gICAgICAgIHNlY3Rpb24gPSBt
X3RhYmxlLT5mb290OworICAgICAgICBzZWN0aW9uID0gbV90YWJsZS0+Zm9vdGVyKCk7CiAgICAg
aWYgKHNlY3Rpb24pIHsKICAgICAgICAgY0NvbCA9IDA7CiAgICAgICAgIC8vIEZJWE1FOiBUZWNo
bmljYWxseSB0aGUgZmlyc3Qgcm93IGNvdWxkIGJlIGluIGFuIGFyYml0cmFyeSBzZWN0aW9uIChl
LmcuLCBhbiBudGggc2VjdGlvbgpAQCAtMTg3LDkgKzE3MSw2IEBAIGludCBGaXhlZFRhYmxlTGF5
b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgICAgICAgICBpZiAoKHcuaXNGaXhlZCgp
IHx8IHcuaXNQZXJjZW50KCkpICYmIHcuaXNQb3NpdGl2ZSgpKQogICAgICAgICAgICAgICAgICAg
ICBlZmZXaWR0aCA9IHcuaXNQZXJjZW50KCkgPyB3LnJhd1ZhbHVlKCkgLyBwZXJjZW50U2NhbGVG
YWN0b3IgOiB3LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCi0jaWZkZWYgREVCVUdfTEFZT1VU
Ci0gICAgICAgICAgICAgICAgcURlYnVnKCIgICAgdGFibGUgY2VsbDogZWZmQ29sPSVkLCBzcGFu
PSVkOiAlZCIsICBjQ29sLCBzcGFuLCBlZmZXaWR0aCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAg
ICBpbnQgdXNlZFNwYW4gPSAwOwogICAgICAgICAgICAgICAgIGludCBpID0gMDsKICAgICAgICAg
ICAgICAgICB3aGlsZSAodXNlZFNwYW4gPCBzcGFuKSB7CkBAIC0xOTksMTYgKzE4MCw3IEBAIGlu
dCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fd2lkdGhbY0NvbCtpXS5pc0F1dG8oKSAmJiB3LnR5cGUoKSAhPSBBdXRvKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3dpZHRoW2NDb2wraV0uc2V0UmF3VmFsdWUody50eXBl
KCksIHcucmF3VmFsdWUoKSAqIGVTcGFuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRX
aWR0aCArPSBlZmZXaWR0aCplU3BhbjsKLSNpZmRlZiBERUJVR19MQVlPVVQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHFEZWJ1ZygiICAgIHNldHRpbmcgZWZmQ29sICVkIChzcGFuPSVkKSB0byBt
X3dpZHRoICVkKHR5cGU9JWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjQ29s
K2ksIGVTcGFuLCBtX3dpZHRoW2NDb2wraV0udmFsdWUsIG1fd2lkdGhbY0NvbCtpXS50eXBlKCkp
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBERUJVR19MQVlPVVQKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxRGVidWco
IiAgICBtX3dpZHRoIG9mIGNvbCAlZCBhbHJlYWR5IGRlZmluZWQgKHNwYW49JWQpIiwgY0NvbCwg
bV90YWJsZS0+c3Bhbk9mRWZmQ29sKGNDb2wpKTsKICAgICAgICAgICAgICAgICAgICAgfQotI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgICAgIHVzZWRTcGFuICs9IGVTcGFuOwogICAgICAgICAgICAg
ICAgICAgICBpKys7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjIyLDcgKzE5NCw3IEBAIGludCBG
aXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKIAogfQogCi12b2lkIEZpeGVkVGFi
bGVMYXlvdXQ6OmNhbGNNaW5NYXhXaWR0aCgpCit2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNN
aW5NYXhXaWR0aChpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRoKQogewogICAgIC8vIEZJWE1F
OiBUaGlzIGVudGlyZSBjYWxjdWxhdGlvbiBpcyBpbmNvcnJlY3QgZm9yIGJvdGggbWlud2lkdGgg
YW5kIG1heHdpZHRoLgogICAgIApAQCAtMjM4LDggKzIxMCw4IEBAIHZvaWQgRml4ZWRUYWJsZUxh
eW91dDo6Y2FsY01pbk1heFdpZHRoKCkKICAgICBpbnQgdGFibGVXaWR0aCA9IG1fdGFibGUtPnN0
eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpID8gbV90YWJsZS0+c3R5bGUoKS0+d2lkdGgoKS52YWx1
ZSgpIC0gYnMgOiAwOwogICAgIGludCBtdyA9IGNhbGNXaWR0aEFycmF5KHRhYmxlV2lkdGgpICsg
YnM7CiAKLSAgICBtX3RhYmxlLT5tX21pbldpZHRoID0gbWF4KG13LCB0YWJsZVdpZHRoKTsKLSAg
ICBtX3RhYmxlLT5tX21heFdpZHRoID0gbV90YWJsZS0+bV9taW5XaWR0aDsKKyAgICBtaW5XaWR0
aCA9IG1heChtdywgdGFibGVXaWR0aCk7CisgICAgbWF4V2lkdGggPSBtaW5XaWR0aDsKIH0KIAog
dm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQpAQCAtMjQ4LDExICsyMjAsNiBAQCB2b2lk
IEZpeGVkVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgaW50IGF2YWlsYWJsZSA9IHRhYmxlV2lk
dGg7CiAgICAgaW50IG5FZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29scygpOwogICAgIGludCB0
b3RhbFBlcmNlbnQgPSAwOwotICAgIAotI2lmZGVmIERFQlVHX0xBWU9VVAotICAgIHFEZWJ1Zygi
Rml4ZWRUYWJsZUxheW91dDo6bGF5b3V0OiB0YWJsZVdpZHRoPSVkLCBudW1FZmZDb2xzPSVkIiwg
IHRhYmxlV2lkdGgsIG5FZmZDb2xzKTsKLSNlbmRpZgotCiAKICAgICBWZWN0b3I8aW50PiBjYWxj
V2lkdGgobkVmZkNvbHMsIC0xKTsKIApAQCAtMjY5LDkgKzIzNiw2IEBAIHZvaWQgRml4ZWRUYWJs
ZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdG90YWxQZXJjZW50
ID0gMTAwICogcGVyY2VudFNjYWxlRmFjdG9yOwogCi0jaWZkZWYgREVCVUdfTEFZT1VUCi0gICAg
ICAgIHFEZWJ1ZygiRml4ZWRUYWJsZUxheW91dDo6bGF5b3V0OiBhc3NpZ25pbmcgcGVyY2VudCBt
X3dpZHRoLCBiYXNlPSVkLCB0b3RhbFBlcmNlbnQ9JWQiLCBiYXNlLCB0b3RhbFBlcmNlbnQpOwot
I2VuZGlmCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBhdmFpbGFibGUgPiAwICYmIGkgPCBuRWZm
Q29sczsgaSsrKSB7CiAgICAgICAgICAgICBpZiAobV93aWR0aFtpXS5pc1BlcmNlbnQoKSkgewog
ICAgICAgICAgICAgICAgIGludCB3ID0gYmFzZSAqIG1fd2lkdGhbaV0ucmF3VmFsdWUoKSAvIHRv
dGFsUGVyY2VudDsKQEAgLTMyNiwxMyArMjkwLDEwIEBAIHZvaWQgRml4ZWRUYWJsZUxheW91dDo6
bGF5b3V0KCkKICAgICBpbnQgcG9zID0gMDsKICAgICBpbnQgaHNwYWNpbmcgPSBtX3RhYmxlLT5o
Qm9yZGVyU3BhY2luZygpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkrKykg
ewotI2lmZGVmIERFQlVHX0xBWU9VVAotICAgICAgICBxRGVidWcoImNvbCAlZDogJWQgKG1fd2lk
dGggJWQpIiwgaSwgcG9zLCBjYWxjV2lkdGhbaV0pOwotI2VuZGlmCi0gICAgICAgIG1fdGFibGUt
PmNvbHVtblBvc1tpXSA9IHBvczsKKyAgICAgICAgbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKClb
aV0gPSBwb3M7CiAgICAgICAgIHBvcyArPSBjYWxjV2lkdGhbaV0gKyBoc3BhY2luZzsKICAgICB9
Ci0gICAgbV90YWJsZS0+Y29sdW1uUG9zW21fdGFibGUtPmNvbHVtblBvcy5zaXplKCktMV0gPSBw
b3M7CisgICAgbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKClbbV90YWJsZS0+Y29sdW1uUG9zaXRp
b25zKCkuc2l6ZSgpLTFdID0gcG9zOwogfQogCiAjdW5kZWYgREVCVUdfTEFZT1VUCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCShyZXZpc2lvbiAxODU3NCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCAr
MzYsOCBAQCBwdWJsaWM6CiAgICAgRml4ZWRUYWJsZUxheW91dChSZW5kZXJUYWJsZSopOwogICAg
IH5GaXhlZFRhYmxlTGF5b3V0KCk7CiAKLSAgICB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwotICAg
IHZvaWQgbGF5b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aChpbnQmIG1p
bldpZHRoLCBpbnQmIG1heFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKIHBy
b3RlY3RlZDoKICAgICBpbnQgY2FsY1dpZHRoQXJyYXkoaW50IHRhYmxlV2lkdGgpOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMTg1NzQpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMywxMCBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRml4ZWRUYWJsZUxheW91dC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgogI2luY2x1
ZGUgIlJlbmRlclRhYmxlU2VjdGlvbi5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNDYsNTUgKzQ2LDUwIEBAIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKIFJlbmRlclRhYmxlOjpSZW5kZXJUYWJsZShOb2RlKiBub2RlKQogICAgIDog
UmVuZGVyQmxvY2sobm9kZSkKKyAgICAsIG1fY2FwdGlvbigwKQorICAgICwgbV9oZWFkKDApCisg
ICAgLCBtX2Zvb3QoMCkKKyAgICAsIG1fZmlyc3RCb2R5KDApCisgICAgLCBtX3RhYmxlTGF5b3V0
KDApCisgICAgLCBtX2N1cnJlbnRCb3JkZXIoMCkKKyAgICAsIG1fZnJhbWUoVm9pZCkKKyAgICAs
IG1fcnVsZXMoTm9uZSkKKyAgICAsIG1faGFzQ29sRWxlbWVudHMoZmFsc2UpCisgICAgLCBtX3Bh
ZGRpbmcoMCkKKyAgICAsIG1fbmVlZHNTZWN0aW9uUmVjYWxjKDApCisgICAgLCBtX2hTcGFjaW5n
KDApCisgICAgLCBtX3ZTcGFjaW5nKDApCisgICAgLCBtX2JvcmRlckxlZnQoMCkKKyAgICAsIG1f
Ym9yZGVyUmlnaHQoMCkKIHsKLSAgICB0Q2FwdGlvbiA9IDA7Ci0gICAgaGVhZCA9IGZvb3QgPSBm
aXJzdEJvZHkgPSAwOwotICAgIHRhYmxlTGF5b3V0ID0gMDsKLSAgICBtX2N1cnJlbnRCb3JkZXIg
PSAwOwotICAgIAotICAgIHJ1bGVzID0gTm9uZTsKLSAgICBmcmFtZSA9IFZvaWQ7Ci0gICAgaGFz
X2NvbF9lbGVtcyA9IGZhbHNlOwotICAgIGhzcGFjaW5nID0gMDsKLSAgICB2c3BhY2luZyA9IDA7
Ci0gICAgcGFkZGluZyA9IDA7Ci0gICAgbmVlZFNlY3Rpb25SZWNhbGMgPSBmYWxzZTsKLSAgICBw
YWRkaW5nID0gMDsKLSAgICBtX2JvcmRlckxlZnQgPSAwOwotICAgIG1fYm9yZGVyUmlnaHQgPSAw
OwotCi0gICAgY29sdW1uUG9zLnJlc2l6ZSgyKTsKLSAgICBjb2x1bW5Qb3MuZmlsbCgwKTsKLSAg
ICBjb2x1bW5zLnJlc2l6ZSgxKTsKLSAgICBjb2x1bW5zLmZpbGwoQ29sdW1uU3RydWN0KCkpOwot
Ci0gICAgY29sdW1uUG9zWzBdID0gMDsKKyAgICBtX2NvbHVtblBvcy5maWxsKDAsIDIpOworICAg
IG1fY29sdW1ucy5maWxsKENvbHVtblN0cnVjdCgpLCAxKTsKIH0KIAogUmVuZGVyVGFibGU6On5S
ZW5kZXJUYWJsZSgpCiB7Ci0gICAgZGVsZXRlIHRhYmxlTGF5b3V0OworICAgIGRlbGV0ZSBtX3Rh
YmxlTGF5b3V0OwogfQogCi12b2lkIFJlbmRlclRhYmxlOjpzZXRTdHlsZShSZW5kZXJTdHlsZSAq
X3N0eWxlKQordm9pZCBSZW5kZXJUYWJsZTo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxl
KQogewogICAgIEVUYWJsZUxheW91dCBvbGRUYWJsZUxheW91dCA9IHN0eWxlKCkgPyBzdHlsZSgp
LT50YWJsZUxheW91dCgpIDogVEFVVE87Ci0gICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKF9zdHls
ZSk7CisgICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKG5ld1N0eWxlKTsKIAogICAgIC8vIEluIHRo
ZSBjb2xsYXBzZWQgYm9yZGVyIG1vZGVsLCB0aGVyZSBpcyBubyBjZWxsIHNwYWNpbmcuCi0gICAg
aHNwYWNpbmcgPSBjb2xsYXBzZUJvcmRlcnMoKSA/IDAgOiBzdHlsZSgpLT5ob3Jpem9udGFsQm9y
ZGVyU3BhY2luZygpOwotICAgIHZzcGFjaW5nID0gY29sbGFwc2VCb3JkZXJzKCkgPyAwIDogc3R5
bGUoKS0+dmVydGljYWxCb3JkZXJTcGFjaW5nKCk7Ci0gICAgY29sdW1uUG9zWzBdID0gaHNwYWNp
bmc7CisgICAgbV9oU3BhY2luZyA9IGNvbGxhcHNlQm9yZGVycygpID8gMCA6IHN0eWxlKCktPmhv
cml6b250YWxCb3JkZXJTcGFjaW5nKCk7CisgICAgbV92U3BhY2luZyA9IGNvbGxhcHNlQm9yZGVy
cygpID8gMCA6IHN0eWxlKCktPnZlcnRpY2FsQm9yZGVyU3BhY2luZygpOworICAgIG1fY29sdW1u
UG9zWzBdID0gbV9oU3BhY2luZzsKIAotICAgIGlmICghdGFibGVMYXlvdXQgfHwgc3R5bGUoKS0+
dGFibGVMYXlvdXQoKSAhPSBvbGRUYWJsZUxheW91dCkgewotICAgICAgICBkZWxldGUgdGFibGVM
YXlvdXQ7CisgICAgaWYgKCFtX3RhYmxlTGF5b3V0IHx8IHN0eWxlKCktPnRhYmxlTGF5b3V0KCkg
IT0gb2xkVGFibGVMYXlvdXQpIHsKKyAgICAgICAgZGVsZXRlIG1fdGFibGVMYXlvdXQ7CiAKICAg
ICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBDU1MyIHNwZWMsIHlvdSBvbmx5IHVzZSBmaXhlZCB0
YWJsZSBsYXlvdXQgaWYgYW4KICAgICAgICAgLy8gZXhwbGljaXQgd2lkdGggaXMgc3BlY2lmaWVk
IG9uIHRoZSB0YWJsZS4gIEF1dG8gd2lkdGggaW1wbGllcyBhdXRvIHRhYmxlIGxheW91dC4KICAg
ICAgICAgaWYgKHN0eWxlKCktPnRhYmxlTGF5b3V0KCkgPT0gVEZJWEVEICYmICFzdHlsZSgpLT53
aWR0aCgpLmlzQXV0bygpKQotICAgICAgICAgICAgdGFibGVMYXlvdXQgPSBuZXcgRml4ZWRUYWJs
ZUxheW91dCh0aGlzKTsKKyAgICAgICAgICAgIG1fdGFibGVMYXlvdXQgPSBuZXcgRml4ZWRUYWJs
ZUxheW91dCh0aGlzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGFibGVMYXlvdXQgPSBu
ZXcgQXV0b1RhYmxlTGF5b3V0KHRoaXMpOworICAgICAgICAgICAgbV90YWJsZUxheW91dCA9IG5l
dyBBdXRvVGFibGVMYXlvdXQodGhpcyk7CiAgICAgfQogfQogCkBAIC0xMDYsMzYgKzEwMSwzNiBA
QCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QqCiAgICAgc3dpdGNoIChj
aGlsZC0+c3R5bGUoKS0+ZGlzcGxheSgpKSB7CiAgICAgICAgIGNhc2UgVEFCTEVfQ0FQVElPTjoK
ICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICAgICAgICAg
IHRDYXB0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sgKj4oY2hpbGQpOworICAgICAgICAg
ICAgICAgIG1fY2FwdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY2hpbGQpOwogICAg
ICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgVEFCTEVfQ09MVU1OOgogICAgICAgICBjYXNlIFRBQkxFX0NPTFVN
Tl9HUk9VUDoKLSAgICAgICAgICAgIGhhc19jb2xfZWxlbXMgPSB0cnVlOworICAgICAgICAgICAg
bV9oYXNDb2xFbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICB3cmFwSW5Bbm9ueW1vdXNTZWN0
aW9uID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUQUJMRV9IRUFE
RVJfR1JPVVA6Ci0gICAgICAgICAgICBpZiAoIWhlYWQpIHsKKyAgICAgICAgICAgIGlmICghbV9o
ZWFkKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQotICAg
ICAgICAgICAgICAgICAgICBoZWFkID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+
KGNoaWxkKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpcnN0Qm9keSkgeworICAgICAgICAg
ICAgICAgICAgICBtX2hlYWQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGls
ZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX2ZpcnN0Qm9keSkgewogICAgICAgICAgICAg
ICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgZmly
c3RCb2R5ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+KGNoaWxkKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rp
b24qPihjaGlsZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3cmFwSW5Bbm9ueW1vdXNT
ZWN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUQUJMRV9G
T09URVJfR1JPVVA6Ci0gICAgICAgICAgICBpZiAoIWZvb3QpIHsKKyAgICAgICAgICAgIGlmICgh
bV9mb290KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQot
ICAgICAgICAgICAgICAgICAgICBmb290ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9u
ICo+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgbV9mb290ID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpOwogICAgICAgICAgICAgICAgIHdyYXBJbkFub255bW91
c1NlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAogICAgICAgICBjYXNlIFRBQkxFX1JPV19HUk9V
UDoKLSAgICAgICAgICAgIGlmICghZmlyc3RCb2R5KQorICAgICAgICAgICAgaWYgKCFtX2ZpcnN0
Qm9keSkKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGZpcnN0Qm9keSA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlv
biAqPihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpOwogICAgICAgICAgICAgd3JhcEluQW5vbnlt
b3VzU2VjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVEFC
TEVfQ0VMTDoKQEAgLTE2Myw4ICsxNTgsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChS
ZW5kZXJPYmplY3QqCiAgICAgICAgIH0KIAogICAgIGlmICghd3JhcEluQW5vbnltb3VzU2VjdGlv
bikgewotICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIG5leHQgcmVuZGVyZXIgaXMgYWN0dWFs
bHkgd3JhcHBlZCBpbiBhbiBhbm9ueW1vdXMgdGFibGUgc2VjdGlvbiwgd2UgbmVlZCB0byBnbyB1
cCBhbmQgZmluZCB0aGF0CisgICAgICAgIC8vIElmIHRoZSBuZXh0IHJlbmRlcmVyIGlzIGFjdHVh
bGx5IHdyYXBwZWQgaW4gYW4gYW5vbnltb3VzIHRhYmxlIHNlY3Rpb24sIHdlIG5lZWQgdG8gZ28g
dXAgYW5kIGZpbmQgdGhhdC4KICAgICAgICAgd2hpbGUgKGJlZm9yZUNoaWxkICYmICFiZWZvcmVD
aGlsZC0+aXNUYWJsZVNlY3Rpb24oKSAmJiAhYmVmb3JlQ2hpbGQtPmlzVGFibGVDb2woKSkKICAg
ICAgICAgICAgIGJlZm9yZUNoaWxkID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOwogCkBAIC0xNzcs
MTAgKzE3MSw5IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCoKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlbmRlck9iamVjdCAqbGFzdEJveCA9IGJlZm9y
ZUNoaWxkOwotICAgIFJlbmRlck9iamVjdCAqbmV4dFRvTGFzdEJveCA9IGJlZm9yZUNoaWxkOwot
ICAgIHdoaWxlIChsYXN0Qm94ICYmIGxhc3RCb3gtPnBhcmVudCgpLT5pc0Fub255bW91cygpICYm
Ci0gICAgICAgICAgICAhbGFzdEJveC0+aXNUYWJsZVNlY3Rpb24oKSAmJiBsYXN0Qm94LT5zdHls
ZSgpLT5kaXNwbGF5KCkgIT0gVEFCTEVfQ0FQVElPTikgeworICAgIFJlbmRlck9iamVjdCogbGFz
dEJveCA9IGJlZm9yZUNoaWxkOworICAgIFJlbmRlck9iamVjdCogbmV4dFRvTGFzdEJveCA9IGJl
Zm9yZUNoaWxkOworICAgIHdoaWxlIChsYXN0Qm94ICYmIGxhc3RCb3gtPnBhcmVudCgpLT5pc0Fu
b255bW91cygpICYmICFsYXN0Qm94LT5pc1RhYmxlU2VjdGlvbigpICYmIGxhc3RCb3gtPnN0eWxl
KCktPmRpc3BsYXkoKSAhPSBUQUJMRV9DQVBUSU9OKSB7CiAgICAgICAgIG5leHRUb0xhc3RCb3gg
PSBsYXN0Qm94OwogICAgICAgICBsYXN0Qm94ID0gbGFzdEJveC0+cGFyZW50KCk7CiAgICAgfQpA
QCAtMjA1LDcgKzE5OCw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNhbGNXaWR0aCgpCiAgICAgaWYg
KGlzUG9zaXRpb25lZCgpKQogICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCk7CiAKLSAg
ICBSZW5kZXJCbG9jayAqY2IgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJCbG9jayog
Y2IgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBjYi0+Y29u
dGVudFdpZHRoKCk7CiAKICAgICBMZW5ndGhUeXBlIHdpZHRoVHlwZSA9IHN0eWxlKCktPndpZHRo
KCkudHlwZSgpOwpAQCAtMjM4LDUzICsyMzEsNTUgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY1dp
ZHRoKCkKICAgICAvLyBGaW5hbGx5LCB3aXRoIG91ciB0cnVlIHdpZHRoIGRldGVybWluZWQsIGNv
bXB1dGUgb3VyIG1hcmdpbnMgZm9yIHJlYWwuCiAgICAgbV9tYXJnaW5SaWdodCA9IDA7CiAgICAg
bV9tYXJnaW5MZWZ0ID0gMDsKLSAgICBjYWxjSG9yaXpvbnRhbE1hcmdpbnMoc3R5bGUoKS0+bWFy
Z2luTGVmdCgpLHN0eWxlKCktPm1hcmdpblJpZ2h0KCksYXZhaWxhYmxlV2lkdGgpOworICAgIGNh
bGNIb3Jpem9udGFsTWFyZ2lucyhzdHlsZSgpLT5tYXJnaW5MZWZ0KCksIHN0eWxlKCktPm1hcmdp
blJpZ2h0KCksIGF2YWlsYWJsZVdpZHRoKTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0
KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAgICAgQVNTRVJUKG1pbk1heEtub3du
KCkpOwotICAgIEFTU0VSVCghbmVlZFNlY3Rpb25SZWNhbGMpOworICAgIEFTU0VSVCghbV9uZWVk
c1NlY3Rpb25SZWNhbGMpOwogCiAgICAgaWYgKHBvc0NoaWxkTmVlZHNMYXlvdXQoKSAmJiAhbm9y
bWFsQ2hpbGROZWVkc0xheW91dCgpICYmICFzZWxmTmVlZHNMYXlvdXQoKSkgewotICAgICAgICAv
LyBBbGwgd2UgaGF2ZSB0byBpcyBsYXkgb3V0IG91ciBwb3NpdGlvbmVkIG9iamVjdHMuCisgICAg
ICAgIC8vIEFsbCB3ZSBoYXZlIHRvIGRvIGlzIGxheSBvdXQgb3VyIHBvc2l0aW9uZWQgb2JqZWN0
cy4KICAgICAgICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMoZmFsc2UpOwogICAgICAgICBzZXRO
ZWVkc0xheW91dChmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBJbnRSZWN0
IG9sZEJvdW5kcywgb2xkRnVsbEJvdW5kczsKKyAgICBJbnRSZWN0IG9sZEJvdW5kczsKKyAgICBJ
bnRSZWN0IG9sZEZ1bGxCb3VuZHM7CiAgICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0Zv
clJlcGFpbnREdXJpbmdMYXlvdXQoKTsKICAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQogICAgICAg
ICBnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0SW5jbHVkaW5nRmxvYXRzKG9sZEJvdW5kcywgb2xkRnVs
bEJvdW5kcyk7CiAgICAgCi0gICAgbV9oZWlnaHQgPSBtX292ZXJmbG93SGVpZ2h0ID0gMDsKKyAg
ICBtX2hlaWdodCA9IDA7CisgICAgbV9vdmVyZmxvd0hlaWdodCA9IDA7CiAgICAgaW5pdE1heE1h
cmdpblZhbHVlcygpOwogICAgIAogICAgIC8vaW50IG9sZFdpZHRoID0gbV93aWR0aDsKICAgICBj
YWxjV2lkdGgoKTsKIAotICAgIC8vIHRoZSBvcHRpbWlzYXRpb24gYmVsb3cgZG9lc24ndCB3b3Jr
IHNpbmNlIHRoZSBpbnRlcm5hbCB0YWJsZQorICAgIC8vIEZJWE1FOiBUaGUgb3B0aW1pc2F0aW9u
IGJlbG93IGRvZXNuJ3Qgd29yayBzaW5jZSB0aGUgaW50ZXJuYWwgdGFibGUKICAgICAvLyBsYXlv
dXQgY291bGQgaGF2ZSBjaGFuZ2VkLiAgd2UgbmVlZCB0byBhZGQgYSBmbGFnIHRvIHRoZSB0YWJs
ZQogICAgIC8vIGxheW91dCB0aGF0IHRlbGxzIHVzIGlmIHNvbWV0aGluZyBoYXMgY2hhbmdlZCBp
biB0aGUgbWluIG1heAogICAgIC8vIGNhbGN1bGF0aW9ucyB0byBkbyBpdCBjb3JyZWN0bHkuCiAv
LyAgICAgaWYgKCBvbGRXaWR0aCAhPSBtX3dpZHRoIHx8IGNvbHVtbnMuc2l6ZSgpICsgMSAhPSBj
b2x1bW5Qb3Muc2l6ZSgpICkKLSAgICB0YWJsZUxheW91dC0+bGF5b3V0KCk7CisgICAgbV90YWJs
ZUxheW91dC0+bGF5b3V0KCk7CiAKICAgICBzZXRDZWxsV2lkdGhzKCk7CiAKICAgICAvLyBsYXlv
dXQgY2hpbGQgb2JqZWN0cwogICAgIGludCBjYWxjdWxhdGVkSGVpZ2h0ID0gMDsKIAotICAgIFJl
bmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgLy8gRklYTUU6
IFdoYXQgYWJvdXQgYSBmb3JtIHRoYXQgaGFzIGEgZGlzcGxheSB2YWx1ZSB0aGF0IG1ha2VzIGl0
IGEgdGFibGUgc2VjdGlvbj8KICAgICAgICAgaWYgKGNoaWxkLT5uZWVkc0xheW91dCgpICYmICEo
Y2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKGZvcm1UYWcp
KSkKICAgICAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKICAgICAgICAgaWYgKGNoaWxkLT5pc1Rh
YmxlU2VjdGlvbigpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rp
b24gKj4oY2hpbGQpLT5jYWxjUm93SGVpZ2h0KCk7Ci0gICAgICAgICAgICBjYWxjdWxhdGVkSGVp
Z2h0ICs9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGlsZCktPmxheW91dFJv
d3MoMCk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGls
ZCktPmNhbGNSb3dIZWlnaHQoKTsKKyAgICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgKz0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpLT5sYXlvdXRSb3dzKDApOwogICAg
ICAgICB9CiAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgfQpAQCAt
MjkyLDEwICsyODcsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICBtX292ZXJm
bG93V2lkdGggPSBtX3dpZHRoICsgKGNvbGxhcHNlQm9yZGVycygpID8gb3V0ZXJCb3JkZXJSaWdo
dCgpIC0gYm9yZGVyUmlnaHQoKSA6IDApOwogICAgIG1fb3ZlcmZsb3dMZWZ0ID0gY29sbGFwc2VC
b3JkZXJzKCkgPyBib3JkZXJMZWZ0KCkgLSBvdXRlckJvcmRlckxlZnQoKSA6IDA7CiAKLSAgICAv
LyAjIyMgY29sbGFwc2UgY2FwdGlvbiBtYXJnaW4KLSAgICBpZiAodENhcHRpb24gJiYgdENhcHRp
b24tPnN0eWxlKCktPmNhcHRpb25TaWRlKCkgIT0gQ0FQQk9UVE9NKSB7Ci0gICAgICAgIHRDYXB0
aW9uLT5zZXRQb3ModENhcHRpb24tPm1hcmdpbkxlZnQoKSwgbV9oZWlnaHQpOwotICAgICAgICBt
X2hlaWdodCArPSB0Q2FwdGlvbi0+aGVpZ2h0KCkgKyB0Q2FwdGlvbi0+bWFyZ2luVG9wKCkgKyB0
Q2FwdGlvbi0+bWFyZ2luQm90dG9tKCk7CisgICAgLy8gRklYTUU6IENvbGxhcHNlIGNhcHRpb24g
bWFyZ2luLgorICAgIGlmIChtX2NhcHRpb24gJiYgbV9jYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9u
U2lkZSgpICE9IENBUEJPVFRPTSkgeworICAgICAgICBtX2NhcHRpb24tPnNldFBvcyhtX2NhcHRp
b24tPm1hcmdpbkxlZnQoKSwgbV9oZWlnaHQpOworICAgICAgICBtX2hlaWdodCArPSBtX2NhcHRp
b24tPmhlaWdodCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Ub3AoKSArIG1fY2FwdGlvbi0+bWFyZ2lu
Qm90dG9tKCk7CiAgICAgfQogCiAgICAgaW50IGJwVG9wID0gYm9yZGVyVG9wKCkgKyAoY29sbGFw
c2VCb3JkZXJzKCkgPyAwIDogcGFkZGluZ1RvcCgpKTsKQEAgLTMyMSwxMSArMzE2LDExIEBAIHZv
aWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgaWYgKHRoID4gY2FsY3VsYXRlZEhlaWdodCkg
ewogICAgICAgICAvLyB3ZSBoYXZlIHRvIHJlZGlzdHJpYnV0ZSB0aGF0IGhlaWdodCB0byBnZXQg
dGhlIGNvbnN0cmFpbnQgY29ycmVjdGx5CiAgICAgICAgIC8vIGp1c3QgZm9yY2UgdGhlIGZpcnN0
IGJvZHkgdG8gdGhlIGhlaWdodCBuZWVkZWQKLSAgICAgICAgLy8gIyMjIEZJWE1FIFRoaXMgc2hv
dWxkIHRha2UgaGVpZ2h0IGNvbnN0cmFpbnRzIG9uIGFsbCB0YWJsZSBzZWN0aW9ucyBpbnRvIGFj
Y291bnQgYW5kIGRpc3RyaWJ1dGUKLSAgICAgICAgLy8gYWNjb3JkaW5nbHkuIEZvciBub3cgdGhp
cyBzaG91bGQgYmUgZ29vZCBlbm91Z2gKLSAgICAgICAgaWYgKGZpcnN0Qm9keSkgewotICAgICAg
ICAgICAgZmlyc3RCb2R5LT5jYWxjUm93SGVpZ2h0KCk7Ci0gICAgICAgICAgICBmaXJzdEJvZHkt
PmxheW91dFJvd3ModGggLSBjYWxjdWxhdGVkSGVpZ2h0KTsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHRha2UgaGVpZ2h0IGNvbnN0cmFpbnRzIG9uIGFsbCB0YWJsZSBzZWN0aW9ucyBp
bnRvIGFjY291bnQgYW5kIGRpc3RyaWJ1dGUKKyAgICAgICAgLy8gYWNjb3JkaW5nbHkuIEZvciBu
b3cgdGhpcyBzaG91bGQgYmUgZ29vZCBlbm91Z2guCisgICAgICAgIGlmIChtX2ZpcnN0Qm9keSkg
eworICAgICAgICAgICAgbV9maXJzdEJvZHktPmNhbGNSb3dIZWlnaHQoKTsKKyAgICAgICAgICAg
IG1fZmlyc3RCb2R5LT5sYXlvdXRSb3dzKHRoIC0gY2FsY3VsYXRlZEhlaWdodCk7CiAgICAgICAg
IH0gZWxzZSBpZiAoIXN0eWxlKCktPmh0bWxIYWNrcygpKQogICAgICAgICAgICAgLy8gQ29tcGxl
dGVseSBlbXB0eSB0YWJsZXMgKHdpdGggbm8gc2VjdGlvbnMgb3IgYW55dGhpbmcpIHNob3VsZCBh
dCBsZWFzdCBob25vciBzcGVjaWZpZWQgaGVpZ2h0CiAgICAgICAgICAgICAvLyBpbiBzdHJpY3Qg
bW9kZS4KQEAgLTMzNywzMyArMzMyLDMzIEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAg
ICAgICAgIGJsICs9IHBhZGRpbmdMZWZ0KCk7CiAKICAgICAvLyBwb3NpdGlvbiB0aGUgdGFibGUg
c2VjdGlvbnMKLSAgICBpZiAoaGVhZCkgewotICAgICAgICBoZWFkLT5zZXRQb3MoYmwsIG1faGVp
Z2h0KTsKLSAgICAgICAgbV9oZWlnaHQgKz0gaGVhZC0+aGVpZ2h0KCk7CisgICAgaWYgKG1faGVh
ZCkgeworICAgICAgICBtX2hlYWQtPnNldFBvcyhibCwgbV9oZWlnaHQpOworICAgICAgICBtX2hl
aWdodCArPSBtX2hlYWQtPmhlaWdodCgpOwogICAgIH0KLSAgICBmb3IgKFJlbmRlck9iamVjdCAq
Ym9keSA9IGZpcnN0Qm9keTsgYm9keTsgYm9keSA9IGJvZHktPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgaWYgKGJvZHkgIT0gaGVhZCAmJiBib2R5ICE9IGZvb3QgJiYgYm9keS0+aXNUYWJsZVNl
Y3Rpb24oKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBib2R5ID0gbV9maXJzdEJvZHk7IGJv
ZHk7IGJvZHkgPSBib2R5LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChib2R5ICE9IG1f
aGVhZCAmJiBib2R5ICE9IG1fZm9vdCAmJiBib2R5LT5pc1RhYmxlU2VjdGlvbigpKSB7CiAgICAg
ICAgICAgICBib2R5LT5zZXRQb3MoYmwsIG1faGVpZ2h0KTsKICAgICAgICAgICAgIG1faGVpZ2h0
ICs9IGJvZHktPmhlaWdodCgpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChmb290KSB7Ci0g
ICAgICAgIGZvb3QtPnNldFBvcyhibCwgbV9oZWlnaHQpOwotICAgICAgICBtX2hlaWdodCArPSBm
b290LT5oZWlnaHQoKTsKKyAgICBpZiAobV9mb290KSB7CisgICAgICAgIG1fZm9vdC0+c2V0UG9z
KGJsLCBtX2hlaWdodCk7CisgICAgICAgIG1faGVpZ2h0ICs9IG1fZm9vdC0+aGVpZ2h0KCk7CiAg
ICAgfQogCiAgICAgbV9oZWlnaHQgKz0gYnBCb3R0b207CiAgICAgICAgICAgICAgICAKLSAgICBp
ZiAodENhcHRpb24gJiYgdENhcHRpb24tPnN0eWxlKCktPmNhcHRpb25TaWRlKCk9PUNBUEJPVFRP
TSkgewotICAgICAgICB0Q2FwdGlvbi0+c2V0UG9zKHRDYXB0aW9uLT5tYXJnaW5MZWZ0KCksIG1f
aGVpZ2h0KTsKLSAgICAgICAgbV9oZWlnaHQgKz0gdENhcHRpb24tPmhlaWdodCgpICsgdENhcHRp
b24tPm1hcmdpblRvcCgpICsgdENhcHRpb24tPm1hcmdpbkJvdHRvbSgpOworICAgIGlmIChtX2Nh
cHRpb24gJiYgbV9jYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9uU2lkZSgpID09IENBUEJPVFRPTSkg
eworICAgICAgICBtX2NhcHRpb24tPnNldFBvcyhtX2NhcHRpb24tPm1hcmdpbkxlZnQoKSwgbV9o
ZWlnaHQpOworICAgICAgICBtX2hlaWdodCArPSBtX2NhcHRpb24tPmhlaWdodCgpICsgbV9jYXB0
aW9uLT5tYXJnaW5Ub3AoKSArIG1fY2FwdGlvbi0+bWFyZ2luQm90dG9tKCk7CiAgICAgfQogCiAg
ICAgaWYgKGlzUG9zaXRpb25lZCgpKQogICAgICAgICBjYWxjSGVpZ2h0KCk7CiAKICAgICAvLyB0
YWJsZSBjYW4gYmUgY29udGFpbmluZyBibG9jayBvZiBwb3NpdGlvbmVkIGVsZW1lbnRzLgotICAg
IC8vICMjIyBvbmx5IHBhc3MgdHJ1ZSBpZiB3aWR0aCBvciBoZWlnaHQgY2hhbmdlZC4KKyAgICAv
LyBGSVhNRTogT25seSBwYXNzIHRydWUgaWYgd2lkdGggb3IgaGVpZ2h0IGNoYW5nZWQuCiAgICAg
bGF5b3V0UG9zaXRpb25lZE9iamVjdHModHJ1ZSk7CiAKICAgICAvLyBSZXBhaW50IHdpdGggb3Vy
IG5ldyBib3VuZHMgaWYgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gb3VyIG9sZCBib3VuZHMuCkBA
IC0zNzUsOSArMzcwLDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAKIHZvaWQgUmVu
ZGVyVGFibGU6OnNldENlbGxXaWR0aHMoKQogewotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGlmICggY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgKQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+KGNoaWxkKS0+c2V0Q2VsbFdpZHRocygpOworICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlv
bigpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQp
LT5zZXRDZWxsV2lkdGhzKCk7CisgICAgfQogfQogCiB2b2lkIFJlbmRlclRhYmxlOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCkBAIC0zOTMsOCArMzg5LDcgQEAg
dm9pZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgIGlmICh0eCA+PSBw
YWludEluZm8ucmVjdC5yaWdodCgpICsgb3MgfHwgdHggKyB3aWR0aCgpIDw9IHBhaW50SW5mby5y
ZWN0LngoKSAtIG9zKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoKHBhaW50UGhhc2UgPT0g
UGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludFBoYXNlID09IFBhaW50UGhhc2VDaGls
ZEJsb2NrQmFja2dyb3VuZCkKLSAgICAgICAgJiYgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3Jk
ZXIoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKKyAgICBpZiAoKHBhaW50
UGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludFBoYXNlID09IFBhaW50
UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3Jk
ZXIoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKICAgICAgICAgcGFpbnRC
b3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CiAKICAgICAvLyBXZSdyZSBkb25lLiAg
V2UgZG9uJ3QgYm90aGVyIHBhaW50aW5nIGFueSBjaGlsZHJlbi4KQEAgLTQwOSw3ICs0MDQsNyBA
QCB2b2lkIFJlbmRlclRhYmxlOjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgaW5mby5wYWlu
dGluZ1Jvb3QgPSBwYWludGluZ1Jvb3RGb3JDaGlsZHJlbihwYWludEluZm8pOwogCiAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWNoaWxkLT5sYXllcigpICYmIChjaGls
ZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSB0Q2FwdGlvbikpCisgICAgICAgIGlmICgh
Y2hpbGQtPmxheWVyKCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkID09IG1f
Y2FwdGlvbikpCiAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgdHgsIHR5KTsKICAgICB9
CiAKQEAgLTQzOCwxMCArNDMzLDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50Qm94RGVjb3Jh
dGlvbnMoUGEKICAgICBpbnQgaCA9IGhlaWdodCgpOwogCiAgICAgLy8gQWNjb3VudCBmb3IgdGhl
IGNhcHRpb24uCi0gICAgaWYgKHRDYXB0aW9uKSB7Ci0gICAgICAgIGludCBjYXB0aW9uSGVpZ2h0
ID0gKHRDYXB0aW9uLT5oZWlnaHQoKSArIHRDYXB0aW9uLT5tYXJnaW5Cb3R0b20oKSArICB0Q2Fw
dGlvbi0+bWFyZ2luVG9wKCkpOworICAgIGlmIChtX2NhcHRpb24pIHsKKyAgICAgICAgaW50IGNh
cHRpb25IZWlnaHQgPSAobV9jYXB0aW9uLT5oZWlnaHQoKSArIG1fY2FwdGlvbi0+bWFyZ2luQm90
dG9tKCkgKyAgbV9jYXB0aW9uLT5tYXJnaW5Ub3AoKSk7CiAgICAgICAgIGggLT0gY2FwdGlvbkhl
aWdodDsKLSAgICAgICAgaWYgKHRDYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9uU2lkZSgpICE9IENB
UEJPVFRPTSkKKyAgICAgICAgaWYgKG1fY2FwdGlvbi0+c3R5bGUoKS0+Y2FwdGlvblNpZGUoKSAh
PSBDQVBCT1RUT00pCiAgICAgICAgICAgICB0eSArPSBjYXB0aW9uSGVpZ2h0OwogICAgIH0KIApA
QCAtNDYyLDE0ICs0NTcsMTMgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY01pbk1heFdpZHRoKCkK
IHsKICAgICBBU1NFUlQoIW1pbk1heEtub3duKCkpOwogCi0gICAgaWYgKG5lZWRTZWN0aW9uUmVj
YWxjKQotICAgICAgICByZWNhbGNTZWN0aW9ucygpOworICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVk
ZWQoKTsKICAgICByZWNhbGNIb3Jpem9udGFsQm9yZGVycygpOwogCi0gICAgdGFibGVMYXlvdXQt
PmNhbGNNaW5NYXhXaWR0aCgpOworICAgIG1fdGFibGVMYXlvdXQtPmNhbGNNaW5NYXhXaWR0aCht
X21pbldpZHRoLCBtX21heFdpZHRoKTsKIAotICAgIGlmICh0Q2FwdGlvbiAmJiB0Q2FwdGlvbi0+
bWluV2lkdGgoKSA+IG1fbWluV2lkdGgpCi0gICAgICAgIG1fbWluV2lkdGggPSB0Q2FwdGlvbi0+
bWluV2lkdGgoKTsKKyAgICBpZiAobV9jYXB0aW9uKQorICAgICAgICBtX21pbldpZHRoID0gbWF4
KG1fbWluV2lkdGgsIG1fY2FwdGlvbi0+bWluV2lkdGgoKSk7CiAKICAgICBzZXRNaW5NYXhLbm93
bigpOwogfQpAQCAtNDc3LDY4ICs0NzEsNTIgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY01pbk1h
eFdpZHRoKCkKIHZvaWQgUmVuZGVyVGFibGU6OnNwbGl0Q29sdW1uKGludCBwb3MsIGludCBmaXJz
dFNwYW4pCiB7CiAgICAgLy8gd2UgbmVlZCB0byBhZGQgYSBuZXcgY29sdW1uU3RydWN0Ci0gICAg
aW50IG9sZFNpemUgPSBjb2x1bW5zLnNpemUoKTsKLSAgICBjb2x1bW5zLnJlc2l6ZShvbGRTaXpl
ICsgMSk7Ci0gICAgaW50IG9sZFNwYW4gPSBjb2x1bW5zW3Bvc10uc3BhbjsKKyAgICBpbnQgb2xk
U2l6ZSA9IG1fY29sdW1ucy5zaXplKCk7CisgICAgbV9jb2x1bW5zLnJlc2l6ZShvbGRTaXplICsg
MSk7CisgICAgaW50IG9sZFNwYW4gPSBtX2NvbHVtbnNbcG9zXS5zcGFuOwogICAgIEFTU0VSVChv
bGRTcGFuID4gZmlyc3RTcGFuKTsKLSAgICBjb2x1bW5zW3Bvc10uc3BhbiA9IGZpcnN0U3BhbjsK
LSAgICBtZW1tb3ZlKGNvbHVtbnMuZGF0YSgpICsgcG9zICsgMSwgY29sdW1ucy5kYXRhKCkgKyBw
b3MsIChvbGRTaXplLXBvcykqc2l6ZW9mKENvbHVtblN0cnVjdCkpOwotICAgIGNvbHVtbnNbcG9z
KzFdLnNwYW4gPSBvbGRTcGFuIC0gZmlyc3RTcGFuOworICAgIG1fY29sdW1uc1twb3NdLnNwYW4g
PSBmaXJzdFNwYW47CisgICAgbWVtbW92ZShtX2NvbHVtbnMuZGF0YSgpICsgcG9zICsgMSwgbV9j
b2x1bW5zLmRhdGEoKSArIHBvcywgKG9sZFNpemUgLSBwb3MpICogc2l6ZW9mKENvbHVtblN0cnVj
dCkpOworICAgIG1fY29sdW1uc1twb3MgKyAxXS5zcGFuID0gb2xkU3BhbiAtIGZpcnN0U3BhbjsK
IAogICAgIC8vIGNoYW5nZSB3aWR0aCBvZiBhbGwgcm93cy4KLSAgICBmb3IgKFJlbmRlck9iamVj
dCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewotICAgICAgICAg
ICAgUmVuZGVyVGFibGVTZWN0aW9uICpzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVT
ZWN0aW9uICo+KGNoaWxkKTsKLSAgICAgICAgICAgIGlmIChzZWN0aW9uLT5jQ29sID4gcG9zKQot
ICAgICAgICAgICAgICAgIHNlY3Rpb24tPmNDb2wrKzsKLSAgICAgICAgICAgIGludCBzaXplID0g
c2VjdGlvbi0+bnVtUm93cygpOwotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwg
c2l6ZTsgKytyb3cpIHsKLSAgICAgICAgICAgICAgICBzZWN0aW9uLT5ncmlkW3Jvd10ucm93LT5y
ZXNpemUob2xkU2l6ZSArIDEpOwotICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbjo6
Um93ICZyID0gKnNlY3Rpb24tPmdyaWRbcm93XS5yb3c7Ci0gICAgICAgICAgICAgICAgbWVtbW92
ZShyLmRhdGEoKSArIHBvcyArIDEsIHIuZGF0YSgpICsgcG9zLCAob2xkU2l6ZSAtIHBvcykgKiBz
aXplb2YoUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0KSk7Ci0gICAgICAgICAgICAgICAg
cltwb3MgKyAxXS5jZWxsID0gMDsKLSAgICAgICAgICAgICAgICByW3BvcyArIDFdLmluQ29sU3Bh
biA9IHJbcG9zXS5pbkNvbFNwYW4gfHwgcltwb3NdLmNlbGw7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNU
YWJsZVNlY3Rpb24oKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlv
bio+KGNoaWxkKS0+c3BsaXRDb2x1bW4ocG9zLCBvbGRTaXplICsgMSk7CiAgICAgfQotICAgIGNv
bHVtblBvcy5yZXNpemUobnVtRWZmQ29scygpICsgMSk7CisKKyAgICBtX2NvbHVtblBvcy5yZXNp
emUobnVtRWZmQ29scygpICsgMSk7CiAgICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMo
KTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1uKGludCBzcGFuKQogewogICAg
IC8vIGVhc3kgY2FzZS4KLSAgICBpbnQgcG9zID0gY29sdW1ucy5zaXplKCk7CisgICAgaW50IHBv
cyA9IG1fY29sdW1ucy5zaXplKCk7CiAgICAgaW50IG5ld1NpemUgPSBwb3MgKyAxOwotICAgIGNv
bHVtbnMucmVzaXplKG5ld1NpemUpOwotICAgIGNvbHVtbnNbcG9zXS5zcGFuID0gc3BhbjsKKyAg
ICBtX2NvbHVtbnMucmVzaXplKG5ld1NpemUpOworICAgIG1fY29sdW1uc1twb3NdLnNwYW4gPSBz
cGFuOwogCiAgICAgLy8gY2hhbmdlIHdpZHRoIG9mIGFsbCByb3dzLgotICAgIGZvciAoUmVuZGVy
T2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24gKnNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJU
YWJsZVNlY3Rpb24gKj4oY2hpbGQpOwotICAgICAgICAgICAgaW50IHNpemUgPSBzZWN0aW9uLT5u
dW1Sb3dzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyArK3Jv
dykgewotICAgICAgICAgICAgICAgIHNlY3Rpb24tPmdyaWRbcm93XS5yb3ctPnJlc2l6ZShuZXdT
aXplKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIGMg
PSBzZWN0aW9uLT5jZWxsQXQocm93LCBwb3MpOwotICAgICAgICAgICAgICAgIGMuY2VsbCA9IDA7
Ci0gICAgICAgICAgICAgICAgYy5pbkNvbFNwYW4gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5p
c1RhYmxlU2VjdGlvbigpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0
aW9uKj4oY2hpbGQpLT5hcHBlbmRDb2x1bW4ocG9zKTsKICAgICB9Ci0gICAgY29sdW1uUG9zLnJl
c2l6ZShudW1FZmZDb2xzKCkgKyAxKTsKKworICAgIG1fY29sdW1uUG9zLnJlc2l6ZShudW1FZmZD
b2xzKCkgKyAxKTsKICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwogfQogCi1S
ZW5kZXJUYWJsZUNvbCAqUmVuZGVyVGFibGU6OmNvbEVsZW1lbnQoaW50IGNvbCkgY29uc3QKK1Jl
bmRlclRhYmxlQ29sKiBSZW5kZXJUYWJsZTo6Y29sRWxlbWVudChpbnQgY29sKSBjb25zdAogewot
ICAgIGlmICghaGFzX2NvbF9lbGVtcykKKyAgICBpZiAoIW1faGFzQ29sRWxlbWVudHMpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7Cisg
ICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICBpbnQgY0NvbCA9IDA7
CisKICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ29sKCkp
IHsKLSAgICAgICAgICAgIFJlbmRlclRhYmxlQ29sICpjb2xFbGVtID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGFibGVDb2wgKj4oY2hpbGQpOworICAgICAgICAgICAgUmVuZGVyVGFibGVDb2wqIGNvbEVs
ZW0gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNvbCo+KGNoaWxkKTsKICAgICAgICAgICAgIGlu
dCBzcGFuID0gY29sRWxlbS0+c3BhbigpOwogICAgICAgICAgICAgaWYgKCFjb2xFbGVtLT5maXJz
dENoaWxkKCkpIHsKICAgICAgICAgICAgICAgICBjQ29sICs9IHNwYW47CkBAIC01NDYsNzQgKzUy
NCw2OCBAQCBSZW5kZXJUYWJsZUNvbCAqUmVuZGVyVGFibGU6OmNvbEVsZW1lbnQoCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjb2xFbGVtOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBSZW5kZXJPYmplY3QgKm5leHQgPSBjaGlsZC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAg
UmVuZGVyT2JqZWN0KiBuZXh0ID0gY2hpbGQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGlm
ICghbmV4dCkKICAgICAgICAgICAgICAgICBuZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAg
ICAgICAgICAgICBpZiAoIW5leHQgJiYgY2hpbGQtPnBhcmVudCgpLT5pc1RhYmxlQ29sKCkpCiAg
ICAgICAgICAgICAgICAgbmV4dCA9IGNoaWxkLT5wYXJlbnQoKS0+bmV4dFNpYmxpbmcoKTsKICAg
ICAgICAgICAgIGNoaWxkID0gbmV4dDsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZCA9PSB0Q2Fw
dGlvbikKKyAgICAgICAgfSBlbHNlIGlmIChjaGlsZCA9PSBtX2NhcHRpb24pCiAgICAgICAgICAg
ICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CiAKLXZvaWQgUmVuZGVyVGFibGU6OnJl
Y2FsY1NlY3Rpb25zSWZOZWVkZWQoKQotewotICAgIGlmIChuZWVkU2VjdGlvblJlY2FsYykKLSAg
ICAgICAgcmVjYWxjU2VjdGlvbnMoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBSZW5kZXJU
YWJsZTo6cmVjYWxjU2VjdGlvbnMoKQogewotICAgIHRDYXB0aW9uID0gMDsKLSAgICBoZWFkID0g
Zm9vdCA9IGZpcnN0Qm9keSA9IDA7Ci0gICAgaGFzX2NvbF9lbGVtcyA9IGZhbHNlOworICAgIG1f
Y2FwdGlvbiA9IDA7CisgICAgbV9oZWFkID0gMDsKKyAgICBtX2Zvb3QgPSAwOworICAgIG1fZmly
c3RCb2R5ID0gMDsKKyAgICBtX2hhc0NvbEVsZW1lbnRzID0gZmFsc2U7CiAKLSAgICAvLyBXZSBu
ZWVkIHRvIGdldCB2YWxpZCBwb2ludGVycyB0byBjYXB0aW9uLCBoZWFkLCBmb290IGFuZCBmaXJz
dGJvZHkgYWdhaW4KLSAgICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgLy8gV2UgbmVlZCB0
byBnZXQgdmFsaWQgcG9pbnRlcnMgdG8gY2FwdGlvbiwgaGVhZCwgZm9vdCBhbmQgZmlyc3QgYm9k
eSBhZ2FpbgorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgc3dpdGNoIChjaGls
ZC0+c3R5bGUoKS0+ZGlzcGxheSgpKSB7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX0NBUFRJT046
Ci0gICAgICAgICAgICAgICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+aXNSZW5kZXJCbG9jaygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRDYXB0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxv
Y2sqPihjaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIHRDYXB0aW9uLT5zZXROZWVkc0xheW91
dCh0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fY2FwdGlvbiAmJiBjaGlsZC0+aXNSZW5k
ZXJCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fY2FwdGlvbiA9IHN0YXRpY19jYXN0
PFJlbmRlckJsb2NrKj4oY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBtX2NhcHRpb24tPnNl
dE5lZWRzTGF5b3V0KHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgVEFCTEVfQ09MVU1OOgogICAgICAgICAgICAgY2FzZSBU
QUJMRV9DT0xVTU5fR1JPVVA6Ci0gICAgICAgICAgICAgICAgaGFzX2NvbF9lbGVtcyA9IHRydWU7
CisgICAgICAgICAgICAgICAgbV9oYXNDb2xFbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX0hFQURFUl9HUk9VUDoKICAgICAgICAg
ICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyVGFibGVTZWN0aW9uICpzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVT
ZWN0aW9uICo+KGNoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkKQotICAgICAg
ICAgICAgICAgICAgICAgICAgaGVhZCA9IHNlY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKCFmaXJzdEJvZHkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEJvZHkgPSBz
ZWN0aW9uOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi0+bmVlZENlbGxSZWNhbGMp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5yZWNhbGNDZWxscygpOworICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUYWJsZVNlY3Rpb24qPihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9o
ZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFkID0gc2VjdGlvbjsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoIW1fZmlyc3RCb2R5KQorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9maXJzdEJvZHkgPSBzZWN0aW9uOworICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5y
ZWNhbGNDZWxsc0lmTmVlZGVkKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUQUJMRV9GT09URVJfR1JPVVA6CiAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFJlbmRlclRhYmxlU2VjdGlvbiAqc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2Vj
dGlvbiAqPihjaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZm9vdCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvb3QgPSBzZWN0aW9uOwotICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmICghZmlyc3RCb2R5KQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RCb2R5ID0gc2Vj
dGlvbjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24tPm5lZWRDZWxsUmVjYWxjKQot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi0+cmVjYWxjQ2VsbHMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZm9v
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZm9vdCA9IHNlY3Rpb247CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKCFtX2ZpcnN0Qm9keSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZmlyc3RCb2R5ID0gc2VjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi0+cmVj
YWxjQ2VsbHNJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgVEFCTEVfUk9XX0dST1VQOgogICAgICAgICAgICAgICAg
IGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24gKnNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24g
Kj4oY2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Qm9keSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0Qm9keSA9IHNlY3Rpb247Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzZWN0aW9uLT5uZWVkQ2VsbFJlY2FsYykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
Y3Rpb24tPnJlY2FsY0NlbGxzKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiogc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KGNoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2ZpcnN0Qm9keSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZmlyc3RCb2R5ID0gc2VjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlv
bi0+cmVjYWxjQ2VsbHNJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC02MjMsMjUgKzU5NSwyNSBAQCB2
b2lkIFJlbmRlclRhYmxlOjpyZWNhbGNTZWN0aW9ucygpCiAKICAgICAvLyByZXBhaXIgY29sdW1u
IGNvdW50IChhZGRDaGlsZCBjYW4gZ3JvdyBpdCB0b28gbXVjaCwgYmVjYXVzZSBpdCBhbHdheXMg
YWRkcyBlbGVtZW50cyB0byB0aGUgbGFzdCByb3cgb2YgYSBzZWN0aW9uKQogICAgIGludCBtYXhD
b2xzID0gMDsKLSAgICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAg
ICAgIFJlbmRlclRhYmxlU2VjdGlvbiAqc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxl
U2VjdGlvbiAqPihjaGlsZCk7CisgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rp
b24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGlsZCk7CiAgICAgICAgICAg
ICBpbnQgc2VjdGlvbkNvbHMgPSBzZWN0aW9uLT5udW1Db2x1bW5zKCk7CiAgICAgICAgICAgICBp
ZiAoc2VjdGlvbkNvbHMgPiBtYXhDb2xzKQogICAgICAgICAgICAgICAgIG1heENvbHMgPSBzZWN0
aW9uQ29sczsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBjb2x1bW5zLnJlc2l6ZShtYXhD
b2xzKTsKLSAgICBjb2x1bW5Qb3MucmVzaXplKG1heENvbHMrMSk7CisgICAgbV9jb2x1bW5zLnJl
c2l6ZShtYXhDb2xzKTsKKyAgICBtX2NvbHVtblBvcy5yZXNpemUobWF4Q29scyArIDEpOwogICAg
IAotICAgIG5lZWRTZWN0aW9uUmVjYWxjID0gZmFsc2U7CisgICAgbV9uZWVkc1NlY3Rpb25SZWNh
bGMgPSBmYWxzZTsKICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAogUmVuZGVyT2JqZWN0
KiBSZW5kZXJUYWJsZTo6cmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQpCiB7Ci0g
ICAgc2V0TmVlZFNlY3Rpb25SZWNhbGMoKTsKKyAgICBzZXROZWVkc1NlY3Rpb25SZWNhbGMoKTsK
ICAgICByZXR1cm4gUmVuZGVyQ29udGFpbmVyOjpyZW1vdmVDaGlsZE5vZGUoY2hpbGQpOwogfQog
CkBAIC02NDksNyArNjIxLDcgQEAgaW50IFJlbmRlclRhYmxlOjpjYWxjQm9yZGVyTGVmdCgpIGNv
bnN0CiB7CiAgICAgaWYgKGNvbGxhcHNlQm9yZGVycygpKSB7CiAgICAgICAgIC8vIERldGVybWlu
ZWQgYnkgdGhlIGZpcnN0IGNlbGwgb2YgdGhlIGZpcnN0IHJvdy4gU2VlIHRoZSBDU1MgMi4xIHNw
ZWMsIHNlY3Rpb24gMTcuNi4yLgotICAgICAgICBpZiAobnVtRWZmQ29scygpID09IDApCisgICAg
ICAgIGlmICghbnVtRWZmQ29scygpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAg
dW5zaWduZWQgYm9yZGVyV2lkdGggPSAwOwpAQCAtNjYxLDI5ICs2MzMsMjkgQEAgaW50IFJlbmRl
clRhYmxlOjpjYWxjQm9yZGVyTGVmdCgpIGNvbnN0CiAgICAgICAgICAgICBib3JkZXJXaWR0aCA9
IHRiLndpZHRoOwogCiAgICAgICAgIGludCBsZWZ0bW9zdENvbHVtbiA9IHN0eWxlKCktPmRpcmVj
dGlvbigpID09IFJUTCA/IG51bUVmZkNvbHMoKSAtIDEgOiAwOwotICAgICAgICBSZW5kZXJUYWJs
ZUNvbCAqY29sR3JvdXAgPSBjb2xFbGVtZW50KGxlZnRtb3N0Q29sdW1uKTsKKyAgICAgICAgUmVu
ZGVyVGFibGVDb2wqIGNvbEdyb3VwID0gY29sRWxlbWVudChsZWZ0bW9zdENvbHVtbik7CiAgICAg
ICAgIGlmIChjb2xHcm91cCkgewogICAgICAgICAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGdiID0g
c3R5bGUoKS0+Ym9yZGVyTGVmdCgpOwogICAgICAgICAgICAgaWYgKGdiLnN0eWxlKCkgPT0gQkhJ
RERFTikKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGlmIChnYi5zdHls
ZSgpID4gQkhJRERFTiAmJiBnYi53aWR0aCA+IGJvcmRlcldpZHRoKQotICAgICAgICAgICAgICAg
IGJvcmRlcldpZHRoID0gZ2Iud2lkdGg7CisgICAgICAgICAgICBpZiAoZ2Iuc3R5bGUoKSA+IEJI
SURERU4pCisgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIGdi
LndpZHRoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUmVuZGVyT2JqZWN0ICpjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsKICAgICAgICAgd2hpbGUgKGNoaWxkICYmICFjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkK
ICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIGlmIChj
aGlsZCAmJiBjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewogICAgICAgICAgICAgUmVuZGVyVGFi
bGVTZWN0aW9uKiBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hp
bGQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2VjdGlvbi0+bnVtUm93cygpID09
IDApCisgICAgICAgICAgICBpZiAoIXNlY3Rpb24tPm51bVJvd3MoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gYm9yZGVyV2lkdGggLyAyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25z
dCBCb3JkZXJWYWx1ZSYgc2IgPSBzZWN0aW9uLT5zdHlsZSgpLT5ib3JkZXJMZWZ0KCk7CiAgICAg
ICAgICAgICBpZiAoc2Iuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgaWYgKHNiLnN0eWxlKCkgPiBCSElEREVOICYmIHNiLndpZHRoID4g
Ym9yZGVyV2lkdGgpCi0gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBzYi53aWR0aDsKKyAg
ICAgICAgICAgIGlmIChzYi5zdHlsZSgpID4gQkhJRERFTikKKyAgICAgICAgICAgICAgICBib3Jk
ZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgc2Iud2lkdGgpOwogCiAgICAgICAgICAgICBjb25z
dCBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIGNzID0gc2VjdGlvbi0+Y2VsbEF0KDAs
IGxlZnRtb3N0Q29sdW1uKTsKICAgICAgICAgICAgIApAQCAtNjk1LDEwICs2NjcsMTAgQEAgaW50
IFJlbmRlclRhYmxlOjpjYWxjQm9yZGVyTGVmdCgpIGNvbnN0CiAgICAgICAgICAgICAgICAgaWYg
KHJiLnN0eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICAgICAgICAgICAgICBpZiAoY2Iuc3R5bGUoKSA+IEJISURERU4gJiYgY2Iud2lkdGggPiBi
b3JkZXJXaWR0aCkKLSAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBjYi53aWR0aDsK
LSAgICAgICAgICAgICAgICBpZiAocmIuc3R5bGUoKSA+IEJISURERU4gJiYgcmIud2lkdGggPiBi
b3JkZXJXaWR0aCkKLSAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSByYi53aWR0aDsK
KyAgICAgICAgICAgICAgICBpZiAoY2Iuc3R5bGUoKSA+IEJISURERU4pCisgICAgICAgICAgICAg
ICAgICAgIGJvcmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCBjYi53aWR0aCk7CisgICAgICAg
ICAgICAgICAgaWYgKHJiLnN0eWxlKCkgPiBCSElEREVOKQorICAgICAgICAgICAgICAgICAgICBi
b3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgcmIud2lkdGgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBib3JkZXJXaWR0aCAvIDI7CkBAIC03MTAsNyArNjgy
LDcgQEAgaW50IFJlbmRlclRhYmxlOjpjYWxjQm9yZGVyUmlnaHQoKSBjb25zdAogewogICAgIGlm
IChjb2xsYXBzZUJvcmRlcnMoKSkgewogICAgICAgICAvLyBEZXRlcm1pbmVkIGJ5IHRoZSBsYXN0
IGNlbGwgb2YgdGhlIGZpcnN0IHJvdy4gU2VlIHRoZSBDU1MgMi4xIHNwZWMsIHNlY3Rpb24gMTcu
Ni4yLgotICAgICAgICBpZiAobnVtRWZmQ29scygpID09IDApCisgICAgICAgIGlmICghbnVtRWZm
Q29scygpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgdW5zaWduZWQgYm9yZGVy
V2lkdGggPSAwOwpAQCAtNzIyLDI5ICs2OTQsMjkgQEAgaW50IFJlbmRlclRhYmxlOjpjYWxjQm9y
ZGVyUmlnaHQoKSBjb25zdAogICAgICAgICAgICAgYm9yZGVyV2lkdGggPSB0Yi53aWR0aDsKIAog
ICAgICAgICBpbnQgcmlnaHRtb3N0Q29sdW1uID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRM
ID8gMCA6IG51bUVmZkNvbHMoKSAtIDE7Ci0gICAgICAgIFJlbmRlclRhYmxlQ29sICpjb2xHcm91
cCA9IGNvbEVsZW1lbnQocmlnaHRtb3N0Q29sdW1uKTsKKyAgICAgICAgUmVuZGVyVGFibGVDb2wq
IGNvbEdyb3VwID0gY29sRWxlbWVudChyaWdodG1vc3RDb2x1bW4pOwogICAgICAgICBpZiAoY29s
R3JvdXApIHsKICAgICAgICAgICAgIGNvbnN0IEJvcmRlclZhbHVlJiBnYiA9IHN0eWxlKCktPmJv
cmRlclJpZ2h0KCk7CiAgICAgICAgICAgICBpZiAoZ2Iuc3R5bGUoKSA9PSBCSElEREVOKQogICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKGdiLnN0eWxlKCkgPiBCSElE
REVOICYmIGdiLndpZHRoID4gYm9yZGVyV2lkdGgpCi0gICAgICAgICAgICAgICAgYm9yZGVyV2lk
dGggPSBnYi53aWR0aDsKKyAgICAgICAgICAgIGlmIChnYi5zdHlsZSgpID4gQkhJRERFTikKKyAg
ICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgZ2Iud2lkdGgpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RD
aGlsZCgpOworICAgICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAg
ICAgICB3aGlsZSAoY2hpbGQgJiYgIWNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQogICAgICAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNo
aWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7CiAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24q
IHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGlsZCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChzZWN0aW9uLT5udW1Sb3dzKCkgPT0gMCkKKyAgICAg
ICAgICAgIGlmICghc2VjdGlvbi0+bnVtUm93cygpKQogICAgICAgICAgICAgICAgIHJldHVybiAo
Ym9yZGVyV2lkdGggKyAxKSAvIDI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNvbnN0IEJv
cmRlclZhbHVlJiBzYiA9IHNlY3Rpb24tPnN0eWxlKCktPmJvcmRlclJpZ2h0KCk7CiAgICAgICAg
ICAgICBpZiAoc2Iuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgaWYgKHNiLnN0eWxlKCkgPiBCSElEREVOICYmIHNiLndpZHRoID4gYm9y
ZGVyV2lkdGgpCi0gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBzYi53aWR0aDsKKyAgICAg
ICAgICAgIGlmIChzYi5zdHlsZSgpID4gQkhJRERFTikKKyAgICAgICAgICAgICAgICBib3JkZXJX
aWR0aCA9IG1heChib3JkZXJXaWR0aCwgc2Iud2lkdGgpOwogCiAgICAgICAgICAgICBjb25zdCBS
ZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIGNzID0gc2VjdGlvbi0+Y2VsbEF0KDAsIHJp
Z2h0bW9zdENvbHVtbik7CiAgICAgICAgICAgICAKQEAgLTc1NiwxMCArNzI4LDEwIEBAIGludCBS
ZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclJpZ2h0KCkgY29uc3QKICAgICAgICAgICAgICAgICBpZiAo
cmIuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAot
ICAgICAgICAgICAgICAgIGlmIChjYi5zdHlsZSgpID4gQkhJRERFTiAmJiBjYi53aWR0aCA+IGJv
cmRlcldpZHRoKQotICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IGNiLndpZHRoOwot
ICAgICAgICAgICAgICAgIGlmIChyYi5zdHlsZSgpID4gQkhJRERFTiAmJiByYi53aWR0aCA+IGJv
cmRlcldpZHRoKQotICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IHJiLndpZHRoOwor
ICAgICAgICAgICAgICAgIGlmIChjYi5zdHlsZSgpID4gQkhJRERFTikKKyAgICAgICAgICAgICAg
ICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIGNiLndpZHRoKTsKKyAgICAgICAg
ICAgICAgICBpZiAocmIuc3R5bGUoKSA+IEJISURERU4pCisgICAgICAgICAgICAgICAgICAgIGJv
cmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCByYi53aWR0aCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIChib3JkZXJXaWR0aCArIDEpIC8gMjsKQEAgLTc5Mywx
MiArNzY1LDEyIEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJUb3AoKSBjb25zdAogICAg
ICAgICByZXR1cm4gMDsKICAgICBpbnQgYm9yZGVyV2lkdGggPSAwOwogICAgIFJlbmRlclRhYmxl
U2VjdGlvbiogdG9wU2VjdGlvbjsKLSAgICBpZiAoaGVhZCkKLSAgICAgICAgdG9wU2VjdGlvbiA9
IGhlYWQ7Ci0gICAgZWxzZSBpZiAoZmlyc3RCb2R5KQotICAgICAgICB0b3BTZWN0aW9uID0gZmly
c3RCb2R5OwotICAgIGVsc2UgaWYgKGZvb3QpCi0gICAgICAgIHRvcFNlY3Rpb24gPSBmb290Owor
ICAgIGlmIChtX2hlYWQpCisgICAgICAgIHRvcFNlY3Rpb24gPSBtX2hlYWQ7CisgICAgZWxzZSBp
ZiAobV9maXJzdEJvZHkpCisgICAgICAgIHRvcFNlY3Rpb24gPSBtX2ZpcnN0Qm9keTsKKyAgICBl
bHNlIGlmIChtX2Zvb3QpCisgICAgICAgIHRvcFNlY3Rpb24gPSBtX2Zvb3Q7CiAgICAgZWxzZQog
ICAgICAgICB0b3BTZWN0aW9uID0gMDsKICAgICBpZiAodG9wU2VjdGlvbikgewpAQCAtODA5LDgg
Kzc4MSw4IEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJUb3AoKSBjb25zdAogICAgIGNv
bnN0IEJvcmRlclZhbHVlJiB0YiA9IHN0eWxlKCktPmJvcmRlclRvcCgpOwogICAgIGlmICh0Yi5z
dHlsZSgpID09IEJISURERU4pCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmICh0Yi5zdHlsZSgp
ID4gQkhJRERFTiAmJiAoaW50KSh0Yi53aWR0aCAvIDIpID4gYm9yZGVyV2lkdGgpCi0gICAgICAg
IGJvcmRlcldpZHRoID0gdGIud2lkdGggLyAyOworICAgIGlmICh0Yi5zdHlsZSgpID4gQkhJRERF
TikKKyAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIHN0YXRpY19jYXN0PGlu
dD4odGIud2lkdGggLyAyKSk7CiAgICAgcmV0dXJuIGJvcmRlcldpZHRoOwogfQogCkBAIC04MjAs
MTIgKzc5MiwxMiBAQCBpbnQgUmVuZGVyVGFibGU6Om91dGVyQm9yZGVyQm90dG9tKCkgY29uCiAg
ICAgICAgIHJldHVybiAwOwogICAgIGludCBib3JkZXJXaWR0aCA9IDA7CiAgICAgUmVuZGVyVGFi
bGVTZWN0aW9uKiBib3R0b21TZWN0aW9uOwotICAgIGlmIChmb290KQotICAgICAgICBib3R0b21T
ZWN0aW9uID0gZm9vdDsKKyAgICBpZiAobV9mb290KQorICAgICAgICBib3R0b21TZWN0aW9uID0g
bV9mb290OwogICAgIGVsc2UgewogICAgICAgICBSZW5kZXJPYmplY3QqIGNoaWxkOwogICAgICAg
ICBmb3IgKGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkICYmICFjaGlsZC0+aXNUYWJsZVNlY3Rp
b24oKTsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpOwotICAgICAgICBib3R0b21T
ZWN0aW9uID0gY2hpbGQgPyBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4oY2hpbGQp
IDogMDsKKyAgICAgICAgYm90dG9tU2VjdGlvbiA9IGNoaWxkID8gc3RhdGljX2Nhc3Q8UmVuZGVy
VGFibGVTZWN0aW9uKj4oY2hpbGQpIDogMDsKICAgICB9CiAgICAgaWYgKGJvdHRvbVNlY3Rpb24p
IHsKICAgICAgICAgYm9yZGVyV2lkdGggPSBib3R0b21TZWN0aW9uLT5vdXRlckJvcmRlckJvdHRv
bSgpOwpAQCAtODM1LDggKzgwNyw4IEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJCb3R0
b20oKSBjb24KICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgdGIgPSBzdHlsZSgpLT5ib3JkZXJCb3R0
b20oKTsKICAgICBpZiAodGIuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBpZiAodGIuc3R5bGUoKSA+IEJISURERU4gJiYgKGludCkodGIud2lkdGggKyAxKSAvIDIg
PiBib3JkZXJXaWR0aCkKLSAgICAgICAgYm9yZGVyV2lkdGggPSAodGIud2lkdGggKyAxKSAvIDI7
CisgICAgaWYgKHRiLnN0eWxlKCkgPiBCSElEREVOKQorICAgICAgICBib3JkZXJXaWR0aCA9IG1h
eChib3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8aW50PigodGIud2lkdGggKyAxKSAvIDIpKTsKICAg
ICByZXR1cm4gYm9yZGVyV2lkdGg7CiB9CiAKQEAgLTg1NCwxMCArODI2LDEwIEBAIGludCBSZW5k
ZXJUYWJsZTo6b3V0ZXJCb3JkZXJMZWZ0KCkgY29uc3QKICAgICAgICAgYm9yZGVyV2lkdGggPSB0
Yi53aWR0aCAvIDI7CiAKICAgICBib29sIGFsbEhpZGRlbiA9IHRydWU7Ci0gICAgZm9yIChSZW5k
ZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFj
aGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
bnQgc3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4oY2hpbGQpLT5vdXRlckJv
cmRlckxlZnQoKTsKKyAgICAgICAgaW50IHN3ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0
aW9uKj4oY2hpbGQpLT5vdXRlckJvcmRlckxlZnQoKTsKICAgICAgICAgaWYgKHN3ID09IC0xKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGVsc2UKQEAgLTg4NCwxMCArODU2LDEwIEBA
IGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJSaWdodCgpIGNvbnMKICAgICAgICAgYm9yZGVy
V2lkdGggPSAodGIud2lkdGggKyAxKSAvIDI7CiAKICAgICBib29sIGFsbEhpZGRlbiA9IHRydWU7
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgaWYgKCFjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpbnQgc3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4o
Y2hpbGQpLT5vdXRlckJvcmRlclJpZ2h0KCk7CisgICAgICAgIGludCBzdyA9IHN0YXRpY19jYXN0
PFJlbmRlclRhYmxlU2VjdGlvbio+KGNoaWxkKS0+b3V0ZXJCb3JkZXJSaWdodCgpOwogICAgICAg
ICBpZiAoc3cgPT0gLTEpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZWxzZQpAQCAt
OTAyLDMxICs4NzQsMzEgQEAgaW50IFJlbmRlclRhYmxlOjpvdXRlckJvcmRlclJpZ2h0KCkgY29u
cwogCiBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpzZWN0aW9uQWJvdmUoY29uc3Qg
UmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uLCBib29sIHNraXBFbXB0eVNlY3Rpb25zKSBjb25z
dAogewotICAgIGlmIChzZWN0aW9uID09IGhlYWQpCisgICAgaWYgKHNlY3Rpb24gPT0gbV9oZWFk
KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJPYmplY3QgKnByZXZTZWN0aW9uID0gKHNl
Y3Rpb24gPT0gZm9vdCA/IGxhc3RDaGlsZCgpIDogc2VjdGlvbiktPnByZXZpb3VzU2libGluZygp
OworICAgIFJlbmRlck9iamVjdCogcHJldlNlY3Rpb24gPSAoc2VjdGlvbiA9PSBtX2Zvb3QgPyBs
YXN0Q2hpbGQoKSA6IHNlY3Rpb24pLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB3aGlsZSAocHJl
dlNlY3Rpb24pIHsKLSAgICAgICAgaWYgKHByZXZTZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigpICYm
IHByZXZTZWN0aW9uICE9IGhlYWQgJiYgcHJldlNlY3Rpb24gIT0gZm9vdCAmJiAoIXNraXBFbXB0
eVNlY3Rpb25zIHx8IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KHByZXZTZWN0aW9u
KS0+bnVtUm93cygpKSkKKyAgICAgICAgaWYgKHByZXZTZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigp
ICYmIHByZXZTZWN0aW9uICE9IG1faGVhZCAmJiBwcmV2U2VjdGlvbiAhPSBtX2Zvb3QgJiYgKCFz
a2lwRW1wdHlTZWN0aW9ucyB8fCBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihwcmV2
U2VjdGlvbiktPm51bVJvd3MoKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgcHJldlNl
Y3Rpb24gPSBwcmV2U2VjdGlvbi0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgfQotICAgIGlmICgh
cHJldlNlY3Rpb24gJiYgaGVhZCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IGhlYWQtPm51bVJv
d3MoKSkpCi0gICAgICAgIHByZXZTZWN0aW9uID0gaGVhZDsKKyAgICBpZiAoIXByZXZTZWN0aW9u
ICYmIG1faGVhZCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IG1faGVhZC0+bnVtUm93cygpKSkK
KyAgICAgICAgcHJldlNlY3Rpb24gPSBtX2hlYWQ7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
bmRlclRhYmxlU2VjdGlvbio+KHByZXZTZWN0aW9uKTsKIH0KIAogUmVuZGVyVGFibGVTZWN0aW9u
KiBSZW5kZXJUYWJsZTo6c2VjdGlvbkJlbG93KGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiogc2Vj
dGlvbiwgYm9vbCBza2lwRW1wdHlTZWN0aW9ucykgY29uc3QKIHsKLSAgICBpZiAoc2VjdGlvbiA9
PSBmb290KQorICAgIGlmIChzZWN0aW9uID09IG1fZm9vdCkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgUmVuZGVyT2JqZWN0ICpuZXh0U2VjdGlvbiA9IChzZWN0aW9uID09IGhlYWQgPyBmaXJzdENo
aWxkKCkgOiBzZWN0aW9uKS0+bmV4dFNpYmxpbmcoKTsKKyAgICBSZW5kZXJPYmplY3QqIG5leHRT
ZWN0aW9uID0gKHNlY3Rpb24gPT0gbV9oZWFkID8gZmlyc3RDaGlsZCgpIDogc2VjdGlvbiktPm5l
eHRTaWJsaW5nKCk7CiAgICAgd2hpbGUgKG5leHRTZWN0aW9uKSB7Ci0gICAgICAgIGlmIChuZXh0
U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAmJiBuZXh0U2VjdGlvbiAhPSBoZWFkICYmIG5leHRT
ZWN0aW9uICE9IGZvb3QgJiYgKCFza2lwRW1wdHlTZWN0aW9ucyB8fCBzdGF0aWNfY2FzdDxSZW5k
ZXJUYWJsZVNlY3Rpb24qPihuZXh0U2VjdGlvbiktPm51bVJvd3MoKSkpCisgICAgICAgIGlmIChu
ZXh0U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAmJiBuZXh0U2VjdGlvbiAhPSBtX2hlYWQgJiYg
bmV4dFNlY3Rpb24gIT0gbV9mb290ICYmICghc2tpcEVtcHR5U2VjdGlvbnMgfHwgc3RhdGljX2Nh
c3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4obmV4dFNlY3Rpb24pLT5udW1Sb3dzKCkpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIG5leHRTZWN0aW9uID0gbmV4dFNlY3Rpb24tPm5leHRTaWJs
aW5nKCk7CiAgICAgfQotICAgIGlmICghbmV4dFNlY3Rpb24gJiYgZm9vdCAmJiAoIXNraXBFbXB0
eVNlY3Rpb25zIHx8IGZvb3QtPm51bVJvd3MoKSkpCi0gICAgICAgIG5leHRTZWN0aW9uID0gZm9v
dDsKKyAgICBpZiAoIW5leHRTZWN0aW9uICYmIG1fZm9vdCAmJiAoIXNraXBFbXB0eVNlY3Rpb25z
IHx8IG1fZm9vdC0+bnVtUm93cygpKSkKKyAgICAgICAgbmV4dFNlY3Rpb24gPSBtX2Zvb3Q7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KG5leHRTZWN0aW9uKTsK
IH0KIApAQCAtOTM5LDcgKzkxMSw3IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNl
bGxBYm92ZSgKICAgICBpZiAociA+IDApIHsKICAgICAgICAgLy8gY2VsbCBpcyBub3QgaW4gdGhl
IGZpcnN0IHJvdywgc28gdXNlIHRoZSBhYm92ZSByb3cgaW4gaXRzIG93biBzZWN0aW9uCiAgICAg
ICAgIHNlY3Rpb24gPSBjZWxsLT5zZWN0aW9uKCk7Ci0gICAgICAgIHJBYm92ZSA9IHItMTsKKyAg
ICAgICAgckFib3ZlID0gciAtIDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2VjdGlvbiA9IHNl
Y3Rpb25BYm92ZShjZWxsLT5zZWN0aW9uKCksIHRydWUpOwogICAgICAgICBpZiAoc2VjdGlvbikK
QEAgLTk1NCw3ICs5MjYsNyBAQCBSZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQWJv
dmUoCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGFib3ZlQ2VsbCA9IHNlY3Rpb24tPmNlbGxB
dChyQWJvdmUsIGVmZkNvbCk7CiAgICAgICAgICAgICBlZmZDb2wtLTsKLSAgICAgICAgfSB3aGls
ZSAoIWFib3ZlQ2VsbC5jZWxsICYmIGFib3ZlQ2VsbC5pbkNvbFNwYW4gJiYgZWZmQ29sID49MCk7
CisgICAgICAgIH0gd2hpbGUgKCFhYm92ZUNlbGwuY2VsbCAmJiBhYm92ZUNlbGwuaW5Db2xTcGFu
ICYmIGVmZkNvbCA+PSAwKTsKICAgICAgICAgcmV0dXJuIGFib3ZlQ2VsbC5jZWxsOwogICAgIH0g
ZWxzZQogICAgICAgICByZXR1cm4gMDsKQEAgLTk2OSw3ICs5NDEsNyBAQCBSZW5kZXJUYWJsZUNl
bGwqIFJlbmRlclRhYmxlOjpjZWxsQmVsb3coCiAgICAgaWYgKHIgPCBjZWxsLT5zZWN0aW9uKCkt
Pm51bVJvd3MoKSAtIDEpIHsKICAgICAgICAgLy8gVGhlIGNlbGwgaXMgbm90IGluIHRoZSBsYXN0
IHJvdywgc28gdXNlIHRoZSBuZXh0IHJvdyBpbiB0aGUgc2VjdGlvbi4KICAgICAgICAgc2VjdGlv
biA9IGNlbGwtPnNlY3Rpb24oKTsKLSAgICAgICAgckJlbG93PSByKzE7CisgICAgICAgIHJCZWxv
dyA9IHIgKyAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNlY3Rpb24gPSBzZWN0aW9uQmVsb3co
Y2VsbC0+c2VjdGlvbigpLCB0cnVlKTsKICAgICAgICAgaWYgKHNlY3Rpb24pCkBAIC05ODQsNyAr
OTU2LDcgQEAgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6Y2VsbEJlbG93KAogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBiZWxvd0NlbGwgPSBzZWN0aW9uLT5jZWxsQXQockJlbG93LCBl
ZmZDb2wpOwogICAgICAgICAgICAgZWZmQ29sLS07Ci0gICAgICAgIH0gd2hpbGUgKCFiZWxvd0Nl
bGwuY2VsbCAmJiBiZWxvd0NlbGwuaW5Db2xTcGFuICYmIGVmZkNvbCA+PTApOworICAgICAgICB9
IHdoaWxlICghYmVsb3dDZWxsLmNlbGwgJiYgYmVsb3dDZWxsLmluQ29sU3BhbiAmJiBlZmZDb2wg
Pj0gMCk7CiAgICAgICAgIHJldHVybiBiZWxvd0NlbGwuY2VsbDsKICAgICB9IGVsc2UKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC05OTQsMTUgKzk2NiwxNSBAQCBSZW5kZXJUYWJsZUNlbGwqIFJlbmRl
clRhYmxlOjpjZWxsQmVmb3JlCiB7CiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0g
Y2VsbC0+c2VjdGlvbigpOwogICAgIGludCBlZmZDb2wgPSBjb2xUb0VmZkNvbChjZWxsLT5jb2wo
KSk7Ci0gICAgaWYgKGVmZkNvbCA9PSAwKQorICAgIGlmICghZWZmQ29sKQogICAgICAgICByZXR1
cm4gMDsKICAgICAKICAgICAvLyBJZiB3ZSBoaXQgYSBjb2xzcGFuIGJhY2sgdXAgdG8gYSByZWFs
IGNlbGwuCiAgICAgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0IHByZXZDZWxsOwogICAg
IGRvIHsKLSAgICAgICAgcHJldkNlbGwgPSBzZWN0aW9uLT5jZWxsQXQoY2VsbC0+cm93KCksIGVm
ZkNvbC0xKTsKKyAgICAgICAgcHJldkNlbGwgPSBzZWN0aW9uLT5jZWxsQXQoY2VsbC0+cm93KCks
IGVmZkNvbCAtIDEpOwogICAgICAgICBlZmZDb2wtLTsKLSAgICB9IHdoaWxlICghcHJldkNlbGwu
Y2VsbCAmJiBwcmV2Q2VsbC5pbkNvbFNwYW4gJiYgZWZmQ29sID49MCk7CisgICAgfSB3aGlsZSAo
IXByZXZDZWxsLmNlbGwgJiYgcHJldkNlbGwuaW5Db2xTcGFuICYmIGVmZkNvbCA+PSAwKTsKICAg
ICByZXR1cm4gcHJldkNlbGwuY2VsbDsKIH0KIApAQCAtMTAzMyw3ICsxMDA1LDcgQEAgSW50UmVj
dCBSZW5kZXJUYWJsZTo6Z2V0T3ZlcmZsb3dDbGlwUmVjdAogICAgIC8vIEZJWE1FOiBUaGlzIGNv
ZGUgYXNzdW1lcyAobGlrZSBhbGwgb3VyIG90aGVyIGNhcHRpb24gY29kZSkgdGhhdCBvbmx5IHRv
cC9ib3R0b20gYXJlCiAgICAgLy8gc3VwcG9ydGVkLiAgV2hlbiB3ZSBhY3R1YWxseSBzdXBwb3J0
IGxlZnQvcmlnaHQgYW5kIHN0b3AgbWFwcGluZyB0aGVtIHRvIHRvcC9ib3R0b20sCiAgICAgLy8g
d2UgbWlnaHQgaGF2ZSB0byBoYWNrIHRoaXMgY29kZSBmaXJzdCAoZGVwZW5kaW5nIG9uIHdoYXQg
b3JkZXIgd2UgZG8gdGhlc2UgYnVnIGZpeGVzIGluKS4KLSAgICBpZiAodENhcHRpb24pIHsKKyAg
ICBpZiAobV9jYXB0aW9uKSB7CiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGhlaWdodCgpKTsKICAg
ICAgICAgcmVjdC5zZXRZKHR5KTsKICAgICB9CkBAIC0xMDQyLDIxICsxMDE0LDIxIEBAIEludFJl
Y3QgUmVuZGVyVGFibGU6OmdldE92ZXJmbG93Q2xpcFJlY3QKIH0KIAogI2lmbmRlZiBOREVCVUcK
LXZvaWQgUmVuZGVyVGFibGU6OmR1bXAoVGV4dFN0cmVhbSAqc3RyZWFtLCBEZXByZWNhdGVkU3Ry
aW5nIGluZCkgY29uc3QKK3ZvaWQgUmVuZGVyVGFibGU6OmR1bXAoVGV4dFN0cmVhbSogc3RyZWFt
LCBEZXByZWNhdGVkU3RyaW5nIGluZCkgY29uc3QKIHsKLSAgICBpZiAodENhcHRpb24pCisgICAg
aWYgKG1fY2FwdGlvbikKICAgICAgICAgKnN0cmVhbSA8PCAiIHRDYXB0aW9uIjsKLSAgICBpZiAo
aGVhZCkKKyAgICBpZiAobV9oZWFkKQogICAgICAgICAqc3RyZWFtIDw8ICIgaGVhZCI7Ci0gICAg
aWYgKGZvb3QpCisgICAgaWYgKG1fZm9vdCkKICAgICAgICAgKnN0cmVhbSA8PCAiIGZvb3QiOwog
CiAgICAgKnN0cmVhbSA8PCBlbmRsIDw8IGluZCA8PCAiY3NwYW5zOiI7Ci0gICAgZm9yICggdW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgY29sdW1ucy5zaXplKCk7IGkrKyApCi0gICAgICAgICpzdHJl
YW0gPDwgIiAiIDw8IGNvbHVtbnNbaV0uc3BhbjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jb2x1bW5zLnNpemUoKTsgaSsrKQorICAgICAgICAqc3RyZWFtIDw8ICIgIiA8PCBtX2Nv
bHVtbnNbaV0uc3BhbjsKICAgICAqc3RyZWFtIDw8IGVuZGwgPDwgaW5kOwogCi0gICAgUmVuZGVy
QmxvY2s6OmR1bXAoc3RyZWFtLGluZCk7CisgICAgUmVuZGVyQmxvY2s6OmR1bXAoc3RyZWFtLCBp
bmQpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24g
MTg1NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw4ICsyNCw4IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwog
Ci0jaWZuZGVmIFJlbmRlclRhYmxlX0gKLSNkZWZpbmUgUmVuZGVyVGFibGVfSAorI2lmbmRlZiBS
ZW5kZXJUYWJsZV9oCisjZGVmaW5lIFJlbmRlclRhYmxlX2gKIAogI2luY2x1ZGUgIlJlbmRlckJs
b2NrLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNjQsMTYgKzY0LDE2IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJSZW5kZXJUYWJsZSI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHls
ZSopOwotCiAgICAgdmlydHVhbCBib29sIGlzVGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKKwogICAgIHZpcnR1
YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBpbnQg
Z2V0Q29sdW1uUG9zKGludCBjb2wpIGNvbnN0IHsgcmV0dXJuIGNvbHVtblBvc1tjb2xdOyB9Cisg
ICAgaW50IGdldENvbHVtblBvcyhpbnQgY29sKSBjb25zdCB7IHJldHVybiBtX2NvbHVtblBvc1tj
b2xdOyB9CiAKLSAgICBpbnQgaEJvcmRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBoc3BhY2lu
ZzsgfQotICAgIGludCB2Qm9yZGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIHZzcGFjaW5nOyB9
CisgICAgaW50IGhCb3JkZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9oU3BhY2luZzsgfQor
ICAgIGludCB2Qm9yZGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fdlNwYWNpbmc7IH0KICAg
ICAKICAgICBib29sIGNvbGxhcHNlQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJv
cmRlckNvbGxhcHNlKCk7IH0KICAgICBpbnQgYm9yZGVyTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ym9yZGVyTGVmdDsgfQpAQCAtODEsMTIgKzgxLDEyIEBAIHB1YmxpYzoKICAgICBpbnQgYm9yZGVy
VG9wKCkgY29uc3Q7CiAgICAgaW50IGJvcmRlckJvdHRvbSgpIGNvbnN0OwogICAgIAotICAgIFJ1
bGVzIGdldFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UnVsZXM+KHJ1bGVzKTsg
fQorICAgIFJ1bGVzIGdldFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UnVsZXM+
KG1fcnVsZXMpOyB9CiAKICAgICBjb25zdCBDb2xvciYgYmdDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOyB9CiAKLSAgICB1bnNpZ25lZCBjZWxsUGFkZGlu
ZygpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmc7IH0KLSAgICB2b2lkIHNldENlbGxQYWRkaW5nKHVu
c2lnbmVkIHApIHsgcGFkZGluZyA9IHA7IH0KKyAgICB1bnNpZ25lZCBjZWxsUGFkZGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFkZGluZzsgfQorICAgIHZvaWQgc2V0Q2VsbFBhZGRpbmcodW5zaWdu
ZWQgcCkgeyBtX3BhZGRpbmcgPSBwOyB9CiAKICAgICBpbnQgb3V0ZXJCb3JkZXJUb3AoKSBjb25z
dDsKICAgICBpbnQgb3V0ZXJCb3JkZXJCb3R0b20oKSBjb25zdDsKQEAgLTExMiwzNSArMTEyLDM4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjV2lkdGgoKTsKIAotI2lmbmRlZiBO
REVCVUcKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtICpzdHJlYW0sIERlcHJlY2F0
ZWRTdHJpbmcgaW5kID0gIiIpIGNvbnN0OwotI2VuZGlmCiAgICAgc3RydWN0IENvbHVtblN0cnVj
dCB7CiAgICAgICAgIGVudW0gewogICAgICAgICAgICAgV2lkdGhVbmRlZmluZWQgPSAweGZmZmYK
ICAgICAgICAgfTsKLSAgICAgICAgQ29sdW1uU3RydWN0KCkgewotICAgICAgICAgICAgc3BhbiA9
IDE7Ci0gICAgICAgICAgICB3aWR0aCA9IFdpZHRoVW5kZWZpbmVkOworCisgICAgICAgIENvbHVt
blN0cnVjdCgpCisgICAgICAgICAgICA6IHNwYW4oMSkKKyAgICAgICAgICAgICwgd2lkdGgoV2lk
dGhVbmRlZmluZWQpCisgICAgICAgIHsKICAgICAgICAgfQorCiAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IHNwYW47CiAgICAgICAgIHVuc2lnbmVkIHdpZHRoOyAvLyB0aGUgY2FsY3VsYXRlZCBwb3Np
dGlvbiBvZiB0aGUgY29sdW1uCiAgICAgfTsKIAotICAgIFZlY3RvcjxpbnQ+IGNvbHVtblBvczsK
LSAgICBWZWN0b3I8Q29sdW1uU3RydWN0PiBjb2x1bW5zOworICAgIFZlY3RvcjxDb2x1bW5TdHJ1
Y3Q+JiBjb2x1bW5zKCkgeyByZXR1cm4gbV9jb2x1bW5zOyB9CisgICAgVmVjdG9yPGludD4mIGNv
bHVtblBvc2l0aW9ucygpIHsgcmV0dXJuIG1fY29sdW1uUG9zOyB9CisgICAgUmVuZGVyVGFibGVT
ZWN0aW9uKiBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWQ7IH0KKyAgICBSZW5kZXJUYWJs
ZVNlY3Rpb24qIGZvb3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9vdDsgfQorICAgIFJlbmRlclRh
YmxlU2VjdGlvbiogZmlyc3RCb2R5KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdEJvZHk7IH0KIAog
ICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0U3Bhbik7CiAgICAgdm9pZCBh
cHBlbmRDb2x1bW4oaW50IHNwYW4pOwotICAgIGludCBudW1FZmZDb2xzKCkgY29uc3QgeyByZXR1
cm4gY29sdW1ucy5zaXplKCk7IH0KLSAgICBpbnQgc3Bhbk9mRWZmQ29sKGludCBlZmZDb2wpIGNv
bnN0IHsgcmV0dXJuIGNvbHVtbnNbZWZmQ29sXS5zcGFuOyB9CisgICAgaW50IG51bUVmZkNvbHMo
KSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnMuc2l6ZSgpOyB9CisgICAgaW50IHNwYW5PZkVmZkNv
bChpbnQgZWZmQ29sKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnNbZWZmQ29sXS5zcGFuOyB9CiAg
ICAgCiAgICAgaW50IGNvbFRvRWZmQ29sKGludCBjb2wpIGNvbnN0CiAgICAgewogICAgICAgICBp
bnQgaSA9IDA7CiAgICAgICAgIGludCBlZmZDb2wgPSBudW1FZmZDb2xzKCk7CiAgICAgICAgIGZv
ciAoaW50IGMgPSAwOyBjIDwgY29sICYmIGkgPCBlZmZDb2w7ICsraSkKLSAgICAgICAgICAgIGMg
Kz0gY29sdW1uc1tpXS5zcGFuOworICAgICAgICAgICAgYyArPSBtX2NvbHVtbnNbaV0uc3BhbjsK
ICAgICAgICAgcmV0dXJuIGk7CiAgICAgfQogICAgIApAQCAtMTQ4LDE5ICsxNTEsMjAgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgaW50IGMgPSAwOwogICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGVmZkNvbDsgaSsrKQotICAgICAgICAgICAgYyArPSBjb2x1bW5zW2ldLnNwYW47CisgICAg
ICAgICAgICBjICs9IG1fY29sdW1uc1tpXS5zcGFuOwogICAgICAgICByZXR1cm4gYzsKICAgICB9
CiAKLSAgICBpbnQgYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nKCkgY29uc3QgewotICAgICAgICBy
ZXR1cm4gYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIAorICAgIGludCBib3JkZXJzUGFk
ZGluZ0FuZFNwYWNpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJvcmRlckxlZnQo
KSArIGJvcmRlclJpZ2h0KCkgKwogICAgICAgICAgICAgICAgKGNvbGxhcHNlQm9yZGVycygpID8g
MCA6IChwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCkgKyAobnVtRWZmQ29scygpICsgMSkg
KiBoQm9yZGVyU3BhY2luZygpKSk7CiAgICAgfQogCiAgICAgUmVuZGVyVGFibGVDb2wqIGNvbEVs
ZW1lbnQoaW50IGNvbCkgY29uc3Q7CiAKLSAgICBib29sIG5lZWRzU2VjdGlvblJlY2FsYygpIGNv
bnN0IHsgcmV0dXJuIG5lZWRTZWN0aW9uUmVjYWxjOyB9Ci0gICAgdm9pZCBzZXROZWVkU2VjdGlv
blJlY2FsYygpIHsgbmVlZFNlY3Rpb25SZWNhbGMgPSB0cnVlOyB9CisgICAgYm9vbCBuZWVkc1Nl
Y3Rpb25SZWNhbGMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzU2VjdGlvblJlY2FsYzsgfQorICAg
IHZvaWQgc2V0TmVlZHNTZWN0aW9uUmVjYWxjKCkgeyBtX25lZWRzU2VjdGlvblJlY2FsYyA9IHRy
dWU7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0Kik7CiAKQEAgLTE3NCw0MCArMTc4LDQ4IEBAIHB1YmxpYzoKICAKICAgICBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSogY3VycmVudEJvcmRlclN0eWxlKCkgeyByZXR1cm4gbV9jdXJyZW50Qm9y
ZGVyOyB9CiAgICAgCi0gICAgYm9vbCBoYXNTZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIGhlYWQg
fHwgZm9vdCB8fCBmaXJzdEJvZHk7IH0KKyAgICBib29sIGhhc1NlY3Rpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9oZWFkIHx8IG1fZm9vdCB8fCBtX2ZpcnN0Qm9keTsgfQogCiAgICAgdmlydHVhbCBJ
bnRSZWN0IGdldE92ZXJmbG93Q2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpOwogCi0gICAgdm9pZCBy
ZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CisgICAgdm9pZCByZWNhbGNTZWN0aW9uc0lmTmVlZGVk
KCkKKyAgICB7CisgICAgICAgIGlmIChtX25lZWRzU2VjdGlvblJlY2FsYykKKyAgICAgICAgICAg
IHJlY2FsY1NlY3Rpb25zKCk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIHZpcnR1YWwg
dm9pZCBkdW1wKFRleHRTdHJlYW0qLCBEZXByZWNhdGVkU3RyaW5nIGluZCA9ICIiKSBjb25zdDsK
KyNlbmRpZgogCiBwcml2YXRlOgogICAgIHZvaWQgcmVjYWxjU2VjdGlvbnMoKTsKIAotICAgIGZy
aWVuZCBjbGFzcyBBdXRvVGFibGVMYXlvdXQ7Ci0gICAgZnJpZW5kIGNsYXNzIEZpeGVkVGFibGVM
YXlvdXQ7CisgICAgVmVjdG9yPGludD4gbV9jb2x1bW5Qb3M7CisgICAgVmVjdG9yPENvbHVtblN0
cnVjdD4gbV9jb2x1bW5zOwogCi0gICAgUmVuZGVyQmxvY2sqIHRDYXB0aW9uOwotICAgIFJlbmRl
clRhYmxlU2VjdGlvbiogaGVhZDsKLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGZvb3Q7Ci0gICAg
UmVuZGVyVGFibGVTZWN0aW9uKiBmaXJzdEJvZHk7CisgICAgUmVuZGVyQmxvY2sqIG1fY2FwdGlv
bjsKKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIG1faGVhZDsKKyAgICBSZW5kZXJUYWJsZVNlY3Rp
b24qIG1fZm9vdDsKKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIG1fZmlyc3RCb2R5OwogCi0gICAg
VGFibGVMYXlvdXQqIHRhYmxlTGF5b3V0OworICAgIFRhYmxlTGF5b3V0KiBtX3RhYmxlTGF5b3V0
OwogCiAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUqIG1fY3VycmVudEJvcmRlcjsKICAgICAKLSAg
ICB1bnNpZ25lZCBmcmFtZSA6IDQ7IC8vIEZyYW1lCi0gICAgdW5zaWduZWQgcnVsZXMgOiA0OyAv
LyBSdWxlcworICAgIHVuc2lnbmVkIG1fZnJhbWUgOiA0OyAvLyBGcmFtZQorICAgIHVuc2lnbmVk
IG1fcnVsZXMgOiA0OyAvLyBSdWxlcwogCi0gICAgYm9vbCBoYXNfY29sX2VsZW1zIDogMTsKLSAg
ICB1bnNpZ25lZCBwYWRkaW5nIDogMjI7Ci0gICAgYm9vbCBuZWVkU2VjdGlvblJlY2FsYyA6IDE7
CisgICAgYm9vbCBtX2hhc0NvbEVsZW1lbnRzIDogMTsKKyAgICB1bnNpZ25lZCBtX3BhZGRpbmcg
OiAyMjsKKyAgICBib29sIG1fbmVlZHNTZWN0aW9uUmVjYWxjIDogMTsKICAgICAKLSAgICBzaG9y
dCBoc3BhY2luZzsKLSAgICBzaG9ydCB2c3BhY2luZzsKLSAgICBpbnQgbV9ib3JkZXJSaWdodDsK
KyAgICBzaG9ydCBtX2hTcGFjaW5nOworICAgIHNob3J0IG1fdlNwYWNpbmc7CiAgICAgaW50IG1f
Ym9yZGVyTGVmdDsKKyAgICBpbnQgbV9ib3JkZXJSaWdodDsKIH07CiAKLX0KK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyVGFibGVfaApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAxODU3NCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkg
KzI4LDkgQEAKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNvbC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKQEAgLTM5LDQwICszOSw0MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVJlbmRlclRhYmxlQ2VsbDo6UmVuZGVyVGFibGVDZWxs
KE5vZGUqIF9ub2RlKQotICA6IFJlbmRlckJsb2NrKF9ub2RlKQorUmVuZGVyVGFibGVDZWxsOjpS
ZW5kZXJUYWJsZUNlbGwoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRlckJsb2NrKG5vZGUpCisgICAg
LCBtX3JvdygtMSkKKyAgICAsIG1fY29sdW1uKC0xKQorICAgICwgbV9yb3dTcGFuKDEpCisgICAg
LCBtX2NvbHVtblNwYW4oMSkKKyAgICAsIG1fdG9wRXh0cmEoMCkKKyAgICAsIG1fYm90dG9tRXh0
cmEoMCkKKyAgICAsIG1fd2lkdGhDaGFuZ2VkKGZhbHNlKQorICAgICwgbV9wZXJjZW50YWdlSGVp
Z2h0KDApCiB7Ci0gIF9jb2wgPSAtMTsKLSAgX3JvdyA9IC0xOwotICBjU3BhbiA9IHJTcGFuID0g
MTsKLSAgdXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgc2V0U2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JC
b3JkZXIodHJ1ZSk7Ci0gIF90b3BFeHRyYSA9IDA7Ci0gIF9ib3R0b21FeHRyYSA9IDA7Ci0gIG1f
cGVyY2VudGFnZUhlaWdodCA9IDA7Ci0gIG1fd2lkdGhDaGFuZ2VkID0gZmFsc2U7CisgICAgdXBk
YXRlRnJvbUVsZW1lbnQoKTsKKyAgICBzZXRTaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcigp
OwogfQogCiB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6ZGVzdHJveSgpCiB7CiAgICAgaWYgKHBhcmVu
dCgpICYmIHNlY3Rpb24oKSkKLSAgICAgICAgc2VjdGlvbigpLT5zZXROZWVkQ2VsbFJlY2FsYygp
OworICAgICAgICBzZWN0aW9uKCktPnNldE5lZWRzQ2VsbFJlY2FsYygpOwogCiAgICAgUmVuZGVy
QmxvY2s6OmRlc3Ryb3koKTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUZyb21F
bGVtZW50KCkKIHsKLSAgICBpbnQgb2xkUlNwYW4gPSByU3BhbjsKLSAgICBpbnQgb2xkQ1NwYW4g
PSBjU3BhbjsKICAgICBOb2RlKiBub2RlID0gZWxlbWVudCgpOwogICAgIGlmIChub2RlICYmIChu
b2RlLT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRoVGFnKSkpIHsKICAg
ICAgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHRjID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2Vs
bEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgY1NwYW4gPSB0Yy0+Y29sU3BhbigpOwotICAgICAg
ICByU3BhbiA9IHRjLT5yb3dTcGFuKCk7CisgICAgICAgIGludCBvbGRSU3BhbiA9IG1fcm93U3Bh
bjsKKyAgICAgICAgaW50IG9sZENTcGFuID0gbV9jb2x1bW5TcGFuOworCisgICAgICAgIG1fY29s
dW1uU3BhbiA9IHRjLT5jb2xTcGFuKCk7CisgICAgICAgIG1fcm93U3BhbiA9IHRjLT5yb3dTcGFu
KCk7CisgICAgICAgIGlmICgob2xkUlNwYW4gIT0gbV9yb3dTcGFuIHx8IG9sZENTcGFuICE9IG1f
Y29sdW1uU3BhbikgJiYgc3R5bGUoKSAmJiBwYXJlbnQoKSkKKyAgICAgICAgICAgIHNldE5lZWRz
TGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CiAgICAgfQotICAgIGlmICgob2xkUlNwYW4gIT0gclNw
YW4gfHwgb2xkQ1NwYW4gIT0gY1NwYW4pICYmIHN0eWxlKCkgJiYgcGFyZW50KCkpCi0gICAgICAg
IHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CiB9CiAKIExlbmd0aCBSZW5kZXJUYWJs
ZUNlbGw6OnN0eWxlT3JDb2xXaWR0aCgpCkBAIC04MCw5ICs4Miw5IEBAIExlbmd0aCBSZW5kZXJU
YWJsZUNlbGw6OnN0eWxlT3JDb2xXaWR0aCgKICAgICBMZW5ndGggdyA9IHN0eWxlKCktPndpZHRo
KCk7CiAgICAgaWYgKGNvbFNwYW4oKSA+IDEgfHwgIXcuaXNBdXRvKCkpCiAgICAgICAgIHJldHVy
biB3OwotICAgIFJlbmRlclRhYmxlQ29sKiBjb2wgPSB0YWJsZSgpLT5jb2xFbGVtZW50KF9jb2wp
OwotICAgIGlmIChjb2wpIHsKLSAgICAgICAgdyA9IGNvbC0+c3R5bGUoKS0+d2lkdGgoKTsKKyAg
ICBSZW5kZXJUYWJsZUNvbCogdGFibGVDb2wgPSB0YWJsZSgpLT5jb2xFbGVtZW50KGNvbCgpKTsK
KyAgICBpZiAodGFibGVDb2wpIHsKKyAgICAgICAgdyA9IHRhYmxlQ29sLT5zdHlsZSgpLT53aWR0
aCgpOwogICAgICAgICAKICAgICAgICAgLy8gQ29sdW1uIHdpZHRocyBzcGVjaWZpZWQgb24gPGNv
bD4gYXBwbHkgdG8gdGhlIGJvcmRlciBib3ggb2YgdGhlIGNlbGwuCiAgICAgICAgIC8vIFBlcmNl
bnRhZ2VzIGRvbid0IG5lZWQgdG8gYmUgaGFuZGxlZCBzaW5jZSB0aGV5J3JlIGFsd2F5cyB0cmVh
dGVkIHRoaXMgd2F5IChldmVuIHdoZW4gc3BlY2lmaWVkIG9uIHRoZSBjZWxscykuCkBAIC0xODEs
MjIgKzE4MywyMiBAQCBJbnRSZWN0IFJlbmRlclRhYmxlQ2VsbDo6Z2V0QWJzb2x1dGVSZXBhCiAg
ICAgcmV0dXJuIFJlbmRlckJsb2NrOjpnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCk7CiB9CiAKLXZv
aWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiBy
LCBib29sIGYpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJl
Y3QoSW50UmVjdCYgciwgYm9vbCBmaXhlZCkKIHsKLSAgICByLnNldFkoci55KCkgKyBfdG9wRXh0
cmEpOworICAgIHIuc2V0WShyLnkoKSArIG1fdG9wRXh0cmEpOwogICAgIHIubW92ZSgtcGFyZW50
KCktPnhQb3MoKSwgLXBhcmVudCgpLT55UG9zKCkpOyAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBj
b29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgotICAgIFJlbmRl
ckJsb2NrOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBmKTsKKyAgICBSZW5kZXJCbG9j
azo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QociwgZml4ZWQpOwogfQogCi1ib29sIFJlbmRl
clRhYmxlQ2VsbDo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQb3MsIGludCAmeVBvcywgYm9vbCBm
KQorYm9vbCBSZW5kZXJUYWJsZUNlbGw6OmFic29sdXRlUG9zaXRpb24oaW50JiB4UG9zLCBpbnQm
IHlQb3MsIGJvb2wgZml4ZWQpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBSZW5kZXJCbG9jazo6YWJz
b2x1dGVQb3NpdGlvbih4UG9zLCB5UG9zLCBmKTsKKyAgICBib29sIHJlc3VsdCA9IFJlbmRlckJs
b2NrOjphYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGZpeGVkKTsKICAgICB4UG9zIC09IHBh
cmVudCgpLT54UG9zKCk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2Us
IHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCiAgICAgeVBvcyAtPSBwYXJlbnQoKS0+eVBv
cygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXNob3J0IFJlbmRlclRhYmxlQ2VsbDo6YmFz
ZWxpbmVQb3NpdGlvbihib29sKSBjb25zdAorc2hvcnQgUmVuZGVyVGFibGVDZWxsOjpiYXNlbGlu
ZVBvc2l0aW9uKGJvb2wgLypmaXJzdExpbmUqLywgYm9vbCAvKmlzUm9vdExpbmVCb3gqLykgY29u
c3QKIHsKICAgICBSZW5kZXJPYmplY3QqIG8gPSBmaXJzdENoaWxkKCk7CiAgICAgaW50IG9mZnNl
dCA9IHBhZGRpbmdUb3AoKSArIGJvcmRlclRvcCgpOwpAQCAtMjE2LDE3ICsyMTgsMTcgQEAgc2hv
cnQgUmVuZGVyVGFibGVDZWxsOjpiYXNlbGluZVBvc2l0aW9uKAogICAgIHJldHVybiBvZmZzZXQ7
CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVDZWxsOjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqbmV3U3R5
bGUpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxl
KQogewogICAgIGlmIChwYXJlbnQoKSAmJiBzZWN0aW9uKCkgJiYgc3R5bGUoKSAmJiBzdHlsZSgp
LT5oZWlnaHQoKSAhPSBuZXdTdHlsZS0+aGVpZ2h0KCkpCi0gICAgICAgIHNlY3Rpb24oKS0+c2V0
TmVlZENlbGxSZWNhbGMoKTsKKyAgICAgICAgc2VjdGlvbigpLT5zZXROZWVkc0NlbGxSZWNhbGMo
KTsKIAogICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwogCiAgICAgaWYgKG5l
d1N0eWxlLT53aGl0ZVNwYWNlKCkgPT0gS0hUTUxfTk9XUkFQKSB7CiAgICAgICAgIC8vIEZpZ3Vy
ZSBvdXQgaWYgd2UgYXJlIHJlYWxseSBub3dyYXBwaW5nIG9yIGlmIHdlIHNob3VsZCBqdXN0CiAg
ICAgICAgIC8vIHVzZSBub3JtYWwgaW5zdGVhZC4gIElmIHRoZSB3aWR0aCBvZiB0aGUgY2VsbCBp
cyBmaXhlZCwgdGhlbgotICAgICAgICAvLyB3ZSBkb24ndCBhY3R1YWxseSB1c2UgTk9XUkFQLiAK
KyAgICAgICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIE5PV1JBUC4KICAgICAgICAgaWYgKG5l
d1N0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSkKICAgICAgICAgICAgIG5ld1N0eWxlLT5zZXRXaGl0
ZVNwYWNlKE5PUk1BTCk7CiAgICAgICAgIGVsc2UKQEAgLTIzNCw3ICsyMzYsNyBAQCB2b2lkIFJl
bmRlclRhYmxlQ2VsbDo6c2V0U3R5bGUoUmVuZGVyU3R5CiAgICAgfQogCiAgICAgUmVuZGVyQmxv
Y2s6OnNldFN0eWxlKG5ld1N0eWxlKTsKLSAgICBzZXRTaG91bGRQYWludEJhY2tncm91bmRPckJv
cmRlcih0cnVlKTsKKyAgICBzZXRTaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcigpOwogfQog
CiBib29sIFJlbmRlclRhYmxlQ2VsbDo6cmVxdWlyZXNMYXllcigpCkBAIC0yNTUsMjEgKzI1Nywy
NCBAQCBib29sIFJlbmRlclRhYmxlQ2VsbDo6cmVxdWlyZXNMYXllcigpCiAvLyAoNCkgSWYgYm9y
ZGVyIHN0eWxlcyBkaWZmZXIgb25seSBpbiBjb2xvciwgdGhlbiBhIHN0eWxlIHNldCBvbiBhIGNl
bGwgd2lucyBvdmVyIG9uZSBvbiBhIHJvdywgCiAvLyB3aGljaCB3aW5zIG92ZXIgYSByb3cgZ3Jv
dXAsIGNvbHVtbiwgY29sdW1uIGdyb3VwIGFuZCwgbGFzdGx5LCB0YWJsZS4gSXQgaXMgdW5kZWZp
bmVkIHdoaWNoIGNvbG9yIAogLy8gaXMgdXNlZCB3aGVuIHR3byBlbGVtZW50cyBvZiB0aGUgc2Ft
ZSB0eXBlIGRpc2FncmVlLgotc3RhdGljIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbXBhcmVCb3Jk
ZXJzKGNvbnN0IENvbGxhcHNlZEJvcmRlclZhbHVlJiBib3JkZXIxLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYg
Ym9yZGVyMikKK3N0YXRpYyBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb21wYXJlQm9yZGVycyhjb25z
dCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgYm9yZGVyMSwgY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFs
dWUmIGJvcmRlcjIpCiB7CiAgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSB2YWx1ZXMgcGFzc2VkIGlu
LiAgSWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiB0aGUgb3RoZXIuCi0gICAgaWYgKCFib3JkZXIy
LmV4aXN0cygpKSByZXR1cm4gYm9yZGVyMTsKLSAgICBpZiAoIWJvcmRlcjEuZXhpc3RzKCkpIHJl
dHVybiBib3JkZXIyOwotICAgIAorICAgIGlmICghYm9yZGVyMi5leGlzdHMoKSkKKyAgICAgICAg
cmV0dXJuIGJvcmRlcjE7CisgICAgaWYgKCFib3JkZXIxLmV4aXN0cygpKQorICAgICAgICByZXR1
cm4gYm9yZGVyMjsKKwogICAgIC8vIFJ1bGUgIzEgYWJvdmUuCiAgICAgaWYgKGJvcmRlcjEuc3R5
bGUoKSA9PSBCSElEREVOIHx8IGJvcmRlcjIuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICBy
ZXR1cm4gQ29sbGFwc2VkQm9yZGVyVmFsdWUoKTsgLy8gTm8gYm9yZGVyIHNob3VsZCBleGlzdCBh
dCB0aGlzIGxvY2F0aW9uLgogICAgIAogICAgIC8vIFJ1bGUgIzIgYWJvdmUuICBBIHN0eWxlIG9m
ICdub25lJyBoYXMgbG93ZXN0IHByaW9yaXR5IGFuZCBhbHdheXMgbG9zZXMgdG8gYW55IG90aGVy
IGJvcmRlci4KLSAgICBpZiAoYm9yZGVyMi5zdHlsZSgpID09IEJOT05FKSByZXR1cm4gYm9yZGVy
MTsKLSAgICBpZiAoYm9yZGVyMS5zdHlsZSgpID09IEJOT05FKSByZXR1cm4gYm9yZGVyMjsKLSAg
ICAKKyAgICBpZiAoYm9yZGVyMi5zdHlsZSgpID09IEJOT05FKQorICAgICAgICByZXR1cm4gYm9y
ZGVyMTsKKyAgICBpZiAoYm9yZGVyMS5zdHlsZSgpID09IEJOT05FKQorICAgICAgICByZXR1cm4g
Ym9yZGVyMjsKKwogICAgIC8vIFRoZSBmaXJzdCBwYXJ0IG9mIHJ1bGUgIzMgYWJvdmUuIFdpZGVy
IGJvcmRlcnMgd2luLgogICAgIGlmIChib3JkZXIxLndpZHRoKCkgIT0gYm9yZGVyMi53aWR0aCgp
KQogICAgICAgICByZXR1cm4gYm9yZGVyMS53aWR0aCgpID4gYm9yZGVyMi53aWR0aCgpID8gYm9y
ZGVyMSA6IGJvcmRlcjI7CkBAIC00MzgsNyArNDQzLDcgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUg
UmVuZGVyVGFibGVDZWxsOjpjbwogICAgIAogICAgIC8vIE5vdyBjaGVjayByb3cgZ3JvdXBzLgog
ICAgIFJlbmRlclRhYmxlU2VjdGlvbiogY3VyclNlY3Rpb24gPSBzZWN0aW9uKCk7Ci0gICAgaWYg
KHJvdygpID09IDApIHsKKyAgICBpZiAoIXJvdygpKSB7CiAgICAgICAgIC8vICg1KSBPdXIgcm93
IGdyb3VwJ3MgdG9wIGJvcmRlci4KICAgICAgICAgcmVzdWx0ID0gY29tcGFyZUJvcmRlcnMocmVz
dWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmY3VyclNlY3Rpb24tPnN0eWxlKCktPmJvcmRlclRv
cCgpLCBCUk9XR1JPVVApKTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCkBAIC01OTMs
MzEgKzU5OCwzMyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnQoUGFpbnRJbmZvJiBwCiAK
ICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRl
cnMgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAgaWYgKHR5
IC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJUb3AoKSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSAr
IG9zIHx8Ci0gICAgICAgICAgICAgICAgdHkgKyBfdG9wRXh0cmEgKyBtX2hlaWdodCArIF9ib3R0
b21FeHRyYSArIHRhYmxlKCktPm91dGVyQm9yZGVyQm90dG9tKCkgPD0gcGFpbnRJbmZvLnJlY3Qu
eSgpIC0gb3MpCisgICAgICAgICAgICAgICAgdHkgKyBtX3RvcEV4dHJhICsgbV9oZWlnaHQgKyBt
X2JvdHRvbUV4dHJhICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA8PSBwYWludEluZm8u
cmVjdC55KCkgLSBvcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaW50IHcgPSB3aWR0
aCgpOwogICAgICAgICBpbnQgaCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRl
ckJvdHRvbUV4dHJhKCk7CiAgICAgICAgIHBhaW50Q29sbGFwc2VkQm9yZGVyKHBhaW50SW5mby5j
b250ZXh0LCB0eCwgdHksIHcsIGgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0eSA+PSBw
YWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8IHR5ICsgX3RvcEV4dHJhICsgbV9oZWlnaHQg
KyBfYm90dG9tRXh0cmEgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCisgICAgICAgIGlmICh0
eSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8IHR5ICsgbV90b3BFeHRyYSArIG1f
aGVpZ2h0ICsgbV9ib3R0b21FeHRyYSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50SW5m
bywgdHgsIHR5ICsgX3RvcEV4dHJhKTsKKyAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0
KHBhaW50SW5mbywgdHgsIHR5ICsgbV90b3BFeHRyYSk7CiAgICAgfQogfQogCiBzdGF0aWMgRUJv
cmRlclN0eWxlIGNvbGxhcHNlZEJvcmRlclN0eWxlKEVCb3JkZXJTdHlsZSBzdHlsZSkKIHsKICAg
ICBpZiAoc3R5bGUgPT0gT1VUU0VUKQotICAgICAgICBzdHlsZSA9IEdST09WRTsKLSAgICBlbHNl
IGlmIChzdHlsZSA9PSBJTlNFVCkKLSAgICAgICAgc3R5bGUgPSBSSURHRTsKKyAgICAgICAgcmV0
dXJuIEdST09WRTsKKyAgICBpZiAoc3R5bGUgPT0gSU5TRVQpCisgICAgICAgIHJldHVybiBSSURH
RTsKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKIHN0cnVjdCBDb2xsYXBzZWRCb3JkZXIgewotICAg
IENvbGxhcHNlZEJvcmRlcigpe30KKyAgICBDb2xsYXBzZWRCb3JkZXIoKQorICAgIHsKKyAgICB9
CiAgICAgCi0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9yZGVyOworICAgIENvbGxhcHNlZEJv
cmRlclZhbHVlIGJvcmRlclZhbHVlOwogICAgIFJlbmRlck9iamVjdDo6Qm9yZGVyU2lkZSBzaWRl
OwogICAgIGJvb2wgc2hvdWxkUGFpbnQ7CiAgICAgaW50IHgxOwpAQCAtNjI3LDQxICs2MzQsNDMg
QEAgc3RydWN0IENvbGxhcHNlZEJvcmRlciB7CiAgICAgRUJvcmRlclN0eWxlIHN0eWxlOwogfTsK
IAotY2xhc3MgQ29sbGFwc2VkQm9yZGVycwoteworY2xhc3MgQ29sbGFwc2VkQm9yZGVycyB7CiBw
dWJsaWM6Ci0gICAgQ29sbGFwc2VkQm9yZGVycyhpbnQgaSkgOmNvdW50KDApIHt9CisgICAgQ29s
bGFwc2VkQm9yZGVycygpCisgICAgICAgIDogbV9jb3VudCgwKQorICAgIHsKKyAgICB9CiAgICAg
Ci0gICAgdm9pZCBhZGRCb3JkZXIoY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGIsIFJlbmRl
ck9iamVjdDo6Qm9yZGVyU2lkZSBzLCBib29sIHBhaW50LCAKLSAgICAgICAgICAgICAgICAgICBp
bnQgX3gxLCBpbnQgX3kxLCBpbnQgX3gyLCBpbnQgX3kyLAotICAgICAgICAgICAgICAgICAgIEVC
b3JkZXJTdHlsZSBfc3R5bGUpCisgICAgdm9pZCBhZGRCb3JkZXIoY29uc3QgQ29sbGFwc2VkQm9y
ZGVyVmFsdWUmIGJvcmRlclZhbHVlLCBSZW5kZXJPYmplY3Q6OkJvcmRlclNpZGUgYm9yZGVyU2lk
ZSwgYm9vbCBzaG91bGRQYWludCwKKyAgICAgICAgICAgICAgICAgICBpbnQgeDEsIGludCB5MSwg
aW50IHgyLCBpbnQgeTIsIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSkKICAgICB7Ci0gICAgICAg
IGlmIChiLmV4aXN0cygpICYmIHBhaW50KSB7Ci0gICAgICAgICAgICBib3JkZXJzW2NvdW50XS5i
b3JkZXIgPSBiOwotICAgICAgICAgICAgYm9yZGVyc1tjb3VudF0uc2lkZSA9IHM7Ci0gICAgICAg
ICAgICBib3JkZXJzW2NvdW50XS5zaG91bGRQYWludCA9IHBhaW50OwotICAgICAgICAgICAgYm9y
ZGVyc1tjb3VudF0ueDEgPSBfeDE7Ci0gICAgICAgICAgICBib3JkZXJzW2NvdW50XS54MiA9IF94
MjsKLSAgICAgICAgICAgIGJvcmRlcnNbY291bnRdLnkxID0gX3kxOwotICAgICAgICAgICAgYm9y
ZGVyc1tjb3VudF0ueTIgPSBfeTI7Ci0gICAgICAgICAgICBib3JkZXJzW2NvdW50XS5zdHlsZSA9
IF9zdHlsZTsKLSAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIGlmIChib3JkZXJWYWx1ZS5l
eGlzdHMoKSAmJiBzaG91bGRQYWludCkgeworICAgICAgICAgICAgbV9ib3JkZXJzW21fY291bnRd
LmJvcmRlclZhbHVlID0gYm9yZGVyVmFsdWU7CisgICAgICAgICAgICBtX2JvcmRlcnNbbV9jb3Vu
dF0uc2lkZSA9IGJvcmRlclNpZGU7CisgICAgICAgICAgICBtX2JvcmRlcnNbbV9jb3VudF0uc2hv
dWxkUGFpbnQgPSBzaG91bGRQYWludDsKKyAgICAgICAgICAgIG1fYm9yZGVyc1ttX2NvdW50XS54
MSA9IHgxOworICAgICAgICAgICAgbV9ib3JkZXJzW21fY291bnRdLngyID0geDI7CisgICAgICAg
ICAgICBtX2JvcmRlcnNbbV9jb3VudF0ueTEgPSB5MTsKKyAgICAgICAgICAgIG1fYm9yZGVyc1tt
X2NvdW50XS55MiA9IHkyOworICAgICAgICAgICAgbV9ib3JkZXJzW21fY291bnRdLnN0eWxlID0g
Ym9yZGVyU3R5bGU7CisgICAgICAgICAgICBtX2NvdW50Kys7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBDb2xsYXBzZWRCb3JkZXIqIG5leHRCb3JkZXIoKSB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGJvcmRlcnNbaV0uYm9yZGVy
LmV4aXN0cygpICYmIGJvcmRlcnNbaV0uc2hvdWxkUGFpbnQpIHsKLSAgICAgICAgICAgICAgICBi
b3JkZXJzW2ldLnNob3VsZFBhaW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZi
b3JkZXJzW2ldOworICAgIENvbGxhcHNlZEJvcmRlciogbmV4dEJvcmRlcigpCisgICAgeworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYg
KG1fYm9yZGVyc1tpXS5ib3JkZXJWYWx1ZS5leGlzdHMoKSAmJiBtX2JvcmRlcnNbaV0uc2hvdWxk
UGFpbnQpIHsKKyAgICAgICAgICAgICAgICBtX2JvcmRlcnNbaV0uc2hvdWxkUGFpbnQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJm1fYm9yZGVyc1tpXTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAg
IENvbGxhcHNlZEJvcmRlciBib3JkZXJzWzRdOwotICAgIGludCBjb3VudDsKKyAgICBDb2xsYXBz
ZWRCb3JkZXIgbV9ib3JkZXJzWzRdOworICAgIGludCBtX2NvdW50OwogfTsKIAogc3RhdGljIHZv
aWQgYWRkQm9yZGVyU3R5bGUoRGVwcmVjYXRlZFZhbHVlTGlzdDxDb2xsYXBzZWRCb3JkZXJWYWx1
ZT4mIGJvcmRlclN0eWxlcywgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9yZGVyVmFsdWUpCkBAIC02
OTEsNyArNzAwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNvbGxlY3RCb3JkZXJzKERlcAog
ICAgIGFkZEJvcmRlclN0eWxlKGJvcmRlclN0eWxlcywgY29sbGFwc2VkQm90dG9tQm9yZGVyKCkp
OwogfQogCi12b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhp
Y3NDb250ZXh0KiBwLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgdywgaW50IGgpCit2b2lkIFJlbmRl
clRhYmxlQ2VsbDo6cGFpbnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgpCiB7CiAgICAgaWYgKCF0YWJs
ZSgpLT5jdXJyZW50Qm9yZGVyU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzA4LDM4ICs3
MTcsMzMgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZAogICAgIGlu
dCBsZWZ0V2lkdGggPSBsZWZ0VmFsLndpZHRoKCk7CiAgICAgaW50IHJpZ2h0V2lkdGggPSByaWdo
dFZhbC53aWR0aCgpOwogICAgIAotICAgIF90eCAtPSBsZWZ0V2lkdGggLyAyOwotICAgIF90eSAt
PSB0b3BXaWR0aCAvIDI7CisgICAgdHggLT0gbGVmdFdpZHRoIC8gMjsKKyAgICB0eSAtPSB0b3BX
aWR0aCAvIDI7CiAgICAgdyArPSBsZWZ0V2lkdGggLyAyICsgKHJpZ2h0V2lkdGggKyAxKSAvIDI7
CiAgICAgaCArPSB0b3BXaWR0aCAvIDIgKyAoYm90dG9tV2lkdGggKyAxKSAvIDI7CiAgICAgCi0g
ICAgYm9vbCB0dCA9IHRvcFZhbC5pc1RyYW5zcGFyZW50KCk7Ci0gICAgYm9vbCBidCA9IGJvdHRv
bVZhbC5pc1RyYW5zcGFyZW50KCk7Ci0gICAgYm9vbCBydCA9IHJpZ2h0VmFsLmlzVHJhbnNwYXJl
bnQoKTsKLSAgICBib29sIGx0ID0gbGVmdFZhbC5pc1RyYW5zcGFyZW50KCk7Ci0gICAgCi0gICAg
RUJvcmRlclN0eWxlIHRzID0gY29sbGFwc2VkQm9yZGVyU3R5bGUodG9wVmFsLnN0eWxlKCkpOwot
ICAgIEVCb3JkZXJTdHlsZSBicyA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKGJvdHRvbVZhbC5zdHls
ZSgpKTsKLSAgICBFQm9yZGVyU3R5bGUgbHMgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZShsZWZ0VmFs
LnN0eWxlKCkpOwotICAgIEVCb3JkZXJTdHlsZSBycyA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKHJp
Z2h0VmFsLnN0eWxlKCkpOwotICAgIAotICAgIGJvb2wgcmVuZGVyX3QgPSB0cyA+IEJISURERU4g
JiYgIXR0OwotICAgIGJvb2wgcmVuZGVyX2wgPSBscyA+IEJISURERU4gJiYgIWx0OwotICAgIGJv
b2wgcmVuZGVyX3IgPSBycyA+IEJISURERU4gJiYgIXJ0OwotICAgIGJvb2wgcmVuZGVyX2IgPSBi
cyA+IEJISURERU4gJiYgIWJ0OworICAgIEVCb3JkZXJTdHlsZSB0b3BTdHlsZSA9IGNvbGxhcHNl
ZEJvcmRlclN0eWxlKHRvcFZhbC5zdHlsZSgpKTsKKyAgICBFQm9yZGVyU3R5bGUgYm90dG9tU3R5
bGUgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZShib3R0b21WYWwuc3R5bGUoKSk7CisgICAgRUJvcmRl
clN0eWxlIGxlZnRTdHlsZSA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKGxlZnRWYWwuc3R5bGUoKSk7
CisgICAgRUJvcmRlclN0eWxlIHJpZ2h0U3R5bGUgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZShyaWdo
dFZhbC5zdHlsZSgpKTsKKyAgICAKKyAgICBib29sIHJlbmRlclRvcCA9IHRvcFN0eWxlID4gQkhJ
RERFTiAmJiAhdG9wVmFsLmlzVHJhbnNwYXJlbnQoKTsKKyAgICBib29sIHJlbmRlckJvdHRvbSA9
IGJvdHRvbVN0eWxlID4gQkhJRERFTiAmJiAhYm90dG9tVmFsLmlzVHJhbnNwYXJlbnQoKTsKKyAg
ICBib29sIHJlbmRlckxlZnQgPSBsZWZ0U3R5bGUgPiBCSElEREVOICYmICFsZWZ0VmFsLmlzVHJh
bnNwYXJlbnQoKTsKKyAgICBib29sIHJlbmRlclJpZ2h0ID0gcmlnaHRTdHlsZSA+IEJISURERU4g
JiYgIXJpZ2h0VmFsLmlzVHJhbnNwYXJlbnQoKTsKIAogICAgIC8vIFdlIG5ldmVyIHBhaW50IGRp
YWdvbmFscyBhdCB0aGUgam9pbnMuICBXZSBzaW1wbHkgbGV0IHRoZSBib3JkZXIgd2l0aCB0aGUg
aGlnaGVzdAogICAgIC8vIHByZWNlZGVuY2UgcGFpbnQgb24gdG9wIG9mIGJvcmRlcnMgd2l0aCBs
b3dlciBwcmVjZWRlbmNlLiAgCi0gICAgQ29sbGFwc2VkQm9yZGVycyBib3JkZXJzKDQpOwotICAg
IGJvcmRlcnMuYWRkQm9yZGVyKHRvcFZhbCwgQlNUb3AsIHJlbmRlcl90LCBfdHgsIF90eSwgX3R4
ICsgdywgX3R5ICsgdG9wV2lkdGgsIHRzKTsKLSAgICBib3JkZXJzLmFkZEJvcmRlcihib3R0b21W
YWwsIEJTQm90dG9tLCByZW5kZXJfYiwgX3R4LCBfdHkgKyBoIC0gYm90dG9tV2lkdGgsIF90eCAr
IHcsIF90eSArIGgsIGJzKTsKLSAgICBib3JkZXJzLmFkZEJvcmRlcihsZWZ0VmFsLCBCU0xlZnQs
IHJlbmRlcl9sLCBfdHgsIF90eSwgX3R4ICsgbGVmdFdpZHRoLCBfdHkgKyBoLCBscyk7Ci0gICAg
Ym9yZGVycy5hZGRCb3JkZXIocmlnaHRWYWwsIEJTUmlnaHQsIHJlbmRlcl9yLCBfdHggKyB3IC0g
cmlnaHRXaWR0aCwgX3R5LCBfdHggKyB3LCBfdHkgKyBoLCBycyk7CisgICAgQ29sbGFwc2VkQm9y
ZGVycyBib3JkZXJzOworICAgIGJvcmRlcnMuYWRkQm9yZGVyKHRvcFZhbCwgQlNUb3AsIHJlbmRl
clRvcCwgdHgsIHR5LCB0eCArIHcsIHR5ICsgdG9wV2lkdGgsIHRvcFN0eWxlKTsKKyAgICBib3Jk
ZXJzLmFkZEJvcmRlcihib3R0b21WYWwsIEJTQm90dG9tLCByZW5kZXJCb3R0b20sIHR4LCB0eSAr
IGggLSBib3R0b21XaWR0aCwgdHggKyB3LCB0eSArIGgsIGJvdHRvbVN0eWxlKTsKKyAgICBib3Jk
ZXJzLmFkZEJvcmRlcihsZWZ0VmFsLCBCU0xlZnQsIHJlbmRlckxlZnQsIHR4LCB0eSwgdHggKyBs
ZWZ0V2lkdGgsIHR5ICsgaCwgbGVmdFN0eWxlKTsKKyAgICBib3JkZXJzLmFkZEJvcmRlcihyaWdo
dFZhbCwgQlNSaWdodCwgcmVuZGVyUmlnaHQsIHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5LCB0eCAr
IHcsIHR5ICsgaCwgcmlnaHRTdHlsZSk7CiAgICAgCiAgICAgZm9yIChDb2xsYXBzZWRCb3JkZXIq
IGJvcmRlciA9IGJvcmRlcnMubmV4dEJvcmRlcigpOyBib3JkZXI7IGJvcmRlciA9IGJvcmRlcnMu
bmV4dEJvcmRlcigpKSB7Ci0gICAgICAgIGlmIChib3JkZXItPmJvcmRlciA9PSAqdGFibGUoKS0+
Y3VycmVudEJvcmRlclN0eWxlKCkpCi0gICAgICAgICAgICBkcmF3Qm9yZGVyKHAsIGJvcmRlci0+
eDEsIGJvcmRlci0+eTEsIGJvcmRlci0+eDIsIGJvcmRlci0+eTIsIGJvcmRlci0+c2lkZSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci0+Ym9yZGVyLmNvbG9yKCksIHN0eWxlKCktPmNv
bG9yKCksIGJvcmRlci0+c3R5bGUsIDAsIDApOworICAgICAgICBpZiAoYm9yZGVyLT5ib3JkZXJW
YWx1ZSA9PSAqdGFibGUoKS0+Y3VycmVudEJvcmRlclN0eWxlKCkpCisgICAgICAgICAgICBkcmF3
Qm9yZGVyKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyLT54MSwgYm9yZGVyLT55MSwgYm9yZGVyLT54
MiwgYm9yZGVyLT55MiwgYm9yZGVyLT5zaWRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgYm9y
ZGVyLT5ib3JkZXJWYWx1ZS5jb2xvcigpLCBzdHlsZSgpLT5jb2xvcigpLCBib3JkZXItPnN0eWxl
LCAwLCAwKTsKICAgICB9CiB9CiAKQEAgLTc1NCw3ICs3NTgsNyBAQCB2b2lkIFJlbmRlclRhYmxl
Q2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlCiAKICAgICBpZiAoYmFja2dyb3VuZE9iamVjdCAhPSB0
aGlzKSB7CiAgICAgICAgIHR4ICs9IG1feDsKLSAgICAgICAgdHkgKz0gbV95ICsgX3RvcEV4dHJh
OworICAgICAgICB0eSArPSBtX3kgKyBtX3RvcEV4dHJhOwogICAgIH0KIAogICAgIGludCB3ID0g
d2lkdGgoKTsKQEAgLTc3MSwxNSArNzc1LDE1IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWlu
dEJhY2tncm91bmRzQmUKICAgICBpZiAoYmdMYXllci0+aGFzSW1hZ2UoKSB8fCBjLmlzVmFsaWQo
KSkgewogICAgICAgICAvLyBXZSBoYXZlIHRvIGNsaXAgaGVyZSBiZWNhdXNlIHRoZSBiYWNrZ3Jv
dW5kIHdvdWxkIHBhaW50CiAgICAgICAgIC8vIG9uIHRvcCBvZiB0aGUgYm9yZGVycyBvdGhlcndp
c2UuICBUaGlzIG9ubHkgbWF0dGVycyBmb3IgY2VsbHMgYW5kIHJvd3MuCi0gICAgICAgIGJvb2wg
aGFzTGF5ZXIgPSBiYWNrZ3JvdW5kT2JqZWN0LT5sYXllcigpICYmIChiYWNrZ3JvdW5kT2JqZWN0
ID09IHRoaXMgfHwgYmFja2dyb3VuZE9iamVjdCA9PSBwYXJlbnQoKSk7Ci0gICAgICAgIGlmICho
YXNMYXllciAmJiB0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCkpIHsKKyAgICAgICAgYm9vbCBz
aG91bGRDbGlwID0gYmFja2dyb3VuZE9iamVjdC0+bGF5ZXIoKSAmJiAoYmFja2dyb3VuZE9iamVj
dCA9PSB0aGlzIHx8IGJhY2tncm91bmRPYmplY3QgPT0gcGFyZW50KCkpICYmIHRhYmxlRWx0LT5j
b2xsYXBzZUJvcmRlcnMoKTsKKyAgICAgICAgaWYgKHNob3VsZENsaXApIHsKICAgICAgICAgICAg
IEludFJlY3QgY2xpcFJlY3QodHggKyBib3JkZXJMZWZ0KCksIHR5ICsgYm9yZGVyVG9wKCksCiAg
ICAgICAgICAgICAgICAgdyAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGggLSBib3Jk
ZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5zYXZlKCk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChjbGlwUmVjdCk7
CiAgICAgICAgIH0KICAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKHBhaW50SW5mby5jb250ZXh0LCBj
LCBiZ0xheWVyLCBteSwgbWgsIHR4LCB0eSwgdywgaCk7Ci0gICAgICAgIGlmIChoYXNMYXllciAm
JiB0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCkpCisgICAgICAgIGlmIChzaG91bGRDbGlwKQog
ICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiB9CkBAIC03
OTMsMjUgKzc5NywyNSBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCb3hEZWNvcmF0aW9u
CiAgICAgLy8gUGFpbnQgb3VyIGNlbGwgYmFja2dyb3VuZC4KICAgICBwYWludEJhY2tncm91bmRz
QmVoaW5kQ2VsbChwYWludEluZm8sIHR4LCB0eSwgdGhpcyk7CiAKKyAgICBpZiAoIXN0eWxlKCkt
Pmhhc0JvcmRlcigpIHx8IHRhYmxlRWx0LT5jb2xsYXBzZUJvcmRlcnMoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgaW50IHcgPSB3aWR0aCgpOwogICAgIGludCBoID0gaGVpZ2h0KCkgKyBib3Jk
ZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKICAgICB0eSAtPSBib3JkZXJUb3BF
eHRyYSgpOwotCi0gICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlcigpICYmICF0YWJsZUVsdC0+Y29s
bGFwc2VCb3JkZXJzKCkpCi0gICAgICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0
eCwgdHksIHcsIGgsIHN0eWxlKCkpOworICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0
LCB0eCwgdHksIHcsIGgsIHN0eWxlKCkpOwogfQogCiAjaWZuZGVmIE5ERUJVRwotdm9pZCBSZW5k
ZXJUYWJsZUNlbGw6OmR1bXAoVGV4dFN0cmVhbSAqc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGlu
ZCkgY29uc3QKK3ZvaWQgUmVuZGVyVGFibGVDZWxsOjpkdW1wKFRleHRTdHJlYW0qIHN0cmVhbSwg
RGVwcmVjYXRlZFN0cmluZyBpbmQpIGNvbnN0CiB7Ci0gICAgKnN0cmVhbSA8PCAiIHJvdz0iIDw8
IF9yb3c7Ci0gICAgKnN0cmVhbSA8PCAiIGNvbD0iIDw8IF9jb2w7Ci0gICAgKnN0cmVhbSA8PCAi
IHJTcGFuPSIgPDwgclNwYW47Ci0gICAgKnN0cmVhbSA8PCAiIGNTcGFuPSIgPDwgY1NwYW47Ci0v
LyAgICAqc3RyZWFtIDw8ICIgbldyYXA9IiA8PCBuV3JhcDsKKyAgICAqc3RyZWFtIDw8ICIgcm93
PSIgPDwgcm93KCk7CisgICAgKnN0cmVhbSA8PCAiIGNvbD0iIDw8IGNvbCgpOworICAgICpzdHJl
YW0gPDwgIiByU3Bhbj0iIDw8IHJvd1NwYW4oKTsKKyAgICAqc3RyZWFtIDw8ICIgY1NwYW49IiA8
PCBjb2xTcGFuKCk7CiAKICAgICBSZW5kZXJCbG9jazo6ZHVtcChzdHJlYW0saW5kKTsKIH0KICNl
bmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaAkocmV2aXNpb24gMTg1NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJUYWJsZUNlbGxfSAot
I2RlZmluZSBSZW5kZXJUYWJsZUNlbGxfSAorI2lmbmRlZiBSZW5kZXJUYWJsZUNlbGxfaAorI2Rl
ZmluZSBSZW5kZXJUYWJsZUNlbGxfaAogCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgi
CiAKQEAgLTM1LDI1ICszNSwyOSBAQCBjbGFzcyBSZW5kZXJUYWJsZUNlbGwgOiBwdWJsaWMgUmVu
ZGVyQmxvCiBwdWJsaWM6CiAgICAgUmVuZGVyVGFibGVDZWxsKE5vZGUqKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95KCk7Ci0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCB7IHJldHVybiAiUmVuZGVyVGFibGVDZWxsIjsgfQorCiAgICAgdmlydHVhbCBib29s
IGlzVGFibGVDZWxsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKTsKKwogICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCBjZWxsSW5kZXgK
ICAgICBpbnQgY2VsbEluZGV4KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZvaWQgc2V0Q2Vs
bEluZGV4KGludCkgeyB9CiAKLSAgICBpbnQgY29sU3BhbigpIGNvbnN0IHsgcmV0dXJuIGNTcGFu
OyB9Ci0gICAgdm9pZCBzZXRDb2xTcGFuKGludCBjKSB7IGNTcGFuID0gYzsgfQorICAgIGludCBj
b2xTcGFuKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5TcGFuOyB9CisgICAgdm9pZCBzZXRDb2xT
cGFuKGludCBjKSB7IG1fY29sdW1uU3BhbiA9IGM7IH0KIAotICAgIGludCByb3dTcGFuKCkgY29u
c3QgeyByZXR1cm4gclNwYW47IH0KLSAgICB2b2lkIHNldFJvd1NwYW4oaW50IHIpIHsgclNwYW4g
PSByOyB9CisgICAgaW50IHJvd1NwYW4oKSBjb25zdCB7IHJldHVybiBtX3Jvd1NwYW47IH0KKyAg
ICB2b2lkIHNldFJvd1NwYW4oaW50IHIpIHsgbV9yb3dTcGFuID0gcjsgfQogCi0gICAgaW50IGNv
bCgpIGNvbnN0IHsgcmV0dXJuIF9jb2w7IH0KLSAgICB2b2lkIHNldENvbChpbnQgY29sKSB7IF9j
b2wgPSBjb2w7IH0KLSAgICBpbnQgcm93KCkgY29uc3QgeyByZXR1cm4gX3JvdzsgfQotICAgIHZv
aWQgc2V0Um93KGludCByKSB7IF9yb3cgPSByOyB9CisgICAgaW50IGNvbCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29sdW1uOyB9CisgICAgdm9pZCBzZXRDb2woaW50IGNvbCkgeyBtX2NvbHVtbiA9IGNv
bDsgfQorICAgIGludCByb3coKSBjb25zdCB7IHJldHVybiBtX3JvdzsgfQorICAgIHZvaWQgc2V0
Um93KGludCByb3cpIHsgbV9yb3cgPSByb3c7IH0KKworICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
c2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+
KHBhcmVudCgpLT5wYXJlbnQoKSk7IH0KKyAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBhcmVudCgpLT5wYXJlbnQoKS0+cGFy
ZW50KCkpOyB9CiAKICAgICBMZW5ndGggc3R5bGVPckNvbFdpZHRoKCk7CiAKQEAgLTg1LDQ5ICs4
OSw0MiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgCi0gICAgdm9pZCBzZXRDZWxsVG9wRXh0
cmEoaW50IHApIHsgX3RvcEV4dHJhID0gcDsgfQotICAgIHZvaWQgc2V0Q2VsbEJvdHRvbUV4dHJh
KGludCBwKSB7IF9ib3R0b21FeHRyYSA9IHA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hE
ZWNvcmF0aW9ucyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdm9pZCBwYWludENv
bGxhcHNlZEJvcmRlcihHcmFwaGljc0NvbnRleHQqLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg
aCk7Ci0gICAgCi0gICAgLy8gbGllIGFib3V0IHBvc2l0aW9uIHRvIG91dHNpZGUgb2JzZXJ2ZXJz
Ci0gICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIG1feSArIF90b3BFeHRyYTsg
fQorICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHksIFJlbmRlck9iamVjdCogYmFja2dyb3VuZE9iamVjdCk7CisKKyAgICAvLyBMaWUg
YWJvdXQgcG9zaXRpb24gdG8gb3V0c2lkZSBvYnNlcnZlcnMuCisgICAgdmlydHVhbCBpbnQgeVBv
cygpIGNvbnN0IHsgcmV0dXJuIG1feSArIG1fdG9wRXh0cmE7IH0KIAogICAgIHZpcnR1YWwgSW50
UmVjdCBnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVB
YnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmLCBib29sIGY9ZmFsc2UpOwotICAgIHZpcnR1YWwg
Ym9vbCBhYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGYgPSBmYWxz
ZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3Qm
LCBib29sIGZpeGVkID0gZmFsc2UpOworICAgIHZpcnR1YWwgYm9vbCBhYnNvbHV0ZVBvc2l0aW9u
KGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkID0gZmFsc2UpOwogCi0gICAgdmlydHVh
bCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVh
bCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIGJvb2wgaXNS
b290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IGJvcmRlclRvcEV4
dHJhKCkgY29uc3QgeyByZXR1cm4gX3RvcEV4dHJhOyB9Ci0gICAgdmlydHVhbCBpbnQgYm9yZGVy
Qm90dG9tRXh0cmEoKSBjb25zdCB7IHJldHVybiBfYm90dG9tRXh0cmE7IH0KKyAgICB2b2lkIHNl
dENlbGxUb3BFeHRyYShpbnQgcCkgeyBtX3RvcEV4dHJhID0gcDsgfQorICAgIHZvaWQgc2V0Q2Vs
bEJvdHRvbUV4dHJhKGludCBwKSB7IG1fYm90dG9tRXh0cmEgPSBwOyB9CiAKLSAgICBSZW5kZXJU
YWJsZSogdGFibGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBh
cmVudCgpLT5wYXJlbnQoKS0+cGFyZW50KCkpOyB9Ci0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiBz
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4o
cGFyZW50KCktPnBhcmVudCgpKTsgfQorICAgIHZpcnR1YWwgaW50IGJvcmRlclRvcEV4dHJhKCkg
Y29uc3QgeyByZXR1cm4gbV90b3BFeHRyYTsgfQorICAgIHZpcnR1YWwgaW50IGJvcmRlckJvdHRv
bUV4dHJhKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b21FeHRyYTsgfQogCiAjaWZuZGVmIE5ERUJV
RwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJlYW0gKnN0cmVhbSwgRGVwcmVjYXRlZFN0
cmluZyBpbmQgPSAiIikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4dFN0cmVhbSos
IERlcHJlY2F0ZWRTdHJpbmcgaW5kID0gIiIpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2b2lkIHBh
aW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBSZW5k
ZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpOwotCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotCi0g
ICAgaW50IF9yb3c7Ci0gICAgaW50IF9jb2w7Ci0gICAgaW50IHJTcGFuOwotICAgIGludCBjU3Bh
bjsKLSAgICBpbnQgX3RvcEV4dHJhIDogMzE7Ci0gICAgaW50IF9ib3R0b21FeHRyYSA6IDMxOwor
ICAgIGludCBtX3JvdzsKKyAgICBpbnQgbV9jb2x1bW47CisgICAgaW50IG1fcm93U3BhbjsKKyAg
ICBpbnQgbV9jb2x1bW5TcGFuOworICAgIGludCBtX3RvcEV4dHJhIDogMzE7CisgICAgaW50IG1f
Ym90dG9tRXh0cmEgOiAzMTsKICAgICBib29sIG1fd2lkdGhDaGFuZ2VkIDogMTsKLQogICAgIGlu
dCBtX3BlcmNlbnRhZ2VIZWlnaHQ7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlclRhYmxlQ2VsbF9oCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuY3BwCShyZXZpc2lvbiAxODU3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTAgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVGFibGVDZWxsLmgiCisKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQzLDkgKzQ0LDggQEAgUmVuZGVyVGFibGVSb3c6OlJlbmRlclRhYmxl
Um93KE5vZGUqIG5vZAogCiB2b2lkIFJlbmRlclRhYmxlUm93OjpkZXN0cm95KCkKIHsKLSAgICBS
ZW5kZXJUYWJsZVNlY3Rpb24gKnMgPSBzZWN0aW9uKCk7Ci0gICAgaWYgKHMpCi0gICAgICAgIHMt
PnNldE5lZWRDZWxsUmVjYWxjKCk7CisgICAgaWYgKFJlbmRlclRhYmxlU2VjdGlvbiogcyA9IHNl
Y3Rpb24oKSkKKyAgICAgICAgcy0+c2V0TmVlZHNDZWxsUmVjYWxjKCk7CiAgICAgCiAgICAgUmVu
ZGVyQ29udGFpbmVyOjpkZXN0cm95KCk7CiB9CkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgUmVuZGVy
VGFibGVSb3c6OmRlc3Ryb3koKQogdm9pZCBSZW5kZXJUYWJsZVJvdzo6c2V0U3R5bGUoUmVuZGVy
U3R5bGUqIG5ld1N0eWxlKQogewogICAgIGlmIChzZWN0aW9uKCkgJiYgc3R5bGUoKSAmJiBzdHls
ZSgpLT5oZWlnaHQoKSAhPSBuZXdTdHlsZS0+aGVpZ2h0KCkpCi0gICAgICAgIHNlY3Rpb24oKS0+
c2V0TmVlZENlbGxSZWNhbGMoKTsKKyAgICAgICAgc2VjdGlvbigpLT5zZXROZWVkc0NlbGxSZWNh
bGMoKTsKIAogICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KFRBQkxFX1JPVyk7CiAKQEAgLTk0LDcg
Kzk0LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZQogICAgICAg
ICByZXR1cm47CiAgICAgfSAKICAgICAKLSAgICAvLyBJZiB0aGUgbmV4dCByZW5kZXJlciBpcyBh
Y3R1YWxseSB3cmFwcGVkIGluIGFuIGFub255bW91cyB0YWJsZSBjZWxsLCB3ZSBuZWVkIHRvIGdv
IHVwIGFuZCBmaW5kIHRoYXQKKyAgICAvLyBJZiB0aGUgbmV4dCByZW5kZXJlciBpcyBhY3R1YWxs
eSB3cmFwcGVkIGluIGFuIGFub255bW91cyB0YWJsZSBjZWxsLCB3ZSBuZWVkIHRvIGdvIHVwIGFu
ZCBmaW5kIHRoYXQuCiAgICAgd2hpbGUgKGJlZm9yZUNoaWxkICYmICFiZWZvcmVDaGlsZC0+aXNU
YWJsZUNlbGwoKSkKICAgICAgICAgYmVmb3JlQ2hpbGQgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7
CiAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5k
ZXJPYmplCiAgICAgUmVuZGVyQ29udGFpbmVyOjphZGRDaGlsZChjZWxsLCBiZWZvcmVDaGlsZCk7
CiAKICAgICBpZiAoYmVmb3JlQ2hpbGQgfHwgbmV4dFNpYmxpbmcoKSkKLSAgICAgICAgc2VjdGlv
bigpLT5zZXROZWVkQ2VsbFJlY2FsYygpOworICAgICAgICBzZWN0aW9uKCktPnNldE5lZWRzQ2Vs
bFJlY2FsYygpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlUm93OjpsYXlvdXQoKQpAQCAtMTEzLDkg
KzExMyw5IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OmxheW91dCgpCiAgICAgQVNTRVJUKG5lZWRz
TGF5b3V0KCkpOwogICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAotICAgIGZvciAoUmVuZGVy
T2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGls
ZC0+aXNUYWJsZUNlbGwoKSkgewotICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsICpjZWxsID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsICo+KGNoaWxkKTsKKyAgICAgICAgICAgIFJlbmRl
clRhYmxlQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCo+KGNoaWxkKTsK
ICAgICAgICAgICAgIGlmIChjaGlsZC0+bmVlZHNMYXlvdXQoKSkgewogICAgICAgICAgICAgICAg
IGNlbGwtPmNhbGNWZXJ0aWNhbE1hcmdpbnMoKTsKICAgICAgICAgICAgICAgICBjZWxsLT5sYXlv
dXQoKTsKQEAgLTEzMCwxMSArMTMwLDEwIEBAIEludFJlY3QgUmVuZGVyVGFibGVSb3c6OmdldEFi
c29sdXRlUmVwYWkKICAgICAvLyBGb3Igbm93LCBqdXN0IHJlcGFpbnQgdGhlIHdob2xlIHRhYmxl
LgogICAgIC8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCBlLmcuLCBuZWVk
IHRvIHJlcGFpbnQgYWxsIHRoZSBjZWxscyB0aGF0IHdlCiAgICAgLy8gbWlnaHQgaGF2ZSBwcm9w
YWdhdGVkIGEgYmFja2dyb3VuZCBjb2xvciBpbnRvLgotICAgIFJlbmRlclRhYmxlKiBwYXJlbnRU
YWJsZSA9IHRhYmxlKCk7Ci0gICAgaWYgKHBhcmVudFRhYmxlKQorICAgIGlmIChSZW5kZXJUYWJs
ZSogcGFyZW50VGFibGUgPSB0YWJsZSgpKQogICAgICAgICByZXR1cm4gcGFyZW50VGFibGUtPmdl
dEFic29sdXRlUmVwYWludFJlY3QoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CisKKyAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCiAvLyBIaXQgVGVzdGluZwpAQCAtMTU4
LDcgKzE1Nyw3IEBAIGJvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KGNvbnN0IEgKIAog
dm9pZCBSZW5kZXJUYWJsZVJvdzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwg
aW50IHR5KQogewotICAgIGFzc2VydChtX2xheWVyKTsKKyAgICBBU1NFUlQobV9sYXllcik7CiAg
ICAgaWYgKCFtX2xheWVyKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlUm93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVSb3cuaAkocmV2aXNpb24gMTg1NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVJvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyNCArMjQsMjkgQEAKICAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKLSNpZm5kZWYgUmVuZGVyVGFibGVSb3dfSAot
I2RlZmluZSBSZW5kZXJUYWJsZVJvd19ICisjaWZuZGVmIFJlbmRlclRhYmxlUm93X2gKKyNkZWZp
bmUgUmVuZGVyVGFibGVSb3dfaAogCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyVGFibGVSb3cgOiBwdWJsaWMgUmVu
ZGVyQ29udGFpbmVyCi17CitjbGFzcyBSZW5kZXJUYWJsZVJvdyA6IHB1YmxpYyBSZW5kZXJDb250
YWluZXIgewogcHVibGljOgogICAgIFJlbmRlclRhYmxlUm93KE5vZGUqKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxl
Kik7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclRhYmxlUm93IjsgfQorCiAgICAgdmlydHVhbCBib29sIGlzVGFibGVSb3coKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworCisgICAg
UmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyVGFibGVTZWN0aW9uKj4ocGFyZW50KCkpOyB9CisgICAgUmVuZGVyVGFibGUqIHRhYmxl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihwYXJlbnQoKS0+cGFy
ZW50KCkpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCA9IDApOwotICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodChib29sKSBj
b25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wgZmly
c3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihJbmxpbmVCb3gqKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCBJbnRSZWN0IGdldEFic29sdXRlUmVwYWludFJlY3Qo
KTsKQEAgLTUxLDExICs1Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNM
YXllcigpIHsgcmV0dXJuIGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKTsgfQog
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLQot
ICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRl
clRhYmxlKj4ocGFyZW50KCktPnBhcmVudCgpKTsgfQotICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
c2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+
KHBhcmVudCgpKTsgfQogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYK
KyNlbmRpZiAvLyBSZW5kZXJUYWJsZVJvd19oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDE4NTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDEyIEBA
CiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNvbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCi0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlIDxsaW1p
dHM+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBA
IC00NSwxNyArNDUsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUmVuZGVyVGFi
bGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24oTm9kZSogbm9kZSkKICAgICA6IFJlbmRlckNv
bnRhaW5lcihub2RlKQorICAgICwgbV9ncmlkUm93cygwKQorICAgICwgbV9jQ29sKDApCisgICAg
LCBtX2NSb3coLTEpCisgICAgLCBtX25lZWRzQ2VsbFJlY2FsYyhmYWxzZSkKKyAgICAsIG1fb3V0
ZXJCb3JkZXJMZWZ0KDApCisgICAgLCBtX291dGVyQm9yZGVyUmlnaHQoMCkKKyAgICAsIG1fb3V0
ZXJCb3JkZXJUb3AoMCkKKyAgICAsIG1fb3V0ZXJCb3JkZXJCb3R0b20oMCkKIHsKICAgICAvLyBp
bml0IFJlbmRlck9iamVjdCBhdHRyaWJ1dGVzCiAgICAgc2V0SW5saW5lKGZhbHNlKTsgICAvLyBv
dXIgb2JqZWN0IGlzIG5vdCBJbmxpbmUKLSAgICBncmlkUm93cyA9IDA7Ci0gICAgY0NvbCA9IDA7
Ci0gICAgY1JvdyA9IC0xOwotICAgIG5lZWRDZWxsUmVjYWxjID0gZmFsc2U7Ci0gICAgbV9vdXRl
ckJvcmRlckxlZnQgPSAwOwotICAgIG1fb3V0ZXJCb3JkZXJSaWdodCA9IDA7Ci0gICAgbV9vdXRl
ckJvcmRlclRvcCA9IDA7Ci0gICAgbV9vdXRlckJvcmRlckJvdHRvbSA9IDA7CiB9CiAKIFJlbmRl
clRhYmxlU2VjdGlvbjo6flJlbmRlclRhYmxlU2VjdGlvbigpCkBAIC02OCwyMCArNjgsMjAgQEAg
dm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmRlc3Ryb3koKQogICAgIC8vIHJlY2FsYyBjZWxsIGlu
Zm8gYmVjYXVzZSBSZW5kZXJUYWJsZSBoYXMgdW5ndWFyZGVkIHBvaW50ZXJzCiAgICAgLy8gc3Rv
cmVkIHRoYXQgcG9pbnQgdG8gdGhpcyBSZW5kZXJUYWJsZVNlY3Rpb24uCiAgICAgaWYgKHRhYmxl
KCkpCi0gICAgICAgIHRhYmxlKCktPnNldE5lZWRTZWN0aW9uUmVjYWxjKCk7CisgICAgICAgIHRh
YmxlKCktPnNldE5lZWRzU2VjdGlvblJlY2FsYygpOwogCiAgICAgUmVuZGVyQ29udGFpbmVyOjpk
ZXN0cm95KCk7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzZXRTdHlsZShSZW5kZXJT
dHlsZSogX3N0eWxlKQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNldFN0eWxlKFJlbmRlclN0
eWxlKiBuZXdTdHlsZSkKIHsKICAgICAvLyB3ZSBkb24ndCBhbGxvdyBjaGFuZ2luZyB0aGlzIG9u
ZQogICAgIGlmIChzdHlsZSgpKQotICAgICAgICBfc3R5bGUtPnNldERpc3BsYXkoc3R5bGUoKS0+
ZGlzcGxheSgpKTsKLSAgICBlbHNlIGlmIChfc3R5bGUtPmRpc3BsYXkoKSAhPSBUQUJMRV9GT09U
RVJfR1JPVVAgJiYgX3N0eWxlLT5kaXNwbGF5KCkgIT0gVEFCTEVfSEVBREVSX0dST1VQKQotICAg
ICAgICBfc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfUk9XX0dST1VQKTsKKyAgICAgICAgbmV3U3R5
bGUtPnNldERpc3BsYXkoc3R5bGUoKS0+ZGlzcGxheSgpKTsKKyAgICBlbHNlIGlmIChuZXdTdHls
ZS0+ZGlzcGxheSgpICE9IFRBQkxFX0ZPT1RFUl9HUk9VUCAmJiBuZXdTdHlsZS0+ZGlzcGxheSgp
ICE9IFRBQkxFX0hFQURFUl9HUk9VUCkKKyAgICAgICAgbmV3U3R5bGUtPnNldERpc3BsYXkoVEFC
TEVfUk9XX0dST1VQKTsKIAotICAgIFJlbmRlckNvbnRhaW5lcjo6c2V0U3R5bGUoX3N0eWxlKTsK
KyAgICBSZW5kZXJDb250YWluZXI6OnNldFN0eWxlKG5ld1N0eWxlKTsKIH0KIAogdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCkBAIC0xMjMsMjEgKzEyMywyMSBAQCB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgfQogCiAgICAgaWYgKGJlZm9yZUNoaWxkKQotICAg
ICAgICBzZXROZWVkQ2VsbFJlY2FsYygpOworICAgICAgICBzZXROZWVkc0NlbGxSZWNhbGMoKTsK
IAotICAgICsrY1JvdzsKLSAgICBjQ29sID0gMDsKKyAgICArK21fY1JvdzsKKyAgICBtX2NDb2wg
PSAwOwogCi0gICAgZW5zdXJlUm93cyhjUm93ICsgMSk7Ci0gICAgZ3JpZFtjUm93XS5yb3dSZW5k
ZXJlciA9IGNoaWxkOworICAgIGVuc3VyZVJvd3MobV9jUm93ICsgMSk7CisgICAgbV9ncmlkW21f
Y1Jvd10ucm93UmVuZGVyZXIgPSBjaGlsZDsKIAogICAgIGlmICghYmVmb3JlQ2hpbGQpIHsKLSAg
ICAgICAgZ3JpZFtjUm93XS5oZWlnaHQgPSBjaGlsZC0+c3R5bGUoKS0+aGVpZ2h0KCk7Ci0gICAg
ICAgIGlmIChncmlkW2NSb3ddLmhlaWdodC5pc1JlbGF0aXZlKCkpCi0gICAgICAgICAgICBncmlk
W2NSb3ddLmhlaWdodCA9IExlbmd0aCgpOworICAgICAgICBtX2dyaWRbbV9jUm93XS5oZWlnaHQg
PSBjaGlsZC0+c3R5bGUoKS0+aGVpZ2h0KCk7CisgICAgICAgIGlmIChtX2dyaWRbbV9jUm93XS5o
ZWlnaHQuaXNSZWxhdGl2ZSgpKQorICAgICAgICAgICAgbV9ncmlkW21fY1Jvd10uaGVpZ2h0ID0g
TGVuZ3RoKCk7CiAgICAgfQogCi0gICAgLy8gSWYgdGhlIG5leHQgcmVuZGVyZXIgaXMgYWN0dWFs
bHkgd3JhcHBlZCBpbiBhbiBhbm9ueW1vdXMgdGFibGUgcm93LCB3ZSBuZWVkIHRvIGdvIHVwIGFu
ZCBmaW5kIHRoYXQKKyAgICAvLyBJZiB0aGUgbmV4dCByZW5kZXJlciBpcyBhY3R1YWxseSB3cmFw
cGVkIGluIGFuIGFub255bW91cyB0YWJsZSByb3csIHdlIG5lZWQgdG8gZ28gdXAgYW5kIGZpbmQg
dGhhdC4KICAgICB3aGlsZSAoYmVmb3JlQ2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc1RhYmxlUm93
KCkpCiAgICAgICAgIGJlZm9yZUNoaWxkID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOwogCkBAIC0x
NDYsMjQgKzE0NiwyNCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVy
CiAKIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGludCBudW1Sb3dzKQogewot
ICAgIGludCBuUm93cyA9IGdyaWRSb3dzOworICAgIGludCBuUm93cyA9IG1fZ3JpZFJvd3M7CiAg
ICAgaWYgKG51bVJvd3MgPiBuUm93cykgewotICAgICAgICBpZiAobnVtUm93cyA+IHN0YXRpY19j
YXN0PGludD4oZ3JpZC5zaXplKCkpKSB7CisgICAgICAgIGlmIChudW1Sb3dzID4gc3RhdGljX2Nh
c3Q8aW50PihtX2dyaWQuc2l6ZSgpKSkgewogICAgICAgICAgICAgaWYgKG51bVJvd3MgPiBzdGF0
aWNfY2FzdDxpbnQ+KG51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC8gc2l6ZW9mKFJvd1N0
cnVjdCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGdyaWQu
cmVzaXplKG51bVJvd3MpOworICAgICAgICAgICAgbV9ncmlkLnJlc2l6ZShudW1Sb3dzKTsKICAg
ICAgICAgfQotICAgICAgICBncmlkUm93cyA9IG51bVJvd3M7CisgICAgICAgIG1fZ3JpZFJvd3Mg
PSBudW1Sb3dzOwogICAgICAgICBpbnQgbkNvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7CiAg
ICAgICAgIENlbGxTdHJ1Y3QgZW1wdHlDZWxsU3RydWN0OwogICAgICAgICBlbXB0eUNlbGxTdHJ1
Y3QuY2VsbCA9IDA7CiAgICAgICAgIGVtcHR5Q2VsbFN0cnVjdC5pbkNvbFNwYW4gPSBmYWxzZTsK
ICAgICAgICAgZm9yIChpbnQgciA9IG5Sb3dzOyByIDwgbnVtUm93czsgcisrKSB7Ci0gICAgICAg
ICAgICBncmlkW3JdLnJvdyA9IG5ldyBSb3cobkNvbHMpOwotICAgICAgICAgICAgZ3JpZFtyXS5y
b3ctPmZpbGwoZW1wdHlDZWxsU3RydWN0KTsKLSAgICAgICAgICAgIGdyaWRbcl0ucm93UmVuZGVy
ZXIgPSAwOwotICAgICAgICAgICAgZ3JpZFtyXS5iYXNlTGluZSA9IDA7Ci0gICAgICAgICAgICBn
cmlkW3JdLmhlaWdodCA9IExlbmd0aCgpOworICAgICAgICAgICAgbV9ncmlkW3JdLnJvdyA9IG5l
dyBSb3cobkNvbHMpOworICAgICAgICAgICAgbV9ncmlkW3JdLnJvdy0+ZmlsbChlbXB0eUNlbGxT
dHJ1Y3QpOworICAgICAgICAgICAgbV9ncmlkW3JdLnJvd1JlbmRlcmVyID0gMDsKKyAgICAgICAg
ICAgIG1fZ3JpZFtyXS5iYXNlTGluZSA9IDA7CisgICAgICAgICAgICBtX2dyaWRbcl0uaGVpZ2h0
ID0gTGVuZ3RoKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJUCiB7CiAgICAgaW50IHJTcGFuID0g
Y2VsbC0+cm93U3BhbigpOwogICAgIGludCBjU3BhbiA9IGNlbGwtPmNvbFNwYW4oKTsKLSAgICBW
ZWN0b3I8UmVuZGVyVGFibGU6OkNvbHVtblN0cnVjdD4mIGNvbHVtbnMgPSB0YWJsZSgpLT5jb2x1
bW5zOworICAgIFZlY3RvcjxSZW5kZXJUYWJsZTo6Q29sdW1uU3RydWN0PiYgY29sdW1ucyA9IHRh
YmxlKCktPmNvbHVtbnMoKTsKICAgICBpbnQgbkNvbHMgPSBjb2x1bW5zLnNpemUoKTsKIAogICAg
IC8vICMjIyBtb3ppbGxhIHN0aWxsIHNlZW1zIHRvIGRvIHRoZSBvbGQgSFRNTCB3YXksIGV2ZW4g
Zm9yIHN0cmljdCBEVEQKQEAgLTE4NCwyNCArMTg0LDI0IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0
aW9uOjphZGRDZWxsKFJlbmRlclQKICAgICAvLyA8VFI+PFREIGNvbHNwYW49IjIiPjUKICAgICAv
LyA8L1RBQkxFPgogCi0gICAgd2hpbGUgKGNDb2wgPCBuQ29scyAmJiAoY2VsbEF0KGNSb3csIGND
b2wpLmNlbGwgfHwgY2VsbEF0KGNSb3csIGNDb2wpLmluQ29sU3BhbikpCi0gICAgICAgIGNDb2wr
KzsKKyAgICB3aGlsZSAobV9jQ29sIDwgbkNvbHMgJiYgKGNlbGxBdChtX2NSb3csIG1fY0NvbCku
Y2VsbCB8fCBjZWxsQXQobV9jUm93LCBtX2NDb2wpLmluQ29sU3BhbikpCisgICAgICAgIG1fY0Nv
bCsrOwogCiAgICAgaWYgKHJTcGFuID09IDEpIHsKICAgICAgICAgLy8gd2UgaWdub3JlIGhlaWdo
dCBzZXR0aW5ncyBvbiByb3dzcGFuIGNlbGxzCiAgICAgICAgIExlbmd0aCBoZWlnaHQgPSBjZWxs
LT5zdHlsZSgpLT5oZWlnaHQoKTsKICAgICAgICAgaWYgKGhlaWdodC5pc1Bvc2l0aXZlKCkgfHwg
KGhlaWdodC5pc1JlbGF0aXZlKCkgJiYgaGVpZ2h0LnZhbHVlKCkgPj0gMCkpIHsKLSAgICAgICAg
ICAgIExlbmd0aCBjUm93SGVpZ2h0ID0gZ3JpZFtjUm93XS5oZWlnaHQ7CisgICAgICAgICAgICBM
ZW5ndGggY1Jvd0hlaWdodCA9IG1fZ3JpZFttX2NSb3ddLmhlaWdodDsKICAgICAgICAgICAgIHN3
aXRjaCAoaGVpZ2h0LnR5cGUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgUGVyY2VudDoKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCEoY1Jvd0hlaWdodC5pc1BlcmNlbnQoKSkgfHwKICAgICAg
ICAgICAgICAgICAgICAgICAgIChjUm93SGVpZ2h0LmlzUGVyY2VudCgpICYmIGNSb3dIZWlnaHQu
cmF3VmFsdWUoKSA8IGhlaWdodC5yYXdWYWx1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGdyaWRbY1Jvd10uaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmlkW21fY1Jvd10uaGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBGaXhlZDoKICAgICAgICAgICAgICAgICAgICAgaWYg
KGNSb3dIZWlnaHQudHlwZSgpIDwgUGVyY2VudCB8fAogICAgICAgICAgICAgICAgICAgICAgICAg
KGNSb3dIZWlnaHQuaXNGaXhlZCgpICYmIGNSb3dIZWlnaHQudmFsdWUoKSA8IGhlaWdodC52YWx1
ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRbY1Jvd10uaGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmlkW21fY1Jvd10uaGVpZ2h0ID0gaGVpZ2h0
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFJlbGF0
aXZlOgogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTEsNjUgKzIxMSw2MiBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJUCiAgICAgfQogCiAgICAgLy8gbWFr
ZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvd3MKLSAgICBpZiAoIWVuc3VyZVJvd3MoY1JvdyArIHJT
cGFuKSkKKyAgICBpZiAoIWVuc3VyZVJvd3MobV9jUm93ICsgclNwYW4pKQogICAgICAgICByZXR1
cm47CiAKLSAgICBncmlkW2NSb3ddLnJvd1JlbmRlcmVyID0gcm93OworICAgIG1fZ3JpZFttX2NS
b3ddLnJvd1JlbmRlcmVyID0gcm93OwogCi0gICAgaW50IGNvbCA9IGNDb2w7CisgICAgaW50IGNv
bCA9IG1fY0NvbDsKICAgICAvLyB0ZWxsIHRoZSBjZWxsIHdoZXJlIGl0IGlzCiAgICAgQ2VsbFN0
cnVjdCBjdXJyZW50Q2VsbDsKICAgICBjdXJyZW50Q2VsbC5jZWxsID0gY2VsbDsKICAgICBjdXJy
ZW50Q2VsbC5pbkNvbFNwYW4gPSBmYWxzZTsKICAgICB3aGlsZSAoY1NwYW4pIHsKICAgICAgICAg
aW50IGN1cnJlbnRTcGFuOwotICAgICAgICBpZiAoY0NvbCA+PSBuQ29scykgeworICAgICAgICBp
ZiAobV9jQ29sID49IG5Db2xzKSB7CiAgICAgICAgICAgICB0YWJsZSgpLT5hcHBlbmRDb2x1bW4o
Y1NwYW4pOwogICAgICAgICAgICAgY3VycmVudFNwYW4gPSBjU3BhbjsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChjU3BhbiA8IGNvbHVtbnNbY0NvbF0uc3BhbikKLSAgICAgICAg
ICAgICAgICB0YWJsZSgpLT5zcGxpdENvbHVtbihjQ29sLCBjU3Bhbik7Ci0gICAgICAgICAgICBj
dXJyZW50U3BhbiA9IGNvbHVtbnNbY0NvbF0uc3BhbjsKKyAgICAgICAgICAgIGlmIChjU3BhbiA8
IGNvbHVtbnNbbV9jQ29sXS5zcGFuKQorICAgICAgICAgICAgICAgIHRhYmxlKCktPnNwbGl0Q29s
dW1uKG1fY0NvbCwgY1NwYW4pOworICAgICAgICAgICAgY3VycmVudFNwYW4gPSBjb2x1bW5zW21f
Y0NvbF0uc3BhbjsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgclNw
YW47IHIrKykgewotICAgICAgICAgICAgQ2VsbFN0cnVjdCYgYyA9IGNlbGxBdChjUm93ICsgciwg
Y0NvbCk7CisgICAgICAgICAgICBDZWxsU3RydWN0JiBjID0gY2VsbEF0KG1fY1JvdyArIHIsIG1f
Y0NvbCk7CiAgICAgICAgICAgICBpZiAoY3VycmVudENlbGwuY2VsbCAmJiAhYy5jZWxsKQogICAg
ICAgICAgICAgICAgIGMuY2VsbCA9IGN1cnJlbnRDZWxsLmNlbGw7CiAgICAgICAgICAgICBpZiAo
Y3VycmVudENlbGwuaW5Db2xTcGFuKQogICAgICAgICAgICAgICAgIGMuaW5Db2xTcGFuID0gdHJ1
ZTsKICAgICAgICAgfQotICAgICAgICBjQ29sKys7CisgICAgICAgIG1fY0NvbCsrOwogICAgICAg
ICBjU3BhbiAtPSBjdXJyZW50U3BhbjsKICAgICAgICAgY3VycmVudENlbGwuY2VsbCA9IDA7CiAg
ICAgICAgIGN1cnJlbnRDZWxsLmluQ29sU3BhbiA9IHRydWU7CiAgICAgfQogICAgIGlmIChjZWxs
KSB7Ci0gICAgICAgIGNlbGwtPnNldFJvdyhjUm93KTsKKyAgICAgICAgY2VsbC0+c2V0Um93KG1f
Y1Jvdyk7CiAgICAgICAgIGNlbGwtPnNldENvbCh0YWJsZSgpLT5lZmZDb2xUb0NvbChjb2wpKTsK
ICAgICB9CiB9CiAKLQotCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q2VsbFdpZHRocygp
CiB7Ci0gICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNvbHVtblBvczsKKyAg
ICBWZWN0b3I8aW50PiYgY29sdW1uUG9zID0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKCk7CiAK
LSAgICBpbnQgcm93cyA9IGdyaWRSb3dzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsg
aSsrKSB7Ci0gICAgICAgIFJvdyAmcm93ID0gKmdyaWRbaV0ucm93OworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbV9ncmlkUm93czsgaSsrKSB7CisgICAgICAgIFJvdyYgcm93ID0gKm1fZ3JpZFtp
XS5yb3c7CiAgICAgICAgIGludCBjb2xzID0gcm93LnNpemUoKTsKICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCBjb2xzOyBqKyspIHsKICAgICAgICAgICAgIENlbGxTdHJ1Y3QgY3VycmVudCA9
IHJvd1tqXTsKLSAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCAqY2VsbCA9IGN1cnJlbnQuY2Vs
bDsKKyAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGN1cnJlbnQuY2VsbDsKIAog
ICAgICAgICAgICAgaWYgKCFjZWxsKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgaW50IGVuZENvbCA9IGo7CiAgICAgICAgICAgICBpbnQgY3NwYW4gPSBjZWxsLT5jb2xT
cGFuKCk7CiAgICAgICAgICAgICB3aGlsZSAoY3NwYW4gJiYgZW5kQ29sIDwgY29scykgewotICAg
ICAgICAgICAgICAgIGNzcGFuIC09IHRhYmxlKCktPmNvbHVtbnNbZW5kQ29sXS5zcGFuOworICAg
ICAgICAgICAgICAgIGNzcGFuIC09IHRhYmxlKCktPmNvbHVtbnMoKVtlbmRDb2xdLnNwYW47CiAg
ICAgICAgICAgICAgICAgZW5kQ29sKys7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnQg
dyA9IGNvbHVtblBvc1tlbmRDb2xdIC0gY29sdW1uUG9zW2pdIC0gdGFibGUoKS0+aEJvcmRlclNw
YWNpbmcoKTsKQEAgLTI4NSw0MyArMjgyLDM3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpz
ZXRDZWxsV2lkdGhzKCkKICAgICB9CiB9CiAKLQogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmNh
bGNSb3dIZWlnaHQoKQogewotICAgIGludCBpbmR4OwotICAgIFJlbmRlclRhYmxlQ2VsbCAqY2Vs
bDsKKyAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGw7CiAKLSAgICBpbnQgdG90YWxSb3dzID0gZ3Jp
ZFJvd3M7CiAgICAgaW50IHNwYWNpbmcgPSB0YWJsZSgpLT52Qm9yZGVyU3BhY2luZygpOwogCi0g
ICAgcm93UG9zLnJlc2l6ZSh0b3RhbFJvd3MgKyAxKTsKLSAgICByb3dQb3NbMF0gPSBzcGFjaW5n
OworICAgIG1fcm93UG9zLnJlc2l6ZShtX2dyaWRSb3dzICsgMSk7CisgICAgbV9yb3dQb3NbMF0g
PSBzcGFjaW5nOwogCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewot
ICAgICAgICByb3dQb3NbciArIDFdID0gMDsKKyAgICBmb3IgKGludCByID0gMDsgciA8IG1fZ3Jp
ZFJvd3M7IHIrKykgeworICAgICAgICBtX3Jvd1Bvc1tyICsgMV0gPSAwOwogCiAgICAgICAgIGlu
dCBiYXNlbGluZSA9IDA7CiAgICAgICAgIGludCBiZGVzYyA9IDA7Ci0gICAgICAgIGludCBjaCA9
IGdyaWRbcl0uaGVpZ2h0LmNhbGNNaW5WYWx1ZSgwKTsKLSAgICAgICAgaW50IHBvcyA9IHJvd1Bv
c1tyXSArIGNoICsgKGdyaWRbcl0ucm93UmVuZGVyZXIgPyBzcGFjaW5nIDogMCk7CisgICAgICAg
IGludCBjaCA9IG1fZ3JpZFtyXS5oZWlnaHQuY2FsY01pblZhbHVlKDApOworICAgICAgICBpbnQg
cG9zID0gbV9yb3dQb3Nbcl0gKyBjaCArIChtX2dyaWRbcl0ucm93UmVuZGVyZXIgPyBzcGFjaW5n
IDogMCk7CiAKLSAgICAgICAgaWYgKHBvcyA+IHJvd1Bvc1tyICsgMV0pCi0gICAgICAgICAgICBy
b3dQb3NbciArIDFdID0gcG9zOworICAgICAgICBtX3Jvd1Bvc1tyICsgMV0gPSBtYXgobV9yb3dQ
b3NbciArIDFdLCBwb3MpOwogCi0gICAgICAgIFJvdyAqcm93ID0gZ3JpZFtyXS5yb3c7CisgICAg
ICAgIFJvdyogcm93ID0gbV9ncmlkW3JdLnJvdzsKICAgICAgICAgaW50IHRvdGFsQ29scyA9IHJv
dy0+c2l6ZSgpOwotICAgICAgICBpbnQgdG90YWxSb3dzID0gZ3JpZFJvd3M7CiAKICAgICAgICAg
Zm9yIChpbnQgYyA9IDA7IGMgPCB0b3RhbENvbHM7IGMrKykgewogICAgICAgICAgICAgQ2VsbFN0
cnVjdCBjdXJyZW50ID0gY2VsbEF0KHIsIGMpOwogICAgICAgICAgICAgY2VsbCA9IGN1cnJlbnQu
Y2VsbDsKICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjdXJyZW50LmluQ29sU3BhbikKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChyIDwgdG90YWxSb3dzIC0gMSAm
JiBjZWxsQXQociArIDEsIGMpLmNlbGwgPT0gY2VsbCkKKyAgICAgICAgICAgIGlmIChyIDwgbV9n
cmlkUm93cyAtIDEgJiYgY2VsbEF0KHIgKyAxLCBjKS5jZWxsID09IGNlbGwpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmICgoaW5keCA9IHIgLSBjZWxsLT5yb3dT
cGFuKCkgKyAxKSA8IDApCi0gICAgICAgICAgICAgICAgaW5keCA9IDA7CisgICAgICAgICAgICBp
bnQgaW5keCA9IG1heChyIC0gY2VsbC0+cm93U3BhbigpICsgMSwgMCk7CiAKICAgICAgICAgICAg
IGlmIChjZWxsLT5vdmVycmlkZVNpemUoKSAhPSAtMSkgewogICAgICAgICAgICAgICAgIGNlbGwt
PnNldE92ZXJyaWRlU2l6ZSgtMSk7CkBAIC0zMzQsMjYgKzMyNSwxOSBAQCB2b2lkIFJlbmRlclRh
YmxlU2VjdGlvbjo6Y2FsY1Jvd0hlaWdodCgpCiAgICAgICAgICAgICBjaCA9IGNlbGwtPnN0eWxl
KCktPmhlaWdodCgpLmNhbGNWYWx1ZSgwKSArIAogICAgICAgICAgICAgICAgIChjZWxsLT5zdHls
ZSgpLT5odG1sSGFja3MoKSA/IDAgOiAoY2VsbC0+cGFkZGluZ1RvcCgpICsgY2VsbC0+cGFkZGlu
Z0JvdHRvbSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNlbGwtPmJvcmRlclRvcCgpICsgY2VsbC0+Ym9yZGVyQm90dG9tKCkpKTsKLSAgICAg
ICAgICAgIGlmIChjZWxsLT5oZWlnaHQoKSA+IGNoKQotICAgICAgICAgICAgICAgIGNoID0gY2Vs
bC0+aGVpZ2h0KCk7CisgICAgICAgICAgICBjaCA9IG1heChjaCwgY2VsbC0+aGVpZ2h0KCkpOwog
Ci0gICAgICAgICAgICBwb3MgPSByb3dQb3NbaW5keF0gKyBjaCArIChncmlkW3JdLnJvd1JlbmRl
cmVyID8gc3BhY2luZyA6IDApOworICAgICAgICAgICAgcG9zID0gbV9yb3dQb3NbaW5keF0gKyBj
aCArIChtX2dyaWRbcl0ucm93UmVuZGVyZXIgPyBzcGFjaW5nIDogMCk7CiAKLSAgICAgICAgICAg
IGlmIChwb3MgPiByb3dQb3NbciArIDFdKQotICAgICAgICAgICAgICAgIHJvd1Bvc1tyICsgMV0g
PSBwb3M7CisgICAgICAgICAgICBtX3Jvd1Bvc1tyICsgMV0gPSBtYXgobV9yb3dQb3NbciArIDFd
LCBwb3MpOwogCiAgICAgICAgICAgICAvLyBmaW5kIG91dCB0aGUgYmFzZWxpbmUKICAgICAgICAg
ICAgIEVWZXJ0aWNhbEFsaWduIHZhID0gY2VsbC0+c3R5bGUoKS0+dmVydGljYWxBbGlnbigpOwot
ICAgICAgICAgICAgaWYgKHZhID09IEJBU0VMSU5FIHx8IHZhID09IFRFWFRfQk9UVE9NIHx8IHZh
ID09IFRFWFRfVE9QCi0gICAgICAgICAgICAgICAgfHwgdmEgPT0gU1VQRVIgfHwgdmEgPT0gU1VC
KSB7CisgICAgICAgICAgICBpZiAodmEgPT0gQkFTRUxJTkUgfHwgdmEgPT0gVEVYVF9CT1RUT00g
fHwgdmEgPT0gVEVYVF9UT1AgfHwgdmEgPT0gU1VQRVIgfHwgdmEgPT0gU1VCKSB7CiAgICAgICAg
ICAgICAgICAgaW50IGIgPSBjZWxsLT5iYXNlbGluZVBvc2l0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGIgPiBjZWxsLT5ib3JkZXJUb3AoKSArIGNlbGwtPnBhZGRpbmdUb3AoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoYiA+IGJhc2VsaW5lKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYmFzZWxpbmUgPSBiOwotCi0gICAgICAgICAgICAgICAgICAgIGludCB0ZCA9IHJvd1Bvc1tp
bmR4XSArIGNoIC0gYjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRkID4gYmRlc2MpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBiZGVzYyA9IHRkOworICAgICAgICAgICAgICAgICAgICBiYXNl
bGluZSA9IG1heChiYXNlbGluZSwgYik7CisgICAgICAgICAgICAgICAgICAgIGJkZXNjID0gbWF4
KGJkZXNjLCBtX3Jvd1Bvc1tpbmR4XSArIGNoIC0gYik7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0zNjEsMTUgKzM0NSwxMSBAQCB2b2lkIFJlbmRlclRh
YmxlU2VjdGlvbjo6Y2FsY1Jvd0hlaWdodCgpCiAgICAgICAgIC8vZG8gd2UgaGF2ZSBiYXNlbGlu
ZSBhbGlnbmVkIGVsZW1lbnRzPwogICAgICAgICBpZiAoYmFzZWxpbmUpIHsKICAgICAgICAgICAg
IC8vIGluY3JlYXNlIHJvd2hlaWdodCBpZiBiYXNlbGluZSByZXF1aXJlcwotICAgICAgICAgICAg
aW50IGJSb3dQb3MgPSBiYXNlbGluZSArIGJkZXNjICsgKGdyaWRbcl0ucm93UmVuZGVyZXIgPyBz
cGFjaW5nIDogMCk7Ci0gICAgICAgICAgICBpZiAocm93UG9zW3IgKyAxXSA8IGJSb3dQb3MpCi0g
ICAgICAgICAgICAgICAgcm93UG9zW3IgKyAxXSA9IGJSb3dQb3M7Ci0KLSAgICAgICAgICAgIGdy
aWRbcl0uYmFzZUxpbmUgPSBiYXNlbGluZTsKKyAgICAgICAgICAgIG1fcm93UG9zW3IgKyAxXSA9
IG1heChtX3Jvd1Bvc1tyICsgMV0sIGJhc2VsaW5lICsgYmRlc2MgKyAobV9ncmlkW3JdLnJvd1Jl
bmRlcmVyID8gc3BhY2luZyA6IDApKTsKKyAgICAgICAgICAgIG1fZ3JpZFtyXS5iYXNlTGluZSA9
IGJhc2VsaW5lOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHJvd1Bvc1tyICsgMV0gPCByb3dQ
b3Nbcl0pCi0gICAgICAgICAgICByb3dQb3NbciArIDFdID0gcm93UG9zW3JdOworICAgICAgICBt
X3Jvd1Bvc1tyICsgMV0gPSBtYXgobV9yb3dQb3NbciArIDFdLCBtX3Jvd1Bvc1tyXSk7CiAgICAg
fQogfQogCkBAIC0zNzcsMTAwICszNTcsOTcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5
b3V0Um93cyhpbnQgdAogewogICAgIGludCBySGVpZ2h0OwogICAgIGludCByaW5keDsKLSAgICBp
bnQgdG90YWxSb3dzID0gZ3JpZFJvd3M7Ci0gICAgaW50IGhzcGFjaW5nID0gdGFibGUoKS0+aEJv
cmRlclNwYWNpbmcoKTsKLSAgICBpbnQgdnNwYWNpbmcgPSB0YWJsZSgpLT52Qm9yZGVyU3BhY2lu
ZygpOworICAgIGludCB0b3RhbFJvd3MgPSBtX2dyaWRSb3dzOwogICAgIAogICAgIC8vIFNldCB0
aGUgd2lkdGggb2Ygb3VyIHNlY3Rpb24gbm93LiAgVGhlIHJvd3Mgd2lsbCBhbHNvIGJlIHRoaXMg
d2lkdGguCiAgICAgbV93aWR0aCA9IHRhYmxlKCktPmNvbnRlbnRXaWR0aCgpOwogICAgIGlmICh0
YWJsZSgpLT5jb2xsYXBzZUJvcmRlcnMoKSkKICAgICAgICAgcmVjYWxjT3V0ZXJCb3JkZXIoKTsK
ICAgICAKLSAgICBpZiAodG9BZGQgJiYgdG90YWxSb3dzICYmIChyb3dQb3NbdG90YWxSb3dzXSB8
fCAhbmV4dFNpYmxpbmcoKSkpIHsKLQotICAgICAgICBpbnQgdG90YWxIZWlnaHQgPSByb3dQb3Nb
dG90YWxSb3dzXSArIHRvQWRkOworICAgIGlmICh0b0FkZCAmJiB0b3RhbFJvd3MgJiYgKG1fcm93
UG9zW3RvdGFsUm93c10gfHwgIW5leHRTaWJsaW5nKCkpKSB7CisgICAgICAgIGludCB0b3RhbEhl
aWdodCA9IG1fcm93UG9zW3RvdGFsUm93c10gKyB0b0FkZDsKIAogICAgICAgICBpbnQgZGggPSB0
b0FkZDsKICAgICAgICAgaW50IHRvdGFsUGVyY2VudCA9IDA7CiAgICAgICAgIGludCBudW1BdXRv
ID0gMDsKICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewotICAg
ICAgICAgICAgaWYgKGdyaWRbcl0uaGVpZ2h0LmlzQXV0bygpKQorICAgICAgICAgICAgaWYgKG1f
Z3JpZFtyXS5oZWlnaHQuaXNBdXRvKCkpCiAgICAgICAgICAgICAgICAgbnVtQXV0bysrOwotICAg
ICAgICAgICAgZWxzZSBpZiAoZ3JpZFtyXS5oZWlnaHQuaXNQZXJjZW50KCkpCi0gICAgICAgICAg
ICAgICAgdG90YWxQZXJjZW50ICs9IGdyaWRbcl0uaGVpZ2h0LnJhd1ZhbHVlKCk7CisgICAgICAg
ICAgICBlbHNlIGlmIChtX2dyaWRbcl0uaGVpZ2h0LmlzUGVyY2VudCgpKQorICAgICAgICAgICAg
ICAgIHRvdGFsUGVyY2VudCArPSBtX2dyaWRbcl0uaGVpZ2h0LnJhd1ZhbHVlKCk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHRvdGFsUGVyY2VudCkgewogICAgICAgICAgICAgLy8gdHJ5IHRvIHNh
dGlzZnkgcGVyY2VudAogICAgICAgICAgICAgaW50IGFkZCA9IDA7CiAgICAgICAgICAgICBpZiAo
dG90YWxQZXJjZW50ID4gMTAwICogcGVyY2VudFNjYWxlRmFjdG9yKQogICAgICAgICAgICAgICAg
IHRvdGFsUGVyY2VudCA9IDEwMCAqIHBlcmNlbnRTY2FsZUZhY3RvcjsKLSAgICAgICAgICAgIGlu
dCByaCA9IHJvd1Bvc1sxXSAtIHJvd1Bvc1swXTsKKyAgICAgICAgICAgIGludCByaCA9IG1fcm93
UG9zWzFdIC0gbV9yb3dQb3NbMF07CiAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHRv
dGFsUm93czsgcisrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRvdGFsUGVyY2VudCA+IDAgJiYg
Z3JpZFtyXS5oZWlnaHQuaXNQZXJjZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHRv
QWRkID0gbWluKGRoLCAodG90YWxIZWlnaHQgKiBncmlkW3JdLmhlaWdodC5yYXdWYWx1ZSgpIC8g
KDEwMCAqIHBlcmNlbnRTY2FsZUZhY3RvcikpIC0gcmgpOworICAgICAgICAgICAgICAgIGlmICh0
b3RhbFBlcmNlbnQgPiAwICYmIG1fZ3JpZFtyXS5oZWlnaHQuaXNQZXJjZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IHRvQWRkID0gbWluKGRoLCAodG90YWxIZWlnaHQgKiBtX2dyaWRb
cl0uaGVpZ2h0LnJhd1ZhbHVlKCkgLyAoMTAwICogcGVyY2VudFNjYWxlRmFjdG9yKSkgLSByaCk7
CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRvQWRkIGlzIG5lZ2F0aXZlLCB0aGVuIHdlIGRv
bid0IHdhbnQgdG8gc2hyaW5rIHRoZSByb3cgKHRoaXMgYnVnCiAgICAgICAgICAgICAgICAgICAg
IC8vIGFmZmVjdGVkIE91dGxvb2sgV2ViIEFjY2VzcykuCiAgICAgICAgICAgICAgICAgICAgIHRv
QWRkID0gbWF4KDAsIHRvQWRkKTsKICAgICAgICAgICAgICAgICAgICAgYWRkICs9IHRvQWRkOwog
ICAgICAgICAgICAgICAgICAgICBkaCAtPSB0b0FkZDsKLSAgICAgICAgICAgICAgICAgICAgdG90
YWxQZXJjZW50IC09IGdyaWRbcl0uaGVpZ2h0LnJhd1ZhbHVlKCk7CisgICAgICAgICAgICAgICAg
ICAgIHRvdGFsUGVyY2VudCAtPSBtX2dyaWRbcl0uaGVpZ2h0LnJhd1ZhbHVlKCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChyIDwgdG90YWxSb3dzIC0gMSkKLSAgICAg
ICAgICAgICAgICAgICAgcmggPSByb3dQb3NbciArIDJdIC0gcm93UG9zW3IgKyAxXTsKLSAgICAg
ICAgICAgICAgICByb3dQb3NbciArIDFdICs9IGFkZDsKKyAgICAgICAgICAgICAgICAgICAgcmgg
PSBtX3Jvd1Bvc1tyICsgMl0gLSBtX3Jvd1Bvc1tyICsgMV07CisgICAgICAgICAgICAgICAgbV9y
b3dQb3NbciArIDFdICs9IGFkZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBp
ZiAobnVtQXV0bykgewogICAgICAgICAgICAgLy8gZGlzdHJpYnV0ZSBvdmVyIHZhcmlhYmxlIGNv
bHMKICAgICAgICAgICAgIGludCBhZGQgPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7
IHIgPCB0b3RhbFJvd3M7IHIrKykgewotICAgICAgICAgICAgICAgIGlmIChudW1BdXRvID4gMCAm
JiBncmlkW3JdLmhlaWdodC5pc0F1dG8oKSkgeworICAgICAgICAgICAgICAgIGlmIChudW1BdXRv
ID4gMCAmJiBtX2dyaWRbcl0uaGVpZ2h0LmlzQXV0bygpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGludCB0b0FkZCA9IGRoL251bUF1dG87CiAgICAgICAgICAgICAgICAgICAgIGFkZCArPSB0b0Fk
ZDsKICAgICAgICAgICAgICAgICAgICAgZGggLT0gdG9BZGQ7CiAgICAgICAgICAgICAgICAgICAg
IG51bUF1dG8tLTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcm93UG9zW3Ig
KyAxXSArPSBhZGQ7CisgICAgICAgICAgICAgICAgbV9yb3dQb3NbciArIDFdICs9IGFkZDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoZGggPiAwICYmIHJvd1Bvc1t0b3Rh
bFJvd3NdKSB7CisgICAgICAgIGlmIChkaCA+IDAgJiYgbV9yb3dQb3NbdG90YWxSb3dzXSkgewog
ICAgICAgICAgICAgLy8gaWYgc29tZSBsZWZ0IG92ZXJzLCBkaXN0cmlidXRlIGVxdWFsbHkuCi0g
ICAgICAgICAgICBpbnQgdG90ID0gcm93UG9zW3RvdGFsUm93c107CisgICAgICAgICAgICBpbnQg
dG90ID0gbV9yb3dQb3NbdG90YWxSb3dzXTsKICAgICAgICAgICAgIGludCBhZGQgPSAwOwotICAg
ICAgICAgICAgaW50IHByZXYgPSByb3dQb3NbMF07CisgICAgICAgICAgICBpbnQgcHJldiA9IG1f
cm93UG9zWzBdOwogICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIr
KykgewogICAgICAgICAgICAgICAgIC8vd2VpZ2h0IHdpdGggdGhlIG9yaWdpbmFsIGhlaWdodAot
ICAgICAgICAgICAgICAgIGFkZCArPSBkaCAqIChyb3dQb3NbciArIDFdIC0gcHJldikgLyB0b3Q7
Ci0gICAgICAgICAgICAgICAgcHJldiA9IHJvd1Bvc1tyICsgMV07Ci0gICAgICAgICAgICAgICAg
cm93UG9zW3IgKyAxXSArPSBhZGQ7CisgICAgICAgICAgICAgICAgYWRkICs9IGRoICogKG1fcm93
UG9zW3IgKyAxXSAtIHByZXYpIC8gdG90OworICAgICAgICAgICAgICAgIHByZXYgPSBtX3Jvd1Bv
c1tyICsgMV07CisgICAgICAgICAgICAgICAgbV9yb3dQb3NbciArIDFdICs9IGFkZDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGludCBsZWZ0T2Zmc2V0ID0gaHNwYWNp
bmc7Ci0KKyAgICBpbnQgaHNwYWNpbmcgPSB0YWJsZSgpLT5oQm9yZGVyU3BhY2luZygpOworICAg
IGludCB2c3BhY2luZyA9IHRhYmxlKCktPnZCb3JkZXJTcGFjaW5nKCk7CiAgICAgaW50IG5FZmZD
b2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOworCiAgICAgZm9yIChpbnQgciA9IDA7IHIgPCB0
b3RhbFJvd3M7IHIrKykgewogICAgICAgICAvLyBTZXQgdGhlIHJvdydzIHgveSBwb3NpdGlvbiBh
bmQgd2lkdGgvaGVpZ2h0LgotICAgICAgICBpZiAoZ3JpZFtyXS5yb3dSZW5kZXJlcikgewotICAg
ICAgICAgICAgZ3JpZFtyXS5yb3dSZW5kZXJlci0+c2V0UG9zKDAsIHJvd1Bvc1tyXSk7Ci0gICAg
ICAgICAgICBncmlkW3JdLnJvd1JlbmRlcmVyLT5zZXRXaWR0aChtX3dpZHRoKTsKLSAgICAgICAg
ICAgIGdyaWRbcl0ucm93UmVuZGVyZXItPnNldEhlaWdodChyb3dQb3NbcisxXSAtIHJvd1Bvc1ty
XSAtIHZzcGFjaW5nKTsKKyAgICAgICAgaWYgKG1fZ3JpZFtyXS5yb3dSZW5kZXJlcikgeworICAg
ICAgICAgICAgbV9ncmlkW3JdLnJvd1JlbmRlcmVyLT5zZXRQb3MoMCwgbV9yb3dQb3Nbcl0pOwor
ICAgICAgICAgICAgbV9ncmlkW3JdLnJvd1JlbmRlcmVyLT5zZXRXaWR0aChtX3dpZHRoKTsKKyAg
ICAgICAgICAgIG1fZ3JpZFtyXS5yb3dSZW5kZXJlci0+c2V0SGVpZ2h0KG1fcm93UG9zW3IgKyAx
XSAtIG1fcm93UG9zW3JdIC0gdnNwYWNpbmcpOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChp
bnQgYyA9IDA7IGMgPCBuRWZmQ29sczsgYysrKSB7Ci0gICAgICAgICAgICBDZWxsU3RydWN0IGN1
cnJlbnQgPSBjZWxsQXQociwgYyk7Ci0gICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwg
PSBjdXJyZW50LmNlbGw7CisgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjZWxs
QXQociwgYykuY2VsbDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFjZWxsKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKHIgPCB0b3RhbFJvd3MgLSAx
ICYmIGNlbGwgPT0gY2VsbEF0KHIgKyAxLCBjKS5jZWxsKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICBpZiAoKHJpbmR4ID0gci1jZWxsLT5yb3dTcGFuKCkgKyAxKSA8
IDApCisgICAgICAgICAgICBpZiAoKHJpbmR4ID0gciAtIGNlbGwtPnJvd1NwYW4oKSArIDEpIDwg
MCkKICAgICAgICAgICAgICAgICByaW5keCA9IDA7CiAKLSAgICAgICAgICAgIHJIZWlnaHQgPSBy
b3dQb3NbciArIDFdIC0gcm93UG9zW3JpbmR4XSAtIHZzcGFjaW5nOworICAgICAgICAgICAgckhl
aWdodCA9IG1fcm93UG9zW3IgKyAxXSAtIG1fcm93UG9zW3JpbmR4XSAtIHZzcGFjaW5nOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICAvLyBGb3JjZSBwZXJjZW50IGhlaWdodCBjaGlsZHJlbiB0
byBsYXkgdGhlbXNlbHZlcyBvdXQgYWdhaW4uCiAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgY2F1
c2UgdGhlc2UgY2hpbGRyZW4gdG8gZ3JvdyB0byBmaWxsIHRoZSBjZWxsLgpAQCAtNTExLDkgKzQ4
OCw4IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC0+Ym9yZGVy
Qm90dG9tKCkgLSBjZWxsLT5wYWRkaW5nQm90dG9tKCkpKTsKICAgICAgICAgICAgICAgICBjZWxs
LT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBFVmVydGljYWxBbGlnbiB2YSA9IGNlbGwtPnN0eWxlKCktPnZlcnRpY2FsQWxpZ24oKTsKICAg
ICAgICAgICAgICAgICBpbnQgdGUgPSAwOwotICAgICAgICAgICAgICAgIHN3aXRjaCAodmEpIHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNlbGwtPnN0eWxlKCktPnZlcnRpY2FsQWxpZ24oKSkg
ewogICAgICAgICAgICAgICAgICAgICBjYXNlIFNVQjoKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBTVVBFUjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBURVhUX1RPUDoKQEAgLTU0NywxMyAr
NTIzLDkgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdAogICAgICAg
ICAgICAgSW50UmVjdCBvbGRDZWxsUmVjdChjZWxsLT54UG9zKCksIGNlbGwtPnlQb3MoKSAtIGNl
bGwtPmJvcmRlclRvcEV4dHJhKCkgLCBjZWxsLT53aWR0aCgpLCBjZWxsLT5oZWlnaHQoKSk7CiAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkgewot
ICAgICAgICAgICAgICAgIGNlbGwtPnNldFBvcygKLSAgICAgICAgICAgICAgICAgICAgdGFibGUo
KS0+Y29sdW1uUG9zW25FZmZDb2xzXSAtCi0gICAgICAgICAgICAgICAgICAgIHRhYmxlKCktPmNv
bHVtblBvc1t0YWJsZSgpLT5jb2xUb0VmZkNvbChjZWxsLT5jb2woKStjZWxsLT5jb2xTcGFuKCkp
XSArCi0gICAgICAgICAgICAgICAgICAgIGxlZnRPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAg
IHJvd1Bvc1tyaW5keF0pOworICAgICAgICAgICAgICAgIGNlbGwtPnNldFBvcyh0YWJsZSgpLT5j
b2x1bW5Qb3NpdGlvbnMoKVtuRWZmQ29sc10gLSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKVt0
YWJsZSgpLT5jb2xUb0VmZkNvbChjZWxsLT5jb2woKSArIGNlbGwtPmNvbFNwYW4oKSldICsgaHNw
YWNpbmcsIG1fcm93UG9zW3JpbmR4XSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBjZWxsLT5zZXRQb3ModGFibGUoKS0+Y29sdW1uUG9zW2NdICsgbGVmdE9mZnNldCwgcm93
UG9zW3JpbmR4XSk7CisgICAgICAgICAgICAgICAgY2VsbC0+c2V0UG9zKHRhYmxlKCktPmNvbHVt
blBvc2l0aW9ucygpW2NdICsgaHNwYWNpbmcsIG1fcm93UG9zW3JpbmR4XSk7CiAKICAgICAgICAg
ICAgIC8vIElmIHRoZSBjZWxsIG1vdmVkLCB3ZSBoYXZlIHRvIHJlcGFpbnQgaXQgYXMgd2VsbCBh
cyBhbnkgZmxvYXRpbmcvcG9zaXRpb25lZAogICAgICAgICAgICAgLy8gZGVzY2VuZGFudHMuICBB
biBleGNlcHRpb24gaXMgaWYgd2UgbmVlZCBhIGxheW91dC4gIEluIHRoaXMgY2FzZSwgd2Uga25v
dyB3ZSdyZSBnb2luZyB0bwpAQCAtNTYzLDcgKzUzNSw3IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rp
b246OmxheW91dFJvd3MoaW50IHQKICAgICAgICAgfQogICAgIH0KIAotICAgIG1faGVpZ2h0ID0g
cm93UG9zW3RvdGFsUm93c107CisgICAgbV9oZWlnaHQgPSBtX3Jvd1Bvc1t0b3RhbFJvd3NdOwog
ICAgIHJldHVybiBtX2hlaWdodDsKIH0KIApAQCAtNTczLDExICs1NDUsMTAgQEAgaW50IFJlbmRl
clRhYmxlU2VjdGlvbjo6bG93ZXN0UG9zaXRpb24oYgogICAgIGlmICghaW5jbHVkZU92ZXJmbG93
SW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiBib3R0b207CiAK
LSAgICBmb3IgKFJlbmRlck9iamVjdCAqcm93ID0gZmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJv
dy0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCAqY2VsbCA9IHJv
dy0+Zmlyc3RDaGlsZCgpOyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkKLSAgICAg
ICAgICAgIGlmIChjZWxsLT5pc1RhYmxlQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJw
ID0gY2VsbC0+eVBvcygpICsgY2VsbC0+bG93ZXN0UG9zaXRpb24oZmFsc2UpOwotICAgICAgICAg
ICAgICAgIGJvdHRvbSA9IG1heChib3R0b20sIGJwKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCog
cm93ID0gZmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgeworICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGlsZCgpOyBjZWxsOyBj
ZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKGNlbGwtPmlzVGFi
bGVDZWxsKCkpCisgICAgICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgY2VsbC0+eVBv
cygpICsgY2VsbC0+bG93ZXN0UG9zaXRpb24oZmFsc2UpKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKQEAgLTU5MCwxMSArNTYxLDEwIEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OnJpZ2h0bW9z
dFBvc2l0aW8KICAgICBpZiAoIWluY2x1ZGVPdmVyZmxvd0ludGVyaW9yICYmIGhhc092ZXJmbG93
Q2xpcCgpKQogICAgICAgICByZXR1cm4gcmlnaHQ7CiAKLSAgICBmb3IgKFJlbmRlck9iamVjdCAq
cm93ID0gZmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCAqY2VsbCA9IHJvdy0+Zmlyc3RDaGlsZCgpOyBjZWxsOyBj
ZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGlmIChjZWxsLT5pc1RhYmxl
Q2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHJwID0gY2VsbC0+eFBvcygpICsgY2VsbC0+
cmlnaHRtb3N0UG9zaXRpb24oZmFsc2UpOwotICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJp
Z2h0LCBycCk7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIHJvdyA9IGZpcnN0Q2hpbGQoKTsgcm93
OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3Qq
IGNlbGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5n
KCkpIHsKKyAgICAgICAgICAgIGlmIChjZWxsLT5pc1RhYmxlQ2VsbCgpKQorICAgICAgICAgICAg
ICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBjZWxsLT54UG9zKCkgKyBjZWxsLT5yaWdodG1vc3RQb3Np
dGlvbihmYWxzZSkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNjA3LDExICs1NzcsMTAg
QEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGVmdG1vc3RQb3NpdGlvbgogICAgIGlmICghaW5j
bHVkZU92ZXJmbG93SW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVy
biBsZWZ0OwogICAgIAotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpyb3cgPSBmaXJzdENoaWxkKCk7
IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGZvciAoUmVuZGVyT2Jq
ZWN0ICpjZWxsID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2li
bGluZygpKQotICAgICAgICAgICAgaWYgKGNlbGwtPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbnQgbHAgPSBjZWxsLT54UG9zKCkgKyBjZWxsLT5sZWZ0bW9zdFBvc2l0aW9uKGZh
bHNlKTsKLSAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIGxwKTsKKyAgICBmb3IgKFJl
bmRlck9iamVjdCogcm93ID0gZmlyc3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGls
ZCgpOyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYg
KGNlbGwtPmlzVGFibGVDZWxsKCkpCisgICAgICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCBj
ZWxsLT54UG9zKCkgKyBjZWxsLT5sZWZ0bW9zdFBvc2l0aW9uKGZhbHNlKSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkBAIC02MjEsNyArNTkwLDcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6
bGVmdG1vc3RQb3NpdGlvbgogaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVy
VG9wKCkgY29uc3QKIHsKICAgICBpbnQgdG90YWxDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygp
OwotICAgIGlmIChncmlkUm93cyA9PSAwIHx8IHRvdGFsQ29scyA9PSAwKQorICAgIGlmICghbV9n
cmlkUm93cyB8fCAhdG90YWxDb2xzKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHVuc2lnbmVk
IGJvcmRlcldpZHRoID0gMDsKQEAgLTY3NCw3ICs2NDMsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0
aW9uOjpjYWxjT3V0ZXJCb3JkZXJUCiBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJC
b3JkZXJCb3R0b20oKSBjb25zdAogewogICAgIGludCB0b3RhbENvbHMgPSB0YWJsZSgpLT5udW1F
ZmZDb2xzKCk7Ci0gICAgaWYgKGdyaWRSb3dzID09IDAgfHwgdG90YWxDb2xzID09IDApCisgICAg
aWYgKCFtX2dyaWRSb3dzIHx8ICF0b3RhbENvbHMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
dW5zaWduZWQgYm9yZGVyV2lkdGggPSAwOwpAQCAtNjkzLDcgKzY2Miw3IEBAIGludCBSZW5kZXJU
YWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckIKIAogICAgIGJvb2wgYWxsSGlkZGVuID0gdHJ1
ZTsKICAgICBmb3IgKGludCBjID0gMDsgYyA8IHRvdGFsQ29sczsgYysrKSB7Ci0gICAgICAgIGNv
bnN0IENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQoZ3JpZFJvd3MgLSAxLCBjKTsKKyAgICAg
ICAgY29uc3QgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChtX2dyaWRSb3dzIC0gMSwgYyk7
CiAgICAgICAgIGlmIChjdXJyZW50LmluQ29sU3BhbiB8fCAhY3VycmVudC5jZWxsKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGNvbnN0IEJvcmRlclZhbHVlJiBjYiA9IGN1cnJlbnQu
Y2VsbC0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tKCk7CkBAIC03MjcsNyArNjk2LDcgQEAgaW50IFJl
bmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyQgogaW50IFJlbmRlclRhYmxlU2VjdGlv
bjo6Y2FsY091dGVyQm9yZGVyTGVmdChib29sIHJ0bCkgY29uc3QKIHsKICAgICBpbnQgdG90YWxD
b2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOwotICAgIGlmIChncmlkUm93cyA9PSAwIHx8IHRv
dGFsQ29scyA9PSAwKQorICAgIGlmICghbV9ncmlkUm93cyB8fCAhdG90YWxDb2xzKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIHVuc2lnbmVkIGJvcmRlcldpZHRoID0gMDsKQEAgLTc0OSw3ICs3
MTgsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJMCiAgICAgfQog
CiAgICAgYm9vbCBhbGxIaWRkZW4gPSB0cnVlOwotICAgIGZvciAoaW50IHIgPSAwOyByIDwgZ3Jp
ZFJvd3M7IHIrKykgeworICAgIGZvciAoaW50IHIgPSAwOyByIDwgbV9ncmlkUm93czsgcisrKSB7
CiAgICAgICAgIGNvbnN0IENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQociwgbGVmdG1vc3RD
b2x1bW4pOwogICAgICAgICBpZiAoIWN1cnJlbnQuY2VsbCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtNzc0LDcgKzc0Myw3IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJv
cmRlckwKIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclJpZ2h0KGJvb2wg
cnRsKSBjb25zdAogewogICAgIGludCB0b3RhbENvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7
Ci0gICAgaWYgKGdyaWRSb3dzID09IDAgfHwgdG90YWxDb2xzID09IDApCisgICAgaWYgKCFtX2dy
aWRSb3dzIHx8ICF0b3RhbENvbHMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgdW5zaWduZWQg
Ym9yZGVyV2lkdGggPSAwOwpAQCAtNzk2LDcgKzc2NSw3IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rp
b246OmNhbGNPdXRlckJvcmRlclIKICAgICB9CiAKICAgICBib29sIGFsbEhpZGRlbiA9IHRydWU7
Ci0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBncmlkUm93czsgcisrKSB7CisgICAgZm9yIChpbnQg
ciA9IDA7IHIgPCBtX2dyaWRSb3dzOyByKyspIHsKICAgICAgICAgY29uc3QgQ2VsbFN0cnVjdCYg
Y3VycmVudCA9IGNlbGxBdChyLCByaWdodG1vc3RDb2x1bW4pOwogICAgICAgICBpZiAoIWN1cnJl
bnQuY2VsbCkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODMwLDE3ICs3OTksMTcgQEAgdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2FsY091dGVyQm9yZAogCiB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewot
ICAgIHVuc2lnbmVkIGludCB0b3RhbFJvd3MgPSBncmlkUm93czsKLSAgICB1bnNpZ25lZCBpbnQg
dG90YWxDb2xzID0gdGFibGUoKS0+Y29sdW1ucy5zaXplKCk7CisgICAgdW5zaWduZWQgdG90YWxS
b3dzID0gbV9ncmlkUm93czsKKyAgICB1bnNpZ25lZCB0b3RhbENvbHMgPSB0YWJsZSgpLT5jb2x1
bW5zKCkuc2l6ZSgpOwogCi0gICAgaWYgKHRvdGFsUm93cyA9PSAwIHx8IHRvdGFsQ29scyA9PSAw
KQorICAgIGlmICghdG90YWxSb3dzIHx8ICF0b3RhbENvbHMpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHR4ICs9IG1feDsKICAgICB0eSArPSBtX3k7CiAKLSAgICAvLyBjaGVjayB3aGljaCByb3dz
IGFuZCBjb2xzIGFyZSB2aXNpYmxlIGFuZCBvbmx5IHBhaW50IHRoZXNlCi0gICAgLy8gIyMjIGZp
eG1lOiBjb3VsZCB1c2UgYSBiaW5hcnkgc2VhcmNoIGhlcmUKKyAgICAvLyBDaGVjayB3aGljaCBy
b3dzIGFuZCBjb2xzIGFyZSB2aXNpYmxlIGFuZCBvbmx5IHBhaW50IHRoZXNlLgorICAgIC8vIEZJ
WE1FOiBDb3VsZCB1c2UgYSBiaW5hcnkgc2VhcmNoIGhlcmUuCiAgICAgUGFpbnRQaGFzZSBwYWlu
dFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogICAgIGludCB4ID0gcGFpbnRJbmZvLnJlY3QueCgp
OwogICAgIGludCB5ID0gcGFpbnRJbmZvLnJlY3QueSgpOwpAQCAtODQ4LDQ0ICs4MTcsNDQgQEAg
dm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbwogICAgIGludCBoID0gcGFp
bnRJbmZvLnJlY3QuaGVpZ2h0KCk7CiAKICAgICBpbnQgb3MgPSAyICogbWF4aW1hbE91dGxpbmVT
aXplKHBhaW50UGhhc2UpOwotICAgIHVuc2lnbmVkIGludCBzdGFydHJvdyA9IDA7Ci0gICAgdW5z
aWduZWQgaW50IGVuZHJvdyA9IHRvdGFsUm93czsKKyAgICB1bnNpZ25lZCBzdGFydHJvdyA9IDA7
CisgICAgdW5zaWduZWQgZW5kcm93ID0gdG90YWxSb3dzOwogICAgIGZvciAoOyBzdGFydHJvdyA8
IHRvdGFsUm93czsgc3RhcnRyb3crKykgewotICAgICAgICBpZiAodHkgKyByb3dQb3Nbc3RhcnRy
b3crMV0gPj0geSAtIG9zKQorICAgICAgICBpZiAodHkgKyBtX3Jvd1Bvc1tzdGFydHJvdyArIDFd
ID49IHkgLSBvcykKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoc3RhcnRyb3cg
PT0gdG90YWxSb3dzICYmIHR5ICsgcm93UG9zW3RvdGFsUm93c10gKyB0YWJsZSgpLT5vdXRlckJv
cmRlckJvdHRvbSgpID49IHkgLSBvcykKKyAgICBpZiAoc3RhcnRyb3cgPT0gdG90YWxSb3dzICYm
IHR5ICsgbV9yb3dQb3NbdG90YWxSb3dzXSArIHRhYmxlKCktPm91dGVyQm9yZGVyQm90dG9tKCkg
Pj0geSAtIG9zKQogICAgICAgICBzdGFydHJvdy0tOwogCiAgICAgZm9yICg7IGVuZHJvdyA+IDA7
IGVuZHJvdy0tKSB7Ci0gICAgICAgIGlmICh0eSArIHJvd1Bvc1tlbmRyb3ctMV0gPD0geSArIGgg
KyBvcykKKyAgICAgICAgaWYgKHR5ICsgbV9yb3dQb3NbZW5kcm93IC0gMV0gPD0geSArIGggKyBv
cykKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoZW5kcm93ID09IDAgJiYgdHkg
KyByb3dQb3NbMF0gLSB0YWJsZSgpLT5vdXRlckJvcmRlclRvcCgpIDw9IHkgKyBoICsgb3MpCisg
ICAgaWYgKCFlbmRyb3cgJiYgdHkgKyBtX3Jvd1Bvc1swXSAtIHRhYmxlKCktPm91dGVyQm9yZGVy
VG9wKCkgPD0geSArIGggKyBvcykKICAgICAgICAgZW5kcm93Kys7CiAKLSAgICB1bnNpZ25lZCBp
bnQgc3RhcnRjb2wgPSAwOwotICAgIHVuc2lnbmVkIGludCBlbmRjb2wgPSB0b3RhbENvbHM7Cisg
ICAgdW5zaWduZWQgc3RhcnRjb2wgPSAwOworICAgIHVuc2lnbmVkIGVuZGNvbCA9IHRvdGFsQ29s
czsKICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAgICAgICAgIGZvciAo
OyBzdGFydGNvbCA8IHRvdGFsQ29sczsgc3RhcnRjb2wrKykgewotICAgICAgICAgICAgaWYgKHR4
ICsgdGFibGUoKS0+Y29sdW1uUG9zW3N0YXJ0Y29sICsgMV0gPj0geCAtIG9zKQorICAgICAgICAg
ICAgaWYgKHR4ICsgdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClbc3RhcnRjb2wgKyAxXSA+PSB4
IC0gb3MpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0
YXJ0Y29sID09IHRvdGFsQ29scyAmJiB0eCArIHRhYmxlKCktPmNvbHVtblBvc1t0b3RhbENvbHNd
ICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJSaWdodCgpID49IHggLSBvcykKKyAgICAgICAgaWYgKHN0
YXJ0Y29sID09IHRvdGFsQ29scyAmJiB0eCArIHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpW3Rv
dGFsQ29sc10gKyB0YWJsZSgpLT5vdXRlckJvcmRlclJpZ2h0KCkgPj0geCAtIG9zKQogICAgICAg
ICAgICAgc3RhcnRjb2wtLTsKIAogICAgICAgICBmb3IgKDsgZW5kY29sID4gMDsgZW5kY29sLS0p
IHsKLSAgICAgICAgICAgIGlmICh0eCArIHRhYmxlKCktPmNvbHVtblBvc1tlbmRjb2wgLSAxXSA8
PSB4ICsgdyArIG9zKQorICAgICAgICAgICAgaWYgKHR4ICsgdGFibGUoKS0+Y29sdW1uUG9zaXRp
b25zKClbZW5kY29sIC0gMV0gPD0geCArIHcgKyBvcykKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBpZiAoZW5kY29sID09IDAgJiYgdHggKyB0YWJsZSgpLT5jb2x1
bW5Qb3NbMF0gLSB0YWJsZSgpLT5vdXRlckJvcmRlckxlZnQoKSA8PSB5ICsgdyArIG9zKQorICAg
ICAgICBpZiAoIWVuZGNvbCAmJiB0eCArIHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpWzBdIC0g
dGFibGUoKS0+b3V0ZXJCb3JkZXJMZWZ0KCkgPD0geSArIHcgKyBvcykKICAgICAgICAgICAgIGVu
ZGNvbCsrOwogICAgIH0KIAogICAgIGlmIChzdGFydGNvbCA8IGVuZGNvbCkgewogICAgICAgICAv
LyBkcmF3IHRoZSBjZWxscwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByID0gc3RhcnRyb3c7
IHIgPCBlbmRyb3c7IHIrKykgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGMgPSBzdGFydGNv
bDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCByID0gc3RhcnRyb3c7IHIgPCBlbmRyb3c7IHIrKykg
eworICAgICAgICAgICAgdW5zaWduZWQgYyA9IHN0YXJ0Y29sOwogICAgICAgICAgICAgLy8gc2lu
Y2UgYSBjZWxsIGNhbiBiZSAtMSAoaW5kaWNhdGluZyBhIGNvbHNwYW4pIHdlIG1pZ2h0IGhhdmUg
dG8gc2VhcmNoIGJhY2t3YXJkcyB0byBpbmNsdWRlIGl0CiAgICAgICAgICAgICB3aGlsZSAoYyAm
JiBjZWxsQXQociwgYykuaW5Db2xTcGFuKQogICAgICAgICAgICAgICAgIGMtLTsKQEAgLTkwNCwx
MSArODczLDkgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbwogICAg
ICAgICAgICAgICAgICAgICAvLyB0aGUgY29sdW1uIGdyb3VwLCBjb2x1bW4sIHJvdyBncm91cCwg
cm93LCBhbmQgdGhlbiB0aGUgY2VsbC4KICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiBjb2wgPSB0YWJsZSgpLT5jb2xFbGVtZW50KGMpOwogICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIGNvbEdyb3VwID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gY29sLT5wYXJlbnQo
KS0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+ZGlzcGxheSgp
ID09IFRBQkxFX0NPTFVNTl9HUk9VUCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xH
cm91cCA9IGNvbC0+cGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbCAmJiBjb2wtPnBhcmVudCgpLT5zdHlsZSgpLT5kaXNwbGF5KCkgPT0g
VEFCTEVfQ09MVU1OX0dST1VQKQorICAgICAgICAgICAgICAgICAgICAgICAgY29sR3JvdXAgPSBj
b2wtPnBhcmVudCgpOworCiAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcm93ID0g
Y2VsbC0+cGFyZW50KCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gQ29sdW1uIGdyb3VwcyBh
bmQgY29sdW1ucyBmaXJzdC4KQEAgLTkzNywzOSArOTA0LDQwIEBAIHZvaWQgUmVuZGVyVGFibGVT
ZWN0aW9uOjpwYWludChQYWludEluZm8KIAogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2Fs
Y0NlbGxzKCkKIHsKLSAgICBjQ29sID0gMDsKLSAgICBjUm93ID0gLTE7CisgICAgbV9jQ29sID0g
MDsKKyAgICBtX2NSb3cgPSAtMTsKICAgICBjbGVhckdyaWQoKTsKLSAgICBncmlkUm93cyA9IDA7
CisgICAgbV9ncmlkUm93cyA9IDA7CiAKLSAgICBmb3IgKFJlbmRlck9iamVjdCAqcm93ID0gZmly
c3RDaGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIGlmIChyb3ctPmlzVGFibGVSb3coKSkgewotICAgICAgICAgICAgY1Jv
dysrOwotICAgICAgICAgICAgY0NvbCA9IDA7Ci0gICAgICAgICAgICBlbnN1cmVSb3dzKGNSb3cg
KyAxKTsKLSAgICAgICAgICAgIGdyaWRbY1Jvd10ucm93UmVuZGVyZXIgPSByb3c7CisgICAgICAg
ICAgICBtX2NSb3crKzsKKyAgICAgICAgICAgIG1fY0NvbCA9IDA7CisgICAgICAgICAgICBlbnN1
cmVSb3dzKG1fY1JvdyArIDEpOworICAgICAgICAgICAgbV9ncmlkW21fY1Jvd10ucm93UmVuZGVy
ZXIgPSByb3c7CiAKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjZWxsID0gcm93LT5m
aXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKQorICAgICAgICAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNlbGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2Vs
bCA9IGNlbGwtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNU
YWJsZUNlbGwoKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkQ2VsbChzdGF0aWNfY2FzdDxSZW5k
ZXJUYWJsZUNlbGwgKj4oY2VsbCksIHJvdyk7CisgICAgICAgICAgICAgICAgICAgIGFkZENlbGwo
c3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oY2VsbCksIHJvdyk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0gICAgbmVlZENlbGxSZWNhbGMgPSBmYWxzZTsKKyAgICBtX25l
ZWRzQ2VsbFJlY2FsYyA9IGZhbHNlOwogICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCiB2
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6Y2xlYXJHcmlkKCkKIHsKLSAgICBpbnQgcm93cyA9IGdy
aWRSb3dzOworICAgIGludCByb3dzID0gbV9ncmlkUm93czsKICAgICB3aGlsZSAocm93cy0tKQot
ICAgICAgICBkZWxldGUgZ3JpZFtyb3dzXS5yb3c7CisgICAgICAgIGRlbGV0ZSBtX2dyaWRbcm93
c10ucm93OwogfQogCiBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKCkgY29uc3QK
IHsKICAgICBpbnQgcmVzdWx0ID0gMDsKICAgICAKLSAgICBmb3IgKGludCByID0gMDsgciA8IGdy
aWRSb3dzOyArK3IpIHsKKyAgICBmb3IgKGludCByID0gMDsgciA8IG1fZ3JpZFJvd3M7ICsrcikg
ewogICAgICAgICBmb3IgKGludCBjID0gcmVzdWx0OyBjIDwgdGFibGUoKS0+bnVtRWZmQ29scygp
OyArK2MpIHsKICAgICAgICAgICAgIGNvbnN0IENlbGxTdHJ1Y3QmIGNlbGwgPSBjZWxsQXQociwg
Yyk7CiAgICAgICAgICAgICBpZiAoY2VsbC5jZWxsIHx8IGNlbGwuaW5Db2xTcGFuKQpAQCAtOTgw
LDkgKzk0OCwzMiBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKCkgY29uCiAg
ICAgcmV0dXJuIHJlc3VsdCArIDE7CiB9CiAKK3ZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphcHBl
bmRDb2x1bW4oaW50IHBvcykKK3sKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX2dyaWRS
b3dzOyArK3JvdykgeworICAgICAgICBtX2dyaWRbcm93XS5yb3ctPnJlc2l6ZShwb3MgKyAxKTsK
KyAgICAgICAgQ2VsbFN0cnVjdCYgYyA9IGNlbGxBdChyb3csIHBvcyk7CisgICAgICAgIGMuY2Vs
bCA9IDA7CisgICAgICAgIGMuaW5Db2xTcGFuID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFJl
bmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4oaW50IHBvcywgaW50IG5ld1NpemUpCit7Cisg
ICAgaWYgKG1fY0NvbCA+IHBvcykKKyAgICAgICAgbV9jQ29sKys7CisgICAgZm9yIChpbnQgcm93
ID0gMDsgcm93IDwgbV9ncmlkUm93czsgKytyb3cpIHsKKyAgICAgICAgbV9ncmlkW3Jvd10ucm93
LT5yZXNpemUobmV3U2l6ZSk7CisgICAgICAgIFJvdyYgciA9ICptX2dyaWRbcm93XS5yb3c7Cisg
ICAgICAgIG1lbW1vdmUoci5kYXRhKCkgKyBwb3MgKyAxLCByLmRhdGEoKSArIHBvcywgKG5ld1Np
emUgLSAxIC0gcG9zKSAqIHNpemVvZihDZWxsU3RydWN0KSk7CisgICAgICAgIHJbcG9zICsgMV0u
Y2VsbCA9IDA7CisgICAgICAgIHJbcG9zICsgMV0uaW5Db2xTcGFuID0gcltwb3NdLmluQ29sU3Bh
biB8fCByW3Bvc10uY2VsbDsKKyAgICB9Cit9CisKIFJlbmRlck9iamVjdCogUmVuZGVyVGFibGVT
ZWN0aW9uOjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCkKIHsKLSAgICBzZXRO
ZWVkQ2VsbFJlY2FsYygpOworICAgIHNldE5lZWRzQ2VsbFJlY2FsYygpOwogICAgIHJldHVybiBS
ZW5kZXJDb250YWluZXI6OnJlbW92ZUNoaWxkTm9kZShjaGlsZCk7CiB9CiAKQEAgLTEwMDksMTIg
KzEwMDAsMTIgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KGNvbgogfQog
CiAjaWZuZGVmIE5ERUJVRwotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmR1bXAoVGV4dFN0cmVh
bSAqc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGluZCkgY29uc3QKK3ZvaWQgUmVuZGVyVGFibGVT
ZWN0aW9uOjpkdW1wKFRleHRTdHJlYW0qIHN0cmVhbSwgRGVwcmVjYXRlZFN0cmluZyBpbmQpIGNv
bnN0CiB7Ci0gICAgKnN0cmVhbSA8PCBlbmRsIDw8IGluZCA8PCAiZ3JpZD0oIiA8PCBncmlkUm93
cyA8PCAiLCIgPDwgdGFibGUoKS0+bnVtRWZmQ29scygpIDw8ICIpIiA8PCBlbmRsIDw8IGluZDsK
LSAgICBmb3IgKGludCByID0gMDsgciA8IGdyaWRSb3dzOyByKyspIHsKKyAgICAqc3RyZWFtIDw8
IGVuZGwgPDwgaW5kIDw8ICJncmlkPSgiIDw8IG1fZ3JpZFJvd3MgPDwgIiwiIDw8IHRhYmxlKCkt
Pm51bUVmZkNvbHMoKSA8PCAiKSIgPDwgZW5kbCA8PCBpbmQ7CisgICAgZm9yIChpbnQgciA9IDA7
IHIgPCBtX2dyaWRSb3dzOyByKyspIHsKICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCB0YWJs
ZSgpLT5udW1FZmZDb2xzKCk7IGMrKykgewotICAgICAgICAgICAgaWYgKGNlbGxBdCggciwgYyku
Y2VsbCAmJiAhY2VsbEF0KHIsIGMpLmluQ29sU3BhbikKKyAgICAgICAgICAgIGlmIChjZWxsQXQo
ciwgYykuY2VsbCAmJiAhY2VsbEF0KHIsIGMpLmluQ29sU3BhbikKICAgICAgICAgICAgICAgICAq
c3RyZWFtIDw8ICIoIiA8PCBjZWxsQXQociwgYykuY2VsbC0+cm93KCkgPDwgIiwiIDw8IGNlbGxB
dChyLCBjKS5jZWxsLT5jb2woKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNl
bGxBdChyLCBjKS5jZWxsLT5yb3dTcGFuKCkgPDwgIiwiIDw8IGNlbGxBdChyLCBjKS5jZWxsLT5j
b2xTcGFuKCkgPDwgIikgIjsKICAgICAgICAgICAgIGVsc2UKQEAgLTEwMjYsNCArMTAxNyw0IEBA
IHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpkdW1wKFRleHRTdHJlYW0KIH0KICNlbmRpZgogCi19
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uaAkocmV2aXNpb24gMTg1NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJUYWJsZVNlY3Rpb25f
SAotI2RlZmluZSBSZW5kZXJUYWJsZVNlY3Rpb25fSAorI2lmbmRlZiBSZW5kZXJUYWJsZVNlY3Rp
b25faAorI2RlZmluZSBSZW5kZXJUYWJsZVNlY3Rpb25faAogCiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zNCw0MSArMzQsMzkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJUYWJsZUNlbGw7CiAKLWNsYXNzIFJlbmRlclRh
YmxlU2VjdGlvbiA6IHB1YmxpYyBSZW5kZXJDb250YWluZXIKLXsKK2NsYXNzIFJlbmRlclRhYmxl
U2VjdGlvbiA6IHB1YmxpYyBSZW5kZXJDb250YWluZXIgewogcHVibGljOgogICAgIFJlbmRlclRh
YmxlU2VjdGlvbihOb2RlKik7CiAgICAgflJlbmRlclRhYmxlU2VjdGlvbigpOworCisgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclRhYmxl
U2VjdGlvbiI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlU2VjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKIAotICAgIHZpcnR1YWwgY29uc3QgY2hh
ciAqcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJUYWJsZVNlY3Rpb24iOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQgPSAwKTsKIAotICAgIC8vIG92ZXJyaWRlcwotICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZChSZW5kZXJPYmplY3QgKmNoaWxkLCBSZW5kZXJPYmplY3QgKmJlZm9yZUNoaWxk
ID0gMCk7Ci0gICAgdmlydHVhbCBib29sIGlzVGFibGVTZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQotCi0gICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJv
b2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVh
bCB2b2lkIHBvc2l0aW9uKElubGluZUJveCopIHsgfQogCi0jaWZuZGVmIE5ERUJVRwotICAgIHZp
cnR1YWwgdm9pZCBkdW1wKFRleHRTdHJlYW0gKnN0cmVhbSwgRGVwcmVjYXRlZFN0cmluZyBpbmQg
PSAiIikgY29uc3Q7Ci0jZW5kaWYKLQotICAgIHZvaWQgYWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwg
KmNlbGwsIFJlbmRlck9iamVjdCogcm93KTsKKyAgICB2b2lkIGFkZENlbGwoUmVuZGVyVGFibGVD
ZWxsKiwgUmVuZGVyT2JqZWN0KiByb3cpOwogCiAgICAgdm9pZCBzZXRDZWxsV2lkdGhzKCk7CiAg
ICAgdm9pZCBjYWxjUm93SGVpZ2h0KCk7CiAgICAgaW50IGxheW91dFJvd3MoaW50IGhlaWdodCk7
CiAKLSAgICBSZW5kZXJUYWJsZSAqdGFibGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxS
ZW5kZXJUYWJsZSAqPihwYXJlbnQoKSk7IH0KKyAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBhcmVudCgpKTsgfQogCiAgICAg
c3RydWN0IENlbGxTdHJ1Y3QgewotICAgICAgICBSZW5kZXJUYWJsZUNlbGwgKmNlbGw7CisgICAg
ICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbDsKICAgICAgICAgYm9vbCBpbkNvbFNwYW47IC8vIHRy
dWUgZm9yIGNvbHVtbnMgYWZ0ZXIgdGhlIGZpcnN0IGluIGEgY29sc3BhbgogICAgIH07CisKICAg
ICB0eXBlZGVmIFZlY3RvcjxDZWxsU3RydWN0PiBSb3c7CisKICAgICBzdHJ1Y3QgUm93U3RydWN0
IHsKICAgICAgICAgUm93KiByb3c7CiAgICAgICAgIFJlbmRlck9iamVjdCogcm93UmVuZGVyZXI7
CkBAIC03NiwxMiArNzQsMTEgQEAgcHVibGljOgogICAgICAgICBMZW5ndGggaGVpZ2h0OwogICAg
IH07CiAKLSAgICBDZWxsU3RydWN0JiBjZWxsQXQoaW50IHJvdywgIGludCBjb2wpIHsKLSAgICAg
ICAgcmV0dXJuICgqZ3JpZFtyb3ddLnJvdylbY29sXTsKLSAgICB9Ci0gICAgY29uc3QgQ2VsbFN0
cnVjdCYgY2VsbEF0KGludCByb3csIGludCBjb2wpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuICgq
Z3JpZFtyb3ddLnJvdylbY29sXTsKLSAgICB9CisgICAgQ2VsbFN0cnVjdCYgY2VsbEF0KGludCBy
b3csICBpbnQgY29sKSB7IHJldHVybiAoKm1fZ3JpZFtyb3ddLnJvdylbY29sXTsgfQorICAgIGNv
bnN0IENlbGxTdHJ1Y3QmIGNlbGxBdChpbnQgcm93LCBpbnQgY29sKSBjb25zdCB7IHJldHVybiAo
Km1fZ3JpZFtyb3ddLnJvdylbY29sXTsgfQorCisgICAgdm9pZCBhcHBlbmRDb2x1bW4oaW50IHBv
cyk7CisgICAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKGludCBwb3MsIGlu
dCBuZXdTaXplKTsKIAogICAgIHZpcnR1YWwgaW50IGxvd2VzdFBvc2l0aW9uKGJvb2wgaW5jbHVk
ZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IHJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wg
aW5jbHVkZVNlbGYpIGNvbnN0OwpAQCAtMTAwLDQwICs5Nyw1MSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCi0gICAgaW50
IG51bVJvd3MoKSBjb25zdCB7IHJldHVybiBncmlkUm93czsgfQorICAgIGludCBudW1Sb3dzKCkg
Y29uc3QgeyByZXR1cm4gbV9ncmlkUm93czsgfQogICAgIGludCBudW1Db2x1bW5zKCkgY29uc3Q7
Ci0gICAgaW50IGdldEJhc2VsaW5lKGludCByb3cpIHsgcmV0dXJuIGdyaWRbcm93XS5iYXNlTGlu
ZTsgfQorICAgIHZvaWQgcmVjYWxjQ2VsbHMoKTsKKyAgICB2b2lkIHJlY2FsY0NlbGxzSWZOZWVk
ZWQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbmVlZHNDZWxsUmVjYWxjKQorICAgICAgICAgICAg
cmVjYWxjQ2VsbHMoKTsKKyAgICB9CiAKLSAgICB2b2lkIHNldE5lZWRDZWxsUmVjYWxjKCkKKyAg
ICBib29sIG5lZWRzQ2VsbFJlY2FsYygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNDZWxsUmVjYWxj
OyB9CisgICAgdm9pZCBzZXROZWVkc0NlbGxSZWNhbGMoKQogICAgIHsKLSAgICAgICAgbmVlZENl
bGxSZWNhbGMgPSB0cnVlOwotICAgICAgICB0YWJsZSgpLT5zZXROZWVkU2VjdGlvblJlY2FsYygp
OworICAgICAgICBtX25lZWRzQ2VsbFJlY2FsYyA9IHRydWU7CisgICAgICAgIHRhYmxlKCktPnNl
dE5lZWRzU2VjdGlvblJlY2FsYygpOwogICAgIH0KIAotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCk7CisgICAgaW50IGdldEJhc2Vs
aW5lKGludCByb3cpIHsgcmV0dXJuIG1fZ3JpZFtyb3ddLmJhc2VMaW5lOyB9CiAKLSAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CisgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIHJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqKTsKIAotICAg
IC8vIHRoaXMgZ2V0cyBhIGNlbGwgZ3JpZCBkYXRhIHN0cnVjdHVyZS4gY2hhbmdpbmcgdGhlIG51
bWJlciBvZgotICAgIC8vIGNvbHVtbnMgaXMgZG9uZSBieSB0aGUgdGFibGUKLSAgICBWZWN0b3I8
Um93U3RydWN0PiBncmlkOwotICAgIGludCBncmlkUm93czsKLSAgICBWZWN0b3I8aW50PiByb3dQ
b3M7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rp
b24pOwogCi0gICAgLy8gdGhlIGN1cnJlbnQgaW5zZXJ0aW9uIHBvc2l0aW9uCi0gICAgaW50IGND
b2w7Ci0gICAgaW50IGNSb3c7Ci0gICAgYm9vbCBuZWVkQ2VsbFJlY2FsYzsKKyNpZm5kZWYgTkRF
QlVHCisgICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4dFN0cmVhbSosIERlcHJlY2F0ZWRTdHJpbmcg
aW5kID0gIiIpIGNvbnN0OworI2VuZGlmCiAKLSAgICB2b2lkIHJlY2FsY0NlbGxzKCk7CiBwcm90
ZWN0ZWQ6Ci0gICAgYm9vbCBlbnN1cmVSb3dzKGludCBudW1Sb3dzKTsKKyAgICBib29sIGVuc3Vy
ZVJvd3MoaW50KTsKICAgICB2b2lkIGNsZWFyR3JpZCgpOworCisgICAgVmVjdG9yPFJvd1N0cnVj
dD4gbV9ncmlkOworICAgIGludCBtX2dyaWRSb3dzOworICAgIFZlY3RvcjxpbnQ+IG1fcm93UG9z
OworCisgICAgLy8gdGhlIGN1cnJlbnQgaW5zZXJ0aW9uIHBvc2l0aW9uCisgICAgaW50IG1fY0Nv
bDsKKyAgICBpbnQgbV9jUm93OworICAgIGJvb2wgbV9uZWVkc0NlbGxSZWNhbGM7CisKICAgICBp
bnQgbV9vdXRlckJvcmRlckxlZnQ7CiAgICAgaW50IG1fb3V0ZXJCb3JkZXJSaWdodDsKICAgICBp
bnQgbV9vdXRlckJvcmRlclRvcDsKICAgICBpbnQgbV9vdXRlckJvcmRlckJvdHRvbTsKIH07CiAK
LX0KLSNlbmRpZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVuZGVyVGFi
bGVTZWN0aW9uX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaAkocmV2aXNpb24gMTg1NzQp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9UYWJsZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw3ICszNiw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgflRhYmxlTGF5b3V0KCkgeyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjYWxjTWluTWF4V2lkdGgoaW50JiBtaW5XaWR0aCwgaW50JiBtYXhXaWR0aCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7CiAKIHByb3RlY3RlZDoK
</data>
<flag name="review"
          id="4535"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12219</attachid>
            <date>2007-01-04 07:03:59 -0800</date>
            <delta_ts>2007-01-04 07:06:11 -0800</delta_ts>
            <desc>RenderTable* cleanup and reorg</desc>
            <filename>12078_r3.patch</filename>
            <type>text/plain</type>
            <size>124825</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODU3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcxIEBACisyMDA3LTAxLTA0ICBNaXR6IFBldHRlbCAgPG1pdHpAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDc4CisgICAgICAgICAgQ2xl
YW4gdXAgUmVuZGVyVGFibGUqCisKKyAgICAgICAgLSBDb2Rpbmcgc3R5bGUgY2xlYW51cC4KKyAg
ICAgICAgLSBDYW5jZWxlZCBBdXRvVGFibGVMYXlvdXQgYW5kIEZpeGVkVGFibGVMYXlvdXQgYmVp
bmcgZnJpZW5kIGNsYXNzZXMgb2YKKyAgICAgICAgICBSZW5kZXJUYWJsZS4gSW5zdGVhZCwgYWRk
ZWQgcHVibGljIGFjY2Vzc29ycyB0byBSZW5kZXJUYWJsZSBmb3Igd2hhdAorICAgICAgICAgIHRo
ZSB0YWJsZSBsYXlvdXQgY2xhc3NlcyBuZWVkIGFuZCBjaGFuZ2VkIFRhYmxlTGF5b3V0OjpjYWxj
TWluTWF4V2lkdGgoKQorICAgICAgICAgIHRvIHRha2UgcmVmZXJlbmNlcyB0byB0aGUgY2FsbGVy
J3MgbWluIGFuZCBtYXggd2lkdGhzLgorICAgICAgICAtIE1hZGUgUmVuZGVyVGFibGVTZWN0aW9u
J3MgZ3JpZCBwcm90ZWN0ZWQgYW5kIG1vdmVkIGNvZGUgdGhhdCBhY2Nlc3NlZCBpdAorICAgICAg
ICAgIGZyb20gUmVuZGVyVGFibGUgaW50byBSZW5kZXJUYWJsZVNlY3Rpb24uCisKKyAgICAgICAg
Tm8gdGVzdCBwb3NzaWJsZSAobm8gY2hhbmdlIHRvIGZ1bmN0aW9uYWxpdHkpLgorCisgICAgICAg
ICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRv
VGFibGVMYXlvdXQ6OmNhbGNNaW5NYXhXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpBdXRvVGFi
bGVMYXlvdXQ6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNhbGNNaW5NYXhXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9GaXhlZFRh
YmxlTGF5b3V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpSZW5kZXJUYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6flJlbmRlclRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNhbGNXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpzZXRDZWxsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2FsY01pbk1heFdpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzcGxpdENvbHVtbik6IEZhY3RvcmVkIG91dCB0aGUg
c2VjdGlvbiB3b3JrCisgICAgICAgIHRvIFJlbmRlclRhYmxlU2VjdGlvbjo6c3BsaXRDb2x1bW4o
KS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjphcHBlbmRDb2x1bW4pOiBGYWN0b3Jl
ZCBvdXQgdGhlIHNlY3Rpb24gd29yaworICAgICAgICB0byBSZW5kZXJUYWJsZVNlY3Rpb246OmFw
cGVuZENvbHVtbigpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNvbEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpyZW1vdmVDaGlsZE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGU6OmNhbGNCb3JkZXJMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRhYmxlOjpjYWxjQm9yZGVyUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGU6Om91dGVyQm9yZGVyVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpvdXRl
ckJvcmRlckJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6b3V0ZXJCb3Jk
ZXJMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpvdXRlckJvcmRlclJpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzZWN0aW9uQWJvdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNlY3Rpb25CZWxvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6Y2VsbEFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
OjpjZWxsQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNlbGxCZWZvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmdldE92ZXJmbG93Q2xpcFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmR1bXApOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmdldENvbHVt
blBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6aEJvcmRlclNwYWNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnZCb3JkZXJTcGFjaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjpnZXRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZTo6Y2VsbFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNl
dENlbGxQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpDb2x1bW5TdHJ1
Y3Q6OkNvbHVtblN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29sdW1u
cyk6IEFkZGVkIHRoaXMgYWNjZXNzb3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6
Y29sdW1uUG9zaXRpb25zKTogQWRkZWQgdGhpcyBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpoZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmZv
b3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Zmlyc3RCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpudW1FZmZDb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlOjpzcGFuT2ZFZmZDb2wpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGU6OmNvbFRvRWZmQ29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjplZmZDb2xU
b0NvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Ym9yZGVyc1BhZGRpbmdBbmRT
cGFjaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpuZWVkc1NlY3Rpb25SZWNh
bGMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnNldE5lZWRzU2VjdGlvblJlY2Fs
Yyk6IFJlbmFtZWQgc2V0TmVlZFNlY3Rpb25SZWNhbGMoKQorICAgICAgICB0byB0aGlzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Omhhc1NlY3Rpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlOjpyZWNhbGNTZWN0aW9uc0lmTmVlZGVkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q2VsbDo6UmVuZGVyVGFibGVDZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2Vs
bDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUZy
b21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c3R5bGVPckNv
bFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUFic29s
dXRlUmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjphYnNv
bHV0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6YmFzZWxp
bmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnNldFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkVG9wQm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGFwc2VkQm9y
ZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyOjpDb2xsYXBzZWRC
b3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyczo6Q29sbGFwc2VkQm9y
ZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb2xsYXBzZWRCb3JkZXJzOjphZGRCb3JkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyczo6bmV4dEJvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludEJveERlY29yYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6ZHVtcCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVDZWxsOjpjb2xTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2V0
Q29sU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnJvd1NwYW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpzZXRSb3dTcGFuKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlQ2VsbDo6c2V0Q29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6
cm93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2V0Um93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6c2VjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OnRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q2VsbDo6eVBvcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnNldENlbGxU
b3BFeHRyYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnNldENlbGxCb3R0
b21FeHRyYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJvcmRlclRvcEV4
dHJhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyQm90dG9tRXh0
cmEpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZVJvdzo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6
OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93OjpsYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OmdldEFic29sdXRlUmVwYWludFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OnBhaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Um93OjpzZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93Ojp0YWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6bGluZUhlaWdodCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OlJlbmRlclRhYmxlU2VjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZVNlY3Rpb246OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNl
Y3Rpb246OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6
ZW5zdXJlUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENl
bGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzZXRDZWxsV2lkdGhz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jvd0hlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpsb3dlc3RQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnJpZ2h0bW9zdFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGVmdG1vc3RQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclRvcCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckJv
dHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJv
cmRlckxlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0
ZXJCb3JkZXJSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cmVjYWxjQ2VsbHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjbGVhckdyaWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpudW1Db2x1bW5zKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6YXBwZW5kQ29sdW1uKTogQWRkZWQuIE1vdmVk
IGNvZGUgZnJvbQorICAgICAgICBSZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1uKCkgaW50byBoZXJl
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbik6IEFk
ZGVkLiBNb3ZlZCBjb2RlIGZyb20KKyAgICAgICAgUmVuZGVyVGFibGU6OnNwbGl0Q29sdW1uKCkg
aW50byBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpyZW1vdmVD
aGlsZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpkdW1wKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnJlbmRlck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjppc1RhYmxlU2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OmxpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjp0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rp
b246OmNlbGxBdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om51bVJv
d3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpyZWNhbGNDZWxsc0lm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bmVlZHNDZWxs
UmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6c2V0TmVlZHND
ZWxsUmVjYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Z2V0QmFz
ZWxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9UYWJsZUxheW91dC5oOgorCiAyMDA3LTAxLTA0
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbi4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkocmV2
aXNpb24gMTg1NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDQsMTYgKzI0NCwxMyBAQCBzdGF0aWMgYm9vbCBzaG91bGRTY2Fs
ZUNvbHVtbnMoUmVuZGVyVGFiCiAgICAgcmV0dXJuIHNjYWxlOwogfQogCi12b2lkIEF1dG9UYWJs
ZUxheW91dDo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjTWlu
TWF4V2lkdGgoaW50JiBtaW5XaWR0aCwgaW50JiBtYXhXaWR0aCkKIHsKLSNpZmRlZiBERUJVR19M
QVlPVVQKLSAgICBxRGVidWcoIkF1dG9UYWJsZUxheW91dDo6Y2FsY01pbk1heFdpZHRoIik7Ci0j
ZW5kaWYKICAgICBmdWxsUmVjYWxjKCk7CiAKICAgICBpbnQgc3Bhbk1heFdpZHRoID0gY2FsY0Vm
ZmVjdGl2ZVdpZHRoKCk7Ci0gICAgaW50IG1pbldpZHRoID0gMDsKLSAgICBpbnQgbWF4V2lkdGgg
PSAwOworICAgIG1pbldpZHRoID0gMDsKKyAgICBtYXhXaWR0aCA9IDA7CiAgICAgaW50IG1heFBl
cmNlbnQgPSAwOwogICAgIGludCBtYXhOb25QZXJjZW50ID0gMDsKIApAQCAtMjg5LDEyICsyODYs
NiBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6Y2FsY01pbk1heFdpZHRoKCkKICAgICAgICAgbWlu
V2lkdGggPSBtYXgobWluV2lkdGgsIHR3LnZhbHVlKCkpOwogICAgICAgICBtYXhXaWR0aCA9IG1p
bldpZHRoOwogICAgIH0KLQotICAgIG1fdGFibGUtPm1fbWF4V2lkdGggPSBtYXhXaWR0aDsKLSAg
ICBtX3RhYmxlLT5tX21pbldpZHRoID0gbWluV2lkdGg7Ci0jaWZkZWYgREVCVUdfTEFZT1VUCi0g
ICAgcURlYnVnKCIgICAgbWluV2lkdGg9JWQsIG1heFdpZHRoPSVkIiwgbV90YWJsZS0+bV9taW5X
aWR0aCwgbV90YWJsZS0+bV9tYXhXaWR0aCk7Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTgyOCwxMCAr
ODE5LDEwIEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpsYXlvdXQoKQogI2lmZGVmIERFQlVHX0xB
WU9VVAogICAgICAgICBxRGVidWcoImNvbCAlZDogJWQgKHdpZHRoICVkKSIsIGksIHBvcywgbV9s
YXlvdXRTdHJ1Y3RbaV0uY2FsY1dpZHRoKTsKICNlbmRpZgotICAgICAgICBtX3RhYmxlLT5jb2x1
bW5Qb3NbaV0gPSBwb3M7CisgICAgICAgIG1fdGFibGUtPmNvbHVtblBvc2l0aW9ucygpW2ldID0g
cG9zOwogICAgICAgICBwb3MgKz0gbV9sYXlvdXRTdHJ1Y3RbaV0uY2FsY1dpZHRoICsgbV90YWJs
ZS0+aEJvcmRlclNwYWNpbmcoKTsKICAgICB9Ci0gICAgbV90YWJsZS0+Y29sdW1uUG9zW21fdGFi
bGUtPmNvbHVtblBvcy5zaXplKCktMV0gPSBwb3M7CisgICAgbV90YWJsZS0+Y29sdW1uUG9zaXRp
b25zKClbbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKCkuc2l6ZSgpIC0gMV0gPSBwb3M7CiB9CiAK
IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHJldmlzaW9uIDE4NTc0KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDggKzM3LDggQEAgcHVibGljOgogICAgIEF1dG9UYWJsZUxheW91dChSZW5kZXJUYWJsZSop
OwogICAgIH5BdXRvVGFibGVMYXlvdXQoKTsKIAotICAgIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7
Ci0gICAgdm9pZCBsYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKGlu
dCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
IAogcHJvdGVjdGVkOgogICAgIHZvaWQgZnVsbFJlY2FsYygpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHJldmlzaW9uIDE4NTc0KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMSArMTAx
LDYgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGludAogICAgIG1fd2lk
dGgucmVzaXplKG5FZmZDb2xzKTsKICAgICBtX3dpZHRoLmZpbGwoTGVuZ3RoKEF1dG8pKTsKIAot
I2lmZGVmIERFQlVHX0xBWU9VVAotICAgIHFEZWJ1ZygiRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dp
ZHRoQXJyYXkoJWQpIiwgdGFibGVXaWR0aCk7Ci0gICAgcURlYnVnKCIgICAgY29sIGVsZW1lbnRz
OiIpOwotI2VuZGlmCi0KICAgICBMZW5ndGggZ3JwV2lkdGg7CiAgICAgd2hpbGUgKGNoaWxkKSB7
CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNvbCgpKSB7CkBAIC0xMjEsMTAgKzExNiw2IEBA
IGludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgICAgICAg
ICBpZiAody5pc0ZpeGVkKCkgJiYgdy52YWx1ZSgpID4gMCkKICAgICAgICAgICAgICAgICAgICAg
ZWZmV2lkdGggPSB3LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCi0jaWZkZWYgREVCVUdfTEFZ
T1VUCi0gICAgICAgICAgICAgICAgcURlYnVnKCIgICAgY29sIGVsZW1lbnQ6IGVmZkNvbD0lZCwg
c3Bhbj0lZDogJWQgdz0lZCB0eXBlPSVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgY0NvbCwg
c3BhbiwgZWZmV2lkdGgsICB3LnZhbHVlLCB3LnR5cGUoKSk7Ci0jZW5kaWYKICAgICAgICAgICAg
ICAgICBpbnQgdXNlZFNwYW4gPSAwOwogICAgICAgICAgICAgICAgIGludCBpID0gMDsKICAgICAg
ICAgICAgICAgICB3aGlsZSAodXNlZFNwYW4gPCBzcGFuKSB7CkBAIC0xMzgsMTAgKzEyOSw2IEBA
IGludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCh3LmlzRml4ZWQoKSB8fCB3LmlzUGVyY2VudCgpKSAmJiB3LmlzUG9zaXRpdmUo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV93aWR0aFtjQ29sK2ldLnNldFJhd1ZhbHVl
KHcudHlwZSgpLCB3LnJhd1ZhbHVlKCkgKiBlU3Bhbik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VkV2lkdGggKz0gZWZmV2lkdGggKiBlU3BhbjsKLSNpZmRlZiBERUJVR19MQVlPVVQKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHFEZWJ1ZygiICAgIHNldHRpbmcgZWZmQ29sICVkIChzcGFu
PSVkKSB0byBtX3dpZHRoICVkKHR5cGU9JWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjQ29sK2ksIGVTcGFuLCBtX3dpZHRoW2NDb2wraV0udmFsdWUsIG1fd2lkdGhbY0NvbCtp
XS50eXBlKCkpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgdXNlZFNwYW4gKz0gZVNwYW47CiAgICAgICAgICAgICAgICAgICAgIGkrKzsKQEAgLTE2
MSwxNSArMTQ4LDEyIEBAIGludCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQK
ICAgICAgICAgY2hpbGQgPSBuZXh0OwogICAgIH0KIAotI2lmZGVmIERFQlVHX0xBWU9VVAotICAg
IHFEZWJ1ZygiICAgIGZpcnN0IHJvdzoiKTsKLSNlbmRpZgogICAgIC8vIGl0ZXJhdGUgb3ZlciB0
aGUgZmlyc3Qgcm93IGluIGNhc2Ugc29tZSBhcmUgdW5zcGVjaWZpZWQuCi0gICAgUmVuZGVyVGFi
bGVTZWN0aW9uICpzZWN0aW9uID0gbV90YWJsZS0+aGVhZDsKKyAgICBSZW5kZXJUYWJsZVNlY3Rp
b24qIHNlY3Rpb24gPSBtX3RhYmxlLT5oZWFkZXIoKTsKICAgICBpZiAoIXNlY3Rpb24pCi0gICAg
ICAgIHNlY3Rpb24gPSBtX3RhYmxlLT5maXJzdEJvZHk7CisgICAgICAgIHNlY3Rpb24gPSBtX3Rh
YmxlLT5maXJzdEJvZHkoKTsKICAgICBpZiAoIXNlY3Rpb24pCi0gICAgICAgIHNlY3Rpb24gPSBt
X3RhYmxlLT5mb290OworICAgICAgICBzZWN0aW9uID0gbV90YWJsZS0+Zm9vdGVyKCk7CiAgICAg
aWYgKHNlY3Rpb24pIHsKICAgICAgICAgY0NvbCA9IDA7CiAgICAgICAgIC8vIEZJWE1FOiBUZWNo
bmljYWxseSB0aGUgZmlyc3Qgcm93IGNvdWxkIGJlIGluIGFuIGFyYml0cmFyeSBzZWN0aW9uIChl
LmcuLCBhbiBudGggc2VjdGlvbgpAQCAtMTg3LDkgKzE3MSw2IEBAIGludCBGaXhlZFRhYmxlTGF5
b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgICAgICAgICBpZiAoKHcuaXNGaXhlZCgp
IHx8IHcuaXNQZXJjZW50KCkpICYmIHcuaXNQb3NpdGl2ZSgpKQogICAgICAgICAgICAgICAgICAg
ICBlZmZXaWR0aCA9IHcuaXNQZXJjZW50KCkgPyB3LnJhd1ZhbHVlKCkgLyBwZXJjZW50U2NhbGVG
YWN0b3IgOiB3LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCi0jaWZkZWYgREVCVUdfTEFZT1VU
Ci0gICAgICAgICAgICAgICAgcURlYnVnKCIgICAgdGFibGUgY2VsbDogZWZmQ29sPSVkLCBzcGFu
PSVkOiAlZCIsICBjQ29sLCBzcGFuLCBlZmZXaWR0aCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAg
ICBpbnQgdXNlZFNwYW4gPSAwOwogICAgICAgICAgICAgICAgIGludCBpID0gMDsKICAgICAgICAg
ICAgICAgICB3aGlsZSAodXNlZFNwYW4gPCBzcGFuKSB7CkBAIC0xOTksMTYgKzE4MCw3IEBAIGlu
dCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fd2lkdGhbY0NvbCtpXS5pc0F1dG8oKSAmJiB3LnR5cGUoKSAhPSBBdXRvKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3dpZHRoW2NDb2wraV0uc2V0UmF3VmFsdWUody50eXBl
KCksIHcucmF3VmFsdWUoKSAqIGVTcGFuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRX
aWR0aCArPSBlZmZXaWR0aCplU3BhbjsKLSNpZmRlZiBERUJVR19MQVlPVVQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHFEZWJ1ZygiICAgIHNldHRpbmcgZWZmQ29sICVkIChzcGFuPSVkKSB0byBt
X3dpZHRoICVkKHR5cGU9JWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjQ29s
K2ksIGVTcGFuLCBtX3dpZHRoW2NDb2wraV0udmFsdWUsIG1fd2lkdGhbY0NvbCtpXS50eXBlKCkp
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBERUJVR19MQVlPVVQKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxRGVidWco
IiAgICBtX3dpZHRoIG9mIGNvbCAlZCBhbHJlYWR5IGRlZmluZWQgKHNwYW49JWQpIiwgY0NvbCwg
bV90YWJsZS0+c3Bhbk9mRWZmQ29sKGNDb2wpKTsKICAgICAgICAgICAgICAgICAgICAgfQotI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgICAgIHVzZWRTcGFuICs9IGVTcGFuOwogICAgICAgICAgICAg
ICAgICAgICBpKys7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjIyLDcgKzE5NCw3IEBAIGludCBG
aXhlZFRhYmxlTGF5b3V0OjpjYWxjV2lkdGhBcnJheShpbnQKIAogfQogCi12b2lkIEZpeGVkVGFi
bGVMYXlvdXQ6OmNhbGNNaW5NYXhXaWR0aCgpCit2b2lkIEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNN
aW5NYXhXaWR0aChpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRoKQogewogICAgIC8vIEZJWE1F
OiBUaGlzIGVudGlyZSBjYWxjdWxhdGlvbiBpcyBpbmNvcnJlY3QgZm9yIGJvdGggbWlud2lkdGgg
YW5kIG1heHdpZHRoLgogICAgIApAQCAtMjM4LDggKzIxMCw4IEBAIHZvaWQgRml4ZWRUYWJsZUxh
eW91dDo6Y2FsY01pbk1heFdpZHRoKCkKICAgICBpbnQgdGFibGVXaWR0aCA9IG1fdGFibGUtPnN0
eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpID8gbV90YWJsZS0+c3R5bGUoKS0+d2lkdGgoKS52YWx1
ZSgpIC0gYnMgOiAwOwogICAgIGludCBtdyA9IGNhbGNXaWR0aEFycmF5KHRhYmxlV2lkdGgpICsg
YnM7CiAKLSAgICBtX3RhYmxlLT5tX21pbldpZHRoID0gbWF4KG13LCB0YWJsZVdpZHRoKTsKLSAg
ICBtX3RhYmxlLT5tX21heFdpZHRoID0gbV90YWJsZS0+bV9taW5XaWR0aDsKKyAgICBtaW5XaWR0
aCA9IG1heChtdywgdGFibGVXaWR0aCk7CisgICAgbWF4V2lkdGggPSBtaW5XaWR0aDsKIH0KIAog
dm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlvdXQoKQpAQCAtMjQ4LDExICsyMjAsNiBAQCB2b2lk
IEZpeGVkVGFibGVMYXlvdXQ6OmxheW91dCgpCiAgICAgaW50IGF2YWlsYWJsZSA9IHRhYmxlV2lk
dGg7CiAgICAgaW50IG5FZmZDb2xzID0gbV90YWJsZS0+bnVtRWZmQ29scygpOwogICAgIGludCB0
b3RhbFBlcmNlbnQgPSAwOwotICAgIAotI2lmZGVmIERFQlVHX0xBWU9VVAotICAgIHFEZWJ1Zygi
Rml4ZWRUYWJsZUxheW91dDo6bGF5b3V0OiB0YWJsZVdpZHRoPSVkLCBudW1FZmZDb2xzPSVkIiwg
IHRhYmxlV2lkdGgsIG5FZmZDb2xzKTsKLSNlbmRpZgotCiAKICAgICBWZWN0b3I8aW50PiBjYWxj
V2lkdGgobkVmZkNvbHMsIC0xKTsKIApAQCAtMjY5LDkgKzIzNiw2IEBAIHZvaWQgRml4ZWRUYWJs
ZUxheW91dDo6bGF5b3V0KCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdG90YWxQZXJjZW50
ID0gMTAwICogcGVyY2VudFNjYWxlRmFjdG9yOwogCi0jaWZkZWYgREVCVUdfTEFZT1VUCi0gICAg
ICAgIHFEZWJ1ZygiRml4ZWRUYWJsZUxheW91dDo6bGF5b3V0OiBhc3NpZ25pbmcgcGVyY2VudCBt
X3dpZHRoLCBiYXNlPSVkLCB0b3RhbFBlcmNlbnQ9JWQiLCBiYXNlLCB0b3RhbFBlcmNlbnQpOwot
I2VuZGlmCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBhdmFpbGFibGUgPiAwICYmIGkgPCBuRWZm
Q29sczsgaSsrKSB7CiAgICAgICAgICAgICBpZiAobV93aWR0aFtpXS5pc1BlcmNlbnQoKSkgewog
ICAgICAgICAgICAgICAgIGludCB3ID0gYmFzZSAqIG1fd2lkdGhbaV0ucmF3VmFsdWUoKSAvIHRv
dGFsUGVyY2VudDsKQEAgLTMyNiwxMyArMjkwLDEwIEBAIHZvaWQgRml4ZWRUYWJsZUxheW91dDo6
bGF5b3V0KCkKICAgICBpbnQgcG9zID0gMDsKICAgICBpbnQgaHNwYWNpbmcgPSBtX3RhYmxlLT5o
Qm9yZGVyU3BhY2luZygpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkVmZkNvbHM7IGkrKykg
ewotI2lmZGVmIERFQlVHX0xBWU9VVAotICAgICAgICBxRGVidWcoImNvbCAlZDogJWQgKG1fd2lk
dGggJWQpIiwgaSwgcG9zLCBjYWxjV2lkdGhbaV0pOwotI2VuZGlmCi0gICAgICAgIG1fdGFibGUt
PmNvbHVtblBvc1tpXSA9IHBvczsKKyAgICAgICAgbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKClb
aV0gPSBwb3M7CiAgICAgICAgIHBvcyArPSBjYWxjV2lkdGhbaV0gKyBoc3BhY2luZzsKICAgICB9
Ci0gICAgbV90YWJsZS0+Y29sdW1uUG9zW21fdGFibGUtPmNvbHVtblBvcy5zaXplKCktMV0gPSBw
b3M7CisgICAgbV90YWJsZS0+Y29sdW1uUG9zaXRpb25zKClbbV90YWJsZS0+Y29sdW1uUG9zaXRp
b25zKCkuc2l6ZSgpLTFdID0gcG9zOwogfQogCiAjdW5kZWYgREVCVUdfTEFZT1VUCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCShyZXZpc2lvbiAxODU3NCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCAr
MzYsOCBAQCBwdWJsaWM6CiAgICAgRml4ZWRUYWJsZUxheW91dChSZW5kZXJUYWJsZSopOwogICAg
IH5GaXhlZFRhYmxlTGF5b3V0KCk7CiAKLSAgICB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwotICAg
IHZvaWQgbGF5b3V0KCk7CisgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aChpbnQmIG1p
bldpZHRoLCBpbnQmIG1heFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKIHBy
b3RlY3RlZDoKICAgICBpbnQgY2FsY1dpZHRoQXJyYXkoaW50IHRhYmxlV2lkdGgpOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMTg1NzQpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMywxMCBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRml4ZWRUYWJsZUxheW91dC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgogI2luY2x1
ZGUgIlJlbmRlclRhYmxlU2VjdGlvbi5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAtNDYsNTUgKzQ2LDUwIEBAIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKIFJlbmRlclRhYmxlOjpSZW5kZXJUYWJsZShOb2RlKiBub2RlKQogICAgIDog
UmVuZGVyQmxvY2sobm9kZSkKKyAgICAsIG1fY2FwdGlvbigwKQorICAgICwgbV9oZWFkKDApCisg
ICAgLCBtX2Zvb3QoMCkKKyAgICAsIG1fZmlyc3RCb2R5KDApCisgICAgLCBtX3RhYmxlTGF5b3V0
KDApCisgICAgLCBtX2N1cnJlbnRCb3JkZXIoMCkKKyAgICAsIG1fZnJhbWUoVm9pZCkKKyAgICAs
IG1fcnVsZXMoTm9uZSkKKyAgICAsIG1faGFzQ29sRWxlbWVudHMoZmFsc2UpCisgICAgLCBtX3Bh
ZGRpbmcoMCkKKyAgICAsIG1fbmVlZHNTZWN0aW9uUmVjYWxjKDApCisgICAgLCBtX2hTcGFjaW5n
KDApCisgICAgLCBtX3ZTcGFjaW5nKDApCisgICAgLCBtX2JvcmRlckxlZnQoMCkKKyAgICAsIG1f
Ym9yZGVyUmlnaHQoMCkKIHsKLSAgICB0Q2FwdGlvbiA9IDA7Ci0gICAgaGVhZCA9IGZvb3QgPSBm
aXJzdEJvZHkgPSAwOwotICAgIHRhYmxlTGF5b3V0ID0gMDsKLSAgICBtX2N1cnJlbnRCb3JkZXIg
PSAwOwotICAgIAotICAgIHJ1bGVzID0gTm9uZTsKLSAgICBmcmFtZSA9IFZvaWQ7Ci0gICAgaGFz
X2NvbF9lbGVtcyA9IGZhbHNlOwotICAgIGhzcGFjaW5nID0gMDsKLSAgICB2c3BhY2luZyA9IDA7
Ci0gICAgcGFkZGluZyA9IDA7Ci0gICAgbmVlZFNlY3Rpb25SZWNhbGMgPSBmYWxzZTsKLSAgICBw
YWRkaW5nID0gMDsKLSAgICBtX2JvcmRlckxlZnQgPSAwOwotICAgIG1fYm9yZGVyUmlnaHQgPSAw
OwotCi0gICAgY29sdW1uUG9zLnJlc2l6ZSgyKTsKLSAgICBjb2x1bW5Qb3MuZmlsbCgwKTsKLSAg
ICBjb2x1bW5zLnJlc2l6ZSgxKTsKLSAgICBjb2x1bW5zLmZpbGwoQ29sdW1uU3RydWN0KCkpOwot
Ci0gICAgY29sdW1uUG9zWzBdID0gMDsKKyAgICBtX2NvbHVtblBvcy5maWxsKDAsIDIpOworICAg
IG1fY29sdW1ucy5maWxsKENvbHVtblN0cnVjdCgpLCAxKTsKIH0KIAogUmVuZGVyVGFibGU6On5S
ZW5kZXJUYWJsZSgpCiB7Ci0gICAgZGVsZXRlIHRhYmxlTGF5b3V0OworICAgIGRlbGV0ZSBtX3Rh
YmxlTGF5b3V0OwogfQogCi12b2lkIFJlbmRlclRhYmxlOjpzZXRTdHlsZShSZW5kZXJTdHlsZSAq
X3N0eWxlKQordm9pZCBSZW5kZXJUYWJsZTo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxl
KQogewogICAgIEVUYWJsZUxheW91dCBvbGRUYWJsZUxheW91dCA9IHN0eWxlKCkgPyBzdHlsZSgp
LT50YWJsZUxheW91dCgpIDogVEFVVE87Ci0gICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKF9zdHls
ZSk7CisgICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKG5ld1N0eWxlKTsKIAogICAgIC8vIEluIHRo
ZSBjb2xsYXBzZWQgYm9yZGVyIG1vZGVsLCB0aGVyZSBpcyBubyBjZWxsIHNwYWNpbmcuCi0gICAg
aHNwYWNpbmcgPSBjb2xsYXBzZUJvcmRlcnMoKSA/IDAgOiBzdHlsZSgpLT5ob3Jpem9udGFsQm9y
ZGVyU3BhY2luZygpOwotICAgIHZzcGFjaW5nID0gY29sbGFwc2VCb3JkZXJzKCkgPyAwIDogc3R5
bGUoKS0+dmVydGljYWxCb3JkZXJTcGFjaW5nKCk7Ci0gICAgY29sdW1uUG9zWzBdID0gaHNwYWNp
bmc7CisgICAgbV9oU3BhY2luZyA9IGNvbGxhcHNlQm9yZGVycygpID8gMCA6IHN0eWxlKCktPmhv
cml6b250YWxCb3JkZXJTcGFjaW5nKCk7CisgICAgbV92U3BhY2luZyA9IGNvbGxhcHNlQm9yZGVy
cygpID8gMCA6IHN0eWxlKCktPnZlcnRpY2FsQm9yZGVyU3BhY2luZygpOworICAgIG1fY29sdW1u
UG9zWzBdID0gbV9oU3BhY2luZzsKIAotICAgIGlmICghdGFibGVMYXlvdXQgfHwgc3R5bGUoKS0+
dGFibGVMYXlvdXQoKSAhPSBvbGRUYWJsZUxheW91dCkgewotICAgICAgICBkZWxldGUgdGFibGVM
YXlvdXQ7CisgICAgaWYgKCFtX3RhYmxlTGF5b3V0IHx8IHN0eWxlKCktPnRhYmxlTGF5b3V0KCkg
IT0gb2xkVGFibGVMYXlvdXQpIHsKKyAgICAgICAgZGVsZXRlIG1fdGFibGVMYXlvdXQ7CiAKICAg
ICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBDU1MyIHNwZWMsIHlvdSBvbmx5IHVzZSBmaXhlZCB0
YWJsZSBsYXlvdXQgaWYgYW4KICAgICAgICAgLy8gZXhwbGljaXQgd2lkdGggaXMgc3BlY2lmaWVk
IG9uIHRoZSB0YWJsZS4gIEF1dG8gd2lkdGggaW1wbGllcyBhdXRvIHRhYmxlIGxheW91dC4KICAg
ICAgICAgaWYgKHN0eWxlKCktPnRhYmxlTGF5b3V0KCkgPT0gVEZJWEVEICYmICFzdHlsZSgpLT53
aWR0aCgpLmlzQXV0bygpKQotICAgICAgICAgICAgdGFibGVMYXlvdXQgPSBuZXcgRml4ZWRUYWJs
ZUxheW91dCh0aGlzKTsKKyAgICAgICAgICAgIG1fdGFibGVMYXlvdXQgPSBuZXcgRml4ZWRUYWJs
ZUxheW91dCh0aGlzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGFibGVMYXlvdXQgPSBu
ZXcgQXV0b1RhYmxlTGF5b3V0KHRoaXMpOworICAgICAgICAgICAgbV90YWJsZUxheW91dCA9IG5l
dyBBdXRvVGFibGVMYXlvdXQodGhpcyk7CiAgICAgfQogfQogCkBAIC0xMDYsMzYgKzEwMSwzNiBA
QCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QqCiAgICAgc3dpdGNoIChj
aGlsZC0+c3R5bGUoKS0+ZGlzcGxheSgpKSB7CiAgICAgICAgIGNhc2UgVEFCTEVfQ0FQVElPTjoK
ICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICAgICAgICAg
IHRDYXB0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sgKj4oY2hpbGQpOworICAgICAgICAg
ICAgICAgIG1fY2FwdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY2hpbGQpOwogICAg
ICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgVEFCTEVfQ09MVU1OOgogICAgICAgICBjYXNlIFRBQkxFX0NPTFVN
Tl9HUk9VUDoKLSAgICAgICAgICAgIGhhc19jb2xfZWxlbXMgPSB0cnVlOworICAgICAgICAgICAg
bV9oYXNDb2xFbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICB3cmFwSW5Bbm9ueW1vdXNTZWN0
aW9uID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUQUJMRV9IRUFE
RVJfR1JPVVA6Ci0gICAgICAgICAgICBpZiAoIWhlYWQpIHsKKyAgICAgICAgICAgIGlmICghbV9o
ZWFkKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQotICAg
ICAgICAgICAgICAgICAgICBoZWFkID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+
KGNoaWxkKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpcnN0Qm9keSkgeworICAgICAgICAg
ICAgICAgICAgICBtX2hlYWQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGls
ZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX2ZpcnN0Qm9keSkgewogICAgICAgICAgICAg
ICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgZmly
c3RCb2R5ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+KGNoaWxkKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rp
b24qPihjaGlsZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3cmFwSW5Bbm9ueW1vdXNT
ZWN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUQUJMRV9G
T09URVJfR1JPVVA6Ci0gICAgICAgICAgICBpZiAoIWZvb3QpIHsKKyAgICAgICAgICAgIGlmICgh
bV9mb290KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQot
ICAgICAgICAgICAgICAgICAgICBmb290ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9u
ICo+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgbV9mb290ID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpOwogICAgICAgICAgICAgICAgIHdyYXBJbkFub255bW91
c1NlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAogICAgICAgICBjYXNlIFRBQkxFX1JPV19HUk9V
UDoKLSAgICAgICAgICAgIGlmICghZmlyc3RCb2R5KQorICAgICAgICAgICAgaWYgKCFtX2ZpcnN0
Qm9keSkKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGZpcnN0Qm9keSA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlv
biAqPihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpOwogICAgICAgICAgICAgd3JhcEluQW5vbnlt
b3VzU2VjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVEFC
TEVfQ0VMTDoKQEAgLTE2Myw4ICsxNTgsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChS
ZW5kZXJPYmplY3QqCiAgICAgICAgIH0KIAogICAgIGlmICghd3JhcEluQW5vbnltb3VzU2VjdGlv
bikgewotICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIG5leHQgcmVuZGVyZXIgaXMgYWN0dWFs
bHkgd3JhcHBlZCBpbiBhbiBhbm9ueW1vdXMgdGFibGUgc2VjdGlvbiwgd2UgbmVlZCB0byBnbyB1
cCBhbmQgZmluZCB0aGF0CisgICAgICAgIC8vIElmIHRoZSBuZXh0IHJlbmRlcmVyIGlzIGFjdHVh
bGx5IHdyYXBwZWQgaW4gYW4gYW5vbnltb3VzIHRhYmxlIHNlY3Rpb24sIHdlIG5lZWQgdG8gZ28g
dXAgYW5kIGZpbmQgdGhhdC4KICAgICAgICAgd2hpbGUgKGJlZm9yZUNoaWxkICYmICFiZWZvcmVD
aGlsZC0+aXNUYWJsZVNlY3Rpb24oKSAmJiAhYmVmb3JlQ2hpbGQtPmlzVGFibGVDb2woKSkKICAg
ICAgICAgICAgIGJlZm9yZUNoaWxkID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOwogCkBAIC0xNzcs
MTAgKzE3MSw5IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCoKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlbmRlck9iamVjdCAqbGFzdEJveCA9IGJlZm9y
ZUNoaWxkOwotICAgIFJlbmRlck9iamVjdCAqbmV4dFRvTGFzdEJveCA9IGJlZm9yZUNoaWxkOwot
ICAgIHdoaWxlIChsYXN0Qm94ICYmIGxhc3RCb3gtPnBhcmVudCgpLT5pc0Fub255bW91cygpICYm
Ci0gICAgICAgICAgICAhbGFzdEJveC0+aXNUYWJsZVNlY3Rpb24oKSAmJiBsYXN0Qm94LT5zdHls
ZSgpLT5kaXNwbGF5KCkgIT0gVEFCTEVfQ0FQVElPTikgeworICAgIFJlbmRlck9iamVjdCogbGFz
dEJveCA9IGJlZm9yZUNoaWxkOworICAgIFJlbmRlck9iamVjdCogbmV4dFRvTGFzdEJveCA9IGJl
Zm9yZUNoaWxkOworICAgIHdoaWxlIChsYXN0Qm94ICYmIGxhc3RCb3gtPnBhcmVudCgpLT5pc0Fu
b255bW91cygpICYmICFsYXN0Qm94LT5pc1RhYmxlU2VjdGlvbigpICYmIGxhc3RCb3gtPnN0eWxl
KCktPmRpc3BsYXkoKSAhPSBUQUJMRV9DQVBUSU9OKSB7CiAgICAgICAgIG5leHRUb0xhc3RCb3gg
PSBsYXN0Qm94OwogICAgICAgICBsYXN0Qm94ID0gbGFzdEJveC0+cGFyZW50KCk7CiAgICAgfQpA
QCAtMjA1LDcgKzE5OCw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNhbGNXaWR0aCgpCiAgICAgaWYg
KGlzUG9zaXRpb25lZCgpKQogICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCk7CiAKLSAg
ICBSZW5kZXJCbG9jayAqY2IgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICBSZW5kZXJCbG9jayog
Y2IgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBjYi0+Y29u
dGVudFdpZHRoKCk7CiAKICAgICBMZW5ndGhUeXBlIHdpZHRoVHlwZSA9IHN0eWxlKCktPndpZHRo
KCkudHlwZSgpOwpAQCAtMjM4LDUzICsyMzEsNTUgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY1dp
ZHRoKCkKICAgICAvLyBGaW5hbGx5LCB3aXRoIG91ciB0cnVlIHdpZHRoIGRldGVybWluZWQsIGNv
bXB1dGUgb3VyIG1hcmdpbnMgZm9yIHJlYWwuCiAgICAgbV9tYXJnaW5SaWdodCA9IDA7CiAgICAg
bV9tYXJnaW5MZWZ0ID0gMDsKLSAgICBjYWxjSG9yaXpvbnRhbE1hcmdpbnMoc3R5bGUoKS0+bWFy
Z2luTGVmdCgpLHN0eWxlKCktPm1hcmdpblJpZ2h0KCksYXZhaWxhYmxlV2lkdGgpOworICAgIGNh
bGNIb3Jpem9udGFsTWFyZ2lucyhzdHlsZSgpLT5tYXJnaW5MZWZ0KCksIHN0eWxlKCktPm1hcmdp
blJpZ2h0KCksIGF2YWlsYWJsZVdpZHRoKTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0
KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAgICAgQVNTRVJUKG1pbk1heEtub3du
KCkpOwotICAgIEFTU0VSVCghbmVlZFNlY3Rpb25SZWNhbGMpOworICAgIEFTU0VSVCghbV9uZWVk
c1NlY3Rpb25SZWNhbGMpOwogCiAgICAgaWYgKHBvc0NoaWxkTmVlZHNMYXlvdXQoKSAmJiAhbm9y
bWFsQ2hpbGROZWVkc0xheW91dCgpICYmICFzZWxmTmVlZHNMYXlvdXQoKSkgewotICAgICAgICAv
LyBBbGwgd2UgaGF2ZSB0byBpcyBsYXkgb3V0IG91ciBwb3NpdGlvbmVkIG9iamVjdHMuCisgICAg
ICAgIC8vIEFsbCB3ZSBoYXZlIHRvIGRvIGlzIGxheSBvdXQgb3VyIHBvc2l0aW9uZWQgb2JqZWN0
cy4KICAgICAgICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMoZmFsc2UpOwogICAgICAgICBzZXRO
ZWVkc0xheW91dChmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBJbnRSZWN0
IG9sZEJvdW5kcywgb2xkRnVsbEJvdW5kczsKKyAgICBJbnRSZWN0IG9sZEJvdW5kczsKKyAgICBJ
bnRSZWN0IG9sZEZ1bGxCb3VuZHM7CiAgICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0Zv
clJlcGFpbnREdXJpbmdMYXlvdXQoKTsKICAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQogICAgICAg
ICBnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0SW5jbHVkaW5nRmxvYXRzKG9sZEJvdW5kcywgb2xkRnVs
bEJvdW5kcyk7CiAgICAgCi0gICAgbV9oZWlnaHQgPSBtX292ZXJmbG93SGVpZ2h0ID0gMDsKKyAg
ICBtX2hlaWdodCA9IDA7CisgICAgbV9vdmVyZmxvd0hlaWdodCA9IDA7CiAgICAgaW5pdE1heE1h
cmdpblZhbHVlcygpOwogICAgIAogICAgIC8vaW50IG9sZFdpZHRoID0gbV93aWR0aDsKICAgICBj
YWxjV2lkdGgoKTsKIAotICAgIC8vIHRoZSBvcHRpbWlzYXRpb24gYmVsb3cgZG9lc24ndCB3b3Jr
IHNpbmNlIHRoZSBpbnRlcm5hbCB0YWJsZQorICAgIC8vIEZJWE1FOiBUaGUgb3B0aW1pc2F0aW9u
IGJlbG93IGRvZXNuJ3Qgd29yayBzaW5jZSB0aGUgaW50ZXJuYWwgdGFibGUKICAgICAvLyBsYXlv
dXQgY291bGQgaGF2ZSBjaGFuZ2VkLiAgd2UgbmVlZCB0byBhZGQgYSBmbGFnIHRvIHRoZSB0YWJs
ZQogICAgIC8vIGxheW91dCB0aGF0IHRlbGxzIHVzIGlmIHNvbWV0aGluZyBoYXMgY2hhbmdlZCBp
biB0aGUgbWluIG1heAogICAgIC8vIGNhbGN1bGF0aW9ucyB0byBkbyBpdCBjb3JyZWN0bHkuCiAv
LyAgICAgaWYgKCBvbGRXaWR0aCAhPSBtX3dpZHRoIHx8IGNvbHVtbnMuc2l6ZSgpICsgMSAhPSBj
b2x1bW5Qb3Muc2l6ZSgpICkKLSAgICB0YWJsZUxheW91dC0+bGF5b3V0KCk7CisgICAgbV90YWJs
ZUxheW91dC0+bGF5b3V0KCk7CiAKICAgICBzZXRDZWxsV2lkdGhzKCk7CiAKICAgICAvLyBsYXlv
dXQgY2hpbGQgb2JqZWN0cwogICAgIGludCBjYWxjdWxhdGVkSGVpZ2h0ID0gMDsKIAotICAgIFJl
bmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgLy8gRklYTUU6
IFdoYXQgYWJvdXQgYSBmb3JtIHRoYXQgaGFzIGEgZGlzcGxheSB2YWx1ZSB0aGF0IG1ha2VzIGl0
IGEgdGFibGUgc2VjdGlvbj8KICAgICAgICAgaWYgKGNoaWxkLT5uZWVkc0xheW91dCgpICYmICEo
Y2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKGZvcm1UYWcp
KSkKICAgICAgICAgICAgIGNoaWxkLT5sYXlvdXQoKTsKICAgICAgICAgaWYgKGNoaWxkLT5pc1Rh
YmxlU2VjdGlvbigpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rp
b24gKj4oY2hpbGQpLT5jYWxjUm93SGVpZ2h0KCk7Ci0gICAgICAgICAgICBjYWxjdWxhdGVkSGVp
Z2h0ICs9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGlsZCktPmxheW91dFJv
d3MoMCk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGls
ZCktPmNhbGNSb3dIZWlnaHQoKTsKKyAgICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgKz0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpLT5sYXlvdXRSb3dzKDApOwogICAg
ICAgICB9CiAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgfQpAQCAt
MjkyLDEwICsyODcsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICBtX292ZXJm
bG93V2lkdGggPSBtX3dpZHRoICsgKGNvbGxhcHNlQm9yZGVycygpID8gb3V0ZXJCb3JkZXJSaWdo
dCgpIC0gYm9yZGVyUmlnaHQoKSA6IDApOwogICAgIG1fb3ZlcmZsb3dMZWZ0ID0gY29sbGFwc2VC
b3JkZXJzKCkgPyBib3JkZXJMZWZ0KCkgLSBvdXRlckJvcmRlckxlZnQoKSA6IDA7CiAKLSAgICAv
LyAjIyMgY29sbGFwc2UgY2FwdGlvbiBtYXJnaW4KLSAgICBpZiAodENhcHRpb24gJiYgdENhcHRp
b24tPnN0eWxlKCktPmNhcHRpb25TaWRlKCkgIT0gQ0FQQk9UVE9NKSB7Ci0gICAgICAgIHRDYXB0
aW9uLT5zZXRQb3ModENhcHRpb24tPm1hcmdpbkxlZnQoKSwgbV9oZWlnaHQpOwotICAgICAgICBt
X2hlaWdodCArPSB0Q2FwdGlvbi0+aGVpZ2h0KCkgKyB0Q2FwdGlvbi0+bWFyZ2luVG9wKCkgKyB0
Q2FwdGlvbi0+bWFyZ2luQm90dG9tKCk7CisgICAgLy8gRklYTUU6IENvbGxhcHNlIGNhcHRpb24g
bWFyZ2luLgorICAgIGlmIChtX2NhcHRpb24gJiYgbV9jYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9u
U2lkZSgpICE9IENBUEJPVFRPTSkgeworICAgICAgICBtX2NhcHRpb24tPnNldFBvcyhtX2NhcHRp
b24tPm1hcmdpbkxlZnQoKSwgbV9oZWlnaHQpOworICAgICAgICBtX2hlaWdodCArPSBtX2NhcHRp
b24tPmhlaWdodCgpICsgbV9jYXB0aW9uLT5tYXJnaW5Ub3AoKSArIG1fY2FwdGlvbi0+bWFyZ2lu
Qm90dG9tKCk7CiAgICAgfQogCiAgICAgaW50IGJwVG9wID0gYm9yZGVyVG9wKCkgKyAoY29sbGFw
c2VCb3JkZXJzKCkgPyAwIDogcGFkZGluZ1RvcCgpKTsKQEAgLTMyMSwxMSArMzE2LDExIEBAIHZv
aWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgaWYgKHRoID4gY2FsY3VsYXRlZEhlaWdodCkg
ewogICAgICAgICAvLyB3ZSBoYXZlIHRvIHJlZGlzdHJpYnV0ZSB0aGF0IGhlaWdodCB0byBnZXQg
dGhlIGNvbnN0cmFpbnQgY29ycmVjdGx5CiAgICAgICAgIC8vIGp1c3QgZm9yY2UgdGhlIGZpcnN0
IGJvZHkgdG8gdGhlIGhlaWdodCBuZWVkZWQKLSAgICAgICAgLy8gIyMjIEZJWE1FIFRoaXMgc2hv
dWxkIHRha2UgaGVpZ2h0IGNvbnN0cmFpbnRzIG9uIGFsbCB0YWJsZSBzZWN0aW9ucyBpbnRvIGFj
Y291bnQgYW5kIGRpc3RyaWJ1dGUKLSAgICAgICAgLy8gYWNjb3JkaW5nbHkuIEZvciBub3cgdGhp
cyBzaG91bGQgYmUgZ29vZCBlbm91Z2gKLSAgICAgICAgaWYgKGZpcnN0Qm9keSkgewotICAgICAg
ICAgICAgZmlyc3RCb2R5LT5jYWxjUm93SGVpZ2h0KCk7Ci0gICAgICAgICAgICBmaXJzdEJvZHkt
PmxheW91dFJvd3ModGggLSBjYWxjdWxhdGVkSGVpZ2h0KTsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHRha2UgaGVpZ2h0IGNvbnN0cmFpbnRzIG9uIGFsbCB0YWJsZSBzZWN0aW9ucyBp
bnRvIGFjY291bnQgYW5kIGRpc3RyaWJ1dGUKKyAgICAgICAgLy8gYWNjb3JkaW5nbHkuIEZvciBu
b3cgdGhpcyBzaG91bGQgYmUgZ29vZCBlbm91Z2guCisgICAgICAgIGlmIChtX2ZpcnN0Qm9keSkg
eworICAgICAgICAgICAgbV9maXJzdEJvZHktPmNhbGNSb3dIZWlnaHQoKTsKKyAgICAgICAgICAg
IG1fZmlyc3RCb2R5LT5sYXlvdXRSb3dzKHRoIC0gY2FsY3VsYXRlZEhlaWdodCk7CiAgICAgICAg
IH0gZWxzZSBpZiAoIXN0eWxlKCktPmh0bWxIYWNrcygpKQogICAgICAgICAgICAgLy8gQ29tcGxl
dGVseSBlbXB0eSB0YWJsZXMgKHdpdGggbm8gc2VjdGlvbnMgb3IgYW55dGhpbmcpIHNob3VsZCBh
dCBsZWFzdCBob25vciBzcGVjaWZpZWQgaGVpZ2h0CiAgICAgICAgICAgICAvLyBpbiBzdHJpY3Qg
bW9kZS4KQEAgLTMzNywzMyArMzMyLDMzIEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAg
ICAgICAgIGJsICs9IHBhZGRpbmdMZWZ0KCk7CiAKICAgICAvLyBwb3NpdGlvbiB0aGUgdGFibGUg
c2VjdGlvbnMKLSAgICBpZiAoaGVhZCkgewotICAgICAgICBoZWFkLT5zZXRQb3MoYmwsIG1faGVp
Z2h0KTsKLSAgICAgICAgbV9oZWlnaHQgKz0gaGVhZC0+aGVpZ2h0KCk7CisgICAgaWYgKG1faGVh
ZCkgeworICAgICAgICBtX2hlYWQtPnNldFBvcyhibCwgbV9oZWlnaHQpOworICAgICAgICBtX2hl
aWdodCArPSBtX2hlYWQtPmhlaWdodCgpOwogICAgIH0KLSAgICBmb3IgKFJlbmRlck9iamVjdCAq
Ym9keSA9IGZpcnN0Qm9keTsgYm9keTsgYm9keSA9IGJvZHktPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgaWYgKGJvZHkgIT0gaGVhZCAmJiBib2R5ICE9IGZvb3QgJiYgYm9keS0+aXNUYWJsZVNl
Y3Rpb24oKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBib2R5ID0gbV9maXJzdEJvZHk7IGJv
ZHk7IGJvZHkgPSBib2R5LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChib2R5ICE9IG1f
aGVhZCAmJiBib2R5ICE9IG1fZm9vdCAmJiBib2R5LT5pc1RhYmxlU2VjdGlvbigpKSB7CiAgICAg
ICAgICAgICBib2R5LT5zZXRQb3MoYmwsIG1faGVpZ2h0KTsKICAgICAgICAgICAgIG1faGVpZ2h0
ICs9IGJvZHktPmhlaWdodCgpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChmb290KSB7Ci0g
ICAgICAgIGZvb3QtPnNldFBvcyhibCwgbV9oZWlnaHQpOwotICAgICAgICBtX2hlaWdodCArPSBm
b290LT5oZWlnaHQoKTsKKyAgICBpZiAobV9mb290KSB7CisgICAgICAgIG1fZm9vdC0+c2V0UG9z
KGJsLCBtX2hlaWdodCk7CisgICAgICAgIG1faGVpZ2h0ICs9IG1fZm9vdC0+aGVpZ2h0KCk7CiAg
ICAgfQogCiAgICAgbV9oZWlnaHQgKz0gYnBCb3R0b207CiAgICAgICAgICAgICAgICAKLSAgICBp
ZiAodENhcHRpb24gJiYgdENhcHRpb24tPnN0eWxlKCktPmNhcHRpb25TaWRlKCk9PUNBUEJPVFRP
TSkgewotICAgICAgICB0Q2FwdGlvbi0+c2V0UG9zKHRDYXB0aW9uLT5tYXJnaW5MZWZ0KCksIG1f
aGVpZ2h0KTsKLSAgICAgICAgbV9oZWlnaHQgKz0gdENhcHRpb24tPmhlaWdodCgpICsgdENhcHRp
b24tPm1hcmdpblRvcCgpICsgdENhcHRpb24tPm1hcmdpbkJvdHRvbSgpOworICAgIGlmIChtX2Nh
cHRpb24gJiYgbV9jYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9uU2lkZSgpID09IENBUEJPVFRPTSkg
eworICAgICAgICBtX2NhcHRpb24tPnNldFBvcyhtX2NhcHRpb24tPm1hcmdpbkxlZnQoKSwgbV9o
ZWlnaHQpOworICAgICAgICBtX2hlaWdodCArPSBtX2NhcHRpb24tPmhlaWdodCgpICsgbV9jYXB0
aW9uLT5tYXJnaW5Ub3AoKSArIG1fY2FwdGlvbi0+bWFyZ2luQm90dG9tKCk7CiAgICAgfQogCiAg
ICAgaWYgKGlzUG9zaXRpb25lZCgpKQogICAgICAgICBjYWxjSGVpZ2h0KCk7CiAKICAgICAvLyB0
YWJsZSBjYW4gYmUgY29udGFpbmluZyBibG9jayBvZiBwb3NpdGlvbmVkIGVsZW1lbnRzLgotICAg
IC8vICMjIyBvbmx5IHBhc3MgdHJ1ZSBpZiB3aWR0aCBvciBoZWlnaHQgY2hhbmdlZC4KKyAgICAv
LyBGSVhNRTogT25seSBwYXNzIHRydWUgaWYgd2lkdGggb3IgaGVpZ2h0IGNoYW5nZWQuCiAgICAg
bGF5b3V0UG9zaXRpb25lZE9iamVjdHModHJ1ZSk7CiAKICAgICAvLyBSZXBhaW50IHdpdGggb3Vy
IG5ldyBib3VuZHMgaWYgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gb3VyIG9sZCBib3VuZHMuCkBA
IC0zNzUsOSArMzcwLDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAKIHZvaWQgUmVu
ZGVyVGFibGU6OnNldENlbGxXaWR0aHMoKQogewotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGlmICggY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgKQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+KGNoaWxkKS0+c2V0Q2VsbFdpZHRocygpOworICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlv
bigpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQp
LT5zZXRDZWxsV2lkdGhzKCk7CisgICAgfQogfQogCiB2b2lkIFJlbmRlclRhYmxlOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCkBAIC0zOTMsOCArMzg5LDcgQEAg
dm9pZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgIGlmICh0eCA+PSBw
YWludEluZm8ucmVjdC5yaWdodCgpICsgb3MgfHwgdHggKyB3aWR0aCgpIDw9IHBhaW50SW5mby5y
ZWN0LngoKSAtIG9zKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoKHBhaW50UGhhc2UgPT0g
UGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludFBoYXNlID09IFBhaW50UGhhc2VDaGls
ZEJsb2NrQmFja2dyb3VuZCkKLSAgICAgICAgJiYgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3Jk
ZXIoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKKyAgICBpZiAoKHBhaW50
UGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludFBoYXNlID09IFBhaW50
UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3Jk
ZXIoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKICAgICAgICAgcGFpbnRC
b3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CiAKICAgICAvLyBXZSdyZSBkb25lLiAg
V2UgZG9uJ3QgYm90aGVyIHBhaW50aW5nIGFueSBjaGlsZHJlbi4KQEAgLTQwOSw3ICs0MDQsNyBA
QCB2b2lkIFJlbmRlclRhYmxlOjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgaW5mby5wYWlu
dGluZ1Jvb3QgPSBwYWludGluZ1Jvb3RGb3JDaGlsZHJlbihwYWludEluZm8pOwogCiAgICAgZm9y
IChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWNoaWxkLT5sYXllcigpICYmIChjaGls
ZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBjaGlsZCA9PSB0Q2FwdGlvbikpCisgICAgICAgIGlmICgh
Y2hpbGQtPmxheWVyKCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkID09IG1f
Y2FwdGlvbikpCiAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgdHgsIHR5KTsKICAgICB9
CiAKQEAgLTQzOCwxMCArNDMzLDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50Qm94RGVjb3Jh
dGlvbnMoUGEKICAgICBpbnQgaCA9IGhlaWdodCgpOwogCiAgICAgLy8gQWNjb3VudCBmb3IgdGhl
IGNhcHRpb24uCi0gICAgaWYgKHRDYXB0aW9uKSB7Ci0gICAgICAgIGludCBjYXB0aW9uSGVpZ2h0
ID0gKHRDYXB0aW9uLT5oZWlnaHQoKSArIHRDYXB0aW9uLT5tYXJnaW5Cb3R0b20oKSArICB0Q2Fw
dGlvbi0+bWFyZ2luVG9wKCkpOworICAgIGlmIChtX2NhcHRpb24pIHsKKyAgICAgICAgaW50IGNh
cHRpb25IZWlnaHQgPSAobV9jYXB0aW9uLT5oZWlnaHQoKSArIG1fY2FwdGlvbi0+bWFyZ2luQm90
dG9tKCkgKyAgbV9jYXB0aW9uLT5tYXJnaW5Ub3AoKSk7CiAgICAgICAgIGggLT0gY2FwdGlvbkhl
aWdodDsKLSAgICAgICAgaWYgKHRDYXB0aW9uLT5zdHlsZSgpLT5jYXB0aW9uU2lkZSgpICE9IENB
UEJPVFRPTSkKKyAgICAgICAgaWYgKG1fY2FwdGlvbi0+c3R5bGUoKS0+Y2FwdGlvblNpZGUoKSAh
PSBDQVBCT1RUT00pCiAgICAgICAgICAgICB0eSArPSBjYXB0aW9uSGVpZ2h0OwogICAgIH0KIApA
QCAtNDYyLDE0ICs0NTcsMTMgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY01pbk1heFdpZHRoKCkK
IHsKICAgICBBU1NFUlQoIW1pbk1heEtub3duKCkpOwogCi0gICAgaWYgKG5lZWRTZWN0aW9uUmVj
YWxjKQotICAgICAgICByZWNhbGNTZWN0aW9ucygpOworICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVk
ZWQoKTsKICAgICByZWNhbGNIb3Jpem9udGFsQm9yZGVycygpOwogCi0gICAgdGFibGVMYXlvdXQt
PmNhbGNNaW5NYXhXaWR0aCgpOworICAgIG1fdGFibGVMYXlvdXQtPmNhbGNNaW5NYXhXaWR0aCht
X21pbldpZHRoLCBtX21heFdpZHRoKTsKIAotICAgIGlmICh0Q2FwdGlvbiAmJiB0Q2FwdGlvbi0+
bWluV2lkdGgoKSA+IG1fbWluV2lkdGgpCi0gICAgICAgIG1fbWluV2lkdGggPSB0Q2FwdGlvbi0+
bWluV2lkdGgoKTsKKyAgICBpZiAobV9jYXB0aW9uKQorICAgICAgICBtX21pbldpZHRoID0gbWF4
KG1fbWluV2lkdGgsIG1fY2FwdGlvbi0+bWluV2lkdGgoKSk7CiAKICAgICBzZXRNaW5NYXhLbm93
bigpOwogfQpAQCAtNDc3LDY4ICs0NzEsNTIgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY01pbk1h
eFdpZHRoKCkKIHZvaWQgUmVuZGVyVGFibGU6OnNwbGl0Q29sdW1uKGludCBwb3MsIGludCBmaXJz
dFNwYW4pCiB7CiAgICAgLy8gd2UgbmVlZCB0byBhZGQgYSBuZXcgY29sdW1uU3RydWN0Ci0gICAg
aW50IG9sZFNpemUgPSBjb2x1bW5zLnNpemUoKTsKLSAgICBjb2x1bW5zLnJlc2l6ZShvbGRTaXpl
ICsgMSk7Ci0gICAgaW50IG9sZFNwYW4gPSBjb2x1bW5zW3Bvc10uc3BhbjsKKyAgICBpbnQgb2xk
U2l6ZSA9IG1fY29sdW1ucy5zaXplKCk7CisgICAgbV9jb2x1bW5zLnJlc2l6ZShvbGRTaXplICsg
MSk7CisgICAgaW50IG9sZFNwYW4gPSBtX2NvbHVtbnNbcG9zXS5zcGFuOwogICAgIEFTU0VSVChv
bGRTcGFuID4gZmlyc3RTcGFuKTsKLSAgICBjb2x1bW5zW3Bvc10uc3BhbiA9IGZpcnN0U3BhbjsK
LSAgICBtZW1tb3ZlKGNvbHVtbnMuZGF0YSgpICsgcG9zICsgMSwgY29sdW1ucy5kYXRhKCkgKyBw
b3MsIChvbGRTaXplLXBvcykqc2l6ZW9mKENvbHVtblN0cnVjdCkpOwotICAgIGNvbHVtbnNbcG9z
KzFdLnNwYW4gPSBvbGRTcGFuIC0gZmlyc3RTcGFuOworICAgIG1fY29sdW1uc1twb3NdLnNwYW4g
PSBmaXJzdFNwYW47CisgICAgbWVtbW92ZShtX2NvbHVtbnMuZGF0YSgpICsgcG9zICsgMSwgbV9j
b2x1bW5zLmRhdGEoKSArIHBvcywgKG9sZFNpemUgLSBwb3MpICogc2l6ZW9mKENvbHVtblN0cnVj
dCkpOworICAgIG1fY29sdW1uc1twb3MgKyAxXS5zcGFuID0gb2xkU3BhbiAtIGZpcnN0U3BhbjsK
IAogICAgIC8vIGNoYW5nZSB3aWR0aCBvZiBhbGwgcm93cy4KLSAgICBmb3IgKFJlbmRlck9iamVj
dCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewotICAgICAgICAg
ICAgUmVuZGVyVGFibGVTZWN0aW9uICpzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVT
ZWN0aW9uICo+KGNoaWxkKTsKLSAgICAgICAgICAgIGlmIChzZWN0aW9uLT5jQ29sID4gcG9zKQot
ICAgICAgICAgICAgICAgIHNlY3Rpb24tPmNDb2wrKzsKLSAgICAgICAgICAgIGludCBzaXplID0g
c2VjdGlvbi0+bnVtUm93cygpOwotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwg
c2l6ZTsgKytyb3cpIHsKLSAgICAgICAgICAgICAgICBzZWN0aW9uLT5ncmlkW3Jvd10ucm93LT5y
ZXNpemUob2xkU2l6ZSArIDEpOwotICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbjo6
Um93ICZyID0gKnNlY3Rpb24tPmdyaWRbcm93XS5yb3c7Ci0gICAgICAgICAgICAgICAgbWVtbW92
ZShyLmRhdGEoKSArIHBvcyArIDEsIHIuZGF0YSgpICsgcG9zLCAob2xkU2l6ZSAtIHBvcykgKiBz
aXplb2YoUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0KSk7Ci0gICAgICAgICAgICAgICAg
cltwb3MgKyAxXS5jZWxsID0gMDsKLSAgICAgICAgICAgICAgICByW3BvcyArIDFdLmluQ29sU3Bh
biA9IHJbcG9zXS5pbkNvbFNwYW4gfHwgcltwb3NdLmNlbGw7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNU
YWJsZVNlY3Rpb24oKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlv
bio+KGNoaWxkKS0+c3BsaXRDb2x1bW4ocG9zLCBvbGRTaXplICsgMSk7CiAgICAgfQotICAgIGNv
bHVtblBvcy5yZXNpemUobnVtRWZmQ29scygpICsgMSk7CisKKyAgICBtX2NvbHVtblBvcy5yZXNp
emUobnVtRWZmQ29scygpICsgMSk7CiAgICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMo
KTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1uKGludCBzcGFuKQogewogICAg
IC8vIGVhc3kgY2FzZS4KLSAgICBpbnQgcG9zID0gY29sdW1ucy5zaXplKCk7CisgICAgaW50IHBv
cyA9IG1fY29sdW1ucy5zaXplKCk7CiAgICAgaW50IG5ld1NpemUgPSBwb3MgKyAxOwotICAgIGNv
bHVtbnMucmVzaXplKG5ld1NpemUpOwotICAgIGNvbHVtbnNbcG9zXS5zcGFuID0gc3BhbjsKKyAg
ICBtX2NvbHVtbnMucmVzaXplKG5ld1NpemUpOworICAgIG1fY29sdW1uc1twb3NdLnNwYW4gPSBz
cGFuOwogCiAgICAgLy8gY2hhbmdlIHdpZHRoIG9mIGFsbCByb3dzLgotICAgIGZvciAoUmVuZGVy
T2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7Ci0gICAg
ICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24gKnNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJU
YWJsZVNlY3Rpb24gKj4oY2hpbGQpOwotICAgICAgICAgICAgaW50IHNpemUgPSBzZWN0aW9uLT5u
dW1Sb3dzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyArK3Jv
dykgewotICAgICAgICAgICAgICAgIHNlY3Rpb24tPmdyaWRbcm93XS5yb3ctPnJlc2l6ZShuZXdT
aXplKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIGMg
PSBzZWN0aW9uLT5jZWxsQXQocm93LCBwb3MpOwotICAgICAgICAgICAgICAgIGMuY2VsbCA9IDA7
Ci0gICAgICAgICAgICAgICAgYy5pbkNvbFNwYW4gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5p
c1RhYmxlU2VjdGlvbigpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0
aW9uKj4oY2hpbGQpLT5hcHBlbmRDb2x1bW4ocG9zKTsKICAgICB9Ci0gICAgY29sdW1uUG9zLnJl
c2l6ZShudW1FZmZDb2xzKCkgKyAxKTsKKworICAgIG1fY29sdW1uUG9zLnJlc2l6ZShudW1FZmZD
b2xzKCkgKyAxKTsKICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwogfQogCi1S
ZW5kZXJUYWJsZUNvbCAqUmVuZGVyVGFibGU6OmNvbEVsZW1lbnQoaW50IGNvbCkgY29uc3QKK1Jl
bmRlclRhYmxlQ29sKiBSZW5kZXJUYWJsZTo6Y29sRWxlbWVudChpbnQgY29sKSBjb25zdAogewot
ICAgIGlmICghaGFzX2NvbF9lbGVtcykKKyAgICBpZiAoIW1faGFzQ29sRWxlbWVudHMpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7Cisg
ICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICBpbnQgY0NvbCA9IDA7
CisKICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ29sKCkp
IHsKLSAgICAgICAgICAgIFJlbmRlclRhYmxlQ29sICpjb2xFbGVtID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGFibGVDb2wgKj4oY2hpbGQpOworICAgICAgICAgICAgUmVuZGVyVGFibGVDb2wqIGNvbEVs
ZW0gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNvbCo+KGNoaWxkKTsKICAgICAgICAgICAgIGlu
dCBzcGFuID0gY29sRWxlbS0+c3BhbigpOwogICAgICAgICAgICAgaWYgKCFjb2xFbGVtLT5maXJz
dENoaWxkKCkpIHsKICAgICAgICAgICAgICAgICBjQ29sICs9IHNwYW47CkBAIC01NDYsNzQgKzUy
NCw2OCBAQCBSZW5kZXJUYWJsZUNvbCAqUmVuZGVyVGFibGU6OmNvbEVsZW1lbnQoCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjb2xFbGVtOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBSZW5kZXJPYmplY3QgKm5leHQgPSBjaGlsZC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAg
UmVuZGVyT2JqZWN0KiBuZXh0ID0gY2hpbGQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGlm
ICghbmV4dCkKICAgICAgICAgICAgICAgICBuZXh0ID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAg
ICAgICAgICAgICBpZiAoIW5leHQgJiYgY2hpbGQtPnBhcmVudCgpLT5pc1RhYmxlQ29sKCkpCiAg
ICAgICAgICAgICAgICAgbmV4dCA9IGNoaWxkLT5wYXJlbnQoKS0+bmV4dFNpYmxpbmcoKTsKICAg
ICAgICAgICAgIGNoaWxkID0gbmV4dDsKLSAgICAgICAgfSBlbHNlIGlmIChjaGlsZCA9PSB0Q2Fw
dGlvbikKKyAgICAgICAgfSBlbHNlIGlmIChjaGlsZCA9PSBtX2NhcHRpb24pCiAgICAgICAgICAg
ICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CiAKLXZvaWQgUmVuZGVyVGFibGU6OnJl
Y2FsY1NlY3Rpb25zSWZOZWVkZWQoKQotewotICAgIGlmIChuZWVkU2VjdGlvblJlY2FsYykKLSAg
ICAgICAgcmVjYWxjU2VjdGlvbnMoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBSZW5kZXJU
YWJsZTo6cmVjYWxjU2VjdGlvbnMoKQogewotICAgIHRDYXB0aW9uID0gMDsKLSAgICBoZWFkID0g
Zm9vdCA9IGZpcnN0Qm9keSA9IDA7Ci0gICAgaGFzX2NvbF9lbGVtcyA9IGZhbHNlOworICAgIG1f
Y2FwdGlvbiA9IDA7CisgICAgbV9oZWFkID0gMDsKKyAgICBtX2Zvb3QgPSAwOworICAgIG1fZmly
c3RCb2R5ID0gMDsKKyAgICBtX2hhc0NvbEVsZW1lbnRzID0gZmFsc2U7CiAKLSAgICAvLyBXZSBu
ZWVkIHRvIGdldCB2YWxpZCBwb2ludGVycyB0byBjYXB0aW9uLCBoZWFkLCBmb290IGFuZCBmaXJz
dGJvZHkgYWdhaW4KLSAgICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgLy8gV2UgbmVlZCB0
byBnZXQgdmFsaWQgcG9pbnRlcnMgdG8gY2FwdGlvbiwgaGVhZCwgZm9vdCBhbmQgZmlyc3QgYm9k
eSBhZ2FpbgorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgc3dpdGNoIChjaGls
ZC0+c3R5bGUoKS0+ZGlzcGxheSgpKSB7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX0NBUFRJT046
Ci0gICAgICAgICAgICAgICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+aXNSZW5kZXJCbG9jaygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRDYXB0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxv
Y2sqPihjaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIHRDYXB0aW9uLT5zZXROZWVkc0xheW91
dCh0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fY2FwdGlvbiAmJiBjaGlsZC0+aXNSZW5k
ZXJCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fY2FwdGlvbiA9IHN0YXRpY19jYXN0
PFJlbmRlckJsb2NrKj4oY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBtX2NhcHRpb24tPnNl
dE5lZWRzTGF5b3V0KHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgVEFCTEVfQ09MVU1OOgogICAgICAgICAgICAgY2FzZSBU
QUJMRV9DT0xVTU5fR1JPVVA6Ci0gICAgICAgICAgICAgICAgaGFzX2NvbF9lbGVtcyA9IHRydWU7
CisgICAgICAgICAgICAgICAgbV9oYXNDb2xFbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX0hFQURFUl9HUk9VUDoKICAgICAgICAg
ICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyVGFibGVTZWN0aW9uICpzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVT
ZWN0aW9uICo+KGNoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkKQotICAgICAg
ICAgICAgICAgICAgICAgICAgaGVhZCA9IHNlY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKCFmaXJzdEJvZHkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEJvZHkgPSBz
ZWN0aW9uOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi0+bmVlZENlbGxSZWNhbGMp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5yZWNhbGNDZWxscygpOworICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUYWJsZVNlY3Rpb24qPihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9o
ZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFkID0gc2VjdGlvbjsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoIW1fZmlyc3RCb2R5KQorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9maXJzdEJvZHkgPSBzZWN0aW9uOworICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5y
ZWNhbGNDZWxsc0lmTmVlZGVkKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUQUJMRV9GT09URVJfR1JPVVA6CiAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFJlbmRlclRhYmxlU2VjdGlvbiAqc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2Vj
dGlvbiAqPihjaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZm9vdCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvb3QgPSBzZWN0aW9uOwotICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmICghZmlyc3RCb2R5KQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RCb2R5ID0gc2Vj
dGlvbjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24tPm5lZWRDZWxsUmVjYWxjKQot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi0+cmVjYWxjQ2VsbHMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGFibGVTZWN0aW9uKj4oY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZm9v
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZm9vdCA9IHNlY3Rpb247CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKCFtX2ZpcnN0Qm9keSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZmlyc3RCb2R5ID0gc2VjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi0+cmVj
YWxjQ2VsbHNJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgVEFCTEVfUk9XX0dST1VQOgogICAgICAgICAgICAgICAg
IGlmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24gKnNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24g
Kj4oY2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Qm9keSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0Qm9keSA9IHNlY3Rpb247Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzZWN0aW9uLT5uZWVkQ2VsbFJlY2FsYykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
Y3Rpb24tPnJlY2FsY0NlbGxzKCk7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiogc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KGNoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2ZpcnN0Qm9keSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZmlyc3RCb2R5ID0gc2VjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlv
bi0+cmVjYWxjQ2VsbHNJZk5lZWRlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC02MjMsMjUgKzU5NSwyNSBAQCB2
b2lkIFJlbmRlclRhYmxlOjpyZWNhbGNTZWN0aW9ucygpCiAKICAgICAvLyByZXBhaXIgY29sdW1u
IGNvdW50IChhZGRDaGlsZCBjYW4gZ3JvdyBpdCB0b28gbXVjaCwgYmVjYXVzZSBpdCBhbHdheXMg
YWRkcyBlbGVtZW50cyB0byB0aGUgbGFzdCByb3cgb2YgYSBzZWN0aW9uKQogICAgIGludCBtYXhD
b2xzID0gMDsKLSAgICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpIHsKLSAgICAgICAg
ICAgIFJlbmRlclRhYmxlU2VjdGlvbiAqc2VjdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxl
U2VjdGlvbiAqPihjaGlsZCk7CisgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rp
b24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGlsZCk7CiAgICAgICAgICAg
ICBpbnQgc2VjdGlvbkNvbHMgPSBzZWN0aW9uLT5udW1Db2x1bW5zKCk7CiAgICAgICAgICAgICBp
ZiAoc2VjdGlvbkNvbHMgPiBtYXhDb2xzKQogICAgICAgICAgICAgICAgIG1heENvbHMgPSBzZWN0
aW9uQ29sczsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBjb2x1bW5zLnJlc2l6ZShtYXhD
b2xzKTsKLSAgICBjb2x1bW5Qb3MucmVzaXplKG1heENvbHMrMSk7CisgICAgbV9jb2x1bW5zLnJl
c2l6ZShtYXhDb2xzKTsKKyAgICBtX2NvbHVtblBvcy5yZXNpemUobWF4Q29scyArIDEpOwogICAg
IAotICAgIG5lZWRTZWN0aW9uUmVjYWxjID0gZmFsc2U7CisgICAgbV9uZWVkc1NlY3Rpb25SZWNh
bGMgPSBmYWxzZTsKICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKIH0KIAogUmVuZGVyT2JqZWN0
KiBSZW5kZXJUYWJsZTo6cmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQpCiB7Ci0g
ICAgc2V0TmVlZFNlY3Rpb25SZWNhbGMoKTsKKyAgICBzZXROZWVkc1NlY3Rpb25SZWNhbGMoKTsK
ICAgICByZXR1cm4gUmVuZGVyQ29udGFpbmVyOjpyZW1vdmVDaGlsZE5vZGUoY2hpbGQpOwogfQog
CkBAIC02NDksNyArNjIxLDcgQEAgaW50IFJlbmRlclRhYmxlOjpjYWxjQm9yZGVyTGVmdCgpIGNv
bnN0CiB7CiAgICAgaWYgKGNvbGxhcHNlQm9yZGVycygpKSB7CiAgICAgICAgIC8vIERldGVybWlu
ZWQgYnkgdGhlIGZpcnN0IGNlbGwgb2YgdGhlIGZpcnN0IHJvdy4gU2VlIHRoZSBDU1MgMi4xIHNw
ZWMsIHNlY3Rpb24gMTcuNi4yLgotICAgICAgICBpZiAobnVtRWZmQ29scygpID09IDApCisgICAg
ICAgIGlmICghbnVtRWZmQ29scygpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAg
dW5zaWduZWQgYm9yZGVyV2lkdGggPSAwOwpAQCAtNjYxLDI5ICs2MzMsMjkgQEAgaW50IFJlbmRl
clRhYmxlOjpjYWxjQm9yZGVyTGVmdCgpIGNvbnN0CiAgICAgICAgICAgICBib3JkZXJXaWR0aCA9
IHRiLndpZHRoOwogCiAgICAgICAgIGludCBsZWZ0bW9zdENvbHVtbiA9IHN0eWxlKCktPmRpcmVj
dGlvbigpID09IFJUTCA/IG51bUVmZkNvbHMoKSAtIDEgOiAwOwotICAgICAgICBSZW5kZXJUYWJs
ZUNvbCAqY29sR3JvdXAgPSBjb2xFbGVtZW50KGxlZnRtb3N0Q29sdW1uKTsKKyAgICAgICAgUmVu
ZGVyVGFibGVDb2wqIGNvbEdyb3VwID0gY29sRWxlbWVudChsZWZ0bW9zdENvbHVtbik7CiAgICAg
ICAgIGlmIChjb2xHcm91cCkgewogICAgICAgICAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGdiID0g
c3R5bGUoKS0+Ym9yZGVyTGVmdCgpOwogICAgICAgICAgICAgaWYgKGdiLnN0eWxlKCkgPT0gQkhJ
RERFTikKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGlmIChnYi5zdHls
ZSgpID4gQkhJRERFTiAmJiBnYi53aWR0aCA+IGJvcmRlcldpZHRoKQotICAgICAgICAgICAgICAg
IGJvcmRlcldpZHRoID0gZ2Iud2lkdGg7CisgICAgICAgICAgICBpZiAoZ2Iuc3R5bGUoKSA+IEJI
SURERU4pCisgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIGdi
LndpZHRoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUmVuZGVyT2JqZWN0ICpjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsKICAgICAgICAgd2hpbGUgKGNoaWxkICYmICFjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkK
ICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIGlmIChj
aGlsZCAmJiBjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkgewogICAgICAgICAgICAgUmVuZGVyVGFi
bGVTZWN0aW9uKiBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4oY2hp
bGQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2VjdGlvbi0+bnVtUm93cygpID09
IDApCisgICAgICAgICAgICBpZiAoIXNlY3Rpb24tPm51bVJvd3MoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gYm9yZGVyV2lkdGggLyAyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjb25z
dCBCb3JkZXJWYWx1ZSYgc2IgPSBzZWN0aW9uLT5zdHlsZSgpLT5ib3JkZXJMZWZ0KCk7CiAgICAg
ICAgICAgICBpZiAoc2Iuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgaWYgKHNiLnN0eWxlKCkgPiBCSElEREVOICYmIHNiLndpZHRoID4g
Ym9yZGVyV2lkdGgpCi0gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBzYi53aWR0aDsKKyAg
ICAgICAgICAgIGlmIChzYi5zdHlsZSgpID4gQkhJRERFTikKKyAgICAgICAgICAgICAgICBib3Jk
ZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgc2Iud2lkdGgpOwogCiAgICAgICAgICAgICBjb25z
dCBSZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIGNzID0gc2VjdGlvbi0+Y2VsbEF0KDAs
IGxlZnRtb3N0Q29sdW1uKTsKICAgICAgICAgICAgIApAQCAtNjk1LDEwICs2NjcsMTAgQEAgaW50
IFJlbmRlclRhYmxlOjpjYWxjQm9yZGVyTGVmdCgpIGNvbnN0CiAgICAgICAgICAgICAgICAgaWYg
KHJiLnN0eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICAgICAgICAgICAgICBpZiAoY2Iuc3R5bGUoKSA+IEJISURERU4gJiYgY2Iud2lkdGggPiBi
b3JkZXJXaWR0aCkKLSAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBjYi53aWR0aDsK
LSAgICAgICAgICAgICAgICBpZiAocmIuc3R5bGUoKSA+IEJISURERU4gJiYgcmIud2lkdGggPiBi
b3JkZXJXaWR0aCkKLSAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSByYi53aWR0aDsK
KyAgICAgICAgICAgICAgICBpZiAoY2Iuc3R5bGUoKSA+IEJISURERU4pCisgICAgICAgICAgICAg
ICAgICAgIGJvcmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCBjYi53aWR0aCk7CisgICAgICAg
ICAgICAgICAgaWYgKHJiLnN0eWxlKCkgPiBCSElEREVOKQorICAgICAgICAgICAgICAgICAgICBi
b3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgcmIud2lkdGgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBib3JkZXJXaWR0aCAvIDI7CkBAIC03MTAsNyArNjgy
LDcgQEAgaW50IFJlbmRlclRhYmxlOjpjYWxjQm9yZGVyUmlnaHQoKSBjb25zdAogewogICAgIGlm
IChjb2xsYXBzZUJvcmRlcnMoKSkgewogICAgICAgICAvLyBEZXRlcm1pbmVkIGJ5IHRoZSBsYXN0
IGNlbGwgb2YgdGhlIGZpcnN0IHJvdy4gU2VlIHRoZSBDU1MgMi4xIHNwZWMsIHNlY3Rpb24gMTcu
Ni4yLgotICAgICAgICBpZiAobnVtRWZmQ29scygpID09IDApCisgICAgICAgIGlmICghbnVtRWZm
Q29scygpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgdW5zaWduZWQgYm9yZGVy
V2lkdGggPSAwOwpAQCAtNzIyLDI5ICs2OTQsMjkgQEAgaW50IFJlbmRlclRhYmxlOjpjYWxjQm9y
ZGVyUmlnaHQoKSBjb25zdAogICAgICAgICAgICAgYm9yZGVyV2lkdGggPSB0Yi53aWR0aDsKIAog
ICAgICAgICBpbnQgcmlnaHRtb3N0Q29sdW1uID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRM
ID8gMCA6IG51bUVmZkNvbHMoKSAtIDE7Ci0gICAgICAgIFJlbmRlclRhYmxlQ29sICpjb2xHcm91
cCA9IGNvbEVsZW1lbnQocmlnaHRtb3N0Q29sdW1uKTsKKyAgICAgICAgUmVuZGVyVGFibGVDb2wq
IGNvbEdyb3VwID0gY29sRWxlbWVudChyaWdodG1vc3RDb2x1bW4pOwogICAgICAgICBpZiAoY29s
R3JvdXApIHsKICAgICAgICAgICAgIGNvbnN0IEJvcmRlclZhbHVlJiBnYiA9IHN0eWxlKCktPmJv
cmRlclJpZ2h0KCk7CiAgICAgICAgICAgICBpZiAoZ2Iuc3R5bGUoKSA9PSBCSElEREVOKQogICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKGdiLnN0eWxlKCkgPiBCSElE
REVOICYmIGdiLndpZHRoID4gYm9yZGVyV2lkdGgpCi0gICAgICAgICAgICAgICAgYm9yZGVyV2lk
dGggPSBnYi53aWR0aDsKKyAgICAgICAgICAgIGlmIChnYi5zdHlsZSgpID4gQkhJRERFTikKKyAg
ICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgZ2Iud2lkdGgpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RD
aGlsZCgpOworICAgICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAg
ICAgICB3aGlsZSAoY2hpbGQgJiYgIWNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQogICAgICAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGNoaWxkICYmIGNo
aWxkLT5pc1RhYmxlU2VjdGlvbigpKSB7CiAgICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24q
IHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihjaGlsZCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChzZWN0aW9uLT5udW1Sb3dzKCkgPT0gMCkKKyAgICAg
ICAgICAgIGlmICghc2VjdGlvbi0+bnVtUm93cygpKQogICAgICAgICAgICAgICAgIHJldHVybiAo
Ym9yZGVyV2lkdGggKyAxKSAvIDI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNvbnN0IEJv
cmRlclZhbHVlJiBzYiA9IHNlY3Rpb24tPnN0eWxlKCktPmJvcmRlclJpZ2h0KCk7CiAgICAgICAg
ICAgICBpZiAoc2Iuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgaWYgKHNiLnN0eWxlKCkgPiBCSElEREVOICYmIHNiLndpZHRoID4gYm9y
ZGVyV2lkdGgpCi0gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBzYi53aWR0aDsKKyAgICAg
ICAgICAgIGlmIChzYi5zdHlsZSgpID4gQkhJRERFTikKKyAgICAgICAgICAgICAgICBib3JkZXJX
aWR0aCA9IG1heChib3JkZXJXaWR0aCwgc2Iud2lkdGgpOwogCiAgICAgICAgICAgICBjb25zdCBS
ZW5kZXJUYWJsZVNlY3Rpb246OkNlbGxTdHJ1Y3QmIGNzID0gc2VjdGlvbi0+Y2VsbEF0KDAsIHJp
Z2h0bW9zdENvbHVtbik7CiAgICAgICAgICAgICAKQEAgLTc1NiwxMCArNzI4LDEwIEBAIGludCBS
ZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclJpZ2h0KCkgY29uc3QKICAgICAgICAgICAgICAgICBpZiAo
cmIuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAot
ICAgICAgICAgICAgICAgIGlmIChjYi5zdHlsZSgpID4gQkhJRERFTiAmJiBjYi53aWR0aCA+IGJv
cmRlcldpZHRoKQotICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IGNiLndpZHRoOwot
ICAgICAgICAgICAgICAgIGlmIChyYi5zdHlsZSgpID4gQkhJRERFTiAmJiByYi53aWR0aCA+IGJv
cmRlcldpZHRoKQotICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IHJiLndpZHRoOwor
ICAgICAgICAgICAgICAgIGlmIChjYi5zdHlsZSgpID4gQkhJRERFTikKKyAgICAgICAgICAgICAg
ICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIGNiLndpZHRoKTsKKyAgICAgICAg
ICAgICAgICBpZiAocmIuc3R5bGUoKSA+IEJISURERU4pCisgICAgICAgICAgICAgICAgICAgIGJv
cmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCByYi53aWR0aCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIChib3JkZXJXaWR0aCArIDEpIC8gMjsKQEAgLTc5Mywx
MiArNzY1LDEyIEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJUb3AoKSBjb25zdAogICAg
ICAgICByZXR1cm4gMDsKICAgICBpbnQgYm9yZGVyV2lkdGggPSAwOwogICAgIFJlbmRlclRhYmxl
U2VjdGlvbiogdG9wU2VjdGlvbjsKLSAgICBpZiAoaGVhZCkKLSAgICAgICAgdG9wU2VjdGlvbiA9
IGhlYWQ7Ci0gICAgZWxzZSBpZiAoZmlyc3RCb2R5KQotICAgICAgICB0b3BTZWN0aW9uID0gZmly
c3RCb2R5OwotICAgIGVsc2UgaWYgKGZvb3QpCi0gICAgICAgIHRvcFNlY3Rpb24gPSBmb290Owor
ICAgIGlmIChtX2hlYWQpCisgICAgICAgIHRvcFNlY3Rpb24gPSBtX2hlYWQ7CisgICAgZWxzZSBp
ZiAobV9maXJzdEJvZHkpCisgICAgICAgIHRvcFNlY3Rpb24gPSBtX2ZpcnN0Qm9keTsKKyAgICBl
bHNlIGlmIChtX2Zvb3QpCisgICAgICAgIHRvcFNlY3Rpb24gPSBtX2Zvb3Q7CiAgICAgZWxzZQog
ICAgICAgICB0b3BTZWN0aW9uID0gMDsKICAgICBpZiAodG9wU2VjdGlvbikgewpAQCAtODA5LDgg
Kzc4MSw4IEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJUb3AoKSBjb25zdAogICAgIGNv
bnN0IEJvcmRlclZhbHVlJiB0YiA9IHN0eWxlKCktPmJvcmRlclRvcCgpOwogICAgIGlmICh0Yi5z
dHlsZSgpID09IEJISURERU4pCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmICh0Yi5zdHlsZSgp
ID4gQkhJRERFTiAmJiAoaW50KSh0Yi53aWR0aCAvIDIpID4gYm9yZGVyV2lkdGgpCi0gICAgICAg
IGJvcmRlcldpZHRoID0gdGIud2lkdGggLyAyOworICAgIGlmICh0Yi5zdHlsZSgpID4gQkhJRERF
TikKKyAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIHN0YXRpY19jYXN0PGlu
dD4odGIud2lkdGggLyAyKSk7CiAgICAgcmV0dXJuIGJvcmRlcldpZHRoOwogfQogCkBAIC04MjAs
MTIgKzc5MiwxMiBAQCBpbnQgUmVuZGVyVGFibGU6Om91dGVyQm9yZGVyQm90dG9tKCkgY29uCiAg
ICAgICAgIHJldHVybiAwOwogICAgIGludCBib3JkZXJXaWR0aCA9IDA7CiAgICAgUmVuZGVyVGFi
bGVTZWN0aW9uKiBib3R0b21TZWN0aW9uOwotICAgIGlmIChmb290KQotICAgICAgICBib3R0b21T
ZWN0aW9uID0gZm9vdDsKKyAgICBpZiAobV9mb290KQorICAgICAgICBib3R0b21TZWN0aW9uID0g
bV9mb290OwogICAgIGVsc2UgewogICAgICAgICBSZW5kZXJPYmplY3QqIGNoaWxkOwogICAgICAg
ICBmb3IgKGNoaWxkID0gbGFzdENoaWxkKCk7IGNoaWxkICYmICFjaGlsZC0+aXNUYWJsZVNlY3Rp
b24oKTsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpOwotICAgICAgICBib3R0b21T
ZWN0aW9uID0gY2hpbGQgPyBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4oY2hpbGQp
IDogMDsKKyAgICAgICAgYm90dG9tU2VjdGlvbiA9IGNoaWxkID8gc3RhdGljX2Nhc3Q8UmVuZGVy
VGFibGVTZWN0aW9uKj4oY2hpbGQpIDogMDsKICAgICB9CiAgICAgaWYgKGJvdHRvbVNlY3Rpb24p
IHsKICAgICAgICAgYm9yZGVyV2lkdGggPSBib3R0b21TZWN0aW9uLT5vdXRlckJvcmRlckJvdHRv
bSgpOwpAQCAtODM1LDggKzgwNyw4IEBAIGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJCb3R0
b20oKSBjb24KICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgdGIgPSBzdHlsZSgpLT5ib3JkZXJCb3R0
b20oKTsKICAgICBpZiAodGIuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBpZiAodGIuc3R5bGUoKSA+IEJISURERU4gJiYgKGludCkodGIud2lkdGggKyAxKSAvIDIg
PiBib3JkZXJXaWR0aCkKLSAgICAgICAgYm9yZGVyV2lkdGggPSAodGIud2lkdGggKyAxKSAvIDI7
CisgICAgaWYgKHRiLnN0eWxlKCkgPiBCSElEREVOKQorICAgICAgICBib3JkZXJXaWR0aCA9IG1h
eChib3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8aW50PigodGIud2lkdGggKyAxKSAvIDIpKTsKICAg
ICByZXR1cm4gYm9yZGVyV2lkdGg7CiB9CiAKQEAgLTg1NCwxMCArODI2LDEwIEBAIGludCBSZW5k
ZXJUYWJsZTo6b3V0ZXJCb3JkZXJMZWZ0KCkgY29uc3QKICAgICAgICAgYm9yZGVyV2lkdGggPSB0
Yi53aWR0aCAvIDI7CiAKICAgICBib29sIGFsbEhpZGRlbiA9IHRydWU7Ci0gICAgZm9yIChSZW5k
ZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFj
aGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBp
bnQgc3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4oY2hpbGQpLT5vdXRlckJv
cmRlckxlZnQoKTsKKyAgICAgICAgaW50IHN3ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0
aW9uKj4oY2hpbGQpLT5vdXRlckJvcmRlckxlZnQoKTsKICAgICAgICAgaWYgKHN3ID09IC0xKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGVsc2UKQEAgLTg4NCwxMCArODU2LDEwIEBA
IGludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJSaWdodCgpIGNvbnMKICAgICAgICAgYm9yZGVy
V2lkdGggPSAodGIud2lkdGggKyAxKSAvIDI7CiAKICAgICBib29sIGFsbEhpZGRlbiA9IHRydWU7
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgaWYgKCFjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpbnQgc3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4o
Y2hpbGQpLT5vdXRlckJvcmRlclJpZ2h0KCk7CisgICAgICAgIGludCBzdyA9IHN0YXRpY19jYXN0
PFJlbmRlclRhYmxlU2VjdGlvbio+KGNoaWxkKS0+b3V0ZXJCb3JkZXJSaWdodCgpOwogICAgICAg
ICBpZiAoc3cgPT0gLTEpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZWxzZQpAQCAt
OTAyLDMxICs4NzQsMzEgQEAgaW50IFJlbmRlclRhYmxlOjpvdXRlckJvcmRlclJpZ2h0KCkgY29u
cwogCiBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjpzZWN0aW9uQWJvdmUoY29uc3Qg
UmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uLCBib29sIHNraXBFbXB0eVNlY3Rpb25zKSBjb25z
dAogewotICAgIGlmIChzZWN0aW9uID09IGhlYWQpCisgICAgaWYgKHNlY3Rpb24gPT0gbV9oZWFk
KQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZW5kZXJPYmplY3QgKnByZXZTZWN0aW9uID0gKHNl
Y3Rpb24gPT0gZm9vdCA/IGxhc3RDaGlsZCgpIDogc2VjdGlvbiktPnByZXZpb3VzU2libGluZygp
OworICAgIFJlbmRlck9iamVjdCogcHJldlNlY3Rpb24gPSAoc2VjdGlvbiA9PSBtX2Zvb3QgPyBs
YXN0Q2hpbGQoKSA6IHNlY3Rpb24pLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB3aGlsZSAocHJl
dlNlY3Rpb24pIHsKLSAgICAgICAgaWYgKHByZXZTZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigpICYm
IHByZXZTZWN0aW9uICE9IGhlYWQgJiYgcHJldlNlY3Rpb24gIT0gZm9vdCAmJiAoIXNraXBFbXB0
eVNlY3Rpb25zIHx8IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KHByZXZTZWN0aW9u
KS0+bnVtUm93cygpKSkKKyAgICAgICAgaWYgKHByZXZTZWN0aW9uLT5pc1RhYmxlU2VjdGlvbigp
ICYmIHByZXZTZWN0aW9uICE9IG1faGVhZCAmJiBwcmV2U2VjdGlvbiAhPSBtX2Zvb3QgJiYgKCFz
a2lwRW1wdHlTZWN0aW9ucyB8fCBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihwcmV2
U2VjdGlvbiktPm51bVJvd3MoKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgcHJldlNl
Y3Rpb24gPSBwcmV2U2VjdGlvbi0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgfQotICAgIGlmICgh
cHJldlNlY3Rpb24gJiYgaGVhZCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IGhlYWQtPm51bVJv
d3MoKSkpCi0gICAgICAgIHByZXZTZWN0aW9uID0gaGVhZDsKKyAgICBpZiAoIXByZXZTZWN0aW9u
ICYmIG1faGVhZCAmJiAoIXNraXBFbXB0eVNlY3Rpb25zIHx8IG1faGVhZC0+bnVtUm93cygpKSkK
KyAgICAgICAgcHJldlNlY3Rpb24gPSBtX2hlYWQ7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
bmRlclRhYmxlU2VjdGlvbio+KHByZXZTZWN0aW9uKTsKIH0KIAogUmVuZGVyVGFibGVTZWN0aW9u
KiBSZW5kZXJUYWJsZTo6c2VjdGlvbkJlbG93KGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiogc2Vj
dGlvbiwgYm9vbCBza2lwRW1wdHlTZWN0aW9ucykgY29uc3QKIHsKLSAgICBpZiAoc2VjdGlvbiA9
PSBmb290KQorICAgIGlmIChzZWN0aW9uID09IG1fZm9vdCkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgUmVuZGVyT2JqZWN0ICpuZXh0U2VjdGlvbiA9IChzZWN0aW9uID09IGhlYWQgPyBmaXJzdENo
aWxkKCkgOiBzZWN0aW9uKS0+bmV4dFNpYmxpbmcoKTsKKyAgICBSZW5kZXJPYmplY3QqIG5leHRT
ZWN0aW9uID0gKHNlY3Rpb24gPT0gbV9oZWFkID8gZmlyc3RDaGlsZCgpIDogc2VjdGlvbiktPm5l
eHRTaWJsaW5nKCk7CiAgICAgd2hpbGUgKG5leHRTZWN0aW9uKSB7Ci0gICAgICAgIGlmIChuZXh0
U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAmJiBuZXh0U2VjdGlvbiAhPSBoZWFkICYmIG5leHRT
ZWN0aW9uICE9IGZvb3QgJiYgKCFza2lwRW1wdHlTZWN0aW9ucyB8fCBzdGF0aWNfY2FzdDxSZW5k
ZXJUYWJsZVNlY3Rpb24qPihuZXh0U2VjdGlvbiktPm51bVJvd3MoKSkpCisgICAgICAgIGlmIChu
ZXh0U2VjdGlvbi0+aXNUYWJsZVNlY3Rpb24oKSAmJiBuZXh0U2VjdGlvbiAhPSBtX2hlYWQgJiYg
bmV4dFNlY3Rpb24gIT0gbV9mb290ICYmICghc2tpcEVtcHR5U2VjdGlvbnMgfHwgc3RhdGljX2Nh
c3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4obmV4dFNlY3Rpb24pLT5udW1Sb3dzKCkpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIG5leHRTZWN0aW9uID0gbmV4dFNlY3Rpb24tPm5leHRTaWJs
aW5nKCk7CiAgICAgfQotICAgIGlmICghbmV4dFNlY3Rpb24gJiYgZm9vdCAmJiAoIXNraXBFbXB0
eVNlY3Rpb25zIHx8IGZvb3QtPm51bVJvd3MoKSkpCi0gICAgICAgIG5leHRTZWN0aW9uID0gZm9v
dDsKKyAgICBpZiAoIW5leHRTZWN0aW9uICYmIG1fZm9vdCAmJiAoIXNraXBFbXB0eVNlY3Rpb25z
IHx8IG1fZm9vdC0+bnVtUm93cygpKSkKKyAgICAgICAgbmV4dFNlY3Rpb24gPSBtX2Zvb3Q7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KG5leHRTZWN0aW9uKTsK
IH0KIApAQCAtOTM5LDcgKzkxMSw3IEBAIFJlbmRlclRhYmxlQ2VsbCogUmVuZGVyVGFibGU6OmNl
bGxBYm92ZSgKICAgICBpZiAociA+IDApIHsKICAgICAgICAgLy8gY2VsbCBpcyBub3QgaW4gdGhl
IGZpcnN0IHJvdywgc28gdXNlIHRoZSBhYm92ZSByb3cgaW4gaXRzIG93biBzZWN0aW9uCiAgICAg
ICAgIHNlY3Rpb24gPSBjZWxsLT5zZWN0aW9uKCk7Ci0gICAgICAgIHJBYm92ZSA9IHItMTsKKyAg
ICAgICAgckFib3ZlID0gciAtIDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2VjdGlvbiA9IHNl
Y3Rpb25BYm92ZShjZWxsLT5zZWN0aW9uKCksIHRydWUpOwogICAgICAgICBpZiAoc2VjdGlvbikK
QEAgLTk1NCw3ICs5MjYsNyBAQCBSZW5kZXJUYWJsZUNlbGwqIFJlbmRlclRhYmxlOjpjZWxsQWJv
dmUoCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGFib3ZlQ2VsbCA9IHNlY3Rpb24tPmNlbGxB
dChyQWJvdmUsIGVmZkNvbCk7CiAgICAgICAgICAgICBlZmZDb2wtLTsKLSAgICAgICAgfSB3aGls
ZSAoIWFib3ZlQ2VsbC5jZWxsICYmIGFib3ZlQ2VsbC5pbkNvbFNwYW4gJiYgZWZmQ29sID49MCk7
CisgICAgICAgIH0gd2hpbGUgKCFhYm92ZUNlbGwuY2VsbCAmJiBhYm92ZUNlbGwuaW5Db2xTcGFu
ICYmIGVmZkNvbCA+PSAwKTsKICAgICAgICAgcmV0dXJuIGFib3ZlQ2VsbC5jZWxsOwogICAgIH0g
ZWxzZQogICAgICAgICByZXR1cm4gMDsKQEAgLTk2OSw3ICs5NDEsNyBAQCBSZW5kZXJUYWJsZUNl
bGwqIFJlbmRlclRhYmxlOjpjZWxsQmVsb3coCiAgICAgaWYgKHIgPCBjZWxsLT5zZWN0aW9uKCkt
Pm51bVJvd3MoKSAtIDEpIHsKICAgICAgICAgLy8gVGhlIGNlbGwgaXMgbm90IGluIHRoZSBsYXN0
IHJvdywgc28gdXNlIHRoZSBuZXh0IHJvdyBpbiB0aGUgc2VjdGlvbi4KICAgICAgICAgc2VjdGlv
biA9IGNlbGwtPnNlY3Rpb24oKTsKLSAgICAgICAgckJlbG93PSByKzE7CisgICAgICAgIHJCZWxv
dyA9IHIgKyAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNlY3Rpb24gPSBzZWN0aW9uQmVsb3co
Y2VsbC0+c2VjdGlvbigpLCB0cnVlKTsKICAgICAgICAgaWYgKHNlY3Rpb24pCkBAIC05ODQsNyAr
OTU2LDcgQEAgUmVuZGVyVGFibGVDZWxsKiBSZW5kZXJUYWJsZTo6Y2VsbEJlbG93KAogICAgICAg
ICBkbyB7CiAgICAgICAgICAgICBiZWxvd0NlbGwgPSBzZWN0aW9uLT5jZWxsQXQockJlbG93LCBl
ZmZDb2wpOwogICAgICAgICAgICAgZWZmQ29sLS07Ci0gICAgICAgIH0gd2hpbGUgKCFiZWxvd0Nl
bGwuY2VsbCAmJiBiZWxvd0NlbGwuaW5Db2xTcGFuICYmIGVmZkNvbCA+PTApOworICAgICAgICB9
IHdoaWxlICghYmVsb3dDZWxsLmNlbGwgJiYgYmVsb3dDZWxsLmluQ29sU3BhbiAmJiBlZmZDb2wg
Pj0gMCk7CiAgICAgICAgIHJldHVybiBiZWxvd0NlbGwuY2VsbDsKICAgICB9IGVsc2UKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC05OTQsMTUgKzk2NiwxNSBAQCBSZW5kZXJUYWJsZUNlbGwqIFJlbmRl
clRhYmxlOjpjZWxsQmVmb3JlCiB7CiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0g
Y2VsbC0+c2VjdGlvbigpOwogICAgIGludCBlZmZDb2wgPSBjb2xUb0VmZkNvbChjZWxsLT5jb2wo
KSk7Ci0gICAgaWYgKGVmZkNvbCA9PSAwKQorICAgIGlmICghZWZmQ29sKQogICAgICAgICByZXR1
cm4gMDsKICAgICAKICAgICAvLyBJZiB3ZSBoaXQgYSBjb2xzcGFuIGJhY2sgdXAgdG8gYSByZWFs
IGNlbGwuCiAgICAgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0IHByZXZDZWxsOwogICAg
IGRvIHsKLSAgICAgICAgcHJldkNlbGwgPSBzZWN0aW9uLT5jZWxsQXQoY2VsbC0+cm93KCksIGVm
ZkNvbC0xKTsKKyAgICAgICAgcHJldkNlbGwgPSBzZWN0aW9uLT5jZWxsQXQoY2VsbC0+cm93KCks
IGVmZkNvbCAtIDEpOwogICAgICAgICBlZmZDb2wtLTsKLSAgICB9IHdoaWxlICghcHJldkNlbGwu
Y2VsbCAmJiBwcmV2Q2VsbC5pbkNvbFNwYW4gJiYgZWZmQ29sID49MCk7CisgICAgfSB3aGlsZSAo
IXByZXZDZWxsLmNlbGwgJiYgcHJldkNlbGwuaW5Db2xTcGFuICYmIGVmZkNvbCA+PSAwKTsKICAg
ICByZXR1cm4gcHJldkNlbGwuY2VsbDsKIH0KIApAQCAtMTAzMyw3ICsxMDA1LDcgQEAgSW50UmVj
dCBSZW5kZXJUYWJsZTo6Z2V0T3ZlcmZsb3dDbGlwUmVjdAogICAgIC8vIEZJWE1FOiBUaGlzIGNv
ZGUgYXNzdW1lcyAobGlrZSBhbGwgb3VyIG90aGVyIGNhcHRpb24gY29kZSkgdGhhdCBvbmx5IHRv
cC9ib3R0b20gYXJlCiAgICAgLy8gc3VwcG9ydGVkLiAgV2hlbiB3ZSBhY3R1YWxseSBzdXBwb3J0
IGxlZnQvcmlnaHQgYW5kIHN0b3AgbWFwcGluZyB0aGVtIHRvIHRvcC9ib3R0b20sCiAgICAgLy8g
d2UgbWlnaHQgaGF2ZSB0byBoYWNrIHRoaXMgY29kZSBmaXJzdCAoZGVwZW5kaW5nIG9uIHdoYXQg
b3JkZXIgd2UgZG8gdGhlc2UgYnVnIGZpeGVzIGluKS4KLSAgICBpZiAodENhcHRpb24pIHsKKyAg
ICBpZiAobV9jYXB0aW9uKSB7CiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGhlaWdodCgpKTsKICAg
ICAgICAgcmVjdC5zZXRZKHR5KTsKICAgICB9CkBAIC0xMDQyLDIxICsxMDE0LDIxIEBAIEludFJl
Y3QgUmVuZGVyVGFibGU6OmdldE92ZXJmbG93Q2xpcFJlY3QKIH0KIAogI2lmbmRlZiBOREVCVUcK
LXZvaWQgUmVuZGVyVGFibGU6OmR1bXAoVGV4dFN0cmVhbSAqc3RyZWFtLCBEZXByZWNhdGVkU3Ry
aW5nIGluZCkgY29uc3QKK3ZvaWQgUmVuZGVyVGFibGU6OmR1bXAoVGV4dFN0cmVhbSogc3RyZWFt
LCBEZXByZWNhdGVkU3RyaW5nIGluZCkgY29uc3QKIHsKLSAgICBpZiAodENhcHRpb24pCisgICAg
aWYgKG1fY2FwdGlvbikKICAgICAgICAgKnN0cmVhbSA8PCAiIHRDYXB0aW9uIjsKLSAgICBpZiAo
aGVhZCkKKyAgICBpZiAobV9oZWFkKQogICAgICAgICAqc3RyZWFtIDw8ICIgaGVhZCI7Ci0gICAg
aWYgKGZvb3QpCisgICAgaWYgKG1fZm9vdCkKICAgICAgICAgKnN0cmVhbSA8PCAiIGZvb3QiOwog
CiAgICAgKnN0cmVhbSA8PCBlbmRsIDw8IGluZCA8PCAiY3NwYW5zOiI7Ci0gICAgZm9yICggdW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgY29sdW1ucy5zaXplKCk7IGkrKyApCi0gICAgICAgICpzdHJl
YW0gPDwgIiAiIDw8IGNvbHVtbnNbaV0uc3BhbjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jb2x1bW5zLnNpemUoKTsgaSsrKQorICAgICAgICAqc3RyZWFtIDw8ICIgIiA8PCBtX2Nv
bHVtbnNbaV0uc3BhbjsKICAgICAqc3RyZWFtIDw8IGVuZGwgPDwgaW5kOwogCi0gICAgUmVuZGVy
QmxvY2s6OmR1bXAoc3RyZWFtLGluZCk7CisgICAgUmVuZGVyQmxvY2s6OmR1bXAoc3RyZWFtLCBp
bmQpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24g
MTg1NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw4ICsyNCw4IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwog
Ci0jaWZuZGVmIFJlbmRlclRhYmxlX0gKLSNkZWZpbmUgUmVuZGVyVGFibGVfSAorI2lmbmRlZiBS
ZW5kZXJUYWJsZV9oCisjZGVmaW5lIFJlbmRlclRhYmxlX2gKIAogI2luY2x1ZGUgIlJlbmRlckJs
b2NrLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNjQsMTYgKzY0LDE2IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJSZW5kZXJUYWJsZSI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHls
ZSopOwotCiAgICAgdmlydHVhbCBib29sIGlzVGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKKwogICAgIHZpcnR1
YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBpbnQg
Z2V0Q29sdW1uUG9zKGludCBjb2wpIGNvbnN0IHsgcmV0dXJuIGNvbHVtblBvc1tjb2xdOyB9Cisg
ICAgaW50IGdldENvbHVtblBvcyhpbnQgY29sKSBjb25zdCB7IHJldHVybiBtX2NvbHVtblBvc1tj
b2xdOyB9CiAKLSAgICBpbnQgaEJvcmRlclNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBoc3BhY2lu
ZzsgfQotICAgIGludCB2Qm9yZGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIHZzcGFjaW5nOyB9
CisgICAgaW50IGhCb3JkZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9oU3BhY2luZzsgfQor
ICAgIGludCB2Qm9yZGVyU3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fdlNwYWNpbmc7IH0KICAg
ICAKICAgICBib29sIGNvbGxhcHNlQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJv
cmRlckNvbGxhcHNlKCk7IH0KICAgICBpbnQgYm9yZGVyTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ym9yZGVyTGVmdDsgfQpAQCAtODEsMTIgKzgxLDEyIEBAIHB1YmxpYzoKICAgICBpbnQgYm9yZGVy
VG9wKCkgY29uc3Q7CiAgICAgaW50IGJvcmRlckJvdHRvbSgpIGNvbnN0OwogICAgIAotICAgIFJ1
bGVzIGdldFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UnVsZXM+KHJ1bGVzKTsg
fQorICAgIFJ1bGVzIGdldFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UnVsZXM+
KG1fcnVsZXMpOyB9CiAKICAgICBjb25zdCBDb2xvciYgYmdDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOyB9CiAKLSAgICB1bnNpZ25lZCBjZWxsUGFkZGlu
ZygpIGNvbnN0IHsgcmV0dXJuIHBhZGRpbmc7IH0KLSAgICB2b2lkIHNldENlbGxQYWRkaW5nKHVu
c2lnbmVkIHApIHsgcGFkZGluZyA9IHA7IH0KKyAgICB1bnNpZ25lZCBjZWxsUGFkZGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFkZGluZzsgfQorICAgIHZvaWQgc2V0Q2VsbFBhZGRpbmcodW5zaWdu
ZWQgcCkgeyBtX3BhZGRpbmcgPSBwOyB9CiAKICAgICBpbnQgb3V0ZXJCb3JkZXJUb3AoKSBjb25z
dDsKICAgICBpbnQgb3V0ZXJCb3JkZXJCb3R0b20oKSBjb25zdDsKQEAgLTExMiwzNSArMTEyLDM4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBjYWxjV2lkdGgoKTsKIAotI2lmbmRlZiBO
REVCVUcKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtICpzdHJlYW0sIERlcHJlY2F0
ZWRTdHJpbmcgaW5kID0gIiIpIGNvbnN0OwotI2VuZGlmCiAgICAgc3RydWN0IENvbHVtblN0cnVj
dCB7CiAgICAgICAgIGVudW0gewogICAgICAgICAgICAgV2lkdGhVbmRlZmluZWQgPSAweGZmZmYK
ICAgICAgICAgfTsKLSAgICAgICAgQ29sdW1uU3RydWN0KCkgewotICAgICAgICAgICAgc3BhbiA9
IDE7Ci0gICAgICAgICAgICB3aWR0aCA9IFdpZHRoVW5kZWZpbmVkOworCisgICAgICAgIENvbHVt
blN0cnVjdCgpCisgICAgICAgICAgICA6IHNwYW4oMSkKKyAgICAgICAgICAgICwgd2lkdGgoV2lk
dGhVbmRlZmluZWQpCisgICAgICAgIHsKICAgICAgICAgfQorCiAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IHNwYW47CiAgICAgICAgIHVuc2lnbmVkIHdpZHRoOyAvLyB0aGUgY2FsY3VsYXRlZCBwb3Np
dGlvbiBvZiB0aGUgY29sdW1uCiAgICAgfTsKIAotICAgIFZlY3RvcjxpbnQ+IGNvbHVtblBvczsK
LSAgICBWZWN0b3I8Q29sdW1uU3RydWN0PiBjb2x1bW5zOworICAgIFZlY3RvcjxDb2x1bW5TdHJ1
Y3Q+JiBjb2x1bW5zKCkgeyByZXR1cm4gbV9jb2x1bW5zOyB9CisgICAgVmVjdG9yPGludD4mIGNv
bHVtblBvc2l0aW9ucygpIHsgcmV0dXJuIG1fY29sdW1uUG9zOyB9CisgICAgUmVuZGVyVGFibGVT
ZWN0aW9uKiBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWQ7IH0KKyAgICBSZW5kZXJUYWJs
ZVNlY3Rpb24qIGZvb3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9vdDsgfQorICAgIFJlbmRlclRh
YmxlU2VjdGlvbiogZmlyc3RCb2R5KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdEJvZHk7IH0KIAog
ICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0U3Bhbik7CiAgICAgdm9pZCBh
cHBlbmRDb2x1bW4oaW50IHNwYW4pOwotICAgIGludCBudW1FZmZDb2xzKCkgY29uc3QgeyByZXR1
cm4gY29sdW1ucy5zaXplKCk7IH0KLSAgICBpbnQgc3Bhbk9mRWZmQ29sKGludCBlZmZDb2wpIGNv
bnN0IHsgcmV0dXJuIGNvbHVtbnNbZWZmQ29sXS5zcGFuOyB9CisgICAgaW50IG51bUVmZkNvbHMo
KSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnMuc2l6ZSgpOyB9CisgICAgaW50IHNwYW5PZkVmZkNv
bChpbnQgZWZmQ29sKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbnNbZWZmQ29sXS5zcGFuOyB9CiAg
ICAgCiAgICAgaW50IGNvbFRvRWZmQ29sKGludCBjb2wpIGNvbnN0CiAgICAgewogICAgICAgICBp
bnQgaSA9IDA7CiAgICAgICAgIGludCBlZmZDb2wgPSBudW1FZmZDb2xzKCk7CiAgICAgICAgIGZv
ciAoaW50IGMgPSAwOyBjIDwgY29sICYmIGkgPCBlZmZDb2w7ICsraSkKLSAgICAgICAgICAgIGMg
Kz0gY29sdW1uc1tpXS5zcGFuOworICAgICAgICAgICAgYyArPSBtX2NvbHVtbnNbaV0uc3BhbjsK
ICAgICAgICAgcmV0dXJuIGk7CiAgICAgfQogICAgIApAQCAtMTQ4LDE5ICsxNTEsMjAgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgaW50IGMgPSAwOwogICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGVmZkNvbDsgaSsrKQotICAgICAgICAgICAgYyArPSBjb2x1bW5zW2ldLnNwYW47CisgICAg
ICAgICAgICBjICs9IG1fY29sdW1uc1tpXS5zcGFuOwogICAgICAgICByZXR1cm4gYzsKICAgICB9
CiAKLSAgICBpbnQgYm9yZGVyc1BhZGRpbmdBbmRTcGFjaW5nKCkgY29uc3QgewotICAgICAgICBy
ZXR1cm4gYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIAorICAgIGludCBib3JkZXJzUGFk
ZGluZ0FuZFNwYWNpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJvcmRlckxlZnQo
KSArIGJvcmRlclJpZ2h0KCkgKwogICAgICAgICAgICAgICAgKGNvbGxhcHNlQm9yZGVycygpID8g
MCA6IChwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCkgKyAobnVtRWZmQ29scygpICsgMSkg
KiBoQm9yZGVyU3BhY2luZygpKSk7CiAgICAgfQogCiAgICAgUmVuZGVyVGFibGVDb2wqIGNvbEVs
ZW1lbnQoaW50IGNvbCkgY29uc3Q7CiAKLSAgICBib29sIG5lZWRzU2VjdGlvblJlY2FsYygpIGNv
bnN0IHsgcmV0dXJuIG5lZWRTZWN0aW9uUmVjYWxjOyB9Ci0gICAgdm9pZCBzZXROZWVkU2VjdGlv
blJlY2FsYygpIHsgbmVlZFNlY3Rpb25SZWNhbGMgPSB0cnVlOyB9CisgICAgYm9vbCBuZWVkc1Nl
Y3Rpb25SZWNhbGMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzU2VjdGlvblJlY2FsYzsgfQorICAg
IHZvaWQgc2V0TmVlZHNTZWN0aW9uUmVjYWxjKCkgeyBtX25lZWRzU2VjdGlvblJlY2FsYyA9IHRy
dWU7IH0KIAogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0Kik7CiAKQEAgLTE3NCw0MCArMTc4LDQ4IEBAIHB1YmxpYzoKICAKICAgICBDb2xsYXBz
ZWRCb3JkZXJWYWx1ZSogY3VycmVudEJvcmRlclN0eWxlKCkgeyByZXR1cm4gbV9jdXJyZW50Qm9y
ZGVyOyB9CiAgICAgCi0gICAgYm9vbCBoYXNTZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIGhlYWQg
fHwgZm9vdCB8fCBmaXJzdEJvZHk7IH0KKyAgICBib29sIGhhc1NlY3Rpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9oZWFkIHx8IG1fZm9vdCB8fCBtX2ZpcnN0Qm9keTsgfQogCiAgICAgdmlydHVhbCBJ
bnRSZWN0IGdldE92ZXJmbG93Q2xpcFJlY3QoaW50IHR4LCBpbnQgdHkpOwogCi0gICAgdm9pZCBy
ZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CisgICAgdm9pZCByZWNhbGNTZWN0aW9uc0lmTmVlZGVk
KCkKKyAgICB7CisgICAgICAgIGlmIChtX25lZWRzU2VjdGlvblJlY2FsYykKKyAgICAgICAgICAg
IHJlY2FsY1NlY3Rpb25zKCk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIHZpcnR1YWwg
dm9pZCBkdW1wKFRleHRTdHJlYW0qLCBEZXByZWNhdGVkU3RyaW5nIGluZCA9ICIiKSBjb25zdDsK
KyNlbmRpZgogCiBwcml2YXRlOgogICAgIHZvaWQgcmVjYWxjU2VjdGlvbnMoKTsKIAotICAgIGZy
aWVuZCBjbGFzcyBBdXRvVGFibGVMYXlvdXQ7Ci0gICAgZnJpZW5kIGNsYXNzIEZpeGVkVGFibGVM
YXlvdXQ7CisgICAgVmVjdG9yPGludD4gbV9jb2x1bW5Qb3M7CisgICAgVmVjdG9yPENvbHVtblN0
cnVjdD4gbV9jb2x1bW5zOwogCi0gICAgUmVuZGVyQmxvY2sqIHRDYXB0aW9uOwotICAgIFJlbmRl
clRhYmxlU2VjdGlvbiogaGVhZDsKLSAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGZvb3Q7Ci0gICAg
UmVuZGVyVGFibGVTZWN0aW9uKiBmaXJzdEJvZHk7CisgICAgUmVuZGVyQmxvY2sqIG1fY2FwdGlv
bjsKKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIG1faGVhZDsKKyAgICBSZW5kZXJUYWJsZVNlY3Rp
b24qIG1fZm9vdDsKKyAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIG1fZmlyc3RCb2R5OwogCi0gICAg
VGFibGVMYXlvdXQqIHRhYmxlTGF5b3V0OworICAgIFRhYmxlTGF5b3V0KiBtX3RhYmxlTGF5b3V0
OwogCiAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUqIG1fY3VycmVudEJvcmRlcjsKICAgICAKLSAg
ICB1bnNpZ25lZCBmcmFtZSA6IDQ7IC8vIEZyYW1lCi0gICAgdW5zaWduZWQgcnVsZXMgOiA0OyAv
LyBSdWxlcworICAgIHVuc2lnbmVkIG1fZnJhbWUgOiA0OyAvLyBGcmFtZQorICAgIHVuc2lnbmVk
IG1fcnVsZXMgOiA0OyAvLyBSdWxlcwogCi0gICAgYm9vbCBoYXNfY29sX2VsZW1zIDogMTsKLSAg
ICB1bnNpZ25lZCBwYWRkaW5nIDogMjI7Ci0gICAgYm9vbCBuZWVkU2VjdGlvblJlY2FsYyA6IDE7
CisgICAgYm9vbCBtX2hhc0NvbEVsZW1lbnRzIDogMTsKKyAgICB1bnNpZ25lZCBtX3BhZGRpbmcg
OiAyMjsKKyAgICBib29sIG1fbmVlZHNTZWN0aW9uUmVjYWxjIDogMTsKICAgICAKLSAgICBzaG9y
dCBoc3BhY2luZzsKLSAgICBzaG9ydCB2c3BhY2luZzsKLSAgICBpbnQgbV9ib3JkZXJSaWdodDsK
KyAgICBzaG9ydCBtX2hTcGFjaW5nOworICAgIHNob3J0IG1fdlNwYWNpbmc7CiAgICAgaW50IG1f
Ym9yZGVyTGVmdDsKKyAgICBpbnQgbV9ib3JkZXJSaWdodDsKIH07CiAKLX0KK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyVGFibGVfaApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAxODU3NCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkg
KzI4LDkgQEAKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNvbC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKQEAgLTM5LDQwICszOSw0MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVJlbmRlclRhYmxlQ2VsbDo6UmVuZGVyVGFibGVDZWxs
KE5vZGUqIF9ub2RlKQotICA6IFJlbmRlckJsb2NrKF9ub2RlKQorUmVuZGVyVGFibGVDZWxsOjpS
ZW5kZXJUYWJsZUNlbGwoTm9kZSogbm9kZSkKKyAgICA6IFJlbmRlckJsb2NrKG5vZGUpCisgICAg
LCBtX3JvdygtMSkKKyAgICAsIG1fY29sdW1uKC0xKQorICAgICwgbV9yb3dTcGFuKDEpCisgICAg
LCBtX2NvbHVtblNwYW4oMSkKKyAgICAsIG1fdG9wRXh0cmEoMCkKKyAgICAsIG1fYm90dG9tRXh0
cmEoMCkKKyAgICAsIG1fd2lkdGhDaGFuZ2VkKGZhbHNlKQorICAgICwgbV9wZXJjZW50YWdlSGVp
Z2h0KDApCiB7Ci0gIF9jb2wgPSAtMTsKLSAgX3JvdyA9IC0xOwotICBjU3BhbiA9IHJTcGFuID0g
MTsKLSAgdXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgc2V0U2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JC
b3JkZXIodHJ1ZSk7Ci0gIF90b3BFeHRyYSA9IDA7Ci0gIF9ib3R0b21FeHRyYSA9IDA7Ci0gIG1f
cGVyY2VudGFnZUhlaWdodCA9IDA7Ci0gIG1fd2lkdGhDaGFuZ2VkID0gZmFsc2U7CisgICAgdXBk
YXRlRnJvbUVsZW1lbnQoKTsKKyAgICBzZXRTaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcigp
OwogfQogCiB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6ZGVzdHJveSgpCiB7CiAgICAgaWYgKHBhcmVu
dCgpICYmIHNlY3Rpb24oKSkKLSAgICAgICAgc2VjdGlvbigpLT5zZXROZWVkQ2VsbFJlY2FsYygp
OworICAgICAgICBzZWN0aW9uKCktPnNldE5lZWRzQ2VsbFJlY2FsYygpOwogCiAgICAgUmVuZGVy
QmxvY2s6OmRlc3Ryb3koKTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUZyb21F
bGVtZW50KCkKIHsKLSAgICBpbnQgb2xkUlNwYW4gPSByU3BhbjsKLSAgICBpbnQgb2xkQ1NwYW4g
PSBjU3BhbjsKICAgICBOb2RlKiBub2RlID0gZWxlbWVudCgpOwogICAgIGlmIChub2RlICYmIChu
b2RlLT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHRoVGFnKSkpIHsKICAg
ICAgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHRjID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2Vs
bEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgY1NwYW4gPSB0Yy0+Y29sU3BhbigpOwotICAgICAg
ICByU3BhbiA9IHRjLT5yb3dTcGFuKCk7CisgICAgICAgIGludCBvbGRSU3BhbiA9IG1fcm93U3Bh
bjsKKyAgICAgICAgaW50IG9sZENTcGFuID0gbV9jb2x1bW5TcGFuOworCisgICAgICAgIG1fY29s
dW1uU3BhbiA9IHRjLT5jb2xTcGFuKCk7CisgICAgICAgIG1fcm93U3BhbiA9IHRjLT5yb3dTcGFu
KCk7CisgICAgICAgIGlmICgob2xkUlNwYW4gIT0gbV9yb3dTcGFuIHx8IG9sZENTcGFuICE9IG1f
Y29sdW1uU3BhbikgJiYgc3R5bGUoKSAmJiBwYXJlbnQoKSkKKyAgICAgICAgICAgIHNldE5lZWRz
TGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CiAgICAgfQotICAgIGlmICgob2xkUlNwYW4gIT0gclNw
YW4gfHwgb2xkQ1NwYW4gIT0gY1NwYW4pICYmIHN0eWxlKCkgJiYgcGFyZW50KCkpCi0gICAgICAg
IHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CiB9CiAKIExlbmd0aCBSZW5kZXJUYWJs
ZUNlbGw6OnN0eWxlT3JDb2xXaWR0aCgpCkBAIC04MCw5ICs4Miw5IEBAIExlbmd0aCBSZW5kZXJU
YWJsZUNlbGw6OnN0eWxlT3JDb2xXaWR0aCgKICAgICBMZW5ndGggdyA9IHN0eWxlKCktPndpZHRo
KCk7CiAgICAgaWYgKGNvbFNwYW4oKSA+IDEgfHwgIXcuaXNBdXRvKCkpCiAgICAgICAgIHJldHVy
biB3OwotICAgIFJlbmRlclRhYmxlQ29sKiBjb2wgPSB0YWJsZSgpLT5jb2xFbGVtZW50KF9jb2wp
OwotICAgIGlmIChjb2wpIHsKLSAgICAgICAgdyA9IGNvbC0+c3R5bGUoKS0+d2lkdGgoKTsKKyAg
ICBSZW5kZXJUYWJsZUNvbCogdGFibGVDb2wgPSB0YWJsZSgpLT5jb2xFbGVtZW50KGNvbCgpKTsK
KyAgICBpZiAodGFibGVDb2wpIHsKKyAgICAgICAgdyA9IHRhYmxlQ29sLT5zdHlsZSgpLT53aWR0
aCgpOwogICAgICAgICAKICAgICAgICAgLy8gQ29sdW1uIHdpZHRocyBzcGVjaWZpZWQgb24gPGNv
bD4gYXBwbHkgdG8gdGhlIGJvcmRlciBib3ggb2YgdGhlIGNlbGwuCiAgICAgICAgIC8vIFBlcmNl
bnRhZ2VzIGRvbid0IG5lZWQgdG8gYmUgaGFuZGxlZCBzaW5jZSB0aGV5J3JlIGFsd2F5cyB0cmVh
dGVkIHRoaXMgd2F5IChldmVuIHdoZW4gc3BlY2lmaWVkIG9uIHRoZSBjZWxscykuCkBAIC0xODEs
MjIgKzE4MywyMiBAQCBJbnRSZWN0IFJlbmRlclRhYmxlQ2VsbDo6Z2V0QWJzb2x1dGVSZXBhCiAg
ICAgcmV0dXJuIFJlbmRlckJsb2NrOjpnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCk7CiB9CiAKLXZv
aWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiBy
LCBib29sIGYpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJl
Y3QoSW50UmVjdCYgciwgYm9vbCBmaXhlZCkKIHsKLSAgICByLnNldFkoci55KCkgKyBfdG9wRXh0
cmEpOworICAgIHIuc2V0WShyLnkoKSArIG1fdG9wRXh0cmEpOwogICAgIHIubW92ZSgtcGFyZW50
KCktPnhQb3MoKSwgLXBhcmVudCgpLT55UG9zKCkpOyAvLyBSb3dzIGFyZSBpbiB0aGUgc2FtZSBj
b29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgotICAgIFJlbmRl
ckJsb2NrOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyLCBmKTsKKyAgICBSZW5kZXJCbG9j
azo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QociwgZml4ZWQpOwogfQogCi1ib29sIFJlbmRl
clRhYmxlQ2VsbDo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQb3MsIGludCAmeVBvcywgYm9vbCBm
KQorYm9vbCBSZW5kZXJUYWJsZUNlbGw6OmFic29sdXRlUG9zaXRpb24oaW50JiB4UG9zLCBpbnQm
IHlQb3MsIGJvb2wgZml4ZWQpCiB7Ci0gICAgYm9vbCByZXN1bHQgPSBSZW5kZXJCbG9jazo6YWJz
b2x1dGVQb3NpdGlvbih4UG9zLCB5UG9zLCBmKTsKKyAgICBib29sIHJlc3VsdCA9IFJlbmRlckJs
b2NrOjphYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGZpeGVkKTsKICAgICB4UG9zIC09IHBh
cmVudCgpLT54UG9zKCk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3BhY2Us
IHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCiAgICAgeVBvcyAtPSBwYXJlbnQoKS0+eVBv
cygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXNob3J0IFJlbmRlclRhYmxlQ2VsbDo6YmFz
ZWxpbmVQb3NpdGlvbihib29sKSBjb25zdAorc2hvcnQgUmVuZGVyVGFibGVDZWxsOjpiYXNlbGlu
ZVBvc2l0aW9uKGJvb2wgLypmaXJzdExpbmUqLywgYm9vbCAvKmlzUm9vdExpbmVCb3gqLykgY29u
c3QKIHsKICAgICBSZW5kZXJPYmplY3QqIG8gPSBmaXJzdENoaWxkKCk7CiAgICAgaW50IG9mZnNl
dCA9IHBhZGRpbmdUb3AoKSArIGJvcmRlclRvcCgpOwpAQCAtMjE2LDE3ICsyMTgsMTcgQEAgc2hv
cnQgUmVuZGVyVGFibGVDZWxsOjpiYXNlbGluZVBvc2l0aW9uKAogICAgIHJldHVybiBvZmZzZXQ7
CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVDZWxsOjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqbmV3U3R5
bGUpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxl
KQogewogICAgIGlmIChwYXJlbnQoKSAmJiBzZWN0aW9uKCkgJiYgc3R5bGUoKSAmJiBzdHlsZSgp
LT5oZWlnaHQoKSAhPSBuZXdTdHlsZS0+aGVpZ2h0KCkpCi0gICAgICAgIHNlY3Rpb24oKS0+c2V0
TmVlZENlbGxSZWNhbGMoKTsKKyAgICAgICAgc2VjdGlvbigpLT5zZXROZWVkc0NlbGxSZWNhbGMo
KTsKIAogICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwogCiAgICAgaWYgKG5l
d1N0eWxlLT53aGl0ZVNwYWNlKCkgPT0gS0hUTUxfTk9XUkFQKSB7CiAgICAgICAgIC8vIEZpZ3Vy
ZSBvdXQgaWYgd2UgYXJlIHJlYWxseSBub3dyYXBwaW5nIG9yIGlmIHdlIHNob3VsZCBqdXN0CiAg
ICAgICAgIC8vIHVzZSBub3JtYWwgaW5zdGVhZC4gIElmIHRoZSB3aWR0aCBvZiB0aGUgY2VsbCBp
cyBmaXhlZCwgdGhlbgotICAgICAgICAvLyB3ZSBkb24ndCBhY3R1YWxseSB1c2UgTk9XUkFQLiAK
KyAgICAgICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIE5PV1JBUC4KICAgICAgICAgaWYgKG5l
d1N0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSkKICAgICAgICAgICAgIG5ld1N0eWxlLT5zZXRXaGl0
ZVNwYWNlKE5PUk1BTCk7CiAgICAgICAgIGVsc2UKQEAgLTIzNCw3ICsyMzYsNyBAQCB2b2lkIFJl
bmRlclRhYmxlQ2VsbDo6c2V0U3R5bGUoUmVuZGVyU3R5CiAgICAgfQogCiAgICAgUmVuZGVyQmxv
Y2s6OnNldFN0eWxlKG5ld1N0eWxlKTsKLSAgICBzZXRTaG91bGRQYWludEJhY2tncm91bmRPckJv
cmRlcih0cnVlKTsKKyAgICBzZXRTaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcigpOwogfQog
CiBib29sIFJlbmRlclRhYmxlQ2VsbDo6cmVxdWlyZXNMYXllcigpCkBAIC0yNTUsMjEgKzI1Nywy
NCBAQCBib29sIFJlbmRlclRhYmxlQ2VsbDo6cmVxdWlyZXNMYXllcigpCiAvLyAoNCkgSWYgYm9y
ZGVyIHN0eWxlcyBkaWZmZXIgb25seSBpbiBjb2xvciwgdGhlbiBhIHN0eWxlIHNldCBvbiBhIGNl
bGwgd2lucyBvdmVyIG9uZSBvbiBhIHJvdywgCiAvLyB3aGljaCB3aW5zIG92ZXIgYSByb3cgZ3Jv
dXAsIGNvbHVtbiwgY29sdW1uIGdyb3VwIGFuZCwgbGFzdGx5LCB0YWJsZS4gSXQgaXMgdW5kZWZp
bmVkIHdoaWNoIGNvbG9yIAogLy8gaXMgdXNlZCB3aGVuIHR3byBlbGVtZW50cyBvZiB0aGUgc2Ft
ZSB0eXBlIGRpc2FncmVlLgotc3RhdGljIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbXBhcmVCb3Jk
ZXJzKGNvbnN0IENvbGxhcHNlZEJvcmRlclZhbHVlJiBib3JkZXIxLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYg
Ym9yZGVyMikKK3N0YXRpYyBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb21wYXJlQm9yZGVycyhjb25z
dCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSYgYm9yZGVyMSwgY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFs
dWUmIGJvcmRlcjIpCiB7CiAgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSB2YWx1ZXMgcGFzc2VkIGlu
LiAgSWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiB0aGUgb3RoZXIuCi0gICAgaWYgKCFib3JkZXIy
LmV4aXN0cygpKSByZXR1cm4gYm9yZGVyMTsKLSAgICBpZiAoIWJvcmRlcjEuZXhpc3RzKCkpIHJl
dHVybiBib3JkZXIyOwotICAgIAorICAgIGlmICghYm9yZGVyMi5leGlzdHMoKSkKKyAgICAgICAg
cmV0dXJuIGJvcmRlcjE7CisgICAgaWYgKCFib3JkZXIxLmV4aXN0cygpKQorICAgICAgICByZXR1
cm4gYm9yZGVyMjsKKwogICAgIC8vIFJ1bGUgIzEgYWJvdmUuCiAgICAgaWYgKGJvcmRlcjEuc3R5
bGUoKSA9PSBCSElEREVOIHx8IGJvcmRlcjIuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICBy
ZXR1cm4gQ29sbGFwc2VkQm9yZGVyVmFsdWUoKTsgLy8gTm8gYm9yZGVyIHNob3VsZCBleGlzdCBh
dCB0aGlzIGxvY2F0aW9uLgogICAgIAogICAgIC8vIFJ1bGUgIzIgYWJvdmUuICBBIHN0eWxlIG9m
ICdub25lJyBoYXMgbG93ZXN0IHByaW9yaXR5IGFuZCBhbHdheXMgbG9zZXMgdG8gYW55IG90aGVy
IGJvcmRlci4KLSAgICBpZiAoYm9yZGVyMi5zdHlsZSgpID09IEJOT05FKSByZXR1cm4gYm9yZGVy
MTsKLSAgICBpZiAoYm9yZGVyMS5zdHlsZSgpID09IEJOT05FKSByZXR1cm4gYm9yZGVyMjsKLSAg
ICAKKyAgICBpZiAoYm9yZGVyMi5zdHlsZSgpID09IEJOT05FKQorICAgICAgICByZXR1cm4gYm9y
ZGVyMTsKKyAgICBpZiAoYm9yZGVyMS5zdHlsZSgpID09IEJOT05FKQorICAgICAgICByZXR1cm4g
Ym9yZGVyMjsKKwogICAgIC8vIFRoZSBmaXJzdCBwYXJ0IG9mIHJ1bGUgIzMgYWJvdmUuIFdpZGVy
IGJvcmRlcnMgd2luLgogICAgIGlmIChib3JkZXIxLndpZHRoKCkgIT0gYm9yZGVyMi53aWR0aCgp
KQogICAgICAgICByZXR1cm4gYm9yZGVyMS53aWR0aCgpID4gYm9yZGVyMi53aWR0aCgpID8gYm9y
ZGVyMSA6IGJvcmRlcjI7CkBAIC00MzgsNyArNDQzLDcgQEAgQ29sbGFwc2VkQm9yZGVyVmFsdWUg
UmVuZGVyVGFibGVDZWxsOjpjbwogICAgIAogICAgIC8vIE5vdyBjaGVjayByb3cgZ3JvdXBzLgog
ICAgIFJlbmRlclRhYmxlU2VjdGlvbiogY3VyclNlY3Rpb24gPSBzZWN0aW9uKCk7Ci0gICAgaWYg
KHJvdygpID09IDApIHsKKyAgICBpZiAoIXJvdygpKSB7CiAgICAgICAgIC8vICg1KSBPdXIgcm93
IGdyb3VwJ3MgdG9wIGJvcmRlci4KICAgICAgICAgcmVzdWx0ID0gY29tcGFyZUJvcmRlcnMocmVz
dWx0LCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSgmY3VyclNlY3Rpb24tPnN0eWxlKCktPmJvcmRlclRv
cCgpLCBCUk9XR1JPVVApKTsKICAgICAgICAgaWYgKCFyZXN1bHQuZXhpc3RzKCkpCkBAIC01OTMs
MzEgKzU5OCwzMyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnQoUGFpbnRJbmZvJiBwCiAK
ICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRl
cnMgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAgaWYgKHR5
IC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJUb3AoKSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSAr
IG9zIHx8Ci0gICAgICAgICAgICAgICAgdHkgKyBfdG9wRXh0cmEgKyBtX2hlaWdodCArIF9ib3R0
b21FeHRyYSArIHRhYmxlKCktPm91dGVyQm9yZGVyQm90dG9tKCkgPD0gcGFpbnRJbmZvLnJlY3Qu
eSgpIC0gb3MpCisgICAgICAgICAgICAgICAgdHkgKyBtX3RvcEV4dHJhICsgbV9oZWlnaHQgKyBt
X2JvdHRvbUV4dHJhICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA8PSBwYWludEluZm8u
cmVjdC55KCkgLSBvcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaW50IHcgPSB3aWR0
aCgpOwogICAgICAgICBpbnQgaCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRl
ckJvdHRvbUV4dHJhKCk7CiAgICAgICAgIHBhaW50Q29sbGFwc2VkQm9yZGVyKHBhaW50SW5mby5j
b250ZXh0LCB0eCwgdHksIHcsIGgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh0eSA+PSBw
YWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8IHR5ICsgX3RvcEV4dHJhICsgbV9oZWlnaHQg
KyBfYm90dG9tRXh0cmEgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCisgICAgICAgIGlmICh0
eSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8IHR5ICsgbV90b3BFeHRyYSArIG1f
aGVpZ2h0ICsgbV9ib3R0b21FeHRyYSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50SW5m
bywgdHgsIHR5ICsgX3RvcEV4dHJhKTsKKyAgICAgICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0
KHBhaW50SW5mbywgdHgsIHR5ICsgbV90b3BFeHRyYSk7CiAgICAgfQogfQogCiBzdGF0aWMgRUJv
cmRlclN0eWxlIGNvbGxhcHNlZEJvcmRlclN0eWxlKEVCb3JkZXJTdHlsZSBzdHlsZSkKIHsKICAg
ICBpZiAoc3R5bGUgPT0gT1VUU0VUKQotICAgICAgICBzdHlsZSA9IEdST09WRTsKLSAgICBlbHNl
IGlmIChzdHlsZSA9PSBJTlNFVCkKLSAgICAgICAgc3R5bGUgPSBSSURHRTsKKyAgICAgICAgcmV0
dXJuIEdST09WRTsKKyAgICBpZiAoc3R5bGUgPT0gSU5TRVQpCisgICAgICAgIHJldHVybiBSSURH
RTsKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKIHN0cnVjdCBDb2xsYXBzZWRCb3JkZXIgewotICAg
IENvbGxhcHNlZEJvcmRlcigpe30KKyAgICBDb2xsYXBzZWRCb3JkZXIoKQorICAgIHsKKyAgICB9
CiAgICAgCi0gICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9yZGVyOworICAgIENvbGxhcHNlZEJv
cmRlclZhbHVlIGJvcmRlclZhbHVlOwogICAgIFJlbmRlck9iamVjdDo6Qm9yZGVyU2lkZSBzaWRl
OwogICAgIGJvb2wgc2hvdWxkUGFpbnQ7CiAgICAgaW50IHgxOwpAQCAtNjI3LDQxICs2MzQsNDMg
QEAgc3RydWN0IENvbGxhcHNlZEJvcmRlciB7CiAgICAgRUJvcmRlclN0eWxlIHN0eWxlOwogfTsK
IAotY2xhc3MgQ29sbGFwc2VkQm9yZGVycwoteworY2xhc3MgQ29sbGFwc2VkQm9yZGVycyB7CiBw
dWJsaWM6Ci0gICAgQ29sbGFwc2VkQm9yZGVycyhpbnQgaSkgOmNvdW50KDApIHt9CisgICAgQ29s
bGFwc2VkQm9yZGVycygpCisgICAgICAgIDogbV9jb3VudCgwKQorICAgIHsKKyAgICB9CiAgICAg
Ci0gICAgdm9pZCBhZGRCb3JkZXIoY29uc3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIGIsIFJlbmRl
ck9iamVjdDo6Qm9yZGVyU2lkZSBzLCBib29sIHBhaW50LCAKLSAgICAgICAgICAgICAgICAgICBp
bnQgX3gxLCBpbnQgX3kxLCBpbnQgX3gyLCBpbnQgX3kyLAotICAgICAgICAgICAgICAgICAgIEVC
b3JkZXJTdHlsZSBfc3R5bGUpCisgICAgdm9pZCBhZGRCb3JkZXIoY29uc3QgQ29sbGFwc2VkQm9y
ZGVyVmFsdWUmIGJvcmRlclZhbHVlLCBSZW5kZXJPYmplY3Q6OkJvcmRlclNpZGUgYm9yZGVyU2lk
ZSwgYm9vbCBzaG91bGRQYWludCwKKyAgICAgICAgICAgICAgICAgICBpbnQgeDEsIGludCB5MSwg
aW50IHgyLCBpbnQgeTIsIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSkKICAgICB7Ci0gICAgICAg
IGlmIChiLmV4aXN0cygpICYmIHBhaW50KSB7Ci0gICAgICAgICAgICBib3JkZXJzW2NvdW50XS5i
b3JkZXIgPSBiOwotICAgICAgICAgICAgYm9yZGVyc1tjb3VudF0uc2lkZSA9IHM7Ci0gICAgICAg
ICAgICBib3JkZXJzW2NvdW50XS5zaG91bGRQYWludCA9IHBhaW50OwotICAgICAgICAgICAgYm9y
ZGVyc1tjb3VudF0ueDEgPSBfeDE7Ci0gICAgICAgICAgICBib3JkZXJzW2NvdW50XS54MiA9IF94
MjsKLSAgICAgICAgICAgIGJvcmRlcnNbY291bnRdLnkxID0gX3kxOwotICAgICAgICAgICAgYm9y
ZGVyc1tjb3VudF0ueTIgPSBfeTI7Ci0gICAgICAgICAgICBib3JkZXJzW2NvdW50XS5zdHlsZSA9
IF9zdHlsZTsKLSAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIGlmIChib3JkZXJWYWx1ZS5l
eGlzdHMoKSAmJiBzaG91bGRQYWludCkgeworICAgICAgICAgICAgbV9ib3JkZXJzW21fY291bnRd
LmJvcmRlclZhbHVlID0gYm9yZGVyVmFsdWU7CisgICAgICAgICAgICBtX2JvcmRlcnNbbV9jb3Vu
dF0uc2lkZSA9IGJvcmRlclNpZGU7CisgICAgICAgICAgICBtX2JvcmRlcnNbbV9jb3VudF0uc2hv
dWxkUGFpbnQgPSBzaG91bGRQYWludDsKKyAgICAgICAgICAgIG1fYm9yZGVyc1ttX2NvdW50XS54
MSA9IHgxOworICAgICAgICAgICAgbV9ib3JkZXJzW21fY291bnRdLngyID0geDI7CisgICAgICAg
ICAgICBtX2JvcmRlcnNbbV9jb3VudF0ueTEgPSB5MTsKKyAgICAgICAgICAgIG1fYm9yZGVyc1tt
X2NvdW50XS55MiA9IHkyOworICAgICAgICAgICAgbV9ib3JkZXJzW21fY291bnRdLnN0eWxlID0g
Ym9yZGVyU3R5bGU7CisgICAgICAgICAgICBtX2NvdW50Kys7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBDb2xsYXBzZWRCb3JkZXIqIG5leHRCb3JkZXIoKSB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGJvcmRlcnNbaV0uYm9yZGVy
LmV4aXN0cygpICYmIGJvcmRlcnNbaV0uc2hvdWxkUGFpbnQpIHsKLSAgICAgICAgICAgICAgICBi
b3JkZXJzW2ldLnNob3VsZFBhaW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZi
b3JkZXJzW2ldOworICAgIENvbGxhcHNlZEJvcmRlciogbmV4dEJvcmRlcigpCisgICAgeworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYg
KG1fYm9yZGVyc1tpXS5ib3JkZXJWYWx1ZS5leGlzdHMoKSAmJiBtX2JvcmRlcnNbaV0uc2hvdWxk
UGFpbnQpIHsKKyAgICAgICAgICAgICAgICBtX2JvcmRlcnNbaV0uc2hvdWxkUGFpbnQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJm1fYm9yZGVyc1tpXTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAg
IENvbGxhcHNlZEJvcmRlciBib3JkZXJzWzRdOwotICAgIGludCBjb3VudDsKKyAgICBDb2xsYXBz
ZWRCb3JkZXIgbV9ib3JkZXJzWzRdOworICAgIGludCBtX2NvdW50OwogfTsKIAogc3RhdGljIHZv
aWQgYWRkQm9yZGVyU3R5bGUoRGVwcmVjYXRlZFZhbHVlTGlzdDxDb2xsYXBzZWRCb3JkZXJWYWx1
ZT4mIGJvcmRlclN0eWxlcywgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9yZGVyVmFsdWUpCkBAIC02
OTEsNyArNzAwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNvbGxlY3RCb3JkZXJzKERlcAog
ICAgIGFkZEJvcmRlclN0eWxlKGJvcmRlclN0eWxlcywgY29sbGFwc2VkQm90dG9tQm9yZGVyKCkp
OwogfQogCi12b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhp
Y3NDb250ZXh0KiBwLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgdywgaW50IGgpCit2b2lkIFJlbmRl
clRhYmxlQ2VsbDo6cGFpbnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgpCiB7CiAgICAgaWYgKCF0YWJs
ZSgpLT5jdXJyZW50Qm9yZGVyU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzA4LDM4ICs3
MTcsMzMgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZAogICAgIGlu
dCBsZWZ0V2lkdGggPSBsZWZ0VmFsLndpZHRoKCk7CiAgICAgaW50IHJpZ2h0V2lkdGggPSByaWdo
dFZhbC53aWR0aCgpOwogICAgIAotICAgIF90eCAtPSBsZWZ0V2lkdGggLyAyOwotICAgIF90eSAt
PSB0b3BXaWR0aCAvIDI7CisgICAgdHggLT0gbGVmdFdpZHRoIC8gMjsKKyAgICB0eSAtPSB0b3BX
aWR0aCAvIDI7CiAgICAgdyArPSBsZWZ0V2lkdGggLyAyICsgKHJpZ2h0V2lkdGggKyAxKSAvIDI7
CiAgICAgaCArPSB0b3BXaWR0aCAvIDIgKyAoYm90dG9tV2lkdGggKyAxKSAvIDI7CiAgICAgCi0g
ICAgYm9vbCB0dCA9IHRvcFZhbC5pc1RyYW5zcGFyZW50KCk7Ci0gICAgYm9vbCBidCA9IGJvdHRv
bVZhbC5pc1RyYW5zcGFyZW50KCk7Ci0gICAgYm9vbCBydCA9IHJpZ2h0VmFsLmlzVHJhbnNwYXJl
bnQoKTsKLSAgICBib29sIGx0ID0gbGVmdFZhbC5pc1RyYW5zcGFyZW50KCk7Ci0gICAgCi0gICAg
RUJvcmRlclN0eWxlIHRzID0gY29sbGFwc2VkQm9yZGVyU3R5bGUodG9wVmFsLnN0eWxlKCkpOwot
ICAgIEVCb3JkZXJTdHlsZSBicyA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKGJvdHRvbVZhbC5zdHls
ZSgpKTsKLSAgICBFQm9yZGVyU3R5bGUgbHMgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZShsZWZ0VmFs
LnN0eWxlKCkpOwotICAgIEVCb3JkZXJTdHlsZSBycyA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKHJp
Z2h0VmFsLnN0eWxlKCkpOwotICAgIAotICAgIGJvb2wgcmVuZGVyX3QgPSB0cyA+IEJISURERU4g
JiYgIXR0OwotICAgIGJvb2wgcmVuZGVyX2wgPSBscyA+IEJISURERU4gJiYgIWx0OwotICAgIGJv
b2wgcmVuZGVyX3IgPSBycyA+IEJISURERU4gJiYgIXJ0OwotICAgIGJvb2wgcmVuZGVyX2IgPSBi
cyA+IEJISURERU4gJiYgIWJ0OworICAgIEVCb3JkZXJTdHlsZSB0b3BTdHlsZSA9IGNvbGxhcHNl
ZEJvcmRlclN0eWxlKHRvcFZhbC5zdHlsZSgpKTsKKyAgICBFQm9yZGVyU3R5bGUgYm90dG9tU3R5
bGUgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZShib3R0b21WYWwuc3R5bGUoKSk7CisgICAgRUJvcmRl
clN0eWxlIGxlZnRTdHlsZSA9IGNvbGxhcHNlZEJvcmRlclN0eWxlKGxlZnRWYWwuc3R5bGUoKSk7
CisgICAgRUJvcmRlclN0eWxlIHJpZ2h0U3R5bGUgPSBjb2xsYXBzZWRCb3JkZXJTdHlsZShyaWdo
dFZhbC5zdHlsZSgpKTsKKyAgICAKKyAgICBib29sIHJlbmRlclRvcCA9IHRvcFN0eWxlID4gQkhJ
RERFTiAmJiAhdG9wVmFsLmlzVHJhbnNwYXJlbnQoKTsKKyAgICBib29sIHJlbmRlckJvdHRvbSA9
IGJvdHRvbVN0eWxlID4gQkhJRERFTiAmJiAhYm90dG9tVmFsLmlzVHJhbnNwYXJlbnQoKTsKKyAg
ICBib29sIHJlbmRlckxlZnQgPSBsZWZ0U3R5bGUgPiBCSElEREVOICYmICFsZWZ0VmFsLmlzVHJh
bnNwYXJlbnQoKTsKKyAgICBib29sIHJlbmRlclJpZ2h0ID0gcmlnaHRTdHlsZSA+IEJISURERU4g
JiYgIXJpZ2h0VmFsLmlzVHJhbnNwYXJlbnQoKTsKIAogICAgIC8vIFdlIG5ldmVyIHBhaW50IGRp
YWdvbmFscyBhdCB0aGUgam9pbnMuICBXZSBzaW1wbHkgbGV0IHRoZSBib3JkZXIgd2l0aCB0aGUg
aGlnaGVzdAogICAgIC8vIHByZWNlZGVuY2UgcGFpbnQgb24gdG9wIG9mIGJvcmRlcnMgd2l0aCBs
b3dlciBwcmVjZWRlbmNlLiAgCi0gICAgQ29sbGFwc2VkQm9yZGVycyBib3JkZXJzKDQpOwotICAg
IGJvcmRlcnMuYWRkQm9yZGVyKHRvcFZhbCwgQlNUb3AsIHJlbmRlcl90LCBfdHgsIF90eSwgX3R4
ICsgdywgX3R5ICsgdG9wV2lkdGgsIHRzKTsKLSAgICBib3JkZXJzLmFkZEJvcmRlcihib3R0b21W
YWwsIEJTQm90dG9tLCByZW5kZXJfYiwgX3R4LCBfdHkgKyBoIC0gYm90dG9tV2lkdGgsIF90eCAr
IHcsIF90eSArIGgsIGJzKTsKLSAgICBib3JkZXJzLmFkZEJvcmRlcihsZWZ0VmFsLCBCU0xlZnQs
IHJlbmRlcl9sLCBfdHgsIF90eSwgX3R4ICsgbGVmdFdpZHRoLCBfdHkgKyBoLCBscyk7Ci0gICAg
Ym9yZGVycy5hZGRCb3JkZXIocmlnaHRWYWwsIEJTUmlnaHQsIHJlbmRlcl9yLCBfdHggKyB3IC0g
cmlnaHRXaWR0aCwgX3R5LCBfdHggKyB3LCBfdHkgKyBoLCBycyk7CisgICAgQ29sbGFwc2VkQm9y
ZGVycyBib3JkZXJzOworICAgIGJvcmRlcnMuYWRkQm9yZGVyKHRvcFZhbCwgQlNUb3AsIHJlbmRl
clRvcCwgdHgsIHR5LCB0eCArIHcsIHR5ICsgdG9wV2lkdGgsIHRvcFN0eWxlKTsKKyAgICBib3Jk
ZXJzLmFkZEJvcmRlcihib3R0b21WYWwsIEJTQm90dG9tLCByZW5kZXJCb3R0b20sIHR4LCB0eSAr
IGggLSBib3R0b21XaWR0aCwgdHggKyB3LCB0eSArIGgsIGJvdHRvbVN0eWxlKTsKKyAgICBib3Jk
ZXJzLmFkZEJvcmRlcihsZWZ0VmFsLCBCU0xlZnQsIHJlbmRlckxlZnQsIHR4LCB0eSwgdHggKyBs
ZWZ0V2lkdGgsIHR5ICsgaCwgbGVmdFN0eWxlKTsKKyAgICBib3JkZXJzLmFkZEJvcmRlcihyaWdo
dFZhbCwgQlNSaWdodCwgcmVuZGVyUmlnaHQsIHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5LCB0eCAr
IHcsIHR5ICsgaCwgcmlnaHRTdHlsZSk7CiAgICAgCiAgICAgZm9yIChDb2xsYXBzZWRCb3JkZXIq
IGJvcmRlciA9IGJvcmRlcnMubmV4dEJvcmRlcigpOyBib3JkZXI7IGJvcmRlciA9IGJvcmRlcnMu
bmV4dEJvcmRlcigpKSB7Ci0gICAgICAgIGlmIChib3JkZXItPmJvcmRlciA9PSAqdGFibGUoKS0+
Y3VycmVudEJvcmRlclN0eWxlKCkpCi0gICAgICAgICAgICBkcmF3Qm9yZGVyKHAsIGJvcmRlci0+
eDEsIGJvcmRlci0+eTEsIGJvcmRlci0+eDIsIGJvcmRlci0+eTIsIGJvcmRlci0+c2lkZSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci0+Ym9yZGVyLmNvbG9yKCksIHN0eWxlKCktPmNv
bG9yKCksIGJvcmRlci0+c3R5bGUsIDAsIDApOworICAgICAgICBpZiAoYm9yZGVyLT5ib3JkZXJW
YWx1ZSA9PSAqdGFibGUoKS0+Y3VycmVudEJvcmRlclN0eWxlKCkpCisgICAgICAgICAgICBkcmF3
Qm9yZGVyKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyLT54MSwgYm9yZGVyLT55MSwgYm9yZGVyLT54
MiwgYm9yZGVyLT55MiwgYm9yZGVyLT5zaWRlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgYm9y
ZGVyLT5ib3JkZXJWYWx1ZS5jb2xvcigpLCBzdHlsZSgpLT5jb2xvcigpLCBib3JkZXItPnN0eWxl
LCAwLCAwKTsKICAgICB9CiB9CiAKQEAgLTc1NCw3ICs3NTgsNyBAQCB2b2lkIFJlbmRlclRhYmxl
Q2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlCiAKICAgICBpZiAoYmFja2dyb3VuZE9iamVjdCAhPSB0
aGlzKSB7CiAgICAgICAgIHR4ICs9IG1feDsKLSAgICAgICAgdHkgKz0gbV95ICsgX3RvcEV4dHJh
OworICAgICAgICB0eSArPSBtX3kgKyBtX3RvcEV4dHJhOwogICAgIH0KIAogICAgIGludCB3ID0g
d2lkdGgoKTsKQEAgLTc3MSwxNSArNzc1LDE1IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWlu
dEJhY2tncm91bmRzQmUKICAgICBpZiAoYmdMYXllci0+aGFzSW1hZ2UoKSB8fCBjLmlzVmFsaWQo
KSkgewogICAgICAgICAvLyBXZSBoYXZlIHRvIGNsaXAgaGVyZSBiZWNhdXNlIHRoZSBiYWNrZ3Jv
dW5kIHdvdWxkIHBhaW50CiAgICAgICAgIC8vIG9uIHRvcCBvZiB0aGUgYm9yZGVycyBvdGhlcndp
c2UuICBUaGlzIG9ubHkgbWF0dGVycyBmb3IgY2VsbHMgYW5kIHJvd3MuCi0gICAgICAgIGJvb2wg
aGFzTGF5ZXIgPSBiYWNrZ3JvdW5kT2JqZWN0LT5sYXllcigpICYmIChiYWNrZ3JvdW5kT2JqZWN0
ID09IHRoaXMgfHwgYmFja2dyb3VuZE9iamVjdCA9PSBwYXJlbnQoKSk7Ci0gICAgICAgIGlmICho
YXNMYXllciAmJiB0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCkpIHsKKyAgICAgICAgYm9vbCBz
aG91bGRDbGlwID0gYmFja2dyb3VuZE9iamVjdC0+bGF5ZXIoKSAmJiAoYmFja2dyb3VuZE9iamVj
dCA9PSB0aGlzIHx8IGJhY2tncm91bmRPYmplY3QgPT0gcGFyZW50KCkpICYmIHRhYmxlRWx0LT5j
b2xsYXBzZUJvcmRlcnMoKTsKKyAgICAgICAgaWYgKHNob3VsZENsaXApIHsKICAgICAgICAgICAg
IEludFJlY3QgY2xpcFJlY3QodHggKyBib3JkZXJMZWZ0KCksIHR5ICsgYm9yZGVyVG9wKCksCiAg
ICAgICAgICAgICAgICAgdyAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGggLSBib3Jk
ZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5zYXZlKCk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChjbGlwUmVjdCk7
CiAgICAgICAgIH0KICAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKHBhaW50SW5mby5jb250ZXh0LCBj
LCBiZ0xheWVyLCBteSwgbWgsIHR4LCB0eSwgdywgaCk7Ci0gICAgICAgIGlmIChoYXNMYXllciAm
JiB0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCkpCisgICAgICAgIGlmIChzaG91bGRDbGlwKQog
ICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiB9CkBAIC03
OTMsMjUgKzc5NywyNSBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCb3hEZWNvcmF0aW9u
CiAgICAgLy8gUGFpbnQgb3VyIGNlbGwgYmFja2dyb3VuZC4KICAgICBwYWludEJhY2tncm91bmRz
QmVoaW5kQ2VsbChwYWludEluZm8sIHR4LCB0eSwgdGhpcyk7CiAKKyAgICBpZiAoIXN0eWxlKCkt
Pmhhc0JvcmRlcigpIHx8IHRhYmxlRWx0LT5jb2xsYXBzZUJvcmRlcnMoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgaW50IHcgPSB3aWR0aCgpOwogICAgIGludCBoID0gaGVpZ2h0KCkgKyBib3Jk
ZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKICAgICB0eSAtPSBib3JkZXJUb3BF
eHRyYSgpOwotCi0gICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlcigpICYmICF0YWJsZUVsdC0+Y29s
bGFwc2VCb3JkZXJzKCkpCi0gICAgICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0
eCwgdHksIHcsIGgsIHN0eWxlKCkpOworICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0
LCB0eCwgdHksIHcsIGgsIHN0eWxlKCkpOwogfQogCiAjaWZuZGVmIE5ERUJVRwotdm9pZCBSZW5k
ZXJUYWJsZUNlbGw6OmR1bXAoVGV4dFN0cmVhbSAqc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGlu
ZCkgY29uc3QKK3ZvaWQgUmVuZGVyVGFibGVDZWxsOjpkdW1wKFRleHRTdHJlYW0qIHN0cmVhbSwg
RGVwcmVjYXRlZFN0cmluZyBpbmQpIGNvbnN0CiB7Ci0gICAgKnN0cmVhbSA8PCAiIHJvdz0iIDw8
IF9yb3c7Ci0gICAgKnN0cmVhbSA8PCAiIGNvbD0iIDw8IF9jb2w7Ci0gICAgKnN0cmVhbSA8PCAi
IHJTcGFuPSIgPDwgclNwYW47Ci0gICAgKnN0cmVhbSA8PCAiIGNTcGFuPSIgPDwgY1NwYW47Ci0v
LyAgICAqc3RyZWFtIDw8ICIgbldyYXA9IiA8PCBuV3JhcDsKKyAgICAqc3RyZWFtIDw8ICIgcm93
PSIgPDwgcm93KCk7CisgICAgKnN0cmVhbSA8PCAiIGNvbD0iIDw8IGNvbCgpOworICAgICpzdHJl
YW0gPDwgIiByU3Bhbj0iIDw8IHJvd1NwYW4oKTsKKyAgICAqc3RyZWFtIDw8ICIgY1NwYW49IiA8
PCBjb2xTcGFuKCk7CiAKICAgICBSZW5kZXJCbG9jazo6ZHVtcChzdHJlYW0saW5kKTsKIH0KICNl
bmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaAkocmV2aXNpb24gMTg1NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJUYWJsZUNlbGxfSAot
I2RlZmluZSBSZW5kZXJUYWJsZUNlbGxfSAorI2lmbmRlZiBSZW5kZXJUYWJsZUNlbGxfaAorI2Rl
ZmluZSBSZW5kZXJUYWJsZUNlbGxfaAogCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgi
CiAKQEAgLTM1LDI1ICszNSwyOSBAQCBjbGFzcyBSZW5kZXJUYWJsZUNlbGwgOiBwdWJsaWMgUmVu
ZGVyQmxvCiBwdWJsaWM6CiAgICAgUmVuZGVyVGFibGVDZWxsKE5vZGUqKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95KCk7Ci0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCB7IHJldHVybiAiUmVuZGVyVGFibGVDZWxsIjsgfQorCiAgICAgdmlydHVhbCBib29s
IGlzVGFibGVDZWxsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKTsKKwogICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCBjZWxsSW5kZXgK
ICAgICBpbnQgY2VsbEluZGV4KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZvaWQgc2V0Q2Vs
bEluZGV4KGludCkgeyB9CiAKLSAgICBpbnQgY29sU3BhbigpIGNvbnN0IHsgcmV0dXJuIGNTcGFu
OyB9Ci0gICAgdm9pZCBzZXRDb2xTcGFuKGludCBjKSB7IGNTcGFuID0gYzsgfQorICAgIGludCBj
b2xTcGFuKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5TcGFuOyB9CisgICAgdm9pZCBzZXRDb2xT
cGFuKGludCBjKSB7IG1fY29sdW1uU3BhbiA9IGM7IH0KIAotICAgIGludCByb3dTcGFuKCkgY29u
c3QgeyByZXR1cm4gclNwYW47IH0KLSAgICB2b2lkIHNldFJvd1NwYW4oaW50IHIpIHsgclNwYW4g
PSByOyB9CisgICAgaW50IHJvd1NwYW4oKSBjb25zdCB7IHJldHVybiBtX3Jvd1NwYW47IH0KKyAg
ICB2b2lkIHNldFJvd1NwYW4oaW50IHIpIHsgbV9yb3dTcGFuID0gcjsgfQogCi0gICAgaW50IGNv
bCgpIGNvbnN0IHsgcmV0dXJuIF9jb2w7IH0KLSAgICB2b2lkIHNldENvbChpbnQgY29sKSB7IF9j
b2wgPSBjb2w7IH0KLSAgICBpbnQgcm93KCkgY29uc3QgeyByZXR1cm4gX3JvdzsgfQotICAgIHZv
aWQgc2V0Um93KGludCByKSB7IF9yb3cgPSByOyB9CisgICAgaW50IGNvbCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29sdW1uOyB9CisgICAgdm9pZCBzZXRDb2woaW50IGNvbCkgeyBtX2NvbHVtbiA9IGNv
bDsgfQorICAgIGludCByb3coKSBjb25zdCB7IHJldHVybiBtX3JvdzsgfQorICAgIHZvaWQgc2V0
Um93KGludCByb3cpIHsgbV9yb3cgPSByb3c7IH0KKworICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
c2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+
KHBhcmVudCgpLT5wYXJlbnQoKSk7IH0KKyAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBhcmVudCgpLT5wYXJlbnQoKS0+cGFy
ZW50KCkpOyB9CiAKICAgICBMZW5ndGggc3R5bGVPckNvbFdpZHRoKCk7CiAKQEAgLTg1LDQ5ICs4
OSw0MiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgCi0gICAgdm9pZCBzZXRDZWxsVG9wRXh0
cmEoaW50IHApIHsgX3RvcEV4dHJhID0gcDsgfQotICAgIHZvaWQgc2V0Q2VsbEJvdHRvbUV4dHJh
KGludCBwKSB7IF9ib3R0b21FeHRyYSA9IHA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hE
ZWNvcmF0aW9ucyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdm9pZCBwYWludENv
bGxhcHNlZEJvcmRlcihHcmFwaGljc0NvbnRleHQqLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg
aCk7Ci0gICAgCi0gICAgLy8gbGllIGFib3V0IHBvc2l0aW9uIHRvIG91dHNpZGUgb2JzZXJ2ZXJz
Ci0gICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0IHsgcmV0dXJuIG1feSArIF90b3BFeHRyYTsg
fQorICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHksIFJlbmRlck9iamVjdCogYmFja2dyb3VuZE9iamVjdCk7CisKKyAgICAvLyBMaWUg
YWJvdXQgcG9zaXRpb24gdG8gb3V0c2lkZSBvYnNlcnZlcnMuCisgICAgdmlydHVhbCBpbnQgeVBv
cygpIGNvbnN0IHsgcmV0dXJuIG1feSArIG1fdG9wRXh0cmE7IH0KIAogICAgIHZpcnR1YWwgSW50
UmVjdCBnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVB
YnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmLCBib29sIGY9ZmFsc2UpOwotICAgIHZpcnR1YWwg
Ym9vbCBhYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGYgPSBmYWxz
ZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3Qm
LCBib29sIGZpeGVkID0gZmFsc2UpOworICAgIHZpcnR1YWwgYm9vbCBhYnNvbHV0ZVBvc2l0aW9u
KGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkID0gZmFsc2UpOwogCi0gICAgdmlydHVh
bCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgPSBmYWxzZSkgY29uc3Q7CisgICAgdmlydHVh
bCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIGJvb2wgaXNS
b290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IGJvcmRlclRvcEV4
dHJhKCkgY29uc3QgeyByZXR1cm4gX3RvcEV4dHJhOyB9Ci0gICAgdmlydHVhbCBpbnQgYm9yZGVy
Qm90dG9tRXh0cmEoKSBjb25zdCB7IHJldHVybiBfYm90dG9tRXh0cmE7IH0KKyAgICB2b2lkIHNl
dENlbGxUb3BFeHRyYShpbnQgcCkgeyBtX3RvcEV4dHJhID0gcDsgfQorICAgIHZvaWQgc2V0Q2Vs
bEJvdHRvbUV4dHJhKGludCBwKSB7IG1fYm90dG9tRXh0cmEgPSBwOyB9CiAKLSAgICBSZW5kZXJU
YWJsZSogdGFibGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBh
cmVudCgpLT5wYXJlbnQoKS0+cGFyZW50KCkpOyB9Ci0gICAgUmVuZGVyVGFibGVTZWN0aW9uKiBz
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4o
cGFyZW50KCktPnBhcmVudCgpKTsgfQorICAgIHZpcnR1YWwgaW50IGJvcmRlclRvcEV4dHJhKCkg
Y29uc3QgeyByZXR1cm4gbV90b3BFeHRyYTsgfQorICAgIHZpcnR1YWwgaW50IGJvcmRlckJvdHRv
bUV4dHJhKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b21FeHRyYTsgfQogCiAjaWZuZGVmIE5ERUJV
RwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJlYW0gKnN0cmVhbSwgRGVwcmVjYXRlZFN0
cmluZyBpbmQgPSAiIikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4dFN0cmVhbSos
IERlcHJlY2F0ZWRTdHJpbmcgaW5kID0gIiIpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2b2lkIHBh
aW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5LCBSZW5k
ZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpOwotCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotCi0g
ICAgaW50IF9yb3c7Ci0gICAgaW50IF9jb2w7Ci0gICAgaW50IHJTcGFuOwotICAgIGludCBjU3Bh
bjsKLSAgICBpbnQgX3RvcEV4dHJhIDogMzE7Ci0gICAgaW50IF9ib3R0b21FeHRyYSA6IDMxOwor
ICAgIGludCBtX3JvdzsKKyAgICBpbnQgbV9jb2x1bW47CisgICAgaW50IG1fcm93U3BhbjsKKyAg
ICBpbnQgbV9jb2x1bW5TcGFuOworICAgIGludCBtX3RvcEV4dHJhIDogMzE7CisgICAgaW50IG1f
Ym90dG9tRXh0cmEgOiAzMTsKICAgICBib29sIG1fd2lkdGhDaGFuZ2VkIDogMTsKLQogICAgIGlu
dCBtX3BlcmNlbnRhZ2VIZWlnaHQ7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlclRhYmxlQ2VsbF9oCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuY3BwCShyZXZpc2lvbiAxODU3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTAgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVGFibGVDZWxsLmgiCisKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQzLDkgKzQ0LDggQEAgUmVuZGVyVGFibGVSb3c6OlJlbmRlclRhYmxl
Um93KE5vZGUqIG5vZAogCiB2b2lkIFJlbmRlclRhYmxlUm93OjpkZXN0cm95KCkKIHsKLSAgICBS
ZW5kZXJUYWJsZVNlY3Rpb24gKnMgPSBzZWN0aW9uKCk7Ci0gICAgaWYgKHMpCi0gICAgICAgIHMt
PnNldE5lZWRDZWxsUmVjYWxjKCk7CisgICAgaWYgKFJlbmRlclRhYmxlU2VjdGlvbiogcyA9IHNl
Y3Rpb24oKSkKKyAgICAgICAgcy0+c2V0TmVlZHNDZWxsUmVjYWxjKCk7CiAgICAgCiAgICAgUmVu
ZGVyQ29udGFpbmVyOjpkZXN0cm95KCk7CiB9CkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgUmVuZGVy
VGFibGVSb3c6OmRlc3Ryb3koKQogdm9pZCBSZW5kZXJUYWJsZVJvdzo6c2V0U3R5bGUoUmVuZGVy
U3R5bGUqIG5ld1N0eWxlKQogewogICAgIGlmIChzZWN0aW9uKCkgJiYgc3R5bGUoKSAmJiBzdHls
ZSgpLT5oZWlnaHQoKSAhPSBuZXdTdHlsZS0+aGVpZ2h0KCkpCi0gICAgICAgIHNlY3Rpb24oKS0+
c2V0TmVlZENlbGxSZWNhbGMoKTsKKyAgICAgICAgc2VjdGlvbigpLT5zZXROZWVkc0NlbGxSZWNh
bGMoKTsKIAogICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KFRBQkxFX1JPVyk7CiAKQEAgLTk0LDcg
Kzk0LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZQogICAgICAg
ICByZXR1cm47CiAgICAgfSAKICAgICAKLSAgICAvLyBJZiB0aGUgbmV4dCByZW5kZXJlciBpcyBh
Y3R1YWxseSB3cmFwcGVkIGluIGFuIGFub255bW91cyB0YWJsZSBjZWxsLCB3ZSBuZWVkIHRvIGdv
IHVwIGFuZCBmaW5kIHRoYXQKKyAgICAvLyBJZiB0aGUgbmV4dCByZW5kZXJlciBpcyBhY3R1YWxs
eSB3cmFwcGVkIGluIGFuIGFub255bW91cyB0YWJsZSBjZWxsLCB3ZSBuZWVkIHRvIGdvIHVwIGFu
ZCBmaW5kIHRoYXQuCiAgICAgd2hpbGUgKGJlZm9yZUNoaWxkICYmICFiZWZvcmVDaGlsZC0+aXNU
YWJsZUNlbGwoKSkKICAgICAgICAgYmVmb3JlQ2hpbGQgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7
CiAKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5k
ZXJPYmplCiAgICAgUmVuZGVyQ29udGFpbmVyOjphZGRDaGlsZChjZWxsLCBiZWZvcmVDaGlsZCk7
CiAKICAgICBpZiAoYmVmb3JlQ2hpbGQgfHwgbmV4dFNpYmxpbmcoKSkKLSAgICAgICAgc2VjdGlv
bigpLT5zZXROZWVkQ2VsbFJlY2FsYygpOworICAgICAgICBzZWN0aW9uKCktPnNldE5lZWRzQ2Vs
bFJlY2FsYygpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlUm93OjpsYXlvdXQoKQpAQCAtMTEzLDkg
KzExMyw5IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OmxheW91dCgpCiAgICAgQVNTRVJUKG5lZWRz
TGF5b3V0KCkpOwogICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAotICAgIGZvciAoUmVuZGVy
T2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGls
ZC0+aXNUYWJsZUNlbGwoKSkgewotICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsICpjZWxsID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsICo+KGNoaWxkKTsKKyAgICAgICAgICAgIFJlbmRl
clRhYmxlQ2VsbCogY2VsbCA9IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlQ2VsbCo+KGNoaWxkKTsK
ICAgICAgICAgICAgIGlmIChjaGlsZC0+bmVlZHNMYXlvdXQoKSkgewogICAgICAgICAgICAgICAg
IGNlbGwtPmNhbGNWZXJ0aWNhbE1hcmdpbnMoKTsKICAgICAgICAgICAgICAgICBjZWxsLT5sYXlv
dXQoKTsKQEAgLTEzMCwxMSArMTMwLDEwIEBAIEludFJlY3QgUmVuZGVyVGFibGVSb3c6OmdldEFi
c29sdXRlUmVwYWkKICAgICAvLyBGb3Igbm93LCBqdXN0IHJlcGFpbnQgdGhlIHdob2xlIHRhYmxl
LgogICAgIC8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCBlLmcuLCBuZWVk
IHRvIHJlcGFpbnQgYWxsIHRoZSBjZWxscyB0aGF0IHdlCiAgICAgLy8gbWlnaHQgaGF2ZSBwcm9w
YWdhdGVkIGEgYmFja2dyb3VuZCBjb2xvciBpbnRvLgotICAgIFJlbmRlclRhYmxlKiBwYXJlbnRU
YWJsZSA9IHRhYmxlKCk7Ci0gICAgaWYgKHBhcmVudFRhYmxlKQorICAgIGlmIChSZW5kZXJUYWJs
ZSogcGFyZW50VGFibGUgPSB0YWJsZSgpKQogICAgICAgICByZXR1cm4gcGFyZW50VGFibGUtPmdl
dEFic29sdXRlUmVwYWludFJlY3QoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CisKKyAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCiAvLyBIaXQgVGVzdGluZwpAQCAtMTU4
LDcgKzE1Nyw3IEBAIGJvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KGNvbnN0IEgKIAog
dm9pZCBSZW5kZXJUYWJsZVJvdzo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwg
aW50IHR5KQogewotICAgIGFzc2VydChtX2xheWVyKTsKKyAgICBBU1NFUlQobV9sYXllcik7CiAg
ICAgaWYgKCFtX2xheWVyKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlUm93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVSb3cuaAkocmV2aXNpb24gMTg1NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVJvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyNCArMjQsMjkgQEAKICAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKLSNpZm5kZWYgUmVuZGVyVGFibGVSb3dfSAot
I2RlZmluZSBSZW5kZXJUYWJsZVJvd19ICisjaWZuZGVmIFJlbmRlclRhYmxlUm93X2gKKyNkZWZp
bmUgUmVuZGVyVGFibGVSb3dfaAogCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyVGFibGVSb3cgOiBwdWJsaWMgUmVu
ZGVyQ29udGFpbmVyCi17CitjbGFzcyBSZW5kZXJUYWJsZVJvdyA6IHB1YmxpYyBSZW5kZXJDb250
YWluZXIgewogcHVibGljOgogICAgIFJlbmRlclRhYmxlUm93KE5vZGUqKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxl
Kik7CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclRhYmxlUm93IjsgfQorCiAgICAgdmlydHVhbCBib29sIGlzVGFibGVSb3coKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworCisgICAg
UmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyVGFibGVTZWN0aW9uKj4ocGFyZW50KCkpOyB9CisgICAgUmVuZGVyVGFibGUqIHRhYmxl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihwYXJlbnQoKS0+cGFy
ZW50KCkpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCA9IDApOwotICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodChib29sKSBj
b25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wgZmly
c3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihJbmxpbmVCb3gqKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCBJbnRSZWN0IGdldEFic29sdXRlUmVwYWludFJlY3Qo
KTsKQEAgLTUxLDExICs1Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNM
YXllcigpIHsgcmV0dXJuIGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKTsgfQog
CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLQot
ICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRl
clRhYmxlKj4ocGFyZW50KCktPnBhcmVudCgpKTsgfQotICAgIFJlbmRlclRhYmxlU2VjdGlvbiog
c2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+
KHBhcmVudCgpKTsgfQogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYK
KyNlbmRpZiAvLyBSZW5kZXJUYWJsZVJvd19oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDE4NTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDEyIEBA
CiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNvbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCi0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlIDxsaW1p
dHM+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBA
IC00NSwxNyArNDUsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUmVuZGVyVGFi
bGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24oTm9kZSogbm9kZSkKICAgICA6IFJlbmRlckNv
bnRhaW5lcihub2RlKQorICAgICwgbV9ncmlkUm93cygwKQorICAgICwgbV9jQ29sKDApCisgICAg
LCBtX2NSb3coLTEpCisgICAgLCBtX25lZWRzQ2VsbFJlY2FsYyhmYWxzZSkKKyAgICAsIG1fb3V0
ZXJCb3JkZXJMZWZ0KDApCisgICAgLCBtX291dGVyQm9yZGVyUmlnaHQoMCkKKyAgICAsIG1fb3V0
ZXJCb3JkZXJUb3AoMCkKKyAgICAsIG1fb3V0ZXJCb3JkZXJCb3R0b20oMCkKIHsKICAgICAvLyBp
bml0IFJlbmRlck9iamVjdCBhdHRyaWJ1dGVzCiAgICAgc2V0SW5saW5lKGZhbHNlKTsgICAvLyBv
dXIgb2JqZWN0IGlzIG5vdCBJbmxpbmUKLSAgICBncmlkUm93cyA9IDA7Ci0gICAgY0NvbCA9IDA7
Ci0gICAgY1JvdyA9IC0xOwotICAgIG5lZWRDZWxsUmVjYWxjID0gZmFsc2U7Ci0gICAgbV9vdXRl
ckJvcmRlckxlZnQgPSAwOwotICAgIG1fb3V0ZXJCb3JkZXJSaWdodCA9IDA7Ci0gICAgbV9vdXRl
ckJvcmRlclRvcCA9IDA7Ci0gICAgbV9vdXRlckJvcmRlckJvdHRvbSA9IDA7CiB9CiAKIFJlbmRl
clRhYmxlU2VjdGlvbjo6flJlbmRlclRhYmxlU2VjdGlvbigpCkBAIC02OCwyMCArNjgsMjAgQEAg
dm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmRlc3Ryb3koKQogICAgIC8vIHJlY2FsYyBjZWxsIGlu
Zm8gYmVjYXVzZSBSZW5kZXJUYWJsZSBoYXMgdW5ndWFyZGVkIHBvaW50ZXJzCiAgICAgLy8gc3Rv
cmVkIHRoYXQgcG9pbnQgdG8gdGhpcyBSZW5kZXJUYWJsZVNlY3Rpb24uCiAgICAgaWYgKHRhYmxl
KCkpCi0gICAgICAgIHRhYmxlKCktPnNldE5lZWRTZWN0aW9uUmVjYWxjKCk7CisgICAgICAgIHRh
YmxlKCktPnNldE5lZWRzU2VjdGlvblJlY2FsYygpOwogCiAgICAgUmVuZGVyQ29udGFpbmVyOjpk
ZXN0cm95KCk7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzZXRTdHlsZShSZW5kZXJT
dHlsZSogX3N0eWxlKQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNldFN0eWxlKFJlbmRlclN0
eWxlKiBuZXdTdHlsZSkKIHsKICAgICAvLyB3ZSBkb24ndCBhbGxvdyBjaGFuZ2luZyB0aGlzIG9u
ZQogICAgIGlmIChzdHlsZSgpKQotICAgICAgICBfc3R5bGUtPnNldERpc3BsYXkoc3R5bGUoKS0+
ZGlzcGxheSgpKTsKLSAgICBlbHNlIGlmIChfc3R5bGUtPmRpc3BsYXkoKSAhPSBUQUJMRV9GT09U
RVJfR1JPVVAgJiYgX3N0eWxlLT5kaXNwbGF5KCkgIT0gVEFCTEVfSEVBREVSX0dST1VQKQotICAg
ICAgICBfc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfUk9XX0dST1VQKTsKKyAgICAgICAgbmV3U3R5
bGUtPnNldERpc3BsYXkoc3R5bGUoKS0+ZGlzcGxheSgpKTsKKyAgICBlbHNlIGlmIChuZXdTdHls
ZS0+ZGlzcGxheSgpICE9IFRBQkxFX0ZPT1RFUl9HUk9VUCAmJiBuZXdTdHlsZS0+ZGlzcGxheSgp
ICE9IFRBQkxFX0hFQURFUl9HUk9VUCkKKyAgICAgICAgbmV3U3R5bGUtPnNldERpc3BsYXkoVEFC
TEVfUk9XX0dST1VQKTsKIAotICAgIFJlbmRlckNvbnRhaW5lcjo6c2V0U3R5bGUoX3N0eWxlKTsK
KyAgICBSZW5kZXJDb250YWluZXI6OnNldFN0eWxlKG5ld1N0eWxlKTsKIH0KIAogdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCkBAIC0xMjMsMjEgKzEyMywyMSBAQCB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgfQogCiAgICAgaWYgKGJlZm9yZUNoaWxkKQotICAg
ICAgICBzZXROZWVkQ2VsbFJlY2FsYygpOworICAgICAgICBzZXROZWVkc0NlbGxSZWNhbGMoKTsK
IAotICAgICsrY1JvdzsKLSAgICBjQ29sID0gMDsKKyAgICArK21fY1JvdzsKKyAgICBtX2NDb2wg
PSAwOwogCi0gICAgZW5zdXJlUm93cyhjUm93ICsgMSk7Ci0gICAgZ3JpZFtjUm93XS5yb3dSZW5k
ZXJlciA9IGNoaWxkOworICAgIGVuc3VyZVJvd3MobV9jUm93ICsgMSk7CisgICAgbV9ncmlkW21f
Y1Jvd10ucm93UmVuZGVyZXIgPSBjaGlsZDsKIAogICAgIGlmICghYmVmb3JlQ2hpbGQpIHsKLSAg
ICAgICAgZ3JpZFtjUm93XS5oZWlnaHQgPSBjaGlsZC0+c3R5bGUoKS0+aGVpZ2h0KCk7Ci0gICAg
ICAgIGlmIChncmlkW2NSb3ddLmhlaWdodC5pc1JlbGF0aXZlKCkpCi0gICAgICAgICAgICBncmlk
W2NSb3ddLmhlaWdodCA9IExlbmd0aCgpOworICAgICAgICBtX2dyaWRbbV9jUm93XS5oZWlnaHQg
PSBjaGlsZC0+c3R5bGUoKS0+aGVpZ2h0KCk7CisgICAgICAgIGlmIChtX2dyaWRbbV9jUm93XS5o
ZWlnaHQuaXNSZWxhdGl2ZSgpKQorICAgICAgICAgICAgbV9ncmlkW21fY1Jvd10uaGVpZ2h0ID0g
TGVuZ3RoKCk7CiAgICAgfQogCi0gICAgLy8gSWYgdGhlIG5leHQgcmVuZGVyZXIgaXMgYWN0dWFs
bHkgd3JhcHBlZCBpbiBhbiBhbm9ueW1vdXMgdGFibGUgcm93LCB3ZSBuZWVkIHRvIGdvIHVwIGFu
ZCBmaW5kIHRoYXQKKyAgICAvLyBJZiB0aGUgbmV4dCByZW5kZXJlciBpcyBhY3R1YWxseSB3cmFw
cGVkIGluIGFuIGFub255bW91cyB0YWJsZSByb3csIHdlIG5lZWQgdG8gZ28gdXAgYW5kIGZpbmQg
dGhhdC4KICAgICB3aGlsZSAoYmVmb3JlQ2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc1RhYmxlUm93
KCkpCiAgICAgICAgIGJlZm9yZUNoaWxkID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOwogCkBAIC0x
NDYsMjQgKzE0NiwyNCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVy
CiAKIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGludCBudW1Sb3dzKQogewot
ICAgIGludCBuUm93cyA9IGdyaWRSb3dzOworICAgIGludCBuUm93cyA9IG1fZ3JpZFJvd3M7CiAg
ICAgaWYgKG51bVJvd3MgPiBuUm93cykgewotICAgICAgICBpZiAobnVtUm93cyA+IHN0YXRpY19j
YXN0PGludD4oZ3JpZC5zaXplKCkpKSB7CisgICAgICAgIGlmIChudW1Sb3dzID4gc3RhdGljX2Nh
c3Q8aW50PihtX2dyaWQuc2l6ZSgpKSkgewogICAgICAgICAgICAgaWYgKG51bVJvd3MgPiBzdGF0
aWNfY2FzdDxpbnQ+KG51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC8gc2l6ZW9mKFJvd1N0
cnVjdCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGdyaWQu
cmVzaXplKG51bVJvd3MpOworICAgICAgICAgICAgbV9ncmlkLnJlc2l6ZShudW1Sb3dzKTsKICAg
ICAgICAgfQotICAgICAgICBncmlkUm93cyA9IG51bVJvd3M7CisgICAgICAgIG1fZ3JpZFJvd3Mg
PSBudW1Sb3dzOwogICAgICAgICBpbnQgbkNvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7CiAg
ICAgICAgIENlbGxTdHJ1Y3QgZW1wdHlDZWxsU3RydWN0OwogICAgICAgICBlbXB0eUNlbGxTdHJ1
Y3QuY2VsbCA9IDA7CiAgICAgICAgIGVtcHR5Q2VsbFN0cnVjdC5pbkNvbFNwYW4gPSBmYWxzZTsK
ICAgICAgICAgZm9yIChpbnQgciA9IG5Sb3dzOyByIDwgbnVtUm93czsgcisrKSB7Ci0gICAgICAg
ICAgICBncmlkW3JdLnJvdyA9IG5ldyBSb3cobkNvbHMpOwotICAgICAgICAgICAgZ3JpZFtyXS5y
b3ctPmZpbGwoZW1wdHlDZWxsU3RydWN0KTsKLSAgICAgICAgICAgIGdyaWRbcl0ucm93UmVuZGVy
ZXIgPSAwOwotICAgICAgICAgICAgZ3JpZFtyXS5iYXNlTGluZSA9IDA7Ci0gICAgICAgICAgICBn
cmlkW3JdLmhlaWdodCA9IExlbmd0aCgpOworICAgICAgICAgICAgbV9ncmlkW3JdLnJvdyA9IG5l
dyBSb3cobkNvbHMpOworICAgICAgICAgICAgbV9ncmlkW3JdLnJvdy0+ZmlsbChlbXB0eUNlbGxT
dHJ1Y3QpOworICAgICAgICAgICAgbV9ncmlkW3JdLnJvd1JlbmRlcmVyID0gMDsKKyAgICAgICAg
ICAgIG1fZ3JpZFtyXS5iYXNlTGluZSA9IDA7CisgICAgICAgICAgICBtX2dyaWRbcl0uaGVpZ2h0
ID0gTGVuZ3RoKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3NCw3ICsxNzQsNyBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJUCiB7CiAgICAgaW50IHJTcGFuID0g
Y2VsbC0+cm93U3BhbigpOwogICAgIGludCBjU3BhbiA9IGNlbGwtPmNvbFNwYW4oKTsKLSAgICBW
ZWN0b3I8UmVuZGVyVGFibGU6OkNvbHVtblN0cnVjdD4mIGNvbHVtbnMgPSB0YWJsZSgpLT5jb2x1
bW5zOworICAgIFZlY3RvcjxSZW5kZXJUYWJsZTo6Q29sdW1uU3RydWN0PiYgY29sdW1ucyA9IHRh
YmxlKCktPmNvbHVtbnMoKTsKICAgICBpbnQgbkNvbHMgPSBjb2x1bW5zLnNpemUoKTsKIAogICAg
IC8vICMjIyBtb3ppbGxhIHN0aWxsIHNlZW1zIHRvIGRvIHRoZSBvbGQgSFRNTCB3YXksIGV2ZW4g
Zm9yIHN0cmljdCBEVEQKQEAgLTE4NCwyNCArMTg0LDI0IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0
aW9uOjphZGRDZWxsKFJlbmRlclQKICAgICAvLyA8VFI+PFREIGNvbHNwYW49IjIiPjUKICAgICAv
LyA8L1RBQkxFPgogCi0gICAgd2hpbGUgKGNDb2wgPCBuQ29scyAmJiAoY2VsbEF0KGNSb3csIGND
b2wpLmNlbGwgfHwgY2VsbEF0KGNSb3csIGNDb2wpLmluQ29sU3BhbikpCi0gICAgICAgIGNDb2wr
KzsKKyAgICB3aGlsZSAobV9jQ29sIDwgbkNvbHMgJiYgKGNlbGxBdChtX2NSb3csIG1fY0NvbCku
Y2VsbCB8fCBjZWxsQXQobV9jUm93LCBtX2NDb2wpLmluQ29sU3BhbikpCisgICAgICAgIG1fY0Nv
bCsrOwogCiAgICAgaWYgKHJTcGFuID09IDEpIHsKICAgICAgICAgLy8gd2UgaWdub3JlIGhlaWdo
dCBzZXR0aW5ncyBvbiByb3dzcGFuIGNlbGxzCiAgICAgICAgIExlbmd0aCBoZWlnaHQgPSBjZWxs
LT5zdHlsZSgpLT5oZWlnaHQoKTsKICAgICAgICAgaWYgKGhlaWdodC5pc1Bvc2l0aXZlKCkgfHwg
KGhlaWdodC5pc1JlbGF0aXZlKCkgJiYgaGVpZ2h0LnZhbHVlKCkgPj0gMCkpIHsKLSAgICAgICAg
ICAgIExlbmd0aCBjUm93SGVpZ2h0ID0gZ3JpZFtjUm93XS5oZWlnaHQ7CisgICAgICAgICAgICBM
ZW5ndGggY1Jvd0hlaWdodCA9IG1fZ3JpZFttX2NSb3ddLmhlaWdodDsKICAgICAgICAgICAgIHN3
aXRjaCAoaGVpZ2h0LnR5cGUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgUGVyY2VudDoKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCEoY1Jvd0hlaWdodC5pc1BlcmNlbnQoKSkgfHwKICAgICAg
ICAgICAgICAgICAgICAgICAgIChjUm93SGVpZ2h0LmlzUGVyY2VudCgpICYmIGNSb3dIZWlnaHQu
cmF3VmFsdWUoKSA8IGhlaWdodC5yYXdWYWx1ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGdyaWRbY1Jvd10uaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmlkW21fY1Jvd10uaGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBGaXhlZDoKICAgICAgICAgICAgICAgICAgICAgaWYg
KGNSb3dIZWlnaHQudHlwZSgpIDwgUGVyY2VudCB8fAogICAgICAgICAgICAgICAgICAgICAgICAg
KGNSb3dIZWlnaHQuaXNGaXhlZCgpICYmIGNSb3dIZWlnaHQudmFsdWUoKSA8IGhlaWdodC52YWx1
ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRbY1Jvd10uaGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmlkW21fY1Jvd10uaGVpZ2h0ID0gaGVpZ2h0
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFJlbGF0
aXZlOgogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTEsNjUgKzIxMSw2MiBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJUCiAgICAgfQogCiAgICAgLy8gbWFr
ZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvd3MKLSAgICBpZiAoIWVuc3VyZVJvd3MoY1JvdyArIHJT
cGFuKSkKKyAgICBpZiAoIWVuc3VyZVJvd3MobV9jUm93ICsgclNwYW4pKQogICAgICAgICByZXR1
cm47CiAKLSAgICBncmlkW2NSb3ddLnJvd1JlbmRlcmVyID0gcm93OworICAgIG1fZ3JpZFttX2NS
b3ddLnJvd1JlbmRlcmVyID0gcm93OwogCi0gICAgaW50IGNvbCA9IGNDb2w7CisgICAgaW50IGNv
bCA9IG1fY0NvbDsKICAgICAvLyB0ZWxsIHRoZSBjZWxsIHdoZXJlIGl0IGlzCiAgICAgQ2VsbFN0
cnVjdCBjdXJyZW50Q2VsbDsKICAgICBjdXJyZW50Q2VsbC5jZWxsID0gY2VsbDsKICAgICBjdXJy
ZW50Q2VsbC5pbkNvbFNwYW4gPSBmYWxzZTsKICAgICB3aGlsZSAoY1NwYW4pIHsKICAgICAgICAg
aW50IGN1cnJlbnRTcGFuOwotICAgICAgICBpZiAoY0NvbCA+PSBuQ29scykgeworICAgICAgICBp
ZiAobV9jQ29sID49IG5Db2xzKSB7CiAgICAgICAgICAgICB0YWJsZSgpLT5hcHBlbmRDb2x1bW4o
Y1NwYW4pOwogICAgICAgICAgICAgY3VycmVudFNwYW4gPSBjU3BhbjsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChjU3BhbiA8IGNvbHVtbnNbY0NvbF0uc3BhbikKLSAgICAgICAg
ICAgICAgICB0YWJsZSgpLT5zcGxpdENvbHVtbihjQ29sLCBjU3Bhbik7Ci0gICAgICAgICAgICBj
dXJyZW50U3BhbiA9IGNvbHVtbnNbY0NvbF0uc3BhbjsKKyAgICAgICAgICAgIGlmIChjU3BhbiA8
IGNvbHVtbnNbbV9jQ29sXS5zcGFuKQorICAgICAgICAgICAgICAgIHRhYmxlKCktPnNwbGl0Q29s
dW1uKG1fY0NvbCwgY1NwYW4pOworICAgICAgICAgICAgY3VycmVudFNwYW4gPSBjb2x1bW5zW21f
Y0NvbF0uc3BhbjsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgclNw
YW47IHIrKykgewotICAgICAgICAgICAgQ2VsbFN0cnVjdCYgYyA9IGNlbGxBdChjUm93ICsgciwg
Y0NvbCk7CisgICAgICAgICAgICBDZWxsU3RydWN0JiBjID0gY2VsbEF0KG1fY1JvdyArIHIsIG1f
Y0NvbCk7CiAgICAgICAgICAgICBpZiAoY3VycmVudENlbGwuY2VsbCAmJiAhYy5jZWxsKQogICAg
ICAgICAgICAgICAgIGMuY2VsbCA9IGN1cnJlbnRDZWxsLmNlbGw7CiAgICAgICAgICAgICBpZiAo
Y3VycmVudENlbGwuaW5Db2xTcGFuKQogICAgICAgICAgICAgICAgIGMuaW5Db2xTcGFuID0gdHJ1
ZTsKICAgICAgICAgfQotICAgICAgICBjQ29sKys7CisgICAgICAgIG1fY0NvbCsrOwogICAgICAg
ICBjU3BhbiAtPSBjdXJyZW50U3BhbjsKICAgICAgICAgY3VycmVudENlbGwuY2VsbCA9IDA7CiAg
ICAgICAgIGN1cnJlbnRDZWxsLmluQ29sU3BhbiA9IHRydWU7CiAgICAgfQogICAgIGlmIChjZWxs
KSB7Ci0gICAgICAgIGNlbGwtPnNldFJvdyhjUm93KTsKKyAgICAgICAgY2VsbC0+c2V0Um93KG1f
Y1Jvdyk7CiAgICAgICAgIGNlbGwtPnNldENvbCh0YWJsZSgpLT5lZmZDb2xUb0NvbChjb2wpKTsK
ICAgICB9CiB9CiAKLQotCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q2VsbFdpZHRocygp
CiB7Ci0gICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNvbHVtblBvczsKKyAg
ICBWZWN0b3I8aW50PiYgY29sdW1uUG9zID0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKCk7CiAK
LSAgICBpbnQgcm93cyA9IGdyaWRSb3dzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsg
aSsrKSB7Ci0gICAgICAgIFJvdyAmcm93ID0gKmdyaWRbaV0ucm93OworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbV9ncmlkUm93czsgaSsrKSB7CisgICAgICAgIFJvdyYgcm93ID0gKm1fZ3JpZFtp
XS5yb3c7CiAgICAgICAgIGludCBjb2xzID0gcm93LnNpemUoKTsKICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCBjb2xzOyBqKyspIHsKICAgICAgICAgICAgIENlbGxTdHJ1Y3QgY3VycmVudCA9
IHJvd1tqXTsKLSAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCAqY2VsbCA9IGN1cnJlbnQuY2Vs
bDsKKyAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IGN1cnJlbnQuY2VsbDsKIAog
ICAgICAgICAgICAgaWYgKCFjZWxsKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgaW50IGVuZENvbCA9IGo7CiAgICAgICAgICAgICBpbnQgY3NwYW4gPSBjZWxsLT5jb2xT
cGFuKCk7CiAgICAgICAgICAgICB3aGlsZSAoY3NwYW4gJiYgZW5kQ29sIDwgY29scykgewotICAg
ICAgICAgICAgICAgIGNzcGFuIC09IHRhYmxlKCktPmNvbHVtbnNbZW5kQ29sXS5zcGFuOworICAg
ICAgICAgICAgICAgIGNzcGFuIC09IHRhYmxlKCktPmNvbHVtbnMoKVtlbmRDb2xdLnNwYW47CiAg
ICAgICAgICAgICAgICAgZW5kQ29sKys7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnQg
dyA9IGNvbHVtblBvc1tlbmRDb2xdIC0gY29sdW1uUG9zW2pdIC0gdGFibGUoKS0+aEJvcmRlclNw
YWNpbmcoKTsKQEAgLTI4NSw0MyArMjgyLDM3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpz
ZXRDZWxsV2lkdGhzKCkKICAgICB9CiB9CiAKLQogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmNh
bGNSb3dIZWlnaHQoKQogewotICAgIGludCBpbmR4OwotICAgIFJlbmRlclRhYmxlQ2VsbCAqY2Vs
bDsKKyAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGw7CiAKLSAgICBpbnQgdG90YWxSb3dzID0gZ3Jp
ZFJvd3M7CiAgICAgaW50IHNwYWNpbmcgPSB0YWJsZSgpLT52Qm9yZGVyU3BhY2luZygpOwogCi0g
ICAgcm93UG9zLnJlc2l6ZSh0b3RhbFJvd3MgKyAxKTsKLSAgICByb3dQb3NbMF0gPSBzcGFjaW5n
OworICAgIG1fcm93UG9zLnJlc2l6ZShtX2dyaWRSb3dzICsgMSk7CisgICAgbV9yb3dQb3NbMF0g
PSBzcGFjaW5nOwogCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewot
ICAgICAgICByb3dQb3NbciArIDFdID0gMDsKKyAgICBmb3IgKGludCByID0gMDsgciA8IG1fZ3Jp
ZFJvd3M7IHIrKykgeworICAgICAgICBtX3Jvd1Bvc1tyICsgMV0gPSAwOwogCiAgICAgICAgIGlu
dCBiYXNlbGluZSA9IDA7CiAgICAgICAgIGludCBiZGVzYyA9IDA7Ci0gICAgICAgIGludCBjaCA9
IGdyaWRbcl0uaGVpZ2h0LmNhbGNNaW5WYWx1ZSgwKTsKLSAgICAgICAgaW50IHBvcyA9IHJvd1Bv
c1tyXSArIGNoICsgKGdyaWRbcl0ucm93UmVuZGVyZXIgPyBzcGFjaW5nIDogMCk7CisgICAgICAg
IGludCBjaCA9IG1fZ3JpZFtyXS5oZWlnaHQuY2FsY01pblZhbHVlKDApOworICAgICAgICBpbnQg
cG9zID0gbV9yb3dQb3Nbcl0gKyBjaCArIChtX2dyaWRbcl0ucm93UmVuZGVyZXIgPyBzcGFjaW5n
IDogMCk7CiAKLSAgICAgICAgaWYgKHBvcyA+IHJvd1Bvc1tyICsgMV0pCi0gICAgICAgICAgICBy
b3dQb3NbciArIDFdID0gcG9zOworICAgICAgICBtX3Jvd1Bvc1tyICsgMV0gPSBtYXgobV9yb3dQ
b3NbciArIDFdLCBwb3MpOwogCi0gICAgICAgIFJvdyAqcm93ID0gZ3JpZFtyXS5yb3c7CisgICAg
ICAgIFJvdyogcm93ID0gbV9ncmlkW3JdLnJvdzsKICAgICAgICAgaW50IHRvdGFsQ29scyA9IHJv
dy0+c2l6ZSgpOwotICAgICAgICBpbnQgdG90YWxSb3dzID0gZ3JpZFJvd3M7CiAKICAgICAgICAg
Zm9yIChpbnQgYyA9IDA7IGMgPCB0b3RhbENvbHM7IGMrKykgewogICAgICAgICAgICAgQ2VsbFN0
cnVjdCBjdXJyZW50ID0gY2VsbEF0KHIsIGMpOwogICAgICAgICAgICAgY2VsbCA9IGN1cnJlbnQu
Y2VsbDsKICAgICAgICAgICAgIGlmICghY2VsbCB8fCBjdXJyZW50LmluQ29sU3BhbikKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChyIDwgdG90YWxSb3dzIC0gMSAm
JiBjZWxsQXQociArIDEsIGMpLmNlbGwgPT0gY2VsbCkKKyAgICAgICAgICAgIGlmIChyIDwgbV9n
cmlkUm93cyAtIDEgJiYgY2VsbEF0KHIgKyAxLCBjKS5jZWxsID09IGNlbGwpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmICgoaW5keCA9IHIgLSBjZWxsLT5yb3dT
cGFuKCkgKyAxKSA8IDApCi0gICAgICAgICAgICAgICAgaW5keCA9IDA7CisgICAgICAgICAgICBp
bnQgaW5keCA9IG1heChyIC0gY2VsbC0+cm93U3BhbigpICsgMSwgMCk7CiAKICAgICAgICAgICAg
IGlmIChjZWxsLT5vdmVycmlkZVNpemUoKSAhPSAtMSkgewogICAgICAgICAgICAgICAgIGNlbGwt
PnNldE92ZXJyaWRlU2l6ZSgtMSk7CkBAIC0zMzQsMjYgKzMyNSwxOSBAQCB2b2lkIFJlbmRlclRh
YmxlU2VjdGlvbjo6Y2FsY1Jvd0hlaWdodCgpCiAgICAgICAgICAgICBjaCA9IGNlbGwtPnN0eWxl
KCktPmhlaWdodCgpLmNhbGNWYWx1ZSgwKSArIAogICAgICAgICAgICAgICAgIChjZWxsLT5zdHls
ZSgpLT5odG1sSGFja3MoKSA/IDAgOiAoY2VsbC0+cGFkZGluZ1RvcCgpICsgY2VsbC0+cGFkZGlu
Z0JvdHRvbSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNlbGwtPmJvcmRlclRvcCgpICsgY2VsbC0+Ym9yZGVyQm90dG9tKCkpKTsKLSAgICAg
ICAgICAgIGlmIChjZWxsLT5oZWlnaHQoKSA+IGNoKQotICAgICAgICAgICAgICAgIGNoID0gY2Vs
bC0+aGVpZ2h0KCk7CisgICAgICAgICAgICBjaCA9IG1heChjaCwgY2VsbC0+aGVpZ2h0KCkpOwog
Ci0gICAgICAgICAgICBwb3MgPSByb3dQb3NbaW5keF0gKyBjaCArIChncmlkW3JdLnJvd1JlbmRl
cmVyID8gc3BhY2luZyA6IDApOworICAgICAgICAgICAgcG9zID0gbV9yb3dQb3NbaW5keF0gKyBj
aCArIChtX2dyaWRbcl0ucm93UmVuZGVyZXIgPyBzcGFjaW5nIDogMCk7CiAKLSAgICAgICAgICAg
IGlmIChwb3MgPiByb3dQb3NbciArIDFdKQotICAgICAgICAgICAgICAgIHJvd1Bvc1tyICsgMV0g
PSBwb3M7CisgICAgICAgICAgICBtX3Jvd1Bvc1tyICsgMV0gPSBtYXgobV9yb3dQb3NbciArIDFd
LCBwb3MpOwogCiAgICAgICAgICAgICAvLyBmaW5kIG91dCB0aGUgYmFzZWxpbmUKICAgICAgICAg
ICAgIEVWZXJ0aWNhbEFsaWduIHZhID0gY2VsbC0+c3R5bGUoKS0+dmVydGljYWxBbGlnbigpOwot
ICAgICAgICAgICAgaWYgKHZhID09IEJBU0VMSU5FIHx8IHZhID09IFRFWFRfQk9UVE9NIHx8IHZh
ID09IFRFWFRfVE9QCi0gICAgICAgICAgICAgICAgfHwgdmEgPT0gU1VQRVIgfHwgdmEgPT0gU1VC
KSB7CisgICAgICAgICAgICBpZiAodmEgPT0gQkFTRUxJTkUgfHwgdmEgPT0gVEVYVF9CT1RUT00g
fHwgdmEgPT0gVEVYVF9UT1AgfHwgdmEgPT0gU1VQRVIgfHwgdmEgPT0gU1VCKSB7CiAgICAgICAg
ICAgICAgICAgaW50IGIgPSBjZWxsLT5iYXNlbGluZVBvc2l0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGIgPiBjZWxsLT5ib3JkZXJUb3AoKSArIGNlbGwtPnBhZGRpbmdUb3AoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoYiA+IGJhc2VsaW5lKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYmFzZWxpbmUgPSBiOwotCi0gICAgICAgICAgICAgICAgICAgIGludCB0ZCA9IHJvd1Bvc1tp
bmR4XSArIGNoIC0gYjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRkID4gYmRlc2MpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBiZGVzYyA9IHRkOworICAgICAgICAgICAgICAgICAgICBiYXNl
bGluZSA9IG1heChiYXNlbGluZSwgYik7CisgICAgICAgICAgICAgICAgICAgIGJkZXNjID0gbWF4
KGJkZXNjLCBtX3Jvd1Bvc1tpbmR4XSArIGNoIC0gYik7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0zNjEsMTUgKzM0NSwxMSBAQCB2b2lkIFJlbmRlclRh
YmxlU2VjdGlvbjo6Y2FsY1Jvd0hlaWdodCgpCiAgICAgICAgIC8vZG8gd2UgaGF2ZSBiYXNlbGlu
ZSBhbGlnbmVkIGVsZW1lbnRzPwogICAgICAgICBpZiAoYmFzZWxpbmUpIHsKICAgICAgICAgICAg
IC8vIGluY3JlYXNlIHJvd2hlaWdodCBpZiBiYXNlbGluZSByZXF1aXJlcwotICAgICAgICAgICAg
aW50IGJSb3dQb3MgPSBiYXNlbGluZSArIGJkZXNjICsgKGdyaWRbcl0ucm93UmVuZGVyZXIgPyBz
cGFjaW5nIDogMCk7Ci0gICAgICAgICAgICBpZiAocm93UG9zW3IgKyAxXSA8IGJSb3dQb3MpCi0g
ICAgICAgICAgICAgICAgcm93UG9zW3IgKyAxXSA9IGJSb3dQb3M7Ci0KLSAgICAgICAgICAgIGdy
aWRbcl0uYmFzZUxpbmUgPSBiYXNlbGluZTsKKyAgICAgICAgICAgIG1fcm93UG9zW3IgKyAxXSA9
IG1heChtX3Jvd1Bvc1tyICsgMV0sIGJhc2VsaW5lICsgYmRlc2MgKyAobV9ncmlkW3JdLnJvd1Jl
bmRlcmVyID8gc3BhY2luZyA6IDApKTsKKyAgICAgICAgICAgIG1fZ3JpZFtyXS5iYXNlTGluZSA9
IGJhc2VsaW5lOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHJvd1Bvc1tyICsgMV0gPCByb3dQ
b3Nbcl0pCi0gICAgICAgICAgICByb3dQb3NbciArIDFdID0gcm93UG9zW3JdOworICAgICAgICBt
X3Jvd1Bvc1tyICsgMV0gPSBtYXgobV9yb3dQb3NbciArIDFdLCBtX3Jvd1Bvc1tyXSk7CiAgICAg
fQogfQogCkBAIC0zNzcsMTAwICszNTcsOTYgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5
b3V0Um93cyhpbnQgdAogewogICAgIGludCBySGVpZ2h0OwogICAgIGludCByaW5keDsKLSAgICBp
bnQgdG90YWxSb3dzID0gZ3JpZFJvd3M7Ci0gICAgaW50IGhzcGFjaW5nID0gdGFibGUoKS0+aEJv
cmRlclNwYWNpbmcoKTsKLSAgICBpbnQgdnNwYWNpbmcgPSB0YWJsZSgpLT52Qm9yZGVyU3BhY2lu
ZygpOworICAgIGludCB0b3RhbFJvd3MgPSBtX2dyaWRSb3dzOwogICAgIAogICAgIC8vIFNldCB0
aGUgd2lkdGggb2Ygb3VyIHNlY3Rpb24gbm93LiAgVGhlIHJvd3Mgd2lsbCBhbHNvIGJlIHRoaXMg
d2lkdGguCiAgICAgbV93aWR0aCA9IHRhYmxlKCktPmNvbnRlbnRXaWR0aCgpOwogICAgIGlmICh0
YWJsZSgpLT5jb2xsYXBzZUJvcmRlcnMoKSkKICAgICAgICAgcmVjYWxjT3V0ZXJCb3JkZXIoKTsK
ICAgICAKLSAgICBpZiAodG9BZGQgJiYgdG90YWxSb3dzICYmIChyb3dQb3NbdG90YWxSb3dzXSB8
fCAhbmV4dFNpYmxpbmcoKSkpIHsKLQotICAgICAgICBpbnQgdG90YWxIZWlnaHQgPSByb3dQb3Nb
dG90YWxSb3dzXSArIHRvQWRkOworICAgIGlmICh0b0FkZCAmJiB0b3RhbFJvd3MgJiYgKG1fcm93
UG9zW3RvdGFsUm93c10gfHwgIW5leHRTaWJsaW5nKCkpKSB7CisgICAgICAgIGludCB0b3RhbEhl
aWdodCA9IG1fcm93UG9zW3RvdGFsUm93c10gKyB0b0FkZDsKIAogICAgICAgICBpbnQgZGggPSB0
b0FkZDsKICAgICAgICAgaW50IHRvdGFsUGVyY2VudCA9IDA7CiAgICAgICAgIGludCBudW1BdXRv
ID0gMDsKICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewotICAg
ICAgICAgICAgaWYgKGdyaWRbcl0uaGVpZ2h0LmlzQXV0bygpKQorICAgICAgICAgICAgaWYgKG1f
Z3JpZFtyXS5oZWlnaHQuaXNBdXRvKCkpCiAgICAgICAgICAgICAgICAgbnVtQXV0bysrOwotICAg
ICAgICAgICAgZWxzZSBpZiAoZ3JpZFtyXS5oZWlnaHQuaXNQZXJjZW50KCkpCi0gICAgICAgICAg
ICAgICAgdG90YWxQZXJjZW50ICs9IGdyaWRbcl0uaGVpZ2h0LnJhd1ZhbHVlKCk7CisgICAgICAg
ICAgICBlbHNlIGlmIChtX2dyaWRbcl0uaGVpZ2h0LmlzUGVyY2VudCgpKQorICAgICAgICAgICAg
ICAgIHRvdGFsUGVyY2VudCArPSBtX2dyaWRbcl0uaGVpZ2h0LnJhd1ZhbHVlKCk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHRvdGFsUGVyY2VudCkgewogICAgICAgICAgICAgLy8gdHJ5IHRvIHNh
dGlzZnkgcGVyY2VudAogICAgICAgICAgICAgaW50IGFkZCA9IDA7Ci0gICAgICAgICAgICBpZiAo
dG90YWxQZXJjZW50ID4gMTAwICogcGVyY2VudFNjYWxlRmFjdG9yKQotICAgICAgICAgICAgICAg
IHRvdGFsUGVyY2VudCA9IDEwMCAqIHBlcmNlbnRTY2FsZUZhY3RvcjsKLSAgICAgICAgICAgIGlu
dCByaCA9IHJvd1Bvc1sxXSAtIHJvd1Bvc1swXTsKKyAgICAgICAgICAgIHRvdGFsUGVyY2VudCA9
IG1pbih0b3RhbFBlcmNlbnQsIDEwMCAqIHBlcmNlbnRTY2FsZUZhY3Rvcik7CisgICAgICAgICAg
ICBpbnQgcmggPSBtX3Jvd1Bvc1sxXSAtIG1fcm93UG9zWzBdOwogICAgICAgICAgICAgZm9yIChp
bnQgciA9IDA7IHIgPCB0b3RhbFJvd3M7IHIrKykgewotICAgICAgICAgICAgICAgIGlmICh0b3Rh
bFBlcmNlbnQgPiAwICYmIGdyaWRbcl0uaGVpZ2h0LmlzUGVyY2VudCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCB0b0FkZCA9IG1pbihkaCwgKHRvdGFsSGVpZ2h0ICogZ3JpZFtyXS5oZWln
aHQucmF3VmFsdWUoKSAvICgxMDAgKiBwZXJjZW50U2NhbGVGYWN0b3IpKSAtIHJoKTsKKyAgICAg
ICAgICAgICAgICBpZiAodG90YWxQZXJjZW50ID4gMCAmJiBtX2dyaWRbcl0uaGVpZ2h0LmlzUGVy
Y2VudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0b0FkZCA9IG1pbihkaCwgKHRvdGFs
SGVpZ2h0ICogbV9ncmlkW3JdLmhlaWdodC5yYXdWYWx1ZSgpIC8gKDEwMCAqIHBlcmNlbnRTY2Fs
ZUZhY3RvcikpIC0gcmgpOwogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0b0FkZCBpcyBuZWdh
dGl2ZSwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIHNocmluayB0aGUgcm93ICh0aGlzIGJ1ZwogICAg
ICAgICAgICAgICAgICAgICAvLyBhZmZlY3RlZCBPdXRsb29rIFdlYiBBY2Nlc3MpLgogICAgICAg
ICAgICAgICAgICAgICB0b0FkZCA9IG1heCgwLCB0b0FkZCk7CiAgICAgICAgICAgICAgICAgICAg
IGFkZCArPSB0b0FkZDsKICAgICAgICAgICAgICAgICAgICAgZGggLT0gdG9BZGQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHRvdGFsUGVyY2VudCAtPSBncmlkW3JdLmhlaWdodC5yYXdWYWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICB0b3RhbFBlcmNlbnQgLT0gbV9ncmlkW3JdLmhlaWdodC5yYXdW
YWx1ZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAociA8IHRvdGFs
Um93cyAtIDEpCi0gICAgICAgICAgICAgICAgICAgIHJoID0gcm93UG9zW3IgKyAyXSAtIHJvd1Bv
c1tyICsgMV07Ci0gICAgICAgICAgICAgICAgcm93UG9zW3IgKyAxXSArPSBhZGQ7CisgICAgICAg
ICAgICAgICAgICAgIHJoID0gbV9yb3dQb3NbciArIDJdIC0gbV9yb3dQb3NbciArIDFdOworICAg
ICAgICAgICAgICAgIG1fcm93UG9zW3IgKyAxXSArPSBhZGQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKG51bUF1dG8pIHsKICAgICAgICAgICAgIC8vIGRpc3RyaWJ1dGUg
b3ZlciB2YXJpYWJsZSBjb2xzCiAgICAgICAgICAgICBpbnQgYWRkID0gMDsKICAgICAgICAgICAg
IGZvciAoaW50IHIgPSAwOyByIDwgdG90YWxSb3dzOyByKyspIHsKLSAgICAgICAgICAgICAgICBp
ZiAobnVtQXV0byA+IDAgJiYgZ3JpZFtyXS5oZWlnaHQuaXNBdXRvKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaW50IHRvQWRkID0gZGgvbnVtQXV0bzsKKyAgICAgICAgICAgICAgICBpZiAobnVt
QXV0byA+IDAgJiYgbV9ncmlkW3JdLmhlaWdodC5pc0F1dG8oKSkgeworICAgICAgICAgICAgICAg
ICAgICBpbnQgdG9BZGQgPSBkaCAvIG51bUF1dG87CiAgICAgICAgICAgICAgICAgICAgIGFkZCAr
PSB0b0FkZDsKICAgICAgICAgICAgICAgICAgICAgZGggLT0gdG9BZGQ7CiAgICAgICAgICAgICAg
ICAgICAgIG51bUF1dG8tLTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcm93
UG9zW3IgKyAxXSArPSBhZGQ7CisgICAgICAgICAgICAgICAgbV9yb3dQb3NbciArIDFdICs9IGFk
ZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoZGggPiAwICYmIHJvd1Bv
c1t0b3RhbFJvd3NdKSB7CisgICAgICAgIGlmIChkaCA+IDAgJiYgbV9yb3dQb3NbdG90YWxSb3dz
XSkgewogICAgICAgICAgICAgLy8gaWYgc29tZSBsZWZ0IG92ZXJzLCBkaXN0cmlidXRlIGVxdWFs
bHkuCi0gICAgICAgICAgICBpbnQgdG90ID0gcm93UG9zW3RvdGFsUm93c107CisgICAgICAgICAg
ICBpbnQgdG90ID0gbV9yb3dQb3NbdG90YWxSb3dzXTsKICAgICAgICAgICAgIGludCBhZGQgPSAw
OwotICAgICAgICAgICAgaW50IHByZXYgPSByb3dQb3NbMF07CisgICAgICAgICAgICBpbnQgcHJl
diA9IG1fcm93UG9zWzBdOwogICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3RhbFJv
d3M7IHIrKykgewogICAgICAgICAgICAgICAgIC8vd2VpZ2h0IHdpdGggdGhlIG9yaWdpbmFsIGhl
aWdodAotICAgICAgICAgICAgICAgIGFkZCArPSBkaCAqIChyb3dQb3NbciArIDFdIC0gcHJldikg
LyB0b3Q7Ci0gICAgICAgICAgICAgICAgcHJldiA9IHJvd1Bvc1tyICsgMV07Ci0gICAgICAgICAg
ICAgICAgcm93UG9zW3IgKyAxXSArPSBhZGQ7CisgICAgICAgICAgICAgICAgYWRkICs9IGRoICog
KG1fcm93UG9zW3IgKyAxXSAtIHByZXYpIC8gdG90OworICAgICAgICAgICAgICAgIHByZXYgPSBt
X3Jvd1Bvc1tyICsgMV07CisgICAgICAgICAgICAgICAgbV9yb3dQb3NbciArIDFdICs9IGFkZDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGludCBsZWZ0T2Zmc2V0ID0g
aHNwYWNpbmc7Ci0KKyAgICBpbnQgaHNwYWNpbmcgPSB0YWJsZSgpLT5oQm9yZGVyU3BhY2luZygp
OworICAgIGludCB2c3BhY2luZyA9IHRhYmxlKCktPnZCb3JkZXJTcGFjaW5nKCk7CiAgICAgaW50
IG5FZmZDb2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOworCiAgICAgZm9yIChpbnQgciA9IDA7
IHIgPCB0b3RhbFJvd3M7IHIrKykgewogICAgICAgICAvLyBTZXQgdGhlIHJvdydzIHgveSBwb3Np
dGlvbiBhbmQgd2lkdGgvaGVpZ2h0LgotICAgICAgICBpZiAoZ3JpZFtyXS5yb3dSZW5kZXJlcikg
ewotICAgICAgICAgICAgZ3JpZFtyXS5yb3dSZW5kZXJlci0+c2V0UG9zKDAsIHJvd1Bvc1tyXSk7
Ci0gICAgICAgICAgICBncmlkW3JdLnJvd1JlbmRlcmVyLT5zZXRXaWR0aChtX3dpZHRoKTsKLSAg
ICAgICAgICAgIGdyaWRbcl0ucm93UmVuZGVyZXItPnNldEhlaWdodChyb3dQb3NbcisxXSAtIHJv
d1Bvc1tyXSAtIHZzcGFjaW5nKTsKKyAgICAgICAgaWYgKG1fZ3JpZFtyXS5yb3dSZW5kZXJlcikg
eworICAgICAgICAgICAgbV9ncmlkW3JdLnJvd1JlbmRlcmVyLT5zZXRQb3MoMCwgbV9yb3dQb3Nb
cl0pOworICAgICAgICAgICAgbV9ncmlkW3JdLnJvd1JlbmRlcmVyLT5zZXRXaWR0aChtX3dpZHRo
KTsKKyAgICAgICAgICAgIG1fZ3JpZFtyXS5yb3dSZW5kZXJlci0+c2V0SGVpZ2h0KG1fcm93UG9z
W3IgKyAxXSAtIG1fcm93UG9zW3JdIC0gdnNwYWNpbmcpOwogICAgICAgICB9CiAKICAgICAgICAg
Zm9yIChpbnQgYyA9IDA7IGMgPCBuRWZmQ29sczsgYysrKSB7Ci0gICAgICAgICAgICBDZWxsU3Ry
dWN0IGN1cnJlbnQgPSBjZWxsQXQociwgYyk7Ci0gICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwq
IGNlbGwgPSBjdXJyZW50LmNlbGw7CisgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwg
PSBjZWxsQXQociwgYykuY2VsbDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFjZWxs
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKHIgPCB0b3RhbFJv
d3MgLSAxICYmIGNlbGwgPT0gY2VsbEF0KHIgKyAxLCBjKS5jZWxsKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAoKHJpbmR4ID0gci1jZWxsLT5yb3dTcGFuKCkg
KyAxKSA8IDApCisgICAgICAgICAgICBpZiAoKHJpbmR4ID0gciAtIGNlbGwtPnJvd1NwYW4oKSAr
IDEpIDwgMCkKICAgICAgICAgICAgICAgICByaW5keCA9IDA7CiAKLSAgICAgICAgICAgIHJIZWln
aHQgPSByb3dQb3NbciArIDFdIC0gcm93UG9zW3JpbmR4XSAtIHZzcGFjaW5nOworICAgICAgICAg
ICAgckhlaWdodCA9IG1fcm93UG9zW3IgKyAxXSAtIG1fcm93UG9zW3JpbmR4XSAtIHZzcGFjaW5n
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGb3JjZSBwZXJjZW50IGhlaWdodCBjaGls
ZHJlbiB0byBsYXkgdGhlbXNlbHZlcyBvdXQgYWdhaW4uCiAgICAgICAgICAgICAvLyBUaGlzIHdp
bGwgY2F1c2UgdGhlc2UgY2hpbGRyZW4gdG8gZ3JvdyB0byBmaWxsIHRoZSBjZWxsLgpAQCAtNTEx
LDkgKzQ4Nyw4IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC0+
Ym9yZGVyQm90dG9tKCkgLSBjZWxsLT5wYWRkaW5nQm90dG9tKCkpKTsKICAgICAgICAgICAgICAg
ICBjZWxsLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBFVmVydGljYWxBbGlnbiB2YSA9IGNlbGwtPnN0eWxlKCktPnZlcnRpY2FsQWxpZ24o
KTsKICAgICAgICAgICAgICAgICBpbnQgdGUgPSAwOwotICAgICAgICAgICAgICAgIHN3aXRjaCAo
dmEpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNlbGwtPnN0eWxlKCktPnZlcnRpY2FsQWxp
Z24oKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIFNVQjoKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBTVVBFUjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBURVhUX1RPUDoKQEAgLTUy
NSw3ICs1MDAsNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKGludCB0CiAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNSURETEU6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0ZSA9IChySGVpZ2h0IC0gY2VsbC0+aGVpZ2h0KCkpLzI7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZSA9IChySGVpZ2h0IC0gY2VsbC0+aGVpZ2h0KCkpIC8gMjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEJPVFRPTToK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlID0gckhlaWdodCAtIGNlbGwtPmhlaWdodCgpOwpA
QCAtNTQ3LDEzICs1MjIsOSBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKGlu
dCB0CiAgICAgICAgICAgICBJbnRSZWN0IG9sZENlbGxSZWN0KGNlbGwtPnhQb3MoKSwgY2VsbC0+
eVBvcygpIC0gY2VsbC0+Ym9yZGVyVG9wRXh0cmEoKSAsIGNlbGwtPndpZHRoKCksIGNlbGwtPmhl
aWdodCgpKTsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkg
PT0gUlRMKSB7Ci0gICAgICAgICAgICAgICAgY2VsbC0+c2V0UG9zKAotICAgICAgICAgICAgICAg
ICAgICB0YWJsZSgpLT5jb2x1bW5Qb3NbbkVmZkNvbHNdIC0KLSAgICAgICAgICAgICAgICAgICAg
dGFibGUoKS0+Y29sdW1uUG9zW3RhYmxlKCktPmNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpK2NlbGwt
PmNvbFNwYW4oKSldICsKLSAgICAgICAgICAgICAgICAgICAgbGVmdE9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgcm93UG9zW3JpbmR4XSk7CisgICAgICAgICAgICAgICAgY2VsbC0+c2V0UG9z
KHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygpW25FZmZDb2xzXSAtIHRhYmxlKCktPmNvbHVtblBv
c2l0aW9ucygpW3RhYmxlKCktPmNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpICsgY2VsbC0+Y29sU3Bh
bigpKV0gKyBoc3BhY2luZywgbV9yb3dQb3NbcmluZHhdKTsKICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIGNlbGwtPnNldFBvcyh0YWJsZSgpLT5jb2x1bW5Qb3NbY10gKyBsZWZ0
T2Zmc2V0LCByb3dQb3NbcmluZHhdKTsKKyAgICAgICAgICAgICAgICBjZWxsLT5zZXRQb3ModGFi
bGUoKS0+Y29sdW1uUG9zaXRpb25zKClbY10gKyBoc3BhY2luZywgbV9yb3dQb3NbcmluZHhdKTsK
IAogICAgICAgICAgICAgLy8gSWYgdGhlIGNlbGwgbW92ZWQsIHdlIGhhdmUgdG8gcmVwYWludCBp
dCBhcyB3ZWxsIGFzIGFueSBmbG9hdGluZy9wb3NpdGlvbmVkCiAgICAgICAgICAgICAvLyBkZXNj
ZW5kYW50cy4gIEFuIGV4Y2VwdGlvbiBpcyBpZiB3ZSBuZWVkIGEgbGF5b3V0LiAgSW4gdGhpcyBj
YXNlLCB3ZSBrbm93IHdlJ3JlIGdvaW5nIHRvCkBAIC01NjMsNyArNTM0LDcgQEAgaW50IFJlbmRl
clRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdAogICAgICAgICB9CiAgICAgfQogCi0gICAg
bV9oZWlnaHQgPSByb3dQb3NbdG90YWxSb3dzXTsKKyAgICBtX2hlaWdodCA9IG1fcm93UG9zW3Rv
dGFsUm93c107CiAgICAgcmV0dXJuIG1faGVpZ2h0OwogfQogCkBAIC01NzMsMTEgKzU0NCwxMCBA
QCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsb3dlc3RQb3NpdGlvbihiCiAgICAgaWYgKCFpbmNs
dWRlT3ZlcmZsb3dJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmV0dXJu
IGJvdHRvbTsKIAotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpyb3cgPSBmaXJzdENoaWxkKCk7IHJv
dzsgcm93ID0gcm93LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0
ICpjZWxsID0gcm93LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGlu
ZygpKQotICAgICAgICAgICAgaWYgKGNlbGwtPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAgICAg
ICAgICBpbnQgYnAgPSBjZWxsLT55UG9zKCkgKyBjZWxsLT5sb3dlc3RQb3NpdGlvbihmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgYnApOworICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGlu
ZygpKSB7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0gcm93LT5maXJzdENoaWxk
KCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAo
Y2VsbC0+aXNUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9t
LCBjZWxsLT55UG9zKCkgKyBjZWxsLT5sb3dlc3RQb3NpdGlvbihmYWxzZSkpOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtNTkwLDExICs1NjAsMTAgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlv
bjo6cmlnaHRtb3N0UG9zaXRpbwogICAgIGlmICghaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgJiYg
aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiByaWdodDsKIAotICAgIGZvciAoUmVu
ZGVyT2JqZWN0ICpyb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjZWxsID0gcm93LT5maXJzdENoaWxk
KCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgaWYgKGNl
bGwtPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgcnAgPSBjZWxsLT54UG9z
KCkgKyBjZWxsLT5yaWdodG1vc3RQb3NpdGlvbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmln
aHQgPSBtYXgocmlnaHQsIHJwKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogcm93ID0gZmlyc3RD
aGlsZCgpOyByb3c7IHJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBmb3IgKFJl
bmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGlsZCgpOyBjZWxsOyBjZWxsID0gY2VsbC0+
bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgaWYgKGNlbGwtPmlzVGFibGVDZWxsKCkpCisg
ICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIGNlbGwtPnhQb3MoKSArIGNlbGwtPnJp
Z2h0bW9zdFBvc2l0aW9uKGZhbHNlKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC02MDcs
MTEgKzU3NiwxMCBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsZWZ0bW9zdFBvc2l0aW9uCiAg
ICAgaWYgKCFpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkKICAg
ICAgICAgcmV0dXJuIGxlZnQ7CiAgICAgCi0gICAgZm9yIChSZW5kZXJPYmplY3QgKnJvdyA9IGZp
cnN0Q2hpbGQoKTsgcm93OyByb3cgPSByb3ctPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgZm9y
IChSZW5kZXJPYmplY3QgKmNlbGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9IGNl
bGwtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICBpZiAoY2VsbC0+aXNUYWJsZUNlbGwoKSkg
ewotICAgICAgICAgICAgICAgIGludCBscCA9IGNlbGwtPnhQb3MoKSArIGNlbGwtPmxlZnRtb3N0
UG9zaXRpb24oZmFsc2UpOwotICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgbHApOwor
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiByb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93
LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjZWxsID0gcm93
LT5maXJzdENoaWxkKCk7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0U2libGluZygpKSB7CisgICAg
ICAgICAgICBpZiAoY2VsbC0+aXNUYWJsZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBsZWZ0ID0g
bWluKGxlZnQsIGNlbGwtPnhQb3MoKSArIGNlbGwtPmxlZnRtb3N0UG9zaXRpb24oZmFsc2UpKTsK
ICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTYyMSw3ICs1ODksNyBAQCBpbnQgUmVuZGVyVGFi
bGVTZWN0aW9uOjpsZWZ0bW9zdFBvc2l0aW9uCiBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxj
T3V0ZXJCb3JkZXJUb3AoKSBjb25zdAogewogICAgIGludCB0b3RhbENvbHMgPSB0YWJsZSgpLT5u
dW1FZmZDb2xzKCk7Ci0gICAgaWYgKGdyaWRSb3dzID09IDAgfHwgdG90YWxDb2xzID09IDApCisg
ICAgaWYgKCFtX2dyaWRSb3dzIHx8ICF0b3RhbENvbHMpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgdW5zaWduZWQgYm9yZGVyV2lkdGggPSAwOwpAQCAtNjc0LDcgKzY0Miw3IEBAIGludCBSZW5k
ZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclQKIGludCBSZW5kZXJUYWJsZVNlY3Rpb246
OmNhbGNPdXRlckJvcmRlckJvdHRvbSgpIGNvbnN0CiB7CiAgICAgaW50IHRvdGFsQ29scyA9IHRh
YmxlKCktPm51bUVmZkNvbHMoKTsKLSAgICBpZiAoZ3JpZFJvd3MgPT0gMCB8fCB0b3RhbENvbHMg
PT0gMCkKKyAgICBpZiAoIW1fZ3JpZFJvd3MgfHwgIXRvdGFsQ29scykKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICB1bnNpZ25lZCBib3JkZXJXaWR0aCA9IDA7CkBAIC02OTMsNyArNjYxLDcgQEAg
aW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyQgogCiAgICAgYm9vbCBhbGxI
aWRkZW4gPSB0cnVlOwogICAgIGZvciAoaW50IGMgPSAwOyBjIDwgdG90YWxDb2xzOyBjKyspIHsK
LSAgICAgICAgY29uc3QgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChncmlkUm93cyAtIDEs
IGMpOworICAgICAgICBjb25zdCBDZWxsU3RydWN0JiBjdXJyZW50ID0gY2VsbEF0KG1fZ3JpZFJv
d3MgLSAxLCBjKTsKICAgICAgICAgaWYgKGN1cnJlbnQuaW5Db2xTcGFuIHx8ICFjdXJyZW50LmNl
bGwpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGNi
ID0gY3VycmVudC5jZWxsLT5zdHlsZSgpLT5ib3JkZXJCb3R0b20oKTsKQEAgLTcyNyw3ICs2OTUs
NyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJCCiBpbnQgUmVuZGVy
VGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJMZWZ0KGJvb2wgcnRsKSBjb25zdAogewogICAg
IGludCB0b3RhbENvbHMgPSB0YWJsZSgpLT5udW1FZmZDb2xzKCk7Ci0gICAgaWYgKGdyaWRSb3dz
ID09IDAgfHwgdG90YWxDb2xzID09IDApCisgICAgaWYgKCFtX2dyaWRSb3dzIHx8ICF0b3RhbENv
bHMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgdW5zaWduZWQgYm9yZGVyV2lkdGggPSAwOwpA
QCAtNzQ5LDcgKzcxNyw3IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRl
ckwKICAgICB9CiAKICAgICBib29sIGFsbEhpZGRlbiA9IHRydWU7Ci0gICAgZm9yIChpbnQgciA9
IDA7IHIgPCBncmlkUm93czsgcisrKSB7CisgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtX2dyaWRS
b3dzOyByKyspIHsKICAgICAgICAgY29uc3QgQ2VsbFN0cnVjdCYgY3VycmVudCA9IGNlbGxBdChy
LCBsZWZ0bW9zdENvbHVtbik7CiAgICAgICAgIGlmICghY3VycmVudC5jZWxsKQogICAgICAgICAg
ICAgY29udGludWU7CkBAIC03NzQsNyArNzQyLDcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6
Y2FsY091dGVyQm9yZGVyTAogaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVy
UmlnaHQoYm9vbCBydGwpIGNvbnN0CiB7CiAgICAgaW50IHRvdGFsQ29scyA9IHRhYmxlKCktPm51
bUVmZkNvbHMoKTsKLSAgICBpZiAoZ3JpZFJvd3MgPT0gMCB8fCB0b3RhbENvbHMgPT0gMCkKKyAg
ICBpZiAoIW1fZ3JpZFJvd3MgfHwgIXRvdGFsQ29scykKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICB1bnNpZ25lZCBib3JkZXJXaWR0aCA9IDA7CkBAIC03OTYsNyArNzY0LDcgQEAgaW50IFJlbmRl
clRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyUgogICAgIH0KIAogICAgIGJvb2wgYWxsSGlk
ZGVuID0gdHJ1ZTsKLSAgICBmb3IgKGludCByID0gMDsgciA8IGdyaWRSb3dzOyByKyspIHsKKyAg
ICBmb3IgKGludCByID0gMDsgciA8IG1fZ3JpZFJvd3M7IHIrKykgewogICAgICAgICBjb25zdCBD
ZWxsU3RydWN0JiBjdXJyZW50ID0gY2VsbEF0KHIsIHJpZ2h0bW9zdENvbHVtbik7CiAgICAgICAg
IGlmICghY3VycmVudC5jZWxsKQogICAgICAgICAgICAgY29udGludWU7CkBAIC04MzAsMTcgKzc5
OCwxNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVjYWxjT3V0ZXJCb3JkCiAKIHZvaWQg
UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBp
bnQgdHkpCiB7Ci0gICAgdW5zaWduZWQgaW50IHRvdGFsUm93cyA9IGdyaWRSb3dzOwotICAgIHVu
c2lnbmVkIGludCB0b3RhbENvbHMgPSB0YWJsZSgpLT5jb2x1bW5zLnNpemUoKTsKKyAgICB1bnNp
Z25lZCB0b3RhbFJvd3MgPSBtX2dyaWRSb3dzOworICAgIHVuc2lnbmVkIHRvdGFsQ29scyA9IHRh
YmxlKCktPmNvbHVtbnMoKS5zaXplKCk7CiAKLSAgICBpZiAodG90YWxSb3dzID09IDAgfHwgdG90
YWxDb2xzID09IDApCisgICAgaWYgKCF0b3RhbFJvd3MgfHwgIXRvdGFsQ29scykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdHggKz0gbV94OwogICAgIHR5ICs9IG1feTsKIAotICAgIC8vIGNoZWNr
IHdoaWNoIHJvd3MgYW5kIGNvbHMgYXJlIHZpc2libGUgYW5kIG9ubHkgcGFpbnQgdGhlc2UKLSAg
ICAvLyAjIyMgZml4bWU6IGNvdWxkIHVzZSBhIGJpbmFyeSBzZWFyY2ggaGVyZQorICAgIC8vIENo
ZWNrIHdoaWNoIHJvd3MgYW5kIGNvbHMgYXJlIHZpc2libGUgYW5kIG9ubHkgcGFpbnQgdGhlc2Uu
CisgICAgLy8gRklYTUU6IENvdWxkIHVzZSBhIGJpbmFyeSBzZWFyY2ggaGVyZS4KICAgICBQYWlu
dFBoYXNlIHBhaW50UGhhc2UgPSBwYWludEluZm8ucGhhc2U7CiAgICAgaW50IHggPSBwYWludElu
Zm8ucmVjdC54KCk7CiAgICAgaW50IHkgPSBwYWludEluZm8ucmVjdC55KCk7CkBAIC04NDgsNDQg
KzgxNiw0NCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvCiAgICAg
aW50IGggPSBwYWludEluZm8ucmVjdC5oZWlnaHQoKTsKIAogICAgIGludCBvcyA9IDIgKiBtYXhp
bWFsT3V0bGluZVNpemUocGFpbnRQaGFzZSk7Ci0gICAgdW5zaWduZWQgaW50IHN0YXJ0cm93ID0g
MDsKLSAgICB1bnNpZ25lZCBpbnQgZW5kcm93ID0gdG90YWxSb3dzOworICAgIHVuc2lnbmVkIHN0
YXJ0cm93ID0gMDsKKyAgICB1bnNpZ25lZCBlbmRyb3cgPSB0b3RhbFJvd3M7CiAgICAgZm9yICg7
IHN0YXJ0cm93IDwgdG90YWxSb3dzOyBzdGFydHJvdysrKSB7Ci0gICAgICAgIGlmICh0eSArIHJv
d1Bvc1tzdGFydHJvdysxXSA+PSB5IC0gb3MpCisgICAgICAgIGlmICh0eSArIG1fcm93UG9zW3N0
YXJ0cm93ICsgMV0gPj0geSAtIG9zKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlm
IChzdGFydHJvdyA9PSB0b3RhbFJvd3MgJiYgdHkgKyByb3dQb3NbdG90YWxSb3dzXSArIHRhYmxl
KCktPm91dGVyQm9yZGVyQm90dG9tKCkgPj0geSAtIG9zKQorICAgIGlmIChzdGFydHJvdyA9PSB0
b3RhbFJvd3MgJiYgdHkgKyBtX3Jvd1Bvc1t0b3RhbFJvd3NdICsgdGFibGUoKS0+b3V0ZXJCb3Jk
ZXJCb3R0b20oKSA+PSB5IC0gb3MpCiAgICAgICAgIHN0YXJ0cm93LS07CiAKICAgICBmb3IgKDsg
ZW5kcm93ID4gMDsgZW5kcm93LS0pIHsKLSAgICAgICAgaWYgKHR5ICsgcm93UG9zW2VuZHJvdy0x
XSA8PSB5ICsgaCArIG9zKQorICAgICAgICBpZiAodHkgKyBtX3Jvd1Bvc1tlbmRyb3cgLSAxXSA8
PSB5ICsgaCArIG9zKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmIChlbmRyb3cg
PT0gMCAmJiB0eSArIHJvd1Bvc1swXSAtIHRhYmxlKCktPm91dGVyQm9yZGVyVG9wKCkgPD0geSAr
IGggKyBvcykKKyAgICBpZiAoIWVuZHJvdyAmJiB0eSArIG1fcm93UG9zWzBdIC0gdGFibGUoKS0+
b3V0ZXJCb3JkZXJUb3AoKSA8PSB5ICsgaCArIG9zKQogICAgICAgICBlbmRyb3crKzsKIAotICAg
IHVuc2lnbmVkIGludCBzdGFydGNvbCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGVuZGNvbCA9IHRv
dGFsQ29sczsKKyAgICB1bnNpZ25lZCBzdGFydGNvbCA9IDA7CisgICAgdW5zaWduZWQgZW5kY29s
ID0gdG90YWxDb2xzOwogICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAg
ICAgICAgZm9yICg7IHN0YXJ0Y29sIDwgdG90YWxDb2xzOyBzdGFydGNvbCsrKSB7Ci0gICAgICAg
ICAgICBpZiAodHggKyB0YWJsZSgpLT5jb2x1bW5Qb3Nbc3RhcnRjb2wgKyAxXSA+PSB4IC0gb3Mp
CisgICAgICAgICAgICBpZiAodHggKyB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKVtzdGFydGNv
bCArIDFdID49IHggLSBvcykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBpZiAoc3RhcnRjb2wgPT0gdG90YWxDb2xzICYmIHR4ICsgdGFibGUoKS0+Y29sdW1uUG9z
W3RvdGFsQ29sc10gKyB0YWJsZSgpLT5vdXRlckJvcmRlclJpZ2h0KCkgPj0geCAtIG9zKQorICAg
ICAgICBpZiAoc3RhcnRjb2wgPT0gdG90YWxDb2xzICYmIHR4ICsgdGFibGUoKS0+Y29sdW1uUG9z
aXRpb25zKClbdG90YWxDb2xzXSArIHRhYmxlKCktPm91dGVyQm9yZGVyUmlnaHQoKSA+PSB4IC0g
b3MpCiAgICAgICAgICAgICBzdGFydGNvbC0tOwogCiAgICAgICAgIGZvciAoOyBlbmRjb2wgPiAw
OyBlbmRjb2wtLSkgewotICAgICAgICAgICAgaWYgKHR4ICsgdGFibGUoKS0+Y29sdW1uUG9zW2Vu
ZGNvbCAtIDFdIDw9IHggKyB3ICsgb3MpCisgICAgICAgICAgICBpZiAodHggKyB0YWJsZSgpLT5j
b2x1bW5Qb3NpdGlvbnMoKVtlbmRjb2wgLSAxXSA8PSB4ICsgdyArIG9zKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChlbmRjb2wgPT0gMCAmJiB0eCArIHRh
YmxlKCktPmNvbHVtblBvc1swXSAtIHRhYmxlKCktPm91dGVyQm9yZGVyTGVmdCgpIDw9IHkgKyB3
ICsgb3MpCisgICAgICAgIGlmICghZW5kY29sICYmIHR4ICsgdGFibGUoKS0+Y29sdW1uUG9zaXRp
b25zKClbMF0gLSB0YWJsZSgpLT5vdXRlckJvcmRlckxlZnQoKSA8PSB5ICsgdyArIG9zKQogICAg
ICAgICAgICAgZW5kY29sKys7CiAgICAgfQogCiAgICAgaWYgKHN0YXJ0Y29sIDwgZW5kY29sKSB7
CiAgICAgICAgIC8vIGRyYXcgdGhlIGNlbGxzCi0gICAgICAgIGZvciAodW5zaWduZWQgaW50IHIg
PSBzdGFydHJvdzsgciA8IGVuZHJvdzsgcisrKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQg
YyA9IHN0YXJ0Y29sOworICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSBzdGFydHJvdzsgciA8IGVu
ZHJvdzsgcisrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjID0gc3RhcnRjb2w7CiAgICAgICAg
ICAgICAvLyBzaW5jZSBhIGNlbGwgY2FuIGJlIC0xIChpbmRpY2F0aW5nIGEgY29sc3Bhbikgd2Ug
bWlnaHQgaGF2ZSB0byBzZWFyY2ggYmFja3dhcmRzIHRvIGluY2x1ZGUgaXQKICAgICAgICAgICAg
IHdoaWxlIChjICYmIGNlbGxBdChyLCBjKS5pbkNvbFNwYW4pCiAgICAgICAgICAgICAgICAgYy0t
OwpAQCAtOTA0LDExICs4NzIsOSBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFp
bnRJbmZvCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjb2x1bW4gZ3JvdXAsIGNvbHVtbiwg
cm93IGdyb3VwLCByb3csIGFuZCB0aGVuIHRoZSBjZWxsLgogICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIGNvbCA9IHRhYmxlKCktPmNvbEVsZW1lbnQoYyk7CiAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogY29sR3JvdXAgPSAwOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoY29sKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSBj
b2wtPnBhcmVudCgpLT5zdHlsZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxl
LT5kaXNwbGF5KCkgPT0gVEFCTEVfQ09MVU1OX0dST1VQKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbEdyb3VwID0gY29sLT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAoY29sICYmIGNvbC0+cGFyZW50KCktPnN0eWxlKCktPmRp
c3BsYXkoKSA9PSBUQUJMRV9DT0xVTU5fR1JPVVApCisgICAgICAgICAgICAgICAgICAgICAgICBj
b2xHcm91cCA9IGNvbC0+cGFyZW50KCk7CisKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByb3cgPSBjZWxsLT5wYXJlbnQoKTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBDb2x1
bW4gZ3JvdXBzIGFuZCBjb2x1bW5zIGZpcnN0LgpAQCAtOTM3LDM5ICs5MDMsNDAgQEAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbwogCiB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6cmVjYWxjQ2VsbHMoKQogewotICAgIGNDb2wgPSAwOwotICAgIGNSb3cgPSAtMTsKKyAg
ICBtX2NDb2wgPSAwOworICAgIG1fY1JvdyA9IC0xOwogICAgIGNsZWFyR3JpZCgpOwotICAgIGdy
aWRSb3dzID0gMDsKKyAgICBtX2dyaWRSb3dzID0gMDsKIAotICAgIGZvciAoUmVuZGVyT2JqZWN0
ICpyb3cgPSBmaXJzdENoaWxkKCk7IHJvdzsgcm93ID0gcm93LT5uZXh0U2libGluZygpKSB7Cisg
ICAgZm9yIChSZW5kZXJPYmplY3QqIHJvdyA9IGZpcnN0Q2hpbGQoKTsgcm93OyByb3cgPSByb3ct
Pm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKHJvdy0+aXNUYWJsZVJvdygpKSB7Ci0gICAg
ICAgICAgICBjUm93Kys7Ci0gICAgICAgICAgICBjQ29sID0gMDsKLSAgICAgICAgICAgIGVuc3Vy
ZVJvd3MoY1JvdyArIDEpOwotICAgICAgICAgICAgZ3JpZFtjUm93XS5yb3dSZW5kZXJlciA9IHJv
dzsKKyAgICAgICAgICAgIG1fY1JvdysrOworICAgICAgICAgICAgbV9jQ29sID0gMDsKKyAgICAg
ICAgICAgIGVuc3VyZVJvd3MobV9jUm93ICsgMSk7CisgICAgICAgICAgICBtX2dyaWRbbV9jUm93
XS5yb3dSZW5kZXJlciA9IHJvdzsKIAotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QgKmNl
bGwgPSByb3ctPmZpcnN0Q2hpbGQoKTsgY2VsbDsgY2VsbCA9IGNlbGwtPm5leHRTaWJsaW5nKCkp
CisgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2VsbCA9IHJvdy0+Zmlyc3RDaGlsZCgp
OyBjZWxsOyBjZWxsID0gY2VsbC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgIGlm
IChjZWxsLT5pc1RhYmxlQ2VsbCgpKQotICAgICAgICAgICAgICAgICAgICBhZGRDZWxsKHN0YXRp
Y19jYXN0PFJlbmRlclRhYmxlQ2VsbCAqPihjZWxsKSwgcm93KTsKKyAgICAgICAgICAgICAgICAg
ICAgYWRkQ2VsbChzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNlbGwqPihjZWxsKSwgcm93KTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBuZWVkQ2VsbFJlY2FsYyA9IGZhbHNl
OworICAgIG1fbmVlZHNDZWxsUmVjYWxjID0gZmFsc2U7CiAgICAgc2V0TmVlZHNMYXlvdXQodHJ1
ZSk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpjbGVhckdyaWQoKQogewotICAgIGlu
dCByb3dzID0gZ3JpZFJvd3M7CisgICAgaW50IHJvd3MgPSBtX2dyaWRSb3dzOwogICAgIHdoaWxl
IChyb3dzLS0pCi0gICAgICAgIGRlbGV0ZSBncmlkW3Jvd3NdLnJvdzsKKyAgICAgICAgZGVsZXRl
IG1fZ3JpZFtyb3dzXS5yb3c7CiB9CiAKIGludCBSZW5kZXJUYWJsZVNlY3Rpb246Om51bUNvbHVt
bnMoKSBjb25zdAogewogICAgIGludCByZXN1bHQgPSAwOwogICAgIAotICAgIGZvciAoaW50IHIg
PSAwOyByIDwgZ3JpZFJvd3M7ICsrcikgeworICAgIGZvciAoaW50IHIgPSAwOyByIDwgbV9ncmlk
Um93czsgKytyKSB7CiAgICAgICAgIGZvciAoaW50IGMgPSByZXN1bHQ7IGMgPCB0YWJsZSgpLT5u
dW1FZmZDb2xzKCk7ICsrYykgewogICAgICAgICAgICAgY29uc3QgQ2VsbFN0cnVjdCYgY2VsbCA9
IGNlbGxBdChyLCBjKTsKICAgICAgICAgICAgIGlmIChjZWxsLmNlbGwgfHwgY2VsbC5pbkNvbFNw
YW4pCkBAIC05ODAsOSArOTQ3LDMyIEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246Om51bUNvbHVt
bnMoKSBjb24KICAgICByZXR1cm4gcmVzdWx0ICsgMTsKIH0KIAordm9pZCBSZW5kZXJUYWJsZVNl
Y3Rpb246OmFwcGVuZENvbHVtbihpbnQgcG9zKQoreworICAgIGZvciAoaW50IHJvdyA9IDA7IHJv
dyA8IG1fZ3JpZFJvd3M7ICsrcm93KSB7CisgICAgICAgIG1fZ3JpZFtyb3ddLnJvdy0+cmVzaXpl
KHBvcyArIDEpOworICAgICAgICBDZWxsU3RydWN0JiBjID0gY2VsbEF0KHJvdywgcG9zKTsKKyAg
ICAgICAgYy5jZWxsID0gMDsKKyAgICAgICAgYy5pbkNvbFNwYW4gPSBmYWxzZTsKKyAgICB9Cit9
CisKK3ZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbihpbnQgcG9zLCBpbnQgbmV3
U2l6ZSkKK3sKKyAgICBpZiAobV9jQ29sID4gcG9zKQorICAgICAgICBtX2NDb2wrKzsKKyAgICBm
b3IgKGludCByb3cgPSAwOyByb3cgPCBtX2dyaWRSb3dzOyArK3JvdykgeworICAgICAgICBtX2dy
aWRbcm93XS5yb3ctPnJlc2l6ZShuZXdTaXplKTsKKyAgICAgICAgUm93JiByID0gKm1fZ3JpZFty
b3ddLnJvdzsKKyAgICAgICAgbWVtbW92ZShyLmRhdGEoKSArIHBvcyArIDEsIHIuZGF0YSgpICsg
cG9zLCAobmV3U2l6ZSAtIDEgLSBwb3MpICogc2l6ZW9mKENlbGxTdHJ1Y3QpKTsKKyAgICAgICAg
cltwb3MgKyAxXS5jZWxsID0gMDsKKyAgICAgICAgcltwb3MgKyAxXS5pbkNvbFNwYW4gPSByW3Bv
c10uaW5Db2xTcGFuIHx8IHJbcG9zXS5jZWxsOworICAgIH0KK30KKwogUmVuZGVyT2JqZWN0KiBS
ZW5kZXJUYWJsZVNlY3Rpb246OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkKQog
ewotICAgIHNldE5lZWRDZWxsUmVjYWxjKCk7CisgICAgc2V0TmVlZHNDZWxsUmVjYWxjKCk7CiAg
ICAgcmV0dXJuIFJlbmRlckNvbnRhaW5lcjo6cmVtb3ZlQ2hpbGROb2RlKGNoaWxkKTsKIH0KIApA
QCAtMTAwOSwxMiArOTk5LDEyIEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2lu
dChjb24KIH0KIAogI2lmbmRlZiBOREVCVUcKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpkdW1w
KFRleHRTdHJlYW0gKnN0cmVhbSwgRGVwcmVjYXRlZFN0cmluZyBpbmQpIGNvbnN0Cit2b2lkIFJl
bmRlclRhYmxlU2VjdGlvbjo6ZHVtcChUZXh0U3RyZWFtKiBzdHJlYW0sIERlcHJlY2F0ZWRTdHJp
bmcgaW5kKSBjb25zdAogewotICAgICpzdHJlYW0gPDwgZW5kbCA8PCBpbmQgPDwgImdyaWQ9KCIg
PDwgZ3JpZFJvd3MgPDwgIiwiIDw8IHRhYmxlKCktPm51bUVmZkNvbHMoKSA8PCAiKSIgPDwgZW5k
bCA8PCBpbmQ7Ci0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBncmlkUm93czsgcisrKSB7CisgICAg
KnN0cmVhbSA8PCBlbmRsIDw8IGluZCA8PCAiZ3JpZD0oIiA8PCBtX2dyaWRSb3dzIDw8ICIsIiA8
PCB0YWJsZSgpLT5udW1FZmZDb2xzKCkgPDwgIikiIDw8IGVuZGwgPDwgaW5kOworICAgIGZvciAo
aW50IHIgPSAwOyByIDwgbV9ncmlkUm93czsgcisrKSB7CiAgICAgICAgIGZvciAoaW50IGMgPSAw
OyBjIDwgdGFibGUoKS0+bnVtRWZmQ29scygpOyBjKyspIHsKLSAgICAgICAgICAgIGlmIChjZWxs
QXQoIHIsIGMpLmNlbGwgJiYgIWNlbGxBdChyLCBjKS5pbkNvbFNwYW4pCisgICAgICAgICAgICBp
ZiAoY2VsbEF0KHIsIGMpLmNlbGwgJiYgIWNlbGxBdChyLCBjKS5pbkNvbFNwYW4pCiAgICAgICAg
ICAgICAgICAgKnN0cmVhbSA8PCAiKCIgPDwgY2VsbEF0KHIsIGMpLmNlbGwtPnJvdygpIDw8ICIs
IiA8PCBjZWxsQXQociwgYykuY2VsbC0+Y29sKCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAg
ICAgICA8PCBjZWxsQXQociwgYykuY2VsbC0+cm93U3BhbigpIDw8ICIsIiA8PCBjZWxsQXQociwg
YykuY2VsbC0+Y29sU3BhbigpIDw8ICIpICI7CiAgICAgICAgICAgICBlbHNlCkBAIC0xMDI2LDQg
KzEwMTYsNCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6ZHVtcChUZXh0U3RyZWFtCiB9CiAj
ZW5kaWYKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDE4NTc0KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDggQEAK
ICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKLSNpZm5kZWYgUmVuZGVyVGFi
bGVTZWN0aW9uX0gKLSNkZWZpbmUgUmVuZGVyVGFibGVTZWN0aW9uX0gKKyNpZm5kZWYgUmVuZGVy
VGFibGVTZWN0aW9uX2gKKyNkZWZpbmUgUmVuZGVyVGFibGVTZWN0aW9uX2gKIAogI2luY2x1ZGUg
IlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzQsNDEgKzM0LDM5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyVGFibGVDZWxsOwogCi1jbGFz
cyBSZW5kZXJUYWJsZVNlY3Rpb24gOiBwdWJsaWMgUmVuZGVyQ29udGFpbmVyCi17CitjbGFzcyBS
ZW5kZXJUYWJsZVNlY3Rpb24gOiBwdWJsaWMgUmVuZGVyQ29udGFpbmVyIHsKIHB1YmxpYzoKICAg
ICBSZW5kZXJUYWJsZVNlY3Rpb24oTm9kZSopOwogICAgIH5SZW5kZXJUYWJsZVNlY3Rpb24oKTsK
KworICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJUYWJsZVNlY3Rpb24iOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNUYWJsZVNlY3Rpb24o
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwog
CiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlKik7CiAKLSAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyVGFibGVTZWN0
aW9uIjsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAKLSAgICAvLyBvdmVycmlkZXMKLSAgICB2
aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0ICpjaGlsZCwgUmVuZGVyT2JqZWN0ICpi
ZWZvcmVDaGlsZCA9IDApOwotICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlU2VjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodChib29sKSBj
b25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wgZmly
c3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3QgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbihJbmxpbmVCb3gqKSB7IH0KIAotI2lmbmRlZiBOREVC
VUcKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtICpzdHJlYW0sIERlcHJlY2F0ZWRT
dHJpbmcgaW5kID0gIiIpIGNvbnN0OwotI2VuZGlmCi0KLSAgICB2b2lkIGFkZENlbGwoUmVuZGVy
VGFibGVDZWxsICpjZWxsLCBSZW5kZXJPYmplY3QqIHJvdyk7CisgICAgdm9pZCBhZGRDZWxsKFJl
bmRlclRhYmxlQ2VsbCosIFJlbmRlck9iamVjdCogcm93KTsKIAogICAgIHZvaWQgc2V0Q2VsbFdp
ZHRocygpOwogICAgIHZvaWQgY2FsY1Jvd0hlaWdodCgpOwogICAgIGludCBsYXlvdXRSb3dzKGlu
dCBoZWlnaHQpOwogCi0gICAgUmVuZGVyVGFibGUgKnRhYmxlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFibGUgKj4ocGFyZW50KCkpOyB9CisgICAgUmVuZGVyVGFibGUqIHRh
YmxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihwYXJlbnQoKSk7
IH0KIAogICAgIHN0cnVjdCBDZWxsU3RydWN0IHsKLSAgICAgICAgUmVuZGVyVGFibGVDZWxsICpj
ZWxsOworICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGw7CiAgICAgICAgIGJvb2wgaW5Db2xT
cGFuOyAvLyB0cnVlIGZvciBjb2x1bW5zIGFmdGVyIHRoZSBmaXJzdCBpbiBhIGNvbHNwYW4KICAg
ICB9OworCiAgICAgdHlwZWRlZiBWZWN0b3I8Q2VsbFN0cnVjdD4gUm93OworCiAgICAgc3RydWN0
IFJvd1N0cnVjdCB7CiAgICAgICAgIFJvdyogcm93OwogICAgICAgICBSZW5kZXJPYmplY3QqIHJv
d1JlbmRlcmVyOwpAQCAtNzYsMTIgKzc0LDExIEBAIHB1YmxpYzoKICAgICAgICAgTGVuZ3RoIGhl
aWdodDsKICAgICB9OwogCi0gICAgQ2VsbFN0cnVjdCYgY2VsbEF0KGludCByb3csICBpbnQgY29s
KSB7Ci0gICAgICAgIHJldHVybiAoKmdyaWRbcm93XS5yb3cpW2NvbF07Ci0gICAgfQotICAgIGNv
bnN0IENlbGxTdHJ1Y3QmIGNlbGxBdChpbnQgcm93LCBpbnQgY29sKSBjb25zdCB7Ci0gICAgICAg
IHJldHVybiAoKmdyaWRbcm93XS5yb3cpW2NvbF07Ci0gICAgfQorICAgIENlbGxTdHJ1Y3QmIGNl
bGxBdChpbnQgcm93LCAgaW50IGNvbCkgeyByZXR1cm4gKCptX2dyaWRbcm93XS5yb3cpW2NvbF07
IH0KKyAgICBjb25zdCBDZWxsU3RydWN0JiBjZWxsQXQoaW50IHJvdywgaW50IGNvbCkgY29uc3Qg
eyByZXR1cm4gKCptX2dyaWRbcm93XS5yb3cpW2NvbF07IH0KKworICAgIHZvaWQgYXBwZW5kQ29s
dW1uKGludCBwb3MpOworICAgIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbihp
bnQgcG9zLCBpbnQgbmV3U2l6ZSk7CiAKICAgICB2aXJ0dWFsIGludCBsb3dlc3RQb3NpdGlvbihi
b29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGludCByaWdodG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVy
aW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdDsKQEAgLTEwMCw0MCArOTcsNTEgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsK
IAotICAgIGludCBudW1Sb3dzKCkgY29uc3QgeyByZXR1cm4gZ3JpZFJvd3M7IH0KKyAgICBpbnQg
bnVtUm93cygpIGNvbnN0IHsgcmV0dXJuIG1fZ3JpZFJvd3M7IH0KICAgICBpbnQgbnVtQ29sdW1u
cygpIGNvbnN0OwotICAgIGludCBnZXRCYXNlbGluZShpbnQgcm93KSB7IHJldHVybiBncmlkW3Jv
d10uYmFzZUxpbmU7IH0KKyAgICB2b2lkIHJlY2FsY0NlbGxzKCk7CisgICAgdm9pZCByZWNhbGND
ZWxsc0lmTmVlZGVkKCkKKyAgICB7CisgICAgICAgIGlmIChtX25lZWRzQ2VsbFJlY2FsYykKKyAg
ICAgICAgICAgIHJlY2FsY0NlbGxzKCk7CisgICAgfQogCi0gICAgdm9pZCBzZXROZWVkQ2VsbFJl
Y2FsYygpCisgICAgYm9vbCBuZWVkc0NlbGxSZWNhbGMoKSBjb25zdCB7IHJldHVybiBtX25lZWRz
Q2VsbFJlY2FsYzsgfQorICAgIHZvaWQgc2V0TmVlZHNDZWxsUmVjYWxjKCkKICAgICB7Ci0gICAg
ICAgIG5lZWRDZWxsUmVjYWxjID0gdHJ1ZTsKLSAgICAgICAgdGFibGUoKS0+c2V0TmVlZFNlY3Rp
b25SZWNhbGMoKTsKKyAgICAgICAgbV9uZWVkc0NlbGxSZWNhbGMgPSB0cnVlOworICAgICAgICB0
YWJsZSgpLT5zZXROZWVkc1NlY3Rpb25SZWNhbGMoKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFJl
bmRlck9iamVjdCogcmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQpOworICAgIGlu
dCBnZXRCYXNlbGluZShpbnQgcm93KSB7IHJldHVybiBtX2dyaWRbcm93XS5iYXNlTGluZTsgfQog
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0
Kik7CiAKLSAgICAvLyB0aGlzIGdldHMgYSBjZWxsIGdyaWQgZGF0YSBzdHJ1Y3R1cmUuIGNoYW5n
aW5nIHRoZSBudW1iZXIgb2YKLSAgICAvLyBjb2x1bW5zIGlzIGRvbmUgYnkgdGhlIHRhYmxlCi0g
ICAgVmVjdG9yPFJvd1N0cnVjdD4gZ3JpZDsKLSAgICBpbnQgZ3JpZFJvd3M7Ci0gICAgVmVjdG9y
PGludD4gcm93UG9zOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBI
aXRUZXN0QWN0aW9uKTsKIAotICAgIC8vIHRoZSBjdXJyZW50IGluc2VydGlvbiBwb3NpdGlvbgot
ICAgIGludCBjQ29sOwotICAgIGludCBjUm93OwotICAgIGJvb2wgbmVlZENlbGxSZWNhbGM7Cisj
aWZuZGVmIE5ERUJVRworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJlYW0qLCBEZXByZWNh
dGVkU3RyaW5nIGluZCA9ICIiKSBjb25zdDsKKyNlbmRpZgogCi0gICAgdm9pZCByZWNhbGNDZWxs
cygpOwogcHJvdGVjdGVkOgotICAgIGJvb2wgZW5zdXJlUm93cyhpbnQgbnVtUm93cyk7CisgICAg
Ym9vbCBlbnN1cmVSb3dzKGludCk7CiAgICAgdm9pZCBjbGVhckdyaWQoKTsKKworICAgIFZlY3Rv
cjxSb3dTdHJ1Y3Q+IG1fZ3JpZDsKKyAgICBpbnQgbV9ncmlkUm93czsKKyAgICBWZWN0b3I8aW50
PiBtX3Jvd1BvczsKKworICAgIC8vIHRoZSBjdXJyZW50IGluc2VydGlvbiBwb3NpdGlvbgorICAg
IGludCBtX2NDb2w7CisgICAgaW50IG1fY1JvdzsKKyAgICBib29sIG1fbmVlZHNDZWxsUmVjYWxj
OworCiAgICAgaW50IG1fb3V0ZXJCb3JkZXJMZWZ0OwogICAgIGludCBtX291dGVyQm9yZGVyUmln
aHQ7CiAgICAgaW50IG1fb3V0ZXJCb3JkZXJUb3A7CiAgICAgaW50IG1fb3V0ZXJCb3JkZXJCb3R0
b207CiB9OwogCi19Ci0jZW5kaWYKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFJlbmRlclRhYmxlU2VjdGlvbl9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9UYWJsZUxheW91
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgJKHJldmlz
aW9uIDE4NTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5UYWJsZUxheW91
dCgpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgPSAwOwogCiBwcm90ZWN0ZWQ6Cg==
</data>
<flag name="review"
          id="4537"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>