<?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>76265</bug_id>
          
          <creation_ts>2012-01-13 04:32:25 -0800</creation_ts>
          <short_desc>Cache RenderStyle pointer as a method to avoid performance regression for region styling</short_desc>
          <delta_ts>2012-01-19 01:23:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76266</dependson>
          <blocked>71488</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihnea Ovidenie">mihnea</reporter>
          <assigned_to name="Mihnea Ovidenie">mihnea</assigned_to>
          <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>535585</commentid>
    <comment_count>0</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-13 04:32:25 -0800</bug_when>
    <thetext>During the investigation of regression introduced by region style patch (https://bugs.webkit.org/show_bug.cgi?id=71488), it turned out that an important contribution to the regression was introduced by the layout of RenderObject::style()

inline RenderStyle* RenderObject::style() const
{
    if (!inRenderFlowThread())
        return m_style.get();
    return styleInRegion();
}

During several runs of webkit build in instruments, i was able to identify some areas in which the method of caching RenderStyle pointer and replace style() with the cached pointer seems to fix the performance regression introduced by the modified version of style().

These areas are:
* updateBoxModelInfoFromStyle (RenderBoxModelObject/RenderBox)
* computePreferredLogicalWidths
* styleDidChange/styleWillChange (RenderText/RenderBlock/RenderBoxModelObject/RenderInline/RenderBox)
* RenderBlock layout methods (layoutRunsAndFloats/LineBreaker::nextLineBreak/layoutInlineChildren/layoutBlock)
* RenderBox willBeDestroyed/paintBoxDecorarations/computeRectForRepaint/computeLogicalHeight
* RenderText widthFromCache/width


I intend to create a WebKit bug for each of the above bullets instead of creating a big patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535766</commentid>
    <comment_count>1</comment_count>
      <attachid>122448</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-13 10:23:57 -0800</bug_when>
    <thetext>Created attachment 122448
Patch

I decided to add just one patch instead of multiple patches since this is mainly a mechanical replacement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535768</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-13 10:26:39 -0800</bug_when>
    <thetext>Attachment 122448 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/rendering/RenderBox.cpp:2134:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/WebCore/rendering/RenderBlock.cpp:105:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/rendering/RenderBlock.cpp:112:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/rendering/RenderBlock.cpp:114:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/rendering/RenderBoxModelObject.cpp:331:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/rendering/RenderBoxModelObject.cpp:332:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/rendering/RenderBoxModelObject.cpp:333:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/rendering/RenderBoxModelObject.cpp:334:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/rendering/RenderBoxModelObject.cpp:335:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/rendering/RenderBoxModelObject.cpp:336:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/rendering/RenderBoxModelObject.cpp:346:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/rendering/RenderBoxModelObject.cpp:347:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 12 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538023</commentid>
    <comment_count>3</comment_count>
      <attachid>122448</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2012-01-18 11:22:04 -0800</bug_when>
    <thetext>Comment on attachment 122448
Patch

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

r=me with minor changes suggested.

&gt; Source/WebCore/rendering/RenderBlock.cpp:247
&gt; +    RenderStyle* newStyle = style();

This one isn&apos;t buying you anything. Only used once.

&gt; Source/WebCore/rendering/RenderBlock.cpp:2049
&gt; +    RenderStyle* cstyle = child-&gt;style();

Call this childStyle please, not cstyle.

&gt; Source/WebCore/rendering/RenderBlock.cpp:2146
&gt; +    if (cstyle-&gt;marginAfterCollapse() == MSEPARATE) {

childStyle not cstyle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538521</commentid>
    <comment_count>4</comment_count>
      <attachid>123082</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2012-01-18 23:48:30 -0800</bug_when>
    <thetext>Created attachment 123082
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538551</commentid>
    <comment_count>5</comment_count>
      <attachid>123082</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-19 01:23:16 -0800</bug_when>
    <thetext>Comment on attachment 123082
Patch for landing

Clearing flags on attachment: 123082

Committed r105394: &lt;http://trac.webkit.org/changeset/105394&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538552</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-19 01:23:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122448</attachid>
            <date>2012-01-13 10:23:57 -0800</date>
            <delta_ts>2012-01-18 23:48:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>76265.patch</filename>
            <type>text/plain</type>
            <size>73601</size>
            <attacher name="Mihnea Ovidenie">mihnea</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxZWQ2NDA3Li5mM2Q0NDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTItMDEtMTMgIE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CisKKyAg
ICAgICAgQ2FjaGUgUmVuZGVyU3R5bGUgcG9pbnRlciBhcyBhIG1ldGhvZCB0byBhdm9pZCBwZXJm
b3JtYW5jZSByZWdyZXNzaW9uIGZvciByZWdpb24gc3R5bGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyNjUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhpcyBpcyBq
dXN0IHJlZmFjdG9yaW5nLgorICAgICAgICBXaGVuIHJlZ2lvbiBzdHlsaW5nIHdhcyBlbmFibGVk
IGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQ4OCwKKyAgICAg
ICAgaXQgaW50cm9kdWNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gZHVlIHRvIHRoZSBjaGFu
Z2Ugb2YgUmVuZGVyT2JqZWN0OjpzdHlsZSgpIG1ldGhvZC4KKyAgICAgICAgVGhpcyBwYXRjaCB0
cmllcyB0byBhdm9pZCBhIG5ldyBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdoZW4gcmVnaW9uIHN0
eWxpbmcgd2lsbCBiZSBlbmFibGVkIGFnYWluLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpN
YXJnaW5JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzdHlsZVdpbGxDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRMaW5l
QnJlYWspOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpzdHlsZVdpbGxDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpz
dHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVwZGF0ZUJveE1v
ZGVsSW5mb0Zyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVS
ZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVMb2dp
Y2FsV2lkdGhJblJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVM
b2dpY2FsV2lkdGhVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVM
b2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVBlcmNl
bnRhZ2VMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0
ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6
OnN0eWxlV2lsbENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVj
dDo6dXBkYXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6c3R5bGVEaWRD
aGFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKwogMjAxMi0wMS0xMyAg
Sm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBPbmNlIHdl
IHByZXBhcmVkIGEgc2NyaXB0IGVsZW1lbnQgZm9yIGV4ZWN1dGlvbiwgZXhlY3V0ZSBpdCwgZXZl
biBpZiB0aGUgc2NyaXB0IGVsZW1lbnQgd2FzIG1lYW53aGlsZSByZW1vdmVkIGZyb20gdGhlIGRv
bSB0cmVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggZjVh
MzNmNC4uNjAyMTcwMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CkBAIC05NiwyMiArOTYsMjMgQEAgUmVuZGVyQmxvY2s6Ok1hcmdpbkluZm86Ok1hcmdpbkluZm8o
UmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlvdXRVbml0IGJlZm9yZUJvcmRlclAKICAgICAvLyBXaGV0
aGVyIG9yIG5vdCB3ZSBjYW4gY29sbGFwc2Ugb3VyIG93biBtYXJnaW5zIHdpdGggb3VyIGNoaWxk
cmVuLiAgV2UgZG9uJ3QgZG8gdGhpcwogICAgIC8vIGlmIHdlIGhhZCBhbnkgYm9yZGVyL3BhZGRp
bmcgKG9idmlvdXNseSksIGlmIHdlJ3JlIHRoZSByb290IG9yIEhUTUwgZWxlbWVudHMsIG9yIGlm
CiAgICAgLy8gd2UncmUgcG9zaXRpb25lZCwgZmxvYXRpbmcsIGEgdGFibGUgY2VsbC4KKyAgICBS
ZW5kZXJTdHlsZSogYmxvY2tTdHlsZSA9IGJsb2NrLT5zdHlsZSgpOwogICAgIG1fY2FuQ29sbGFw
c2VXaXRoQ2hpbGRyZW4gPSAhYmxvY2stPmlzUmVuZGVyVmlldygpICYmICFibG9jay0+aXNSb290
KCkgJiYgIWJsb2NrLT5pc1Bvc2l0aW9uZWQoKQogICAgICAgICAmJiAhYmxvY2stPmlzRmxvYXRp
bmcoKSAmJiAhYmxvY2stPmlzVGFibGVDZWxsKCkgJiYgIWJsb2NrLT5oYXNPdmVyZmxvd0NsaXAo
KSAmJiAhYmxvY2stPmlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkKLSAgICAgICAgJiYgIWJs
b2NrLT5pc1dyaXRpbmdNb2RlUm9vdCgpICYmIGJsb2NrLT5zdHlsZSgpLT5oYXNBdXRvQ29sdW1u
Q291bnQoKSAmJiBibG9jay0+c3R5bGUoKS0+aGFzQXV0b0NvbHVtbldpZHRoKCkKLSAgICAgICAg
JiYgIWJsb2NrLT5zdHlsZSgpLT5jb2x1bW5TcGFuKCk7CisgICAgICAgICYmICFibG9jay0+aXNX
cml0aW5nTW9kZVJvb3QoKSAmJiBibG9ja1N0eWxlLT5oYXNBdXRvQ29sdW1uQ291bnQoKSAmJiBi
bG9ja1N0eWxlLT5oYXNBdXRvQ29sdW1uV2lkdGgoKQorICAgICAgICAmJiAhYmxvY2tTdHlsZS0+
Y29sdW1uU3BhbigpOwogCi0gICAgbV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJl
biA9IG1fY2FuQ29sbGFwc2VXaXRoQ2hpbGRyZW4gJiYgKGJlZm9yZUJvcmRlclBhZGRpbmcgPT0g
MCkgJiYgYmxvY2stPnN0eWxlKCktPm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkgIT0gTVNFUEFSQVRF
OworICAgIG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVXaXRoQ2hpbGRyZW4gPSBtX2NhbkNvbGxh
cHNlV2l0aENoaWxkcmVuICYmIChiZWZvcmVCb3JkZXJQYWRkaW5nID09IDApICYmIGJsb2NrU3R5
bGUtPm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkgIT0gTVNFUEFSQVRFOwogCiAgICAgLy8gSWYgYW55
IGhlaWdodCBvdGhlciB0aGFuIGF1dG8gaXMgc3BlY2lmaWVkIGluIENTUywgdGhlbiB3ZSBkb24n
dCBjb2xsYXBzZSBvdXIgYm90dG9tCiAgICAgLy8gbWFyZ2lucyB3aXRoIG91ciBjaGlsZHJlbidz
IG1hcmdpbnMuICBUbyBkbyBvdGhlcndpc2Ugd291bGQgYmUgdG8gcmlzayBvZGQgdmlzdWFsCiAg
ICAgLy8gZWZmZWN0cyB3aGVuIHRoZSBjaGlsZHJlbiBvdmVyZmxvdyBvdXQgb2YgdGhlIHBhcmVu
dCBibG9jayBhbmQgeWV0IHN0aWxsIGNvbGxhcHNlCiAgICAgLy8gd2l0aCBpdC4gIFdlIGFsc28g
ZG9uJ3QgY29sbGFwc2UgaWYgd2UgaGF2ZSBhbnkgYm90dG9tIGJvcmRlci9wYWRkaW5nLgogICAg
IG1fY2FuQ29sbGFwc2VNYXJnaW5BZnRlcldpdGhDaGlsZHJlbiA9IG1fY2FuQ29sbGFwc2VXaXRo
Q2hpbGRyZW4gJiYgKGFmdGVyQm9yZGVyUGFkZGluZyA9PSAwKSAmJgotICAgICAgICAoYmxvY2st
PnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSAmJiBibG9jay0+c3R5bGUoKS0+bG9n
aWNhbEhlaWdodCgpLnZhbHVlKCkgPT0gMCkgJiYgYmxvY2stPnN0eWxlKCktPm1hcmdpbkFmdGVy
Q29sbGFwc2UoKSAhPSBNU0VQQVJBVEU7CisgICAgICAgIChibG9ja1N0eWxlLT5sb2dpY2FsSGVp
Z2h0KCkuaXNBdXRvKCkgJiYgYmxvY2tTdHlsZS0+bG9naWNhbEhlaWdodCgpLnZhbHVlKCkgPT0g
MCkgJiYgYmxvY2tTdHlsZS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZSgpICE9IE1TRVBBUkFURTsKICAg
ICAKLSAgICBtX3F1aXJrQ29udGFpbmVyID0gYmxvY2stPmlzVGFibGVDZWxsKCkgfHwgYmxvY2st
PmlzQm9keSgpIHx8IGJsb2NrLT5zdHlsZSgpLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1E
SVNDQVJEIHx8IAotICAgICAgICBibG9jay0+c3R5bGUoKS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZSgp
ID09IE1ESVNDQVJEOworICAgIG1fcXVpcmtDb250YWluZXIgPSBibG9jay0+aXNUYWJsZUNlbGwo
KSB8fCBibG9jay0+aXNCb2R5KCkgfHwgYmxvY2tTdHlsZS0+bWFyZ2luQmVmb3JlQ29sbGFwc2Uo
KSA9PSBNRElTQ0FSRCB8fCAKKyAgICAgICAgYmxvY2tTdHlsZS0+bWFyZ2luQWZ0ZXJDb2xsYXBz
ZSgpID09IE1ESVNDQVJEOwogCiAgICAgbV9wb3NpdGl2ZU1hcmdpbiA9IG1fY2FuQ29sbGFwc2VN
YXJnaW5CZWZvcmVXaXRoQ2hpbGRyZW4gPyBibG9jay0+bWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUo
KSA6IDA7CiAgICAgbV9uZWdhdGl2ZU1hcmdpbiA9IG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZvcmVX
aXRoQ2hpbGRyZW4gPyBibG9jay0+bWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKSA6IDA7CkBAIC0y
MDYsMTYgKzIwNywxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp3aWxsQmVEZXN0cm95ZWQoKQogCiB2
b2lkIFJlbmRlckJsb2NrOjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKLSAgICBzX2NhblByb3BhZ2F0ZUZsb2F0SW50
b1NpYmxpbmcgPSBzdHlsZSgpID8gIWlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYXZvaWRz
RmxvYXRzKCkgOiBmYWxzZTsKKyAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBzdHlsZSgpOwor
ICAgIHNfY2FuUHJvcGFnYXRlRmxvYXRJbnRvU2libGluZyA9IG9sZFN0eWxlID8gIWlzRmxvYXRp
bmdPclBvc2l0aW9uZWQoKSAmJiAhYXZvaWRzRmxvYXRzKCkgOiBmYWxzZTsKIAogICAgIHNldFJl
cGxhY2VkKG5ld1N0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkpOwogICAgIAotICAgIGlmIChz
dHlsZSgpICYmIHBhcmVudCgpICYmIGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0ICYmIHN0
eWxlKCktPnBvc2l0aW9uKCkgIT0gbmV3U3R5bGUtPnBvc2l0aW9uKCkpIHsKKyAgICBpZiAob2xk
U3R5bGUgJiYgcGFyZW50KCkgJiYgZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgb2xk
U3R5bGUtPnBvc2l0aW9uKCkgIT0gbmV3U3R5bGUtPnBvc2l0aW9uKCkpIHsKICAgICAgICAgaWYg
KG5ld1N0eWxlLT5wb3NpdGlvbigpID09IFN0YXRpY1Bvc2l0aW9uKQogICAgICAgICAgICAgLy8g
Q2xlYXIgb3VyIHBvc2l0aW9uZWQgb2JqZWN0cyBsaXN0LiBPdXIgYWJzb2x1dGVseSBwb3NpdGlv
bmVkIGRlc2NlbmRhbnRzIHdpbGwgYmUKICAgICAgICAgICAgIC8vIGluc2VydGVkIGludG8gb3Vy
IGNvbnRhaW5pbmcgYmxvY2sncyBwb3NpdGlvbmVkIG9iamVjdHMgbGlzdCBkdXJpbmcgbGF5b3V0
LgogICAgICAgICAgICAgcmVtb3ZlUG9zaXRpb25lZE9iamVjdHMoMCk7Ci0gICAgICAgIGVsc2Ug
aWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24pIHsKKyAgICAgICAgZWxz
ZSBpZiAob2xkU3R5bGUtPnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24pIHsKICAgICAgICAg
ICAgIC8vIFJlbW92ZSBvdXIgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGRlc2NlbmRhbnRzIGZyb20g
dGhlaXIgY3VycmVudCBjb250YWluaW5nIGJsb2NrLgogICAgICAgICAgICAgLy8gVGhleSB3aWxs
IGJlIGluc2VydGVkIGludG8gb3VyIHBvc2l0aW9uZWQgb2JqZWN0cyBsaXN0IGR1cmluZyBsYXlv
dXQuCiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNiID0gcGFyZW50KCk7CkBAIC0yNDIsMTIg
KzI0NCwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eQogewogICAgIFJlbmRlckJveDo6c3R5
bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogCisgICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxl
ID0gc3R5bGUoKTsKICAgICBpZiAoIWlzQW5vbnltb3VzQmxvY2soKSkgewogICAgICAgICAvLyBF
bnN1cmUgdGhhdCBhbGwgb2Ygb3VyIGNvbnRpbnVhdGlvbiBibG9ja3MgcGljayB1cCB0aGUgbmV3
IHN0eWxlLgogICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBjdXJyQ29udCA9IGJsb2NrRWxlbWVu
dENvbnRpbnVhdGlvbigpOyBjdXJyQ29udDsgY3VyckNvbnQgPSBjdXJyQ29udC0+YmxvY2tFbGVt
ZW50Q29udGludWF0aW9uKCkpIHsKICAgICAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBu
ZXh0Q29udCA9IGN1cnJDb250LT5jb250aW51YXRpb24oKTsKICAgICAgICAgICAgIGN1cnJDb250
LT5zZXRDb250aW51YXRpb24oMCk7Ci0gICAgICAgICAgICBjdXJyQ29udC0+c2V0U3R5bGUoc3R5
bGUoKSk7CisgICAgICAgICAgICBjdXJyQ29udC0+c2V0U3R5bGUobmV3U3R5bGUpOwogICAgICAg
ICAgICAgY3VyckNvbnQtPnNldENvbnRpbnVhdGlvbihuZXh0Q29udCk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMjQ2LDcgKzEyNDksOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaAogICAgIH0K
IAogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB2aWV3KCk7Ci0gICAgTGF5b3V0U3RhdGVN
YWludGFpbmVyIHN0YXRlUHVzaGVyKHJlbmRlclZpZXcsIHRoaXMsIGxvY2F0aW9uT2Zmc2V0KCks
IGhhc0NvbHVtbnMoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5
bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSwgcGFnZUxvZ2ljYWxIZWlnaHQsIHBh
Z2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgY29sSW5mbyk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
VG9Vc2UgPSBzdHlsZSgpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcihy
ZW5kZXJWaWV3LCB0aGlzLCBsb2NhdGlvbk9mZnNldCgpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJh
bnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8IHN0eWxlVG9Vc2UtPmlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKCksIHBhZ2VMb2dpY2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5n
ZWQsIGNvbEluZm8pOwogICAgIAogICAgIGlmIChpblJlbmRlckZsb3dUaHJlYWQoKSkgewogICAg
ICAgICAvLyBSZWdpb25zIGNoYW5naW5nIHdpZHRocyBjYW4gZm9yY2UgdXMgdG8gcmVsYXlvdXQg
b3VyIGNoaWxkcmVuLgpAQCAtMTI3OCw4ICsxMjgyLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVp
Z2gKICAgICBpZiAoIWlzQ2VsbCkgewogICAgICAgICBpbml0TWF4TWFyZ2luVmFsdWVzKCk7CiAg
ICAgICAgIAotICAgICAgICBzZXRNYXJnaW5CZWZvcmVRdWlyayhzdHlsZSgpLT5tYXJnaW5CZWZv
cmUoKS5xdWlyaygpKTsKLSAgICAgICAgc2V0TWFyZ2luQWZ0ZXJRdWlyayhzdHlsZSgpLT5tYXJn
aW5BZnRlcigpLnF1aXJrKCkpOworICAgICAgICBzZXRNYXJnaW5CZWZvcmVRdWlyayhzdHlsZVRv
VXNlLT5tYXJnaW5CZWZvcmUoKS5xdWlyaygpKTsKKyAgICAgICAgc2V0TWFyZ2luQWZ0ZXJRdWly
ayhzdHlsZVRvVXNlLT5tYXJnaW5BZnRlcigpLnF1aXJrKCkpOwogCiAgICAgICAgIE5vZGUqIG4g
PSBub2RlKCk7CiAgICAgICAgIGlmIChuICYmIG4tPmhhc1RhZ05hbWUoZm9ybVRhZykgJiYgc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obiktPmlzTWFsZm9ybWVkKCkpIHsKQEAgLTEyOTMs
OSArMTI5Nyw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdoCiAKICAgICAvLyBGb3Igb3ZlcmZs
b3c6c2Nyb2xsIGJsb2NrcywgZW5zdXJlIHdlIGhhdmUgYm90aCBzY3JvbGxiYXJzIGluIHBsYWNl
IGFsd2F5cy4KICAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpIHsKLSAgICAgICAgaWYgKHN0eWxl
KCktPm92ZXJmbG93WCgpID09IE9TQ1JPTEwpCisgICAgICAgIGlmIChzdHlsZVRvVXNlLT5vdmVy
Zmxvd1goKSA9PSBPU0NST0xMKQogICAgICAgICAgICAgbGF5ZXIoKS0+c2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcih0cnVlKTsKLSAgICAgICAgaWYgKHN0eWxlKCktPm92ZXJmbG93WSgpID09IE9T
Q1JPTEwpCisgICAgICAgIGlmIChzdHlsZVRvVXNlLT5vdmVyZmxvd1koKSA9PSBPU0NST0xMKQog
ICAgICAgICAgICAgbGF5ZXIoKS0+c2V0SGFzVmVydGljYWxTY3JvbGxiYXIodHJ1ZSk7CiAgICAg
fQogCkBAIC0xMzYwLDcgKzEzNjQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaAogICAgIC8v
IEZJWE1FOiBUaGlzIHJlcGFpbnQgbG9naWMgc2hvdWxkIGJlIG1vdmVkIGludG8gYSBzZXBhcmF0
ZSBoZWxwZXIgZnVuY3Rpb24hCiAgICAgLy8gUmVwYWludCB3aXRoIG91ciBuZXcgYm91bmRzIGlm
IHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIG91ciBvbGQgYm91bmRzLgogICAgIGJvb2wgZGlkRnVs
bFJlcGFpbnQgPSByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7Ci0gICAgaWYgKCFkaWRG
dWxsUmVwYWludCAmJiByZXBhaW50TG9naWNhbFRvcCAhPSByZXBhaW50TG9naWNhbEJvdHRvbSAm
JiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgfHwgZW5jbG9zaW5nTGF5ZXIoKS0+
aGFzVmlzaWJsZUNvbnRlbnQoKSkpIHsKKyAgICBpZiAoIWRpZEZ1bGxSZXBhaW50ICYmIHJlcGFp
bnRMb2dpY2FsVG9wICE9IHJlcGFpbnRMb2dpY2FsQm90dG9tICYmIChzdHlsZVRvVXNlLT52aXNp
YmlsaXR5KCkgPT0gVklTSUJMRSB8fCBlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVu
dCgpKSkgewogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgdGlnaHRlbiB1cCB0aGUgbGVmdCBh
bmQgcmlnaHQgaW52YWxpZGF0aW9uIHBvaW50cyBpZiB3ZSBsZXQgbGF5b3V0SW5saW5lQ2hpbGRy
ZW4gZmlsbCB0aGVtIGluIGJhc2VkIG9mZiB0aGUgcGFydGljdWxhciBsaW5lcwogICAgICAgICAv
LyBpdCBoYWQgdG8gbGF5IG91dC4gIFdlIHdvdWxkbid0IG5lZWQgdGhlIGhhc092ZXJmbG93Q2xp
cCgpIGhhY2sgaW4gdGhhdCBjYXNlIGVpdGhlci4KICAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50
TG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7CkBAIC0yMDExLDcgKzIw
MTUsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4RmxvYQogICAgICAgICAvLyBNYWtlIHN1cmUgd2Ug
bGF5b3V0IGNoaWxkcmVuIGlmIHRoZXkgbmVlZCBpdC4KICAgICAgICAgLy8gRklYTUU6IFRlY2hu
aWNhbGx5IHBlcmNlbnRhZ2UgaGVpZ2h0IG9iamVjdHMgb25seSBuZWVkIGEgcmVsYXlvdXQgaWYg
dGhlaXIgcGVyY2VudGFnZSBpc24ndCBnb2luZyB0byBiZSB0dXJuZWQgaW50bwogICAgICAgICAv
LyBhbiBhdXRvIHZhbHVlLiAgQWRkIGEgbWV0aG9kIHRvIGRldGVybWluZSB0aGlzLCBzbyB0aGF0
IHdlIGNhbiBhdm9pZCB0aGUgcmVsYXlvdXQuCi0gICAgICAgIGlmIChyZWxheW91dENoaWxkcmVu
IHx8ICgoY2hpbGQtPnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNlbnQoKSB8fCBjaGls
ZC0+c3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpLmlzUGVyY2VudCgpIHx8IGNoaWxkLT5zdHls
ZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNQZXJjZW50KCkpICYmICFpc1JlbmRlclZpZXcoKSkp
CisgICAgICAgIFJlbmRlclN0eWxlKiBjc3R5bGUgPSBjaGlsZC0+c3R5bGUoKTsKKyAgICAgICAg
aWYgKHJlbGF5b3V0Q2hpbGRyZW4gfHwgKChjc3R5bGUtPmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNl
bnQoKSB8fCBjc3R5bGUtPmxvZ2ljYWxNaW5IZWlnaHQoKS5pc1BlcmNlbnQoKSB8fCBjc3R5bGUt
PmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1BlcmNlbnQoKSkgJiYgIWlzUmVuZGVyVmlldygpKSkKICAg
ICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKIAogICAg
ICAgICAvLyBJZiByZWxheW91dENoaWxkcmVuIGlzIHNldCBhbmQgdGhlIGNoaWxkIGhhcyBwZXJj
ZW50YWdlIHBhZGRpbmcgb3IgYW4gZW1iZWRkZWQgY29udGVudCBib3gsIHdlIGFsc28gbmVlZCB0
byBpbnZhbGlkYXRlIHRoZSBjaGlsZHMgcHJlZiB3aWR0aHMuCkBAIC0yMDQxLDcgKzIwNDYsOCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1h
cmdpbkluZm8mIG1hcmdpbkluZm8sIExheQogICAgIGNoaWxkLT5jb21wdXRlQmxvY2tEaXJlY3Rp
b25NYXJnaW5zKHRoaXMpOwogCiAgICAgLy8gRG8gbm90IGFsbG93IGEgY29sbGFwc2UgaWYgdGhl
IG1hcmdpbi1iZWZvcmUtY29sbGFwc2Ugc3R5bGUgaXMgc2V0IHRvIFNFUEFSQVRFLgotICAgIGlm
IChjaGlsZC0+c3R5bGUoKS0+bWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9PSBNU0VQQVJBVEUpIHsK
KyAgICBSZW5kZXJTdHlsZSogY3N0eWxlID0gY2hpbGQtPnN0eWxlKCk7CisgICAgaWYgKGNzdHls
ZS0+bWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9PSBNU0VQQVJBVEUpIHsKICAgICAgICAgbWFyZ2lu
SW5mby5zZXRBdEJlZm9yZVNpZGVPZkJsb2NrKGZhbHNlKTsKICAgICAgICAgbWFyZ2luSW5mby5j
bGVhck1hcmdpbigpOwogICAgIH0KQEAgLTIxMzcsNyArMjE0Myw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2lu
SW5mbywgTGF5CiAKICAgICAvLyBVcGRhdGUgb3VyIGhlaWdodCBub3cgdGhhdCB0aGUgY2hpbGQg
aGFzIGJlZW4gcGxhY2VkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uLgogICAgIHNldExvZ2ljYWxI
ZWlnaHQobG9naWNhbEhlaWdodCgpICsgbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSk7Ci0g
ICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5BZnRlckNvbGxhcHNlKCkgPT0gTVNFUEFSQVRF
KSB7CisgICAgaWYgKGNzdHlsZS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZSgpID09IE1TRVBBUkFURSkg
ewogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSArIG1hcmdpbkFmdGVy
Rm9yQ2hpbGQoY2hpbGQpKTsKICAgICAgICAgbWFyZ2luSW5mby5jbGVhck1hcmdpbigpOwogICAg
IH0KQEAgLTQ5MjksOCArNDkzNSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCkKIAogICAgIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CiAKLSAgICBpZiAo
IWlzVGFibGVDZWxsKCkgJiYgc3R5bGUoKS0+bG9naWNhbFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0
eWxlKCktPmxvZ2ljYWxXaWR0aCgpLnZhbHVlKCkgPiAwKQotICAgICAgICBtX21pblByZWZlcnJl
ZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gY29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bG9naWNhbFdpZHRoKCkudmFsdWUoKSk7CisgICAg
UmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGlmICghaXNUYWJsZUNlbGwo
KSAmJiBzdHlsZVRvVXNlLT5sb2dpY2FsV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGVUb1VzZS0+
bG9naWNhbFdpZHRoKCkudmFsdWUoKSA+IDApCisgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBjb21wdXRlQ29udGVudEJveExv
Z2ljYWxXaWR0aChzdHlsZVRvVXNlLT5sb2dpY2FsV2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNl
IHsKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOwogICAgICAgICBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CkBAIC00OTQyLDcgKzQ5NDksNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAKICAgICAgICAgbV9t
YXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgs
IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKIAotICAgICAgICBpZiAoIXN0eWxlKCktPmF1
dG9XcmFwKCkgJiYgY2hpbGRyZW5JbmxpbmUoKSkgeworICAgICAgICBpZiAoIXN0eWxlVG9Vc2Ut
PmF1dG9XcmFwKCkgJiYgY2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAgICAgbV9taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aDsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gQSBob3Jpem9udGFsIG1hcnF1ZWUgd2l0aCBpbmxpbmUgY2hp
bGRyZW4gaGFzIG5vIG1pbmltdW0gd2lkdGguCkBAIC00OTUxLDcgKzQ5NTgsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIH0KIAog
ICAgICAgICBpbnQgc2Nyb2xsYmFyV2lkdGggPSAwOwotICAgICAgICBpZiAoaGFzT3ZlcmZsb3dD
bGlwKCkgJiYgc3R5bGUoKS0+b3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCkgeworICAgICAgICBpZiAo
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgc3R5bGVUb1VzZS0+b3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCkg
ewogICAgICAgICAgICAgbGF5ZXIoKS0+c2V0SGFzVmVydGljYWxTY3JvbGxiYXIodHJ1ZSk7CiAg
ICAgICAgICAgICBzY3JvbGxiYXJXaWR0aCA9IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKICAg
ICAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IHNjcm9sbGJhcldpZHRoOwpA
QCAtNDk2OCwxNCArNDk3NSwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocygpCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoICs9IHNj
cm9sbGJhcldpZHRoOwogICAgIH0KICAgICAKLSAgICBpZiAoc3R5bGUoKS0+bG9naWNhbE1pbldp
ZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPmxvZ2ljYWxNaW5XaWR0aCgpLnZhbHVlKCkgPiAw
KSB7Ci0gICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KG1fbWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5s
b2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJv
eExvZ2ljYWxXaWR0aChzdHlsZSgpLT5sb2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAg
aWYgKHN0eWxlVG9Vc2UtPmxvZ2ljYWxNaW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZVRvVXNl
LT5sb2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpID4gMCkgeworICAgICAgICBtX21heFByZWZlcnJl
ZExvZ2ljYWxXaWR0aCA9IG1heChtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNv
bnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGVUb1VzZS0+bG9naWNhbE1pbldpZHRoKCkudmFsdWUo
KSkpOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChtX21pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGVUb1Vz
ZS0+bG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KICAgICAKLSAgICBpZiAoc3R5
bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNGaXhlZCgpKSB7Ci0gICAgICAgIG1fbWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRl
Q29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS52YWx1ZSgp
KSk7Ci0gICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5s
b2dpY2FsTWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgaWYgKHN0eWxlVG9Vc2UtPmxvZ2ljYWxN
YXhXaWR0aCgpLmlzRml4ZWQoKSkgeworICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dp
Y2FsV2lkdGgoc3R5bGVUb1VzZS0+bG9naWNhbE1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAg
ICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGVUb1VzZS0+bG9naWNhbE1h
eFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAogICAgIExheW91dFVuaXQgYm9yZGVyQW5kUGFk
ZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKQEAgLTUwOTQsNiArNTEwMSw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCkKICAgICBmbG9hdCBpbmxpbmVNYXggPSAwOwogICAgIGZsb2F0IGlubGluZU1pbiA9IDA7CiAK
KyAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgUmVuZGVyQmxvY2sq
IGNvbnRhaW5pbmdCbG9jayA9IHRoaXMtPmNvbnRhaW5pbmdCbG9jaygpOwogICAgIExheW91dFVu
aXQgY3cgPSBjb250YWluaW5nQmxvY2sgPyBjb250YWluaW5nQmxvY2stPmNvbnRlbnRMb2dpY2Fs
V2lkdGgoKSA6IDA7CiAKQEAgLTUxMDUsMTAgKzUxMTMsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6
Y29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgIC8vIEZpcmVmb3ggYW5k
IE9wZXJhIHdpbGwgYWxsb3cgYSB0YWJsZSBjZWxsIHRvIGdyb3cgdG8gZml0IGFuIGltYWdlIGlu
c2lkZSBpdCB1bmRlcgogICAgIC8vIHZlcnkgc3BlY2lmaWMgY2lydWN1bXN0YW5jZXMgKGluIG9y
ZGVyIHRvIG1hdGNoIGNvbW1vbiBXaW5JRSByZW5kZXJpbmdzKS4gCiAgICAgLy8gTm90IHN1cHBv
cnRpbmcgdGhlIHF1aXJrIGhhcyBjYXVzZWQgdXMgdG8gbWlzLXJlbmRlciBzb21lIHJlYWwgc2l0
ZXMuIChTZWUgQnVnemlsbGEgMTA1MTcuKSAKLSAgICBib29sIGFsbG93SW1hZ2VzVG9CcmVhayA9
ICFkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSB8fCAhaXNUYWJsZUNlbGwoKSB8fCAhc3R5bGUo
KS0+bG9naWNhbFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKTsKKyAgICBib29sIGFsbG93SW1h
Z2VzVG9CcmVhayA9ICFkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSB8fCAhaXNUYWJsZUNlbGwo
KSB8fCAhc3R5bGVUb1VzZS0+bG9naWNhbFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKTsKIAog
ICAgIGJvb2wgYXV0b1dyYXAsIG9sZEF1dG9XcmFwOwotICAgIGF1dG9XcmFwID0gb2xkQXV0b1dy
YXAgPSBzdHlsZSgpLT5hdXRvV3JhcCgpOworICAgIGF1dG9XcmFwID0gb2xkQXV0b1dyYXAgPSBz
dHlsZVRvVXNlLT5hdXRvV3JhcCgpOwogCiAgICAgSW5saW5lTWluTWF4SXRlcmF0b3IgY2hpbGRJ
dGVyYXRvcih0aGlzKTsKICAgICBib29sIGFkZGVkVGV4dEluZGVudCA9IGZhbHNlOyAvLyBPbmx5
IGdldHMgYWRkZWQgaW4gb25jZS4KQEAgLTUxOTQsOCArNTIwMiw4IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAgICAgICAg
ICBib29sIGNsZWFyUHJldmlvdXNGbG9hdDsKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlz
RmxvYXRpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBjbGVhclByZXZpb3VzRmxvYXQgPSAo
cHJldkZsb2F0Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHByZXZGbG9hdC0+c3R5bGUo
KS0+ZmxvYXRpbmcoKSA9PSBMZWZ0RmxvYXQgJiYgKGNoaWxkLT5zdHlsZSgpLT5jbGVhcigpICYg
Q0xFRlQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwcmV2RmxvYXQtPnN0eWxl
KCktPmZsb2F0aW5nKCkgPT0gUmlnaHRGbG9hdCAmJiAoY2hpbGQtPnN0eWxlKCktPmNsZWFyKCkg
JiBDUklHSFQpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChwcmV2RmxvYXQtPnN0
eWxlKCktPmZsb2F0aW5nKCkgPT0gTGVmdEZsb2F0ICYmIChjc3R5bGUtPmNsZWFyKCkgJiBDTEVG
VCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHByZXZGbG9hdC0+c3R5bGUoKS0+
ZmxvYXRpbmcoKSA9PSBSaWdodEZsb2F0ICYmIChjc3R5bGUtPmNsZWFyKCkgJiBDUklHSFQpKSkp
OwogICAgICAgICAgICAgICAgICAgICBwcmV2RmxvYXQgPSBjaGlsZDsKICAgICAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2xlYXJQcmV2aW91c0Zsb2F0ID0gZmFsc2U7
CkBAIC01MjE2LDcgKzUyMjQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJl
ZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0aSA9IDA7
CiAgICAgICAgICAgICAgICAgaWYgKCFhZGRlZFRleHRJbmRlbnQpIHsKICAgICAgICAgICAgICAg
ICAgICAgYWRkZWRUZXh0SW5kZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdGkgPSBz
dHlsZSgpLT50ZXh0SW5kZW50KCkuY2FsY01pblZhbHVlKGN3KTsKKyAgICAgICAgICAgICAgICAg
ICAgdGkgPSBzdHlsZVRvVXNlLT50ZXh0SW5kZW50KCkuY2FsY01pblZhbHVlKGN3KTsKICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRNaW4gKz0gdGk7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxk
TWF4ICs9IHRpOwogICAgICAgICAgICAgICAgIH0KQEAgLTUyODcsNyArNTI5NSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IHRpID0gMDsKICAgICAgICAgICAgICAgICBpZiAoIWFkZGVk
VGV4dEluZGVudCkgewogICAgICAgICAgICAgICAgICAgICBhZGRlZFRleHRJbmRlbnQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICB0aSA9IHN0eWxlKCktPnRleHRJbmRlbnQoKS5jYWxjTWlu
VmFsdWUoY3cpOworICAgICAgICAgICAgICAgICAgICB0aSA9IHN0eWxlVG9Vc2UtPnRleHRJbmRl
bnQoKS5jYWxjTWluVmFsdWUoY3cpOwogICAgICAgICAgICAgICAgICAgICBjaGlsZE1pbis9dGk7
IGJlZ2luTWluICs9IHRpOwogICAgICAgICAgICAgICAgICAgICBjaGlsZE1heCs9dGk7IGJlZ2lu
TWF4ICs9IHRpOwogICAgICAgICAgICAgICAgIH0KQEAgLTUzNDUsNyArNTM1Myw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAg
ICAgb2xkQXV0b1dyYXAgPSBhdXRvV3JhcDsKICAgICB9CiAKLSAgICBpZiAoc3R5bGUoKS0+Y29s
bGFwc2VXaGl0ZVNwYWNlKCkpCisgICAgaWYgKHN0eWxlVG9Vc2UtPmNvbGxhcHNlV2hpdGVTcGFj
ZSgpKQogICAgICAgICBzdHJpcFRyYWlsaW5nU3BhY2UoaW5saW5lTWF4LCBpbmxpbmVNaW4sIHRy
YWlsaW5nU3BhY2VDaGlsZCk7CiAKICAgICB1cGRhdGVQcmVmZXJyZWRXaWR0aChtX21pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCwgaW5saW5lTWluKTsKQEAgLTUzNTcsNyArNTM2NSw4IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIAogdm9p
ZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUJsb2NrUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiB7Ci0g
ICAgYm9vbCBub3dyYXAgPSBzdHlsZSgpLT53aGl0ZVNwYWNlKCkgPT0gTk9XUkFQOworICAgIFJl
bmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKKyAgICBib29sIG5vd3JhcCA9IHN0eWxl
VG9Vc2UtPndoaXRlU3BhY2UoKSA9PSBOT1dSQVA7CiAKICAgICBSZW5kZXJPYmplY3QqIGNoaWxk
ID0gZmlyc3RDaGlsZCgpOwogICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSB0aGlz
LT5jb250YWluaW5nQmxvY2soKTsKQEAgLTUzNjksMTMgKzUzNzgsMTQgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y29tcHV0ZUJsb2NrUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCisgICAgICAgIFJlbmRlclN0eWxlKiBjc3R5bGUgPSBjaGls
ZC0+c3R5bGUoKTsKICAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkgfHwgKGNoaWxkLT5p
c0JveCgpICYmIHRvUmVuZGVyQm94KGNoaWxkKS0+YXZvaWRzRmxvYXRzKCkpKSB7CiAgICAgICAg
ICAgICBMYXlvdXRVbml0IGZsb2F0VG90YWxXaWR0aCA9IGZsb2F0TGVmdFdpZHRoICsgZmxvYXRS
aWdodFdpZHRoOwotICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5jbGVhcigpICYgQ0xF
RlQpIHsKKyAgICAgICAgICAgIGlmIChjc3R5bGUtPmNsZWFyKCkgJiBDTEVGVCkgewogICAgICAg
ICAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGZsb2F0VG90YWxXaWR0
aCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogICAgICAgICAgICAgICAgIGZsb2F0TGVm
dFdpZHRoID0gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjaGlsZC0+c3R5bGUo
KS0+Y2xlYXIoKSAmIENSSUdIVCkgeworICAgICAgICAgICAgaWYgKGNzdHlsZS0+Y2xlYXIoKSAm
IENSSUdIVCkgewogICAgICAgICAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bWF4KGZsb2F0VG90YWxXaWR0aCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogICAgICAg
ICAgICAgICAgIGZsb2F0UmlnaHRXaWR0aCA9IDA7CiAgICAgICAgICAgICB9CkBAIC01Mzg0LDgg
KzUzOTQsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKCkKICAgICAgICAgLy8gQSBtYXJnaW4gYmFzaWNhbGx5IGhhcyB0aHJlZSB0eXBlczog
Zml4ZWQsIHBlcmNlbnRhZ2UsIGFuZCBhdXRvICh2YXJpYWJsZSkuCiAgICAgICAgIC8vIEF1dG8g
YW5kIHBlcmNlbnRhZ2UgbWFyZ2lucyBzaW1wbHkgYmVjb21lIDAgd2hlbiBjb21wdXRpbmcgbWlu
L21heCB3aWR0aC4KICAgICAgICAgLy8gRml4ZWQgbWFyZ2lucyBjYW4gYmUgYWRkZWQgaW4gYXMg
aXMuCi0gICAgICAgIExlbmd0aCBzdGFydE1hcmdpbkxlbmd0aCA9IGNoaWxkLT5zdHlsZSgpLT5t
YXJnaW5TdGFydFVzaW5nKHN0eWxlKCkpOwotICAgICAgICBMZW5ndGggZW5kTWFyZ2luTGVuZ3Ro
ID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpbkVuZFVzaW5nKHN0eWxlKCkpOworICAgICAgICBMZW5n
dGggc3RhcnRNYXJnaW5MZW5ndGggPSBjc3R5bGUtPm1hcmdpblN0YXJ0VXNpbmcoc3R5bGVUb1Vz
ZSk7CisgICAgICAgIExlbmd0aCBlbmRNYXJnaW5MZW5ndGggPSBjc3R5bGUtPm1hcmdpbkVuZFVz
aW5nKHN0eWxlVG9Vc2UpOwogICAgICAgICBMYXlvdXRVbml0IG1hcmdpbiA9IDA7CiAgICAgICAg
IExheW91dFVuaXQgbWFyZ2luU3RhcnQgPSAwOwogICAgICAgICBMYXlvdXRVbml0IG1hcmdpbkVu
ZCA9IDA7CkBAIC01NDIyLDcgKzU0MzIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxv
Y2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUg
YSBsZWZ0IGFuZCByaWdodCBtYXggdmFsdWUgYmFzZWQgb2ZmIHdoZXRoZXIgb3Igbm90IHRoZSBm
bG9hdHMgY2FuIGZpdCBpbiB0aGUKICAgICAgICAgICAgICAgICAvLyBtYXJnaW5zIG9mIHRoZSBv
YmplY3QuICBGb3IgbmVnYXRpdmUgbWFyZ2lucywgd2Ugd2lsbCBhdHRlbXB0IHRvIG92ZXJsYXAg
dGhlIGZsb2F0IGlmIHRoZSBuZWdhdGl2ZSBtYXJnaW4KICAgICAgICAgICAgICAgICAvLyBpcyBz
bWFsbGVyIHRoYW4gdGhlIGZsb2F0IHdpZHRoLgotICAgICAgICAgICAgICAgIGJvb2wgbHRyID0g
Y29udGFpbmluZ0Jsb2NrID8gY29udGFpbmluZ0Jsb2NrLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgOiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgYm9vbCBsdHIgPSBjb250YWluaW5nQmxvY2sgPyBjb250YWluaW5nQmxvY2stPnN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlVG9Vc2UtPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKTsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG1hcmdpbkxvZ2ljYWxM
ZWZ0ID0gbHRyID8gbWFyZ2luU3RhcnQgOiBtYXJnaW5FbmQ7CiAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBtYXJnaW5Mb2dpY2FsUmlnaHQgPSBsdHIgPyBtYXJnaW5FbmQgOiBtYXJnaW5TdGFy
dDsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG1heExlZnQgPSBtYXJnaW5Mb2dpY2FsTGVm
dCA+IDAgPyBtYXgoZmxvYXRMZWZ0V2lkdGgsIG1hcmdpbkxvZ2ljYWxMZWZ0KSA6IGZsb2F0TGVm
dFdpZHRoICsgbWFyZ2luTG9naWNhbExlZnQ7CkBAIC01NDM2LDcgKzU0NDYsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkpIHsKLSAgICAgICAg
ICAgIGlmIChzdHlsZSgpLT5mbG9hdGluZygpID09IExlZnRGbG9hdCkKKyAgICAgICAgICAgIGlm
IChzdHlsZVRvVXNlLT5mbG9hdGluZygpID09IExlZnRGbG9hdCkKICAgICAgICAgICAgICAgICBm
bG9hdExlZnRXaWR0aCArPSB3OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZs
b2F0UmlnaHRXaWR0aCArPSB3OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCA3N2MzY2UzLi4yMjQ0YTc5IDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAt
MTIxMCw2ICsxMjEwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhM
aW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGkKIAogdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgY29uc3QgSW5saW5lSXRlcmF0b3Im
IGNsZWFuTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1
bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcykKIHsKKyAgICBSZW5kZXJTdHlsZSog
c3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91
dFN0YXRlKCkgJiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5pc1BhZ2luYXRlZCgpOwogICAgIExp
bmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSA9IHJlc29sdmVyLm1pZHBvaW50U3Rh
dGUoKTsKICAgICBJbmxpbmVJdGVyYXRvciBlbmQgPSByZXNvbHZlci5wb3NpdGlvbigpOwpAQCAt
MTI1NCwxMiArMTI1NSwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRz
SW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbgogICAgICAgICAgICAg
aWYgKGxhc3RSb290Qm94KCkpCiAgICAgICAgICAgICAgICAgbGFzdFJvb3RCb3goKS0+c2V0TGlu
ZUJyZWFrSW5mbyhlbmQubV9vYmosIGVuZC5tX3BvcywgcmVzb2x2ZXIuc3RhdHVzKCkpOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJp
ZGUgPSAoc3R5bGUoKS0+cnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciA/IChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIgPyBWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlIDogVmlzdWFsUmln
aHRUb0xlZnRPdmVycmlkZSkgOiBOb1Zpc3VhbE92ZXJyaWRlKTsKKyAgICAgICAgICAgIFZpc3Vh
bERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRlID0gKHN0eWxlVG9Vc2UtPnJ0bE9yZGVyaW5nKCkg
PT0gVmlzdWFsT3JkZXIgPyAoc3R5bGVUb1VzZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gVmlzdWFs
TGVmdFRvUmlnaHRPdmVycmlkZSA6IFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUpIDogTm9WaXN1
YWxPdmVycmlkZSk7CiAKLSAgICAgICAgICAgIGlmIChpc05ld1VCQVBhcmFncmFwaCAmJiBzdHls
ZSgpLT51bmljb2RlQmlkaSgpID09IFBsYWludGV4dCAmJiAhcmVzb2x2ZXIuY29udGV4dCgpLT5w
YXJlbnQoKSkgewotICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5
bGUoKS0+ZGlyZWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoaXNOZXdVQkFQYXJhZ3JhcGggJiYg
c3R5bGVUb1VzZS0+dW5pY29kZUJpZGkoKSA9PSBQbGFpbnRleHQgJiYgIXJlc29sdmVyLmNvbnRl
eHQoKS0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
biA9IHN0eWxlVG9Vc2UtPmRpcmVjdGlvbigpOwogICAgICAgICAgICAgICAgIGRldGVybWluZVBh
cmFncmFwaERpcmVjdGlvbihkaXJlY3Rpb24sIHJlc29sdmVyLnBvc2l0aW9uKCkpOwotICAgICAg
ICAgICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVzKGRpcmVjdGlvbiwgc3R5bGUo
KS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSkpOworICAgICAgICAgICAgICAgIHJlc29sdmVy
LnNldFN0YXR1cyhCaWRpU3RhdHVzKGRpcmVjdGlvbiwgc3R5bGVUb1VzZS0+dW5pY29kZUJpZGko
KSA9PSBPdmVycmlkZSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgb3duZXJzaGlwIGlzIHJldmVyc2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVuTGlzdCBh
bmQgcGFzcyBpdCB0byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCiAgICAgICAgICAgICBCaWRpUnVu
TGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMgPSByZXNvbHZlci5ydW5zKCk7CkBAIC0yMTI3LDE2ICsy
MTI4LDE4IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExp
bmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sCiAgICAgLy8gRmlyZWZveCBhbmQgT3Bl
cmEgd2lsbCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1hZ2UgaW5zaWRl
IGl0IHVuZGVyCiAgICAgLy8gdmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIChpbiBvcmRlciB0
byBtYXRjaCBjb21tb24gV2luSUUgcmVuZGVyaW5ncykuCiAgICAgLy8gTm90IHN1cHBvcnRpbmcg
dGhlIHF1aXJrIGhhcyBjYXVzZWQgdXMgdG8gbWlzLXJlbmRlciBzb21lIHJlYWwgc2l0ZXMuIChT
ZWUgQnVnemlsbGEgMTA1MTcuKQotICAgIGJvb2wgYWxsb3dJbWFnZXNUb0JyZWFrID0gIW1fYmxv
Y2stPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpIHx8ICFtX2Jsb2NrLT5pc1RhYmxlQ2VsbCgp
IHx8ICFtX2Jsb2NrLT5zdHlsZSgpLT5sb2dpY2FsV2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
OworICAgIFJlbmRlclN0eWxlKiBibG9ja1N0eWxlID0gbV9ibG9jay0+c3R5bGUoKTsKKyAgICBi
b29sIGFsbG93SW1hZ2VzVG9CcmVhayA9ICFtX2Jsb2NrLT5kb2N1bWVudCgpLT5pblF1aXJrc01v
ZGUoKSB8fCAhbV9ibG9jay0+aXNUYWJsZUNlbGwoKSB8fCAhYmxvY2tTdHlsZS0+bG9naWNhbFdp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKTsKIAotICAgIEVXaGl0ZVNwYWNlIGN1cnJXUyA9IG1f
YmxvY2stPnN0eWxlKCktPndoaXRlU3BhY2UoKTsKKyAgICBFV2hpdGVTcGFjZSBjdXJyV1MgPSBi
bG9ja1N0eWxlLT53aGl0ZVNwYWNlKCk7CiAgICAgRVdoaXRlU3BhY2UgbGFzdFdTID0gY3VycldT
OwogICAgIHdoaWxlIChjdXJyZW50Lm1fb2JqKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUgPSBjdXJyZW50Lm1fb2JqLT5zdHlsZSgpOwogICAgICAgICBSZW5kZXJPYmplY3Qq
IG5leHQgPSBiaWRpTmV4dFNraXBwaW5nRW1wdHlJbmxpbmVzKG1fYmxvY2ssIGN1cnJlbnQubV9v
YmopOwogICAgICAgICBpZiAobmV4dCAmJiBuZXh0LT5wYXJlbnQoKSAmJiAhbmV4dC0+cGFyZW50
KCktPmlzRGVzY2VuZGFudE9mKGN1cnJlbnQubV9vYmotPnBhcmVudCgpKSkKICAgICAgICAgICAg
IGluY2x1ZGVFbmRXaWR0aCA9IHRydWU7CiAKLSAgICAgICAgY3VycldTID0gY3VycmVudC5tX29i
ai0+aXNSZXBsYWNlZCgpID8gY3VycmVudC5tX29iai0+cGFyZW50KCktPnN0eWxlKCktPndoaXRl
U3BhY2UoKSA6IGN1cnJlbnQubV9vYmotPnN0eWxlKCktPndoaXRlU3BhY2UoKTsKKyAgICAgICAg
Y3VycldTID0gY3VycmVudC5tX29iai0+aXNSZXBsYWNlZCgpID8gY3VycmVudC5tX29iai0+cGFy
ZW50KCktPnN0eWxlKCktPndoaXRlU3BhY2UoKSA6IGN1cnJlbnRTdHlsZS0+d2hpdGVTcGFjZSgp
OwogICAgICAgICBsYXN0V1MgPSBsYXN0LT5pc1JlcGxhY2VkKCkgPyBsYXN0LT5wYXJlbnQoKS0+
c3R5bGUoKS0+d2hpdGVTcGFjZSgpIDogbGFzdC0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpOwogCiAg
ICAgICAgIGJvb2wgYXV0b1dyYXAgPSBSZW5kZXJTdHlsZTo6YXV0b1dyYXAoY3VycldTKTsKQEAg
LTIxNjYsNyArMjE2OSw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtl
cjo6bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sCiAgICAgICAgICAgICAg
ICAgbGluZUluZm8uc2V0UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KHRydWUpOwogCiAgICAgICAg
ICAgICAgICAgaWYgKCFsaW5lSW5mby5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIG1f
Y2xlYXIgPSBjdXJyZW50Lm1fb2JqLT5zdHlsZSgpLT5jbGVhcigpOworICAgICAgICAgICAgICAg
ICAgICBtX2NsZWFyID0gY3VycmVudFN0eWxlLT5jbGVhcigpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgZ290byBlbmQ7CiAgICAgICAgIH0KQEAgLTIyMjYsNyArMjIyOSw3IEBAIElubGlu
ZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVC
aWRpUmVzb2x2ZXImIHJlc29sCiAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nT2JqZWN0cy5j
bGVhcigpOwogICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0
ZSwgSW5saW5lSXRlcmF0b3IoMCwgY3VycmVudC5tX29iaiwgMCkpOyAvLyBTdG9wIGlnbm9yaW5n
IHNwYWNlcy4KICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3Rh
dGUsIElubGluZUl0ZXJhdG9yKDAsIGN1cnJlbnQubV9vYmosIDApKTsgLy8gU3RhcnQgaWdub3Jp
bmcgYWdhaW4uCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX2Jsb2NrLT5zdHlsZSgpLT5j
b2xsYXBzZVdoaXRlU3BhY2UoKSAmJiByZXNvbHZlci5wb3NpdGlvbigpLm1fb2JqID09IGN1cnJl
bnQubV9vYmoKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJsb2NrU3R5bGUtPmNvbGxhcHNl
V2hpdGVTcGFjZSgpICYmIHJlc29sdmVyLnBvc2l0aW9uKCkubV9vYmogPT0gY3VycmVudC5tX29i
agogICAgICAgICAgICAgICAgICAgICAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRP
YmplY3QobV9ibG9jaywgY3VycmVudC5tX29iaiwgbGluZU1pZHBvaW50U3RhdGUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIExpa2Ugd2l0aCBsaXN0IG1hcmtlcnMsIHdlIHN0YXJ0IGlnbm9y
aW5nIHNwYWNlcyB0byBtYWtlIHN1cmUgdGhhdCBhbnkKICAgICAgICAgICAgICAgICAgICAgLy8g
YWRkaXRpb25hbCBzcGFjZXMgd2Ugc2VlIHdpbGwgYmUgZGlzY2FyZGVkLgpAQCAtMjI1OSw3ICsy
MjYyLDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGlu
ZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2wKICAgICAgICAgICAgIC8vIGl0ZW0sIHRo
ZW4gdGhpcyBpcyBhbGwgbW9vdC4KICAgICAgICAgICAgIExheW91dFVuaXQgcmVwbGFjZWRMb2dp
Y2FsV2lkdGggPSBtX2Jsb2NrLT5sb2dpY2FsV2lkdGhGb3JDaGlsZChyZXBsYWNlZEJveCkgKyBt
X2Jsb2NrLT5tYXJnaW5TdGFydEZvckNoaWxkKHJlcGxhY2VkQm94KSArIG1fYmxvY2stPm1hcmdp
bkVuZEZvckNoaWxkKHJlcGxhY2VkQm94KSArIGlubGluZUxvZ2ljYWxXaWR0aChjdXJyZW50Lm1f
b2JqKTsKICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fb2JqLT5pc0xpc3RNYXJrZXIoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChtX2Jsb2NrLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2Uo
KSAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QobV9ibG9jaywgY3VycmVu
dC5tX29iaiwgbGluZU1pZHBvaW50U3RhdGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2Nr
U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJT
dGFydE9iamVjdChtX2Jsb2NrLCBjdXJyZW50Lm1fb2JqLCBsaW5lTWlkcG9pbnRTdGF0ZSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gTGlrZSB3aXRoIGlubGluZSBmbG93cywgd2Ugc3RhcnQg
aWdub3Jpbmcgc3BhY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueQogICAgICAgICAgICAgICAgICAg
ICAvLyBhZGRpdGlvbmFsIHNwYWNlcyB3ZSBzZWUgd2lsbCBiZSBkaXNjYXJkZWQuCiAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlID0gdHJ1ZTsKQEAgLTIyOTEsNyAr
MjI5NCw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExp
bmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sCiAgICAgICAgICAgICBib29sIGNhbkh5
cGhlbmF0ZSA9IHN0eWxlLT5oeXBoZW5zKCkgPT0gSHlwaGVuc0F1dG8gJiYgV2ViQ29yZTo6Y2Fu
SHlwaGVuYXRlKHN0eWxlLT5sb2NhbGUoKSk7CiAKICAgICAgICAgICAgIGludCBsYXN0U3BhY2Ug
PSBjdXJyZW50Lm1fcG9zOwotICAgICAgICAgICAgZmxvYXQgd29yZFNwYWNpbmcgPSBjdXJyZW50
Lm1fb2JqLT5zdHlsZSgpLT53b3JkU3BhY2luZygpOworICAgICAgICAgICAgZmxvYXQgd29yZFNw
YWNpbmcgPSBjdXJyZW50U3R5bGUtPndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICBmbG9hdCBs
YXN0U3BhY2VXb3JkU3BhY2luZyA9IDA7CiAKICAgICAgICAgICAgIC8vIE5vbi16ZXJvIG9ubHkg
d2hlbiBrZXJuaW5nIGlzIGVuYWJsZWQsIGluIHdoaWNoIGNhc2Ugd2UgbWVhc3VyZSB3b3JkcyB3
aXRoIHRoZWlyIHRyYWlsaW5nCkBAIC0yMzAwLDEyICsyMzAzLDEyIEBAIElubGluZUl0ZXJhdG9y
IFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2
ZXImIHJlc29sCiAKICAgICAgICAgICAgIGZsb2F0IHdyYXBXID0gd2lkdGgudW5jb21taXR0ZWRX
aWR0aCgpICsgaW5saW5lTG9naWNhbFdpZHRoKGN1cnJlbnQubV9vYmosICFhcHBsaWVkU3RhcnRX
aWR0aCwgdHJ1ZSk7CiAgICAgICAgICAgICBmbG9hdCBjaGFyV2lkdGggPSAwOwotICAgICAgICAg
ICAgYm9vbCBicmVha05CU1AgPSBhdXRvV3JhcCAmJiBjdXJyZW50Lm1fb2JqLT5zdHlsZSgpLT5u
YnNwTW9kZSgpID09IFNQQUNFOworICAgICAgICAgICAgYm9vbCBicmVha05CU1AgPSBhdXRvV3Jh
cCAmJiBjdXJyZW50U3R5bGUtPm5ic3BNb2RlKCkgPT0gU1BBQ0U7CiAgICAgICAgICAgICAvLyBB
dXRvLXdyYXBwaW5nIHRleHQgc2hvdWxkIHdyYXAgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgb25s
eSBpZiBpdCBjb3VsZCBub3Qgd3JhcCBiZWZvcmUgdGhlIHdvcmQsCiAgICAgICAgICAgICAvLyB3
aGljaCBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSB3b3JkIGlzIHRoZSBmaXJzdCB0aGluZyBvbiB0
aGUgbGluZSwgdGhhdCBpcywgaWYgfHd8IGlzIHplcm8uCi0gICAgICAgICAgICBib29sIGJyZWFr
V29yZHMgPSBjdXJyZW50Lm1fb2JqLT5zdHlsZSgpLT5icmVha1dvcmRzKCkgJiYgKChhdXRvV3Jh
cCAmJiAhd2lkdGguY29tbWl0dGVkV2lkdGgoKSkgfHwgY3VycldTID09IFBSRSk7CisgICAgICAg
ICAgICBib29sIGJyZWFrV29yZHMgPSBjdXJyZW50U3R5bGUtPmJyZWFrV29yZHMoKSAmJiAoKGF1
dG9XcmFwICYmICF3aWR0aC5jb21taXR0ZWRXaWR0aCgpKSB8fCBjdXJyV1MgPT0gUFJFKTsKICAg
ICAgICAgICAgIGJvb2wgbWlkV29yZEJyZWFrID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGJy
ZWFrQWxsID0gY3VycmVudC5tX29iai0+c3R5bGUoKS0+d29yZEJyZWFrKCkgPT0gQnJlYWtBbGxX
b3JkQnJlYWsgJiYgYXV0b1dyYXA7CisgICAgICAgICAgICBib29sIGJyZWFrQWxsID0gY3VycmVu
dFN0eWxlLT53b3JkQnJlYWsoKSA9PSBCcmVha0FsbFdvcmRCcmVhayAmJiBhdXRvV3JhcDsKICAg
ICAgICAgICAgIGZsb2F0IGh5cGhlbldpZHRoID0gMDsKIAogICAgICAgICAgICAgaWYgKHQtPmlz
V29yZEJyZWFrKCkpIHsKQEAgLTIzODQsNyArMjM4Nyw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRl
ckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJl
c29sCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBicmVhayBvbmx5IGFmdGVyIHdo
aXRlLXNwYWNlLCBjb25zaWRlciB0aGUgY3VycmVudCBjaGFyYWN0ZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFzIGNhbmRpZGF0ZSB3aWR0aCBmb3IgdGhpcyBsaW5lLgogICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBsaW5lV2FzVG9vV2lkZSA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHdpZHRoLmZpdHNPbkxpbmUoKSAmJiBjdXJyZW50Q2hhcmFjdGVySXNX
UyAmJiBjdXJyZW50Lm1fb2JqLT5zdHlsZSgpLT5icmVha09ubHlBZnRlcldoaXRlU3BhY2UoKSAm
JiAhbWlkV29yZEJyZWFrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGguZml0
c09uTGluZSgpICYmIGN1cnJlbnRDaGFyYWN0ZXJJc1dTICYmIGN1cnJlbnRTdHlsZS0+YnJlYWtP
bmx5QWZ0ZXJXaGl0ZVNwYWNlKCkgJiYgIW1pZFdvcmRCcmVhaykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IHRleHRXaWR0aCh0LCBjdXJyZW50Lm1fcG9z
LCAxLCBmLCB3aWR0aC5jdXJyZW50V2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRl
U3BhY2UpICsgKGFwcGx5V29yZFNwYWNpbmcgPyB3b3JkU3BhY2luZyA6IDApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGxpbmUgaXMgdG9vIGJpZyBldmVuIHdpdGhv
dXQgdGhlIGV4dHJhIHNwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhl
IGVuZCBvZiB0aGUgbGluZS4gSWYgaXQgaXMgbm90LCBkbyBub3RoaW5nLgpAQCAtMjM5OSw3ICsy
NDAyLDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGlu
ZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2wKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lV2FzVG9vV2lkZSB8fCAhd2lkdGgu
Zml0c09uTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkh5cGhl
bmF0ZSAmJiAhd2lkdGguZml0c09uTGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyeUh5cGhlbmF0aW5nKHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgY29uc2VjdXRpdmVI
eXBoZW5hdGVkTGluZXMsIG1fYmxvY2stPnN0eWxlKCktPmh5cGhlbmF0aW9uTGltaXRMaW5lcygp
LCBzdHlsZS0+aHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpLCBzdHlsZS0+aHlwaGVuYXRpb25MaW1p
dEFmdGVyKCksIGxhc3RTcGFjZSwgY3VycmVudC5tX3Bvcywgd2lkdGguY3VycmVudFdpZHRoKCkg
LSBhZGRpdGlvbmFsVG1wVywgd2lkdGguYXZhaWxhYmxlV2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBj
b2xsYXBzZVdoaXRlU3BhY2UsIGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBsQnJlYWssIGN1cnJlbnQu
bV9uZXh0QnJlYWthYmxlUG9zaXRpb24sIG1faHlwaGVuYXRlZCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyeUh5cGhlbmF0aW5nKHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgY29u
c2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGJsb2NrU3R5bGUtPmh5cGhlbmF0aW9uTGltaXRMaW5l
cygpLCBzdHlsZS0+aHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpLCBzdHlsZS0+aHlwaGVuYXRpb25M
aW1pdEFmdGVyKCksIGxhc3RTcGFjZSwgY3VycmVudC5tX3Bvcywgd2lkdGguY3VycmVudFdpZHRo
KCkgLSBhZGRpdGlvbmFsVG1wVywgd2lkdGguYXZhaWxhYmxlV2lkdGgoKSwgaXNGaXhlZFBpdGNo
LCBjb2xsYXBzZVdoaXRlU3BhY2UsIGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBsQnJlYWssIGN1cnJl
bnQubV9uZXh0QnJlYWthYmxlUG9zaXRpb24sIG1faHlwaGVuYXRlZCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2h5cGhlbmF0ZWQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CkBAIC0yNDU5LDcgKzI0NjIsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJy
ZWFrZXI6Om5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbAogICAgICAgICAg
ICAgICAgICAgICAgICAgbGFzdFNwYWNlID0gY3VycmVudC5tX3BvczsKICAgICAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JpbmdTcGFjZXMgJiYgY3Vy
cmVudC5tX29iai0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpZ25vcmluZ1NwYWNlcyAmJiBjdXJyZW50U3R5bGUtPmNvbGxhcHNlV2hp
dGVTcGFjZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIg
YSBuZXdsaW5lLCBvciBpZiB3ZSBlbmNvdW50ZXIgYQogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gc2Vjb25kIHNwYWNlLCB3ZSBuZWVkIHRvIGdvIGFoZWFkIGFuZCBicmVhayB1cCB0aGlzCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBydW4gYW5kIGVudGVyIGEgbW9kZSB3aGVyZSB3ZSBz
dGFydCBjb2xsYXBzaW5nIHNwYWNlcy4KQEAgLTI0OTgsMTMgKzI1MDEsMTMgQEAgSW5saW5lSXRl
cmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGluZUJyZWFrKElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2wKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAo
IWN1cnJlbnRDaGFyYWN0ZXJJc1dTICYmIHByZXZpb3VzQ2hhcmFjdGVySXNXUykgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoYXV0b1dyYXAgJiYgY3VycmVudC5tX29iai0+c3R5bGUoKS0+YnJl
YWtPbmx5QWZ0ZXJXaGl0ZVNwYWNlKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvV3Jh
cCAmJiBjdXJyZW50U3R5bGUtPmJyZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgbEJyZWFrLm1vdmVUbyhjdXJyZW50Lm1fb2JqLCBjdXJyZW50Lm1fcG9z
LCBjdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICBpZiAoY29sbGFwc2VXaGl0ZVNwYWNlICYmIGN1cnJlbnRDaGFyYWN0
ZXJJc1NwYWNlICYmICFpZ25vcmluZ1NwYWNlcykKICAgICAgICAgICAgICAgICAgICAgdHJhaWxp
bmdPYmplY3RzLnNldFRyYWlsaW5nV2hpdGVzcGFjZSh0b1JlbmRlclRleHQoY3VycmVudC5tX29i
aikpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFjdXJyZW50Lm1fb2JqLT5zdHlsZSgpLT5j
b2xsYXBzZVdoaXRlU3BhY2UoKSB8fCAhY3VycmVudENoYXJhY3RlcklzU3BhY2UpCisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoIWN1cnJlbnRTdHlsZS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgfHwg
IWN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlKQogICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ09i
amVjdHMuY2xlYXIoKTsKIAogICAgICAgICAgICAgICAgIGF0U3RhcnQgPSBmYWxzZTsKQEAgLTI1
MTcsNyArMjUyMCw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6
bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sCiAKICAgICAgICAgICAgIGlm
ICghd2lkdGguZml0c09uTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbkh5cGhlbmF0
ZSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5SHlwaGVuYXRpbmcodCwgZiwgc3R5bGUtPmxvY2Fs
ZSgpLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgbV9ibG9jay0+c3R5bGUoKS0+aHlwaGVu
YXRpb25MaW1pdExpbmVzKCksIHN0eWxlLT5oeXBoZW5hdGlvbkxpbWl0QmVmb3JlKCksIHN0eWxl
LT5oeXBoZW5hdGlvbkxpbWl0QWZ0ZXIoKSwgbGFzdFNwYWNlLCBjdXJyZW50Lm1fcG9zLCB3aWR0
aC5jdXJyZW50V2lkdGgoKSAtIGFkZGl0aW9uYWxUbXBXLCB3aWR0aC5hdmFpbGFibGVXaWR0aCgp
LCBpc0ZpeGVkUGl0Y2gsIGNvbGxhcHNlV2hpdGVTcGFjZSwgbGFzdFNwYWNlV29yZFNwYWNpbmcs
IGxCcmVhaywgY3VycmVudC5tX25leHRCcmVha2FibGVQb3NpdGlvbiwgbV9oeXBoZW5hdGVkKTsK
KyAgICAgICAgICAgICAgICAgICAgdHJ5SHlwaGVuYXRpbmcodCwgZiwgc3R5bGUtPmxvY2FsZSgp
LCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgYmxvY2tTdHlsZS0+aHlwaGVuYXRpb25MaW1p
dExpbmVzKCksIHN0eWxlLT5oeXBoZW5hdGlvbkxpbWl0QmVmb3JlKCksIHN0eWxlLT5oeXBoZW5h
dGlvbkxpbWl0QWZ0ZXIoKSwgbGFzdFNwYWNlLCBjdXJyZW50Lm1fcG9zLCB3aWR0aC5jdXJyZW50
V2lkdGgoKSAtIGFkZGl0aW9uYWxUbXBXLCB3aWR0aC5hdmFpbGFibGVXaWR0aCgpLCBpc0ZpeGVk
UGl0Y2gsIGNvbGxhcHNlV2hpdGVTcGFjZSwgbGFzdFNwYWNlV29yZFNwYWNpbmcsIGxCcmVhaywg
Y3VycmVudC5tX25leHRCcmVha2FibGVQb3NpdGlvbiwgbV9oeXBoZW5hdGVkKTsKIAogICAgICAg
ICAgICAgICAgIGlmICghbV9oeXBoZW5hdGVkICYmIGxCcmVhay5wcmV2aW91c0luU2FtZU5vZGUo
KSA9PSBzb2Z0SHlwaGVuICYmIHN0eWxlLT5oeXBoZW5zKCkgIT0gSHlwaGVuc05vbmUpCiAgICAg
ICAgICAgICAgICAgICAgIG1faHlwaGVuYXRlZCA9IHRydWU7CkBAIC0yNTU4LDcgKzI1NjEsNyBA
QCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWso
SW5saW5lQmlkaVJlc29sdmVyJiByZXNvbAogCiAgICAgICAgIGlmIChjaGVja0ZvckJyZWFrICYm
ICF3aWR0aC5maXRzT25MaW5lKCkpIHsKICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgZmxvYXRz
LCB0cnkgdG8gZ2V0IGJlbG93IHRoZW0uCi0gICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3Rl
cklzU3BhY2UgJiYgIWlnbm9yaW5nU3BhY2VzICYmIGN1cnJlbnQubV9vYmotPnN0eWxlKCktPmNv
bGxhcHNlV2hpdGVTcGFjZSgpKQorICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJc1Nw
YWNlICYmICFpZ25vcmluZ1NwYWNlcyAmJiBjdXJyZW50U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFj
ZSgpKQogICAgICAgICAgICAgICAgIHRyYWlsaW5nT2JqZWN0cy5jbGVhcigpOwogCiAgICAgICAg
ICAgICBpZiAod2lkdGguY29tbWl0dGVkV2lkdGgoKSkKQEAgLTI1OTYsNyArMjU5OSw3IEBAIElu
bGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sCiAgZW5kOgogICAgIGlmIChsQnJlYWsgPT0gcmVzb2x2ZXIu
cG9zaXRpb24oKSAmJiAoIWxCcmVhay5tX29iaiB8fCAhbEJyZWFrLm1fb2JqLT5pc0JSKCkpKSB7
CiAgICAgICAgIC8vIHdlIGp1c3QgYWRkIGFzIG11Y2ggYXMgcG9zc2libGUKLSAgICAgICAgaWYg
KG1fYmxvY2stPnN0eWxlKCktPndoaXRlU3BhY2UoKSA9PSBQUkUpIHsKKyAgICAgICAgaWYgKGJs
b2NrU3R5bGUtPndoaXRlU3BhY2UoKSA9PSBQUkUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBE
b24ndCByZWFsbHkgdW5kZXJzdGFuZCB0aGlzIGNhc2UuCiAgICAgICAgICAgICBpZiAoY3VycmVu
dC5tX3BvcykgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjYWxsIG1v
dmVUbyB3aGljaCB3b3VsZCBjbGVhciBtX25leHRCcmVha2FibGVQb3NpdGlvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBiZWZkNWEyLi5iYTFlOTdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMjQ4LDEyICsyNDgsMTMgQEAgdm9p
ZCBSZW5kZXJCb3g6OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAgY2xlYXJPdmVycmlkZVNpemUo
KTsKIAotICAgIGlmIChzdHlsZSgpICYmIChzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNQZXJj
ZW50KCkgfHwgc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpLmlzUGVyY2VudCgpIHx8IHN0eWxl
KCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1BlcmNlbnQoKSkpCisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGlmIChzdHlsZVRvVXNlICYmIChzdHlsZVRvVXNlLT5s
b2dpY2FsSGVpZ2h0KCkuaXNQZXJjZW50KCkgfHwgc3R5bGVUb1VzZS0+bG9naWNhbE1pbkhlaWdo
dCgpLmlzUGVyY2VudCgpIHx8IHN0eWxlVG9Vc2UtPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1BlcmNl
bnQoKSkpCiAgICAgICAgIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFu
dCh0aGlzKTsKIAogICAgIC8vIElmIHRoaXMgcmVuZGVyZXIgaXMgb3duaW5nIHJlbmRlcmVyIGZv
ciB0aGUgZnJhbWV2aWV3J3MgY3VzdG9tIHNjcm9sbGJhcnMsCiAgICAgLy8gd2UgbmVlZCB0byBj
bGVhciBpdCBmcm9tIHRoZSBzY3JvbGxiYXIuIFNlZSB3ZWJraXQgYnVnIDY0NzM3LgotICAgIGlm
IChzdHlsZSgpICYmIHN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUikgJiYgZnJhbWUo
KSAmJiBmcmFtZSgpLT52aWV3KCkpCisgICAgaWYgKHN0eWxlVG9Vc2UgJiYgc3R5bGVUb1VzZS0+
aGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKSAmJiBmcmFtZSgpICYmIGZyYW1lKCktPnZpZXcoKSkK
ICAgICAgICAgZnJhbWUoKS0+dmlldygpLT5jbGVhck93bmluZ1JlbmRlcmVyRm9yQ3VzdG9tU2Ny
b2xsYmFycyh0aGlzKTsKIAogICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZhaWxz
LCBsb2dpY2FsSGVpZ2h0KCkvbG9naWNhbE1pbkhlaWdodCgpLwpAQCAtMzAyLDcgKzMwMyw4IEBA
IHZvaWQgUmVuZGVyQm94OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsCiB7CiAgICAgc19oYWRPdmVyZmxvd0NsaXAgPSBoYXNP
dmVyZmxvd0NsaXAoKTsKIAotICAgIGlmIChzdHlsZSgpKSB7CisgICAgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlID0gc3R5bGUoKTsKKyAgICBpZiAob2xkU3R5bGUpIHsKICAgICAgICAgLy8gVGhlIGJh
Y2tncm91bmQgb2YgdGhlIHJvb3QgZWxlbWVudCBvciB0aGUgYm9keSBlbGVtZW50IGNvdWxkIHBy
b3BhZ2F0ZSB1cCB0bwogICAgICAgICAvLyB0aGUgY2FudmFzLiAgSnVzdCBkaXJ0eSB0aGUgZW50
aXJlIGNhbnZhcyB3aGVuIG91ciBzdHlsZSBjaGFuZ2VzIHN1YnN0YW50aWFsbHkuCiAgICAgICAg
IGlmIChkaWZmID49IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQgJiYgbm9kZSgpICYmCkBAIC0zMTEs
MTMgKzMxMywxMyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bAogICAgICAgICAKICAgICAgICAg
Ly8gV2hlbiBhIGxheW91dCBoaW50IGhhcHBlbnMgYW5kIGFuIG9iamVjdCdzIHBvc2l0aW9uIHN0
eWxlIGNoYW5nZXMsIHdlIGhhdmUgdG8gZG8gYSBsYXlvdXQKICAgICAgICAgLy8gdG8gZGlydHkg
dGhlIHJlbmRlciB0cmVlIHVzaW5nIHRoZSBvbGQgcG9zaXRpb24gdmFsdWUgbm93LgotICAgICAg
ICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgcGFyZW50KCkgJiYgc3R5bGUo
KS0+cG9zaXRpb24oKSAhPSBuZXdTdHlsZS0+cG9zaXRpb24oKSkgeworICAgICAgICBpZiAoZGlm
ZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgcGFyZW50KCkgJiYgb2xkU3R5bGUtPnBvc2l0
aW9uKCkgIT0gbmV3U3R5bGUtPnBvc2l0aW9uKCkpIHsKICAgICAgICAgICAgIG1hcmtDb250YWlu
aW5nQmxvY2tzRm9yTGF5b3V0KCk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24o
KSA9PSBTdGF0aWNQb3NpdGlvbikKKyAgICAgICAgICAgIGlmIChvbGRTdHlsZS0+cG9zaXRpb24o
KSA9PSBTdGF0aWNQb3NpdGlvbikKICAgICAgICAgICAgICAgICByZXBhaW50KCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChuZXdTdHlsZS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uIHx8
IG5ld1N0eWxlLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pCisgICAgICAgICAgICBlbHNl
IGlmIChuZXdTdHlsZS0+aXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAgICAgcGFyZW50KCkt
PnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoaXNGbG9hdGluZygp
ICYmICFpc1Bvc2l0aW9uZWQoKSAmJiAobmV3U3R5bGUtPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQ
b3NpdGlvbiB8fCBuZXdTdHlsZS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKSkKKyAgICAg
ICAgICAgIGlmIChpc0Zsb2F0aW5nKCkgJiYgIWlzUG9zaXRpb25lZCgpICYmIG5ld1N0eWxlLT5p
c1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICByZW1vdmVGbG9hdGluZ09yUG9zaXRpb25l
ZENoaWxkRnJvbUJsb2NrTGlzdHMoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobmV3U3R5
bGUgJiYgaXNCb2R5KCkpCkBAIC0zMjUsNyArMzI3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxl
V2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0
eWwKIAogICAgIGlmIChGcmFtZVZpZXcgKmZyYW1lVmlldyA9IHZpZXcoKS0+ZnJhbWVWaWV3KCkp
IHsKICAgICAgICAgYm9vbCBuZXdTdHlsZUlzRml4ZWQgPSBuZXdTdHlsZSAmJiBuZXdTdHlsZS0+
cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOwotICAgICAgICBib29sIG9sZFN0eWxlSXNGaXhl
ZCA9IHN0eWxlKCkgJiYgc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOworICAg
ICAgICBib29sIG9sZFN0eWxlSXNGaXhlZCA9IG9sZFN0eWxlICYmIG9sZFN0eWxlLT5wb3NpdGlv
bigpID09IEZpeGVkUG9zaXRpb247CiAgICAgICAgIGlmIChuZXdTdHlsZUlzRml4ZWQgIT0gb2xk
U3R5bGVJc0ZpeGVkKSB7CiAgICAgICAgICAgICBpZiAobmV3U3R5bGVJc0ZpeGVkKQogICAgICAg
ICAgICAgICAgIGZyYW1lVmlldy0+YWRkRml4ZWRPYmplY3QoKTsKQEAgLTM0MSw2ICszNDMsNyBA
QCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogewogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpz
dHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKKyAgICBSZW5kZXJTdHlsZSogbmV3U3R5
bGUgPSBzdHlsZSgpOwogICAgIGlmIChuZWVkc0xheW91dCgpICYmIG9sZFN0eWxlKSB7CiAgICAg
ICAgIGlmIChvbGRTdHlsZSAmJiAob2xkU3R5bGUtPmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNlbnQo
KSB8fCBvbGRTdHlsZS0+bG9naWNhbE1pbkhlaWdodCgpLmlzUGVyY2VudCgpIHx8IG9sZFN0eWxl
LT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNQZXJjZW50KCkpKQogICAgICAgICAgICAgUmVuZGVyQmxv
Y2s6OnJlbW92ZVBlcmNlbnRIZWlnaHREZXNjZW5kYW50KHRoaXMpOwpAQCAtMzQ4LDIwICszNTEs
MjAgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgLy8gTm9ybWFsbHkgd2UgY2Fu
IGRvIG9wdGltaXplZCBwb3NpdGlvbmluZyBsYXlvdXQgZm9yIGFic29sdXRlL2ZpeGVkIHBvc2l0
aW9uZWQgb2JqZWN0cy4gVGhlcmUgaXMgb25lIHNwZWNpYWwgY2FzZSwgaG93ZXZlciwgd2hpY2gg
aXMKICAgICAgICAgLy8gd2hlbiB0aGUgcG9zaXRpb25lZCBvYmplY3QncyBtYXJnaW4tYmVmb3Jl
IGlzIGNoYW5nZWQuIEluIHRoaXMgY2FzZSB0aGUgcGFyZW50IGhhcyB0byBnZXQgYSBsYXlvdXQg
aW4gb3JkZXIgdG8gcnVuIG1hcmdpbiBjb2xsYXBzaW5nCiAgICAgICAgIC8vIHRvIGRldGVybWlu
ZSB0aGUgbmV3IHN0YXRpYyBwb3NpdGlvbi4KLSAgICAgICAgaWYgKGlzUG9zaXRpb25lZCgpICYm
IHN0eWxlKCktPmhhc1N0YXRpY0Jsb2NrUG9zaXRpb24oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkgJiYgb2xkU3R5bGUtPm1hcmdpbkJlZm9yZSgpICE9IHN0eWxlKCktPm1hcmdpbkJlZm9yZSgp
CisgICAgICAgIGlmIChpc1Bvc2l0aW9uZWQoKSAmJiBuZXdTdHlsZS0+aGFzU3RhdGljQmxvY2tQ
b3NpdGlvbihpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSAmJiBvbGRTdHlsZS0+bWFyZ2luQmVm
b3JlKCkgIT0gbmV3U3R5bGUtPm1hcmdpbkJlZm9yZSgpCiAgICAgICAgICAgICAmJiBwYXJlbnQo
KSAmJiAhcGFyZW50KCktPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKICAgICAgICAgICAgIHBh
cmVudCgpLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUpOwogICAgIH0KIAogICAgIC8vIElmIG91
ciB6b29tIGZhY3RvciBjaGFuZ2VzIGFuZCB3ZSBoYXZlIGEgZGVmaW5lZCBzY3JvbGxMZWZ0L1Rv
cCwgd2UgbmVlZCB0byBhZGp1c3QgdGhhdCB2YWx1ZSBpbnRvIHRoZQogICAgIC8vIG5ldyB6b29t
ZWQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgb2xkU3R5
bGUgJiYgc3R5bGUoKSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IHN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSkgeworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBvbGRTdHlsZSAm
JiBuZXdTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLT5lZmZl
Y3RpdmVab29tKCkpIHsKICAgICAgICAgaWYgKGludCBsZWZ0ID0gbGF5ZXIoKS0+c2Nyb2xsWE9m
ZnNldCgpKSB7Ci0gICAgICAgICAgICBsZWZ0ID0gKGxlZnQgLyBvbGRTdHlsZS0+ZWZmZWN0aXZl
Wm9vbSgpKSAqIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGxlZnQgPSAo
bGVmdCAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkpICogbmV3U3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKICAgICAgICAgICAgIGxheWVyKCktPnNjcm9sbFRvWE9mZnNldChsZWZ0KTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoaW50IHRvcCA9IGxheWVyKCktPnNjcm9sbFlPZmZzZXQoKSkgewot
ICAgICAgICAgICAgdG9wID0gKHRvcCAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkpICogc3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICAgICAgdG9wID0gKHRvcCAvIG9sZFN0eWxl
LT5lZmZlY3RpdmVab29tKCkpICogbmV3U3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKICAgICAgICAg
ICAgIGxheWVyKCktPnNjcm9sbFRvWU9mZnNldCh0b3ApOwogICAgICAgICB9CiAgICAgfQpAQCAt
MzcxLDI1ICszNzQsMjUgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAogICAgIC8vIFNldCB0
aGUgdGV4dCBjb2xvciBpZiB3ZSdyZSB0aGUgYm9keS4KICAgICBpZiAoaXNCb2R5UmVuZGVyZXIp
Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFRleHRDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRUZXh0
Q29sb3IobmV3U3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSk7
CiAKICAgICBpZiAoaXNSb290UmVuZGVyZXIgfHwgaXNCb2R5UmVuZGVyZXIpIHsKICAgICAgICAg
Ly8gUHJvcGFnYXRlIHRoZSBuZXcgd3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rpb24gdXAgdG8gdGhl
IFJlbmRlclZpZXcuCiAgICAgICAgIFJlbmRlclZpZXcqIHZpZXdSZW5kZXJlciA9IHZpZXcoKTsK
ICAgICAgICAgUmVuZGVyU3R5bGUqIHZpZXdTdHlsZSA9IHZpZXdSZW5kZXJlci0+c3R5bGUoKTsK
LSAgICAgICAgaWYgKHZpZXdTdHlsZS0+ZGlyZWN0aW9uKCkgIT0gc3R5bGUoKS0+ZGlyZWN0aW9u
KCkgJiYgKGlzUm9vdFJlbmRlcmVyIHx8ICFkb2N1bWVudCgpLT5kaXJlY3Rpb25TZXRPbkRvY3Vt
ZW50RWxlbWVudCgpKSkgewotICAgICAgICAgICAgdmlld1N0eWxlLT5zZXREaXJlY3Rpb24oc3R5
bGUoKS0+ZGlyZWN0aW9uKCkpOworICAgICAgICBpZiAodmlld1N0eWxlLT5kaXJlY3Rpb24oKSAh
PSBuZXdTdHlsZS0+ZGlyZWN0aW9uKCkgJiYgKGlzUm9vdFJlbmRlcmVyIHx8ICFkb2N1bWVudCgp
LT5kaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudCgpKSkgeworICAgICAgICAgICAgdmlld1N0
eWxlLT5zZXREaXJlY3Rpb24obmV3U3R5bGUtPmRpcmVjdGlvbigpKTsKICAgICAgICAgICAgIGlm
IChpc0JvZHlSZW5kZXJlcikKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5kb2N1bWVudEVs
ZW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+c2V0RGlyZWN0aW9uKHN0eWxlKCktPmRpcmVj
dGlvbigpKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+c2V0RGlyZWN0aW9uKG5ld1N0eWxlLT5kaXJlY3Rpb24oKSk7
CiAgICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICh2aWV3U3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS0+
d3JpdGluZ01vZGUoKSAmJiAoaXNSb290UmVuZGVyZXIgfHwgIWRvY3VtZW50KCktPndyaXRpbmdN
b2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkpIHsKLSAgICAgICAgICAgIHZpZXdTdHlsZS0+c2V0
V3JpdGluZ01vZGUoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0gICAgICAgICAgICB2aWV3UmVu
ZGVyZXItPnNldEhvcml6b250YWxXcml0aW5nTW9kZShzdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKTsKKyAgICAgICAgaWYgKHZpZXdTdHlsZS0+d3JpdGluZ01vZGUoKSAhPSBuZXdT
dHlsZS0+d3JpdGluZ01vZGUoKSAmJiAoaXNSb290UmVuZGVyZXIgfHwgIWRvY3VtZW50KCktPndy
aXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoKSkpIHsKKyAgICAgICAgICAgIHZpZXdTdHls
ZS0+c2V0V3JpdGluZ01vZGUobmV3U3R5bGUtPndyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAg
dmlld1JlbmRlcmVyLT5zZXRIb3Jpem9udGFsV3JpdGluZ01vZGUobmV3U3R5bGUtPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpOwogICAgICAgICAgICAgaWYgKGlzQm9keVJlbmRlcmVyKSB7Ci0g
ICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCkt
PnN0eWxlKCktPnNldFdyaXRpbmdNb2RlKHN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwotICAgICAg
ICAgICAgICAgIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJlcigpLT5zZXRI
b3Jpem9udGFsV3JpdGluZ01vZGUoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7
CisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVy
KCktPnN0eWxlKCktPnNldFdyaXRpbmdNb2RlKG5ld1N0eWxlLT53cml0aW5nTW9kZSgpKTsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+
c2V0SG9yaXpvbnRhbFdyaXRpbmdNb2RlKG5ld1N0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldp
ZHRoc1JlY2FsYygpOwogICAgICAgICB9CkBAIC00MDIsNiArNDA1LDcgQEAgdm9pZCBSZW5kZXJC
b3g6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpCiB7CiAgICAgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpOwogCisgICAgUmVuZGVyU3R5bGUq
IHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGJvb2wgaXNSb290T2JqZWN0ID0gaXNSb290KCk7
CiAgICAgYm9vbCBpc1ZpZXdPYmplY3QgPSBpc1JlbmRlclZpZXcoKTsKIApAQCAtNDA5LDExICs0
MTMsMTEgQEAgdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpCiAg
ICAgaWYgKGlzUm9vdE9iamVjdCB8fCBpc1ZpZXdPYmplY3QpCiAgICAgICAgIHNldEhhc0JveERl
Y29yYXRpb25zKHRydWUpOwogCi0gICAgc2V0UG9zaXRpb25lZChzdHlsZSgpLT5pc1Bvc2l0aW9u
ZWQoKSk7Ci0gICAgc2V0RmxvYXRpbmcoc3R5bGUoKS0+aXNGbG9hdGluZygpICYmICghaXNQb3Np
dGlvbmVkKCkgfHwgc3R5bGUoKS0+ZmxvYXRpbmcoKSA9PSBQb3NpdGlvbmVkRmxvYXQpKTsKKyAg
ICBzZXRQb3NpdGlvbmVkKHN0eWxlVG9Vc2UtPmlzUG9zaXRpb25lZCgpKTsKKyAgICBzZXRGbG9h
dGluZyhzdHlsZVRvVXNlLT5pc0Zsb2F0aW5nKCkgJiYgKCFpc1Bvc2l0aW9uZWQoKSB8fCBzdHls
ZVRvVXNlLT5mbG9hdGluZygpID09IFBvc2l0aW9uZWRGbG9hdCkpOwogCiAgICAgLy8gV2UgYWxz
byBoYW5kbGUgPGJvZHk+IGFuZCA8aHRtbD4sIHdob3NlIG92ZXJmbG93IGFwcGxpZXMgdG8gdGhl
IHZpZXdwb3J0LgotICAgIGlmIChzdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSAmJiAh
aXNSb290T2JqZWN0ICYmIChpc1JlbmRlckJsb2NrKCkgfHwgaXNUYWJsZVJvdygpIHx8IGlzVGFi
bGVTZWN0aW9uKCkpKSB7CisgICAgaWYgKHN0eWxlVG9Vc2UtPm92ZXJmbG93WCgpICE9IE9WSVNJ
QkxFICYmICFpc1Jvb3RPYmplY3QgJiYgKGlzUmVuZGVyQmxvY2soKSB8fCBpc1RhYmxlUm93KCkg
fHwgaXNUYWJsZVNlY3Rpb24oKSkpIHsKICAgICAgICAgYm9vbCBib3hIYXNPdmVyZmxvd0NsaXAg
PSB0cnVlOwogICAgICAgICBpZiAoaXNCb2R5KCkpIHsKICAgICAgICAgICAgIC8vIE92ZXJmbG93
IG9uIHRoZSBib2R5IGNhbiBwcm9wYWdhdGUgdG8gdGhlIHZpZXdwb3J0IHVuZGVyIHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucy4KQEAgLTQzNiw4ICs0NDAsOCBAQCB2b2lkIFJlbmRlckJveDo6dXBk
YXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIHNldEhh
c1RyYW5zZm9ybShzdHlsZSgpLT5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSk7Ci0gICAg
c2V0SGFzUmVmbGVjdGlvbihzdHlsZSgpLT5ib3hSZWZsZWN0KCkpOworICAgIHNldEhhc1RyYW5z
Zm9ybShzdHlsZVRvVXNlLT5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSk7CisgICAgc2V0
SGFzUmVmbGVjdGlvbihzdHlsZVRvVXNlLT5ib3hSZWZsZWN0KCkpOwogfQogCiB2b2lkIFJlbmRl
ckJveDo6bGF5b3V0KCkKQEAgLTE1MTgsMTUgKzE1MjIsMTYgQEAgdm9pZCBSZW5kZXJCb3g6OmNv
bXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgTGEKICAgICAvLyBSZW5kZXJWaWV3Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQgdGhlbiBjb252
ZXJ0cyB0aGUgcmVjdCB0byBwaHlzaWNhbCBjb29yZGluYXRlcy4gIFdlIGFsc28gY29udmVydCB0
bwogICAgIC8vIHBoeXNpY2FsIHdoZW4gd2UgaGl0IGEgcmVwYWludENvbnRhaW5lciBib3VuZGFy
eS4gIFRoZXJlZm9yZSB0aGUgZmluYWwgcmVjdCByZXR1cm5lZCBpcyBhbHdheXMgaW4gdGhlCiAg
ICAgLy8gcGh5c2ljYWwgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgcmVwYWludENvbnRhaW5lci4K
KyAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgaWYgKFJlbmRlclZp
ZXcqIHYgPSB2aWV3KCkpIHsKICAgICAgICAgLy8gTGF5b3V0U3RhdGUgaXMgb25seSB2YWxpZCBm
b3Igcm9vdC1yZWxhdGl2ZSwgbm9uLWZpeGVkIHBvc2l0aW9uIHJlcGFpbnRpbmcKLSAgICAgICAg
aWYgKHYtPmxheW91dFN0YXRlRW5hYmxlZCgpICYmICFyZXBhaW50Q29udGFpbmVyICYmIHN0eWxl
KCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikgeworICAgICAgICBpZiAodi0+bGF5b3V0
U3RhdGVFbmFibGVkKCkgJiYgIXJlcGFpbnRDb250YWluZXIgJiYgc3R5bGVUb1VzZS0+cG9zaXRp
b24oKSAhPSBGaXhlZFBvc2l0aW9uKSB7CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0
U3RhdGUgPSB2LT5sYXlvdXRTdGF0ZSgpOwogCiAgICAgICAgICAgICBpZiAobGF5ZXIoKSAmJiBs
YXllcigpLT50cmFuc2Zvcm0oKSkKICAgICAgICAgICAgICAgICByZWN0ID0gbGF5ZXIoKS0+dHJh
bnNmb3JtKCktPm1hcFJlY3QocmVjdCk7CiAKLSAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3Np
dGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKKyAgICAgICAgICAgIGlmIChz
dHlsZVRvVXNlLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKICAg
ICAgICAgICAgICAgICByZWN0Lm1vdmUobGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgp
KTsKIAogICAgICAgICAgICAgcmVjdC5tb3ZlQnkobG9jYXRpb24oKSk7CkBAIC0xNTU1LDEyICsx
NTYwLDEyIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIExhCiAgICAgICAgIGZsaXBGb3JXcml0aW5n
TW9kZShyZWN0KTsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBpZiAoc3R5bGUoKS0+
aGFzRmlsdGVyT3V0c2V0cygpKSB7CisgICAgaWYgKHN0eWxlVG9Vc2UtPmhhc0ZpbHRlck91dHNl
dHMoKSkgewogICAgICAgICBMYXlvdXRVbml0IHRvcE91dHNldDsKICAgICAgICAgTGF5b3V0VW5p
dCByaWdodE91dHNldDsKICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21PdXRzZXQ7CiAgICAgICAg
IExheW91dFVuaXQgbGVmdE91dHNldDsKLSAgICAgICAgc3R5bGUoKS0+ZmlsdGVyKCkuZ2V0T3V0
c2V0cyh0b3BPdXRzZXQsIHJpZ2h0T3V0c2V0LCBib3R0b21PdXRzZXQsIGxlZnRPdXRzZXQpOwor
ICAgICAgICBzdHlsZVRvVXNlLT5maWx0ZXIoKS5nZXRPdXRzZXRzKHRvcE91dHNldCwgcmlnaHRP
dXRzZXQsIGJvdHRvbU91dHNldCwgbGVmdE91dHNldCk7CiAgICAgICAgIHJlY3QubW92ZSgtbGVm
dE91dHNldCwgLXRvcE91dHNldCk7CiAgICAgICAgIHJlY3QuZXhwYW5kKGxlZnRPdXRzZXQgKyBy
aWdodE91dHNldCwgdG9wT3V0c2V0ICsgYm90dG9tT3V0c2V0KTsKICAgICB9CkBAIC0xNTY5LDcg
KzE1NzQsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYQogICAgIExheW91dFBvaW50IHRvcExl
ZnQgPSByZWN0LmxvY2F0aW9uKCk7CiAgICAgdG9wTGVmdC5tb3ZlKHgoKSwgeSgpKTsKIAotICAg
IEVQb3NpdGlvbiBwb3NpdGlvbiA9IHN0eWxlKCktPnBvc2l0aW9uKCk7CisgICAgRVBvc2l0aW9u
IHBvc2l0aW9uID0gc3R5bGVUb1VzZS0+cG9zaXRpb24oKTsKIAogICAgIC8vIFdlIGFyZSBub3cg
aW4gb3VyIHBhcmVudCBjb250YWluZXIncyBjb29yZGluYXRlIHNwYWNlLiAgQXBwbHkgb3VyIHRy
YW5zZm9ybSB0byBvYnRhaW4gYSBib3VuZGluZyBib3gKICAgICAvLyBpbiB0aGUgcGFyZW50J3Mg
Y29vcmRpbmF0ZSBzcGFjZSB0aGF0IGVuY2xvc2VzIHVzLgpAQCAtMTY4MCw3ICsxNjg1LDggQEAg
dm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihSZW5kZXJSZWdpb24q
IHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmYKICAgICBib29sIHN0cmV0Y2hpbmcgPSAocGFyZW50KCkt
PnN0eWxlKCktPmJveEFsaWduKCkgPT0gQlNUUkVUQ0gpOwogICAgIGJvb2wgdHJlYXRBc1JlcGxh
Y2VkID0gc2hvdWxkQ29tcHV0ZVNpemVBc1JlcGxhY2VkKCkgJiYgKCFpblZlcnRpY2FsQm94IHx8
ICFzdHJldGNoaW5nKTsKIAotICAgIExlbmd0aCBsb2dpY2FsV2lkdGhMZW5ndGggPSAodHJlYXRB
c1JlcGxhY2VkKSA/IExlbmd0aChjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoKSwgRml4ZWQp
IDogc3R5bGUoKS0+bG9naWNhbFdpZHRoKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2Ug
PSBzdHlsZSgpOworICAgIExlbmd0aCBsb2dpY2FsV2lkdGhMZW5ndGggPSAodHJlYXRBc1JlcGxh
Y2VkKSA/IExlbmd0aChjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoKSwgRml4ZWQpIDogc3R5
bGVUb1VzZS0+bG9naWNhbFdpZHRoKCk7CiAKICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWlu
aW5nQmxvY2soKTsKICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IG1heDxM
YXlvdXRVbml0PigwLCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdp
b24ocmVnaW9uLCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSk7CkBAIC0xNjkxLDgg
KzE2OTcsOCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKFJl
bmRlclJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZgogICAgIAogICAgIGlmIChpc0lubGlu
ZSgpICYmICFpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpKSB7CiAgICAgICAgIC8vIGp1c3Qg
Y2FsY3VsYXRlIG1hcmdpbnMKLSAgICAgICAgc2V0TWFyZ2luU3RhcnQoc3R5bGUoKS0+bWFyZ2lu
U3RhcnQoKS5jYWxjTWluVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKSk7Ci0gICAgICAgIHNl
dE1hcmdpbkVuZChzdHlsZSgpLT5tYXJnaW5FbmQoKS5jYWxjTWluVmFsdWUoY29udGFpbmVyTG9n
aWNhbFdpZHRoKSk7CisgICAgICAgIHNldE1hcmdpblN0YXJ0KHN0eWxlVG9Vc2UtPm1hcmdpblN0
YXJ0KCkuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCkpOworICAgICAgICBzZXRN
YXJnaW5FbmQoc3R5bGVUb1VzZS0+bWFyZ2luRW5kKCkuY2FsY01pblZhbHVlKGNvbnRhaW5lckxv
Z2ljYWxXaWR0aCkpOwogICAgICAgICBpZiAodHJlYXRBc1JlcGxhY2VkKQogICAgICAgICAgICAg
c2V0TG9naWNhbFdpZHRoKG1heDxMYXlvdXRVbml0Pihsb2dpY2FsV2lkdGhMZW5ndGguY2FsY0Zs
b2F0VmFsdWUoMCkgKyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCksIG1pblByZWZlcnJl
ZExvZ2ljYWxXaWR0aCgpKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE3MDYsMTEgKzE3MTIsMTEg
QEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihSZW5kZXJSZWdp
b24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmYKICAgICAgICAgc2V0TG9naWNhbFdpZHRoKGNvbXB1
dGVMb2dpY2FsV2lkdGhVc2luZyhMb2dpY2FsV2lkdGgsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVE
aXJlY3Rpb24pKTsKIAogICAgICAgICAvLyBDYWxjdWxhdGUgTWF4TG9naWNhbFdpZHRoCi0gICAg
ICAgIGlmICghc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSkgeworICAg
ICAgICBpZiAoIXN0eWxlVG9Vc2UtPmxvZ2ljYWxNYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkpIHsK
ICAgICAgICAgICAgIExheW91dFVuaXQgbWF4TG9naWNhbFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxX
aWR0aFVzaW5nKE1heExvZ2ljYWxXaWR0aCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlv
bik7CiAgICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoKCkgPiBtYXhMb2dpY2FsV2lkdGgpIHsK
ICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsV2lkdGgobWF4TG9naWNhbFdpZHRoKTsKLSAgICAg
ICAgICAgICAgICBsb2dpY2FsV2lkdGhMZW5ndGggPSBzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgo
KTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGhMZW5ndGggPSBzdHlsZVRvVXNlLT5sb2dp
Y2FsTWF4V2lkdGgoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xNzE4LDcgKzE3
MjQsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKFJlbmRl
clJlZ2lvbiogcmVnaW9uLCBMYXlvdXRVbml0IG9mZgogICAgICAgICBMYXlvdXRVbml0IG1pbkxv
Z2ljYWxXaWR0aCA9IGNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZyhNaW5Mb2dpY2FsV2lkdGgsIGNv
bnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24pOwogICAgICAgICBpZiAobG9naWNhbFdpZHRo
KCkgPCBtaW5Mb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgIHNldExvZ2ljYWxXaWR0aChtaW5M
b2dpY2FsV2lkdGgpOwotICAgICAgICAgICAgbG9naWNhbFdpZHRoTGVuZ3RoID0gc3R5bGUoKS0+
bG9naWNhbE1pbldpZHRoKCk7CisgICAgICAgICAgICBsb2dpY2FsV2lkdGhMZW5ndGggPSBzdHls
ZVRvVXNlLT5sb2dpY2FsTWluV2lkdGgoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTczMCw4
ICsxNzM2LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihS
ZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmYKIAogICAgIC8vIE1hcmdpbiBjYWxj
dWxhdGlvbnMuCiAgICAgaWYgKGxvZ2ljYWxXaWR0aExlbmd0aC5pc0F1dG8oKSB8fCBoYXNQZXJw
ZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrKSB7Ci0gICAgICAgIHNldE1hcmdpblN0YXJ0KHN0eWxl
KCktPm1hcmdpblN0YXJ0KCkuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCkpOwot
ICAgICAgICBzZXRNYXJnaW5FbmQoc3R5bGUoKS0+bWFyZ2luRW5kKCkuY2FsY01pblZhbHVlKGNv
bnRhaW5lckxvZ2ljYWxXaWR0aCkpOworICAgICAgICBzZXRNYXJnaW5TdGFydChzdHlsZVRvVXNl
LT5tYXJnaW5TdGFydCgpLmNhbGNNaW5WYWx1ZShjb250YWluZXJMb2dpY2FsV2lkdGgpKTsKKyAg
ICAgICAgc2V0TWFyZ2luRW5kKHN0eWxlVG9Vc2UtPm1hcmdpbkVuZCgpLmNhbGNNaW5WYWx1ZShj
b250YWluZXJMb2dpY2FsV2lkdGgpKTsKICAgICB9IGVsc2UKICAgICAgICAgY29tcHV0ZUlubGlu
ZURpcmVjdGlvbk1hcmdpbnMoY2IsIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgbG9naWNhbFdpZHRo
KCkpOwogCkBAIC0xNzQzLDE3ICsxNzQ5LDE4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9n
aWNhbFdpZHRoSW5SZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2ZmCiBM
YXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKExvZ2ljYWxXaWR0
aFR5cGUgd2lkdGhUeXBlLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkKIHsKICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aFJlc3VsdCA9IGxvZ2ljYWxXaWR0aCgpOworICAgIFJl
bmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICBMZW5ndGggbG9naWNhbFdpZHRo
OwogICAgIGlmICh3aWR0aFR5cGUgPT0gTG9naWNhbFdpZHRoKQotICAgICAgICBsb2dpY2FsV2lk
dGggPSBzdHlsZSgpLT5sb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgbG9naWNhbFdpZHRoID0gc3R5
bGVUb1VzZS0+bG9naWNhbFdpZHRoKCk7CiAgICAgZWxzZSBpZiAod2lkdGhUeXBlID09IE1pbkxv
Z2ljYWxXaWR0aCkKLSAgICAgICAgbG9naWNhbFdpZHRoID0gc3R5bGUoKS0+bG9naWNhbE1pbldp
ZHRoKCk7CisgICAgICAgIGxvZ2ljYWxXaWR0aCA9IHN0eWxlVG9Vc2UtPmxvZ2ljYWxNaW5XaWR0
aCgpOwogICAgIGVsc2UKLSAgICAgICAgbG9naWNhbFdpZHRoID0gc3R5bGUoKS0+bG9naWNhbE1h
eFdpZHRoKCk7CisgICAgICAgIGxvZ2ljYWxXaWR0aCA9IHN0eWxlVG9Vc2UtPmxvZ2ljYWxNYXhX
aWR0aCgpOwogCiAgICAgaWYgKGxvZ2ljYWxXaWR0aC5pc0ludHJpbnNpY09yQXV0bygpKSB7Ci0g
ICAgICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQgPSBzdHlsZSgpLT5tYXJnaW5TdGFydCgpLmNh
bGNNaW5WYWx1ZShhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwotICAgICAgICBMYXlvdXRVbml0IG1h
cmdpbkVuZCA9IHN0eWxlKCktPm1hcmdpbkVuZCgpLmNhbGNNaW5WYWx1ZShhdmFpbGFibGVMb2dp
Y2FsV2lkdGgpOworICAgICAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0ID0gc3R5bGVUb1VzZS0+
bWFyZ2luU3RhcnQoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQgPSBzdHlsZVRvVXNlLT5tYXJnaW5FbmQoKS5jYWxjTWlu
VmFsdWUoYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKICAgICAgICAgbG9naWNhbFdpZHRoUmVzdWx0
ID0gYXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gbWFyZ2luU3RhcnQgLSBtYXJnaW5FbmQ7CiAKICAg
ICAgICAgaWYgKHNpemVzVG9JbnRyaW5zaWNMb2dpY2FsV2lkdGgod2lkdGhUeXBlKSkgewpAQCAt
MTk4MSwxMiArMTk4OCwxMyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQo
KQogICAgICAgICAvLyBncmFiIG91ciBjYWNoZWQgZmxleGlibGUgaGVpZ2h0LgogICAgICAgICAv
LyBGSVhNRTogQWNjb3VudCBmb3IgYmxvY2stZmxvdyBpbiBmbGV4aWJsZSBib3hlcy4KICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NDE4CisgICAg
ICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAgICAgaWYgKGhhc092
ZXJyaWRlSGVpZ2h0KCkgJiYgcGFyZW50KCktPmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNh
dGVkKCkpCiAgICAgICAgICAgICBoID0gTGVuZ3RoKG92ZXJyaWRlSGVpZ2h0KCkgLSBib3JkZXJB
bmRQYWRkaW5nTG9naWNhbEhlaWdodCgpLCBGaXhlZCk7CiAgICAgICAgIGVsc2UgaWYgKHRyZWF0
QXNSZXBsYWNlZCkKICAgICAgICAgICAgIGggPSBMZW5ndGgoY29tcHV0ZVJlcGxhY2VkTG9naWNh
bEhlaWdodCgpLCBGaXhlZCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaCA9IHN0eWxl
KCktPmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgIGggPSBzdHlsZVRvVXNlLT5sb2dpY2Fs
SGVpZ2h0KCk7CiAgICAgICAgICAgICBjaGVja01pbk1heEhlaWdodCA9IHRydWU7CiAgICAgICAg
IH0KIApAQCAtMjAwMSwxMiArMjAwOSwxMiBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2lj
YWxIZWlnaHQoKQogCiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVzdWx0OwogICAgICAgICBp
ZiAoY2hlY2tNaW5NYXhIZWlnaHQpIHsKLSAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGNvbXB1
dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGhlaWdodFJlc3VsdCA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGVUb1VzZS0+
bG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgPCAwIG9yIHJvdWdo
bHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY2MTQ4CiAgICAgICAgICAgICBpZiAoaGVpZ2h0UmVzdWx0ID09
IC0xKQogICAgICAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAg
ICAgICAgICAgIExheW91dFVuaXQgbWluSCA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5
bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpKTsgLy8gTGVhdmUgYXMgLTEgaWYgdW5zZXQuCi0gICAg
ICAgICAgICBMYXlvdXRVbml0IG1heEggPSBzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNV
bmRlZmluZWQoKSA/IGhlaWdodFJlc3VsdCA6IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5
bGUoKS0+bG9naWNhbE1heEhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgbWluSCA9
IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGVUb1VzZS0+bG9naWNhbE1pbkhlaWdodCgp
KTsgLy8gTGVhdmUgYXMgLTEgaWYgdW5zZXQuCisgICAgICAgICAgICBMYXlvdXRVbml0IG1heEgg
PSBzdHlsZVRvVXNlLT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IGhlaWdodFJl
c3VsdCA6IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGVUb1VzZS0+bG9naWNhbE1heEhl
aWdodCgpKTsKICAgICAgICAgICAgIGlmIChtYXhIID09IC0xKQogICAgICAgICAgICAgICAgIG1h
eEggPSBoZWlnaHRSZXN1bHQ7CiAgICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBtaW4obWF4SCwg
aGVpZ2h0UmVzdWx0KTsKQEAgLTIwODksMTEgKzIwOTcsMTMgQEAgTGF5b3V0VW5pdCBSZW5kZXJC
b3g6OmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgmIGhlaWdodCkK
ICAgICAgICAgY2ItPmFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KHRoaXMpOwogICAgIH0KIAor
ICAgIFJlbmRlclN0eWxlKiBjYnN0eWxlID0gY2ItPnN0eWxlKCk7CisKICAgICAvLyBBIHBvc2l0
aW9uZWQgZWxlbWVudCB0aGF0IHNwZWNpZmllZCBib3RoIHRvcC9ib3R0b20gb3IgdGhhdCBzcGVj
aWZpZXMgaGVpZ2h0IHNob3VsZCBiZSB0cmVhdGVkIGFzIHRob3VnaCBpdCBoYXMgYSBoZWlnaHQK
ICAgICAvLyBleHBsaWNpdGx5IHNwZWNpZmllZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBhbnkgcGVy
Y2VudGFnZSBjb21wdXRhdGlvbnMuCiAgICAgLy8gRklYTUU6IFdlIGNhbid0IGp1c3QgY2hlY2sg
dG9wL2JvdHRvbSBoZXJlLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NjUwMAotICAgIGJvb2wgaXNQb3NpdGlvbmVkV2l0aFNwZWNpZmllZEhlaWdodCA9
IGNiLT5pc1Bvc2l0aW9uZWQoKSAmJiAoIWNiLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNB
dXRvKCkgfHwgKCFjYi0+c3R5bGUoKS0+dG9wKCkuaXNBdXRvKCkgJiYgIWNiLT5zdHlsZSgpLT5i
b3R0b20oKS5pc0F1dG8oKSkpOworICAgIGJvb2wgaXNQb3NpdGlvbmVkV2l0aFNwZWNpZmllZEhl
aWdodCA9IGNiLT5pc1Bvc2l0aW9uZWQoKSAmJiAoIWNic3R5bGUtPmxvZ2ljYWxIZWlnaHQoKS5p
c0F1dG8oKSB8fCAoIWNic3R5bGUtPnRvcCgpLmlzQXV0bygpICYmICFjYnN0eWxlLT5ib3R0b20o
KS5pc0F1dG8oKSkpOwogCiAgICAgYm9vbCBpbmNsdWRlQm9yZGVyUGFkZGluZyA9IGlzVGFibGUo
KTsKIApAQCAtMjEyMSwxMSArMjEzMSwxMSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0
ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNvbnN0IExlbmd0aCYgaGVpZ2h0KQogICAgIH0KICAg
ICAvLyBPdGhlcndpc2Ugd2Ugb25seSB1c2Ugb3VyIHBlcmNlbnRhZ2UgaGVpZ2h0IGlmIG91ciBj
b250YWluaW5nIGJsb2NrIGhhZCBhIHNwZWNpZmllZAogICAgIC8vIGhlaWdodC4KLSAgICBlbHNl
IGlmIChjYi0+c3R5bGUoKS0+bG9naWNhbEhlaWdodCgpLmlzRml4ZWQoKSkKLSAgICAgICAgcmVz
dWx0ID0gY2ItPmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChjYi0+c3R5bGUoKS0+bG9n
aWNhbEhlaWdodCgpLnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGNiLT5zdHlsZSgpLT5sb2dpY2Fs
SGVpZ2h0KCkuaXNQZXJjZW50KCkgJiYgIWlzUG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQp
IHsKKyAgICBlbHNlIGlmIChjYnN0eWxlLT5sb2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgpKQorICAg
ICAgICByZXN1bHQgPSBjYi0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGNic3R5bGUt
PmxvZ2ljYWxIZWlnaHQoKS52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChjYnN0eWxlLT5sb2dpY2Fs
SGVpZ2h0KCkuaXNQZXJjZW50KCkgJiYgIWlzUG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQp
IHsKICAgICAgICAgLy8gV2UgbmVlZCB0byByZWN1ciBhbmQgY29tcHV0ZSB0aGUgcGVyY2VudGFn
ZSBoZWlnaHQgZm9yIG91ciBjb250YWluaW5nIGJsb2NrLgotICAgICAgICByZXN1bHQgPSBjYi0+
Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNiLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0
KCkpOworICAgICAgICByZXN1bHQgPSBjYi0+Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0
KGNic3R5bGUtPmxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBVc2UgPCAwIG9y
IHJvdWdobHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LCBzZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTQ4CiAgICAgICAgIGlmIChyZXN1bHQgIT0gLTEp
CiAgICAgICAgICAgICByZXN1bHQgPSBjYi0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0
KHJlc3VsdCk7CkBAIC0yODMyLDE1ICsyODQyLDE2IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKQogICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVy
TG9naWNhbEhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVk
KGNvbnRhaW5lckJsb2NrKTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKTsKLSAgICBib29sIGlzRmxpcHBlZCA9IHN0eWxlKCktPmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgp
OworICAgIGJvb2wgaXNGbGlwcGVkID0gc3R5bGVUb1VzZS0+aXNGbGlwcGVkQmxvY2tzV3JpdGlu
Z01vZGUoKTsKICAgICBjb25zdCBMYXlvdXRVbml0IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRl
ckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgY29uc3QgTGVuZ3RoIG1hcmdpbkJlZm9y
ZSA9IHN0eWxlKCktPm1hcmdpbkJlZm9yZSgpOwotICAgIGNvbnN0IExlbmd0aCBtYXJnaW5BZnRl
ciA9IHN0eWxlKCktPm1hcmdpbkFmdGVyKCk7CisgICAgY29uc3QgTGVuZ3RoIG1hcmdpbkJlZm9y
ZSA9IHN0eWxlVG9Vc2UtPm1hcmdpbkJlZm9yZSgpOworICAgIGNvbnN0IExlbmd0aCBtYXJnaW5B
ZnRlciA9IHN0eWxlVG9Vc2UtPm1hcmdpbkFmdGVyKCk7CiAgICAgTGF5b3V0VW5pdCYgbWFyZ2lu
QmVmb3JlQWxpYXMgPSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVkID8gbV9tYXJnaW5Cb3R0b20g
OiBtX21hcmdpblRvcCkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5SaWdodDogbV9tYXJnaW5MZWZ0
KTsKICAgICBMYXlvdXRVbml0JiBtYXJnaW5BZnRlckFsaWFzID0gaXNIb3Jpem9udGFsID8gKGlz
RmxpcHBlZCA/IG1fbWFyZ2luVG9wIDogbV9tYXJnaW5Cb3R0b20pIDogKGlzRmxpcHBlZCA/IG1f
bWFyZ2luTGVmdDogbV9tYXJnaW5SaWdodCk7CiAKLSAgICBMZW5ndGggbG9naWNhbFRvcExlbmd0
aCA9IHN0eWxlKCktPmxvZ2ljYWxUb3AoKTsKLSAgICBMZW5ndGggbG9naWNhbEJvdHRvbUxlbmd0
aCA9IHN0eWxlKCktPmxvZ2ljYWxCb3R0b20oKTsKKyAgICBMZW5ndGggbG9naWNhbFRvcExlbmd0
aCA9IHN0eWxlVG9Vc2UtPmxvZ2ljYWxUb3AoKTsKKyAgICBMZW5ndGggbG9naWNhbEJvdHRvbUxl
bmd0aCA9IHN0eWxlVG9Vc2UtPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgCiAgICAgLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qXAogICAgICAqIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBzZWN0aW9u
IGFuZCB0aGUgbmV4dCwgdGhlIHRlcm0gInN0YXRpYyBwb3NpdGlvbiIKQEAgLTI4NjcsNyArMjg3
OCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKQog
ICAgIExheW91dFVuaXQgbG9naWNhbFRvcFBvczsKIAogICAgIC8vIENhbGN1bGF0ZSBjb25zdHJh
aW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ2hlaWdodCcgY2FzZS4KLSAgICBjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCksIGNvbnRhaW5l
ckJsb2NrLCBjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAg
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGVUb1VzZS0+bG9naWNhbEhl
aWdodCgpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyTG9naWNhbEhlaWdodCwgYm9yZGVyc1Bs
dXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2lj
YWxUb3BMZW5ndGgsIGxvZ2ljYWxCb3R0b21MZW5ndGgsIG1hcmdpbkJlZm9yZSwgbWFyZ2luQWZ0
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdo
dFJlc3VsdCwgbWFyZ2luQmVmb3JlQWxpYXMsIG1hcmdpbkFmdGVyQWxpYXMsIGxvZ2ljYWxUb3BQ
b3MpOwogICAgIHNldExvZ2ljYWxUb3AobG9naWNhbFRvcFBvcyk7CkBAIC0yODc2LDEzICsyODg3
LDEzIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKQog
ICAgIC8vIHNlZSBGSVhNRSAyCiAKICAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlv
biB2YWx1ZXMgZm9yICdtYXgtaGVpZ2h0JyBjYXNlLgotICAgIGlmICghc3R5bGUoKS0+bG9naWNh
bE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkpIHsKKyAgICBpZiAoIXN0eWxlVG9Vc2UtPmxvZ2lj
YWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIExheW91dFVuaXQgbWF4TG9n
aWNhbEhlaWdodDsKICAgICAgICAgTGF5b3V0VW5pdCBtYXhNYXJnaW5CZWZvcmU7CiAgICAgICAg
IExheW91dFVuaXQgbWF4TWFyZ2luQWZ0ZXI7CiAgICAgICAgIExheW91dFVuaXQgbWF4TG9naWNh
bFRvcFBvczsKIAotICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2luZyhz
dHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJMb2dp
Y2FsSGVpZ2h0LCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVk
TG9naWNhbEhlaWdodFVzaW5nKHN0eWxlVG9Vc2UtPmxvZ2ljYWxNYXhIZWlnaHQoKSwgY29udGFp
bmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFRvcExlbmd0
aCwgbG9naWNhbEJvdHRvbUxlbmd0aCwgbWFyZ2luQmVmb3JlLCBtYXJnaW5BZnRlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TG9naWNhbEhlaWdodCwg
bWF4TWFyZ2luQmVmb3JlLCBtYXhNYXJnaW5BZnRlciwgbWF4TG9naWNhbFRvcFBvcyk7CiAKQEAg
LTI4OTUsMTMgKzI5MDYsMTMgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9n
aWNhbEhlaWdodCgpCiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRp
b24gdmFsdWVzIGZvciAnbWluLWhlaWdodCcgY2FzZS4KLSAgICBpZiAoIXN0eWxlKCktPmxvZ2lj
YWxNaW5IZWlnaHQoKS5pc1plcm8oKSkgeworICAgIGlmICghc3R5bGVUb1VzZS0+bG9naWNhbE1p
bkhlaWdodCgpLmlzWmVybygpKSB7CiAgICAgICAgIExheW91dFVuaXQgbWluTG9naWNhbEhlaWdo
dDsKICAgICAgICAgTGF5b3V0VW5pdCBtaW5NYXJnaW5CZWZvcmU7CiAgICAgICAgIExheW91dFVu
aXQgbWluTWFyZ2luQWZ0ZXI7CiAgICAgICAgIExheW91dFVuaXQgbWluTG9naWNhbFRvcFBvczsK
IAotICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5s
b2dpY2FsTWluSGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJMb2dpY2FsSGVpZ2h0
LCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhl
aWdodFVzaW5nKHN0eWxlVG9Vc2UtPmxvZ2ljYWxNaW5IZWlnaHQoKSwgY29udGFpbmVyQmxvY2ss
IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFRvcExlbmd0aCwgbG9naWNh
bEJvdHRvbUxlbmd0aCwgbWFyZ2luQmVmb3JlLCBtYXJnaW5BZnRlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluTG9naWNhbEhlaWdodCwgbWluTWFyZ2lu
QmVmb3JlLCBtaW5NYXJnaW5BZnRlciwgbWluTG9naWNhbFRvcFBvcyk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGQ4YmM3
YjEuLjEzZDJhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcApAQCAtMzExLDE1ICszMTEsMTYgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHkKIAogICAgIC8vIElmIG91ciB6LWluZGV4IGNoYW5nZXMgdmFsdWUgb3Igb3VyIHZpc2li
aWxpdHkgY2hhbmdlcywKICAgICAvLyB3ZSBuZWVkIHRvIGRpcnR5IG91ciBzdGFja2luZyBjb250
ZXh0J3Mgei1vcmRlciBsaXN0LgotICAgIGlmIChzdHlsZSgpICYmIG5ld1N0eWxlKSB7CisgICAg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gc3R5bGUoKTsKKyAgICBpZiAob2xkU3R5bGUgJiYgbmV3
U3R5bGUpIHsKICAgICAgICAgaWYgKHBhcmVudCgpKSB7CiAgICAgICAgICAgICAvLyBEbyBhIHJl
cGFpbnQgd2l0aCB0aGUgb2xkIHN0eWxlIGZpcnN0LCBlLmcuLCBmb3IgZXhhbXBsZSBpZiB3ZSBn
byBmcm9tCiAgICAgICAgICAgICAvLyBoYXZpbmcgYW4gb3V0bGluZSB0byBub3QgaGF2aW5nIGFu
IG91dGxpbmUuCiAgICAgICAgICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VSZXBhaW50
TGF5ZXIpIHsKICAgICAgICAgICAgICAgICBsYXllcigpLT5yZXBhaW50SW5jbHVkaW5nRGVzY2Vu
ZGFudHMoKTsKLSAgICAgICAgICAgICAgICBpZiAoIShzdHlsZSgpLT5jbGlwKCkgPT0gbmV3U3R5
bGUtPmNsaXAoKSkpCisgICAgICAgICAgICAgICAgaWYgKCEob2xkU3R5bGUtPmNsaXAoKSA9PSBu
ZXdTdHlsZS0+Y2xpcCgpKSkKICAgICAgICAgICAgICAgICAgICAgbGF5ZXIoKS0+Y2xlYXJDbGlw
UmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cygpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkaWZm
ID09IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQgfHwgbmV3U3R5bGUtPm91dGxpbmVTaXplKCkgPCBz
dHlsZSgpLT5vdXRsaW5lU2l6ZSgpKQorICAgICAgICAgICAgfSBlbHNlIGlmIChkaWZmID09IFN0
eWxlRGlmZmVyZW5jZVJlcGFpbnQgfHwgbmV3U3R5bGUtPm91dGxpbmVTaXplKCkgPCBvbGRTdHls
ZS0+b3V0bGluZVNpemUoKSkKICAgICAgICAgICAgICAgICByZXBhaW50KCk7CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC0zMjcsMTMgKzMyOCwxMyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eQog
ICAgICAgICAgICAgLy8gV2hlbiBhIGxheW91dCBoaW50IGhhcHBlbnMsIHdlIGdvIGFoZWFkIGFu
ZCBkbyBhIHJlcGFpbnQgb2YgdGhlIGxheWVyLCBzaW5jZSB0aGUgbGF5ZXIgY291bGQKICAgICAg
ICAgICAgIC8vIGVuZCB1cCBiZWluZyBkZXN0cm95ZWQuCiAgICAgICAgICAgICBpZiAoaGFzTGF5
ZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpICE9IG5ld1N0
eWxlLT5wb3NpdGlvbigpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlKCktPnpJbmRleCgp
ICE9IG5ld1N0eWxlLT56SW5kZXgoKSB8fAotICAgICAgICAgICAgICAgICAgICBzdHlsZSgpLT5o
YXNBdXRvWkluZGV4KCkgIT0gbmV3U3R5bGUtPmhhc0F1dG9aSW5kZXgoKSB8fAotICAgICAgICAg
ICAgICAgICAgICAhKHN0eWxlKCktPmNsaXAoKSA9PSBuZXdTdHlsZS0+Y2xpcCgpKSB8fAotICAg
ICAgICAgICAgICAgICAgICBzdHlsZSgpLT5oYXNDbGlwKCkgIT0gbmV3U3R5bGUtPmhhc0NsaXAo
KSB8fAotICAgICAgICAgICAgICAgICAgICBzdHlsZSgpLT5vcGFjaXR5KCkgIT0gbmV3U3R5bGUt
Pm9wYWNpdHkoKSB8fAotICAgICAgICAgICAgICAgICAgICBzdHlsZSgpLT50cmFuc2Zvcm0oKSAh
PSBuZXdTdHlsZS0+dHJhbnNmb3JtKCkpCisgICAgICAgICAgICAgICAgaWYgKG9sZFN0eWxlLT5w
b3NpdGlvbigpICE9IG5ld1N0eWxlLT5wb3NpdGlvbigpIHx8CisgICAgICAgICAgICAgICAgICAg
IG9sZFN0eWxlLT56SW5kZXgoKSAhPSBuZXdTdHlsZS0+ekluZGV4KCkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgb2xkU3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAhPSBuZXdTdHlsZS0+aGFzQXV0b1pJ
bmRleCgpIHx8CisgICAgICAgICAgICAgICAgICAgICEob2xkU3R5bGUtPmNsaXAoKSA9PSBuZXdT
dHlsZS0+Y2xpcCgpKSB8fAorICAgICAgICAgICAgICAgICAgICBvbGRTdHlsZS0+aGFzQ2xpcCgp
ICE9IG5ld1N0eWxlLT5oYXNDbGlwKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgb2xkU3R5bGUt
Pm9wYWNpdHkoKSAhPSBuZXdTdHlsZS0+b3BhY2l0eSgpIHx8CisgICAgICAgICAgICAgICAgICAg
IG9sZFN0eWxlLT50cmFuc2Zvcm0oKSAhPSBuZXdTdHlsZS0+dHJhbnNmb3JtKCkpCiAgICAgICAg
ICAgICAgICAgbGF5ZXIoKS0+cmVwYWludEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG5ld1N0eWxlLT5oYXNUcmFuc2Zvcm0oKSB8fCBuZXdTdHlsZS0+b3Bh
Y2l0eSgpIDwgMSkgewogICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBsYXll
ciB5ZXQsIGJ1dCB3ZSBhcmUgZ29pbmcgdG8gZ2V0IG9uZSBiZWNhdXNlIG9mIHRyYW5zZm9ybSBv
ciBvcGFjaXR5LApAQCAtMzQyLDExICszNDMsMTEgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHkK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChoYXNMYXllcigpICYmIChz
dHlsZSgpLT5oYXNBdXRvWkluZGV4KCkgIT0gbmV3U3R5bGUtPmhhc0F1dG9aSW5kZXgoKSB8fAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoKS0+ekluZGV4KCkgIT0gbmV3U3R5bGUt
PnpJbmRleCgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSgpLT52aXNpYmls
aXR5KCkgIT0gbmV3U3R5bGUtPnZpc2liaWxpdHkoKSkpIHsKKyAgICAgICAgaWYgKGhhc0xheWVy
KCkgJiYgKG9sZFN0eWxlLT5oYXNBdXRvWkluZGV4KCkgIT0gbmV3U3R5bGUtPmhhc0F1dG9aSW5k
ZXgoKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkU3R5bGUtPnpJbmRleCgpICE9
IG5ld1N0eWxlLT56SW5kZXgoKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkU3R5
bGUtPnZpc2liaWxpdHkoKSAhPSBuZXdTdHlsZS0+dmlzaWJpbGl0eSgpKSkgewogICAgICAgICAg
ICAgbGF5ZXIoKS0+ZGlydHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cygpOwotICAgICAgICAg
ICAgaWYgKHN0eWxlKCktPmhhc0F1dG9aSW5kZXgoKSAhPSBuZXdTdHlsZS0+aGFzQXV0b1pJbmRl
eCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBuZXdTdHlsZS0+dmlzaWJpbGl0eSgpKQor
ICAgICAgICAgICAgaWYgKG9sZFN0eWxlLT5oYXNBdXRvWkluZGV4KCkgIT0gbmV3U3R5bGUtPmhh
c0F1dG9aSW5kZXgoKSB8fCBvbGRTdHlsZS0+dmlzaWJpbGl0eSgpICE9IG5ld1N0eWxlLT52aXNp
YmlsaXR5KCkpCiAgICAgICAgICAgICAgICAgbGF5ZXIoKS0+ZGlydHlaT3JkZXJMaXN0cygpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMzkyLDEwICszOTMsMTEgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6dXBkYXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKCkKIHsKICAgICAvLyBTZXQgdGhl
IGFwcHJvcHJpYXRlIGJpdHMgZm9yIGEgYm94IG1vZGVsIG9iamVjdC4gIFNpbmNlIGFsbCBiaXRz
IGFyZSBjbGVhcmVkIGluIHN0eWxlV2lsbENoYW5nZSwKICAgICAvLyB3ZSBvbmx5IGNoZWNrIGZv
ciBiaXRzIHRoYXQgY291bGQgcG9zc2libHkgYmUgc2V0IHRvIHRydWUuCi0gICAgc2V0SGFzQm94
RGVjb3JhdGlvbnMoaGFzQmFja2dyb3VuZCgpIHx8IHN0eWxlKCktPmhhc0JvcmRlcigpIHx8IHN0
eWxlKCktPmhhc0FwcGVhcmFuY2UoKSB8fCBzdHlsZSgpLT5ib3hTaGFkb3coKSk7Ci0gICAgc2V0
SW5saW5lKHN0eWxlKCktPmlzRGlzcGxheUlubGluZVR5cGUoKSk7Ci0gICAgc2V0UmVsUG9zaXRp
b25lZChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24pOwotICAgIHNldEhv
cml6b250YWxXcml0aW5nTW9kZShzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsK
KyAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7CisgICAgc2V0SGFzQm94RGVj
b3JhdGlvbnMoaGFzQmFja2dyb3VuZCgpIHx8IHN0eWxlVG9Vc2UtPmhhc0JvcmRlcigpIHx8IHN0
eWxlVG9Vc2UtPmhhc0FwcGVhcmFuY2UoKSB8fCBzdHlsZVRvVXNlLT5ib3hTaGFkb3coKSk7Cisg
ICAgc2V0SW5saW5lKHN0eWxlVG9Vc2UtPmlzRGlzcGxheUlubGluZVR5cGUoKSk7CisgICAgc2V0
UmVsUG9zaXRpb25lZChzdHlsZVRvVXNlLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24p
OworICAgIHNldEhvcml6b250YWxXcml0aW5nTW9kZShzdHlsZVRvVXNlLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cmVs
YXRpdmVQb3NpdGlvbk9mZnNldFgoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAppbmRleCAxZmM4MTdiLi45NmIzOTI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtMTM3LDE3ICsxMzcsMTggQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3QKICAgICAvLyBlLmcuLCA8Zm9udD5mb28gPGg0PmdvbzwvaDQ+IG1vbzwv
Zm9udD4uICBUaGUgPGZvbnQ+IGlubGluZXMgYmVmb3JlCiAgICAgLy8gYW5kIGFmdGVyIHRoZSBi
bG9jayBzaGFyZSB0aGUgc2FtZSBzdHlsZSwgYnV0IHRoZSBibG9jayBkb2Vzbid0CiAgICAgLy8g
bmVlZCB0byBwYXNzIGl0cyBzdHlsZSBvbiB0byBhbnlvbmUgZWxzZS4KKyAgICBSZW5kZXJTdHls
ZSogbmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIGZvciAoUmVuZGVySW5saW5lKiBjdXJyQ29udCA9
IGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKTsgY3VyckNvbnQ7IGN1cnJDb250ID0gY3VyckNv
bnQtPmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkgewogICAgICAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogbmV4dENvbnQgPSBjdXJyQ29udC0+Y29udGludWF0aW9uKCk7CiAgICAgICAgIGN1
cnJDb250LT5zZXRDb250aW51YXRpb24oMCk7Ci0gICAgICAgIGN1cnJDb250LT5zZXRTdHlsZShz
dHlsZSgpKTsKKyAgICAgICAgY3VyckNvbnQtPnNldFN0eWxlKG5ld1N0eWxlKTsKICAgICAgICAg
Y3VyckNvbnQtPnNldENvbnRpbnVhdGlvbihuZXh0Q29udCk7CiAgICAgfQogCiAgICAgbV9saW5l
SGVpZ2h0ID0gLTE7CiAKICAgICBpZiAoIW1fYWx3YXlzQ3JlYXRlTGluZUJveGVzKSB7Ci0gICAg
ICAgIGJvb2wgYWx3YXlzQ3JlYXRlTGluZUJveGVzID0gaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSB8
fCBoYXNCb3hEZWNvcmF0aW9ucygpIHx8IHN0eWxlKCktPmhhc1BhZGRpbmcoKSB8fCBzdHlsZSgp
LT5oYXNNYXJnaW4oKSB8fCBoYXNPdXRsaW5lKCk7CisgICAgICAgIGJvb2wgYWx3YXlzQ3JlYXRl
TGluZUJveGVzID0gaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBoYXNCb3hEZWNvcmF0aW9ucygp
IHx8IG5ld1N0eWxlLT5oYXNQYWRkaW5nKCkgfHwgbmV3U3R5bGUtPmhhc01hcmdpbigpIHx8IGhh
c091dGxpbmUoKTsKICAgICAgICAgaWYgKG9sZFN0eWxlICYmIGFsd2F5c0NyZWF0ZUxpbmVCb3hl
cykgewogICAgICAgICAgICAgZGlydHlMaW5lQm94ZXMoZmFsc2UpOwogICAgICAgICAgICAgc2V0
TmVlZHNMYXlvdXQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAK
aW5kZXggMGUxMjEwNi4uZjZjMDM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcApAQCAtMTg5LDE4ICsxODksMTkgQEAgdm9pZCBSZW5kZXJUZXh0OjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWwKICAg
ICAgICAgbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dBbmROb0ZhbGxiYWNrRm9udHMgPSBmYWxzZTsK
ICAgICB9CiAKKyAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIGJvb2wg
bmVlZHNSZXNldFRleHQgPSBmYWxzZTsKICAgICBpZiAoIW9sZFN0eWxlKSB7CiAgICAgICAgIHVw
ZGF0ZU5lZWRzVHJhbnNjb2RpbmcoKTsKICAgICAgICAgbmVlZHNSZXNldFRleHQgPSBtX25lZWRz
VHJhbnNjb2Rpbmc7Ci0gICAgfSBlbHNlIGlmIChvbGRTdHlsZS0+Zm9udCgpLm5lZWRzVHJhbnNj
b2RpbmcoKSAhPSBzdHlsZSgpLT5mb250KCkubmVlZHNUcmFuc2NvZGluZygpIHx8IChzdHlsZSgp
LT5mb250KCkubmVlZHNUcmFuc2NvZGluZygpICYmIG9sZFN0eWxlLT5mb250KCkuZmFtaWx5KCku
ZmFtaWx5KCkgIT0gc3R5bGUoKS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpKSkgeworICAgIH0g
ZWxzZSBpZiAob2xkU3R5bGUtPmZvbnQoKS5uZWVkc1RyYW5zY29kaW5nKCkgIT0gbmV3U3R5bGUt
PmZvbnQoKS5uZWVkc1RyYW5zY29kaW5nKCkgfHwgKG5ld1N0eWxlLT5mb250KCkubmVlZHNUcmFu
c2NvZGluZygpICYmIG9sZFN0eWxlLT5mb250KCkuZmFtaWx5KCkuZmFtaWx5KCkgIT0gbmV3U3R5
bGUtPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKSkpIHsKICAgICAgICAgdXBkYXRlTmVlZHNUcmFu
c2NvZGluZygpOwogICAgICAgICBuZWVkc1Jlc2V0VGV4dCA9IHRydWU7CiAgICAgfQogCiAgICAg
RVRleHRUcmFuc2Zvcm0gb2xkVHJhbnNmb3JtID0gb2xkU3R5bGUgPyBvbGRTdHlsZS0+dGV4dFRy
YW5zZm9ybSgpIDogVFROT05FOwogICAgIEVUZXh0U2VjdXJpdHkgb2xkU2VjdXJpdHkgPSBvbGRT
dHlsZSA/IG9sZFN0eWxlLT50ZXh0U2VjdXJpdHkoKSA6IFRTTk9ORTsKLSAgICBpZiAobmVlZHNS
ZXNldFRleHQgfHwgb2xkVHJhbnNmb3JtICE9IHN0eWxlKCktPnRleHRUcmFuc2Zvcm0oKSB8fCBv
bGRTZWN1cml0eSAhPSBzdHlsZSgpLT50ZXh0U2VjdXJpdHkoKSkgeworICAgIGlmIChuZWVkc1Jl
c2V0VGV4dCB8fCBvbGRUcmFuc2Zvcm0gIT0gbmV3U3R5bGUtPnRleHRUcmFuc2Zvcm0oKSB8fCBv
bGRTZWN1cml0eSAhPSBuZXdTdHlsZS0+dGV4dFNlY3VyaXR5KCkpIHsKICAgICAgICAgaWYgKFJl
ZlB0cjxTdHJpbmdJbXBsPiB0ZXh0VG9UcmFuc2Zvcm0gPSBvcmlnaW5hbFRleHQoKSkKICAgICAg
ICAgICAgIHNldFRleHQodGV4dFRvVHJhbnNmb3JtLnJlbGVhc2UoKSwgdHJ1ZSk7CiAgICAgfQpA
QCAtOTA1LDExICs5MDYsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2kKICAgICBtX2hhc0Jl
Z2luV1MgPSBmYWxzZTsKICAgICBtX2hhc0VuZFdTID0gZmFsc2U7CiAKLSAgICBjb25zdCBGb250
JiBmID0gc3R5bGUoKS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUu
Ci0gICAgZmxvYXQgd29yZFNwYWNpbmcgPSBzdHlsZSgpLT53b3JkU3BhY2luZygpOworICAgIFJl
bmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKKyAgICBjb25zdCBGb250JiBmID0gc3R5
bGVUb1VzZS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAg
ZmxvYXQgd29yZFNwYWNpbmcgPSBzdHlsZVRvVXNlLT53b3JkU3BhY2luZygpOwogICAgIGludCBs
ZW4gPSB0ZXh0TGVuZ3RoKCk7CiAgICAgY29uc3QgVUNoYXIqIHR4dCA9IGNoYXJhY3RlcnMoKTsK
LSAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgYnJlYWtJdGVyYXRvcih0eHQsIGxlbiwgc3R5bGUo
KS0+bG9jYWxlKCkpOworICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBicmVha0l0ZXJhdG9yKHR4
dCwgbGVuLCBzdHlsZVRvVXNlLT5sb2NhbGUoKSk7CiAgICAgYm9vbCBuZWVkc1dvcmRTcGFjaW5n
ID0gZmFsc2U7CiAgICAgYm9vbCBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwogICAgIGJvb2wgaXNT
cGFjZSA9IGZhbHNlOwpAQCAtOTIwLDEyICs5MjIsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21w
dXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3Qg
U2kKIAogICAgIC8vIE5vbi16ZXJvIG9ubHkgd2hlbiBrZXJuaW5nIGlzIGVuYWJsZWQsIGluIHdo
aWNoIGNhc2Ugd2UgbWVhc3VyZSB3b3JkcyB3aXRoIHRoZWlyIHRyYWlsaW5nCiAgICAgLy8gc3Bh
Y2UsIHRoZW4gc3VidHJhY3QgaXRzIHdpZHRoLgotICAgIGZsb2F0IHdvcmRUcmFpbGluZ1NwYWNl
V2lkdGggPSBmLnR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmIEtlcm5pbmcgPyBmLndpZHRoKFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGYsICZzcGFjZSwgMSwgc3R5bGUoKSkpIDog
MDsKKyAgICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gZi50eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgJiBLZXJuaW5nID8gZi53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0
aGlzLCBmLCAmc3BhY2UsIDEsIHN0eWxlVG9Vc2UpKSA6IDA7CiAKICAgICBpbnQgZmlyc3RHbHlw
aExlZnRPdmVyZmxvdyA9IC0xOwogCi0gICAgYm9vbCBicmVha05CU1AgPSBzdHlsZSgpLT5hdXRv
V3JhcCgpICYmIHN0eWxlKCktPm5ic3BNb2RlKCkgPT0gU1BBQ0U7Ci0gICAgYm9vbCBicmVha0Fs
bCA9IChzdHlsZSgpLT53b3JkQnJlYWsoKSA9PSBCcmVha0FsbFdvcmRCcmVhayB8fCBzdHlsZSgp
LT53b3JkQnJlYWsoKSA9PSBCcmVha1dvcmRCcmVhaykgJiYgc3R5bGUoKS0+YXV0b1dyYXAoKTsK
KyAgICBib29sIGJyZWFrTkJTUCA9IHN0eWxlVG9Vc2UtPmF1dG9XcmFwKCkgJiYgc3R5bGVUb1Vz
ZS0+bmJzcE1vZGUoKSA9PSBTUEFDRTsKKyAgICBib29sIGJyZWFrQWxsID0gKHN0eWxlVG9Vc2Ut
PndvcmRCcmVhaygpID09IEJyZWFrQWxsV29yZEJyZWFrIHx8IHN0eWxlVG9Vc2UtPndvcmRCcmVh
aygpID09IEJyZWFrV29yZEJyZWFrKSAmJiBzdHlsZVRvVXNlLT5hdXRvV3JhcCgpOwogCiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICBVQ2hhciBjID0gdHh0W2ld
OwpAQCAtOTM0LDE0ICs5MzYsMTQgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2kKIAogICAgICAg
ICBib29sIGlzTmV3bGluZSA9IGZhbHNlOwogICAgICAgICBpZiAoYyA9PSAnXG4nKSB7Ci0gICAg
ICAgICAgICBpZiAoc3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKKyAgICAgICAgICAgIGlm
IChzdHlsZVRvVXNlLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgewogICAgICAgICAgICAgICAgIG1faGFz
QnJlYWsgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlzTmV3bGluZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgaXNTcGFjZSA9IGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgaXNTcGFjZSA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXHQnKSB7Ci0g
ICAgICAgICAgICBpZiAoIXN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7CisgICAgICAg
ICAgICBpZiAoIXN0eWxlVG9Vc2UtPmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7CiAgICAgICAgICAg
ICAgICAgbV9oYXNUYWIgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlzU3BhY2UgPSBmYWxzZTsK
ICAgICAgICAgICAgIH0gZWxzZQpAQCAtOTU0LDcgKzk1Niw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNv
bnN0IFNpCiAgICAgICAgIGlmICgoaXNTcGFjZSB8fCBpc05ld2xpbmUpICYmIGkgPT0gbGVuIC0g
MSkKICAgICAgICAgICAgIG1faGFzRW5kV1MgPSB0cnVlOwogCi0gICAgICAgIGlmICghaWdub3Jp
bmdTcGFjZXMgJiYgc3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgcHJldmlvdXNDaGFy
YWN0ZXJJc1NwYWNlICYmIGlzU3BhY2UpCisgICAgICAgIGlmICghaWdub3JpbmdTcGFjZXMgJiYg
c3R5bGVUb1VzZS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgcHJldmlvdXNDaGFyYWN0ZXJJc1Nw
YWNlICYmIGlzU3BhY2UpCiAgICAgICAgICAgICBpZ25vcmluZ1NwYWNlcyA9IHRydWU7CiAKICAg
ICAgICAgaWYgKGlnbm9yaW5nU3BhY2VzICYmICFpc1NwYWNlKQpAQCAtOTc2LDcgKzk3OCw3IEBA
IHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVh
ZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpCiAgICAgICAgIGJvb2wgaGFzQnJlYWsgPSBicmVha0Fs
bCB8fCBpc0JyZWFrYWJsZShicmVha0l0ZXJhdG9yLCBpLCBuZXh0QnJlYWthYmxlLCBicmVha05C
U1ApOwogICAgICAgICBib29sIGJldHdlZW5Xb3JkcyA9IHRydWU7CiAgICAgICAgIGludCBqID0g
aTsKLSAgICAgICAgd2hpbGUgKGMgIT0gJ1xuJyAmJiAhaXNTcGFjZUFjY29yZGluZ1RvU3R5bGUo
Yywgc3R5bGUoKSkgJiYgYyAhPSAnXHQnICYmIGMgIT0gc29mdEh5cGhlbikgeworICAgICAgICB3
aGlsZSAoYyAhPSAnXG4nICYmICFpc1NwYWNlQWNjb3JkaW5nVG9TdHlsZShjLCBzdHlsZVRvVXNl
KSAmJiBjICE9ICdcdCcgJiYgYyAhPSBzb2Z0SHlwaGVuKSB7CiAgICAgICAgICAgICBqKys7CiAg
ICAgICAgICAgICBpZiAoaiA9PSBsZW4pCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05OTEs
NyArOTkzLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2kKIAogICAgICAgICBpbnQgd29yZExl
biA9IGogLSBpOwogICAgICAgICBpZiAod29yZExlbikgewotICAgICAgICAgICAgYm9vbCBpc1Nw
YWNlID0gKGogPCBsZW4pICYmIGlzU3BhY2VBY2NvcmRpbmdUb1N0eWxlKGMsIHN0eWxlKCkpOwor
ICAgICAgICAgICAgYm9vbCBpc1NwYWNlID0gKGogPCBsZW4pICYmIGlzU3BhY2VBY2NvcmRpbmdU
b1N0eWxlKGMsIHN0eWxlVG9Vc2UpOwogICAgICAgICAgICAgZmxvYXQgdzsKICAgICAgICAgICAg
IGlmICh3b3JkVHJhaWxpbmdTcGFjZVdpZHRoICYmIGlzU3BhY2UpCiAgICAgICAgICAgICAgICAg
dyA9IHdpZHRoRnJvbUNhY2hlKGYsIGksIHdvcmRMZW4gKyAxLCBsZWFkV2lkdGggKyBjdXJyTWF4
V2lkdGgsICZmYWxsYmFja0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdykgLSB3b3JkVHJhaWxpbmdTcGFj
ZVdpZHRoOwpAQCAtMTAwOSw4ICsxMDExLDggQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2kKICAg
ICAgICAgICAgICAgICBsYXN0V29yZEJvdW5kYXJ5ID0gajsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgYm9vbCBpc0NvbGxhcHNpYmxlV2hpdGVTcGFjZSA9IChqIDwgbGVuKSAmJiBzdHls
ZSgpLT5pc0NvbGxhcHNpYmxlV2hpdGVTcGFjZShjKTsKLSAgICAgICAgICAgIGlmIChqIDwgbGVu
ICYmIHN0eWxlKCktPmF1dG9XcmFwKCkpCisgICAgICAgICAgICBib29sIGlzQ29sbGFwc2libGVX
aGl0ZVNwYWNlID0gKGogPCBsZW4pICYmIHN0eWxlVG9Vc2UtPmlzQ29sbGFwc2libGVXaGl0ZVNw
YWNlKGMpOworICAgICAgICAgICAgaWYgKGogPCBsZW4gJiYgc3R5bGVUb1VzZS0+YXV0b1dyYXAo
KSkKICAgICAgICAgICAgICAgICBtX2hhc0JyZWFrYWJsZUNoYXIgPSB0cnVlOwogCiAgICAgICAg
ICAgICAvLyBBZGQgaW4gd29yZFNwYWNpbmcgdG8gb3VyIGN1cnJNYXhXaWR0aCwgYnV0IG5vdCBp
ZiB0aGlzIGlzIHRoZSBsYXN0IHdvcmQgb24gYSBsaW5lIG9yIHRoZQpAQCAtMTA0OCw3ICsxMDUw
LDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9h
dCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2kKICAgICAgICAgICAgICAgICBpZiAoZmlyc3RM
aW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0TGluZSA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgICAgICBsZWFkV2lkdGggPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0eWxl
KCktPmF1dG9XcmFwKCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVUb1VzZS0+YXV0
b1dyYXAoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYmVnaW5NaW5XaWR0aCA9IGN1cnJN
YXhXaWR0aDsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTEwNTYsNyArMTA1OCw3IEBAIHZvaWQg
UmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRo
LCBIYXNoU2V0PGNvbnN0IFNpCiAgICAgICAgICAgICAgICAgICAgIG1fbWF4V2lkdGggPSBjdXJy
TWF4V2lkdGg7CiAgICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoID0gMDsKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bih0aGlzLCBmLCB0eHQgKyBpLCAxLCBzdHlsZSgpKTsKKyAgICAgICAgICAg
ICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGYs
IHR4dCArIGksIDEsIHN0eWxlVG9Vc2UpOwogICAgICAgICAgICAgICAgIHJ1bi5zZXRDaGFyYWN0
ZXJzTGVuZ3RoKGxlbiAtIGkpOwogICAgICAgICAgICAgICAgIEFTU0VSVChydW4uY2hhcmFjdGVy
c0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7CiAKQEAgLTEwODEsMTAgKzEwODMsMTAgQEAgdm9p
ZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lk
dGgsIEhhc2hTZXQ8Y29uc3QgU2kKICAgICBtX21pbldpZHRoID0gbWF4KGN1cnJNaW5XaWR0aCwg
bV9taW5XaWR0aCk7CiAgICAgbV9tYXhXaWR0aCA9IG1heChjdXJyTWF4V2lkdGgsIG1fbWF4V2lk
dGgpOwogCi0gICAgaWYgKCFzdHlsZSgpLT5hdXRvV3JhcCgpKQorICAgIGlmICghc3R5bGVUb1Vz
ZS0+YXV0b1dyYXAoKSkKICAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGg7CiAKLSAgICBp
ZiAoc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IFBSRSkgeworICAgIGlmIChzdHlsZVRvVXNlLT53
aGl0ZVNwYWNlKCkgPT0gUFJFKSB7CiAgICAgICAgIGlmIChmaXJzdExpbmUpCiAgICAgICAgICAg
ICBtX2JlZ2luTWluV2lkdGggPSBtX21heFdpZHRoOwogICAgICAgICBtX2VuZE1pbldpZHRoID0g
Y3Vyck1heFdpZHRoOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123082</attachid>
            <date>2012-01-18 23:48:30 -0800</date>
            <delta_ts>2012-01-19 01:23:16 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-76265-20120119094827.patch</filename>
            <type>text/plain</type>
            <size>75488</size>
            <attacher name="Mihnea Ovidenie">mihnea</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzEwMjkxYTM5YjMxMzQz
YzAwMGVkMDA4MjhkZmRiZDRkODQzMzNiNC4uNGIwMmM2NTU5ZTE4YmFkMjk0Nzc1M2VjOTI5NDk1
ZDYwYTFhMjYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTAxLTE4ICBNaWhu
ZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgorCisgICAgICAgIENhY2hlIFJlbmRlclN0
eWxlIHBvaW50ZXIgYXMgYSBtZXRob2QgdG8gYXZvaWQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBm
b3IgcmVnaW9uIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc2MjY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIHRoaXMgaXMganVzdCByZWZhY3RvcmluZy4KKyAgICAg
ICAgV2hlbiByZWdpb24gc3R5bGluZyB3YXMgZW5hYmxlZCBpbiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0ODgsCisgICAgICAgIGl0IGludHJvZHVjZWQgYSBwZXJm
b3JtYW5jZSByZWdyZXNzaW9uIGR1ZSB0byB0aGUgY2hhbmdlIG9mIFJlbmRlck9iamVjdDo6c3R5
bGUoKSBtZXRob2QuCisgICAgICAgIFRoaXMgcGF0Y2ggdHJpZXMgdG8gYXZvaWQgYSBuZXcgcGVy
Zm9ybWFuY2UgcmVncmVzc2lvbiB3aGVuIHJlZ2lvbiBzdHlsaW5nIHdpbGwgYmUgZW5hYmxlZCBh
Z2Fpbi4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6TWFyZ2luSW5mbzo6TWFyZ2luSW5mbyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6c3R5bGVXaWxsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2tDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2tDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Qm9yZGVyUGFk
ZGluZ01hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGlu
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNvbXB1dGVCbG9ja1ByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OndpbGxCZURlc3Ry
b3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnN0eWxlV2lsbENoYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6dXBkYXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojp1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3R5
bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6c3R5bGVEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMpOgorCiAyMDEyLTAxLTE4ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBzZXRBdHRyaWJ1dGVOUyBzaG91bGQgY29tcGx5IHdpdGggdGhlIG9ic2N1
cmUgcnVsZXMgb2YgRE9NMiwganVzdCBsaWtlIGNyZWF0ZUF0dHJpYnV0ZU5TIGFuZCBjcmVhdGVF
bGVtZW50TlMgZG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4
IDNjYzFlMmNmMjVmNjdjODVhMzAzZjBlMDdkNjU2YzFmNzA3YWNlN2YuLmQ3MGI5ZjVkMjA2ZWY4
NjExNjFmZmFkYjcxNGFkMTA1OGZmYzQ3ODAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcApAQCAtOTYsMjIgKzk2LDIzIEBAIFJlbmRlckJsb2NrOjpNYXJnaW5JbmZv
OjpNYXJnaW5JbmZvKFJlbmRlckJsb2NrKiBibG9jaywgTGF5b3V0VW5pdCBiZWZvcmVCb3JkZXJQ
CiAgICAgLy8gV2hldGhlciBvciBub3Qgd2UgY2FuIGNvbGxhcHNlIG91ciBvd24gbWFyZ2lucyB3
aXRoIG91ciBjaGlsZHJlbi4gIFdlIGRvbid0IGRvIHRoaXMKICAgICAvLyBpZiB3ZSBoYWQgYW55
IGJvcmRlci9wYWRkaW5nIChvYnZpb3VzbHkpLCBpZiB3ZSdyZSB0aGUgcm9vdCBvciBIVE1MIGVs
ZW1lbnRzLCBvciBpZgogICAgIC8vIHdlJ3JlIHBvc2l0aW9uZWQsIGZsb2F0aW5nLCBhIHRhYmxl
IGNlbGwuCisgICAgUmVuZGVyU3R5bGUqIGJsb2NrU3R5bGUgPSBibG9jay0+c3R5bGUoKTsKICAg
ICBtX2NhbkNvbGxhcHNlV2l0aENoaWxkcmVuID0gIWJsb2NrLT5pc1JlbmRlclZpZXcoKSAmJiAh
YmxvY2stPmlzUm9vdCgpICYmICFibG9jay0+aXNQb3NpdGlvbmVkKCkKICAgICAgICAgJiYgIWJs
b2NrLT5pc0Zsb2F0aW5nKCkgJiYgIWJsb2NrLT5pc1RhYmxlQ2VsbCgpICYmICFibG9jay0+aGFz
T3ZlcmZsb3dDbGlwKCkgJiYgIWJsb2NrLT5pc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpCi0g
ICAgICAgICYmICFibG9jay0+aXNXcml0aW5nTW9kZVJvb3QoKSAmJiBibG9jay0+c3R5bGUoKS0+
aGFzQXV0b0NvbHVtbkNvdW50KCkgJiYgYmxvY2stPnN0eWxlKCktPmhhc0F1dG9Db2x1bW5XaWR0
aCgpCi0gICAgICAgICYmICFibG9jay0+c3R5bGUoKS0+Y29sdW1uU3BhbigpOworICAgICAgICAm
JiAhYmxvY2stPmlzV3JpdGluZ01vZGVSb290KCkgJiYgYmxvY2tTdHlsZS0+aGFzQXV0b0NvbHVt
bkNvdW50KCkgJiYgYmxvY2tTdHlsZS0+aGFzQXV0b0NvbHVtbldpZHRoKCkKKyAgICAgICAgJiYg
IWJsb2NrU3R5bGUtPmNvbHVtblNwYW4oKTsKIAotICAgIG1fY2FuQ29sbGFwc2VNYXJnaW5CZWZv
cmVXaXRoQ2hpbGRyZW4gPSBtX2NhbkNvbGxhcHNlV2l0aENoaWxkcmVuICYmIChiZWZvcmVCb3Jk
ZXJQYWRkaW5nID09IDApICYmIGJsb2NrLT5zdHlsZSgpLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgp
ICE9IE1TRVBBUkFURTsKKyAgICBtX2NhbkNvbGxhcHNlTWFyZ2luQmVmb3JlV2l0aENoaWxkcmVu
ID0gbV9jYW5Db2xsYXBzZVdpdGhDaGlsZHJlbiAmJiAhYmVmb3JlQm9yZGVyUGFkZGluZyAmJiBi
bG9ja1N0eWxlLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpICE9IE1TRVBBUkFURTsKIAogICAgIC8v
IElmIGFueSBoZWlnaHQgb3RoZXIgdGhhbiBhdXRvIGlzIHNwZWNpZmllZCBpbiBDU1MsIHRoZW4g
d2UgZG9uJ3QgY29sbGFwc2Ugb3VyIGJvdHRvbQogICAgIC8vIG1hcmdpbnMgd2l0aCBvdXIgY2hp
bGRyZW4ncyBtYXJnaW5zLiAgVG8gZG8gb3RoZXJ3aXNlIHdvdWxkIGJlIHRvIHJpc2sgb2RkIHZp
c3VhbAogICAgIC8vIGVmZmVjdHMgd2hlbiB0aGUgY2hpbGRyZW4gb3ZlcmZsb3cgb3V0IG9mIHRo
ZSBwYXJlbnQgYmxvY2sgYW5kIHlldCBzdGlsbCBjb2xsYXBzZQogICAgIC8vIHdpdGggaXQuICBX
ZSBhbHNvIGRvbid0IGNvbGxhcHNlIGlmIHdlIGhhdmUgYW55IGJvdHRvbSBib3JkZXIvcGFkZGlu
Zy4KICAgICBtX2NhbkNvbGxhcHNlTWFyZ2luQWZ0ZXJXaXRoQ2hpbGRyZW4gPSBtX2NhbkNvbGxh
cHNlV2l0aENoaWxkcmVuICYmIChhZnRlckJvcmRlclBhZGRpbmcgPT0gMCkgJiYKLSAgICAgICAg
KGJsb2NrLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYgYmxvY2stPnN0eWxl
KCktPmxvZ2ljYWxIZWlnaHQoKS52YWx1ZSgpID09IDApICYmIGJsb2NrLT5zdHlsZSgpLT5tYXJn
aW5BZnRlckNvbGxhcHNlKCkgIT0gTVNFUEFSQVRFOworICAgICAgICAoYmxvY2tTdHlsZS0+bG9n
aWNhbEhlaWdodCgpLmlzQXV0bygpICYmICFibG9ja1N0eWxlLT5sb2dpY2FsSGVpZ2h0KCkudmFs
dWUoKSkgJiYgYmxvY2tTdHlsZS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZSgpICE9IE1TRVBBUkFURTsK
ICAgICAKLSAgICBtX3F1aXJrQ29udGFpbmVyID0gYmxvY2stPmlzVGFibGVDZWxsKCkgfHwgYmxv
Y2stPmlzQm9keSgpIHx8IGJsb2NrLT5zdHlsZSgpLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09
IE1ESVNDQVJEIHx8IAotICAgICAgICBibG9jay0+c3R5bGUoKS0+bWFyZ2luQWZ0ZXJDb2xsYXBz
ZSgpID09IE1ESVNDQVJEOworICAgIG1fcXVpcmtDb250YWluZXIgPSBibG9jay0+aXNUYWJsZUNl
bGwoKSB8fCBibG9jay0+aXNCb2R5KCkgfHwgYmxvY2tTdHlsZS0+bWFyZ2luQmVmb3JlQ29sbGFw
c2UoKSA9PSBNRElTQ0FSRAorICAgICAgICB8fCBibG9ja1N0eWxlLT5tYXJnaW5BZnRlckNvbGxh
cHNlKCkgPT0gTURJU0NBUkQ7CiAKICAgICBtX3Bvc2l0aXZlTWFyZ2luID0gbV9jYW5Db2xsYXBz
ZU1hcmdpbkJlZm9yZVdpdGhDaGlsZHJlbiA/IGJsb2NrLT5tYXhQb3NpdGl2ZU1hcmdpbkJlZm9y
ZSgpIDogMDsKICAgICBtX25lZ2F0aXZlTWFyZ2luID0gbV9jYW5Db2xsYXBzZU1hcmdpbkJlZm9y
ZVdpdGhDaGlsZHJlbiA/IGJsb2NrLT5tYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIDogMDsKQEAg
LTIwOSwxNiArMjEwLDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OndpbGxCZURlc3Ryb3llZCgpCiAK
IHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQogewotICAgIHNfY2FuUHJvcGFnYXRlRmxvYXRJ
bnRvU2libGluZyA9IHN0eWxlKCkgPyAhaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmICFhdm9p
ZHNGbG9hdHMoKSA6IGZhbHNlOworICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IHN0eWxlKCk7
CisgICAgc19jYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nID0gb2xkU3R5bGUgPyAhaXNGbG9h
dGluZ09yUG9zaXRpb25lZCgpICYmICFhdm9pZHNGbG9hdHMoKSA6IGZhbHNlOwogCiAgICAgc2V0
UmVwbGFjZWQobmV3U3R5bGUtPmlzRGlzcGxheUlubGluZVR5cGUoKSk7CiAgICAgCi0gICAgaWYg
KHN0eWxlKCkgJiYgcGFyZW50KCkgJiYgZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYg
c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBuZXdTdHlsZS0+cG9zaXRpb24oKSkgeworICAgIGlmIChv
bGRTdHlsZSAmJiBwYXJlbnQoKSAmJiBkaWZmID09IFN0eWxlRGlmZmVyZW5jZUxheW91dCAmJiBv
bGRTdHlsZS0+cG9zaXRpb24oKSAhPSBuZXdTdHlsZS0+cG9zaXRpb24oKSkgewogICAgICAgICBp
ZiAobmV3U3R5bGUtPnBvc2l0aW9uKCkgPT0gU3RhdGljUG9zaXRpb24pCiAgICAgICAgICAgICAv
LyBDbGVhciBvdXIgcG9zaXRpb25lZCBvYmplY3RzIGxpc3QuIE91ciBhYnNvbHV0ZWx5IHBvc2l0
aW9uZWQgZGVzY2VuZGFudHMgd2lsbCBiZQogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgaW50byBv
dXIgY29udGFpbmluZyBibG9jaydzIHBvc2l0aW9uZWQgb2JqZWN0cyBsaXN0IGR1cmluZyBsYXlv
dXQuCiAgICAgICAgICAgICByZW1vdmVQb3NpdGlvbmVkT2JqZWN0cygwKTsKLSAgICAgICAgZWxz
ZSBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBTdGF0aWNQb3NpdGlvbikgeworICAgICAgICBl
bHNlIGlmIChvbGRTdHlsZS0+cG9zaXRpb24oKSA9PSBTdGF0aWNQb3NpdGlvbikgewogICAgICAg
ICAgICAgLy8gUmVtb3ZlIG91ciBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgZGVzY2VuZGFudHMgZnJv
bSB0aGVpciBjdXJyZW50IGNvbnRhaW5pbmcgYmxvY2suCiAgICAgICAgICAgICAvLyBUaGV5IHdp
bGwgYmUgaW5zZXJ0ZWQgaW50byBvdXIgcG9zaXRpb25lZCBvYmplY3RzIGxpc3QgZHVyaW5nIGxh
eW91dC4KICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2IgPSBwYXJlbnQoKTsKQEAgLTEyNDks
NyArMTI1MSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdoCiAgICAgfQogCiAgICAgUmVuZGVy
VmlldyogcmVuZGVyVmlldyA9IHZpZXcoKTsKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3Rh
dGVQdXNoZXIocmVuZGVyVmlldywgdGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFzQ29sdW1ucygp
IHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZSgpLT5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpLCBwYWdlTG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxIZWln
aHRDaGFuZ2VkLCBjb2xJbmZvKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHN0eWxl
KCk7CisgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHJlbmRlclZpZXcsIHRo
aXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc0NvbHVtbnMoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBo
YXNSZWZsZWN0aW9uKCkgfHwgc3R5bGVUb1VzZS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSwgcGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgY29sSW5mbyk7
CiAgICAgCiAgICAgaWYgKGluUmVuZGVyRmxvd1RocmVhZCgpKSB7CiAgICAgICAgIC8vIFJlZ2lv
bnMgY2hhbmdpbmcgd2lkdGhzIGNhbiBmb3JjZSB1cyB0byByZWxheW91dCBvdXIgY2hpbGRyZW4u
CkBAIC0xMjgxLDggKzEyODQsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaAogICAgIGlmICgh
aXNDZWxsKSB7CiAgICAgICAgIGluaXRNYXhNYXJnaW5WYWx1ZXMoKTsKICAgICAgICAgCi0gICAg
ICAgIHNldE1hcmdpbkJlZm9yZVF1aXJrKHN0eWxlKCktPm1hcmdpbkJlZm9yZSgpLnF1aXJrKCkp
OwotICAgICAgICBzZXRNYXJnaW5BZnRlclF1aXJrKHN0eWxlKCktPm1hcmdpbkFmdGVyKCkucXVp
cmsoKSk7CisgICAgICAgIHNldE1hcmdpbkJlZm9yZVF1aXJrKHN0eWxlVG9Vc2UtPm1hcmdpbkJl
Zm9yZSgpLnF1aXJrKCkpOworICAgICAgICBzZXRNYXJnaW5BZnRlclF1aXJrKHN0eWxlVG9Vc2Ut
Pm1hcmdpbkFmdGVyKCkucXVpcmsoKSk7CiAKICAgICAgICAgTm9kZSogbiA9IG5vZGUoKTsKICAg
ICAgICAgaWYgKG4gJiYgbi0+aGFzVGFnTmFtZShmb3JtVGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnQqPihuKS0+aXNNYWxmb3JtZWQoKSkgewpAQCAtMTI5Niw5ICsxMjk5LDkgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlv
dXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2gKIAogICAgIC8vIEZvciBvdmVyZmxvdzpzY3JvbGwgYmxv
Y2tzLCBlbnN1cmUgd2UgaGF2ZSBib3RoIHNjcm9sbGJhcnMgaW4gcGxhY2UgYWx3YXlzLgogICAg
IGlmIChzY3JvbGxzT3ZlcmZsb3coKSkgewotICAgICAgICBpZiAoc3R5bGUoKS0+b3ZlcmZsb3dY
KCkgPT0gT1NDUk9MTCkKKyAgICAgICAgaWYgKHN0eWxlVG9Vc2UtPm92ZXJmbG93WCgpID09IE9T
Q1JPTEwpCiAgICAgICAgICAgICBsYXllcigpLT5zZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKHRy
dWUpOwotICAgICAgICBpZiAoc3R5bGUoKS0+b3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCkKKyAgICAg
ICAgaWYgKHN0eWxlVG9Vc2UtPm92ZXJmbG93WSgpID09IE9TQ1JPTEwpCiAgICAgICAgICAgICBs
YXllcigpLT5zZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcih0cnVlKTsKICAgICB9CiAKQEAgLTEzNjMs
NyArMTM2Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdoCiAgICAgLy8gRklYTUU6IFRoaXMg
cmVwYWludCBsb2dpYyBzaG91bGQgYmUgbW92ZWQgaW50byBhIHNlcGFyYXRlIGhlbHBlciBmdW5j
dGlvbiEKICAgICAvLyBSZXBhaW50IHdpdGggb3VyIG5ldyBib3VuZHMgaWYgdGhleSBhcmUgZGlm
ZmVyZW50IGZyb20gb3VyIG9sZCBib3VuZHMuCiAgICAgYm9vbCBkaWRGdWxsUmVwYWludCA9IHJl
cGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKLSAgICBpZiAoIWRpZEZ1bGxSZXBhaW50ICYm
IHJlcGFpbnRMb2dpY2FsVG9wICE9IHJlcGFpbnRMb2dpY2FsQm90dG9tICYmIChzdHlsZSgpLT52
aXNpYmlsaXR5KCkgPT0gVklTSUJMRSB8fCBlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29u
dGVudCgpKSkgeworICAgIGlmICghZGlkRnVsbFJlcGFpbnQgJiYgcmVwYWludExvZ2ljYWxUb3Ag
IT0gcmVwYWludExvZ2ljYWxCb3R0b20gJiYgKHN0eWxlVG9Vc2UtPnZpc2liaWxpdHkoKSA9PSBW
SVNJQkxFIHx8IGVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCB0aWdodGVuIHVwIHRoZSBsZWZ0IGFuZCByaWdodCBpbnZh
bGlkYXRpb24gcG9pbnRzIGlmIHdlIGxldCBsYXlvdXRJbmxpbmVDaGlsZHJlbiBmaWxsIHRoZW0g
aW4gYmFzZWQgb2ZmIHRoZSBwYXJ0aWN1bGFyIGxpbmVzCiAgICAgICAgIC8vIGl0IGhhZCB0byBs
YXkgb3V0LiAgV2Ugd291bGRuJ3QgbmVlZCB0aGUgaGFzT3ZlcmZsb3dDbGlwKCkgaGFjayBpbiB0
aGF0IGNhc2UgZWl0aGVyLgogICAgICAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsTGVmdCA9
IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKTsKQEAgLTIwMTgsNyArMjAyMSw4IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBM
YXlvdXRVbml0JiBtYXhGbG9hCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBsYXlvdXQgY2hpbGRy
ZW4gaWYgdGhleSBuZWVkIGl0LgogICAgICAgICAvLyBGSVhNRTogVGVjaG5pY2FsbHkgcGVyY2Vu
dGFnZSBoZWlnaHQgb2JqZWN0cyBvbmx5IG5lZWQgYSByZWxheW91dCBpZiB0aGVpciBwZXJjZW50
YWdlIGlzbid0IGdvaW5nIHRvIGJlIHR1cm5lZCBpbnRvCiAgICAgICAgIC8vIGFuIGF1dG8gdmFs
dWUuICBBZGQgYSBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoaXMsIHNvIHRoYXQgd2UgY2FuIGF2b2lk
IHRoZSByZWxheW91dC4KLSAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gfHwgKChjaGlsZC0+
c3R5bGUoKS0+bG9naWNhbEhlaWdodCgpLmlzUGVyY2VudCgpIHx8IGNoaWxkLT5zdHlsZSgpLT5s
b2dpY2FsTWluSGVpZ2h0KCkuaXNQZXJjZW50KCkgfHwgY2hpbGQtPnN0eWxlKCktPmxvZ2ljYWxN
YXhIZWlnaHQoKS5pc1BlcmNlbnQoKSkgJiYgIWlzUmVuZGVyVmlldygpKSkKKyAgICAgICAgUmVu
ZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjaGlsZC0+c3R5bGUoKTsKKyAgICAgICAgaWYgKHJlbGF5
b3V0Q2hpbGRyZW4gfHwgKChjaGlsZFN0eWxlLT5sb2dpY2FsSGVpZ2h0KCkuaXNQZXJjZW50KCkg
fHwgY2hpbGRTdHlsZS0+bG9naWNhbE1pbkhlaWdodCgpLmlzUGVyY2VudCgpIHx8IGNoaWxkU3R5
bGUtPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1BlcmNlbnQoKSkgJiYgIWlzUmVuZGVyVmlldygpKSkK
ICAgICAgICAgICAgIGNoaWxkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKIAog
ICAgICAgICAvLyBJZiByZWxheW91dENoaWxkcmVuIGlzIHNldCBhbmQgdGhlIGNoaWxkIGhhcyBw
ZXJjZW50YWdlIHBhZGRpbmcgb3IgYW4gZW1iZWRkZWQgY29udGVudCBib3gsIHdlIGFsc28gbmVl
ZCB0byBpbnZhbGlkYXRlIHRoZSBjaGlsZHMgcHJlZiB3aWR0aHMuCkBAIC0yMDQ4LDcgKzIwNTIs
OCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQs
IE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIExheQogICAgIGNoaWxkLT5jb21wdXRlQmxvY2tEaXJl
Y3Rpb25NYXJnaW5zKHRoaXMpOwogCiAgICAgLy8gRG8gbm90IGFsbG93IGEgY29sbGFwc2UgaWYg
dGhlIG1hcmdpbi1iZWZvcmUtY29sbGFwc2Ugc3R5bGUgaXMgc2V0IHRvIFNFUEFSQVRFLgotICAg
IGlmIChjaGlsZC0+c3R5bGUoKS0+bWFyZ2luQmVmb3JlQ29sbGFwc2UoKSA9PSBNU0VQQVJBVEUp
IHsKKyAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNoaWxkLT5zdHlsZSgpOworICAgIGlm
IChjaGlsZFN0eWxlLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpID09IE1TRVBBUkFURSkgewogICAg
ICAgICBtYXJnaW5JbmZvLnNldEF0QmVmb3JlU2lkZU9mQmxvY2soZmFsc2UpOwogICAgICAgICBt
YXJnaW5JbmZvLmNsZWFyTWFyZ2luKCk7CiAgICAgfQpAQCAtMjE0NCw3ICsyMTQ5LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBNYXJnaW5J
bmZvJiBtYXJnaW5JbmZvLCBMYXkKIAogICAgIC8vIFVwZGF0ZSBvdXIgaGVpZ2h0IG5vdyB0aGF0
IHRoZSBjaGlsZCBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24uCiAgICAg
c2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgKyBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQo
Y2hpbGQpKTsKLSAgICBpZiAoY2hpbGQtPnN0eWxlKCktPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSA9
PSBNU0VQQVJBVEUpIHsKKyAgICBpZiAoY2hpbGRTdHlsZS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZSgp
ID09IE1TRVBBUkFURSkgewogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQo
KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGQpKTsKICAgICAgICAgbWFyZ2luSW5mby5jbGVh
ck1hcmdpbigpOwogICAgIH0KQEAgLTQ5NDIsOCArNDk0Nyw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKIAogICAgIHVwZGF0ZUZpcnN0TGV0dGVy
KCk7CiAKLSAgICBpZiAoIWlzVGFibGVDZWxsKCkgJiYgc3R5bGUoKS0+bG9naWNhbFdpZHRoKCku
aXNGaXhlZCgpICYmIHN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpLnZhbHVlKCkgPiAwKQotICAgICAg
ICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
ID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bG9naWNhbFdpZHRoKCku
dmFsdWUoKSk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGlm
ICghaXNUYWJsZUNlbGwoKSAmJiBzdHlsZVRvVXNlLT5sb2dpY2FsV2lkdGgoKS5pc0ZpeGVkKCkg
JiYgc3R5bGVUb1VzZS0+bG9naWNhbFdpZHRoKCkudmFsdWUoKSA+IDApCisgICAgICAgIG1fbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBjb21w
dXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZVRvVXNlLT5sb2dpY2FsV2lkdGgoKS52YWx1
ZSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAw
OwogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CkBAIC00OTU1LDcgKzQ5
NjEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygp
CiAKICAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgobV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKIAotICAgICAgICBp
ZiAoIXN0eWxlKCktPmF1dG9XcmFwKCkgJiYgY2hpbGRyZW5JbmxpbmUoKSkgeworICAgICAgICBp
ZiAoIXN0eWxlVG9Vc2UtPmF1dG9XcmFwKCkgJiYgY2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAg
ICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxX
aWR0aDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gQSBob3Jpem9udGFsIG1hcnF1ZWUg
d2l0aCBpbmxpbmUgY2hpbGRyZW4gaGFzIG5vIG1pbmltdW0gd2lkdGguCkBAIC00OTY0LDcgKzQ5
NzAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygp
CiAgICAgICAgIH0KIAogICAgICAgICBpbnQgc2Nyb2xsYmFyV2lkdGggPSAwOwotICAgICAgICBp
ZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc3R5bGUoKS0+b3ZlcmZsb3dZKCkgPT0gT1NDUk9MTCkg
eworICAgICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc3R5bGVUb1VzZS0+b3ZlcmZsb3dZ
KCkgPT0gT1NDUk9MTCkgewogICAgICAgICAgICAgbGF5ZXIoKS0+c2V0SGFzVmVydGljYWxTY3Jv
bGxiYXIodHJ1ZSk7CiAgICAgICAgICAgICBzY3JvbGxiYXJXaWR0aCA9IHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKTsKICAgICAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IHNj
cm9sbGJhcldpZHRoOwpAQCAtNDk4MSwxNCArNDk4NywxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoICs9IHNjcm9sbGJhcldpZHRoOwogICAgIH0KICAgICAKLSAgICBpZiAoc3R5bGUo
KS0+bG9naWNhbE1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPmxvZ2ljYWxNaW5XaWR0
aCgpLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bWF4KG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxX
aWR0aChzdHlsZSgpLT5sb2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBj
b21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5sb2dpY2FsTWluV2lkdGgoKS52
YWx1ZSgpKSk7CisgICAgaWYgKHN0eWxlVG9Vc2UtPmxvZ2ljYWxNaW5XaWR0aCgpLmlzRml4ZWQo
KSAmJiBzdHlsZVRvVXNlLT5sb2dpY2FsTWluV2lkdGgoKS52YWx1ZSgpID4gMCkgeworICAgICAg
ICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChtX21heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGVUb1VzZS0+bG9naWNhbE1p
bldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1heChtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
V2lkdGgoc3R5bGVUb1VzZS0+bG9naWNhbE1pbldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KICAg
ICAKLSAgICBpZiAoc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNGaXhlZCgpKSB7Ci0gICAg
ICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWluKG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5sb2dpY2FsTWF4
V2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bWluKG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxX
aWR0aChzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgaWYgKHN0eWxl
VG9Vc2UtPmxvZ2ljYWxNYXhXaWR0aCgpLmlzRml4ZWQoKSkgeworICAgICAgICBtX21heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0
ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGVUb1VzZS0+bG9naWNhbE1heFdpZHRoKCkudmFs
dWUoKSkpOworICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21pblBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGVU
b1VzZS0+bG9naWNhbE1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAogICAgIExheW91dFVu
aXQgYm9yZGVyQW5kUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKQEAg
LTUwNzEsMTMgKzUwNzcsMTMgQEAgc3RhdGljIGludCBnZXRCUE1XaWR0aChpbnQgY2hpbGRWYWx1
ZSwgTGVuZ3RoIGNzc1VuaXQpCiAKIHN0YXRpYyBpbnQgZ2V0Qm9yZGVyUGFkZGluZ01hcmdpbihj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQsIGJvb2wgZW5kT2ZJbmxpbmUpCiB7Ci0g
ICAgUmVuZGVyU3R5bGUqIGNzdHlsZSA9IGNoaWxkLT5zdHlsZSgpOworICAgIFJlbmRlclN0eWxl
KiBjaGlsZFN0eWxlID0gY2hpbGQtPnN0eWxlKCk7CiAgICAgaWYgKGVuZE9mSW5saW5lKQotICAg
ICAgICByZXR1cm4gZ2V0QlBNV2lkdGgoY2hpbGQtPm1hcmdpbkVuZCgpLCBjc3R5bGUtPm1hcmdp
bkVuZCgpKSArIAotICAgICAgICAgICAgICAgZ2V0QlBNV2lkdGgoY2hpbGQtPnBhZGRpbmdFbmQo
KSwgY3N0eWxlLT5wYWRkaW5nRW5kKCkpICsKKyAgICAgICAgcmV0dXJuIGdldEJQTVdpZHRoKGNo
aWxkLT5tYXJnaW5FbmQoKSwgY2hpbGRTdHlsZS0+bWFyZ2luRW5kKCkpICsKKyAgICAgICAgICAg
ICAgIGdldEJQTVdpZHRoKGNoaWxkLT5wYWRkaW5nRW5kKCksIGNoaWxkU3R5bGUtPnBhZGRpbmdF
bmQoKSkgKwogICAgICAgICAgICAgICAgY2hpbGQtPmJvcmRlckVuZCgpOwotICAgIHJldHVybiBn
ZXRCUE1XaWR0aChjaGlsZC0+bWFyZ2luU3RhcnQoKSwgY3N0eWxlLT5tYXJnaW5TdGFydCgpKSAr
IAotICAgICAgICAgICAgICAgZ2V0QlBNV2lkdGgoY2hpbGQtPnBhZGRpbmdTdGFydCgpLCBjc3R5
bGUtPnBhZGRpbmdTdGFydCgpKSArCisgICAgcmV0dXJuIGdldEJQTVdpZHRoKGNoaWxkLT5tYXJn
aW5TdGFydCgpLCBjaGlsZFN0eWxlLT5tYXJnaW5TdGFydCgpKSArCisgICAgICAgICAgICAgICBn
ZXRCUE1XaWR0aChjaGlsZC0+cGFkZGluZ1N0YXJ0KCksIGNoaWxkU3R5bGUtPnBhZGRpbmdTdGFy
dCgpKSArCiAgICAgICAgICAgICAgICBjaGlsZC0+Ym9yZGVyU3RhcnQoKTsKIH0KIApAQCAtNTEw
Nyw2ICs1MTEzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMoKQogICAgIGZsb2F0IGlubGluZU1heCA9IDA7CiAgICAgZmxvYXQgaW5saW5l
TWluID0gMDsKIAorICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICBS
ZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7CiAg
ICAgTGF5b3V0VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9jayA/IGNvbnRhaW5pbmdCbG9jay0+Y29u
dGVudExvZ2ljYWxXaWR0aCgpIDogMDsKIApAQCAtNTExOCwxMCArNTEyNSwxMCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgLy8g
RmlyZWZveCBhbmQgT3BlcmEgd2lsbCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQg
YW4gaW1hZ2UgaW5zaWRlIGl0IHVuZGVyCiAgICAgLy8gdmVyeSBzcGVjaWZpYyBjaXJ1Y3Vtc3Rh
bmNlcyAoaW4gb3JkZXIgdG8gbWF0Y2ggY29tbW9uIFdpbklFIHJlbmRlcmluZ3MpLiAKICAgICAv
LyBOb3Qgc3VwcG9ydGluZyB0aGUgcXVpcmsgaGFzIGNhdXNlZCB1cyB0byBtaXMtcmVuZGVyIHNv
bWUgcmVhbCBzaXRlcy4gKFNlZSBCdWd6aWxsYSAxMDUxNy4pIAotICAgIGJvb2wgYWxsb3dJbWFn
ZXNUb0JyZWFrID0gIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpIHx8ICFpc1RhYmxlQ2VsbCgp
IHx8ICFzdHlsZSgpLT5sb2dpY2FsV2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpOworICAgIGJv
b2wgYWxsb3dJbWFnZXNUb0JyZWFrID0gIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpIHx8ICFp
c1RhYmxlQ2VsbCgpIHx8ICFzdHlsZVRvVXNlLT5sb2dpY2FsV2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpOwogCiAgICAgYm9vbCBhdXRvV3JhcCwgb2xkQXV0b1dyYXA7Ci0gICAgYXV0b1dyYXAg
PSBvbGRBdXRvV3JhcCA9IHN0eWxlKCktPmF1dG9XcmFwKCk7CisgICAgYXV0b1dyYXAgPSBvbGRB
dXRvV3JhcCA9IHN0eWxlVG9Vc2UtPmF1dG9XcmFwKCk7CiAKICAgICBJbmxpbmVNaW5NYXhJdGVy
YXRvciBjaGlsZEl0ZXJhdG9yKHRoaXMpOwogICAgIGJvb2wgYWRkZWRUZXh0SW5kZW50ID0gZmFs
c2U7IC8vIE9ubHkgZ2V0cyBhZGRlZCBpbiBvbmNlLgpAQCAtNTE2Niw3ICs1MTczLDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAg
ICAgICAgICAgLy8gdmFsdWVzIChpZiBhbnkgb2YgdGhlbSBhcmUgbGFyZ2VyIHRoYW4gb3VyIGN1
cnJlbnQgbWluL21heCkuICBXZSB0aGVuIGxvb2sgYXQKICAgICAgICAgICAgIC8vIHRoZSB3aWR0
aCBvZiB0aGUgbGFzdCBub24tYnJlYWthYmxlIHJ1biBhbmQgdXNlIHRoYXQgdG8gc3RhcnQgYSBu
ZXcgbGluZQogICAgICAgICAgICAgLy8gKHVubGVzcyB3ZSBlbmQgaW4gd2hpdGVzcGFjZSkuCi0g
ICAgICAgICAgICBSZW5kZXJTdHlsZSogY3N0eWxlID0gY2hpbGQtPnN0eWxlKCk7CisgICAgICAg
ICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNoaWxkLT5zdHlsZSgpOwogICAgICAgICAg
ICAgZmxvYXQgY2hpbGRNaW4gPSAwOwogICAgICAgICAgICAgZmxvYXQgY2hpbGRNYXggPSAwOwog
CkBAIC01MTg2LDggKzUxOTMsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJl
ZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSW5saW5lIHJlcGxhY2VkIGVsdHMgYWRkIGluIHRoZWlyIG1hcmdpbnMg
dG8gdGhlaXIgbWluL21heCB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IG1hcmdp
bnMgPSAwOwotICAgICAgICAgICAgICAgICAgICBMZW5ndGggc3RhcnRNYXJnaW4gPSBjc3R5bGUt
Pm1hcmdpblN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIExlbmd0aCBlbmRNYXJnaW4gPSBj
c3R5bGUtPm1hcmdpbkVuZCgpOworICAgICAgICAgICAgICAgICAgICBMZW5ndGggc3RhcnRNYXJn
aW4gPSBjaGlsZFN0eWxlLT5tYXJnaW5TdGFydCgpOworICAgICAgICAgICAgICAgICAgICBMZW5n
dGggZW5kTWFyZ2luID0gY2hpbGRTdHlsZS0+bWFyZ2luRW5kKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGFydE1hcmdpbi5pc0ZpeGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBt
YXJnaW5zICs9IHN0YXJ0TWFyZ2luLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChl
bmRNYXJnaW4uaXNGaXhlZCgpKQpAQCAtNTIwNyw4ICs1MjE0LDggQEAgdm9pZCBSZW5kZXJCbG9j
azo6Y29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgICAgICAgICAgICAg
IGJvb2wgY2xlYXJQcmV2aW91c0Zsb2F0OwogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNG
bG9hdGluZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNsZWFyUHJldmlvdXNGbG9hdCA9IChw
cmV2RmxvYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmICgocHJldkZsb2F0LT5zdHlsZSgp
LT5mbG9hdGluZygpID09IExlZnRGbG9hdCAmJiAoY2hpbGQtPnN0eWxlKCktPmNsZWFyKCkgJiBD
TEVGVCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHByZXZGbG9hdC0+c3R5bGUo
KS0+ZmxvYXRpbmcoKSA9PSBSaWdodEZsb2F0ICYmIChjaGlsZC0+c3R5bGUoKS0+Y2xlYXIoKSAm
IENSSUdIVCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHByZXZGbG9hdC0+c3R5
bGUoKS0+ZmxvYXRpbmcoKSA9PSBMZWZ0RmxvYXQgJiYgKGNoaWxkU3R5bGUtPmNsZWFyKCkgJiBD
TEVGVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHByZXZGbG9hdC0+c3R5bGUo
KS0+ZmxvYXRpbmcoKSA9PSBSaWdodEZsb2F0ICYmIChjaGlsZFN0eWxlLT5jbGVhcigpICYgQ1JJ
R0hUKSkpKTsKICAgICAgICAgICAgICAgICAgICAgcHJldkZsb2F0ID0gY2hpbGQ7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNsZWFyUHJldmlvdXNGbG9hdCA9
IGZhbHNlOwpAQCAtNTIyOSw3ICs1MjM2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlu
bGluZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgICAgICAgICAgICAgIExheW91dFVuaXQg
dGkgPSAwOwogICAgICAgICAgICAgICAgIGlmICghYWRkZWRUZXh0SW5kZW50KSB7CiAgICAgICAg
ICAgICAgICAgICAgIGFkZGVkVGV4dEluZGVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IHRpID0gc3R5bGUoKS0+dGV4dEluZGVudCgpLmNhbGNNaW5WYWx1ZShjdyk7CisgICAgICAgICAg
ICAgICAgICAgIHRpID0gc3R5bGVUb1VzZS0+dGV4dEluZGVudCgpLmNhbGNNaW5WYWx1ZShjdyk7
CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkTWluICs9IHRpOwogICAgICAgICAgICAgICAgICAg
ICBjaGlsZE1heCArPSB0aTsKICAgICAgICAgICAgICAgICB9CkBAIC01MzAwLDcgKzUzMDcsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocygp
CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0aSA9IDA7CiAgICAgICAgICAgICAgICAgaWYg
KCFhZGRlZFRleHRJbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkZWRUZXh0SW5kZW50
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgdGkgPSBzdHlsZSgpLT50ZXh0SW5kZW50KCku
Y2FsY01pblZhbHVlKGN3KTsKKyAgICAgICAgICAgICAgICAgICAgdGkgPSBzdHlsZVRvVXNlLT50
ZXh0SW5kZW50KCkuY2FsY01pblZhbHVlKGN3KTsKICAgICAgICAgICAgICAgICAgICAgY2hpbGRN
aW4rPXRpOyBiZWdpbk1pbiArPSB0aTsKICAgICAgICAgICAgICAgICAgICAgY2hpbGRNYXgrPXRp
OyBiZWdpbk1heCArPSB0aTsKICAgICAgICAgICAgICAgICB9CkBAIC01MzU4LDcgKzUzNjUsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocygp
CiAgICAgICAgIG9sZEF1dG9XcmFwID0gYXV0b1dyYXA7CiAgICAgfQogCi0gICAgaWYgKHN0eWxl
KCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKQorICAgIGlmIChzdHlsZVRvVXNlLT5jb2xsYXBzZVdo
aXRlU3BhY2UoKSkKICAgICAgICAgc3RyaXBUcmFpbGluZ1NwYWNlKGlubGluZU1heCwgaW5saW5l
TWluLCB0cmFpbGluZ1NwYWNlQ2hpbGQpOwogCiAgICAgdXBkYXRlUHJlZmVycmVkV2lkdGgobV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgsIGlubGluZU1pbik7CkBAIC01MzcwLDcgKzUzNzcsOCBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocygp
CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KQogewotICAgIGJvb2wgbm93cmFwID0gc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IE5PV1JBUDsK
KyAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7CisgICAgYm9vbCBub3dyYXAg
PSBzdHlsZVRvVXNlLT53aGl0ZVNwYWNlKCkgPT0gTk9XUkFQOwogCiAgICAgUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2Nr
ID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7CkBAIC01MzgyLDEzICs1MzkwLDE0IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRT
dHlsZSA9IGNoaWxkLT5zdHlsZSgpOwogICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSB8
fCAoY2hpbGQtPmlzQm94KCkgJiYgdG9SZW5kZXJCb3goY2hpbGQpLT5hdm9pZHNGbG9hdHMoKSkp
IHsKICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRUb3RhbFdpZHRoID0gZmxvYXRMZWZ0V2lk
dGggKyBmbG9hdFJpZ2h0V2lkdGg7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPnN0eWxlKCktPmNs
ZWFyKCkgJiBDTEVGVCkgeworICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUtPmNsZWFyKCkgJiBD
TEVGVCkgewogICAgICAgICAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4
KGZsb2F0VG90YWxXaWR0aCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogICAgICAgICAg
ICAgICAgIGZsb2F0TGVmdFdpZHRoID0gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChjaGlsZC0+c3R5bGUoKS0+Y2xlYXIoKSAmIENSSUdIVCkgeworICAgICAgICAgICAgaWYgKGNo
aWxkU3R5bGUtPmNsZWFyKCkgJiBDUklHSFQpIHsKICAgICAgICAgICAgICAgICBtX21heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCA9IG1heChmbG9hdFRvdGFsV2lkdGgsIG1fbWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICBmbG9hdFJpZ2h0V2lkdGggPSAwOwogICAgICAg
ICAgICAgfQpAQCAtNTM5Nyw4ICs1NDA2LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUJs
b2NrUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIC8vIEEgbWFyZ2luIGJhc2ljYWxs
eSBoYXMgdGhyZWUgdHlwZXM6IGZpeGVkLCBwZXJjZW50YWdlLCBhbmQgYXV0byAodmFyaWFibGUp
LgogICAgICAgICAvLyBBdXRvIGFuZCBwZXJjZW50YWdlIG1hcmdpbnMgc2ltcGx5IGJlY29tZSAw
IHdoZW4gY29tcHV0aW5nIG1pbi9tYXggd2lkdGguCiAgICAgICAgIC8vIEZpeGVkIG1hcmdpbnMg
Y2FuIGJlIGFkZGVkIGluIGFzIGlzLgotICAgICAgICBMZW5ndGggc3RhcnRNYXJnaW5MZW5ndGgg
PSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luU3RhcnRVc2luZyhzdHlsZSgpKTsKLSAgICAgICAgTGVu
Z3RoIGVuZE1hcmdpbkxlbmd0aCA9IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5FbmRVc2luZyhzdHls
ZSgpKTsKKyAgICAgICAgTGVuZ3RoIHN0YXJ0TWFyZ2luTGVuZ3RoID0gY2hpbGRTdHlsZS0+bWFy
Z2luU3RhcnRVc2luZyhzdHlsZVRvVXNlKTsKKyAgICAgICAgTGVuZ3RoIGVuZE1hcmdpbkxlbmd0
aCA9IGNoaWxkU3R5bGUtPm1hcmdpbkVuZFVzaW5nKHN0eWxlVG9Vc2UpOwogICAgICAgICBMYXlv
dXRVbml0IG1hcmdpbiA9IDA7CiAgICAgICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQgPSAwOwog
ICAgICAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCA9IDA7CkBAIC01NDM1LDcgKzU0NDQsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAg
ICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgYSBsZWZ0IGFuZCByaWdodCBtYXggdmFsdWUgYmFz
ZWQgb2ZmIHdoZXRoZXIgb3Igbm90IHRoZSBmbG9hdHMgY2FuIGZpdCBpbiB0aGUKICAgICAgICAg
ICAgICAgICAvLyBtYXJnaW5zIG9mIHRoZSBvYmplY3QuICBGb3IgbmVnYXRpdmUgbWFyZ2lucywg
d2Ugd2lsbCBhdHRlbXB0IHRvIG92ZXJsYXAgdGhlIGZsb2F0IGlmIHRoZSBuZWdhdGl2ZSBtYXJn
aW4KICAgICAgICAgICAgICAgICAvLyBpcyBzbWFsbGVyIHRoYW4gdGhlIGZsb2F0IHdpZHRoLgot
ICAgICAgICAgICAgICAgIGJvb2wgbHRyID0gY29udGFpbmluZ0Jsb2NrID8gY29udGFpbmluZ0Js
b2NrLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgOiBzdHlsZSgpLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgYm9vbCBsdHIgPSBjb250YWluaW5n
QmxvY2sgPyBjb250YWluaW5nQmxvY2stPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA6IHN0eWxlVG9Vc2UtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IG1hcmdpbkxvZ2ljYWxMZWZ0ID0gbHRyID8gbWFyZ2luU3RhcnQgOiBtYXJn
aW5FbmQ7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5Mb2dpY2FsUmlnaHQgPSBs
dHIgPyBtYXJnaW5FbmQgOiBtYXJnaW5TdGFydDsKICAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IG1heExlZnQgPSBtYXJnaW5Mb2dpY2FsTGVmdCA+IDAgPyBtYXgoZmxvYXRMZWZ0V2lkdGgsIG1h
cmdpbkxvZ2ljYWxMZWZ0KSA6IGZsb2F0TGVmdFdpZHRoICsgbWFyZ2luTG9naWNhbExlZnQ7CkBA
IC01NDQ5LDcgKzU0NTgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGNoaWxk
LT5pc0Zsb2F0aW5nKCkpIHsKLSAgICAgICAgICAgIGlmIChzdHlsZSgpLT5mbG9hdGluZygpID09
IExlZnRGbG9hdCkKKyAgICAgICAgICAgIGlmIChzdHlsZVRvVXNlLT5mbG9hdGluZygpID09IExl
ZnRGbG9hdCkKICAgICAgICAgICAgICAgICBmbG9hdExlZnRXaWR0aCArPSB3OwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIGZsb2F0UmlnaHRXaWR0aCArPSB3OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCBi
NWE4NjYxOGI2OWJlMmI4NzZjZWVkYzJkZGJjZDFjYTU5OWU3MzYxLi44YWFhMTAwMjVkNjg4MzUz
MzcyNWEyMWE3NDdmY2I4ZGZjMDI5ZGIyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMTIxMCw2ICsxMjEwLDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlLCBib29sIGhhc0lubGkKIAogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZs
b2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW5lQmlkaVJlc29s
dmVyJiByZXNvbHZlciwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25z
dCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5
cGhlbmF0ZWRMaW5lcykKIHsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7
CiAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCkgJiYgdmlldygpLT5s
YXlvdXRTdGF0ZSgpLT5pc1BhZ2luYXRlZCgpOwogICAgIExpbmVNaWRwb2ludFN0YXRlJiBsaW5l
TWlkcG9pbnRTdGF0ZSA9IHJlc29sdmVyLm1pZHBvaW50U3RhdGUoKTsKICAgICBJbmxpbmVJdGVy
YXRvciBlbmQgPSByZXNvbHZlci5wb3NpdGlvbigpOwpAQCAtMTI1NCwxMiArMTI1NSwxMiBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBJbmxpbgogICAgICAgICAgICAgaWYgKGxhc3RSb290Qm94KCkpCiAg
ICAgICAgICAgICAgICAgbGFzdFJvb3RCb3goKS0+c2V0TGluZUJyZWFrSW5mbyhlbmQubV9vYmos
IGVuZC5tX3BvcywgcmVzb2x2ZXIuc3RhdHVzKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAoc3R5bGUoKS0+cnRsT3Jk
ZXJpbmcoKSA9PSBWaXN1YWxPcmRlciA/IChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBW
aXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlIDogVmlzdWFsUmlnaHRUb0xlZnRPdmVycmlkZSkgOiBO
b1Zpc3VhbE92ZXJyaWRlKTsKKyAgICAgICAgICAgIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92
ZXJyaWRlID0gKHN0eWxlVG9Vc2UtPnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIgPyAoc3R5
bGVUb1VzZS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSA6
IFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUpIDogTm9WaXN1YWxPdmVycmlkZSk7CiAKLSAgICAg
ICAgICAgIGlmIChpc05ld1VCQVBhcmFncmFwaCAmJiBzdHlsZSgpLT51bmljb2RlQmlkaSgpID09
IFBsYWludGV4dCAmJiAhcmVzb2x2ZXIuY29udGV4dCgpLT5wYXJlbnQoKSkgewotICAgICAgICAg
ICAgICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGUoKS0+ZGlyZWN0aW9uKCk7Cisg
ICAgICAgICAgICBpZiAoaXNOZXdVQkFQYXJhZ3JhcGggJiYgc3R5bGVUb1VzZS0+dW5pY29kZUJp
ZGkoKSA9PSBQbGFpbnRleHQgJiYgIXJlc29sdmVyLmNvbnRleHQoKS0+cGFyZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0eWxlVG9Vc2UtPmRpcmVj
dGlvbigpOwogICAgICAgICAgICAgICAgIGRldGVybWluZVBhcmFncmFwaERpcmVjdGlvbihkaXJl
Y3Rpb24sIHJlc29sdmVyLnBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgIHJlc29sdmVyLnNl
dFN0YXR1cyhCaWRpU3RhdHVzKGRpcmVjdGlvbiwgc3R5bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBP
dmVycmlkZSkpOworICAgICAgICAgICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVz
KGRpcmVjdGlvbiwgc3R5bGVUb1VzZS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlwIGlzIHJldmVy
c2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVuTGlzdCBhbmQgcGFzcyBpdCB0byBjcmVhdGVC
aWRpUnVuc0ZvckxpbmUuCiAgICAgICAgICAgICBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1
bnMgPSByZXNvbHZlci5ydW5zKCk7CkBAIC0yMTMxLDE2ICsyMTMyLDE4IEBAIElubGluZUl0ZXJh
dG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVz
b2x2ZXImIHJlc29sCiAgICAgLy8gRmlyZWZveCBhbmQgT3BlcmEgd2lsbCBhbGxvdyBhIHRhYmxl
IGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1hZ2UgaW5zaWRlIGl0IHVuZGVyCiAgICAgLy8gdmVy
eSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIChpbiBvcmRlciB0byBtYXRjaCBjb21tb24gV2luSUUg
cmVuZGVyaW5ncykuCiAgICAgLy8gTm90IHN1cHBvcnRpbmcgdGhlIHF1aXJrIGhhcyBjYXVzZWQg
dXMgdG8gbWlzLXJlbmRlciBzb21lIHJlYWwgc2l0ZXMuIChTZWUgQnVnemlsbGEgMTA1MTcuKQot
ICAgIGJvb2wgYWxsb3dJbWFnZXNUb0JyZWFrID0gIW1fYmxvY2stPmRvY3VtZW50KCktPmluUXVp
cmtzTW9kZSgpIHx8ICFtX2Jsb2NrLT5pc1RhYmxlQ2VsbCgpIHx8ICFtX2Jsb2NrLT5zdHlsZSgp
LT5sb2dpY2FsV2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpOworICAgIFJlbmRlclN0eWxlKiBi
bG9ja1N0eWxlID0gbV9ibG9jay0+c3R5bGUoKTsKKyAgICBib29sIGFsbG93SW1hZ2VzVG9CcmVh
ayA9ICFtX2Jsb2NrLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSB8fCAhbV9ibG9jay0+aXNU
YWJsZUNlbGwoKSB8fCAhYmxvY2tTdHlsZS0+bG9naWNhbFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKTsKIAotICAgIEVXaGl0ZVNwYWNlIGN1cnJXUyA9IG1fYmxvY2stPnN0eWxlKCktPndoaXRl
U3BhY2UoKTsKKyAgICBFV2hpdGVTcGFjZSBjdXJyV1MgPSBibG9ja1N0eWxlLT53aGl0ZVNwYWNl
KCk7CiAgICAgRVdoaXRlU3BhY2UgbGFzdFdTID0gY3VycldTOwogICAgIHdoaWxlIChjdXJyZW50
Lm1fb2JqKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUgPSBjdXJyZW50Lm1f
b2JqLT5zdHlsZSgpOwogICAgICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBiaWRpTmV4dFNraXBw
aW5nRW1wdHlJbmxpbmVzKG1fYmxvY2ssIGN1cnJlbnQubV9vYmopOwogICAgICAgICBpZiAobmV4
dCAmJiBuZXh0LT5wYXJlbnQoKSAmJiAhbmV4dC0+cGFyZW50KCktPmlzRGVzY2VuZGFudE9mKGN1
cnJlbnQubV9vYmotPnBhcmVudCgpKSkKICAgICAgICAgICAgIGluY2x1ZGVFbmRXaWR0aCA9IHRy
dWU7CiAKLSAgICAgICAgY3VycldTID0gY3VycmVudC5tX29iai0+aXNSZXBsYWNlZCgpID8gY3Vy
cmVudC5tX29iai0+cGFyZW50KCktPnN0eWxlKCktPndoaXRlU3BhY2UoKSA6IGN1cnJlbnQubV9v
YmotPnN0eWxlKCktPndoaXRlU3BhY2UoKTsKKyAgICAgICAgY3VycldTID0gY3VycmVudC5tX29i
ai0+aXNSZXBsYWNlZCgpID8gY3VycmVudC5tX29iai0+cGFyZW50KCktPnN0eWxlKCktPndoaXRl
U3BhY2UoKSA6IGN1cnJlbnRTdHlsZS0+d2hpdGVTcGFjZSgpOwogICAgICAgICBsYXN0V1MgPSBs
YXN0LT5pc1JlcGxhY2VkKCkgPyBsYXN0LT5wYXJlbnQoKS0+c3R5bGUoKS0+d2hpdGVTcGFjZSgp
IDogbGFzdC0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpOwogCiAgICAgICAgIGJvb2wgYXV0b1dyYXAg
PSBSZW5kZXJTdHlsZTo6YXV0b1dyYXAoY3VycldTKTsKQEAgLTIxNzAsNyArMjE3Myw3IEBAIElu
bGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sCiAgICAgICAgICAgICAgICAgbGluZUluZm8uc2V0UHJldmlv
dXNMaW5lQnJva2VDbGVhbmx5KHRydWUpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFsaW5lSW5m
by5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY2xlYXIgPSBjdXJyZW50Lm1fb2Jq
LT5zdHlsZSgpLT5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBtX2NsZWFyID0gY3VycmVu
dFN0eWxlLT5jbGVhcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ290byBlbmQ7CiAg
ICAgICAgIH0KQEAgLTIyMzAsNyArMjIzMyw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2Nr
OjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sCiAg
ICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nT2JqZWN0cy5jbGVhcigpOwogICAgICAgICAgICAg
ICAgICAgICBhZGRNaWRwb2ludChsaW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwg
Y3VycmVudC5tX29iaiwgMCkpOyAvLyBTdG9wIGlnbm9yaW5nIHNwYWNlcy4KICAgICAgICAgICAg
ICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAs
IGN1cnJlbnQubV9vYmosIDApKTsgLy8gU3RhcnQgaWdub3JpbmcgYWdhaW4uCi0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChtX2Jsb2NrLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAm
JiByZXNvbHZlci5wb3NpdGlvbigpLm1fb2JqID09IGN1cnJlbnQubV9vYmoKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGJsb2NrU3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHJlc29s
dmVyLnBvc2l0aW9uKCkubV9vYmogPT0gY3VycmVudC5tX29iagogICAgICAgICAgICAgICAgICAg
ICAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QobV9ibG9jaywgY3VycmVu
dC5tX29iaiwgbGluZU1pZHBvaW50U3RhdGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIExp
a2Ugd2l0aCBsaXN0IG1hcmtlcnMsIHdlIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyB0byBtYWtlIHN1
cmUgdGhhdCBhbnkKICAgICAgICAgICAgICAgICAgICAgLy8gYWRkaXRpb25hbCBzcGFjZXMgd2Ug
c2VlIHdpbGwgYmUgZGlzY2FyZGVkLgpAQCAtMjI2Myw3ICsyMjY2LDcgQEAgSW5saW5lSXRlcmF0
b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNv
bHZlciYgcmVzb2wKICAgICAgICAgICAgIC8vIGl0ZW0sIHRoZW4gdGhpcyBpcyBhbGwgbW9vdC4K
ICAgICAgICAgICAgIExheW91dFVuaXQgcmVwbGFjZWRMb2dpY2FsV2lkdGggPSBtX2Jsb2NrLT5s
b2dpY2FsV2lkdGhGb3JDaGlsZChyZXBsYWNlZEJveCkgKyBtX2Jsb2NrLT5tYXJnaW5TdGFydEZv
ckNoaWxkKHJlcGxhY2VkQm94KSArIG1fYmxvY2stPm1hcmdpbkVuZEZvckNoaWxkKHJlcGxhY2Vk
Qm94KSArIGlubGluZUxvZ2ljYWxXaWR0aChjdXJyZW50Lm1fb2JqKTsKICAgICAgICAgICAgIGlm
IChjdXJyZW50Lm1fb2JqLT5pc0xpc3RNYXJrZXIoKSkgewotICAgICAgICAgICAgICAgIGlmICht
X2Jsb2NrLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBzaG91bGRTa2lwV2hpdGVz
cGFjZUFmdGVyU3RhcnRPYmplY3QobV9ibG9jaywgY3VycmVudC5tX29iaiwgbGluZU1pZHBvaW50
U3RhdGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrU3R5bGUtPmNvbGxhcHNlV2hpdGVT
cGFjZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Jsb2NrLCBj
dXJyZW50Lm1fb2JqLCBsaW5lTWlkcG9pbnRTdGF0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
Ly8gTGlrZSB3aXRoIGlubGluZSBmbG93cywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRvIG1h
a2Ugc3VyZSB0aGF0IGFueQogICAgICAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHNwYWNl
cyB3ZSBzZWUgd2lsbCBiZSBkaXNjYXJkZWQuCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRD
aGFyYWN0ZXJJc1NwYWNlID0gdHJ1ZTsKQEAgLTIyOTUsNyArMjI5OCw3IEBAIElubGluZUl0ZXJh
dG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVz
b2x2ZXImIHJlc29sCiAgICAgICAgICAgICBib29sIGNhbkh5cGhlbmF0ZSA9IHN0eWxlLT5oeXBo
ZW5zKCkgPT0gSHlwaGVuc0F1dG8gJiYgV2ViQ29yZTo6Y2FuSHlwaGVuYXRlKHN0eWxlLT5sb2Nh
bGUoKSk7CiAKICAgICAgICAgICAgIGludCBsYXN0U3BhY2UgPSBjdXJyZW50Lm1fcG9zOwotICAg
ICAgICAgICAgZmxvYXQgd29yZFNwYWNpbmcgPSBjdXJyZW50Lm1fb2JqLT5zdHlsZSgpLT53b3Jk
U3BhY2luZygpOworICAgICAgICAgICAgZmxvYXQgd29yZFNwYWNpbmcgPSBjdXJyZW50U3R5bGUt
PndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICBmbG9hdCBsYXN0U3BhY2VXb3JkU3BhY2luZyA9
IDA7CiAKICAgICAgICAgICAgIC8vIE5vbi16ZXJvIG9ubHkgd2hlbiBrZXJuaW5nIGlzIGVuYWJs
ZWQsIGluIHdoaWNoIGNhc2Ugd2UgbWVhc3VyZSB3b3JkcyB3aXRoIHRoZWlyIHRyYWlsaW5nCkBA
IC0yMzA0LDEyICsyMzA3LDEyIEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJl
YWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sCiAKICAgICAgICAg
ICAgIGZsb2F0IHdyYXBXID0gd2lkdGgudW5jb21taXR0ZWRXaWR0aCgpICsgaW5saW5lTG9naWNh
bFdpZHRoKGN1cnJlbnQubV9vYmosICFhcHBsaWVkU3RhcnRXaWR0aCwgdHJ1ZSk7CiAgICAgICAg
ICAgICBmbG9hdCBjaGFyV2lkdGggPSAwOwotICAgICAgICAgICAgYm9vbCBicmVha05CU1AgPSBh
dXRvV3JhcCAmJiBjdXJyZW50Lm1fb2JqLT5zdHlsZSgpLT5uYnNwTW9kZSgpID09IFNQQUNFOwor
ICAgICAgICAgICAgYm9vbCBicmVha05CU1AgPSBhdXRvV3JhcCAmJiBjdXJyZW50U3R5bGUtPm5i
c3BNb2RlKCkgPT0gU1BBQ0U7CiAgICAgICAgICAgICAvLyBBdXRvLXdyYXBwaW5nIHRleHQgc2hv
dWxkIHdyYXAgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgb25seSBpZiBpdCBjb3VsZCBub3Qgd3Jh
cCBiZWZvcmUgdGhlIHdvcmQsCiAgICAgICAgICAgICAvLyB3aGljaCBpcyBvbmx5IHBvc3NpYmxl
IGlmIHRoZSB3b3JkIGlzIHRoZSBmaXJzdCB0aGluZyBvbiB0aGUgbGluZSwgdGhhdCBpcywgaWYg
fHd8IGlzIHplcm8uCi0gICAgICAgICAgICBib29sIGJyZWFrV29yZHMgPSBjdXJyZW50Lm1fb2Jq
LT5zdHlsZSgpLT5icmVha1dvcmRzKCkgJiYgKChhdXRvV3JhcCAmJiAhd2lkdGguY29tbWl0dGVk
V2lkdGgoKSkgfHwgY3VycldTID09IFBSRSk7CisgICAgICAgICAgICBib29sIGJyZWFrV29yZHMg
PSBjdXJyZW50U3R5bGUtPmJyZWFrV29yZHMoKSAmJiAoKGF1dG9XcmFwICYmICF3aWR0aC5jb21t
aXR0ZWRXaWR0aCgpKSB8fCBjdXJyV1MgPT0gUFJFKTsKICAgICAgICAgICAgIGJvb2wgbWlkV29y
ZEJyZWFrID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGJyZWFrQWxsID0gY3VycmVudC5tX29i
ai0+c3R5bGUoKS0+d29yZEJyZWFrKCkgPT0gQnJlYWtBbGxXb3JkQnJlYWsgJiYgYXV0b1dyYXA7
CisgICAgICAgICAgICBib29sIGJyZWFrQWxsID0gY3VycmVudFN0eWxlLT53b3JkQnJlYWsoKSA9
PSBCcmVha0FsbFdvcmRCcmVhayAmJiBhdXRvV3JhcDsKICAgICAgICAgICAgIGZsb2F0IGh5cGhl
bldpZHRoID0gMDsKIAogICAgICAgICAgICAgaWYgKHQtPmlzV29yZEJyZWFrKCkpIHsKQEAgLTIz
ODgsNyArMjM5MSw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6
bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSBicmVhayBvbmx5IGFmdGVyIHdoaXRlLXNwYWNlLCBjb25zaWRlciB0
aGUgY3VycmVudCBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIGNhbmRp
ZGF0ZSB3aWR0aCBmb3IgdGhpcyBsaW5lLgogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBs
aW5lV2FzVG9vV2lkZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRo
LmZpdHNPbkxpbmUoKSAmJiBjdXJyZW50Q2hhcmFjdGVySXNXUyAmJiBjdXJyZW50Lm1fb2JqLT5z
dHlsZSgpLT5icmVha09ubHlBZnRlcldoaXRlU3BhY2UoKSAmJiAhbWlkV29yZEJyZWFrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGguZml0c09uTGluZSgpICYmIGN1cnJlbnRD
aGFyYWN0ZXJJc1dTICYmIGN1cnJlbnRTdHlsZS0+YnJlYWtPbmx5QWZ0ZXJXaGl0ZVNwYWNlKCkg
JiYgIW1pZFdvcmRCcmVhaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGNo
YXJXaWR0aCA9IHRleHRXaWR0aCh0LCBjdXJyZW50Lm1fcG9zLCAxLCBmLCB3aWR0aC5jdXJyZW50
V2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UpICsgKGFwcGx5V29yZFNw
YWNpbmcgPyB3b3JkU3BhY2luZyA6IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENoZWNrIGlmIGxpbmUgaXMgdG9vIGJpZyBldmVuIHdpdGhvdXQgdGhlIGV4dHJhIHNwYWNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4gSWYg
aXQgaXMgbm90LCBkbyBub3RoaW5nLgpAQCAtMjQwMyw3ICsyNDA2LDcgQEAgSW5saW5lSXRlcmF0
b3IgUmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNv
bHZlciYgcmVzb2wKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChsaW5lV2FzVG9vV2lkZSB8fCAhd2lkdGguZml0c09uTGluZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkh5cGhlbmF0ZSAmJiAhd2lkdGguZml0c09u
TGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUh5cGhlbmF0aW5n
KHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIG1fYmxv
Y2stPnN0eWxlKCktPmh5cGhlbmF0aW9uTGltaXRMaW5lcygpLCBzdHlsZS0+aHlwaGVuYXRpb25M
aW1pdEJlZm9yZSgpLCBzdHlsZS0+aHlwaGVuYXRpb25MaW1pdEFmdGVyKCksIGxhc3RTcGFjZSwg
Y3VycmVudC5tX3Bvcywgd2lkdGguY3VycmVudFdpZHRoKCkgLSBhZGRpdGlvbmFsVG1wVywgd2lk
dGguYXZhaWxhYmxlV2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UsIGxh
c3RTcGFjZVdvcmRTcGFjaW5nLCBsQnJlYWssIGN1cnJlbnQubV9uZXh0QnJlYWthYmxlUG9zaXRp
b24sIG1faHlwaGVuYXRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUh5
cGhlbmF0aW5nKHQsIGYsIHN0eWxlLT5sb2NhbGUoKSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGlu
ZXMsIGJsb2NrU3R5bGUtPmh5cGhlbmF0aW9uTGltaXRMaW5lcygpLCBzdHlsZS0+aHlwaGVuYXRp
b25MaW1pdEJlZm9yZSgpLCBzdHlsZS0+aHlwaGVuYXRpb25MaW1pdEFmdGVyKCksIGxhc3RTcGFj
ZSwgY3VycmVudC5tX3Bvcywgd2lkdGguY3VycmVudFdpZHRoKCkgLSBhZGRpdGlvbmFsVG1wVywg
d2lkdGguYXZhaWxhYmxlV2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2Us
IGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBsQnJlYWssIGN1cnJlbnQubV9uZXh0QnJlYWthYmxlUG9z
aXRpb24sIG1faHlwaGVuYXRlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2h5cGhlbmF0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGVuZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNDYzLDcgKzI0NjYsNyBA
QCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWso
SW5saW5lQmlkaVJlc29sdmVyJiByZXNvbAogICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNw
YWNlID0gY3VycmVudC5tX3BvczsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgICAgIGlmICghaWdub3JpbmdTcGFjZXMgJiYgY3VycmVudC5tX29iai0+c3R5bGUoKS0+
Y29sbGFwc2VXaGl0ZVNwYWNlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpZ25vcmlu
Z1NwYWNlcyAmJiBjdXJyZW50U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgYSBuZXdsaW5lLCBvciBpZiB3ZSBl
bmNvdW50ZXIgYQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2Vjb25kIHNwYWNlLCB3ZSBu
ZWVkIHRvIGdvIGFoZWFkIGFuZCBicmVhayB1cCB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBydW4gYW5kIGVudGVyIGEgbW9kZSB3aGVyZSB3ZSBzdGFydCBjb2xsYXBzaW5nIHNwYWNl
cy4KQEAgLTI1MDIsMTMgKzI1MDUsMTMgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6Okxp
bmVCcmVha2VyOjpuZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2wKICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRDaGFyYWN0ZXJJc1dT
ICYmIHByZXZpb3VzQ2hhcmFjdGVySXNXUykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0
b1dyYXAgJiYgY3VycmVudC5tX29iai0+c3R5bGUoKS0+YnJlYWtPbmx5QWZ0ZXJXaGl0ZVNwYWNl
KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvV3JhcCAmJiBjdXJyZW50U3R5bGUtPmJy
ZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbEJyZWFr
Lm1vdmVUbyhjdXJyZW50Lm1fb2JqLCBjdXJyZW50Lm1fcG9zLCBjdXJyZW50Lm1fbmV4dEJyZWFr
YWJsZVBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAo
Y29sbGFwc2VXaGl0ZVNwYWNlICYmIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlICYmICFpZ25vcmlu
Z1NwYWNlcykKICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdPYmplY3RzLnNldFRyYWlsaW5n
V2hpdGVzcGFjZSh0b1JlbmRlclRleHQoY3VycmVudC5tX29iaikpOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKCFjdXJyZW50Lm1fb2JqLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSB8
fCAhY3VycmVudENoYXJhY3RlcklzU3BhY2UpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWN1
cnJlbnRTdHlsZS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgfHwgIWN1cnJlbnRDaGFyYWN0ZXJJc1Nw
YWNlKQogICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ09iamVjdHMuY2xlYXIoKTsKIAogICAg
ICAgICAgICAgICAgIGF0U3RhcnQgPSBmYWxzZTsKQEAgLTI1MjEsNyArMjUyNCw3IEBAIElubGlu
ZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVC
aWRpUmVzb2x2ZXImIHJlc29sCiAKICAgICAgICAgICAgIGlmICghd2lkdGguZml0c09uTGluZSgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbkh5cGhlbmF0ZSkKLSAgICAgICAgICAgICAgICAg
ICAgdHJ5SHlwaGVuYXRpbmcodCwgZiwgc3R5bGUtPmxvY2FsZSgpLCBjb25zZWN1dGl2ZUh5cGhl
bmF0ZWRMaW5lcywgbV9ibG9jay0+c3R5bGUoKS0+aHlwaGVuYXRpb25MaW1pdExpbmVzKCksIHN0
eWxlLT5oeXBoZW5hdGlvbkxpbWl0QmVmb3JlKCksIHN0eWxlLT5oeXBoZW5hdGlvbkxpbWl0QWZ0
ZXIoKSwgbGFzdFNwYWNlLCBjdXJyZW50Lm1fcG9zLCB3aWR0aC5jdXJyZW50V2lkdGgoKSAtIGFk
ZGl0aW9uYWxUbXBXLCB3aWR0aC5hdmFpbGFibGVXaWR0aCgpLCBpc0ZpeGVkUGl0Y2gsIGNvbGxh
cHNlV2hpdGVTcGFjZSwgbGFzdFNwYWNlV29yZFNwYWNpbmcsIGxCcmVhaywgY3VycmVudC5tX25l
eHRCcmVha2FibGVQb3NpdGlvbiwgbV9oeXBoZW5hdGVkKTsKKyAgICAgICAgICAgICAgICAgICAg
dHJ5SHlwaGVuYXRpbmcodCwgZiwgc3R5bGUtPmxvY2FsZSgpLCBjb25zZWN1dGl2ZUh5cGhlbmF0
ZWRMaW5lcywgYmxvY2tTdHlsZS0+aHlwaGVuYXRpb25MaW1pdExpbmVzKCksIHN0eWxlLT5oeXBo
ZW5hdGlvbkxpbWl0QmVmb3JlKCksIHN0eWxlLT5oeXBoZW5hdGlvbkxpbWl0QWZ0ZXIoKSwgbGFz
dFNwYWNlLCBjdXJyZW50Lm1fcG9zLCB3aWR0aC5jdXJyZW50V2lkdGgoKSAtIGFkZGl0aW9uYWxU
bXBXLCB3aWR0aC5hdmFpbGFibGVXaWR0aCgpLCBpc0ZpeGVkUGl0Y2gsIGNvbGxhcHNlV2hpdGVT
cGFjZSwgbGFzdFNwYWNlV29yZFNwYWNpbmcsIGxCcmVhaywgY3VycmVudC5tX25leHRCcmVha2Fi
bGVQb3NpdGlvbiwgbV9oeXBoZW5hdGVkKTsKIAogICAgICAgICAgICAgICAgIGlmICghbV9oeXBo
ZW5hdGVkICYmIGxCcmVhay5wcmV2aW91c0luU2FtZU5vZGUoKSA9PSBzb2Z0SHlwaGVuICYmIHN0
eWxlLT5oeXBoZW5zKCkgIT0gSHlwaGVuc05vbmUpCiAgICAgICAgICAgICAgICAgICAgIG1faHlw
aGVuYXRlZCA9IHRydWU7CkBAIC0yNTYyLDcgKzI1NjUsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5k
ZXJCbG9jazo6TGluZUJyZWFrZXI6Om5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbAogCiAgICAgICAgIGlmIChjaGVja0ZvckJyZWFrICYmICF3aWR0aC5maXRzT25MaW5lKCkp
IHsKICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgZmxvYXRzLCB0cnkgdG8gZ2V0IGJlbG93IHRo
ZW0uCi0gICAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcklzU3BhY2UgJiYgIWlnbm9yaW5n
U3BhY2VzICYmIGN1cnJlbnQubV9vYmotPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKQor
ICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlICYmICFpZ25vcmluZ1NwYWNl
cyAmJiBjdXJyZW50U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpKQogICAgICAgICAgICAgICAg
IHRyYWlsaW5nT2JqZWN0cy5jbGVhcigpOwogCiAgICAgICAgICAgICBpZiAod2lkdGguY29tbWl0
dGVkV2lkdGgoKSkKQEAgLTI2MDAsNyArMjYwMyw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJs
b2NrOjpMaW5lQnJlYWtlcjo6bmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29s
CiAgZW5kOgogICAgIGlmIChsQnJlYWsgPT0gcmVzb2x2ZXIucG9zaXRpb24oKSAmJiAoIWxCcmVh
ay5tX29iaiB8fCAhbEJyZWFrLm1fb2JqLT5pc0JSKCkpKSB7CiAgICAgICAgIC8vIHdlIGp1c3Qg
YWRkIGFzIG11Y2ggYXMgcG9zc2libGUKLSAgICAgICAgaWYgKG1fYmxvY2stPnN0eWxlKCktPndo
aXRlU3BhY2UoKSA9PSBQUkUpIHsKKyAgICAgICAgaWYgKGJsb2NrU3R5bGUtPndoaXRlU3BhY2Uo
KSA9PSBQUkUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBEb24ndCByZWFsbHkgdW5kZXJzdGFu
ZCB0aGlzIGNhc2UuCiAgICAgICAgICAgICBpZiAoY3VycmVudC5tX3BvcykgewogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBjYWxsIG1vdmVUbyB3aGljaCB3b3VsZCBjbGVh
ciBtX25leHRCcmVha2FibGVQb3NpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAppbmRleCAxNWViYjU4ZjE2ZTRlMTllMThiM2I2MmIxNjUwMTFhZGFlMWZiOWU2Li5hODli
MTRkOGE4NTJiZTc1YzRiZjU1NjI4ZDZlYmUzYmQ5YjVhZjc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtMjQ4LDEyICsyNDgsMTMgQEAgdm9pZCBSZW5kZXJCb3g6
OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAgY2xlYXJPdmVycmlkZVNpemUoKTsKIAotICAgIGlm
IChzdHlsZSgpICYmIChzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNQZXJjZW50KCkgfHwgc3R5
bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpLmlzUGVyY2VudCgpIHx8IHN0eWxlKCktPmxvZ2ljYWxN
YXhIZWlnaHQoKS5pc1BlcmNlbnQoKSkpCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBz
dHlsZSgpOworICAgIGlmIChzdHlsZVRvVXNlICYmIChzdHlsZVRvVXNlLT5sb2dpY2FsSGVpZ2h0
KCkuaXNQZXJjZW50KCkgfHwgc3R5bGVUb1VzZS0+bG9naWNhbE1pbkhlaWdodCgpLmlzUGVyY2Vu
dCgpIHx8IHN0eWxlVG9Vc2UtPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1BlcmNlbnQoKSkpCiAgICAg
ICAgIFJlbmRlckJsb2NrOjpyZW1vdmVQZXJjZW50SGVpZ2h0RGVzY2VuZGFudCh0aGlzKTsKIAog
ICAgIC8vIElmIHRoaXMgcmVuZGVyZXIgaXMgb3duaW5nIHJlbmRlcmVyIGZvciB0aGUgZnJhbWV2
aWV3J3MgY3VzdG9tIHNjcm9sbGJhcnMsCiAgICAgLy8gd2UgbmVlZCB0byBjbGVhciBpdCBmcm9t
IHRoZSBzY3JvbGxiYXIuIFNlZSB3ZWJraXQgYnVnIDY0NzM3LgotICAgIGlmIChzdHlsZSgpICYm
IHN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUikgJiYgZnJhbWUoKSAmJiBmcmFtZSgp
LT52aWV3KCkpCisgICAgaWYgKHN0eWxlVG9Vc2UgJiYgc3R5bGVUb1VzZS0+aGFzUHNldWRvU3R5
bGUoU0NST0xMQkFSKSAmJiBmcmFtZSgpICYmIGZyYW1lKCktPnZpZXcoKSkKICAgICAgICAgZnJh
bWUoKS0+dmlldygpLT5jbGVhck93bmluZ1JlbmRlcmVyRm9yQ3VzdG9tU2Nyb2xsYmFycyh0aGlz
KTsKIAogICAgIC8vIElmIHRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGZhaWxzLCBsb2dpY2FsSGVp
Z2h0KCkvbG9naWNhbE1pbkhlaWdodCgpLwpAQCAtMzAzLDcgKzMwNCw4IEBAIHZvaWQgUmVuZGVy
Qm94OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWxlKiBuZXdTdHlsCiB7CiAgICAgc19oYWRPdmVyZmxvd0NsaXAgPSBoYXNPdmVyZmxvd0NsaXAo
KTsKIAotICAgIGlmIChzdHlsZSgpKSB7CisgICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gc3R5
bGUoKTsKKyAgICBpZiAob2xkU3R5bGUpIHsKICAgICAgICAgLy8gVGhlIGJhY2tncm91bmQgb2Yg
dGhlIHJvb3QgZWxlbWVudCBvciB0aGUgYm9keSBlbGVtZW50IGNvdWxkIHByb3BhZ2F0ZSB1cCB0
bwogICAgICAgICAvLyB0aGUgY2FudmFzLiAgSnVzdCBkaXJ0eSB0aGUgZW50aXJlIGNhbnZhcyB3
aGVuIG91ciBzdHlsZSBjaGFuZ2VzIHN1YnN0YW50aWFsbHkuCiAgICAgICAgIGlmIChkaWZmID49
IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQgJiYgbm9kZSgpICYmCkBAIC0zMTIsMTMgKzMxNCwxMyBA
QCB2b2lkIFJlbmRlckJveDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bAogICAgICAgICAKICAgICAgICAgLy8gV2hlbiBhIGxh
eW91dCBoaW50IGhhcHBlbnMgYW5kIGFuIG9iamVjdCdzIHBvc2l0aW9uIHN0eWxlIGNoYW5nZXMs
IHdlIGhhdmUgdG8gZG8gYSBsYXlvdXQKICAgICAgICAgLy8gdG8gZGlydHkgdGhlIHJlbmRlciB0
cmVlIHVzaW5nIHRoZSBvbGQgcG9zaXRpb24gdmFsdWUgbm93LgotICAgICAgICBpZiAoZGlmZiA9
PSBTdHlsZURpZmZlcmVuY2VMYXlvdXQgJiYgcGFyZW50KCkgJiYgc3R5bGUoKS0+cG9zaXRpb24o
KSAhPSBuZXdTdHlsZS0+cG9zaXRpb24oKSkgeworICAgICAgICBpZiAoZGlmZiA9PSBTdHlsZURp
ZmZlcmVuY2VMYXlvdXQgJiYgcGFyZW50KCkgJiYgb2xkU3R5bGUtPnBvc2l0aW9uKCkgIT0gbmV3
U3R5bGUtPnBvc2l0aW9uKCkpIHsKICAgICAgICAgICAgIG1hcmtDb250YWluaW5nQmxvY2tzRm9y
TGF5b3V0KCk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBTdGF0aWNQ
b3NpdGlvbikKKyAgICAgICAgICAgIGlmIChvbGRTdHlsZS0+cG9zaXRpb24oKSA9PSBTdGF0aWNQ
b3NpdGlvbikKICAgICAgICAgICAgICAgICByZXBhaW50KCk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChuZXdTdHlsZS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uIHx8IG5ld1N0eWxlLT5w
b3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pCisgICAgICAgICAgICBlbHNlIGlmIChuZXdTdHls
ZS0+aXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAgICAgcGFyZW50KCktPnNldENoaWxkTmVl
ZHNMYXlvdXQodHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoaXNGbG9hdGluZygpICYmICFpc1Bvc2l0
aW9uZWQoKSAmJiAobmV3U3R5bGUtPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbiB8fCBu
ZXdTdHlsZS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKSkKKyAgICAgICAgICAgIGlmIChp
c0Zsb2F0aW5nKCkgJiYgIWlzUG9zaXRpb25lZCgpICYmIG5ld1N0eWxlLT5pc1Bvc2l0aW9uZWQo
KSkKICAgICAgICAgICAgICAgICByZW1vdmVGbG9hdGluZ09yUG9zaXRpb25lZENoaWxkRnJvbUJs
b2NrTGlzdHMoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobmV3U3R5bGUgJiYgaXNCb2R5
KCkpCkBAIC0zMjYsNyArMzI4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlV2lsbENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWwKIAogICAgIGlm
IChGcmFtZVZpZXcgKmZyYW1lVmlldyA9IHZpZXcoKS0+ZnJhbWVWaWV3KCkpIHsKICAgICAgICAg
Ym9vbCBuZXdTdHlsZUlzRml4ZWQgPSBuZXdTdHlsZSAmJiBuZXdTdHlsZS0+cG9zaXRpb24oKSA9
PSBGaXhlZFBvc2l0aW9uOwotICAgICAgICBib29sIG9sZFN0eWxlSXNGaXhlZCA9IHN0eWxlKCkg
JiYgc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOworICAgICAgICBib29sIG9s
ZFN0eWxlSXNGaXhlZCA9IG9sZFN0eWxlICYmIG9sZFN0eWxlLT5wb3NpdGlvbigpID09IEZpeGVk
UG9zaXRpb247CiAgICAgICAgIGlmIChuZXdTdHlsZUlzRml4ZWQgIT0gb2xkU3R5bGVJc0ZpeGVk
KSB7CiAgICAgICAgICAgICBpZiAobmV3U3R5bGVJc0ZpeGVkKQogICAgICAgICAgICAgICAgIGZy
YW1lVmlldy0+YWRkRml4ZWRPYmplY3QoKTsKQEAgLTM0Miw2ICszNDQsNyBAQCB2b2lkIFJlbmRl
ckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZQogewogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5n
ZShkaWZmLCBvbGRTdHlsZSk7CiAKKyAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBzdHlsZSgp
OwogICAgIGlmIChuZWVkc0xheW91dCgpICYmIG9sZFN0eWxlKSB7CiAgICAgICAgIGlmIChvbGRT
dHlsZSAmJiAob2xkU3R5bGUtPmxvZ2ljYWxIZWlnaHQoKS5pc1BlcmNlbnQoKSB8fCBvbGRTdHls
ZS0+bG9naWNhbE1pbkhlaWdodCgpLmlzUGVyY2VudCgpIHx8IG9sZFN0eWxlLT5sb2dpY2FsTWF4
SGVpZ2h0KCkuaXNQZXJjZW50KCkpKQogICAgICAgICAgICAgUmVuZGVyQmxvY2s6OnJlbW92ZVBl
cmNlbnRIZWlnaHREZXNjZW5kYW50KHRoaXMpOwpAQCAtMzQ5LDIwICszNTIsMjAgQEAgdm9pZCBS
ZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgLy8gTm9ybWFsbHkgd2UgY2FuIGRvIG9wdGltaXpl
ZCBwb3NpdGlvbmluZyBsYXlvdXQgZm9yIGFic29sdXRlL2ZpeGVkIHBvc2l0aW9uZWQgb2JqZWN0
cy4gVGhlcmUgaXMgb25lIHNwZWNpYWwgY2FzZSwgaG93ZXZlciwgd2hpY2ggaXMKICAgICAgICAg
Ly8gd2hlbiB0aGUgcG9zaXRpb25lZCBvYmplY3QncyBtYXJnaW4tYmVmb3JlIGlzIGNoYW5nZWQu
IEluIHRoaXMgY2FzZSB0aGUgcGFyZW50IGhhcyB0byBnZXQgYSBsYXlvdXQgaW4gb3JkZXIgdG8g
cnVuIG1hcmdpbiBjb2xsYXBzaW5nCiAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgbmV3IHN0
YXRpYyBwb3NpdGlvbi4KLSAgICAgICAgaWYgKGlzUG9zaXRpb25lZCgpICYmIHN0eWxlKCktPmhh
c1N0YXRpY0Jsb2NrUG9zaXRpb24oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgJiYgb2xkU3R5
bGUtPm1hcmdpbkJlZm9yZSgpICE9IHN0eWxlKCktPm1hcmdpbkJlZm9yZSgpCisgICAgICAgIGlm
IChpc1Bvc2l0aW9uZWQoKSAmJiBuZXdTdHlsZS0+aGFzU3RhdGljQmxvY2tQb3NpdGlvbihpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKSAmJiBvbGRTdHlsZS0+bWFyZ2luQmVmb3JlKCkgIT0gbmV3
U3R5bGUtPm1hcmdpbkJlZm9yZSgpCiAgICAgICAgICAgICAmJiBwYXJlbnQoKSAmJiAhcGFyZW50
KCktPm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKICAgICAgICAgICAgIHBhcmVudCgpLT5zZXRD
aGlsZE5lZWRzTGF5b3V0KHRydWUpOwogICAgIH0KIAogICAgIC8vIElmIG91ciB6b29tIGZhY3Rv
ciBjaGFuZ2VzIGFuZCB3ZSBoYXZlIGEgZGVmaW5lZCBzY3JvbGxMZWZ0L1RvcCwgd2UgbmVlZCB0
byBhZGp1c3QgdGhhdCB2YWx1ZSBpbnRvIHRoZQogICAgIC8vIG5ldyB6b29tZWQgY29vcmRpbmF0
ZSBzcGFjZS4KLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgb2xkU3R5bGUgJiYgc3R5bGUo
KSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkgeworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBvbGRTdHlsZSAmJiBuZXdTdHlsZSAm
JiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLT5lZmZlY3RpdmVab29tKCkp
IHsKICAgICAgICAgaWYgKGludCBsZWZ0ID0gbGF5ZXIoKS0+c2Nyb2xsWE9mZnNldCgpKSB7Ci0g
ICAgICAgICAgICBsZWZ0ID0gKGxlZnQgLyBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSAqIHN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGxlZnQgPSAobGVmdCAvIG9sZFN0
eWxlLT5lZmZlY3RpdmVab29tKCkpICogbmV3U3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKICAgICAg
ICAgICAgIGxheWVyKCktPnNjcm9sbFRvWE9mZnNldChsZWZ0KTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaW50IHRvcCA9IGxheWVyKCktPnNjcm9sbFlPZmZzZXQoKSkgewotICAgICAgICAgICAg
dG9wID0gKHRvcCAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkpICogc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpOworICAgICAgICAgICAgdG9wID0gKHRvcCAvIG9sZFN0eWxlLT5lZmZlY3RpdmVa
b29tKCkpICogbmV3U3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKICAgICAgICAgICAgIGxheWVyKCkt
PnNjcm9sbFRvWU9mZnNldCh0b3ApOwogICAgICAgICB9CiAgICAgfQpAQCAtMzcyLDI1ICszNzUs
MjUgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAogICAgIC8vIFNldCB0aGUgdGV4dCBjb2xv
ciBpZiB3ZSdyZSB0aGUgYm9keS4KICAgICBpZiAoaXNCb2R5UmVuZGVyZXIpCi0gICAgICAgIGRv
Y3VtZW50KCktPnNldFRleHRDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlDb2xvcikpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRUZXh0Q29sb3IobmV3U3R5
bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSk7CiAKICAgICBpZiAo
aXNSb290UmVuZGVyZXIgfHwgaXNCb2R5UmVuZGVyZXIpIHsKICAgICAgICAgLy8gUHJvcGFnYXRl
IHRoZSBuZXcgd3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rpb24gdXAgdG8gdGhlIFJlbmRlclZpZXcu
CiAgICAgICAgIFJlbmRlclZpZXcqIHZpZXdSZW5kZXJlciA9IHZpZXcoKTsKICAgICAgICAgUmVu
ZGVyU3R5bGUqIHZpZXdTdHlsZSA9IHZpZXdSZW5kZXJlci0+c3R5bGUoKTsKLSAgICAgICAgaWYg
KHZpZXdTdHlsZS0+ZGlyZWN0aW9uKCkgIT0gc3R5bGUoKS0+ZGlyZWN0aW9uKCkgJiYgKGlzUm9v
dFJlbmRlcmVyIHx8ICFkb2N1bWVudCgpLT5kaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudCgp
KSkgewotICAgICAgICAgICAgdmlld1N0eWxlLT5zZXREaXJlY3Rpb24oc3R5bGUoKS0+ZGlyZWN0
aW9uKCkpOworICAgICAgICBpZiAodmlld1N0eWxlLT5kaXJlY3Rpb24oKSAhPSBuZXdTdHlsZS0+
ZGlyZWN0aW9uKCkgJiYgKGlzUm9vdFJlbmRlcmVyIHx8ICFkb2N1bWVudCgpLT5kaXJlY3Rpb25T
ZXRPbkRvY3VtZW50RWxlbWVudCgpKSkgeworICAgICAgICAgICAgdmlld1N0eWxlLT5zZXREaXJl
Y3Rpb24obmV3U3R5bGUtPmRpcmVjdGlvbigpKTsKICAgICAgICAgICAgIGlmIChpc0JvZHlSZW5k
ZXJlcikKLSAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+c2V0RGlyZWN0aW9uKHN0eWxlKCktPmRpcmVjdGlvbigpKTsKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+c2V0RGlyZWN0aW9uKG5ld1N0eWxlLT5kaXJlY3Rpb24oKSk7CiAgICAgICAgICAg
ICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICh2aWV3U3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS0+d3JpdGluZ01vZGUo
KSAmJiAoaXNSb290UmVuZGVyZXIgfHwgIWRvY3VtZW50KCktPndyaXRpbmdNb2RlU2V0T25Eb2N1
bWVudEVsZW1lbnQoKSkpIHsKLSAgICAgICAgICAgIHZpZXdTdHlsZS0+c2V0V3JpdGluZ01vZGUo
c3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7Ci0gICAgICAgICAgICB2aWV3UmVuZGVyZXItPnNldEhv
cml6b250YWxXcml0aW5nTW9kZShzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsK
KyAgICAgICAgaWYgKHZpZXdTdHlsZS0+d3JpdGluZ01vZGUoKSAhPSBuZXdTdHlsZS0+d3JpdGlu
Z01vZGUoKSAmJiAoaXNSb290UmVuZGVyZXIgfHwgIWRvY3VtZW50KCktPndyaXRpbmdNb2RlU2V0
T25Eb2N1bWVudEVsZW1lbnQoKSkpIHsKKyAgICAgICAgICAgIHZpZXdTdHlsZS0+c2V0V3JpdGlu
Z01vZGUobmV3U3R5bGUtPndyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgdmlld1JlbmRlcmVy
LT5zZXRIb3Jpem9udGFsV3JpdGluZ01vZGUobmV3U3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpOwogICAgICAgICAgICAgaWYgKGlzQm9keVJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnNl
dFdyaXRpbmdNb2RlKHN0eWxlKCktPndyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgIGRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJlcigpLT5zZXRIb3Jpem9udGFsV3Jp
dGluZ01vZGUoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkt
PnNldFdyaXRpbmdNb2RlKG5ld1N0eWxlLT53cml0aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAg
ICBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+c2V0SG9yaXpvbnRh
bFdyaXRpbmdNb2RlKG5ld1N0eWxlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygp
OwogICAgICAgICB9CkBAIC00MDMsNiArNDA2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnVwZGF0ZUJv
eE1vZGVsSW5mb0Zyb21TdHlsZSgpCiB7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnVwZGF0
ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpOwogCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2Ug
PSBzdHlsZSgpOwogICAgIGJvb2wgaXNSb290T2JqZWN0ID0gaXNSb290KCk7CiAgICAgYm9vbCBp
c1ZpZXdPYmplY3QgPSBpc1JlbmRlclZpZXcoKTsKIApAQCAtNDEwLDExICs0MTQsMTEgQEAgdm9p
ZCBSZW5kZXJCb3g6OnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpCiAgICAgaWYgKGlzUm9v
dE9iamVjdCB8fCBpc1ZpZXdPYmplY3QpCiAgICAgICAgIHNldEhhc0JveERlY29yYXRpb25zKHRy
dWUpOwogCi0gICAgc2V0UG9zaXRpb25lZChzdHlsZSgpLT5pc1Bvc2l0aW9uZWQoKSk7Ci0gICAg
c2V0RmxvYXRpbmcoc3R5bGUoKS0+aXNGbG9hdGluZygpICYmICghaXNQb3NpdGlvbmVkKCkgfHwg
c3R5bGUoKS0+ZmxvYXRpbmcoKSA9PSBQb3NpdGlvbmVkRmxvYXQpKTsKKyAgICBzZXRQb3NpdGlv
bmVkKHN0eWxlVG9Vc2UtPmlzUG9zaXRpb25lZCgpKTsKKyAgICBzZXRGbG9hdGluZyhzdHlsZVRv
VXNlLT5pc0Zsb2F0aW5nKCkgJiYgKCFpc1Bvc2l0aW9uZWQoKSB8fCBzdHlsZVRvVXNlLT5mbG9h
dGluZygpID09IFBvc2l0aW9uZWRGbG9hdCkpOwogCiAgICAgLy8gV2UgYWxzbyBoYW5kbGUgPGJv
ZHk+IGFuZCA8aHRtbD4sIHdob3NlIG92ZXJmbG93IGFwcGxpZXMgdG8gdGhlIHZpZXdwb3J0Lgot
ICAgIGlmIChzdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSAmJiAhaXNSb290T2JqZWN0
ICYmIChpc1JlbmRlckJsb2NrKCkgfHwgaXNUYWJsZVJvdygpIHx8IGlzVGFibGVTZWN0aW9uKCkp
KSB7CisgICAgaWYgKHN0eWxlVG9Vc2UtPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFICYmICFpc1Jv
b3RPYmplY3QgJiYgKGlzUmVuZGVyQmxvY2soKSB8fCBpc1RhYmxlUm93KCkgfHwgaXNUYWJsZVNl
Y3Rpb24oKSkpIHsKICAgICAgICAgYm9vbCBib3hIYXNPdmVyZmxvd0NsaXAgPSB0cnVlOwogICAg
ICAgICBpZiAoaXNCb2R5KCkpIHsKICAgICAgICAgICAgIC8vIE92ZXJmbG93IG9uIHRoZSBib2R5
IGNhbiBwcm9wYWdhdGUgdG8gdGhlIHZpZXdwb3J0IHVuZGVyIHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucy4KQEAgLTQzNyw4ICs0NDEsOCBAQCB2b2lkIFJlbmRlckJveDo6dXBkYXRlQm94TW9kZWxJ
bmZvRnJvbVN0eWxlKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIHNldEhhc1RyYW5zZm9ybShz
dHlsZSgpLT5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSk7Ci0gICAgc2V0SGFzUmVmbGVj
dGlvbihzdHlsZSgpLT5ib3hSZWZsZWN0KCkpOworICAgIHNldEhhc1RyYW5zZm9ybShzdHlsZVRv
VXNlLT5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSk7CisgICAgc2V0SGFzUmVmbGVjdGlv
bihzdHlsZVRvVXNlLT5ib3hSZWZsZWN0KCkpOwogfQogCiB2b2lkIFJlbmRlckJveDo6bGF5b3V0
KCkKQEAgLTE0ODcsMTUgKzE0OTEsMTYgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9y
UmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGEKICAgICAv
LyBSZW5kZXJWaWV3Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQgdGhlbiBjb252ZXJ0cyB0aGUgcmVj
dCB0byBwaHlzaWNhbCBjb29yZGluYXRlcy4gIFdlIGFsc28gY29udmVydCB0bwogICAgIC8vIHBo
eXNpY2FsIHdoZW4gd2UgaGl0IGEgcmVwYWludENvbnRhaW5lciBib3VuZGFyeS4gIFRoZXJlZm9y
ZSB0aGUgZmluYWwgcmVjdCByZXR1cm5lZCBpcyBhbHdheXMgaW4gdGhlCiAgICAgLy8gcGh5c2lj
YWwgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgcmVwYWludENvbnRhaW5lci4KKyAgICBSZW5kZXJT
dHlsZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7CiAgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3
KCkpIHsKICAgICAgICAgLy8gTGF5b3V0U3RhdGUgaXMgb25seSB2YWxpZCBmb3Igcm9vdC1yZWxh
dGl2ZSwgbm9uLWZpeGVkIHBvc2l0aW9uIHJlcGFpbnRpbmcKLSAgICAgICAgaWYgKHYtPmxheW91
dFN0YXRlRW5hYmxlZCgpICYmICFyZXBhaW50Q29udGFpbmVyICYmIHN0eWxlKCktPnBvc2l0aW9u
KCkgIT0gRml4ZWRQb3NpdGlvbikgeworICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFibGVk
KCkgJiYgIXJlcGFpbnRDb250YWluZXIgJiYgc3R5bGVUb1VzZS0+cG9zaXRpb24oKSAhPSBGaXhl
ZFBvc2l0aW9uKSB7CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2LT5s
YXlvdXRTdGF0ZSgpOwogCiAgICAgICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigpLT50cmFu
c2Zvcm0oKSkKICAgICAgICAgICAgICAgICByZWN0ID0gbGF5ZXIoKS0+dHJhbnNmb3JtKCktPm1h
cFJlY3QocmVjdCk7CiAKLSAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJl
bGF0aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKKyAgICAgICAgICAgIGlmIChzdHlsZVRvVXNlLT5w
b3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAg
ICByZWN0Lm1vdmUobGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpKTsKIAogICAgICAg
ICAgICAgcmVjdC5tb3ZlQnkobG9jYXRpb24oKSk7CkBAIC0xNTI0LDEyICsxNTI5LDEyIEBAIHZv
aWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIExhCiAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShyZWN0KTsK
IAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBpZiAoc3R5bGUoKS0+aGFzRmlsdGVyT3V0
c2V0cygpKSB7CisgICAgaWYgKHN0eWxlVG9Vc2UtPmhhc0ZpbHRlck91dHNldHMoKSkgewogICAg
ICAgICBMYXlvdXRVbml0IHRvcE91dHNldDsKICAgICAgICAgTGF5b3V0VW5pdCByaWdodE91dHNl
dDsKICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21PdXRzZXQ7CiAgICAgICAgIExheW91dFVuaXQg
bGVmdE91dHNldDsKLSAgICAgICAgc3R5bGUoKS0+ZmlsdGVyKCkuZ2V0T3V0c2V0cyh0b3BPdXRz
ZXQsIHJpZ2h0T3V0c2V0LCBib3R0b21PdXRzZXQsIGxlZnRPdXRzZXQpOworICAgICAgICBzdHls
ZVRvVXNlLT5maWx0ZXIoKS5nZXRPdXRzZXRzKHRvcE91dHNldCwgcmlnaHRPdXRzZXQsIGJvdHRv
bU91dHNldCwgbGVmdE91dHNldCk7CiAgICAgICAgIHJlY3QubW92ZSgtbGVmdE91dHNldCwgLXRv
cE91dHNldCk7CiAgICAgICAgIHJlY3QuZXhwYW5kKGxlZnRPdXRzZXQgKyByaWdodE91dHNldCwg
dG9wT3V0c2V0ICsgYm90dG9tT3V0c2V0KTsKICAgICB9CkBAIC0xNTM4LDcgKzE1NDMsNyBAQCB2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBMYQogICAgIExheW91dFBvaW50IHRvcExlZnQgPSByZWN0Lmxv
Y2F0aW9uKCk7CiAgICAgdG9wTGVmdC5tb3ZlKHgoKSwgeSgpKTsKIAotICAgIEVQb3NpdGlvbiBw
b3NpdGlvbiA9IHN0eWxlKCktPnBvc2l0aW9uKCk7CisgICAgRVBvc2l0aW9uIHBvc2l0aW9uID0g
c3R5bGVUb1VzZS0+cG9zaXRpb24oKTsKIAogICAgIC8vIFdlIGFyZSBub3cgaW4gb3VyIHBhcmVu
dCBjb250YWluZXIncyBjb29yZGluYXRlIHNwYWNlLiAgQXBwbHkgb3VyIHRyYW5zZm9ybSB0byBv
YnRhaW4gYSBib3VuZGluZyBib3gKICAgICAvLyBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0ZSBz
cGFjZSB0aGF0IGVuY2xvc2VzIHVzLgpAQCAtMTY0OSw3ICsxNjU0LDggQEAgdm9pZCBSZW5kZXJC
b3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihSZW5kZXJSZWdpb24qIHJlZ2lvbiwgTGF5
b3V0VW5pdCBvZmYKICAgICBib29sIHN0cmV0Y2hpbmcgPSAocGFyZW50KCktPnN0eWxlKCktPmJv
eEFsaWduKCkgPT0gQlNUUkVUQ0gpOwogICAgIGJvb2wgdHJlYXRBc1JlcGxhY2VkID0gc2hvdWxk
Q29tcHV0ZVNpemVBc1JlcGxhY2VkKCkgJiYgKCFpblZlcnRpY2FsQm94IHx8ICFzdHJldGNoaW5n
KTsKIAotICAgIExlbmd0aCBsb2dpY2FsV2lkdGhMZW5ndGggPSAodHJlYXRBc1JlcGxhY2VkKSA/
IExlbmd0aChjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoKSwgRml4ZWQpIDogc3R5bGUoKS0+
bG9naWNhbFdpZHRoKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwor
ICAgIExlbmd0aCBsb2dpY2FsV2lkdGhMZW5ndGggPSAodHJlYXRBc1JlcGxhY2VkKSA/IExlbmd0
aChjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoKSwgRml4ZWQpIDogc3R5bGVUb1VzZS0+bG9n
aWNhbFdpZHRoKCk7CiAKICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsK
ICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IG1heDxMYXlvdXRVbml0Pigw
LCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5SZWdpb24ocmVnaW9uLCBv
ZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKSk7CkBAIC0xNjYwLDggKzE2NjYsOCBAQCB2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKFJlbmRlclJlZ2lvbiog
cmVnaW9uLCBMYXlvdXRVbml0IG9mZgogICAgIAogICAgIGlmIChpc0lubGluZSgpICYmICFpc0lu
bGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpKSB7CiAgICAgICAgIC8vIGp1c3QgY2FsY3VsYXRlIG1h
cmdpbnMKLSAgICAgICAgc2V0TWFyZ2luU3RhcnQoc3R5bGUoKS0+bWFyZ2luU3RhcnQoKS5jYWxj
TWluVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKSk7Ci0gICAgICAgIHNldE1hcmdpbkVuZChz
dHlsZSgpLT5tYXJnaW5FbmQoKS5jYWxjTWluVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKSk7
CisgICAgICAgIHNldE1hcmdpblN0YXJ0KHN0eWxlVG9Vc2UtPm1hcmdpblN0YXJ0KCkuY2FsY01p
blZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCkpOworICAgICAgICBzZXRNYXJnaW5FbmQoc3R5
bGVUb1VzZS0+bWFyZ2luRW5kKCkuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCkp
OwogICAgICAgICBpZiAodHJlYXRBc1JlcGxhY2VkKQogICAgICAgICAgICAgc2V0TG9naWNhbFdp
ZHRoKG1heDxMYXlvdXRVbml0Pihsb2dpY2FsV2lkdGhMZW5ndGguY2FsY0Zsb2F0VmFsdWUoMCkg
KyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCksIG1pblByZWZlcnJlZExvZ2ljYWxXaWR0
aCgpKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2NzUsMTEgKzE2ODEsMTEgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihSZW5kZXJSZWdpb24qIHJlZ2lvbiwg
TGF5b3V0VW5pdCBvZmYKICAgICAgICAgc2V0TG9naWNhbFdpZHRoKGNvbXB1dGVMb2dpY2FsV2lk
dGhVc2luZyhMb2dpY2FsV2lkdGgsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24pKTsK
IAogICAgICAgICAvLyBDYWxjdWxhdGUgTWF4TG9naWNhbFdpZHRoCi0gICAgICAgIGlmICghc3R5
bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBpZiAoIXN0
eWxlVG9Vc2UtPmxvZ2ljYWxNYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAg
IExheW91dFVuaXQgbWF4TG9naWNhbFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKE1h
eExvZ2ljYWxXaWR0aCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbik7CiAgICAgICAg
ICAgICBpZiAobG9naWNhbFdpZHRoKCkgPiBtYXhMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAg
ICAgICBzZXRMb2dpY2FsV2lkdGgobWF4TG9naWNhbFdpZHRoKTsKLSAgICAgICAgICAgICAgICBs
b2dpY2FsV2lkdGhMZW5ndGggPSBzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICBsb2dpY2FsV2lkdGhMZW5ndGggPSBzdHlsZVRvVXNlLT5sb2dpY2FsTWF4V2lkdGgo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xNjg3LDcgKzE2OTMsNyBAQCB2b2lk
IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aEluUmVnaW9uKFJlbmRlclJlZ2lvbiogcmVn
aW9uLCBMYXlvdXRVbml0IG9mZgogICAgICAgICBMYXlvdXRVbml0IG1pbkxvZ2ljYWxXaWR0aCA9
IGNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZyhNaW5Mb2dpY2FsV2lkdGgsIGNvbnRhaW5lcldpZHRo
SW5JbmxpbmVEaXJlY3Rpb24pOwogICAgICAgICBpZiAobG9naWNhbFdpZHRoKCkgPCBtaW5Mb2dp
Y2FsV2lkdGgpIHsKICAgICAgICAgICAgIHNldExvZ2ljYWxXaWR0aChtaW5Mb2dpY2FsV2lkdGgp
OwotICAgICAgICAgICAgbG9naWNhbFdpZHRoTGVuZ3RoID0gc3R5bGUoKS0+bG9naWNhbE1pbldp
ZHRoKCk7CisgICAgICAgICAgICBsb2dpY2FsV2lkdGhMZW5ndGggPSBzdHlsZVRvVXNlLT5sb2dp
Y2FsTWluV2lkdGgoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTY5OSw4ICsxNzA1LDggQEAg
dm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lvbihSZW5kZXJSZWdpb24q
IHJlZ2lvbiwgTGF5b3V0VW5pdCBvZmYKIAogICAgIC8vIE1hcmdpbiBjYWxjdWxhdGlvbnMuCiAg
ICAgaWYgKGxvZ2ljYWxXaWR0aExlbmd0aC5pc0F1dG8oKSB8fCBoYXNQZXJwZW5kaWN1bGFyQ29u
dGFpbmluZ0Jsb2NrKSB7Ci0gICAgICAgIHNldE1hcmdpblN0YXJ0KHN0eWxlKCktPm1hcmdpblN0
YXJ0KCkuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCkpOwotICAgICAgICBzZXRN
YXJnaW5FbmQoc3R5bGUoKS0+bWFyZ2luRW5kKCkuY2FsY01pblZhbHVlKGNvbnRhaW5lckxvZ2lj
YWxXaWR0aCkpOworICAgICAgICBzZXRNYXJnaW5TdGFydChzdHlsZVRvVXNlLT5tYXJnaW5TdGFy
dCgpLmNhbGNNaW5WYWx1ZShjb250YWluZXJMb2dpY2FsV2lkdGgpKTsKKyAgICAgICAgc2V0TWFy
Z2luRW5kKHN0eWxlVG9Vc2UtPm1hcmdpbkVuZCgpLmNhbGNNaW5WYWx1ZShjb250YWluZXJMb2dp
Y2FsV2lkdGgpKTsKICAgICB9IGVsc2UKICAgICAgICAgY29tcHV0ZUlubGluZURpcmVjdGlvbk1h
cmdpbnMoY2IsIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgbG9naWNhbFdpZHRoKCkpOwogCkBAIC0x
NzEyLDE3ICsxNzE4LDE4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5S
ZWdpb24oUmVuZGVyUmVnaW9uKiByZWdpb24sIExheW91dFVuaXQgb2ZmCiBMYXlvdXRVbml0IFJl
bmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKExvZ2ljYWxXaWR0aFR5cGUgd2lkdGhU
eXBlLCBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkKIHsKICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aFJlc3VsdCA9IGxvZ2ljYWxXaWR0aCgpOworICAgIFJlbmRlclN0eWxlKiBz
dHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICBMZW5ndGggbG9naWNhbFdpZHRoOwogICAgIGlmICh3
aWR0aFR5cGUgPT0gTG9naWNhbFdpZHRoKQotICAgICAgICBsb2dpY2FsV2lkdGggPSBzdHlsZSgp
LT5sb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgbG9naWNhbFdpZHRoID0gc3R5bGVUb1VzZS0+bG9n
aWNhbFdpZHRoKCk7CiAgICAgZWxzZSBpZiAod2lkdGhUeXBlID09IE1pbkxvZ2ljYWxXaWR0aCkK
LSAgICAgICAgbG9naWNhbFdpZHRoID0gc3R5bGUoKS0+bG9naWNhbE1pbldpZHRoKCk7CisgICAg
ICAgIGxvZ2ljYWxXaWR0aCA9IHN0eWxlVG9Vc2UtPmxvZ2ljYWxNaW5XaWR0aCgpOwogICAgIGVs
c2UKLSAgICAgICAgbG9naWNhbFdpZHRoID0gc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCk7Cisg
ICAgICAgIGxvZ2ljYWxXaWR0aCA9IHN0eWxlVG9Vc2UtPmxvZ2ljYWxNYXhXaWR0aCgpOwogCiAg
ICAgaWYgKGxvZ2ljYWxXaWR0aC5pc0ludHJpbnNpY09yQXV0bygpKSB7Ci0gICAgICAgIExheW91
dFVuaXQgbWFyZ2luU3RhcnQgPSBzdHlsZSgpLT5tYXJnaW5TdGFydCgpLmNhbGNNaW5WYWx1ZShh
dmFpbGFibGVMb2dpY2FsV2lkdGgpOwotICAgICAgICBMYXlvdXRVbml0IG1hcmdpbkVuZCA9IHN0
eWxlKCktPm1hcmdpbkVuZCgpLmNhbGNNaW5WYWx1ZShhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwor
ICAgICAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0ID0gc3R5bGVUb1VzZS0+bWFyZ2luU3RhcnQo
KS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICAgICAgTGF5b3V0VW5p
dCBtYXJnaW5FbmQgPSBzdHlsZVRvVXNlLT5tYXJnaW5FbmQoKS5jYWxjTWluVmFsdWUoYXZhaWxh
YmxlTG9naWNhbFdpZHRoKTsKICAgICAgICAgbG9naWNhbFdpZHRoUmVzdWx0ID0gYXZhaWxhYmxl
TG9naWNhbFdpZHRoIC0gbWFyZ2luU3RhcnQgLSBtYXJnaW5FbmQ7CiAKICAgICAgICAgaWYgKHNp
emVzVG9JbnRyaW5zaWNMb2dpY2FsV2lkdGgod2lkdGhUeXBlKSkgewpAQCAtMTk1NSwxMiArMTk2
MiwxMyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQogICAgICAgICAv
LyBncmFiIG91ciBjYWNoZWQgZmxleGlibGUgaGVpZ2h0LgogICAgICAgICAvLyBGSVhNRTogQWNj
b3VudCBmb3IgYmxvY2stZmxvdyBpbiBmbGV4aWJsZSBib3hlcy4KICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NDE4CisgICAgICAgIFJlbmRlclN0
eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKICAgICAgICAgaWYgKGhhc092ZXJyaWRlSGVpZ2h0
KCkgJiYgcGFyZW50KCktPmlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkpCiAgICAg
ICAgICAgICBoID0gTGVuZ3RoKG92ZXJyaWRlSGVpZ2h0KCkgLSBib3JkZXJBbmRQYWRkaW5nTG9n
aWNhbEhlaWdodCgpLCBGaXhlZCk7CiAgICAgICAgIGVsc2UgaWYgKHRyZWF0QXNSZXBsYWNlZCkK
ICAgICAgICAgICAgIGggPSBMZW5ndGgoY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpLCBG
aXhlZCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaCA9IHN0eWxlKCktPmxvZ2ljYWxI
ZWlnaHQoKTsKKyAgICAgICAgICAgIGggPSBzdHlsZVRvVXNlLT5sb2dpY2FsSGVpZ2h0KCk7CiAg
ICAgICAgICAgICBjaGVja01pbk1heEhlaWdodCA9IHRydWU7CiAgICAgICAgIH0KIApAQCAtMTk3
NSwxMiArMTk4MywxMiBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQog
CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVzdWx0OwogICAgICAgICBpZiAoY2hlY2tNaW5N
YXhIZWlnaHQpIHsKLSAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGNvbXB1dGVMb2dpY2FsSGVp
Z2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgIGhlaWdodFJl
c3VsdCA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGVUb1VzZS0+bG9naWNhbEhlaWdo
dCgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgPCAwIG9yIHJvdWdobHlFcXVhbHMgd2hl
biB3ZSBtb3ZlIHRvIGZsb2F0LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY2MTQ4CiAgICAgICAgICAgICBpZiAoaGVpZ2h0UmVzdWx0ID09IC0xKQogICAgICAg
ICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIExh
eW91dFVuaXQgbWluSCA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNh
bE1pbkhlaWdodCgpKTsgLy8gTGVhdmUgYXMgLTEgaWYgdW5zZXQuCi0gICAgICAgICAgICBMYXlv
dXRVbml0IG1heEggPSBzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/
IGhlaWdodFJlc3VsdCA6IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNh
bE1heEhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgbWluSCA9IGNvbXB1dGVMb2dp
Y2FsSGVpZ2h0VXNpbmcoc3R5bGVUb1VzZS0+bG9naWNhbE1pbkhlaWdodCgpKTsgLy8gTGVhdmUg
YXMgLTEgaWYgdW5zZXQuCisgICAgICAgICAgICBMYXlvdXRVbml0IG1heEggPSBzdHlsZVRvVXNl
LT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IGhlaWdodFJlc3VsdCA6IGNvbXB1
dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGVUb1VzZS0+bG9naWNhbE1heEhlaWdodCgpKTsKICAg
ICAgICAgICAgIGlmIChtYXhIID09IC0xKQogICAgICAgICAgICAgICAgIG1heEggPSBoZWlnaHRS
ZXN1bHQ7CiAgICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBtaW4obWF4SCwgaGVpZ2h0UmVzdWx0
KTsKQEAgLTIwNjMsMTEgKzIwNzEsMTMgQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbXB1dGVQ
ZXJjZW50YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgmIGhlaWdodCkKICAgICAgICAgY2It
PmFkZFBlcmNlbnRIZWlnaHREZXNjZW5kYW50KHRoaXMpOwogICAgIH0KIAorICAgIFJlbmRlclN0
eWxlKiBjYnN0eWxlID0gY2ItPnN0eWxlKCk7CisKICAgICAvLyBBIHBvc2l0aW9uZWQgZWxlbWVu
dCB0aGF0IHNwZWNpZmllZCBib3RoIHRvcC9ib3R0b20gb3IgdGhhdCBzcGVjaWZpZXMgaGVpZ2h0
IHNob3VsZCBiZSB0cmVhdGVkIGFzIHRob3VnaCBpdCBoYXMgYSBoZWlnaHQKICAgICAvLyBleHBs
aWNpdGx5IHNwZWNpZmllZCB0aGF0IGNhbiBiZSB1c2VkIGZvciBhbnkgcGVyY2VudGFnZSBjb21w
dXRhdGlvbnMuCiAgICAgLy8gRklYTUU6IFdlIGNhbid0IGp1c3QgY2hlY2sgdG9wL2JvdHRvbSBo
ZXJlLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjUw
MAotICAgIGJvb2wgaXNQb3NpdGlvbmVkV2l0aFNwZWNpZmllZEhlaWdodCA9IGNiLT5pc1Bvc2l0
aW9uZWQoKSAmJiAoIWNiLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgfHwgKCFj
Yi0+c3R5bGUoKS0+dG9wKCkuaXNBdXRvKCkgJiYgIWNiLT5zdHlsZSgpLT5ib3R0b20oKS5pc0F1
dG8oKSkpOworICAgIGJvb2wgaXNQb3NpdGlvbmVkV2l0aFNwZWNpZmllZEhlaWdodCA9IGNiLT5p
c1Bvc2l0aW9uZWQoKSAmJiAoIWNic3R5bGUtPmxvZ2ljYWxIZWlnaHQoKS5pc0F1dG8oKSB8fCAo
IWNic3R5bGUtPnRvcCgpLmlzQXV0bygpICYmICFjYnN0eWxlLT5ib3R0b20oKS5pc0F1dG8oKSkp
OwogCiAgICAgYm9vbCBpbmNsdWRlQm9yZGVyUGFkZGluZyA9IGlzVGFibGUoKTsKIApAQCAtMjA5
NSwxMSArMjEwNSwxMSBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VM
b2dpY2FsSGVpZ2h0KGNvbnN0IExlbmd0aCYgaGVpZ2h0KQogICAgIH0KICAgICAvLyBPdGhlcndp
c2Ugd2Ugb25seSB1c2Ugb3VyIHBlcmNlbnRhZ2UgaGVpZ2h0IGlmIG91ciBjb250YWluaW5nIGJs
b2NrIGhhZCBhIHNwZWNpZmllZAogICAgIC8vIGhlaWdodC4KLSAgICBlbHNlIGlmIChjYi0+c3R5
bGUoKS0+bG9naWNhbEhlaWdodCgpLmlzRml4ZWQoKSkKLSAgICAgICAgcmVzdWx0ID0gY2ItPmNv
bXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChjYi0+c3R5bGUoKS0+bG9naWNhbEhlaWdodCgp
LnZhbHVlKCkpOwotICAgIGVsc2UgaWYgKGNiLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNQ
ZXJjZW50KCkgJiYgIWlzUG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQpIHsKKyAgICBlbHNl
IGlmIChjYnN0eWxlLT5sb2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgpKQorICAgICAgICByZXN1bHQg
PSBjYi0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGNic3R5bGUtPmxvZ2ljYWxIZWln
aHQoKS52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChjYnN0eWxlLT5sb2dpY2FsSGVpZ2h0KCkuaXNQ
ZXJjZW50KCkgJiYgIWlzUG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQpIHsKICAgICAgICAg
Ly8gV2UgbmVlZCB0byByZWN1ciBhbmQgY29tcHV0ZSB0aGUgcGVyY2VudGFnZSBoZWlnaHQgZm9y
IG91ciBjb250YWluaW5nIGJsb2NrLgotICAgICAgICByZXN1bHQgPSBjYi0+Y29tcHV0ZVBlcmNl
bnRhZ2VMb2dpY2FsSGVpZ2h0KGNiLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkpOworICAgICAg
ICByZXN1bHQgPSBjYi0+Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNic3R5bGUtPmxv
Z2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBVc2UgPCAwIG9yIHJvdWdobHlFcXVh
bHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY2MTQ4CiAgICAgICAgIGlmIChyZXN1bHQgIT0gLTEpCiAgICAgICAgICAg
ICByZXN1bHQgPSBjYi0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KHJlc3VsdCk7CkBA
IC0yODA2LDE1ICsyODE2LDE2IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWxIZWlnaHQoKQogICAgIGNvbnN0IExheW91dFVuaXQgY29udGFpbmVyTG9naWNhbEhlaWdo
dCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkKGNvbnRhaW5lckJs
b2NrKTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KTsKLSAgICBib29sIGlzRmxpcHBlZCA9IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIGJvb2wg
aXNGbGlwcGVkID0gc3R5bGVUb1VzZS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKTsKICAg
ICBjb25zdCBMYXlvdXRVbml0IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgY29uc3QgTGVuZ3RoIG1hcmdpbkJlZm9yZSA9IHN0eWxlKCkt
Pm1hcmdpbkJlZm9yZSgpOwotICAgIGNvbnN0IExlbmd0aCBtYXJnaW5BZnRlciA9IHN0eWxlKCkt
Pm1hcmdpbkFmdGVyKCk7CisgICAgY29uc3QgTGVuZ3RoIG1hcmdpbkJlZm9yZSA9IHN0eWxlVG9V
c2UtPm1hcmdpbkJlZm9yZSgpOworICAgIGNvbnN0IExlbmd0aCBtYXJnaW5BZnRlciA9IHN0eWxl
VG9Vc2UtPm1hcmdpbkFmdGVyKCk7CiAgICAgTGF5b3V0VW5pdCYgbWFyZ2luQmVmb3JlQWxpYXMg
PSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVkID8gbV9tYXJnaW5Cb3R0b20gOiBtX21hcmdpblRv
cCkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5SaWdodDogbV9tYXJnaW5MZWZ0KTsKICAgICBMYXlv
dXRVbml0JiBtYXJnaW5BZnRlckFsaWFzID0gaXNIb3Jpem9udGFsID8gKGlzRmxpcHBlZCA/IG1f
bWFyZ2luVG9wIDogbV9tYXJnaW5Cb3R0b20pIDogKGlzRmxpcHBlZCA/IG1fbWFyZ2luTGVmdDog
bV9tYXJnaW5SaWdodCk7CiAKLSAgICBMZW5ndGggbG9naWNhbFRvcExlbmd0aCA9IHN0eWxlKCkt
PmxvZ2ljYWxUb3AoKTsKLSAgICBMZW5ndGggbG9naWNhbEJvdHRvbUxlbmd0aCA9IHN0eWxlKCkt
PmxvZ2ljYWxCb3R0b20oKTsKKyAgICBMZW5ndGggbG9naWNhbFRvcExlbmd0aCA9IHN0eWxlVG9V
c2UtPmxvZ2ljYWxUb3AoKTsKKyAgICBMZW5ndGggbG9naWNhbEJvdHRvbUxlbmd0aCA9IHN0eWxl
VG9Vc2UtPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgCiAgICAgLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qXAogICAgICAqIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBzZWN0aW9uIGFuZCB0aGUgbmV4
dCwgdGhlIHRlcm0gInN0YXRpYyBwb3NpdGlvbiIKQEAgLTI4NDEsNyArMjg1Miw3IEBAIHZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKQogICAgIExheW91dFVu
aXQgbG9naWNhbFRvcFBvczsKIAogICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9u
IHZhbHVlcyBmb3IgJ2hlaWdodCcgY2FzZS4KLSAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxI
ZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250
YWluZXJMb2dpY2FsSGVpZ2h0LCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAgY29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGVUb1VzZS0+bG9naWNhbEhlaWdodCgpLCBjb250
YWluZXJCbG9jaywgY29udGFpbmVyTG9naWNhbEhlaWdodCwgYm9yZGVyc1BsdXNQYWRkaW5nLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3BMZW5ndGgs
IGxvZ2ljYWxCb3R0b21MZW5ndGgsIG1hcmdpbkJlZm9yZSwgbWFyZ2luQWZ0ZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbEhlaWdodFJlc3VsdCwgbWFy
Z2luQmVmb3JlQWxpYXMsIG1hcmdpbkFmdGVyQWxpYXMsIGxvZ2ljYWxUb3BQb3MpOwogICAgIHNl
dExvZ2ljYWxUb3AobG9naWNhbFRvcFBvcyk7CkBAIC0yODUwLDEzICsyODYxLDEzIEBAIHZvaWQg
UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKQogICAgIC8vIHNlZSBG
SVhNRSAyCiAKICAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9y
ICdtYXgtaGVpZ2h0JyBjYXNlLgotICAgIGlmICghc3R5bGUoKS0+bG9naWNhbE1heEhlaWdodCgp
LmlzVW5kZWZpbmVkKCkpIHsKKyAgICBpZiAoIXN0eWxlVG9Vc2UtPmxvZ2ljYWxNYXhIZWlnaHQo
KS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIExheW91dFVuaXQgbWF4TG9naWNhbEhlaWdodDsK
ICAgICAgICAgTGF5b3V0VW5pdCBtYXhNYXJnaW5CZWZvcmU7CiAgICAgICAgIExheW91dFVuaXQg
bWF4TWFyZ2luQWZ0ZXI7CiAgICAgICAgIExheW91dFVuaXQgbWF4TG9naWNhbFRvcFBvczsKIAot
ICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dp
Y2FsTWF4SGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBi
b3JkZXJzUGx1c1BhZGRpbmcsCisgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdo
dFVzaW5nKHN0eWxlVG9Vc2UtPmxvZ2ljYWxNYXhIZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNv
bnRhaW5lckxvZ2ljYWxIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFRvcExlbmd0aCwgbG9naWNhbEJv
dHRvbUxlbmd0aCwgbWFyZ2luQmVmb3JlLCBtYXJnaW5BZnRlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TG9naWNhbEhlaWdodCwgbWF4TWFyZ2luQmVm
b3JlLCBtYXhNYXJnaW5BZnRlciwgbWF4TG9naWNhbFRvcFBvcyk7CiAKQEAgLTI4NjksMTMgKzI4
ODAsMTMgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodCgp
CiAgICAgfQogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZv
ciAnbWluLWhlaWdodCcgY2FzZS4KLSAgICBpZiAoIXN0eWxlKCktPmxvZ2ljYWxNaW5IZWlnaHQo
KS5pc1plcm8oKSkgeworICAgIGlmICghc3R5bGVUb1VzZS0+bG9naWNhbE1pbkhlaWdodCgpLmlz
WmVybygpKSB7CiAgICAgICAgIExheW91dFVuaXQgbWluTG9naWNhbEhlaWdodDsKICAgICAgICAg
TGF5b3V0VW5pdCBtaW5NYXJnaW5CZWZvcmU7CiAgICAgICAgIExheW91dFVuaXQgbWluTWFyZ2lu
QWZ0ZXI7CiAgICAgICAgIExheW91dFVuaXQgbWluTG9naWNhbFRvcFBvczsKIAotICAgICAgICBj
b21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWluSGVp
Z2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJMb2dpY2FsSGVpZ2h0LCBib3JkZXJzUGx1
c1BhZGRpbmcsCisgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFVzaW5nKHN0
eWxlVG9Vc2UtPmxvZ2ljYWxNaW5IZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxv
Z2ljYWxIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFRvcExlbmd0aCwgbG9naWNhbEJvdHRvbUxlbmd0
aCwgbWFyZ2luQmVmb3JlLCBtYXJnaW5BZnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWluTG9naWNhbEhlaWdodCwgbWluTWFyZ2luQmVmb3JlLCBtaW5N
YXJnaW5BZnRlciwgbWluTG9naWNhbFRvcFBvcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGQ4YmM3YjE2YmQ2Y2Y4YTky
YWQxM2RiMjE5NTE2N2QwNWJhM2U2ZTcuLjI4MzNmMThhZjE0MTZiNDBhYTFhNDVlNzhmZGEyYTI5
ODgwYzI0M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcApAQCAtMzExLDE1ICszMTEsMTYgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHkKIAogICAgIC8vIElmIG91ciB6LWluZGV4IGNoYW5nZXMgdmFsdWUgb3Igb3VyIHZpc2liaWxp
dHkgY2hhbmdlcywKICAgICAvLyB3ZSBuZWVkIHRvIGRpcnR5IG91ciBzdGFja2luZyBjb250ZXh0
J3Mgei1vcmRlciBsaXN0LgotICAgIGlmIChzdHlsZSgpICYmIG5ld1N0eWxlKSB7CisgICAgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlID0gc3R5bGUoKTsKKyAgICBpZiAob2xkU3R5bGUgJiYgbmV3U3R5
bGUpIHsKICAgICAgICAgaWYgKHBhcmVudCgpKSB7CiAgICAgICAgICAgICAvLyBEbyBhIHJlcGFp
bnQgd2l0aCB0aGUgb2xkIHN0eWxlIGZpcnN0LCBlLmcuLCBmb3IgZXhhbXBsZSBpZiB3ZSBnbyBm
cm9tCiAgICAgICAgICAgICAvLyBoYXZpbmcgYW4gb3V0bGluZSB0byBub3QgaGF2aW5nIGFuIG91
dGxpbmUuCiAgICAgICAgICAgICBpZiAoZGlmZiA9PSBTdHlsZURpZmZlcmVuY2VSZXBhaW50TGF5
ZXIpIHsKICAgICAgICAgICAgICAgICBsYXllcigpLT5yZXBhaW50SW5jbHVkaW5nRGVzY2VuZGFu
dHMoKTsKLSAgICAgICAgICAgICAgICBpZiAoIShzdHlsZSgpLT5jbGlwKCkgPT0gbmV3U3R5bGUt
PmNsaXAoKSkpCisgICAgICAgICAgICAgICAgaWYgKCEob2xkU3R5bGUtPmNsaXAoKSA9PSBuZXdT
dHlsZS0+Y2xpcCgpKSkKICAgICAgICAgICAgICAgICAgICAgbGF5ZXIoKS0+Y2xlYXJDbGlwUmVj
dHNJbmNsdWRpbmdEZXNjZW5kYW50cygpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChkaWZmID09
IFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQgfHwgbmV3U3R5bGUtPm91dGxpbmVTaXplKCkgPCBzdHls
ZSgpLT5vdXRsaW5lU2l6ZSgpKQorICAgICAgICAgICAgfSBlbHNlIGlmIChkaWZmID09IFN0eWxl
RGlmZmVyZW5jZVJlcGFpbnQgfHwgbmV3U3R5bGUtPm91dGxpbmVTaXplKCkgPCBvbGRTdHlsZS0+
b3V0bGluZVNpemUoKSkKICAgICAgICAgICAgICAgICByZXBhaW50KCk7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0zMjcsMTMgKzMyOCwxMyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpz
dHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eQogICAg
ICAgICAgICAgLy8gV2hlbiBhIGxheW91dCBoaW50IGhhcHBlbnMsIHdlIGdvIGFoZWFkIGFuZCBk
byBhIHJlcGFpbnQgb2YgdGhlIGxheWVyLCBzaW5jZSB0aGUgbGF5ZXIgY291bGQKICAgICAgICAg
ICAgIC8vIGVuZCB1cCBiZWluZyBkZXN0cm95ZWQuCiAgICAgICAgICAgICBpZiAoaGFzTGF5ZXIo
KSkgewotICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpICE9IG5ld1N0eWxl
LT5wb3NpdGlvbigpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlKCktPnpJbmRleCgpICE9
IG5ld1N0eWxlLT56SW5kZXgoKSB8fAotICAgICAgICAgICAgICAgICAgICBzdHlsZSgpLT5oYXNB
dXRvWkluZGV4KCkgIT0gbmV3U3R5bGUtPmhhc0F1dG9aSW5kZXgoKSB8fAotICAgICAgICAgICAg
ICAgICAgICAhKHN0eWxlKCktPmNsaXAoKSA9PSBuZXdTdHlsZS0+Y2xpcCgpKSB8fAotICAgICAg
ICAgICAgICAgICAgICBzdHlsZSgpLT5oYXNDbGlwKCkgIT0gbmV3U3R5bGUtPmhhc0NsaXAoKSB8
fAotICAgICAgICAgICAgICAgICAgICBzdHlsZSgpLT5vcGFjaXR5KCkgIT0gbmV3U3R5bGUtPm9w
YWNpdHkoKSB8fAotICAgICAgICAgICAgICAgICAgICBzdHlsZSgpLT50cmFuc2Zvcm0oKSAhPSBu
ZXdTdHlsZS0+dHJhbnNmb3JtKCkpCisgICAgICAgICAgICAgICAgaWYgKG9sZFN0eWxlLT5wb3Np
dGlvbigpICE9IG5ld1N0eWxlLT5wb3NpdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHx8IG9s
ZFN0eWxlLT56SW5kZXgoKSAhPSBuZXdTdHlsZS0+ekluZGV4KCkKKyAgICAgICAgICAgICAgICAg
ICAgfHwgb2xkU3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAhPSBuZXdTdHlsZS0+aGFzQXV0b1pJbmRl
eCgpCisgICAgICAgICAgICAgICAgICAgIHx8ICEob2xkU3R5bGUtPmNsaXAoKSA9PSBuZXdTdHls
ZS0+Y2xpcCgpKQorICAgICAgICAgICAgICAgICAgICB8fCBvbGRTdHlsZS0+aGFzQ2xpcCgpICE9
IG5ld1N0eWxlLT5oYXNDbGlwKCkKKyAgICAgICAgICAgICAgICAgICAgfHwgb2xkU3R5bGUtPm9w
YWNpdHkoKSAhPSBuZXdTdHlsZS0+b3BhY2l0eSgpCisgICAgICAgICAgICAgICAgICAgIHx8IG9s
ZFN0eWxlLT50cmFuc2Zvcm0oKSAhPSBuZXdTdHlsZS0+dHJhbnNmb3JtKCkpCiAgICAgICAgICAg
ICAgICAgbGF5ZXIoKS0+cmVwYWludEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG5ld1N0eWxlLT5oYXNUcmFuc2Zvcm0oKSB8fCBuZXdTdHlsZS0+b3BhY2l0
eSgpIDwgMSkgewogICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBsYXllciB5
ZXQsIGJ1dCB3ZSBhcmUgZ29pbmcgdG8gZ2V0IG9uZSBiZWNhdXNlIG9mIHRyYW5zZm9ybSBvciBv
cGFjaXR5LApAQCAtMzQyLDExICszNDMsMTIgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChoYXNMYXllcigpICYmIChzdHls
ZSgpLT5oYXNBdXRvWkluZGV4KCkgIT0gbmV3U3R5bGUtPmhhc0F1dG9aSW5kZXgoKSB8fAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoKS0+ekluZGV4KCkgIT0gbmV3U3R5bGUtPnpJ
bmRleCgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSgpLT52aXNpYmlsaXR5
KCkgIT0gbmV3U3R5bGUtPnZpc2liaWxpdHkoKSkpIHsKKyAgICAgICAgaWYgKGhhc0xheWVyKCkK
KyAgICAgICAgICAgICYmIChvbGRTdHlsZS0+aGFzQXV0b1pJbmRleCgpICE9IG5ld1N0eWxlLT5o
YXNBdXRvWkluZGV4KCkKKyAgICAgICAgICAgICAgICB8fCBvbGRTdHlsZS0+ekluZGV4KCkgIT0g
bmV3U3R5bGUtPnpJbmRleCgpCisgICAgICAgICAgICAgICAgfHwgb2xkU3R5bGUtPnZpc2liaWxp
dHkoKSAhPSBuZXdTdHlsZS0+dmlzaWJpbGl0eSgpKSkgewogICAgICAgICAgICAgbGF5ZXIoKS0+
ZGlydHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cygpOwotICAgICAgICAgICAgaWYgKHN0eWxl
KCktPmhhc0F1dG9aSW5kZXgoKSAhPSBuZXdTdHlsZS0+aGFzQXV0b1pJbmRleCgpIHx8IHN0eWxl
KCktPnZpc2liaWxpdHkoKSAhPSBuZXdTdHlsZS0+dmlzaWJpbGl0eSgpKQorICAgICAgICAgICAg
aWYgKG9sZFN0eWxlLT5oYXNBdXRvWkluZGV4KCkgIT0gbmV3U3R5bGUtPmhhc0F1dG9aSW5kZXgo
KSB8fCBvbGRTdHlsZS0+dmlzaWJpbGl0eSgpICE9IG5ld1N0eWxlLT52aXNpYmlsaXR5KCkpCiAg
ICAgICAgICAgICAgICAgbGF5ZXIoKS0+ZGlydHlaT3JkZXJMaXN0cygpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzkyLDEwICszOTQsMTEgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6dXBk
YXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKCkKIHsKICAgICAvLyBTZXQgdGhlIGFwcHJvcHJpYXRl
IGJpdHMgZm9yIGEgYm94IG1vZGVsIG9iamVjdC4gIFNpbmNlIGFsbCBiaXRzIGFyZSBjbGVhcmVk
IGluIHN0eWxlV2lsbENoYW5nZSwKICAgICAvLyB3ZSBvbmx5IGNoZWNrIGZvciBiaXRzIHRoYXQg
Y291bGQgcG9zc2libHkgYmUgc2V0IHRvIHRydWUuCi0gICAgc2V0SGFzQm94RGVjb3JhdGlvbnMo
aGFzQmFja2dyb3VuZCgpIHx8IHN0eWxlKCktPmhhc0JvcmRlcigpIHx8IHN0eWxlKCktPmhhc0Fw
cGVhcmFuY2UoKSB8fCBzdHlsZSgpLT5ib3hTaGFkb3coKSk7Ci0gICAgc2V0SW5saW5lKHN0eWxl
KCktPmlzRGlzcGxheUlubGluZVR5cGUoKSk7Ci0gICAgc2V0UmVsUG9zaXRpb25lZChzdHlsZSgp
LT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24pOwotICAgIHNldEhvcml6b250YWxXcml0
aW5nTW9kZShzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICBSZW5kZXJT
dHlsZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7CisgICAgc2V0SGFzQm94RGVjb3JhdGlvbnMoaGFz
QmFja2dyb3VuZCgpIHx8IHN0eWxlVG9Vc2UtPmhhc0JvcmRlcigpIHx8IHN0eWxlVG9Vc2UtPmhh
c0FwcGVhcmFuY2UoKSB8fCBzdHlsZVRvVXNlLT5ib3hTaGFkb3coKSk7CisgICAgc2V0SW5saW5l
KHN0eWxlVG9Vc2UtPmlzRGlzcGxheUlubGluZVR5cGUoKSk7CisgICAgc2V0UmVsUG9zaXRpb25l
ZChzdHlsZVRvVXNlLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24pOworICAgIHNldEhv
cml6b250YWxXcml0aW5nTW9kZShzdHlsZVRvVXNlLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cmVsYXRpdmVQb3NpdGlv
bk9mZnNldFgoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cAppbmRleCAxZmM4MTdiMjg5NzIwNjI0ZWY5NWY1NTFmZDgxMmQwZDEzODZiMjJjLi45NmIzOTI1
Yjg2Mzk2Y2FiMDliZDNiNjc4Yjg5ZWRlN2FlMmIzNDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtMTM3LDE3ICsxMzcsMTggQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3QKICAgICAvLyBlLmcuLCA8Zm9udD5mb28gPGg0PmdvbzwvaDQ+IG1vbzwvZm9u
dD4uICBUaGUgPGZvbnQ+IGlubGluZXMgYmVmb3JlCiAgICAgLy8gYW5kIGFmdGVyIHRoZSBibG9j
ayBzaGFyZSB0aGUgc2FtZSBzdHlsZSwgYnV0IHRoZSBibG9jayBkb2Vzbid0CiAgICAgLy8gbmVl
ZCB0byBwYXNzIGl0cyBzdHlsZSBvbiB0byBhbnlvbmUgZWxzZS4KKyAgICBSZW5kZXJTdHlsZSog
bmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIGZvciAoUmVuZGVySW5saW5lKiBjdXJyQ29udCA9IGlu
bGluZUVsZW1lbnRDb250aW51YXRpb24oKTsgY3VyckNvbnQ7IGN1cnJDb250ID0gY3VyckNvbnQt
PmlubGluZUVsZW1lbnRDb250aW51YXRpb24oKSkgewogICAgICAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogbmV4dENvbnQgPSBjdXJyQ29udC0+Y29udGludWF0aW9uKCk7CiAgICAgICAgIGN1cnJD
b250LT5zZXRDb250aW51YXRpb24oMCk7Ci0gICAgICAgIGN1cnJDb250LT5zZXRTdHlsZShzdHls
ZSgpKTsKKyAgICAgICAgY3VyckNvbnQtPnNldFN0eWxlKG5ld1N0eWxlKTsKICAgICAgICAgY3Vy
ckNvbnQtPnNldENvbnRpbnVhdGlvbihuZXh0Q29udCk7CiAgICAgfQogCiAgICAgbV9saW5lSGVp
Z2h0ID0gLTE7CiAKICAgICBpZiAoIW1fYWx3YXlzQ3JlYXRlTGluZUJveGVzKSB7Ci0gICAgICAg
IGJvb2wgYWx3YXlzQ3JlYXRlTGluZUJveGVzID0gaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBo
YXNCb3hEZWNvcmF0aW9ucygpIHx8IHN0eWxlKCktPmhhc1BhZGRpbmcoKSB8fCBzdHlsZSgpLT5o
YXNNYXJnaW4oKSB8fCBoYXNPdXRsaW5lKCk7CisgICAgICAgIGJvb2wgYWx3YXlzQ3JlYXRlTGlu
ZUJveGVzID0gaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBoYXNCb3hEZWNvcmF0aW9ucygpIHx8
IG5ld1N0eWxlLT5oYXNQYWRkaW5nKCkgfHwgbmV3U3R5bGUtPmhhc01hcmdpbigpIHx8IGhhc091
dGxpbmUoKTsKICAgICAgICAgaWYgKG9sZFN0eWxlICYmIGFsd2F5c0NyZWF0ZUxpbmVCb3hlcykg
ewogICAgICAgICAgICAgZGlydHlMaW5lQm94ZXMoZmFsc2UpOwogICAgICAgICAgICAgc2V0TmVl
ZHNMYXlvdXQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5k
ZXggMGUxMjEwNjIxMTc1YWM1YjMzNzViZGUxYjExMjM1MDE4YzY5MWNlZC4uZjZjMDM3M2ViMmNi
YTdiY2I2ZjM5ZGY5YzNkNTgxZjIxNDMyZjVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcApAQCAtMTg5LDE4ICsxODksMTkgQEAgdm9pZCBSZW5kZXJUZXh0OjpzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWwKICAgICAgICAgbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dBbmROb0ZhbGxiYWNrRm9udHMgPSBm
YWxzZTsKICAgICB9CiAKKyAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBzdHlsZSgpOwogICAg
IGJvb2wgbmVlZHNSZXNldFRleHQgPSBmYWxzZTsKICAgICBpZiAoIW9sZFN0eWxlKSB7CiAgICAg
ICAgIHVwZGF0ZU5lZWRzVHJhbnNjb2RpbmcoKTsKICAgICAgICAgbmVlZHNSZXNldFRleHQgPSBt
X25lZWRzVHJhbnNjb2Rpbmc7Ci0gICAgfSBlbHNlIGlmIChvbGRTdHlsZS0+Zm9udCgpLm5lZWRz
VHJhbnNjb2RpbmcoKSAhPSBzdHlsZSgpLT5mb250KCkubmVlZHNUcmFuc2NvZGluZygpIHx8IChz
dHlsZSgpLT5mb250KCkubmVlZHNUcmFuc2NvZGluZygpICYmIG9sZFN0eWxlLT5mb250KCkuZmFt
aWx5KCkuZmFtaWx5KCkgIT0gc3R5bGUoKS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpKSkgewor
ICAgIH0gZWxzZSBpZiAob2xkU3R5bGUtPmZvbnQoKS5uZWVkc1RyYW5zY29kaW5nKCkgIT0gbmV3
U3R5bGUtPmZvbnQoKS5uZWVkc1RyYW5zY29kaW5nKCkgfHwgKG5ld1N0eWxlLT5mb250KCkubmVl
ZHNUcmFuc2NvZGluZygpICYmIG9sZFN0eWxlLT5mb250KCkuZmFtaWx5KCkuZmFtaWx5KCkgIT0g
bmV3U3R5bGUtPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKSkpIHsKICAgICAgICAgdXBkYXRlTmVl
ZHNUcmFuc2NvZGluZygpOwogICAgICAgICBuZWVkc1Jlc2V0VGV4dCA9IHRydWU7CiAgICAgfQog
CiAgICAgRVRleHRUcmFuc2Zvcm0gb2xkVHJhbnNmb3JtID0gb2xkU3R5bGUgPyBvbGRTdHlsZS0+
dGV4dFRyYW5zZm9ybSgpIDogVFROT05FOwogICAgIEVUZXh0U2VjdXJpdHkgb2xkU2VjdXJpdHkg
PSBvbGRTdHlsZSA/IG9sZFN0eWxlLT50ZXh0U2VjdXJpdHkoKSA6IFRTTk9ORTsKLSAgICBpZiAo
bmVlZHNSZXNldFRleHQgfHwgb2xkVHJhbnNmb3JtICE9IHN0eWxlKCktPnRleHRUcmFuc2Zvcm0o
KSB8fCBvbGRTZWN1cml0eSAhPSBzdHlsZSgpLT50ZXh0U2VjdXJpdHkoKSkgeworICAgIGlmIChu
ZWVkc1Jlc2V0VGV4dCB8fCBvbGRUcmFuc2Zvcm0gIT0gbmV3U3R5bGUtPnRleHRUcmFuc2Zvcm0o
KSB8fCBvbGRTZWN1cml0eSAhPSBuZXdTdHlsZS0+dGV4dFNlY3VyaXR5KCkpIHsKICAgICAgICAg
aWYgKFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0VG9UcmFuc2Zvcm0gPSBvcmlnaW5hbFRleHQoKSkK
ICAgICAgICAgICAgIHNldFRleHQodGV4dFRvVHJhbnNmb3JtLnJlbGVhc2UoKSwgdHJ1ZSk7CiAg
ICAgfQpAQCAtOTA1LDExICs5MDYsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2kKICAgICBt
X2hhc0JlZ2luV1MgPSBmYWxzZTsKICAgICBtX2hhc0VuZFdTID0gZmFsc2U7CiAKLSAgICBjb25z
dCBGb250JiBmID0gc3R5bGUoKS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0
LWxpbmUuCi0gICAgZmxvYXQgd29yZFNwYWNpbmcgPSBzdHlsZSgpLT53b3JkU3BhY2luZygpOwor
ICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKKyAgICBjb25zdCBGb250JiBm
ID0gc3R5bGVUb1VzZS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUu
CisgICAgZmxvYXQgd29yZFNwYWNpbmcgPSBzdHlsZVRvVXNlLT53b3JkU3BhY2luZygpOwogICAg
IGludCBsZW4gPSB0ZXh0TGVuZ3RoKCk7CiAgICAgY29uc3QgVUNoYXIqIHR4dCA9IGNoYXJhY3Rl
cnMoKTsKLSAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgYnJlYWtJdGVyYXRvcih0eHQsIGxlbiwg
c3R5bGUoKS0+bG9jYWxlKCkpOworICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBicmVha0l0ZXJh
dG9yKHR4dCwgbGVuLCBzdHlsZVRvVXNlLT5sb2NhbGUoKSk7CiAgICAgYm9vbCBuZWVkc1dvcmRT
cGFjaW5nID0gZmFsc2U7CiAgICAgYm9vbCBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwogICAgIGJv
b2wgaXNTcGFjZSA9IGZhbHNlOwpAQCAtOTIwLDEyICs5MjIsMTIgQEAgdm9pZCBSZW5kZXJUZXh0
Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8
Y29uc3QgU2kKIAogICAgIC8vIE5vbi16ZXJvIG9ubHkgd2hlbiBrZXJuaW5nIGlzIGVuYWJsZWQs
IGluIHdoaWNoIGNhc2Ugd2UgbWVhc3VyZSB3b3JkcyB3aXRoIHRoZWlyIHRyYWlsaW5nCiAgICAg
Ly8gc3BhY2UsIHRoZW4gc3VidHJhY3QgaXRzIHdpZHRoLgotICAgIGZsb2F0IHdvcmRUcmFpbGlu
Z1NwYWNlV2lkdGggPSBmLnR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmIEtlcm5pbmcgPyBmLndpZHRo
KFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGYsICZzcGFjZSwgMSwgc3R5bGUo
KSkpIDogMDsKKyAgICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gZi50eXBlc2V0dGlu
Z0ZlYXR1cmVzKCkgJiBLZXJuaW5nID8gZi53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bih0aGlzLCBmLCAmc3BhY2UsIDEsIHN0eWxlVG9Vc2UpKSA6IDA7CiAKICAgICBpbnQgZmly
c3RHbHlwaExlZnRPdmVyZmxvdyA9IC0xOwogCi0gICAgYm9vbCBicmVha05CU1AgPSBzdHlsZSgp
LT5hdXRvV3JhcCgpICYmIHN0eWxlKCktPm5ic3BNb2RlKCkgPT0gU1BBQ0U7Ci0gICAgYm9vbCBi
cmVha0FsbCA9IChzdHlsZSgpLT53b3JkQnJlYWsoKSA9PSBCcmVha0FsbFdvcmRCcmVhayB8fCBz
dHlsZSgpLT53b3JkQnJlYWsoKSA9PSBCcmVha1dvcmRCcmVhaykgJiYgc3R5bGUoKS0+YXV0b1dy
YXAoKTsKKyAgICBib29sIGJyZWFrTkJTUCA9IHN0eWxlVG9Vc2UtPmF1dG9XcmFwKCkgJiYgc3R5
bGVUb1VzZS0+bmJzcE1vZGUoKSA9PSBTUEFDRTsKKyAgICBib29sIGJyZWFrQWxsID0gKHN0eWxl
VG9Vc2UtPndvcmRCcmVhaygpID09IEJyZWFrQWxsV29yZEJyZWFrIHx8IHN0eWxlVG9Vc2UtPndv
cmRCcmVhaygpID09IEJyZWFrV29yZEJyZWFrKSAmJiBzdHlsZVRvVXNlLT5hdXRvV3JhcCgpOwog
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICBVQ2hhciBjID0g
dHh0W2ldOwpAQCAtOTM0LDE0ICs5MzYsMTQgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2kKIAog
ICAgICAgICBib29sIGlzTmV3bGluZSA9IGZhbHNlOwogICAgICAgICBpZiAoYyA9PSAnXG4nKSB7
Ci0gICAgICAgICAgICBpZiAoc3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKKyAgICAgICAg
ICAgIGlmIChzdHlsZVRvVXNlLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgewogICAgICAgICAgICAgICAg
IG1faGFzQnJlYWsgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlzTmV3bGluZSA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgaXNTcGFjZSA9IGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgaXNTcGFjZSA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXHQn
KSB7Ci0gICAgICAgICAgICBpZiAoIXN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7Cisg
ICAgICAgICAgICBpZiAoIXN0eWxlVG9Vc2UtPmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7CiAgICAg
ICAgICAgICAgICAgbV9oYXNUYWIgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlzU3BhY2UgPSBm
YWxzZTsKICAgICAgICAgICAgIH0gZWxzZQpAQCAtOTU0LDcgKzk1Niw3IEBAIHZvaWQgUmVuZGVy
VGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRoLCBIYXNo
U2V0PGNvbnN0IFNpCiAgICAgICAgIGlmICgoaXNTcGFjZSB8fCBpc05ld2xpbmUpICYmIGkgPT0g
bGVuIC0gMSkKICAgICAgICAgICAgIG1faGFzRW5kV1MgPSB0cnVlOwogCi0gICAgICAgIGlmICgh
aWdub3JpbmdTcGFjZXMgJiYgc3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgcHJldmlv
dXNDaGFyYWN0ZXJJc1NwYWNlICYmIGlzU3BhY2UpCisgICAgICAgIGlmICghaWdub3JpbmdTcGFj
ZXMgJiYgc3R5bGVUb1VzZS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgcHJldmlvdXNDaGFyYWN0
ZXJJc1NwYWNlICYmIGlzU3BhY2UpCiAgICAgICAgICAgICBpZ25vcmluZ1NwYWNlcyA9IHRydWU7
CiAKICAgICAgICAgaWYgKGlnbm9yaW5nU3BhY2VzICYmICFpc1NwYWNlKQpAQCAtOTc2LDcgKzk3
OCw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxv
YXQgbGVhZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpCiAgICAgICAgIGJvb2wgaGFzQnJlYWsgPSBi
cmVha0FsbCB8fCBpc0JyZWFrYWJsZShicmVha0l0ZXJhdG9yLCBpLCBuZXh0QnJlYWthYmxlLCBi
cmVha05CU1ApOwogICAgICAgICBib29sIGJldHdlZW5Xb3JkcyA9IHRydWU7CiAgICAgICAgIGlu
dCBqID0gaTsKLSAgICAgICAgd2hpbGUgKGMgIT0gJ1xuJyAmJiAhaXNTcGFjZUFjY29yZGluZ1Rv
U3R5bGUoYywgc3R5bGUoKSkgJiYgYyAhPSAnXHQnICYmIGMgIT0gc29mdEh5cGhlbikgeworICAg
ICAgICB3aGlsZSAoYyAhPSAnXG4nICYmICFpc1NwYWNlQWNjb3JkaW5nVG9TdHlsZShjLCBzdHls
ZVRvVXNlKSAmJiBjICE9ICdcdCcgJiYgYyAhPSBzb2Z0SHlwaGVuKSB7CiAgICAgICAgICAgICBq
Kys7CiAgICAgICAgICAgICBpZiAoaiA9PSBsZW4pCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC05OTEsNyArOTkzLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNh
bFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2kKIAogICAgICAgICBpbnQg
d29yZExlbiA9IGogLSBpOwogICAgICAgICBpZiAod29yZExlbikgewotICAgICAgICAgICAgYm9v
bCBpc1NwYWNlID0gKGogPCBsZW4pICYmIGlzU3BhY2VBY2NvcmRpbmdUb1N0eWxlKGMsIHN0eWxl
KCkpOworICAgICAgICAgICAgYm9vbCBpc1NwYWNlID0gKGogPCBsZW4pICYmIGlzU3BhY2VBY2Nv
cmRpbmdUb1N0eWxlKGMsIHN0eWxlVG9Vc2UpOwogICAgICAgICAgICAgZmxvYXQgdzsKICAgICAg
ICAgICAgIGlmICh3b3JkVHJhaWxpbmdTcGFjZVdpZHRoICYmIGlzU3BhY2UpCiAgICAgICAgICAg
ICAgICAgdyA9IHdpZHRoRnJvbUNhY2hlKGYsIGksIHdvcmRMZW4gKyAxLCBsZWFkV2lkdGggKyBj
dXJyTWF4V2lkdGgsICZmYWxsYmFja0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdykgLSB3b3JkVHJhaWxp
bmdTcGFjZVdpZHRoOwpAQCAtMTAwOSw4ICsxMDExLDggQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21w
dXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3Qg
U2kKICAgICAgICAgICAgICAgICBsYXN0V29yZEJvdW5kYXJ5ID0gajsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgYm9vbCBpc0NvbGxhcHNpYmxlV2hpdGVTcGFjZSA9IChqIDwgbGVuKSAm
JiBzdHlsZSgpLT5pc0NvbGxhcHNpYmxlV2hpdGVTcGFjZShjKTsKLSAgICAgICAgICAgIGlmIChq
IDwgbGVuICYmIHN0eWxlKCktPmF1dG9XcmFwKCkpCisgICAgICAgICAgICBib29sIGlzQ29sbGFw
c2libGVXaGl0ZVNwYWNlID0gKGogPCBsZW4pICYmIHN0eWxlVG9Vc2UtPmlzQ29sbGFwc2libGVX
aGl0ZVNwYWNlKGMpOworICAgICAgICAgICAgaWYgKGogPCBsZW4gJiYgc3R5bGVUb1VzZS0+YXV0
b1dyYXAoKSkKICAgICAgICAgICAgICAgICBtX2hhc0JyZWFrYWJsZUNoYXIgPSB0cnVlOwogCiAg
ICAgICAgICAgICAvLyBBZGQgaW4gd29yZFNwYWNpbmcgdG8gb3VyIGN1cnJNYXhXaWR0aCwgYnV0
IG5vdCBpZiB0aGlzIGlzIHRoZSBsYXN0IHdvcmQgb24gYSBsaW5lIG9yIHRoZQpAQCAtMTA0OCw3
ICsxMDUwLDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2kKICAgICAgICAgICAgICAgICBpZiAo
Zmlyc3RMaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0TGluZSA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICAgICBsZWFkV2lkdGggPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IXN0eWxlKCktPmF1dG9XcmFwKCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVUb1Vz
ZS0+YXV0b1dyYXAoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYmVnaW5NaW5XaWR0aCA9
IGN1cnJNYXhXaWR0aDsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTEwNTYsNyArMTA1OCw3IEBA
IHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVh
ZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpCiAgICAgICAgICAgICAgICAgICAgIG1fbWF4V2lkdGgg
PSBjdXJyTWF4V2lkdGg7CiAgICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoID0gMDsKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9j
azo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmLCB0eHQgKyBpLCAxLCBzdHlsZSgpKTsKKyAgICAg
ICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRo
aXMsIGYsIHR4dCArIGksIDEsIHN0eWxlVG9Vc2UpOwogICAgICAgICAgICAgICAgIHJ1bi5zZXRD
aGFyYWN0ZXJzTGVuZ3RoKGxlbiAtIGkpOwogICAgICAgICAgICAgICAgIEFTU0VSVChydW4uY2hh
cmFjdGVyc0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7CiAKQEAgLTEwODEsMTAgKzEwODMsMTAg
QEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBs
ZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgU2kKICAgICBtX21pbldpZHRoID0gbWF4KGN1cnJNaW5X
aWR0aCwgbV9taW5XaWR0aCk7CiAgICAgbV9tYXhXaWR0aCA9IG1heChjdXJyTWF4V2lkdGgsIG1f
bWF4V2lkdGgpOwogCi0gICAgaWYgKCFzdHlsZSgpLT5hdXRvV3JhcCgpKQorICAgIGlmICghc3R5
bGVUb1VzZS0+YXV0b1dyYXAoKSkKICAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGg7CiAK
LSAgICBpZiAoc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IFBSRSkgeworICAgIGlmIChzdHlsZVRv
VXNlLT53aGl0ZVNwYWNlKCkgPT0gUFJFKSB7CiAgICAgICAgIGlmIChmaXJzdExpbmUpCiAgICAg
ICAgICAgICBtX2JlZ2luTWluV2lkdGggPSBtX21heFdpZHRoOwogICAgICAgICBtX2VuZE1pbldp
ZHRoID0gY3Vyck1heFdpZHRoOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>