<?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>69701</bug_id>
          
          <creation_ts>2011-10-08 07:16:41 -0700</creation_ts>
          <short_desc>Remove redundant code of HTMLSelectElement.</short_desc>
          <delta_ts>2011-10-10 06:20:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>69621</dependson>
          <blocked>69755</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>480546</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-10-08 07:16:41 -0700</bug_when>
    <thetext>Remove redundant code of HTMLSelectElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480547</commentid>
    <comment_count>1</comment_count>
      <attachid>110270</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-10-08 07:18:19 -0700</bug_when>
    <thetext>Created attachment 110270
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480573</commentid>
    <comment_count>2</comment_count>
      <attachid>110270</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-08 10:38:07 -0700</bug_when>
    <thetext>Comment on attachment 110270
Patch

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

r- because of two behavioral changes. Otherwise the patch looks good.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:724
&gt; +void HTMLSelectElement::setSelectedIndexInternal(int optionIndex, bool deselect, bool fireOnChangeNow, bool userDrivenChange)

I think we can just keep the function name and overload the other one.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:836
&gt; +    setNeedsValidityCheck();

Why are we adding this function call here? It&apos;ll be best to separate this behavioral change.

&gt; Source/WebCore/html/HTMLSelectElement.cpp:1301
&gt; +    HTMLFormControlElementWithState::defaultEventHandler(event);

Again, we should really separate this behavioral change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480646</commentid>
    <comment_count>3</comment_count>
      <attachid>110270</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-10-08 18:36:22 -0700</bug_when>
    <thetext>Comment on attachment 110270
Patch

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

&gt; Source/WebCore/html/HTMLSelectElement.cpp:-369
&gt; -    HTMLFormControlElementWithState::defaultEventHandler(event);

This line was moved to another defaultEventHandler().

&gt;&gt; Source/WebCore/html/HTMLSelectElement.cpp:724
&gt;&gt; +void HTMLSelectElement::setSelectedIndexInternal(int optionIndex, bool deselect, bool fireOnChangeNow, bool userDrivenChange)
&gt; 
&gt; I think we can just keep the function name and overload the other one.

I don&apos;t think so.
We had two setSelectedIndex():
    void setSelectedIndex(int index, bool deselect = true);
    static void setSelectedIndex(SelectElementData&amp;, Element*, int optionIndex, bool deselect = true, bool fireOnChangeNow = false, bool userDrivenChange = true);
If we simply made the later non-static, it would be:
    void setSelectedIndex(int optionIndex, bool deselect = true, bool fireOnChangeNow = false, bool userDrivenChange = true);
Compilers can&apos;t determine which setSelectedIndex() should be used if a callsite is setSelectedIndex(foo) or setSelectedIndex(foo, true/false).

The former setSelectedIndex() is a simple wrapper of the later setSelectedIndex(). But I don&apos;t like to remove the former setSelectedIndex() and make the later setSelectedIndex() public because the later setselectedIndex() has arguments to control low-level behaviors.

&gt;&gt; Source/WebCore/html/HTMLSelectElement.cpp:836
&gt;&gt; +    setNeedsValidityCheck();
&gt; 
&gt; Why are we adding this function call here? It&apos;ll be best to separate this behavioral change.

This setNeedsValidityCheck() call is a result of merger with another deselectItems(), which had setNeedsValidityCheck().
However you&apos;re right.  We have deselectItems() callers other than the another deselectItems(). This change brings extra setNeedsValidityCheck() calls.

&gt;&gt; Source/WebCore/html/HTMLSelectElement.cpp:1301
&gt;&gt; +    HTMLFormControlElementWithState::defaultEventHandler(event);
&gt; 
&gt; Again, we should really separate this behavioral change.

This is a result of merger with another defaultEventHandler().  It&apos;s not a behavior change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480649</commentid>
    <comment_count>4</comment_count>
      <attachid>110287</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-10-08 18:58:16 -0700</bug_when>
    <thetext>Created attachment 110287
Patch 2

Addressed the deselectItems() issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480798</commentid>
    <comment_count>5</comment_count>
      <attachid>110287</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-09 20:24:44 -0700</bug_when>
    <thetext>Comment on attachment 110287
Patch 2

Clearing flags on attachment: 110287

Committed r97038: &lt;http://trac.webkit.org/changeset/97038&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480799</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-09 20:24:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110270</attachid>
            <date>2011-10-08 07:18:19 -0700</date>
            <delta_ts>2011-10-08 18:58:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69701-20111008231817.patch</filename>
            <type>text/plain</type>
            <size>58058</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcwMDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiN2UwYTVkMDRiZmNmOTg4
MzVjZDk2YTk1YWU2NjM2MGJkNWVkODZkLi4yYzZhZjQyZDBjMTJlMmNjOGM1OTYxYzc0YWI1NThm
YjM5M2EzMmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMTAtMDkgIEtlbnQg
VGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSByZWR1bmRhbnQg
Y29kZSBvZiBIVE1MU2VsZWN0RWxlbWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5NzAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAg
ICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KToKKyAgICAgICAgUmVuYW1lIGEgY2Fs
bHNpdGUgb2YgYW5vdGhlciBzZXRTZWxlY3RlZEluZGV4KCkgdG8gc2V0U2VsZWN0ZWRJbmRleElu
dGVybmFsKCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0
ZWRJbmRleEJ5VXNlcik6CisgICAgICAgIGRpdHRvLCBhbmQgdXBkYXRlIGEgY2FsbHNpdGUgb2Yg
dXBkYXRlU2VsZWN0ZWRTdGF0ZSgpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQ6Omxpc3RCb3hTZWxlY3RJdGVtKToKKyAgICAgICAgVXBkYXRlIGEgY2FsbHNpdGUgb2YgdXBk
YXRlU2VsZWN0ZWRTdGF0ZSgpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
OmFjdGl2ZVNlbGVjdGlvbkVuZExpc3RJbmRleCk6CisgICAgICAgIFVwZGF0ZSBhIGNhbGxzaXRl
IG9mIGxhc3RTZWxlY3RlZExpc3RJbmRleCgpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnNlbGVjdEFsbCk6CisgICAgICAgIFVwZGF0ZSBjYWxsc2l0ZXMgb2YgZnVuY3Rp
b25zIHdoaWNoIGFyZSBjaGFuZ2VkIHRvIG5vbi1zdGF0aWMuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24pOgorICAgICAgICBNZXJnZSBhIHN0
YXRpYyBmdW5jdGlvbiBhbmQgYSBub24tc3RhdGljIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KTogZGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0
aW9uRW5kSW5kZXgpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
Ojp1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6bGlzdEJveE9uQ2hhbmdlKTogZGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3RPbkNoYW5nZSk6IGRpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNjcm9sbFRvU2VsZWN0aW9uKTogZGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0T3B0aW9uc0NoYW5nZWRPblJl
bmRlcmVyKTogTWFkZSB0aGlzIG5vbi1zdGF0aWMuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudDo6c2V0UmVjYWxjTGlzdEl0ZW1zKToKKyAgICAgICAgTWVyZ2UgYSBzdGF0aWMg
ZnVuY3Rpb24gYW5kIGEgbm9uLXN0YXRpYyBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpzZWxlY3RlZEluZGV4KTogZGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleEludGVybmFsKToKKyAgICAgICAg
TWFkZSB0aGlzIG5vbi1zdGF0aWMsIGFuZCByZW5hbWVkIGZyb20gc2V0U2VsZWN0ZWRJbmRleCgp
IGJlY2F1c2UKKyAgICAgICAgb2YgY29uZmxpY3Qgd2l0aCBhbiBleGlzdGluZyBmdW5jdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25Ub0xpc3RJbmRleCk6
CisgICAgICAgIE1lcmdlIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBhIG5vbi1zdGF0aWMgZnVuY3Rp
b24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGlzdFRvT3B0aW9uSW5k
ZXgpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpkaXNwYXRj
aEZvY3VzRXZlbnQpOgorICAgICAgICBVcGRhdGUgYSBjYWxsc2l0ZSBvZiBmdW5jdGlvbiB3aGlj
aCBpcyBjaGFuZ2VkIHRvIG5vLXN0YWljLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVs
ZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6ZGVzZWxlY3RJdGVtcyk6CisgICAgICAgIE1lcmdlIGEgc3RhdGljIGZ1
bmN0aW9uIGFuZCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUpOgorICAgICAgICBVcGRhdGUg
YSBjYWxsc2l0ZSBvZiBmdW5jdGlvbiB3aGljaCBpcyBjaGFuZ2VkIHRvIG5vLXN0YWljLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlc2V0KTogZGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGxhdGZvcm1IYW5kbGVLZXlkb3duRXZlbnQp
OiBNYWRlIHRoaXMgbm9uLXN0YXRpYy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIpOiBkaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVTZWxlY3RlZFN0YXRlKTogZGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRs
ZXIpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKToKKyAgICAgICAgTWVyZ2VkIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBhIG5v
bi1zdGF0aWMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
bGFzdFNlbGVjdGVkTGlzdEluZGV4KTogTWFkZSB0aGlzIG5vbi1zdGF0aWMuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZCk6IGRpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OmFjY2Vzc0tleVNldFNlbGVjdGVkSW5kZXgp
OiBkaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MU2VsZWN0RWxlbWVudFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudDo6cGxhdGZvcm1IYW5kbGVLZXlkb3duRXZlbnQpOiBNYWRlIHRoaXMgbm9uLXN0
YXRpYy4KKwogMjAxMS0xMC0wOCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmVtb3ZlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyBvZiBIVE1MU2VsZWN0RWxlbWVu
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAppbmRleCA5NzZjNTVm
ZDg5N2JjMDhiYjY5MjE5ZTQ1NzIxMDg0YzU4ZmJkMGYyLi5kOTMyMzZmYzAyNDMyZWFkMzgxZTkw
ZmI1NDFlODA1NGQzYWU2ZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcApAQCAtOTgsMjAgKzk4LDkgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MU2VsZWN0
RWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKICAgICByZXR1cm4gbV9kYXRhLm11bHRp
cGxlKCkgPyBzZWxlY3RNdWx0aXBsZSA6IHNlbGVjdE9uZTsKIH0KIAotaW50IEhUTUxTZWxlY3RF
bGVtZW50OjpzZWxlY3RlZEluZGV4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2VsZWN0ZWRJbmRl
eChtX2RhdGEsIHRoaXMpOwotfQotCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0
ZW1zKEhUTUxPcHRpb25FbGVtZW50KiBleGNsdWRlRWxlbWVudCkKLXsKLSAgICBkZXNlbGVjdEl0
ZW1zKG1fZGF0YSwgdGhpcywgZXhjbHVkZUVsZW1lbnQpOwotICAgIHNldE5lZWRzVmFsaWRpdHlD
aGVjaygpOwotfQotCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KGlu
dCBvcHRpb25JbmRleCwgYm9vbCBkZXNlbGVjdCkKIHsKLSAgICBzZXRTZWxlY3RlZEluZGV4KG1f
ZGF0YSwgdGhpcywgb3B0aW9uSW5kZXgsIGRlc2VsZWN0LCBmYWxzZSwgZmFsc2UpOworICAgIHNl
dFNlbGVjdGVkSW5kZXhJbnRlcm5hbChvcHRpb25JbmRleCwgZGVzZWxlY3QsIGZhbHNlLCBmYWxz
ZSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXhCeVVzZXIo
aW50IG9wdGlvbkluZGV4LCBib29sIGRlc2VsZWN0LCBib29sIGZpcmVPbkNoYW5nZU5vdywgYm9v
bCBhbGxvd011bHRpcGxlU2VsZWN0aW9uKQpAQCAtMTE5LDcgKzEwOCw3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXhCeVVzZXIoaW50IG9wdGlvbkluZGV4LCBib29s
IGRlc2VsZWN0LCBiCiAgICAgLy8gTGlzdCBib3ggc2VsZWN0cyBjYW4gZmlyZSBvbmNoYW5nZSBl
dmVudHMgdGhyb3VnaCB1c2VyIGludGVyYWN0aW9uLCBzdWNoIGFzCiAgICAgLy8gbW91c2Vkb3du
IGV2ZW50cy4gVGhpcyBhbGxvd3MgdGhhdCBzYW1lIGJlaGF2aW9yIHByb2dyYW1tYXRpY2FsbHku
CiAgICAgaWYgKCFtX2RhdGEudXNlc01lbnVMaXN0KCkpIHsKLSAgICAgICAgdXBkYXRlU2VsZWN0
ZWRTdGF0ZShtX2RhdGEsIHRoaXMsIG9wdGlvbkluZGV4LCBhbGxvd011bHRpcGxlU2VsZWN0aW9u
LCBmYWxzZSk7CisgICAgICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUob3B0aW9uSW5kZXgsIGFsbG93
TXVsdGlwbGVTZWxlY3Rpb24sIGZhbHNlKTsKICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNr
KCk7CiAgICAgICAgIGlmIChmaXJlT25DaGFuZ2VOb3cpCiAgICAgICAgICAgICBsaXN0Qm94T25D
aGFuZ2UoKTsKQEAgLTEzMyw3ICsxMjIsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRT
ZWxlY3RlZEluZGV4QnlVc2VyKGludCBvcHRpb25JbmRleCwgYm9vbCBkZXNlbGVjdCwgYgogICAg
IGlmIChvcHRpb25JbmRleCA9PSBzZWxlY3RlZEluZGV4KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBzZXRTZWxlY3RlZEluZGV4KG1fZGF0YSwgdGhpcywgb3B0aW9uSW5kZXgsIGRlc2Vs
ZWN0LCBmaXJlT25DaGFuZ2VOb3csIHRydWUpOworICAgIHNldFNlbGVjdGVkSW5kZXhJbnRlcm5h
bChvcHRpb25JbmRleCwgZGVzZWxlY3QsIGZpcmVPbkNoYW5nZU5vdywgdHJ1ZSk7CiB9CiAKIGJv
b2wgSFRNTFNlbGVjdEVsZW1lbnQ6Omhhc1BsYWNlaG9sZGVyTGFiZWxPcHRpb24oKSBjb25zdApA
QCAtMTc2LDcgKzE2NSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hTZWxlY3RJ
dGVtKGludCBsaXN0SW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBseVNlbGVjCiAgICAgaWYgKCFtdWx0
aXBsZSgpKQogICAgICAgICBzZXRTZWxlY3RlZEluZGV4QnlVc2VyKGxpc3RUb09wdGlvbkluZGV4
KGxpc3RJbmRleCksIHRydWUsIGZpcmVPbkNoYW5nZU5vdyk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IHVwZGF0ZVNlbGVjdGVkU3RhdGUobV9kYXRhLCB0aGlzLCBsaXN0SW5kZXgsIGFsbG93TXVsdGlw
bHlTZWxlY3Rpb25zLCBzaGlmdCk7CisgICAgICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUobGlzdElu
ZGV4LCBhbGxvd011bHRpcGx5U2VsZWN0aW9ucywgc2hpZnQpOwogICAgICAgICBzZXROZWVkc1Zh
bGlkaXR5Q2hlY2soKTsKICAgICAgICAgaWYgKGZpcmVPbkNoYW5nZU5vdykKICAgICAgICAgICAg
IGxpc3RCb3hPbkNoYW5nZSgpOwpAQCAtMTk0LDcgKzE4Myw3IEBAIGludCBIVE1MU2VsZWN0RWxl
bWVudDo6YWN0aXZlU2VsZWN0aW9uRW5kTGlzdEluZGV4KCkgY29uc3QKIHsKICAgICBpZiAobV9k
YXRhLmFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCkgPj0gMCkKICAgICAgICAgcmV0dXJuIG1fZGF0
YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpOwotICAgIHJldHVybiBsYXN0U2VsZWN0ZWRMaXN0
SW5kZXgobV9kYXRhLCB0aGlzKTsKKyAgICByZXR1cm4gbGFzdFNlbGVjdGVkTGlzdEluZGV4KCk7
CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmFkZChIVE1MRWxlbWVudCogZWxlbWVudCwg
SFRNTEVsZW1lbnQqIGJlZm9yZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0zMTcsMTYgKzMwNiw2
IEBAIFJlbmRlck9iamVjdCogSFRNTFNlbGVjdEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRl
ckxpc3RCb3godGhpcyk7CiB9CiAKLWludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uVG9MaXN0
SW5kZXgoaW50IG9wdGlvbkluZGV4KSBjb25zdAotewotICAgIHJldHVybiBvcHRpb25Ub0xpc3RJ
bmRleChtX2RhdGEsIHRoaXMsIG9wdGlvbkluZGV4KTsKLX0KLQotaW50IEhUTUxTZWxlY3RFbGVt
ZW50OjpsaXN0VG9PcHRpb25JbmRleChpbnQgbGlzdEluZGV4KSBjb25zdAotewotICAgIHJldHVy
biBsaXN0VG9PcHRpb25JbmRleChtX2RhdGEsIHRoaXMsIGxpc3RJbmRleCk7Ci19Ci0KIFBhc3NS
ZWZQdHI8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9ucygp
CiB7CiAgICAgcmV0dXJuIEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMpOwpAQCAt
MzUzLDUzICszMzIsNiBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQo
Ym9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZQogICAgICAgICByZW5kZXJl
cigpLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmNoaWxkcmVuQ2hhbmdlZChyZW5kZXJl
cigpKTsKIH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0UmVjYWxjTGlzdEl0ZW1zKCkK
LXsKLSAgICBzZXRSZWNhbGNMaXN0SXRlbXMobV9kYXRhLCB0aGlzKTsKLQotICAgIGlmICghaW5E
b2N1bWVudCgpKQotICAgICAgICBtX2NvbGxlY3Rpb25JbmZvLnJlc2V0KCk7Ci19Ci0KLXZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQotewot
ICAgIGRlZmF1bHRFdmVudEhhbmRsZXIobV9kYXRhLCB0aGlzLCBldmVudCwgZm9ybSgpKTsKLSAg
ICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
LX0KLQotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5k
ZXgoaW50IGluZGV4KQotewotICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KG1fZGF0
YSwgdGhpcywgaW5kZXgpOwotfQotCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVT
ZWxlY3Rpb25FbmRJbmRleChpbnQgaW5kZXgpCi17Ci0gICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5k
SW5kZXgobV9kYXRhLCBpbmRleCk7Ci19Ci0KLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0
ZUxpc3RCb3hTZWxlY3Rpb24oYm9vbCBkZXNlbGVjdE90aGVyT3B0aW9ucykKLXsKLSAgICB1cGRh
dGVMaXN0Qm94U2VsZWN0aW9uKG1fZGF0YSwgdGhpcywgZGVzZWxlY3RPdGhlck9wdGlvbnMpOwot
ICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwotfQotCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjptZW51TGlzdE9uQ2hhbmdlKCkKLXsKLSAgICBtZW51TGlzdE9uQ2hhbmdlKG1fZGF0YSwgdGhp
cyk7Ci19Ci0KLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZSgpCi17Ci0g
ICAgbGlzdEJveE9uQ2hhbmdlKG1fZGF0YSwgdGhpcyk7Ci19Ci0KLXZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnNhdmVMYXN0U2VsZWN0aW9uKCkKLXsKLSAgICBzYXZlTGFzdFNlbGVjdGlvbihtX2Rh
dGEsIHRoaXMpOwotfQotCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24o
Ym9vbCBzZW5kVG9BbnlFbGVtZW50KQogewogICAgIGZvY3VzKCk7CkBAIC00OTYsMTEgKzQyOCw2
IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldExlbmd0aCh1bnNpZ25lZCBuZXdMZW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogfQogCi12b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpzY3JvbGxUb1NlbGVjdGlvbigpCi17Ci0gICAgc2Nyb2xsVG9T
ZWxlY3Rpb24obV9kYXRhLCB0aGlzKTsKLX0KLQogYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6aXNS
ZXF1aXJlZEZvcm1Db250cm9sKCkgY29uc3QKIHsKICAgICByZXR1cm4gcmVxdWlyZWQoKTsKQEAg
LTU3Nyw5MyArNTA0LDkzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdEFsbCgpCiAK
ICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBu
ZXcgc2VsZWN0QWxsIHNlbGVjdGlvbgogICAgIC8vIHdoZW4gZGlzcGF0Y2hpbmcgY2hhbmdlIGV2
ZW50cwotICAgIHNhdmVMYXN0U2VsZWN0aW9uKG1fZGF0YSwgdGhpcyk7CisgICAgc2F2ZUxhc3RT
ZWxlY3Rpb24oKTsKIAogICAgIG1fZGF0YS5zZXRBY3RpdmVTZWxlY3Rpb25TdGF0ZSh0cnVlKTsK
LSAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChtX2RhdGEsIHRoaXMsIG5leHRTZWxl
Y3RhYmxlTGlzdEluZGV4KG1fZGF0YSwgdGhpcywgLTEpKTsKLSAgICBzZXRBY3RpdmVTZWxlY3Rp
b25FbmRJbmRleChtX2RhdGEsIHByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleChtX2RhdGEsIHRo
aXMsIC0xKSk7CisgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgobmV4dFNlbGVjdGFi
bGVMaXN0SW5kZXgobV9kYXRhLCB0aGlzLCAtMSkpOworICAgIHNldEFjdGl2ZVNlbGVjdGlvbkVu
ZEluZGV4KHByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleChtX2RhdGEsIHRoaXMsIC0xKSk7CiAK
LSAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKG1fZGF0YSwgdGhpcywgZmFsc2UpOwotICAgIGxp
c3RCb3hPbkNoYW5nZShtX2RhdGEsIHRoaXMpOworICAgIHVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24o
ZmFsc2UpOworICAgIGxpc3RCb3hPbkNoYW5nZSgpOwogICAgIHNldE5lZWRzVmFsaWRpdHlDaGVj
aygpOwogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzYXZlTGFzdFNlbGVjdGlvbihTZWxl
Y3RFbGVtZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnNhdmVMYXN0U2VsZWN0aW9uKCkKIHsKLSAgICBpZiAoZGF0YS51c2VzTWVudUxpc3Qo
KSkgewotICAgICAgICBkYXRhLnNldExhc3RPbkNoYW5nZUluZGV4KHNlbGVjdGVkSW5kZXgoZGF0
YSwgZWxlbWVudCkpOworICAgIGlmIChtX2RhdGEudXNlc01lbnVMaXN0KCkpIHsKKyAgICAgICAg
bV9kYXRhLnNldExhc3RPbkNoYW5nZUluZGV4KHNlbGVjdGVkSW5kZXgoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8Ym9vbD4mIGxhc3RPbkNoYW5nZVNlbGVjdGlvbiA9
IGRhdGEubGFzdE9uQ2hhbmdlU2VsZWN0aW9uKCk7IAorICAgIFZlY3Rvcjxib29sPiYgbGFzdE9u
Q2hhbmdlU2VsZWN0aW9uID0gbV9kYXRhLmxhc3RPbkNoYW5nZVNlbGVjdGlvbigpOyAKICAgICBs
YXN0T25DaGFuZ2VTZWxlY3Rpb24uY2xlYXIoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50
Kj4mIGl0ZW1zID0gZGF0YS5saXN0SXRlbXMoZWxlbWVudCk7CisgICAgY29uc3QgVmVjdG9yPEVs
ZW1lbnQqPiYgaXRlbXMgPSBtX2RhdGEubGlzdEl0ZW1zKHRoaXMpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewogICAgICAgICBPcHRpb25FbGVtZW50
KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKTsKICAgICAgICAgbGFz
dE9uQ2hhbmdlU2VsZWN0aW9uLmFwcGVuZChvcHRpb25FbGVtZW50ICYmIG9wdGlvbkVsZW1lbnQt
PnNlbGVjdGVkKCkpOwogICAgIH0KIH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0
aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVsZW1lbnQq
IGVsZW1lbnQsIGludCBpbmRleCkKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNl
bGVjdGlvbkFuY2hvckluZGV4KGludCBpbmRleCkKIHsKLSAgICBkYXRhLnNldEFjdGl2ZVNlbGVj
dGlvbkFuY2hvckluZGV4KGluZGV4KTsKKyAgICBtX2RhdGEuc2V0QWN0aXZlU2VsZWN0aW9uQW5j
aG9ySW5kZXgoaW5kZXgpOwogCiAgICAgLy8gQ2FjaGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBzbyB3
ZSBjYW4gcmVzdG9yZSB0aGUgb2xkIHNlbGVjdGlvbiBhcyB0aGUgbmV3CiAgICAgLy8gc2VsZWN0
aW9uIHBpdm90cyBhcm91bmQgdGhpcyBhbmNob3IgaW5kZXgKLSAgICBWZWN0b3I8Ym9vbD4mIGNh
Y2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uID0gZGF0YS5jYWNoZWRTdGF0ZUZvckFjdGl2ZVNl
bGVjdGlvbigpOyAKKyAgICBWZWN0b3I8Ym9vbD4mIGNhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0
aW9uID0gbV9kYXRhLmNhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uKCk7IAogICAgIGNhY2hl
ZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLmNsZWFyKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8RWxl
bWVudCo+JiBpdGVtcyA9IGRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpOworICAgIGNvbnN0IFZlY3Rv
cjxFbGVtZW50Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT3B0aW9uRWxl
bWVudCogb3B0aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAg
IGNhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLmFwcGVuZChvcHRpb25FbGVtZW50ICYmIG9w
dGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkpOwogICAgIH0KIH0KIAotdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6c2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEs
IGludCBpbmRleCkKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkVu
ZEluZGV4KGludCBpbmRleCkKIHsKLSAgICBkYXRhLnNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4
KGluZGV4KTsKKyAgICBtX2RhdGEuc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoaW5kZXgpOwog
fQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKFNlbGVj
dEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LCBib29sIGRlc2VsZWN0T3RoZXJP
cHRpb25zKQordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbGVjdGlvbihi
b29sIGRlc2VsZWN0T3RoZXJPcHRpb25zKQogewotICAgIEFTU0VSVChlbGVtZW50LT5yZW5kZXJl
cigpICYmIChlbGVtZW50LT5yZW5kZXJlcigpLT5pc0xpc3RCb3goKSB8fCBkYXRhLm11bHRpcGxl
KCkpKTsKLSAgICBBU1NFUlQoIWRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpLnNpemUoKSB8fCBkYXRh
LmFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCkgPj0gMCk7CisgICAgQVNTRVJUKHJlbmRlcmVy
KCkgJiYgKHJlbmRlcmVyKCktPmlzTGlzdEJveCgpIHx8IG1fZGF0YS5tdWx0aXBsZSgpKSk7Cisg
ICAgQVNTRVJUKCFtX2RhdGEubGlzdEl0ZW1zKHRoaXMpLnNpemUoKSB8fCBtX2RhdGEuYWN0aXZl
U2VsZWN0aW9uQW5jaG9ySW5kZXgoKSA+PSAwKTsKIAotICAgIHVuc2lnbmVkIHN0YXJ0ID0gbWlu
KGRhdGEuYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoKSwgZGF0YS5hY3RpdmVTZWxlY3Rpb25F
bmRJbmRleCgpKTsKLSAgICB1bnNpZ25lZCBlbmQgPSBtYXgoZGF0YS5hY3RpdmVTZWxlY3Rpb25B
bmNob3JJbmRleCgpLCBkYXRhLmFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCkpOwotICAgIFZlY3Rv
cjxib29sPiYgY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24gPSBkYXRhLmNhY2hlZFN0YXRl
Rm9yQWN0aXZlU2VsZWN0aW9uKCk7CisgICAgdW5zaWduZWQgc3RhcnQgPSBtaW4obV9kYXRhLmFj
dGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCksIG1fZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRl
eCgpKTsKKyAgICB1bnNpZ25lZCBlbmQgPSBtYXgobV9kYXRhLmFjdGl2ZVNlbGVjdGlvbkFuY2hv
ckluZGV4KCksIG1fZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpKTsKKyAgICBWZWN0b3I8
Ym9vbD4mIGNhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uID0gbV9kYXRhLmNhY2hlZFN0YXRl
Rm9yQWN0aXZlU2VsZWN0aW9uKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVt
cyA9IGRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4m
IGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9u
RWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAgIGlmICghb3B0aW9u
RWxlbWVudCB8fCBpdGVtc1tpXS0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIGlmIChpID49IHN0YXJ0ICYmIGkgPD0gZW5kKQotICAgICAgICAgICAgb3B0aW9u
RWxlbWVudC0+c2V0U2VsZWN0ZWRTdGF0ZShkYXRhLmFjdGl2ZVNlbGVjdGlvblN0YXRlKCkpOwor
ICAgICAgICAgICAgb3B0aW9uRWxlbWVudC0+c2V0U2VsZWN0ZWRTdGF0ZShtX2RhdGEuYWN0aXZl
U2VsZWN0aW9uU3RhdGUoKSk7CiAgICAgICAgIGVsc2UgaWYgKGRlc2VsZWN0T3RoZXJPcHRpb25z
IHx8IGkgPj0gY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rpb24uc2l6ZSgpKQogICAgICAgICAg
ICAgb3B0aW9uRWxlbWVudC0+c2V0U2VsZWN0ZWRTdGF0ZShmYWxzZSk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQtPnNldFNlbGVjdGVkU3RhdGUoY2FjaGVkU3RhdGVG
b3JBY3RpdmVTZWxlY3Rpb25baV0pOwogICAgIH0KIAotICAgIHRvU2VsZWN0RWxlbWVudChlbGVt
ZW50KS0+dXBkYXRlVmFsaWRpdHkoKTsKLSAgICBzY3JvbGxUb1NlbGVjdGlvbihkYXRhLCBlbGVt
ZW50KTsKKyAgICBzY3JvbGxUb1NlbGVjdGlvbigpOworICAgIHNldE5lZWRzVmFsaWRpdHlDaGVj
aygpOwogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94T25DaGFuZ2UoU2VsZWN0
RWxlbWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpsaXN0Qm94T25DaGFuZ2UoKQogewotICAgIEFTU0VSVCghZGF0YS51c2VzTWVudUxpc3Qo
KSB8fCBkYXRhLm11bHRpcGxlKCkpOworICAgIEFTU0VSVCghbV9kYXRhLnVzZXNNZW51TGlzdCgp
IHx8IG1fZGF0YS5tdWx0aXBsZSgpKTsKIAotICAgIFZlY3Rvcjxib29sPiYgbGFzdE9uQ2hhbmdl
U2VsZWN0aW9uID0gZGF0YS5sYXN0T25DaGFuZ2VTZWxlY3Rpb24oKTsgCi0gICAgY29uc3QgVmVj
dG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBkYXRhLmxpc3RJdGVtcyhlbGVtZW50KTsKKyAgICBWZWN0
b3I8Ym9vbD4mIGxhc3RPbkNoYW5nZVNlbGVjdGlvbiA9IG1fZGF0YS5sYXN0T25DaGFuZ2VTZWxl
Y3Rpb24oKTsgCisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBtX2RhdGEubGlz
dEl0ZW1zKHRoaXMpOwogCiAgICAgLy8gSWYgdGhlIGNhY2hlZCBzZWxlY3Rpb24gbGlzdCBpcyBl
bXB0eSwgb3IgdGhlIHNpemUgaGFzIGNoYW5nZWQsIHRoZW4gZmlyZQogICAgIC8vIGRpc3BhdGNo
Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCwgYW5kIHJldHVybiBlYXJseS4KICAgICBpZiAobGFzdE9u
Q2hhbmdlU2VsZWN0aW9uLmlzRW1wdHkoKSB8fCBsYXN0T25DaGFuZ2VTZWxlY3Rpb24uc2l6ZSgp
ICE9IGl0ZW1zLnNpemUoKSkgewotICAgICAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQoKTsKKyAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY3OCw0NyArNjA1LDQ5IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hPbkNoYW5nZShTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwg
RWxlbWVudCogZWxlbWVuCiAgICAgfQogCiAgICAgaWYgKGZpcmVPbkNoYW5nZSkKLSAgICAgICAg
ZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CisgICAgICAgIGRpc3Bh
dGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjptZW51TGlzdE9uQ2hhbmdlKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVt
ZW50KQordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3RPbkNoYW5nZSgpCiB7Ci0gICAg
QVNTRVJUKGRhdGEudXNlc01lbnVMaXN0KCkpOworICAgIEFTU0VSVChtX2RhdGEudXNlc01lbnVM
aXN0KCkpOwogCi0gICAgaW50IHNlbGVjdGVkID0gc2VsZWN0ZWRJbmRleChkYXRhLCBlbGVtZW50
KTsKLSAgICBpZiAoZGF0YS5sYXN0T25DaGFuZ2VJbmRleCgpICE9IHNlbGVjdGVkICYmIGRhdGEu
dXNlckRyaXZlbkNoYW5nZSgpKSB7Ci0gICAgICAgIGRhdGEuc2V0TGFzdE9uQ2hhbmdlSW5kZXgo
c2VsZWN0ZWQpOwotICAgICAgICBkYXRhLnNldFVzZXJEcml2ZW5DaGFuZ2UoZmFsc2UpOwotICAg
ICAgICBlbGVtZW50LT5kaXNwYXRjaEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKKyAgICBpbnQg
c2VsZWN0ZWQgPSBzZWxlY3RlZEluZGV4KCk7CisgICAgaWYgKG1fZGF0YS5sYXN0T25DaGFuZ2VJ
bmRleCgpICE9IHNlbGVjdGVkICYmIG1fZGF0YS51c2VyRHJpdmVuQ2hhbmdlKCkpIHsKKyAgICAg
ICAgbV9kYXRhLnNldExhc3RPbkNoYW5nZUluZGV4KHNlbGVjdGVkKTsKKyAgICAgICAgbV9kYXRh
LnNldFVzZXJEcml2ZW5DaGFuZ2UoZmFsc2UpOworICAgICAgICBkaXNwYXRjaEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQoKTsKICAgICB9CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNjcm9s
bFRvU2VsZWN0aW9uKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2Nyb2xsVG9TZWxlY3Rpb24oKQogewotICAgIGlmIChk
YXRhLnVzZXNNZW51TGlzdCgpKQorICAgIGlmIChtX2RhdGEudXNlc01lbnVMaXN0KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+
cmVuZGVyZXIoKSkKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCkpCiAgICAgICAgIHRvUmVuZGVyTGlzdEJveChyZW5kZXJlciktPnNlbGVjdGlvbkNoYW5n
ZWQoKTsKIH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0T3B0aW9uc0NoYW5nZWRPblJl
bmRlcmVyKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50KQordm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6c2V0T3B0aW9uc0NoYW5nZWRPblJlbmRlcmVyKCkKIHsKLSAgICBp
ZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgaWYgKGRhdGEudXNlc01lbnVMaXN0KCkpCisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSB0aGlzLT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChtX2RhdGEudXNlc01lbnVMaXN0
KCkpCiAgICAgICAgICAgICB0b1JlbmRlck1lbnVMaXN0KHJlbmRlcmVyKS0+c2V0T3B0aW9uc0No
YW5nZWQodHJ1ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRvUmVuZGVyTGlzdEJveChy
ZW5kZXJlciktPnNldE9wdGlvbnNDaGFuZ2VkKHRydWUpOwogICAgIH0KIH0KIAotdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6c2V0UmVjYWxjTGlzdEl0ZW1zKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRh
LCBFbGVtZW50KiBlbGVtZW50KQordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0UmVjYWxjTGlz
dEl0ZW1zKCkKIHsKLSAgICBkYXRhLnNldFNob3VsZFJlY2FsY0xpc3RJdGVtcyh0cnVlKTsKKyAg
ICBtX2RhdGEuc2V0U2hvdWxkUmVjYWxjTGlzdEl0ZW1zKHRydWUpOwogICAgIC8vIE1hbnVhbCBz
ZWxlY3Rpb24gYW5jaG9yIGlzIHJlc2V0IHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBzZWxlY3QgcHJv
Z3JhbW1hdGljYWxseS4KLSAgICBkYXRhLnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KC0x
KTsKLSAgICBzZXRPcHRpb25zQ2hhbmdlZE9uUmVuZGVyZXIoZGF0YSwgZWxlbWVudCk7Ci0gICAg
ZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIG1fZGF0YS5zZXRBY3RpdmVTZWxl
Y3Rpb25BbmNob3JJbmRleCgtMSk7CisgICAgc2V0T3B0aW9uc0NoYW5nZWRPblJlbmRlcmVyKCk7
CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGlmICghaW5Eb2N1bWVudCgpKQorICAg
ICAgICBtX2NvbGxlY3Rpb25JbmZvLnJlc2V0KCk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnJlY2FsY0xpc3RJdGVtcyhTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgY29uc3QgRWxlbWVu
dCogZWxlbWVudCwgYm9vbCB1cGRhdGVTZWxlY3RlZFN0YXRlcykKQEAgLTc3NSwxMiArNzA0LDEy
IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyhTZWxlY3RFbGVtZW50
RGF0YSYgZGF0YSwgY29uc3QgRWxlbWVudCoKICAgICB9CiB9CiAKLWludCBIVE1MU2VsZWN0RWxl
bWVudDo6c2VsZWN0ZWRJbmRleChjb25zdCBTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgY29uc3Qg
RWxlbWVudCogZWxlbWVudCkKK2ludCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleCgp
IGNvbnN0CiB7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogCiAgICAgLy8gcmV0dXJuIHRoZSBu
dW1iZXIgb2YgdGhlIGZpcnN0IG9wdGlvbiBzZWxlY3RlZAotICAgIGNvbnN0IFZlY3RvcjxFbGVt
ZW50Kj4mIGl0ZW1zID0gZGF0YS5saXN0SXRlbXMoZWxlbWVudCk7CisgICAgY29uc3QgVmVjdG9y
PEVsZW1lbnQqPiYgaXRlbXMgPSBtX2RhdGEubGlzdEl0ZW1zKHRoaXMpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKE9wdGlvbkVs
ZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKSB7CiAgICAg
ICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkKQEAgLTc5Miw1OCArNzIxLDU4
IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleChjb25zdCBTZWxlY3RFbGVt
ZW50RGF0YSYgZGF0YSwgY29uc3QgRWxlbWVuCiAgICAgcmV0dXJuIC0xOwogfQogCi12b2lkIEhU
TUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KFNlbGVjdEVsZW1lbnREYXRhJiBkYXRh
LCBFbGVtZW50KiBlbGVtZW50LCBpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wg
ZmlyZU9uQ2hhbmdlTm93LCBib29sIHVzZXJEcml2ZW5DaGFuZ2UpCit2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpzZXRTZWxlY3RlZEluZGV4SW50ZXJuYWwoaW50IG9wdGlvbkluZGV4LCBib29sIGRl
c2VsZWN0LCBib29sIGZpcmVPbkNoYW5nZU5vdywgYm9vbCB1c2VyRHJpdmVuQ2hhbmdlKQogewot
ICAgIGlmIChvcHRpb25JbmRleCA9PSAtMSAmJiAhZGVzZWxlY3QgJiYgIWRhdGEubXVsdGlwbGUo
KSkKLSAgICAgICAgb3B0aW9uSW5kZXggPSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleChkYXRhLCBl
bGVtZW50LCAtMSk7Ci0gICAgaWYgKCFkYXRhLm11bHRpcGxlKCkpCisgICAgaWYgKG9wdGlvbklu
ZGV4ID09IC0xICYmICFkZXNlbGVjdCAmJiAhbV9kYXRhLm11bHRpcGxlKCkpCisgICAgICAgIG9w
dGlvbkluZGV4ID0gbmV4dFNlbGVjdGFibGVMaXN0SW5kZXgobV9kYXRhLCB0aGlzLCAtMSk7Cisg
ICAgaWYgKCFtX2RhdGEubXVsdGlwbGUoKSkKICAgICAgICAgZGVzZWxlY3QgPSB0cnVlOwogCi0g
ICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBkYXRhLmxpc3RJdGVtcyhlbGVtZW50
KTsKLSAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoZGF0YSwgZWxlbWVudCwg
b3B0aW9uSW5kZXgpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbV9kYXRh
Lmxpc3RJdGVtcyh0aGlzKTsKKyAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgo
b3B0aW9uSW5kZXgpOwogCiAgICAgRWxlbWVudCogZXhjbHVkZUVsZW1lbnQgPSAwOwogICAgIGlm
IChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gKGxpc3RJbmRleCA+PSAwID8gdG9PcHRp
b25FbGVtZW50KGl0ZW1zW2xpc3RJbmRleF0pIDogMCkpIHsKICAgICAgICAgZXhjbHVkZUVsZW1l
bnQgPSBpdGVtc1tsaXN0SW5kZXhdOwotICAgICAgICBpZiAoZGF0YS5hY3RpdmVTZWxlY3Rpb25B
bmNob3JJbmRleCgpIDwgMCB8fCBkZXNlbGVjdCkKLSAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVj
dGlvbkFuY2hvckluZGV4KGRhdGEsIGVsZW1lbnQsIGxpc3RJbmRleCk7Ci0gICAgICAgIGlmIChk
YXRhLmFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCkgPCAwIHx8IGRlc2VsZWN0KQotICAgICAgICAg
ICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoZGF0YSwgbGlzdEluZGV4KTsKKyAgICAgICAg
aWYgKG1fZGF0YS5hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCB8fCBkZXNlbGVjdCkK
KyAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGxpc3RJbmRleCk7Cisg
ICAgICAgIGlmIChtX2RhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSA8IDAgfHwgZGVzZWxl
Y3QpCisgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChsaXN0SW5kZXgpOwog
ICAgICAgICBvcHRpb25FbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwogICAgIH0KIAog
ICAgIGlmIChkZXNlbGVjdCkKLSAgICAgICAgZGVzZWxlY3RJdGVtcyhkYXRhLCBlbGVtZW50LCBl
eGNsdWRlRWxlbWVudCk7CisgICAgICAgIGRlc2VsZWN0SXRlbXMoZXhjbHVkZUVsZW1lbnQpOwog
CiAgICAgLy8gRm9yIHRoZSBtZW51IGxpc3QgY2FzZSwgdGhpcyBpcyB3aGF0IG1ha2VzIHRoZSBz
ZWxlY3RlZCBlbGVtZW50IGFwcGVhci4KLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IGVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsK
IAotICAgIHNjcm9sbFRvU2VsZWN0aW9uKGRhdGEsIGVsZW1lbnQpOworICAgIHNjcm9sbFRvU2Vs
ZWN0aW9uKCk7CiAKICAgICAvLyBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2l0aCBmaXJlT25DaGFu
Z2VOb3cgZm9yIG1lbnUgbGlzdHMuIAotICAgIGlmIChkYXRhLnVzZXNNZW51TGlzdCgpKSB7Ci0g
ICAgICAgIGRhdGEuc2V0VXNlckRyaXZlbkNoYW5nZSh1c2VyRHJpdmVuQ2hhbmdlKTsKKyAgICBp
ZiAobV9kYXRhLnVzZXNNZW51TGlzdCgpKSB7CisgICAgICAgIG1fZGF0YS5zZXRVc2VyRHJpdmVu
Q2hhbmdlKHVzZXJEcml2ZW5DaGFuZ2UpOwogICAgICAgICBpZiAoZmlyZU9uQ2hhbmdlTm93KQot
ICAgICAgICAgICAgbWVudUxpc3RPbkNoYW5nZShkYXRhLCBlbGVtZW50KTsKLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICBt
ZW51TGlzdE9uQ2hhbmdlKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgICAgIGlmIChk
YXRhLnVzZXNNZW51TGlzdCgpKQorICAgICAgICAgICAgaWYgKG1fZGF0YS51c2VzTWVudUxpc3Qo
KSkKICAgICAgICAgICAgICAgICB0b1JlbmRlck1lbnVMaXN0KHJlbmRlcmVyKS0+ZGlkU2V0U2Vs
ZWN0ZWRJbmRleChsaXN0SW5kZXgpOwogICAgICAgICAgICAgZWxzZSBpZiAocmVuZGVyZXItPmlz
TGlzdEJveCgpKQogICAgICAgICAgICAgICAgIHRvUmVuZGVyTGlzdEJveChyZW5kZXJlciktPnNl
bGVjdGlvbkNoYW5nZWQoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRvU2VsZWN0RWxlbWVu
dChlbGVtZW50KS0+dXBkYXRlVmFsaWRpdHkoKTsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZWxl
bWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgZnJhbWUtPnBhZ2UoKS0+Y2hyb21l
KCktPmNsaWVudCgpLT5mb3JtU3RhdGVEaWRDaGFuZ2UoZWxlbWVudCk7CisgICAgdXBkYXRlVmFs
aWRpdHkoKTsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAg
ICAgICAgZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtU3RhdGVEaWRDaGFu
Z2UodGhpcyk7CiB9CiAKLWludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uVG9MaXN0SW5kZXgo
Y29uc3QgU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGlu
dCBvcHRpb25JbmRleCkKK2ludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uVG9MaXN0SW5kZXgo
aW50IG9wdGlvbkluZGV4KSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0
ZW1zID0gZGF0YS5saXN0SXRlbXMoZWxlbWVudCk7Ci0gICAgaW50IGxpc3RTaXplID0gKGludCkg
aXRlbXMuc2l6ZSgpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbV9kYXRh
Lmxpc3RJdGVtcyh0aGlzKTsKKyAgICBpbnQgbGlzdFNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KGl0
ZW1zLnNpemUoKSk7CiAgICAgaWYgKG9wdGlvbkluZGV4IDwgMCB8fCBvcHRpb25JbmRleCA+PSBs
aXN0U2l6ZSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC04NTksMTAgKzc4OCwxMCBAQCBpbnQg
SFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4KGNvbnN0IFNlbGVjdEVsZW1lbnRE
YXRhJiBkYXRhLCBjb25zdCBFbAogICAgIHJldHVybiAtMTsKIH0KIAotaW50IEhUTUxTZWxlY3RF
bGVtZW50OjpsaXN0VG9PcHRpb25JbmRleChjb25zdCBTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwg
Y29uc3QgRWxlbWVudCogZWxlbWVudCwgaW50IGxpc3RJbmRleCkKK2ludCBIVE1MU2VsZWN0RWxl
bWVudDo6bGlzdFRvT3B0aW9uSW5kZXgoaW50IGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICBjb25z
dCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpOwotICAg
IGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSB8fCAh
aXNPcHRpb25FbGVtZW50KGl0ZW1zW2xpc3RJbmRleF0pKQorICAgIGNvbnN0IFZlY3RvcjxFbGVt
ZW50Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKTsKKyAgICBpZiAobGlzdEluZGV4
IDwgMCB8fCBsaXN0SW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihpdGVtcy5zaXplKCkpIHx8ICFp
c09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkpCiAgICAgICAgIHJldHVybiAtMTsKIAog
ICAgIC8vIEFjdHVhbCBpbmRleCBvZiBvcHRpb24gbm90IGNvdW50aW5nIE9QVEdST1VQIGVudHJp
ZXMgdGhhdCBtYXkgYmUgaW4gbGlzdC4KQEAgLTg4MCw3ICs4MDksNyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoUGFzc1JlZlB0cjxOb2RlPiBvbGRGb2N1c2Vk
Tm9kZSkKICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRv
IHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4KICAgICAvLyBkaXNwYXRjaGluZyBjaGFuZ2UgZXZlbnRz
IGR1cmluZyBibHVyIGV2ZW50IGRpc3BhdGNoYWwKICAgICBpZiAobV9kYXRhLnVzZXNNZW51TGlz
dCgpKQotICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbihtX2RhdGEsIHRoaXMpOworICAgICAgICBz
YXZlTGFzdFNlbGVjdGlvbigpOwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6
OmRpc3BhdGNoRm9jdXNFdmVudChvbGRGb2N1c2VkTm9kZSk7CiB9CiAKQEAgLTg5MCwxMyArODE5
LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KFBhc3NSZWZQ
dHI8Tm9kZT4gbmV3Rm9jdXNlZE5vZGUpCiAgICAgLy8gY2hhbmdlIGV2ZW50cyBmb3IgbGlzdCBi
b3hlcyB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZSBpcyBhY3R1YWxseSBtYWRlLgogICAg
IC8vIFRoaXMgbWF0Y2hlcyBvdGhlciBicm93c2VycycgYmVoYXZpb3IuCiAgICAgaWYgKG1fZGF0
YS51c2VzTWVudUxpc3QoKSkKLSAgICAgICAgbWVudUxpc3RPbkNoYW5nZShtX2RhdGEsIHRoaXMp
OworICAgICAgICBtZW51TGlzdE9uQ2hhbmdlKCk7CiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZTo6ZGlzcGF0Y2hCbHVyRXZlbnQobmV3Rm9jdXNlZE5vZGUpOwogfQogCi12b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRh
LCBFbGVtZW50KiBlbGVtZW50LCBFbGVtZW50KiBleGNsdWRlRWxlbWVudCkKK3ZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXMoRWxlbWVudCogZXhjbHVkZUVsZW1lbnQpCiB7Ci0g
ICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBkYXRhLmxpc3RJdGVtcyhlbGVtZW50
KTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IG1fZGF0YS5saXN0SXRlbXMo
dGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIGlmIChpdGVtc1tpXSA9PSBleGNsdWRlRWxlbWVudCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtOTA0LDYgKzgzMyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2Vs
ZWN0SXRlbXMoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQsCiAgICAg
ICAgIGlmIChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0
ZW1zW2ldKSkKICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQtPnNldFNlbGVjdGVkU3RhdGUoZmFs
c2UpOwogICAgIH0KKyAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIH0KIAogYm9vbCBIVE1M
U2VsZWN0RWxlbWVudDo6c2F2ZUZvcm1Db250cm9sU3RhdGUoU3RyaW5nJiB2YWx1ZSkgY29uc3QK
QEAgLTkzNSw3ICs4NjUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlRm9ybUNv
bnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmIHN0YXRlKQogICAgICAgICAgICAgb3B0aW9uRWxlbWVu
dC0+c2V0U2VsZWN0ZWRTdGF0ZShzdGF0ZVtpXSA9PSAnWCcpOwogICAgIH0KIAotICAgIHNldE9w
dGlvbnNDaGFuZ2VkT25SZW5kZXJlcihtX2RhdGEsIHRoaXMpOworICAgIHNldE9wdGlvbnNDaGFu
Z2VkT25SZW5kZXJlcigpOwogICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogfQogCkBAIC05
OTcsMzEgKzkyNywzMCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiAgICAgaWYg
KCFzZWxlY3RlZE9wdGlvbiAmJiBmaXJzdE9wdGlvbiAmJiAhbV9kYXRhLm11bHRpcGxlKCkgJiYg
bV9kYXRhLnNpemUoKSA8PSAxKQogICAgICAgICBmaXJzdE9wdGlvbi0+c2V0U2VsZWN0ZWRTdGF0
ZSh0cnVlKTsKIAotICAgIHNldE9wdGlvbnNDaGFuZ2VkT25SZW5kZXJlcihtX2RhdGEsIHRoaXMp
OworICAgIHNldE9wdGlvbnNDaGFuZ2VkT25SZW5kZXJlcigpOwogICAgIHNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIH0KIAogI2lmICFQTEFURk9S
TShXSU4pIHx8IE9TKFdJTkNFKQotYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6cGxhdGZvcm1IYW5k
bGVLZXlkb3duRXZlbnQoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQs
IEtleWJvYXJkRXZlbnQqIGV2ZW50KQorYm9vbCBIVE1MU2VsZWN0RWxlbWVudDo6cGxhdGZvcm1I
YW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAjaWYgQVJST1dfS0VZ
U19QT1BfTUVOVQotICAgIGlmICghaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZWxlbWVudC0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkpIHsKKyAgICBpZiAoIWlzU3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkKGRvY3VtZW50KCktPmZyYW1lKCkpKSB7CiAgICAgICAgIGlmIChldmVudC0+a2V5SWRlbnRp
ZmllcigpID09ICJEb3duIiB8fCBldmVudC0+a2V5SWRlbnRpZmllcigpID09ICJVcCIpIHsKLSAg
ICAgICAgICAgIGVsZW1lbnQtPmZvY3VzKCk7Ci0KKyAgICAgICAgICAgIGZvY3VzKCk7CiAgICAg
ICAgICAgICAvLyBDYWxsaW5nIGZvY3VzKCkgbWF5IGNhdXNlIHVzIHRvIGxvc2Ugb3VyIHJlbmRl
cmVyLiBSZXR1cm4gdHJ1ZSBzbwogICAgICAgICAgICAgLy8gdGhhdCBvdXIgY2FsbGVyIGRvZXNu
J3QgcHJvY2VzcyB0aGUgZXZlbnQgZnVydGhlciwgYnV0IGRvbid0IHNldAogICAgICAgICAgICAg
Ly8gdGhlIGV2ZW50IGFzIGhhbmRsZWQuCi0gICAgICAgICAgICBpZiAoIWVsZW1lbnQtPnJlbmRl
cmVyKCkpCisgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4g
YmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24KICAgICAgICAgICAgIC8vIHdoZW4gZGlz
cGF0Y2hpbmcgY2hhbmdlIGV2ZW50cyBkdXJpbmcgc2V0U2VsZWN0ZWRJbmRleCwgd2hpY2gKICAg
ICAgICAgICAgIC8vIGdldHMgY2FsbGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdl
ZCwgd2hpY2ggZ2V0cyBjYWxsZWQKICAgICAgICAgICAgIC8vIGFmdGVyIHRoZSB1c2VyIG1ha2Vz
IGEgc2VsZWN0aW9uIGZyb20gdGhlIG1lbnUuCi0gICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlv
bihkYXRhLCBlbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChSZW5kZXJNZW51TGlzdCogbWVudUxp
c3QgPSB0b1JlbmRlck1lbnVMaXN0KGVsZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAg
c2F2ZUxhc3RTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChSZW5kZXJNZW51TGlzdCogbWVu
dUxpc3QgPSB0b1JlbmRlck1lbnVMaXN0KHJlbmRlcmVyKCkpKQogICAgICAgICAgICAgICAgIG1l
bnVMaXN0LT5zaG93UG9wdXAoKTsKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogICAgICAgICB9CkBAIC0xMDMyLDMwICs5NjEsMjcgQEAgYm9vbCBIVE1MU2VsZWN0RWxl
bWVudDo6cGxhdGZvcm1IYW5kbGVLZXlkb3duRXZlbnQoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEs
IEVsZW0KIH0KICNlbmRpZgogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1
bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQs
IEV2ZW50KiBldmVudCwgSFRNTEZvcm1FbGVtZW50KiBodG1sRm9ybSkKK3ZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewotICAg
ICAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkgfHwgIWV2ZW50LT5pc0tleWJvYXJkRXZlbnQo
KSkKKyAgICAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFldmVudC0+aXNLZXlib2FyZEV2ZW50KCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKHBsYXRmb3JtSGFuZGxlS2V5ZG93
bkV2ZW50KGRhdGEsIGVsZW1lbnQsIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkp
KQorICAgICAgICBpZiAocGxhdGZvcm1IYW5kbGVLZXlkb3duRXZlbnQoc3RhdGljX2Nhc3Q8S2V5
Ym9hcmRFdmVudCo+KGV2ZW50KSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8g
V2hlbiB1c2luZyBzcGF0aWFsIG5hdmlnYXRpb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBuYXZp
Z2F0ZSBhd2F5CiAgICAgICAgIC8vIGZyb20gdGhlIHNlbGVjdCBlbGVtZW50IHdoZW4gdGhlIHVz
ZXIgaGl0cyBhbnkgb2YgdGhlIGFycm93IGtleXMsCiAgICAgICAgIC8vIGluc3RlYWQgb2YgY2hh
bmdpbmcgdGhlIHNlbGVjdGlvbi4KLSAgICAgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkKGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkpKSB7Ci0gICAgICAgICAgICBpZiAoIWRh
dGEuYWN0aXZlU2VsZWN0aW9uU3RhdGUoKSkKKyAgICAgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRp
b25FbmFibGVkKGRvY3VtZW50KCktPmZyYW1lKCkpKSB7CisgICAgICAgICAgICBpZiAoIW1fZGF0
YS5hY3RpdmVTZWxlY3Rpb25TdGF0ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciA9IHN0YXRpY19jYXN0
PEtleWJvYXJkRXZlbnQqPihldmVudCktPmtleUlkZW50aWZpZXIoKTsKICAgICAgICAgYm9vbCBo
YW5kbGVkID0gdHJ1ZTsKLQotICAgICAgICBVTlVTRURfUEFSQU0oaHRtbEZvcm0pOwotICAgICAg
ICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBkYXRhLmxpc3RJdGVtcyhlbGVt
ZW50KTsKLQotICAgICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoZGF0YSwg
ZWxlbWVudCwgc2VsZWN0ZWRJbmRleChkYXRhLCBlbGVtZW50KSk7CisgICAgICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IG1fZGF0YS5saXN0SXRlbXModGhpcyk7CisgICAg
ICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChzZWxlY3RlZEluZGV4KCkpOwog
CiAgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIiB8fCBrZXlJZGVudGlmaWVyID09
ICJSaWdodCIpCiAgICAgICAgICAgICBsaXN0SW5kZXggPSBuZXh0VmFsaWRJbmRleChsaXN0SXRl
bXMsIGxpc3RJbmRleCwgU2tpcEZvcndhcmRzLCAxKTsKQEAgLTEwNzMsNyArOTk5LDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKFNlbGVjdEVs
ZW1lbnREYXRhJiBkYXRhLCBFbGUKICAgICAgICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKIAogICAg
ICAgICBpZiAoaGFuZGxlZCAmJiBsaXN0SW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obGlzdEluZGV4KSA8IGxpc3RJdGVtcy5zaXplKCkpCi0gICAgICAgICAgICBzZXRTZWxlY3Rl
ZEluZGV4KGRhdGEsIGVsZW1lbnQsIGxpc3RUb09wdGlvbkluZGV4KGRhdGEsIGVsZW1lbnQsIGxp
c3RJbmRleCkpOworICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleEludGVybmFsKGxpc3RUb09w
dGlvbkluZGV4KGxpc3RJbmRleCkpOwogCiAgICAgICAgIGlmIChoYW5kbGVkKQogICAgICAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CkBAIC0xMDgyLDY1ICsxMDA4LDY1IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihTZWxlY3RF
bGVtZW50RGF0YSYgZGF0YSwgRWxlCiAgICAgLy8gVXNlIGtleSBwcmVzcyBldmVudCBoZXJlIHNp
bmNlIHNlbmRpbmcgc2ltdWxhdGVkIG1vdXNlIGV2ZW50cwogICAgIC8vIG9uIGtleSBkb3duIGJs
b2NrcyB0aGUgcHJvcGVyIHNlbmRpbmcgb2YgdGhlIGtleSBwcmVzcyBldmVudC4KICAgICBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewotICAgICAgICBp
ZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkgfHwgIWV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAg
ICAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgaW50IGtleUNvZGUgPSBzdGF0aWNfY2FzdDxLZXli
b2FyZEV2ZW50Kj4oZXZlbnQpLT5rZXlDb2RlKCk7CiAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZh
bHNlOwogCi0gICAgICAgIGlmIChrZXlDb2RlID09ICcgJyAmJiBpc1NwYXRpYWxOYXZpZ2F0aW9u
RW5hYmxlZChlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpKSkgeworICAgICAgICBpZiAoa2V5
Q29kZSA9PSAnICcgJiYgaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQoKS0+ZnJh
bWUoKSkpIHsKICAgICAgICAgICAgIC8vIFVzZSBzcGFjZSB0byB0b2dnbGUgYXJyb3cga2V5IGhh
bmRsaW5nIGZvciBzZWxlY3Rpb24gY2hhbmdlIG9yIHNwYXRpYWwgbmF2aWdhdGlvbi4KLSAgICAg
ICAgICAgIGRhdGEuc2V0QWN0aXZlU2VsZWN0aW9uU3RhdGUoIWRhdGEuYWN0aXZlU2VsZWN0aW9u
U3RhdGUoKSk7CisgICAgICAgICAgICBtX2RhdGEuc2V0QWN0aXZlU2VsZWN0aW9uU3RhdGUoIW1f
ZGF0YS5hY3RpdmVTZWxlY3Rpb25TdGF0ZSgpKTsKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICNpZiBTUEFD
RV9PUl9SRVRVUk5fUE9QX01FTlUKICAgICAgICAgaWYgKGtleUNvZGUgPT0gJyAnIHx8IGtleUNv
ZGUgPT0gJ1xyJykgewotICAgICAgICAgICAgZWxlbWVudC0+Zm9jdXMoKTsKKyAgICAgICAgICAg
IGZvY3VzKCk7CiAKICAgICAgICAgICAgIC8vIENhbGxpbmcgZm9jdXMoKSBtYXkgY2F1c2UgdXMg
dG8gbG9zZSBvdXIgcmVuZGVyZXIsIGluIHdoaWNoIGNhc2UKICAgICAgICAgICAgIC8vIGRvIG5v
dCB3YW50IHRvIGhhbmRsZSB0aGUgZXZlbnQuCi0gICAgICAgICAgICBpZiAoIWVsZW1lbnQtPnJl
bmRlcmVyKCkpCisgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJl
IGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uCiAgICAgICAgICAgICAvLyB3aGVuIGRpc3Bh
dGNoaW5nIGNoYW5nZSBldmVudHMgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsIHdoaWNoCiAgICAg
ICAgICAgICAvLyBnZXRzIGNhbGxlZCBmcm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQs
IHdoaWNoIGdldHMgY2FsbGVkCiAgICAgICAgICAgICAvLyBhZnRlciB0aGUgdXNlciBtYWtlcyBh
IHNlbGVjdGlvbiBmcm9tIHRoZSBtZW51LgotICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24o
ZGF0YSwgZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0
ID0gdG9SZW5kZXJNZW51TGlzdChlbGVtZW50LT5yZW5kZXJlcigpKSkKKyAgICAgICAgICAgIHNh
dmVMYXN0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoUmVuZGVyTWVudUxpc3QqIG1lbnVM
aXN0ID0gdG9SZW5kZXJNZW51TGlzdChyZW5kZXJlcigpKSkKICAgICAgICAgICAgICAgICBtZW51
TGlzdC0+c2hvd1BvcHVwKCk7CiAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAg
fQogI2VsaWYgQVJST1dfS0VZU19QT1BfTUVOVQogICAgICAgICBpZiAoa2V5Q29kZSA9PSAnICcp
IHsKLSAgICAgICAgICAgIGVsZW1lbnQtPmZvY3VzKCk7CisgICAgICAgICAgICBmb2N1cygpOwog
CiAgICAgICAgICAgICAvLyBDYWxsaW5nIGZvY3VzKCkgbWF5IGNhdXNlIHVzIHRvIGxvc2Ugb3Vy
IHJlbmRlcmVyLCBpbiB3aGljaCBjYXNlCiAgICAgICAgICAgICAvLyBkbyBub3Qgd2FudCB0byBo
YW5kbGUgdGhlIGV2ZW50LgotICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5yZW5kZXJlcigpKQor
ICAgICAgICAgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0
byB0aGUgbmV3IHNlbGVjdGlvbgogICAgICAgICAgICAgLy8gd2hlbiBkaXNwYXRjaGluZyBjaGFu
Z2UgZXZlbnRzIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LCB3aGljaAogICAgICAgICAgICAgLy8g
Z2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkLCB3aGljaCBnZXRz
IGNhbGxlZAogICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIHVzZXIgbWFrZXMgYSBzZWxlY3Rpb24g
ZnJvbSB0aGUgbWVudS4KLSAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKGRhdGEsIGVsZW1l
bnQpOwotICAgICAgICAgICAgaWYgKFJlbmRlck1lbnVMaXN0KiBtZW51TGlzdCA9IHRvUmVuZGVy
TWVudUxpc3QoZWxlbWVudC0+cmVuZGVyZXIoKSkpCisgICAgICAgICAgICBzYXZlTGFzdFNlbGVj
dGlvbigpOworICAgICAgICAgICAgaWYgKFJlbmRlck1lbnVMaXN0KiBtZW51TGlzdCA9IHRvUmVu
ZGVyTWVudUxpc3QocmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgbWVudUxpc3QtPnNob3dQ
b3B1cCgpOwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAo
a2V5Q29kZSA9PSAnXHInKSB7Ci0gICAgICAgICAgICBpZiAoaHRtbEZvcm0pCi0gICAgICAgICAg
ICAgICAgaHRtbEZvcm0tPnN1Ym1pdEltcGxpY2l0bHkoZXZlbnQsIGZhbHNlKTsKLSAgICAgICAg
ICAgIG1lbnVMaXN0T25DaGFuZ2UoZGF0YSwgZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoZm9y
bSgpKQorICAgICAgICAgICAgICAgIGZvcm0oKS0+c3VibWl0SW1wbGljaXRseShldmVudCwgZmFs
c2UpOworICAgICAgICAgICAgbWVudUxpc3RPbkNoYW5nZSgpOwogICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7CiAgICAgICAgIH0KICNlbHNlCi0gICAgICAgIGludCBsaXN0SW5kZXggPSBvcHRp
b25Ub0xpc3RJbmRleChkYXRhLCBlbGVtZW50LCBzZWxlY3RlZEluZGV4KGRhdGEsIGVsZW1lbnQp
KTsKKyAgICAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KHNlbGVjdGVkSW5k
ZXgoKSk7CiAgICAgICAgIGlmIChrZXlDb2RlID09ICdccicpIHsKICAgICAgICAgICAgIC8vIGxp
c3RJbmRleCBzaG91bGQgYWxyZWFkeSBiZSBzZWxlY3RlZCwgYnV0IHRoaXMgd2lsbCBmaXJlIHRo
ZSBvbmNoYW5nZSBoYW5kbGVyLgotICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChkYXRhLCBl
bGVtZW50LCBsaXN0VG9PcHRpb25JbmRleChkYXRhLCBlbGVtZW50LCBsaXN0SW5kZXgpLCB0cnVl
LCB0cnVlKTsKKyAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXhJbnRlcm5hbChsaXN0VG9PcHRp
b25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTExNDksOSArMTA3NSw5IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihTZWxlY3RFbGVtZW50RGF0
YSYgZGF0YSwgRWxlCiAgICAgfQogCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7Ci0gICAgICAg
IGVsZW1lbnQtPmZvY3VzKCk7Ci0gICAgICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpICYmIGVs
ZW1lbnQtPnJlbmRlcmVyKCktPmlzTWVudUxpc3QoKSkgewotICAgICAgICAgICAgaWYgKFJlbmRl
ck1lbnVMaXN0KiBtZW51TGlzdCA9IHRvUmVuZGVyTWVudUxpc3QoZWxlbWVudC0+cmVuZGVyZXIo
KSkpIHsKKyAgICAgICAgZm9jdXMoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVy
ZXIoKS0+aXNNZW51TGlzdCgpKSB7CisgICAgICAgICAgICBpZiAoUmVuZGVyTWVudUxpc3QqIG1l
bnVMaXN0ID0gdG9SZW5kZXJNZW51TGlzdChyZW5kZXJlcigpKSkgewogICAgICAgICAgICAgICAg
IGlmIChtZW51TGlzdC0+cG9wdXBJc1Zpc2libGUoKSkKICAgICAgICAgICAgICAgICAgICAgbWVu
dUxpc3QtPmhpZGVQb3B1cCgpOwogICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtMTE2MCw3ICsx
MDg2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5k
bGVyKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGUKICAgICAgICAgICAgICAgICAgICAgLy8g
d2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkLAogICAg
ICAgICAgICAgICAgICAgICAvLyB3aGljaCBnZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtl
cyBhIHNlbGVjdGlvbiBmcm9tCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtZW51LgotICAg
ICAgICAgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbihkYXRhLCBlbGVtZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKICAgICAgICAgICAgICAgICAgICAg
bWVudUxpc3QtPnNob3dQb3B1cCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTExNjksMjggKzEwOTUsMjggQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3RE
ZWZhdWx0RXZlbnRIYW5kbGVyKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGUKICAgICB9CiB9
CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUoU2VsZWN0RWxl
bWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQsIGludCBsaXN0SW5kZXgsIGJvb2wgbXVs
dGksIGJvb2wgc2hpZnQpCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVTZWxlY3RlZFN0
YXRlKGludCBsaXN0SW5kZXgsIGJvb2wgbXVsdGksIGJvb2wgc2hpZnQpCiB7CiAgICAgQVNTRVJU
KGxpc3RJbmRleCA+PSAwKTsKIAogICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4g
YmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbgogICAgIC8vIGRpc3BhdGNoaW5n
IGNoYW5nZSBldmVudHMgZHVyaW5nIG1vdXNldXAsIG9yIGFmdGVyIGF1dG9zY3JvbGwgZmluaXNo
ZXMuCi0gICAgc2F2ZUxhc3RTZWxlY3Rpb24oZGF0YSwgZWxlbWVudCk7CisgICAgc2F2ZUxhc3RT
ZWxlY3Rpb24oKTsKIAotICAgIGRhdGEuc2V0QWN0aXZlU2VsZWN0aW9uU3RhdGUodHJ1ZSk7Cisg
ICAgbV9kYXRhLnNldEFjdGl2ZVNlbGVjdGlvblN0YXRlKHRydWUpOwogCi0gICAgYm9vbCBzaGlm
dFNlbGVjdCA9IGRhdGEubXVsdGlwbGUoKSAmJiBzaGlmdDsKLSAgICBib29sIG11bHRpU2VsZWN0
ID0gZGF0YS5tdWx0aXBsZSgpICYmIG11bHRpICYmICFzaGlmdDsKKyAgICBib29sIHNoaWZ0U2Vs
ZWN0ID0gbV9kYXRhLm11bHRpcGxlKCkgJiYgc2hpZnQ7CisgICAgYm9vbCBtdWx0aVNlbGVjdCA9
IG1fZGF0YS5tdWx0aXBsZSgpICYmIG11bHRpICYmICFzaGlmdDsKIAotICAgIEVsZW1lbnQqIGNs
aWNrZWRFbGVtZW50ID0gZGF0YS5saXN0SXRlbXMoZWxlbWVudClbbGlzdEluZGV4XTsKKyAgICBF
bGVtZW50KiBjbGlja2VkRWxlbWVudCA9IG1fZGF0YS5saXN0SXRlbXModGhpcylbbGlzdEluZGV4
XTsKICAgICBPcHRpb25FbGVtZW50KiBvcHRpb24gPSB0b09wdGlvbkVsZW1lbnQoY2xpY2tlZEVs
ZW1lbnQpOwogICAgIGlmIChvcHRpb24pIHsKICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0
aGVyIGFuIGFjdGl2ZSBzZWxlY3Rpb24gKGxpa2UgZHVyaW5nIGRyYWcKICAgICAgICAgLy8gc2Vs
ZWN0aW9uKSwgc2hvdWxkIHNlbGVjdCBvciBkZXNlbGVjdAogICAgICAgICBpZiAob3B0aW9uLT5z
ZWxlY3RlZCgpICYmIG11bHRpKQotICAgICAgICAgICAgZGF0YS5zZXRBY3RpdmVTZWxlY3Rpb25T
dGF0ZShmYWxzZSk7CisgICAgICAgICAgICBtX2RhdGEuc2V0QWN0aXZlU2VsZWN0aW9uU3RhdGUo
ZmFsc2UpOwogCi0gICAgICAgIGlmICghZGF0YS5hY3RpdmVTZWxlY3Rpb25TdGF0ZSgpKQorICAg
ICAgICBpZiAoIW1fZGF0YS5hY3RpdmVTZWxlY3Rpb25TdGF0ZSgpKQogICAgICAgICAgICAgb3B0
aW9uLT5zZXRTZWxlY3RlZFN0YXRlKGZhbHNlKTsKICAgICB9CiAKQEAgLTExOTgsMTIgKzExMjQs
MTIgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZShTZWxlY3RF
bGVtZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWwKICAgICAvLyBvdGhlciBpdGVtcywgZXhjbHVk
aW5nIHRoZSBjbGlja2VkIG9wdGlvbi4gSWYgbm8gb3B0aW9uIHdhcyBjbGlja2VkLCB0aGVuCiAg
ICAgLy8gdGhpcyB3aWxsIGRlc2VsZWN0IGFsbCBpdGVtcyBpbiB0aGUgbGlzdC4KICAgICBpZiAo
IXNoaWZ0U2VsZWN0ICYmICFtdWx0aVNlbGVjdCkKLSAgICAgICAgZGVzZWxlY3RJdGVtcyhkYXRh
LCBlbGVtZW50LCBjbGlja2VkRWxlbWVudCk7CisgICAgICAgIGRlc2VsZWN0SXRlbXMoY2xpY2tl
ZEVsZW1lbnQpOwogCiAgICAgLy8gSWYgdGhlIGFuY2hvciBoYXNuJ3QgYmVlbiBzZXQsIGFuZCB3
ZSdyZSBkb2luZyBhIHNpbmdsZSBzZWxlY3Rpb24gb3IgYQogICAgIC8vIHNoaWZ0IHNlbGVjdGlv
biwgdGhlbiBpbml0aWFsaXplIHRoZSBhbmNob3IgdG8gdGhlIGZpcnN0IHNlbGVjdGVkIGluZGV4
LgotICAgIGlmIChkYXRhLmFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCkgPCAwICYmICFtdWx0
aVNlbGVjdCkKLSAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoZGF0YSwgZWxl
bWVudCwgc2VsZWN0ZWRJbmRleChkYXRhLCBlbGVtZW50KSk7CisgICAgaWYgKG1fZGF0YS5hY3Rp
dmVTZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCAmJiAhbXVsdGlTZWxlY3QpCisgICAgICAgIHNl
dEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KHNlbGVjdGVkSW5kZXgoKSk7CiAKICAgICAvLyBT
ZXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiB0aGUgY2xpY2tlZCBvcHRpb24KICAgICBpZiAob3B0
aW9uICYmICFjbGlja2VkRWxlbWVudC0+ZGlzYWJsZWQoKSkKQEAgLTEyMTMsNDQgKzExMzksNDMg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZShTZWxlY3RFbGVt
ZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWwKICAgICAvLyB3ZSdyZSBkb2luZyBhIHNpbmdsZSBz
ZWxlY3Rpb24sIG9yIGEgbXVsdGlwbGUgc2VsZWN0aW9uICh1c2luZyBjbWQgb3IKICAgICAvLyBj
dHJsKSwgdGhlbiBpbml0aWFsaXplIHRoZSBhbmNob3IgaW5kZXggdG8gdGhlIGxpc3RJbmRleCB0
aGF0IGp1c3QgZ290CiAgICAgLy8gY2xpY2tlZC4KLSAgICBpZiAoZGF0YS5hY3RpdmVTZWxlY3Rp
b25BbmNob3JJbmRleCgpIDwgMCB8fCAhc2hpZnRTZWxlY3QpCi0gICAgICAgIHNldEFjdGl2ZVNl
bGVjdGlvbkFuY2hvckluZGV4KGRhdGEsIGVsZW1lbnQsIGxpc3RJbmRleCk7CisgICAgaWYgKG1f
ZGF0YS5hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCB8fCAhc2hpZnRTZWxlY3QpCisg
ICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGxpc3RJbmRleCk7CiAKLSAgICBz
ZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChkYXRhLCBsaXN0SW5kZXgpOwotICAgIHVwZGF0ZUxp
c3RCb3hTZWxlY3Rpb24oZGF0YSwgZWxlbWVudCwgIW11bHRpU2VsZWN0KTsKKyAgICBzZXRBY3Rp
dmVTZWxlY3Rpb25FbmRJbmRleChsaXN0SW5kZXgpOworICAgIHVwZGF0ZUxpc3RCb3hTZWxlY3Rp
b24oIW11bHRpU2VsZWN0KTsKIH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERl
ZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1l
bnQsIEV2ZW50KiBldmVudCwgSFRNTEZvcm1FbGVtZW50KiBodG1sRm9ybSkKK3ZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsK
LSAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBkYXRhLmxpc3RJdGVtcyhl
bGVtZW50KTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBtX2RhdGEu
bGlzdEl0ZW1zKHRoaXMpOwogCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7Ci0gICAgICAgIGVs
ZW1lbnQtPmZvY3VzKCk7Ci0KKyAgICAgICAgZm9jdXMoKTsKICAgICAgICAgLy8gQ2FsbGluZyBm
b2N1cygpIG1heSBjYXVzZSB1cyB0byBsb3NlIG91ciByZW5kZXJlciwgaW4gd2hpY2ggY2FzZSBk
byBub3Qgd2FudCB0byBoYW5kbGUgdGhlIGV2ZW50LgotICAgICAgICBpZiAoIWVsZW1lbnQtPnJl
bmRlcmVyKCkpCisgICAgICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICAvLyBDb252ZXJ0IHRvIGNvb3JkcyByZWxhdGl2ZSB0byB0aGUgbGlzdCBib3gg
aWYgbmVlZGVkLgogICAgICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGljX2Nhc3Q8
TW91c2VFdmVudCo+KGV2ZW50KTsKLSAgICAgICAgSW50UG9pbnQgbG9jYWxPZmZzZXQgPSByb3Vu
ZGVkSW50UG9pbnQoZWxlbWVudC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZl
bnQtPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpKTsKLSAgICAgICAgaW50IGxpc3RJ
bmRleCA9IHRvUmVuZGVyTGlzdEJveChlbGVtZW50LT5yZW5kZXJlcigpKS0+bGlzdEluZGV4QXRP
ZmZzZXQodG9TaXplKGxvY2FsT2Zmc2V0KSk7CisgICAgICAgIEludFBvaW50IGxvY2FsT2Zmc2V0
ID0gcm91bmRlZEludFBvaW50KHJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50
LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKSk7CisgICAgICAgIGludCBsaXN0SW5k
ZXggPSB0b1JlbmRlckxpc3RCb3gocmVuZGVyZXIoKSktPmxpc3RJbmRleEF0T2Zmc2V0KHRvU2l6
ZShsb2NhbE9mZnNldCkpOwogICAgICAgICBpZiAobGlzdEluZGV4ID49IDApIHsKICNpZiBQTEFU
Rk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKLSAgICAgICAg
ICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUoZGF0YSwgZWxlbWVudCwgbGlzdEluZGV4LCBtb3VzZUV2
ZW50LT5tZXRhS2V5KCksIG1vdXNlRXZlbnQtPnNoaWZ0S2V5KCkpOworICAgICAgICAgICAgdXBk
YXRlU2VsZWN0ZWRTdGF0ZShsaXN0SW5kZXgsIG1vdXNlRXZlbnQtPm1ldGFLZXkoKSwgbW91c2VF
dmVudC0+c2hpZnRLZXkoKSk7CiAjZWxzZQotICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0
ZShkYXRhLCBlbGVtZW50LCBsaXN0SW5kZXgsIG1vdXNlRXZlbnQtPmN0cmxLZXkoKSwgbW91c2VF
dmVudC0+c2hpZnRLZXkoKSk7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKGxpc3RJ
bmRleCwgbW91c2VFdmVudC0+Y3RybEtleSgpLCBtb3VzZUV2ZW50LT5zaGlmdEtleSgpKTsKICNl
bmRpZgotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGVsZW1lbnQtPmRvY3VtZW50KCkt
PmZyYW1lKCkpCisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKSkKICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldE1vdXNlRG93
bk1heVN0YXJ0QXV0b3Njcm9sbCgpOwogCiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uICYmIGVsZW1l
bnQtPmRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5hdXRvc2Nyb2xsUmVuZGVy
ZXIoKSAhPSBlbGVtZW50LT5yZW5kZXJlcigpKSB7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgp
ICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0
b24gJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmF1dG9zY3JvbGxSZW5k
ZXJlcigpICE9IHJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gVGhpcyBtYWtlcyBzdXJlIHdlIGZp
cmUgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50IGZvciBhIHNpbmdsZQogICAgICAgICAv
LyBjbGljay4gRm9yIGRyYWcgc2VsZWN0aW9uLCBvbkNoYW5nZSB3aWxsIGZpcmUgd2hlbiB0aGUg
YXV0b3Njcm9sbAogICAgICAgICAvLyB0aW1lciBzdG9wcy4KLSAgICAgICAgbGlzdEJveE9uQ2hh
bmdlKGRhdGEsIGVsZW1lbnQpOworICAgICAgICBsaXN0Qm94T25DaGFuZ2UoKTsKICAgICB9IGVs
c2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgewogICAg
ICAgICBpZiAoIWV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTEyNTgsNzkgKzExODMsNzkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERl
ZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVsZW0KIAogICAgICAg
ICBib29sIGhhbmRsZWQgPSBmYWxzZTsKICAgICAgICAgaW50IGVuZEluZGV4ID0gMDsKLSAgICAg
ICAgaWYgKGRhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSA8IDApIHsKKyAgICAgICAgaWYg
KG1fZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpIDwgMCkgewogICAgICAgICAgICAgLy8g
SW5pdGlhbGl6ZSB0aGUgZW5kIGluZGV4CiAgICAgICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9
PSAiRG93biIgfHwga2V5SWRlbnRpZmllciA9PSAiUGFnZURvd24iKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IHN0YXJ0SW5kZXggPSBsYXN0U2VsZWN0ZWRMaXN0SW5kZXgoZGF0YSwgZWxlbWVudCk7
CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0SW5kZXggPSBsYXN0U2VsZWN0ZWRMaXN0SW5kZXgo
KTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAo
a2V5SWRlbnRpZmllciA9PSAiRG93biIpCi0gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0g
bmV4dFNlbGVjdGFibGVMaXN0SW5kZXgoZGF0YSwgZWxlbWVudCwgc3RhcnRJbmRleCk7CisgICAg
ICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gbmV4dFNlbGVjdGFibGVMaXN0SW5kZXgobV9kYXRh
LCB0aGlzLCBzdGFydEluZGV4KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGVuZEluZGV4ID0gbmV4dFNlbGVjdGFibGVMaXN0SW5kZXhQYWdlQXdheShkYXRhLCBl
bGVtZW50LCBzdGFydEluZGV4LCBTa2lwRm9yd2FyZHMpOworICAgICAgICAgICAgICAgICAgICBl
bmRJbmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4UGFnZUF3YXkobV9kYXRhLCB0aGlzLCBz
dGFydEluZGV4LCBTa2lwRm9yd2FyZHMpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlJZGVu
dGlmaWVyID09ICJVcCIgfHwga2V5SWRlbnRpZmllciA9PSAiUGFnZVVwIikgewotICAgICAgICAg
ICAgICAgIGludCBzdGFydEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoZGF0YSwgZWxlbWVudCwg
c2VsZWN0ZWRJbmRleChkYXRhLCBlbGVtZW50KSk7CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0
SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChzZWxlY3RlZEluZGV4KCkpOwogICAgICAgICAgICAg
ICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09
ICJVcCIpCi0gICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gcHJldmlvdXNTZWxlY3RhYmxl
TGlzdEluZGV4KGRhdGEsIGVsZW1lbnQsIHN0YXJ0SW5kZXgpOworICAgICAgICAgICAgICAgICAg
ICBlbmRJbmRleCA9IHByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleChtX2RhdGEsIHRoaXMsIHN0
YXJ0SW5kZXgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW5k
SW5kZXggPSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleFBhZ2VBd2F5KGRhdGEsIGVsZW1lbnQsIHN0
YXJ0SW5kZXgsIFNraXBCYWNrd2FyZHMpOworICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9
IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4UGFnZUF3YXkobV9kYXRhLCB0aGlzLCBzdGFydEluZGV4
LCBTa2lwQmFja3dhcmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIFNldCB0aGUgZW5kIGluZGV4IGJhc2VkIG9uIHRoZSBjdXJyZW50IGVuZCBpbmRl
eAogICAgICAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24iKSB7Ci0gICAgICAgICAg
ICAgICAgZW5kSW5kZXggPSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleChkYXRhLCBlbGVtZW50LCBk
YXRhLmFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCkpOworICAgICAgICAgICAgICAgIGVuZEluZGV4
ID0gbmV4dFNlbGVjdGFibGVMaXN0SW5kZXgobV9kYXRhLCB0aGlzLCBtX2RhdGEuYWN0aXZlU2Vs
ZWN0aW9uRW5kSW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gIlVwIikgewotICAgICAgICAgICAg
ICAgIGVuZEluZGV4ID0gcHJldmlvdXNTZWxlY3RhYmxlTGlzdEluZGV4KGRhdGEsIGVsZW1lbnQs
IGRhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSk7CisgICAgICAgICAgICAgICAgZW5kSW5k
ZXggPSBwcmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgobV9kYXRhLCB0aGlzLCBtX2RhdGEuYWN0
aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gIlBhZ2VEb3duIikgewot
ICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gbmV4dFNlbGVjdGFibGVMaXN0SW5kZXhQYWdlQXdh
eShkYXRhLCBlbGVtZW50LCBkYXRhLmFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCksIFNraXBGb3J3
YXJkcyk7CisgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRl
eFBhZ2VBd2F5KG1fZGF0YSwgdGhpcywgbV9kYXRhLmFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCks
IFNraXBGb3J3YXJkcyk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gIlBhZ2VVcCIpIHsKLSAgICAgICAgICAg
ICAgICBlbmRJbmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4UGFnZUF3YXkoZGF0YSwgZWxl
bWVudCwgZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpLCBTa2lwQmFja3dhcmRzKTsKKyAg
ICAgICAgICAgICAgICBlbmRJbmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4UGFnZUF3YXko
bV9kYXRhLCB0aGlzLCBtX2RhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSwgU2tpcEJhY2t3
YXJkcyk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkhvbWUiKSB7Ci0gICAgICAg
ICAgICBlbmRJbmRleCA9IGZpcnN0U2VsZWN0YWJsZUxpc3RJbmRleChkYXRhLCBlbGVtZW50KTsK
KyAgICAgICAgICAgIGVuZEluZGV4ID0gZmlyc3RTZWxlY3RhYmxlTGlzdEluZGV4KG1fZGF0YSwg
dGhpcyk7CiAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChr
ZXlJZGVudGlmaWVyID09ICJFbmQiKSB7Ci0gICAgICAgICAgICBlbmRJbmRleCA9IGxhc3RTZWxl
Y3RhYmxlTGlzdEluZGV4KGRhdGEsIGVsZW1lbnQpOworICAgICAgICAgICAgZW5kSW5kZXggPSBs
YXN0U2VsZWN0YWJsZUxpc3RJbmRleChtX2RhdGEsIHRoaXMpOwogICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNTcGF0aWFsTmF2aWdhdGlvbkVu
YWJsZWQoZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkpCisgICAgICAgIGlmIChpc1NwYXRp
YWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1bWVudCgpLT5mcmFtZSgpKSkKICAgICAgICAgICAgIC8v
IENoZWNrIGlmIHRoZSBzZWxlY3Rpb24gbW92ZXMgdG8gdGhlIGJvdW5kYXJ5LgotICAgICAgICAg
ICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkxlZnQiIHx8IGtleUlkZW50aWZpZXIgPT0gIlJpZ2h0
IiB8fCAoKGtleUlkZW50aWZpZXIgPT0gIkRvd24iIHx8IGtleUlkZW50aWZpZXIgPT0gIlVwIikg
JiYgZW5kSW5kZXggPT0gZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpKSkKKyAgICAgICAg
ICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJMZWZ0IiB8fCBrZXlJZGVudGlmaWVyID09ICJSaWdo
dCIgfHwgKChrZXlJZGVudGlmaWVyID09ICJEb3duIiB8fCBrZXlJZGVudGlmaWVyID09ICJVcCIp
ICYmIGVuZEluZGV4ID09IG1fZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKGVuZEluZGV4ID49IDAgJiYgaGFuZGxl
ZCkgewogICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21w
YXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbgogICAgICAgICAgICAgLy8gd2hlbiBkaXNwYXRjaGlu
ZyBjaGFuZ2UgZXZlbnRzIGltbWVkaWF0ZWx5IGFmdGVyIG1ha2luZyB0aGUgbmV3CiAgICAgICAg
ICAgICAvLyBzZWxlY3Rpb24uCi0gICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbihkYXRhLCBl
bGVtZW50KTsKKyAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAKICAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQobGlzdEl0ZW1zLCAhbGlzdEl0ZW1zLnNpemUoKSB8fCAoZW5kSW5kZXgg
Pj0gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kSW5kZXgpIDwgbGlzdEl0ZW1zLnNpemUo
KSkpOwotICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoZGF0YSwgZW5kSW5k
ZXgpOworICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoZW5kSW5kZXgpOwog
Ci0gICAgICAgICAgICBib29sIHNlbGVjdE5ld0l0ZW0gPSAhZGF0YS5tdWx0aXBsZSgpIHx8IHN0
YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCktPnNoaWZ0S2V5KCkgfHwgIWlzU3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkpOworICAgICAg
ICAgICAgYm9vbCBzZWxlY3ROZXdJdGVtID0gIW1fZGF0YS5tdWx0aXBsZSgpIHx8IHN0YXRpY19j
YXN0PEtleWJvYXJkRXZlbnQqPihldmVudCktPnNoaWZ0S2V5KCkgfHwgIWlzU3BhdGlhbE5hdmln
YXRpb25FbmFibGVkKGRvY3VtZW50KCktPmZyYW1lKCkpOwogICAgICAgICAgICAgaWYgKHNlbGVj
dE5ld0l0ZW0pCi0gICAgICAgICAgICAgICAgZGF0YS5zZXRBY3RpdmVTZWxlY3Rpb25TdGF0ZSh0
cnVlKTsKKyAgICAgICAgICAgICAgICBtX2RhdGEuc2V0QWN0aXZlU2VsZWN0aW9uU3RhdGUodHJ1
ZSk7CiAgICAgICAgICAgICAvLyBJZiB0aGUgYW5jaG9yIGlzIHVuaXRpYWxpemVkLCBvciBpZiB3
ZSdyZSBnb2luZyB0byBkZXNlbGVjdCBhbGwKICAgICAgICAgICAgIC8vIG90aGVyIG9wdGlvbnMs
IHRoZW4gc2V0IHRoZSBhbmNob3IgaW5kZXggZXF1YWwgdG8gdGhlIGVuZCBpbmRleC4KLSAgICAg
ICAgICAgIGJvb2wgZGVzZWxlY3RPdGhlcnMgPSAhZGF0YS5tdWx0aXBsZSgpIHx8ICghc3RhdGlj
X2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KS0+c2hpZnRLZXkoKSAmJiBzZWxlY3ROZXdJdGVt
KTsKLSAgICAgICAgICAgIGlmIChkYXRhLmFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCkgPCAw
IHx8IGRlc2VsZWN0T3RoZXJzKSB7CisgICAgICAgICAgICBib29sIGRlc2VsZWN0T3RoZXJzID0g
IW1fZGF0YS5tdWx0aXBsZSgpIHx8ICghc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50
KS0+c2hpZnRLZXkoKSAmJiBzZWxlY3ROZXdJdGVtKTsKKyAgICAgICAgICAgIGlmIChtX2RhdGEu
YWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoKSA8IDAgfHwgZGVzZWxlY3RPdGhlcnMpIHsKICAg
ICAgICAgICAgICAgICBpZiAoZGVzZWxlY3RPdGhlcnMpCi0gICAgICAgICAgICAgICAgICAgIGRl
c2VsZWN0SXRlbXMoZGF0YSwgZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgc2V0QWN0aXZlU2Vs
ZWN0aW9uQW5jaG9ySW5kZXgoZGF0YSwgZWxlbWVudCwgZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJ
bmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3RJdGVtcygpOworICAgICAgICAg
ICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KG1fZGF0YS5hY3RpdmVTZWxlY3Rp
b25FbmRJbmRleCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdG9SZW5kZXJMaXN0
Qm94KGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5zY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRl
eChlbmRJbmRleCk7CisgICAgICAgICAgICB0b1JlbmRlckxpc3RCb3gocmVuZGVyZXIoKSktPnNj
cm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KGVuZEluZGV4KTsKICAgICAgICAgICAgIGlm
IChzZWxlY3ROZXdJdGVtKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTGlzdEJveFNlbGVjdGlv
bihkYXRhLCBlbGVtZW50LCBkZXNlbGVjdE90aGVycyk7Ci0gICAgICAgICAgICAgICAgbGlzdEJv
eE9uQ2hhbmdlKGRhdGEsIGVsZW1lbnQpOworICAgICAgICAgICAgICAgIHVwZGF0ZUxpc3RCb3hT
ZWxlY3Rpb24oZGVzZWxlY3RPdGhlcnMpOworICAgICAgICAgICAgICAgIGxpc3RCb3hPbkNoYW5n
ZSgpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc2Nyb2xsVG9TZWxlY3Rp
b24oZGF0YSwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsVG9TZWxlY3Rpb24oKTsK
IAogICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIH0KQEAg
LTEzNDAsNDggKzEyNjUsNDggQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveERlZmF1
bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVsZW0KICAgICAgICAgaW50
IGtleUNvZGUgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpLT5rZXlDb2RlKCk7
CiAKICAgICAgICAgaWYgKGtleUNvZGUgPT0gJ1xyJykgewotICAgICAgICAgICAgaWYgKGh0bWxG
b3JtKQotICAgICAgICAgICAgICAgIGh0bWxGb3JtLT5zdWJtaXRJbXBsaWNpdGx5KGV2ZW50LCBm
YWxzZSk7CisgICAgICAgICAgICBpZiAoZm9ybSgpKQorICAgICAgICAgICAgICAgIGZvcm0oKS0+
c3VibWl0SW1wbGljaXRseShldmVudCwgZmFsc2UpOwogICAgICAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tdWx0aXBsZSgpICYmIGtl
eUNvZGUgPT0gJyAnICYmIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGVsZW1lbnQtPmRvY3Vt
ZW50KCktPmZyYW1lKCkpKSB7CisgICAgICAgIH0gZWxzZSBpZiAobV9kYXRhLm11bHRpcGxlKCkg
JiYga2V5Q29kZSA9PSAnICcgJiYgaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQo
KS0+ZnJhbWUoKSkpIHsKICAgICAgICAgICAgIC8vIFVzZSBzcGFjZSB0byB0b2dnbGUgc2VsZWN0
aW9uIGNoYW5nZS4KLSAgICAgICAgICAgIGRhdGEuc2V0QWN0aXZlU2VsZWN0aW9uU3RhdGUoIWRh
dGEuYWN0aXZlU2VsZWN0aW9uU3RhdGUoKSk7Ci0gICAgICAgICAgICB1cGRhdGVTZWxlY3RlZFN0
YXRlKGRhdGEsIGVsZW1lbnQsIGxpc3RUb09wdGlvbkluZGV4KGRhdGEsIGVsZW1lbnQsIGRhdGEu
YWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSksIHRydWUgLyptdWx0aSovLCBmYWxzZSAvKnNoaWZ0
Ki8pOwotICAgICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKGRhdGEsIGVsZW1lbnQpOworICAgICAg
ICAgICAgbV9kYXRhLnNldEFjdGl2ZVNlbGVjdGlvblN0YXRlKCFtX2RhdGEuYWN0aXZlU2VsZWN0
aW9uU3RhdGUoKSk7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKGxpc3RUb09wdGlv
bkluZGV4KG1fZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpKSwgdHJ1ZSAvKm11bHRpKi8s
IGZhbHNlIC8qc2hpZnQqLyk7CisgICAgICAgICAgICBsaXN0Qm94T25DaGFuZ2UoKTsKICAgICAg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgfQogfQog
Ci12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKFNlbGVjdEVsZW1l
bnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LCBFdmVudCogZXZlbnQsIEhUTUxGb3JtRWxl
bWVudCogaHRtbEZvcm0pCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAg
aWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZGF0YS51c2VzTWVu
dUxpc3QoKSkKLSAgICAgICAgbWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKGRhdGEsIGVsZW1l
bnQsIGV2ZW50LCBodG1sRm9ybSk7CisgICAgaWYgKG1fZGF0YS51c2VzTWVudUxpc3QoKSkKKyAg
ICAgICAgbWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICAgICBlbHNlIAotICAg
ICAgICBsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihkYXRhLCBlbGVtZW50LCBldmVudCwgaHRt
bEZvcm0pOwotCisgICAgICAgIGxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKICAg
ICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50ICYmIGV2ZW50LT5p
c0tleWJvYXJkRXZlbnQoKSkgewogICAgICAgICBLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50
ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KTsKICAgICAgICAgaWYgKCFrZXli
b2FyZEV2ZW50LT5jdHJsS2V5KCkgJiYgIWtleWJvYXJkRXZlbnQtPmFsdEtleSgpICYmICFrZXli
b2FyZEV2ZW50LT5tZXRhS2V5KCkgJiYgaXNQcmludGFibGVDaGFyKGtleWJvYXJkRXZlbnQtPmNo
YXJDb2RlKCkpKSB7Ci0gICAgICAgICAgICB0eXBlQWhlYWRGaW5kKGRhdGEsIGVsZW1lbnQsIGtl
eWJvYXJkRXZlbnQpOworICAgICAgICAgICAgdHlwZUFoZWFkRmluZChrZXlib2FyZEV2ZW50KTsK
ICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQorICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogfQogCi1pbnQgSFRNTFNlbGVjdEVsZW1l
bnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleChjb25zdCBTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwg
Y29uc3QgRWxlbWVudCogZWxlbWVudCkKK2ludCBIVE1MU2VsZWN0RWxlbWVudDo6bGFzdFNlbGVj
dGVkTGlzdEluZGV4KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGl0ZXJhdGUg
dGhlIGxpc3RJdGVtcyBpbiB0aGUgcmV2ZXJzZSBvcmRlci4KICAgICB1bnNpZ25lZCBpbmRleCA9
IDA7CiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4m
IGl0ZW1zID0gZGF0YS5saXN0SXRlbXMoZWxlbWVudCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1l
bnQqPiYgaXRlbXMgPSBtX2RhdGEubGlzdEl0ZW1zKHRoaXMpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKE9wdGlvbkVsZW1lbnQq
IG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pKSB7CiAgICAgICAgICAg
ICBpZiAob3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkgewpAQCAtMTM5MSw3ICsxMzE2LDcgQEAg
aW50IEhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2VsZWN0ZWRMaXN0SW5kZXgoY29uc3QgU2VsZWN0
RWxlbWVudERhdGEmIGRhdGEsIGNvbnMKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBm
b3VuZCA/IChpbnQpIGluZGV4IDogLTE7CisgICAgcmV0dXJuIGZvdW5kID8gc3RhdGljX2Nhc3Q8
aW50PihpbmRleCkgOiAtMTsKIH0KIAogc3RhdGljIFN0cmluZyBzdHJpcExlYWRpbmdXaGl0ZVNw
YWNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQpAQCAtMTQwNywxMyArMTMzMiwxMyBAQCBzdGF0aWMg
U3RyaW5nIHN0cmlwTGVhZGluZ1doaXRlU3BhY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAg
cmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoaSwgbGVuZ3RoIC0gaSk7CiB9CiAKLXZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVsZW1l
bnQqIGVsZW1lbnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQordm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6dHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoZXZlbnQt
PnRpbWVTdGFtcCgpIDwgZGF0YS5sYXN0Q2hhclRpbWUoKSkKKyAgICBpZiAoZXZlbnQtPnRpbWVT
dGFtcCgpIDwgbV9kYXRhLmxhc3RDaGFyVGltZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBE
T01UaW1lU3RhbXAgZGVsdGEgPSBldmVudC0+dGltZVN0YW1wKCkgLSBkYXRhLmxhc3RDaGFyVGlt
ZSgpOwotICAgIGRhdGEuc2V0TGFzdENoYXJUaW1lKGV2ZW50LT50aW1lU3RhbXAoKSk7CisgICAg
RE9NVGltZVN0YW1wIGRlbHRhID0gZXZlbnQtPnRpbWVTdGFtcCgpIC0gbV9kYXRhLmxhc3RDaGFy
VGltZSgpOworICAgIG1fZGF0YS5zZXRMYXN0Q2hhclRpbWUoZXZlbnQtPnRpbWVTdGFtcCgpKTsK
IAogICAgIFVDaGFyIGMgPSBldmVudC0+Y2hhckNvZGUoKTsKIApAQCAtMTQyMSwyOSArMTM0Niwy
OSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKFNlbGVjdEVsZW1lbnRE
YXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LAogICAgIGludCBzZWFyY2hTdGFydE9mZnNldCA9
IDE7CiAgICAgaWYgKGRlbHRhID4gdHlwZUFoZWFkVGltZW91dCkgewogICAgICAgICBwcmVmaXgg
PSBTdHJpbmcoJmMsIDEpOwotICAgICAgICBkYXRhLnNldFR5cGVkU3RyaW5nKHByZWZpeCk7Ci0g
ICAgICAgIGRhdGEuc2V0UmVwZWF0aW5nQ2hhcihjKTsKKyAgICAgICAgbV9kYXRhLnNldFR5cGVk
U3RyaW5nKHByZWZpeCk7CisgICAgICAgIG1fZGF0YS5zZXRSZXBlYXRpbmdDaGFyKGMpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGRhdGEudHlwZWRTdHJpbmcoKS5hcHBlbmQoYyk7CisgICAgICAg
IG1fZGF0YS50eXBlZFN0cmluZygpLmFwcGVuZChjKTsKIAotICAgICAgICBpZiAoYyA9PSBkYXRh
LnJlcGVhdGluZ0NoYXIoKSkgeworICAgICAgICBpZiAoYyA9PSBtX2RhdGEucmVwZWF0aW5nQ2hh
cigpKSB7CiAgICAgICAgICAgICAvLyBUaGUgdXNlciBpcyBsaWtlbHkgdHJ5aW5nIHRvIGN5Y2xl
IHRocm91Z2ggYWxsIHRoZSBpdGVtcyBzdGFydGluZwogICAgICAgICAgICAgLy8gd2l0aCB0aGlz
IGNoYXJhY3Rlciwgc28ganVzdCBzZWFyY2ggb24gdGhlIGNoYXJhY3RlcgogICAgICAgICAgICAg
cHJlZml4ID0gU3RyaW5nKCZjLCAxKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRh
dGEuc2V0UmVwZWF0aW5nQ2hhcigwKTsKLSAgICAgICAgICAgIHByZWZpeCA9IGRhdGEudHlwZWRT
dHJpbmcoKTsKKyAgICAgICAgICAgIG1fZGF0YS5zZXRSZXBlYXRpbmdDaGFyKDApOworICAgICAg
ICAgICAgcHJlZml4ID0gbV9kYXRhLnR5cGVkU3RyaW5nKCk7CiAgICAgICAgICAgICBzZWFyY2hT
dGFydE9mZnNldCA9IDA7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb25zdCBWZWN0b3I8RWxl
bWVudCo+JiBpdGVtcyA9IGRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpOworICAgIGNvbnN0IFZlY3Rv
cjxFbGVtZW50Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKTsKICAgICBpbnQgaXRl
bUNvdW50ID0gaXRlbXMuc2l6ZSgpOwogICAgIGlmIChpdGVtQ291bnQgPCAxKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpbnQgc2VsZWN0ZWQgPSBzZWxlY3RlZEluZGV4KGRhdGEsIGVsZW1lbnQp
OwotICAgIGludCBpbmRleCA9IChvcHRpb25Ub0xpc3RJbmRleChkYXRhLCBlbGVtZW50LCBzZWxl
Y3RlZCA+PSAwID8gc2VsZWN0ZWQgOiAwKSArIHNlYXJjaFN0YXJ0T2Zmc2V0KSAlIGl0ZW1Db3Vu
dDsKKyAgICBpbnQgc2VsZWN0ZWQgPSBzZWxlY3RlZEluZGV4KCk7CisgICAgaW50IGluZGV4ID0g
KG9wdGlvblRvTGlzdEluZGV4KHNlbGVjdGVkID49IDAgPyBzZWxlY3RlZCA6IDApICsgc2VhcmNo
U3RhcnRPZmZzZXQpICUgaXRlbUNvdW50OwogICAgIEFTU0VSVChpbmRleCA+PSAwKTsKIAogICAg
IC8vIENvbXB1dGUgYSBjYXNlLWZvbGRlZCBjb3B5IG9mIHRoZSBwcmVmaXggc3RyaW5nIGJlZm9y
ZSBiZWdpbm5pbmcgdGhlIHNlYXJjaCBmb3IKQEAgLTE0NTksMTIgKzEzODQsMTIgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwg
RWxlbWVudCogZWxlbWVudCwKICAgICAgICAgLy8gRm9sZCB0aGUgb3B0aW9uIHN0cmluZyBhbmQg
Y2hlY2sgaWYgaXRzIHByZWZpeCBpcyBlcXVhbCB0byB0aGUgZm9sZGVkIHByZWZpeC4KICAgICAg
ICAgU3RyaW5nIHRleHQgPSBvcHRpb25FbGVtZW50LT50ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91
cExhYmVsKCk7CiAgICAgICAgIGlmIChzdHJpcExlYWRpbmdXaGl0ZVNwYWNlKHRleHQpLmZvbGRD
YXNlKCkuc3RhcnRzV2l0aChwcmVmaXhXaXRoQ2FzZUZvbGRlZCkpIHsKLSAgICAgICAgICAgIHNl
dFNlbGVjdGVkSW5kZXgoZGF0YSwgZWxlbWVudCwgbGlzdFRvT3B0aW9uSW5kZXgoZGF0YSwgZWxl
bWVudCwgaW5kZXgpKTsKLSAgICAgICAgICAgIGlmICghZGF0YS51c2VzTWVudUxpc3QoKSkKLSAg
ICAgICAgICAgICAgICBsaXN0Qm94T25DaGFuZ2UoZGF0YSwgZWxlbWVudCk7CisgICAgICAgICAg
ICBzZXRTZWxlY3RlZEluZGV4SW50ZXJuYWwobGlzdFRvT3B0aW9uSW5kZXgoaW5kZXgpKTsKKyAg
ICAgICAgICAgIGlmICghbV9kYXRhLnVzZXNNZW51TGlzdCgpKQorICAgICAgICAgICAgICAgIGxp
c3RCb3hPbkNoYW5nZSgpOwogCi0gICAgICAgICAgICBzZXRPcHRpb25zQ2hhbmdlZE9uUmVuZGVy
ZXIoZGF0YSwgZWxlbWVudCk7Ci0gICAgICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgICAgICAgICBzZXRPcHRpb25zQ2hhbmdlZE9uUmVuZGVyZXIoKTsKKyAgICAg
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KQEAgLTE0ODcsMjAgKzE0MTIsMjAgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgpCiAgICAgCiAgICAgLy8gaWYg
dGhpcyBpbmRleCBpcyBhbHJlYWR5IHNlbGVjdGVkLCB1bnNlbGVjdC4gb3RoZXJ3aXNlIHVwZGF0
ZSB0aGUgc2VsZWN0ZWQgaW5kZXgKICAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9
IG1fZGF0YS5saXN0SXRlbXModGhpcyk7Ci0gICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlz
dEluZGV4KG1fZGF0YSwgdGhpcywgaW5kZXgpOworICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25U
b0xpc3RJbmRleChpbmRleCk7CiAgICAgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQg
PSAobGlzdEluZGV4ID49IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkgOiAw
KSkgewogICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkKICAgICAgICAgICAg
IG9wdGlvbkVsZW1lbnQtPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KG1fZGF0YSwgdGhpcywgaW5kZXgsIGZhbHNlLCB0
cnVlKTsKKyAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXhJbnRlcm5hbChpbmRleCwgZmFsc2Us
IHRydWUpOwogICAgIH0KIAogICAgIGlmIChtX2RhdGEudXNlc01lbnVMaXN0KCkpCi0gICAgICAg
IG1lbnVMaXN0T25DaGFuZ2UobV9kYXRhLCB0aGlzKTsKKyAgICAgICAgbWVudUxpc3RPbkNoYW5n
ZSgpOwogICAgIGVsc2UKLSAgICAgICAgbGlzdEJveE9uQ2hhbmdlKG1fZGF0YSwgdGhpcyk7Cisg
ICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOwogCi0gICAgc2Nyb2xsVG9TZWxlY3Rpb24obV9kYXRh
LCB0aGlzKTsKKyAgICBzY3JvbGxUb1NlbGVjdGlvbigpOwogfQogCiB1bnNpZ25lZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6bGVuZ3RoKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaAppbmRleCAyNTA0YjY3ZDNhZTE3MTg0OWFmYzk1MzRlMTE1Mjg3YjJmZTQxOTFmLi43
YzgxZTgzZGQxNDk0YmZmODI3MDFlNDdlZGM2YjQyMTFlZGIxNzA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCkBAIC0xMzIsNyArMTMyLDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIHJlY2FsY0xpc3RJdGVtcyhib29sIHVwZGF0ZVNlbGVjdGVkU3RhdGVzID0g
dHJ1ZSkgY29uc3Q7CiAKLSAgICB2b2lkIGRlc2VsZWN0SXRlbXMoSFRNTE9wdGlvbkVsZW1lbnQq
IGV4Y2x1ZGVFbGVtZW50ID0gMCk7CisgICAgdm9pZCBkZXNlbGVjdEl0ZW1zKEVsZW1lbnQqIGV4
Y2x1ZGVFbGVtZW50ID0gMCk7CiAgICAgdm9pZCB0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQq
KTsKICAgICB2b2lkIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAKQEAgLTE0MywzMyArMTQzLDE1IEBA
IHByaXZhdGU6CiAKICAgICBib29sIGhhc1BsYWNlaG9sZGVyTGFiZWxPcHRpb24oKSBjb25zdDsK
IAotICAgIC8vIEZJWE1FOiBGb2xkIHNvbWUgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMuCi0g
ICAgc3RhdGljIHZvaWQgc2F2ZUxhc3RTZWxlY3Rpb24oU2VsZWN0RWxlbWVudERhdGEmLCBFbGVt
ZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoU2Vs
ZWN0RWxlbWVudERhdGEmLCBFbGVtZW50KiwgaW50IGluZGV4KTsKLSAgICBzdGF0aWMgdm9pZCBz
ZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChTZWxlY3RFbGVtZW50RGF0YSYsIGludCBpbmRleCk7
Ci0gICAgc3RhdGljIHZvaWQgdXBkYXRlTGlzdEJveFNlbGVjdGlvbihTZWxlY3RFbGVtZW50RGF0
YSYsIEVsZW1lbnQqLCBib29sIGRlc2VsZWN0T3RoZXJPcHRpb25zKTsKLSAgICBzdGF0aWMgdm9p
ZCBsaXN0Qm94T25DaGFuZ2UoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50Kik7Ci0gICAgc3Rh
dGljIHZvaWQgbWVudUxpc3RPbkNoYW5nZShTZWxlY3RFbGVtZW50RGF0YSYsIEVsZW1lbnQqKTsK
LSAgICBzdGF0aWMgdm9pZCBzY3JvbGxUb1NlbGVjdGlvbihTZWxlY3RFbGVtZW50RGF0YSYsIEVs
ZW1lbnQqKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRSZWNhbGNMaXN0SXRlbXMoU2VsZWN0RWxlbWVu
dERhdGEmLCBFbGVtZW50Kik7CiAgICAgc3RhdGljIHZvaWQgcmVjYWxjTGlzdEl0ZW1zKFNlbGVj
dEVsZW1lbnREYXRhJiwgY29uc3QgRWxlbWVudCosIGJvb2wgdXBkYXRlU2VsZWN0ZWRTdGF0ZXMg
PSB0cnVlKTsKLSAgICBzdGF0aWMgaW50IHNlbGVjdGVkSW5kZXgoY29uc3QgU2VsZWN0RWxlbWVu
dERhdGEmLCBjb25zdCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgc2V0U2VsZWN0ZWRJbmRl
eChTZWxlY3RFbGVtZW50RGF0YSYsIEVsZW1lbnQqLCBpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVz
ZWxlY3QgPSB0cnVlLCBib29sIGZpcmVPbkNoYW5nZU5vdyA9IGZhbHNlLCBib29sIHVzZXJEcml2
ZW5DaGFuZ2UgPSB0cnVlKTsKLSAgICBzdGF0aWMgaW50IG9wdGlvblRvTGlzdEluZGV4KGNvbnN0
IFNlbGVjdEVsZW1lbnREYXRhJiwgY29uc3QgRWxlbWVudCosIGludCBvcHRpb25JbmRleCk7Ci0g
ICAgc3RhdGljIGludCBsaXN0VG9PcHRpb25JbmRleChjb25zdCBTZWxlY3RFbGVtZW50RGF0YSYs
IGNvbnN0IEVsZW1lbnQqLCBpbnQgbGlzdEluZGV4KTsKLSAgICBzdGF0aWMgdm9pZCBkZXNlbGVj
dEl0ZW1zKFNlbGVjdEVsZW1lbnREYXRhJiwgRWxlbWVudCosIEVsZW1lbnQqIGV4Y2x1ZGVFbGVt
ZW50ID0gMCk7CisgICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4SW50ZXJuYWwoaW50IG9wdGlvbklu
ZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJlT25DaGFuZ2VOb3cgPSBmYWxzZSwg
Ym9vbCB1c2VyRHJpdmVuQ2hhbmdlID0gdHJ1ZSk7CiAgICAgdm9pZCBwYXJzZU11bHRpcGxlQXR0
cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSopOwotICAgIHN0YXRpYyB2b2lkIGRlZmF1bHRFdmVudEhh
bmRsZXIoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50KiwgRXZlbnQqLCBIVE1MRm9ybUVsZW1l
bnQqKTsKLSAgICBzdGF0aWMgaW50IGxhc3RTZWxlY3RlZExpc3RJbmRleChjb25zdCBTZWxlY3RF
bGVtZW50RGF0YSYsIGNvbnN0IEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgdm9pZCB0eXBlQWhlYWRG
aW5kKFNlbGVjdEVsZW1lbnREYXRhJiwgRWxlbWVudCosIEtleWJvYXJkRXZlbnQqKTsKLSAgICBz
dGF0aWMgdm9pZCBpbnNlcnRlZEludG9UcmVlKFNlbGVjdEVsZW1lbnREYXRhJiwgRWxlbWVudCop
OwotCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0ZWRTdGF0ZShTZWxlY3RFbGVtZW50RGF0
YSYsIEVsZW1lbnQqLCBpbnQgbGlzdEluZGV4LCBib29sIG11bHRpLCBib29sIHNoaWZ0KTsKLSAK
LSAgICBzdGF0aWMgdm9pZCBtZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVu
dERhdGEmLCBFbGVtZW50KiwgRXZlbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKLSAgICBzdGF0aWMg
Ym9vbCBwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudChTZWxlY3RFbGVtZW50RGF0YSYsIEVsZW1l
bnQqLCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgbGlzdEJveERlZmF1bHRFdmVu
dEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50KiwgRXZlbnQqLCBIVE1MRm9ybUVs
ZW1lbnQqKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRPcHRpb25zQ2hhbmdlZE9uUmVuZGVyZXIoU2Vs
ZWN0RWxlbWVudERhdGEmLCBFbGVtZW50Kik7CisgICAgaW50IGxhc3RTZWxlY3RlZExpc3RJbmRl
eCgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU2VsZWN0ZWRTdGF0ZShpbnQgbGlzdEluZGV4LCBi
b29sIG11bHRpLCBib29sIHNoaWZ0KTsKKyAgICB2b2lkIG1lbnVMaXN0RGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCopOworICAgIGJvb2wgcGxhdGZvcm1IYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9h
cmRFdmVudCopOworICAgIHZvaWQgbGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsK
KyAgICB2b2lkIHNldE9wdGlvbnNDaGFuZ2VkT25SZW5kZXJlcigpOwogICAgIGZyaWVuZCBjbGFz
cyBTZWxlY3RFbGVtZW50RGF0YTsKIAogICAgIFNlbGVjdEVsZW1lbnREYXRhIG1fZGF0YTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnRXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudFdpbi5jcHAKaW5kZXggN2JlNzhj
Mzk1M2E0ODBmOTZkOGFjY2VkMjI3YjAyZDkzMGM2NjZjNy4uNDk5MWQyYTdmZTljZGY5YjJjZjM3
NDBlZTI2NTI4Zjg1M2U4YTgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0
RWxlbWVudFdpbi5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1ib29sIEhUTUxTZWxlY3RFbGVtZW50OjpwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudChTZWxl
Y3RFbGVtZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVudCwgS2V5Ym9hcmRFdmVudCogZXZl
bnQpCitib29sIEhUTUxTZWxlY3RFbGVtZW50OjpwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudChL
ZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBBbGxvdyAoU2hpZnQpIEY0IGFuZCAoQ3Ry
bC9TaGlmdCkgQWx0L0FsdEdyICsgVXAvRG93biBhcnJvdyB0byBwb3AgdGhlIG1lbnUsIG1hdGNo
aW5nIEZpcmVmb3guCiAgICAgYm9vbCBldmVudFNob3dzTWVudSA9ICghZXZlbnQtPmFsdEtleSgp
ICYmICFldmVudC0+Y3RybEtleSgpICYmIGV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0gIkY0IikK
QEAgLTQyLDE0ICs0MiwxNCBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50OjpwbGF0Zm9ybUhhbmRs
ZUtleWRvd25FdmVudChTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgRWxlbQogCiAgICAgLy8gU2F2
ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlv
biB3aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBldmVudHMgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgs
CiAgICAgLy8gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFu
Z2VkLCB3aGljaCBnZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBm
cm9tIHRoZSBtZW51LgotICAgIHNhdmVMYXN0U2VsZWN0aW9uKGRhdGEsIGVsZW1lbnQpOwotICAg
IGlmIChSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSB0b1JlbmRlck1lbnVMaXN0KGVsZW1lbnQt
PnJlbmRlcmVyKCkpKQorICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CisgICAgaWYgKFJlbmRlck1l
bnVMaXN0KiBtZW51TGlzdCA9IHRvUmVuZGVyTWVudUxpc3QocmVuZGVyZXIoKSkpCiAgICAgICAg
IG1lbnVMaXN0LT5zaG93UG9wdXAoKTsKIAotICAgIGludCBpbmRleCA9IHNlbGVjdGVkSW5kZXgo
ZGF0YSwgZWxlbWVudCk7CisgICAgaW50IGluZGV4ID0gc2VsZWN0ZWRJbmRleCgpOwogICAgIEFT
U0VSVChpbmRleCA+PSAwKTsKLSAgICBBU1NFUlQoaW5kZXggPCBkYXRhLmxpc3RJdGVtcyhlbGVt
ZW50KS5zaXplKCkpOwotICAgIHNldFNlbGVjdGVkSW5kZXgoZGF0YSwgZWxlbWVudCwgaW5kZXgp
OworICAgIEFTU0VSVChpbmRleCA8IG1fZGF0YS5saXN0SXRlbXModGhpcykuc2l6ZSgpKTsKKyAg
ICBzZXRTZWxlY3RlZEluZGV4SW50ZXJuYWwoaW5kZXgpOwogICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110287</attachid>
            <date>2011-10-08 18:58:16 -0700</date>
            <delta_ts>2011-10-09 20:24:43 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-69701-20111009105813.patch</filename>
            <type>text/plain</type>
            <size>57791</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcwMDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiN2UwYTVkMDRiZmNmOTg4
MzVjZDk2YTk1YWU2NjM2MGJkNWVkODZkLi5lZTAzOThhMDZhNzg3NzVkOTMwNWI1YTE5NGM5Yjhh
MGY0ZGI1NzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMTAtMDkgIEtlbnQg
VGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSByZWR1bmRhbnQg
Y29kZSBvZiBIVE1MU2VsZWN0RWxlbWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5NzAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAg
ICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zKToKKyAgICAgICAgUmVuYW1lIGlubmVyIGRl
c2VsZWN0SXRlbXMoKSB0byBkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oKS4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KToKKyAgICAg
ICAgUmVuYW1lIGEgY2FsbHNpdGUgb2YgYW5vdGhlciBzZXRTZWxlY3RlZEluZGV4KCkgdG8gc2V0
U2VsZWN0ZWRJbmRleEludGVybmFsKCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6c2V0U2VsZWN0ZWRJbmRleEJ5VXNlcik6CisgICAgICAgIGRpdHRvLCBhbmQgdXBkYXRl
IGEgY2FsbHNpdGUgb2YgdXBkYXRlU2VsZWN0ZWRTdGF0ZSgpLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hTZWxlY3RJdGVtKToKKyAgICAgICAgVXBkYXRlIGEg
Y2FsbHNpdGUgb2YgdXBkYXRlU2VsZWN0ZWRTdGF0ZSgpLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OmFjdGl2ZVNlbGVjdGlvbkVuZExpc3RJbmRleCk6CisgICAgICAgIFVw
ZGF0ZSBhIGNhbGxzaXRlIG9mIGxhc3RTZWxlY3RlZExpc3RJbmRleCgpLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdEFsbCk6CisgICAgICAgIFVwZGF0ZSBjYWxs
c2l0ZXMgb2YgZnVuY3Rpb25zIHdoaWNoIGFyZSBjaGFuZ2VkIHRvIG5vbi1zdGF0aWMuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24pOgorICAg
ICAgICBNZXJnZSBhIHN0YXRpYyBmdW5jdGlvbiBhbmQgYSBub24tc3RhdGljIGZ1bmN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFu
Y2hvckluZGV4KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
c2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKTogZGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveE9uQ2hhbmdlKTogZGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3RPbkNoYW5nZSk6IGRp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNjcm9sbFRvU2VsZWN0
aW9uKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0T3B0
aW9uc0NoYW5nZWRPblJlbmRlcmVyKTogTWFkZSB0aGlzIG5vbi1zdGF0aWMuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0UmVjYWxjTGlzdEl0ZW1zKToKKyAgICAgICAg
TWVyZ2UgYSBzdGF0aWMgZnVuY3Rpb24gYW5kIGEgbm9uLXN0YXRpYyBmdW5jdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RlZEluZGV4KTogZGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleEludGVy
bmFsKToKKyAgICAgICAgTWFkZSB0aGlzIG5vbi1zdGF0aWMsIGFuZCByZW5hbWVkIGZyb20gc2V0
U2VsZWN0ZWRJbmRleCgpIGJlY2F1c2UKKyAgICAgICAgb2YgY29uZmxpY3Qgd2l0aCBhbiBleGlz
dGluZyBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpvcHRp
b25Ub0xpc3RJbmRleCk6CisgICAgICAgIE1lcmdlIGEgc3RhdGljIGZ1bmN0aW9uIGFuZCBhIG5v
bi1zdGF0aWMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
bGlzdFRvT3B0aW9uSW5kZXgpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQpOgorICAgICAgICBVcGRhdGUgYSBjYWxsc2l0ZSBv
ZiBmdW5jdGlvbiB3aGljaCBpcyBjaGFuZ2VkIHRvIG5vLXN0YWljLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KTogZGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVzZWxlY3RJdGVtc1dpdGhvdXRWYWxpZGF0
aW9uKToKKyAgICAgICAgTWFkZSB0aGlzIG5vbi1zdGF0aWMsIGFuZCByZW5hbWVkIGZyb20gZGVz
ZWxlY3RJdGVtcygpIHRvIGF2b2lkIGNvbmZsaWN0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQ6OnJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKToKKyAgICAgICAgVXBkYXRlIGEg
Y2FsbHNpdGUgb2YgZnVuY3Rpb24gd2hpY2ggaXMgY2hhbmdlZCB0byBuby1zdGFpYy4KKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCk6IGRpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnBsYXRmb3JtSGFuZGxlS2V5ZG93bkV2ZW50KTog
TWFkZSB0aGlzIG5vbi1zdGF0aWMuCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKTogZGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZSk6IGRpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVy
KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcik6CisgICAgICAgIE1lcmdlZCBhIHN0YXRpYyBmdW5jdGlvbiBhbmQgYSBub24t
c3RhdGljIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxh
c3RTZWxlY3RlZExpc3RJbmRleCk6IE1hZGUgdGhpcyBub24tc3RhdGljLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQpOiBkaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjphY2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4KTog
ZGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTFNlbGVjdEVsZW1lbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQ6OnBsYXRmb3JtSGFuZGxlS2V5ZG93bkV2ZW50KTogTWFkZSB0aGlzIG5vbi1zdGF0
aWMuCisKIDIwMTEtMTAtMDggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJlbW92ZSBzb21lIHN0YXRpYyBmdW5jdGlvbnMgb2YgSFRNTFNlbGVjdEVsZW1lbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKaW5kZXggOTc2YzU1ZmQ4
OTdiYzA4YmI2OTIxOWU0NTcyMTA4NGM1OGZiZDBmMi4uN2VhZGUwZmQ1NjIzNGJhYmMwMzc1OGZk
YWUwNzUzY2Q4M2MxOWUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5jcHAKQEAgLTk4LDIwICs5OCwxNSBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxTZWxlY3RF
bGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAogICAgIHJldHVybiBtX2RhdGEubXVsdGlw
bGUoKSA/IHNlbGVjdE11bHRpcGxlIDogc2VsZWN0T25lOwogfQogCi1pbnQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAotewotICAgIHJldHVybiBzZWxlY3RlZEluZGV4
KG1fZGF0YSwgdGhpcyk7Ci19Ci0KIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRl
bXMoSFRNTE9wdGlvbkVsZW1lbnQqIGV4Y2x1ZGVFbGVtZW50KQogewotICAgIGRlc2VsZWN0SXRl
bXMobV9kYXRhLCB0aGlzLCBleGNsdWRlRWxlbWVudCk7CisgICAgZGVzZWxlY3RJdGVtc1dpdGhv
dXRWYWxpZGF0aW9uKGV4Y2x1ZGVFbGVtZW50KTsKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2so
KTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0
aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QpCiB7Ci0gICAgc2V0U2VsZWN0ZWRJbmRleChtX2RhdGEs
IHRoaXMsIG9wdGlvbkluZGV4LCBkZXNlbGVjdCwgZmFsc2UsIGZhbHNlKTsKKyAgICBzZXRTZWxl
Y3RlZEluZGV4SW50ZXJuYWwob3B0aW9uSW5kZXgsIGRlc2VsZWN0LCBmYWxzZSwgZmFsc2UpOwog
fQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4QnlVc2VyKGludCBv
cHRpb25JbmRleCwgYm9vbCBkZXNlbGVjdCwgYm9vbCBmaXJlT25DaGFuZ2VOb3csIGJvb2wgYWxs
b3dNdWx0aXBsZVNlbGVjdGlvbikKQEAgLTExOSw3ICsxMTQsNyBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpzZXRTZWxlY3RlZEluZGV4QnlVc2VyKGludCBvcHRpb25JbmRleCwgYm9vbCBkZXNl
bGVjdCwgYgogICAgIC8vIExpc3QgYm94IHNlbGVjdHMgY2FuIGZpcmUgb25jaGFuZ2UgZXZlbnRz
IHRocm91Z2ggdXNlciBpbnRlcmFjdGlvbiwgc3VjaCBhcwogICAgIC8vIG1vdXNlZG93biBldmVu
dHMuIFRoaXMgYWxsb3dzIHRoYXQgc2FtZSBiZWhhdmlvciBwcm9ncmFtbWF0aWNhbGx5LgogICAg
IGlmICghbV9kYXRhLnVzZXNNZW51TGlzdCgpKSB7Ci0gICAgICAgIHVwZGF0ZVNlbGVjdGVkU3Rh
dGUobV9kYXRhLCB0aGlzLCBvcHRpb25JbmRleCwgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiwgZmFs
c2UpOworICAgICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKG9wdGlvbkluZGV4LCBhbGxvd011bHRp
cGxlU2VsZWN0aW9uLCBmYWxzZSk7CiAgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwog
ICAgICAgICBpZiAoZmlyZU9uQ2hhbmdlTm93KQogICAgICAgICAgICAgbGlzdEJveE9uQ2hhbmdl
KCk7CkBAIC0xMzMsNyArMTI4LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0
ZWRJbmRleEJ5VXNlcihpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGIKICAgICBpZiAo
b3B0aW9uSW5kZXggPT0gc2VsZWN0ZWRJbmRleCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgc2V0U2VsZWN0ZWRJbmRleChtX2RhdGEsIHRoaXMsIG9wdGlvbkluZGV4LCBkZXNlbGVjdCwg
ZmlyZU9uQ2hhbmdlTm93LCB0cnVlKTsKKyAgICBzZXRTZWxlY3RlZEluZGV4SW50ZXJuYWwob3B0
aW9uSW5kZXgsIGRlc2VsZWN0LCBmaXJlT25DaGFuZ2VOb3csIHRydWUpOwogfQogCiBib29sIEhU
TUxTZWxlY3RFbGVtZW50OjpoYXNQbGFjZWhvbGRlckxhYmVsT3B0aW9uKCkgY29uc3QKQEAgLTE3
Niw3ICsxNzEsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94U2VsZWN0SXRlbShp
bnQgbGlzdEluZGV4LCBib29sIGFsbG93TXVsdGlwbHlTZWxlYwogICAgIGlmICghbXVsdGlwbGUo
KSkKICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleEJ5VXNlcihsaXN0VG9PcHRpb25JbmRleChsaXN0
SW5kZXgpLCB0cnVlLCBmaXJlT25DaGFuZ2VOb3cpOwogICAgIGVsc2UgewotICAgICAgICB1cGRh
dGVTZWxlY3RlZFN0YXRlKG1fZGF0YSwgdGhpcywgbGlzdEluZGV4LCBhbGxvd011bHRpcGx5U2Vs
ZWN0aW9ucywgc2hpZnQpOworICAgICAgICB1cGRhdGVTZWxlY3RlZFN0YXRlKGxpc3RJbmRleCwg
YWxsb3dNdWx0aXBseVNlbGVjdGlvbnMsIHNoaWZ0KTsKICAgICAgICAgc2V0TmVlZHNWYWxpZGl0
eUNoZWNrKCk7CiAgICAgICAgIGlmIChmaXJlT25DaGFuZ2VOb3cpCiAgICAgICAgICAgICBsaXN0
Qm94T25DaGFuZ2UoKTsKQEAgLTE5NCw3ICsxODksNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6
OmFjdGl2ZVNlbGVjdGlvbkVuZExpc3RJbmRleCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZGF0YS5h
Y3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpID49IDApCiAgICAgICAgIHJldHVybiBtX2RhdGEuYWN0
aXZlU2VsZWN0aW9uRW5kSW5kZXgoKTsKLSAgICByZXR1cm4gbGFzdFNlbGVjdGVkTGlzdEluZGV4
KG1fZGF0YSwgdGhpcyk7CisgICAgcmV0dXJuIGxhc3RTZWxlY3RlZExpc3RJbmRleCgpOwogfQog
CiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjphZGQoSFRNTEVsZW1lbnQqIGVsZW1lbnQsIEhUTUxF
bGVtZW50KiBiZWZvcmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMzE3LDE2ICszMTIsNiBAQCBS
ZW5kZXJPYmplY3QqIEhUTUxTZWxlY3RFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSogYXJlbmEsIFJlbmRlclN0eWxlKgogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJMaXN0
Qm94KHRoaXMpOwogfQogCi1pbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4
KGludCBvcHRpb25JbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3B0aW9uVG9MaXN0SW5kZXgo
bV9kYXRhLCB0aGlzLCBvcHRpb25JbmRleCk7Ci19Ci0KLWludCBIVE1MU2VsZWN0RWxlbWVudDo6
bGlzdFRvT3B0aW9uSW5kZXgoaW50IGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGlz
dFRvT3B0aW9uSW5kZXgobV9kYXRhLCB0aGlzLCBsaXN0SW5kZXgpOwotfQotCiBQYXNzUmVmUHRy
PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4gSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbnMoKQogewog
ICAgIHJldHVybiBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmNyZWF0ZSh0aGlzKTsKQEAgLTM1Myw1
MyArMzM4LDYgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wg
Y2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UKICAgICAgICAgcmVuZGVyZXIoKS0+
ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5jaGlsZHJlbkNoYW5nZWQocmVuZGVyZXIoKSk7
CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFJlY2FsY0xpc3RJdGVtcygpCi17Ci0g
ICAgc2V0UmVjYWxjTGlzdEl0ZW1zKG1fZGF0YSwgdGhpcyk7Ci0KLSAgICBpZiAoIWluRG9jdW1l
bnQoKSkKLSAgICAgICAgbV9jb2xsZWN0aW9uSW5mby5yZXNldCgpOwotfQotCi12b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKLXsKLSAgICBk
ZWZhdWx0RXZlbnRIYW5kbGVyKG1fZGF0YSwgdGhpcywgZXZlbnQsIGZvcm0oKSk7Ci0gICAgaWYg
KGV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Ci19Ci0K
LXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGlu
dCBpbmRleCkKLXsKLSAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChtX2RhdGEsIHRo
aXMsIGluZGV4KTsKLX0KLQotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0QWN0aXZlU2VsZWN0
aW9uRW5kSW5kZXgoaW50IGluZGV4KQotewotICAgIHNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4
KG1fZGF0YSwgaW5kZXgpOwotfQotCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVMaXN0
Qm94U2VsZWN0aW9uKGJvb2wgZGVzZWxlY3RPdGhlck9wdGlvbnMpCi17Ci0gICAgdXBkYXRlTGlz
dEJveFNlbGVjdGlvbihtX2RhdGEsIHRoaXMsIGRlc2VsZWN0T3RoZXJPcHRpb25zKTsKLSAgICBz
ZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLX0KLQotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVu
dUxpc3RPbkNoYW5nZSgpCi17Ci0gICAgbWVudUxpc3RPbkNoYW5nZShtX2RhdGEsIHRoaXMpOwot
fQotCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94T25DaGFuZ2UoKQotewotICAgIGxp
c3RCb3hPbkNoYW5nZShtX2RhdGEsIHRoaXMpOwotfQotCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjpzYXZlTGFzdFNlbGVjdGlvbigpCi17Ci0gICAgc2F2ZUxhc3RTZWxlY3Rpb24obV9kYXRhLCB0
aGlzKTsKLX0KLQogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wg
c2VuZFRvQW55RWxlbWVudCkKIHsKICAgICBmb2N1cygpOwpAQCAtNDk2LDExICs0MzQsNiBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRMZW5ndGgodW5zaWduZWQgbmV3TGVuLCBFeGNlcHRp
b25Db2RlJiBlYykKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIH0KIAotdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6c2Nyb2xsVG9TZWxlY3Rpb24oKQotewotICAgIHNjcm9sbFRvU2VsZWN0
aW9uKG1fZGF0YSwgdGhpcyk7Ci19Ci0KIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmlzUmVxdWly
ZWRGb3JtQ29udHJvbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJlcXVpcmVkKCk7CkBAIC01Nzcs
OTMgKzUxMCw5MyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RBbGwoKQogCiAgICAg
Ly8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNl
bGVjdEFsbCBzZWxlY3Rpb24KICAgICAvLyB3aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBldmVudHMK
LSAgICBzYXZlTGFzdFNlbGVjdGlvbihtX2RhdGEsIHRoaXMpOworICAgIHNhdmVMYXN0U2VsZWN0
aW9uKCk7CiAKICAgICBtX2RhdGEuc2V0QWN0aXZlU2VsZWN0aW9uU3RhdGUodHJ1ZSk7Ci0gICAg
c2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgobV9kYXRhLCB0aGlzLCBuZXh0U2VsZWN0YWJs
ZUxpc3RJbmRleChtX2RhdGEsIHRoaXMsIC0xKSk7Ci0gICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5k
SW5kZXgobV9kYXRhLCBwcmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgobV9kYXRhLCB0aGlzLCAt
MSkpOworICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KG5leHRTZWxlY3RhYmxlTGlz
dEluZGV4KG1fZGF0YSwgdGhpcywgLTEpKTsKKyAgICBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRl
eChwcmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgobV9kYXRhLCB0aGlzLCAtMSkpOwogCi0gICAg
dXBkYXRlTGlzdEJveFNlbGVjdGlvbihtX2RhdGEsIHRoaXMsIGZhbHNlKTsKLSAgICBsaXN0Qm94
T25DaGFuZ2UobV9kYXRhLCB0aGlzKTsKKyAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKGZhbHNl
KTsKKyAgICBsaXN0Qm94T25DaGFuZ2UoKTsKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsK
IH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2F2ZUxhc3RTZWxlY3Rpb24oU2VsZWN0RWxl
bWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjpzYXZlTGFzdFNlbGVjdGlvbigpCiB7Ci0gICAgaWYgKGRhdGEudXNlc01lbnVMaXN0KCkpIHsK
LSAgICAgICAgZGF0YS5zZXRMYXN0T25DaGFuZ2VJbmRleChzZWxlY3RlZEluZGV4KGRhdGEsIGVs
ZW1lbnQpKTsKKyAgICBpZiAobV9kYXRhLnVzZXNNZW51TGlzdCgpKSB7CisgICAgICAgIG1fZGF0
YS5zZXRMYXN0T25DaGFuZ2VJbmRleChzZWxlY3RlZEluZGV4KCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgVmVjdG9yPGJvb2w+JiBsYXN0T25DaGFuZ2VTZWxlY3Rpb24gPSBkYXRh
Lmxhc3RPbkNoYW5nZVNlbGVjdGlvbigpOyAKKyAgICBWZWN0b3I8Ym9vbD4mIGxhc3RPbkNoYW5n
ZVNlbGVjdGlvbiA9IG1fZGF0YS5sYXN0T25DaGFuZ2VTZWxlY3Rpb24oKTsgCiAgICAgbGFzdE9u
Q2hhbmdlU2VsZWN0aW9uLmNsZWFyKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBp
dGVtcyA9IGRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50
Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0
aW9uRWxlbWVudCA9IHRvT3B0aW9uRWxlbWVudChpdGVtc1tpXSk7CiAgICAgICAgIGxhc3RPbkNo
YW5nZVNlbGVjdGlvbi5hcHBlbmQob3B0aW9uRWxlbWVudCAmJiBvcHRpb25FbGVtZW50LT5zZWxl
Y3RlZCgpKTsKICAgICB9CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldEFjdGl2ZVNl
bGVjdGlvbkFuY2hvckluZGV4KFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVt
ZW50LCBpbnQgaW5kZXgpCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rp
b25BbmNob3JJbmRleChpbnQgaW5kZXgpCiB7Ci0gICAgZGF0YS5zZXRBY3RpdmVTZWxlY3Rpb25B
bmNob3JJbmRleChpbmRleCk7CisgICAgbV9kYXRhLnNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvcklu
ZGV4KGluZGV4KTsKIAogICAgIC8vIENhY2hlIHRoZSBzZWxlY3Rpb24gc3RhdGUgc28gd2UgY2Fu
IHJlc3RvcmUgdGhlIG9sZCBzZWxlY3Rpb24gYXMgdGhlIG5ldwogICAgIC8vIHNlbGVjdGlvbiBw
aXZvdHMgYXJvdW5kIHRoaXMgYW5jaG9yIGluZGV4Ci0gICAgVmVjdG9yPGJvb2w+JiBjYWNoZWRT
dGF0ZUZvckFjdGl2ZVNlbGVjdGlvbiA9IGRhdGEuY2FjaGVkU3RhdGVGb3JBY3RpdmVTZWxlY3Rp
b24oKTsgCisgICAgVmVjdG9yPGJvb2w+JiBjYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbiA9
IG1fZGF0YS5jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbigpOyAKICAgICBjYWNoZWRTdGF0
ZUZvckFjdGl2ZVNlbGVjdGlvbi5jbGVhcigpOwogCi0gICAgY29uc3QgVmVjdG9yPEVsZW1lbnQq
PiYgaXRlbXMgPSBkYXRhLmxpc3RJdGVtcyhlbGVtZW50KTsKKyAgICBjb25zdCBWZWN0b3I8RWxl
bWVudCo+JiBpdGVtcyA9IG1fZGF0YS5saXN0SXRlbXModGhpcyk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9wdGlvbkVsZW1lbnQq
IG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOwogICAgICAgICBjYWNo
ZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbi5hcHBlbmQob3B0aW9uRWxlbWVudCAmJiBvcHRpb25F
bGVtZW50LT5zZWxlY3RlZCgpKTsKICAgICB9CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6
OnNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBpbnQg
aW5kZXgpCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRl
eChpbnQgaW5kZXgpCiB7Ci0gICAgZGF0YS5zZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChpbmRl
eCk7CisgICAgbV9kYXRhLnNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGluZGV4KTsKIH0KIAot
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dXBkYXRlTGlzdEJveFNlbGVjdGlvbihTZWxlY3RFbGVt
ZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBkZXNlbGVjdE90aGVyT3B0aW9u
cykKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24oYm9vbCBk
ZXNlbGVjdE90aGVyT3B0aW9ucykKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+cmVuZGVyZXIoKSAm
JiAoZWxlbWVudC0+cmVuZGVyZXIoKS0+aXNMaXN0Qm94KCkgfHwgZGF0YS5tdWx0aXBsZSgpKSk7
Ci0gICAgQVNTRVJUKCFkYXRhLmxpc3RJdGVtcyhlbGVtZW50KS5zaXplKCkgfHwgZGF0YS5hY3Rp
dmVTZWxlY3Rpb25BbmNob3JJbmRleCgpID49IDApOworICAgIEFTU0VSVChyZW5kZXJlcigpICYm
IChyZW5kZXJlcigpLT5pc0xpc3RCb3goKSB8fCBtX2RhdGEubXVsdGlwbGUoKSkpOworICAgIEFT
U0VSVCghbV9kYXRhLmxpc3RJdGVtcyh0aGlzKS5zaXplKCkgfHwgbV9kYXRhLmFjdGl2ZVNlbGVj
dGlvbkFuY2hvckluZGV4KCkgPj0gMCk7CiAKLSAgICB1bnNpZ25lZCBzdGFydCA9IG1pbihkYXRh
LmFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCksIGRhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5k
ZXgoKSk7Ci0gICAgdW5zaWduZWQgZW5kID0gbWF4KGRhdGEuYWN0aXZlU2VsZWN0aW9uQW5jaG9y
SW5kZXgoKSwgZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpKTsKLSAgICBWZWN0b3I8Ym9v
bD4mIGNhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uID0gZGF0YS5jYWNoZWRTdGF0ZUZvckFj
dGl2ZVNlbGVjdGlvbigpOworICAgIHVuc2lnbmVkIHN0YXJ0ID0gbWluKG1fZGF0YS5hY3RpdmVT
ZWxlY3Rpb25BbmNob3JJbmRleCgpLCBtX2RhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSk7
CisgICAgdW5zaWduZWQgZW5kID0gbWF4KG1fZGF0YS5hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRl
eCgpLCBtX2RhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSk7CisgICAgVmVjdG9yPGJvb2w+
JiBjYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbiA9IG1fZGF0YS5jYWNoZWRTdGF0ZUZvckFj
dGl2ZVNlbGVjdGlvbigpOwogCi0gICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBk
YXRhLmxpc3RJdGVtcyhlbGVtZW50KTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVt
cyA9IG1fZGF0YS5saXN0SXRlbXModGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGl0ZW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1l
bnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0pOwogICAgICAgICBpZiAoIW9wdGlvbkVsZW1l
bnQgfHwgaXRlbXNbaV0tPmRpc2FibGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBpZiAoaSA+PSBzdGFydCAmJiBpIDw9IGVuZCkKLSAgICAgICAgICAgIG9wdGlvbkVsZW1l
bnQtPnNldFNlbGVjdGVkU3RhdGUoZGF0YS5hY3RpdmVTZWxlY3Rpb25TdGF0ZSgpKTsKKyAgICAg
ICAgICAgIG9wdGlvbkVsZW1lbnQtPnNldFNlbGVjdGVkU3RhdGUobV9kYXRhLmFjdGl2ZVNlbGVj
dGlvblN0YXRlKCkpOwogICAgICAgICBlbHNlIGlmIChkZXNlbGVjdE90aGVyT3B0aW9ucyB8fCBp
ID49IGNhY2hlZFN0YXRlRm9yQWN0aXZlU2VsZWN0aW9uLnNpemUoKSkKICAgICAgICAgICAgIG9w
dGlvbkVsZW1lbnQtPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBvcHRpb25FbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRlKGNhY2hlZFN0YXRlRm9yQWN0
aXZlU2VsZWN0aW9uW2ldKTsKICAgICB9CiAKLSAgICB0b1NlbGVjdEVsZW1lbnQoZWxlbWVudCkt
PnVwZGF0ZVZhbGlkaXR5KCk7Ci0gICAgc2Nyb2xsVG9TZWxlY3Rpb24oZGF0YSwgZWxlbWVudCk7
CisgICAgc2Nyb2xsVG9TZWxlY3Rpb24oKTsKKyAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsK
IH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEJveE9uQ2hhbmdlKFNlbGVjdEVsZW1l
bnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50KQordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
bGlzdEJveE9uQ2hhbmdlKCkKIHsKLSAgICBBU1NFUlQoIWRhdGEudXNlc01lbnVMaXN0KCkgfHwg
ZGF0YS5tdWx0aXBsZSgpKTsKKyAgICBBU1NFUlQoIW1fZGF0YS51c2VzTWVudUxpc3QoKSB8fCBt
X2RhdGEubXVsdGlwbGUoKSk7CiAKLSAgICBWZWN0b3I8Ym9vbD4mIGxhc3RPbkNoYW5nZVNlbGVj
dGlvbiA9IGRhdGEubGFzdE9uQ2hhbmdlU2VsZWN0aW9uKCk7IAotICAgIGNvbnN0IFZlY3RvcjxF
bGVtZW50Kj4mIGl0ZW1zID0gZGF0YS5saXN0SXRlbXMoZWxlbWVudCk7CisgICAgVmVjdG9yPGJv
b2w+JiBsYXN0T25DaGFuZ2VTZWxlY3Rpb24gPSBtX2RhdGEubGFzdE9uQ2hhbmdlU2VsZWN0aW9u
KCk7IAorICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVt
cyh0aGlzKTsKIAogICAgIC8vIElmIHRoZSBjYWNoZWQgc2VsZWN0aW9uIGxpc3QgaXMgZW1wdHks
IG9yIHRoZSBzaXplIGhhcyBjaGFuZ2VkLCB0aGVuIGZpcmUKICAgICAvLyBkaXNwYXRjaEZvcm1D
b250cm9sQ2hhbmdlRXZlbnQsIGFuZCByZXR1cm4gZWFybHkuCiAgICAgaWYgKGxhc3RPbkNoYW5n
ZVNlbGVjdGlvbi5pc0VtcHR5KCkgfHwgbGFzdE9uQ2hhbmdlU2VsZWN0aW9uLnNpemUoKSAhPSBp
dGVtcy5zaXplKCkpIHsKLSAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5n
ZUV2ZW50KCk7CisgICAgICAgIGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC02NzgsNDcgKzYxMSw0OSBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94T25DaGFuZ2UoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVsZW1l
bnQqIGVsZW1lbgogICAgIH0KIAogICAgIGlmIChmaXJlT25DaGFuZ2UpCi0gICAgICAgIGVsZW1l
bnQtPmRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOworICAgICAgICBkaXNwYXRjaEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKIH0KIAotdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVu
dUxpc3RPbkNoYW5nZShTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVudCkK
K3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0T25DaGFuZ2UoKQogewotICAgIEFTU0VS
VChkYXRhLnVzZXNNZW51TGlzdCgpKTsKKyAgICBBU1NFUlQobV9kYXRhLnVzZXNNZW51TGlzdCgp
KTsKIAotICAgIGludCBzZWxlY3RlZCA9IHNlbGVjdGVkSW5kZXgoZGF0YSwgZWxlbWVudCk7Ci0g
ICAgaWYgKGRhdGEubGFzdE9uQ2hhbmdlSW5kZXgoKSAhPSBzZWxlY3RlZCAmJiBkYXRhLnVzZXJE
cml2ZW5DaGFuZ2UoKSkgewotICAgICAgICBkYXRhLnNldExhc3RPbkNoYW5nZUluZGV4KHNlbGVj
dGVkKTsKLSAgICAgICAgZGF0YS5zZXRVc2VyRHJpdmVuQ2hhbmdlKGZhbHNlKTsKLSAgICAgICAg
ZWxlbWVudC0+ZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CisgICAgaW50IHNlbGVj
dGVkID0gc2VsZWN0ZWRJbmRleCgpOworICAgIGlmIChtX2RhdGEubGFzdE9uQ2hhbmdlSW5kZXgo
KSAhPSBzZWxlY3RlZCAmJiBtX2RhdGEudXNlckRyaXZlbkNoYW5nZSgpKSB7CisgICAgICAgIG1f
ZGF0YS5zZXRMYXN0T25DaGFuZ2VJbmRleChzZWxlY3RlZCk7CisgICAgICAgIG1fZGF0YS5zZXRV
c2VyRHJpdmVuQ2hhbmdlKGZhbHNlKTsKKyAgICAgICAgZGlzcGF0Y2hGb3JtQ29udHJvbENoYW5n
ZUV2ZW50KCk7CiAgICAgfQogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzY3JvbGxUb1Nl
bGVjdGlvbihTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVudCkKK3ZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6OnNjcm9sbFRvU2VsZWN0aW9uKCkKIHsKLSAgICBpZiAoZGF0YS51
c2VzTWVudUxpc3QoKSkKKyAgICBpZiAobV9kYXRhLnVzZXNNZW51TGlzdCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRl
cmVyKCkpCisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigp
KQogICAgICAgICB0b1JlbmRlckxpc3RCb3gocmVuZGVyZXIpLT5zZWxlY3Rpb25DaGFuZ2VkKCk7
CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldE9wdGlvbnNDaGFuZ2VkT25SZW5kZXJl
cihTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnNldE9wdGlvbnNDaGFuZ2VkT25SZW5kZXJlcigpCiB7Ci0gICAgaWYgKFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgIGlm
IChkYXRhLnVzZXNNZW51TGlzdCgpKQorICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
dGhpcy0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAobV9kYXRhLnVzZXNNZW51TGlzdCgpKQog
ICAgICAgICAgICAgdG9SZW5kZXJNZW51TGlzdChyZW5kZXJlciktPnNldE9wdGlvbnNDaGFuZ2Vk
KHRydWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0b1JlbmRlckxpc3RCb3gocmVuZGVy
ZXIpLT5zZXRPcHRpb25zQ2hhbmdlZCh0cnVlKTsKICAgICB9CiB9CiAKLXZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnNldFJlY2FsY0xpc3RJdGVtcyhTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgRWxl
bWVudCogZWxlbWVudCkKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFJlY2FsY0xpc3RJdGVt
cygpCiB7Ci0gICAgZGF0YS5zZXRTaG91bGRSZWNhbGNMaXN0SXRlbXModHJ1ZSk7CisgICAgbV9k
YXRhLnNldFNob3VsZFJlY2FsY0xpc3RJdGVtcyh0cnVlKTsKICAgICAvLyBNYW51YWwgc2VsZWN0
aW9uIGFuY2hvciBpcyByZXNldCB3aGVuIG1hbmlwdWxhdGluZyB0aGUgc2VsZWN0IHByb2dyYW1t
YXRpY2FsbHkuCi0gICAgZGF0YS5zZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCgtMSk7Ci0g
ICAgc2V0T3B0aW9uc0NoYW5nZWRPblJlbmRlcmVyKGRhdGEsIGVsZW1lbnQpOwotICAgIGVsZW1l
bnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBtX2RhdGEuc2V0QWN0aXZlU2VsZWN0aW9u
QW5jaG9ySW5kZXgoLTEpOworICAgIHNldE9wdGlvbnNDaGFuZ2VkT25SZW5kZXJlcigpOworICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpZiAoIWluRG9jdW1lbnQoKSkKKyAgICAgICAg
bV9jb2xsZWN0aW9uSW5mby5yZXNldCgpOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpy
ZWNhbGNMaXN0SXRlbXMoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQsIGJvb2wgdXBkYXRlU2VsZWN0ZWRTdGF0ZXMpCkBAIC03NzUsMTIgKzcxMCwxMiBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMoU2VsZWN0RWxlbWVudERhdGEm
IGRhdGEsIGNvbnN0IEVsZW1lbnQqCiAgICAgfQogfQogCi1pbnQgSFRNTFNlbGVjdEVsZW1lbnQ6
OnNlbGVjdGVkSW5kZXgoY29uc3QgU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQpCitpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5kZXgoKSBjb25z
dAogewogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKIAogICAgIC8vIHJldHVybiB0aGUgbnVtYmVy
IG9mIHRoZSBmaXJzdCBvcHRpb24gc2VsZWN0ZWQKLSAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+
JiBpdGVtcyA9IGRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpOworICAgIGNvbnN0IFZlY3RvcjxFbGVt
ZW50Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChPcHRpb25FbGVtZW50
KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGl0ZW1zW2ldKSkgewogICAgICAgICAg
ICAgaWYgKG9wdGlvbkVsZW1lbnQtPnNlbGVjdGVkKCkpCkBAIC03OTIsNTggKzcyNyw1OCBAQCBp
bnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5kZXgoY29uc3QgU2VsZWN0RWxlbWVudERh
dGEmIGRhdGEsIGNvbnN0IEVsZW1lbgogICAgIHJldHVybiAtMTsKIH0KIAotdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgRWxl
bWVudCogZWxlbWVudCwgaW50IG9wdGlvbkluZGV4LCBib29sIGRlc2VsZWN0LCBib29sIGZpcmVP
bkNoYW5nZU5vdywgYm9vbCB1c2VyRHJpdmVuQ2hhbmdlKQordm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0U2VsZWN0ZWRJbmRleEludGVybmFsKGludCBvcHRpb25JbmRleCwgYm9vbCBkZXNlbGVj
dCwgYm9vbCBmaXJlT25DaGFuZ2VOb3csIGJvb2wgdXNlckRyaXZlbkNoYW5nZSkKIHsKLSAgICBp
ZiAob3B0aW9uSW5kZXggPT0gLTEgJiYgIWRlc2VsZWN0ICYmICFkYXRhLm11bHRpcGxlKCkpCi0g
ICAgICAgIG9wdGlvbkluZGV4ID0gbmV4dFNlbGVjdGFibGVMaXN0SW5kZXgoZGF0YSwgZWxlbWVu
dCwgLTEpOwotICAgIGlmICghZGF0YS5tdWx0aXBsZSgpKQorICAgIGlmIChvcHRpb25JbmRleCA9
PSAtMSAmJiAhZGVzZWxlY3QgJiYgIW1fZGF0YS5tdWx0aXBsZSgpKQorICAgICAgICBvcHRpb25J
bmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4KG1fZGF0YSwgdGhpcywgLTEpOworICAgIGlm
ICghbV9kYXRhLm11bHRpcGxlKCkpCiAgICAgICAgIGRlc2VsZWN0ID0gdHJ1ZTsKIAotICAgIGNv
bnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gZGF0YS5saXN0SXRlbXMoZWxlbWVudCk7Ci0g
ICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KGRhdGEsIGVsZW1lbnQsIG9wdGlv
bkluZGV4KTsKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IG1fZGF0YS5saXN0
SXRlbXModGhpcyk7CisgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KG9wdGlv
bkluZGV4KTsKIAogICAgIEVsZW1lbnQqIGV4Y2x1ZGVFbGVtZW50ID0gMDsKICAgICBpZiAoT3B0
aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IChsaXN0SW5kZXggPj0gMCA/IHRvT3B0aW9uRWxl
bWVudChpdGVtc1tsaXN0SW5kZXhdKSA6IDApKSB7CiAgICAgICAgIGV4Y2x1ZGVFbGVtZW50ID0g
aXRlbXNbbGlzdEluZGV4XTsKLSAgICAgICAgaWYgKGRhdGEuYWN0aXZlU2VsZWN0aW9uQW5jaG9y
SW5kZXgoKSA8IDAgfHwgZGVzZWxlY3QpCi0gICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25B
bmNob3JJbmRleChkYXRhLCBlbGVtZW50LCBsaXN0SW5kZXgpOwotICAgICAgICBpZiAoZGF0YS5h
Y3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpIDwgMCB8fCBkZXNlbGVjdCkKLSAgICAgICAgICAgIHNl
dEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGRhdGEsIGxpc3RJbmRleCk7CisgICAgICAgIGlmICht
X2RhdGEuYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoKSA8IDAgfHwgZGVzZWxlY3QpCisgICAg
ICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChsaXN0SW5kZXgpOworICAgICAg
ICBpZiAobV9kYXRhLmFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCkgPCAwIHx8IGRlc2VsZWN0KQor
ICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgobGlzdEluZGV4KTsKICAgICAg
ICAgb3B0aW9uRWxlbWVudC0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKICAgICB9CiAKICAgICBp
ZiAoZGVzZWxlY3QpCi0gICAgICAgIGRlc2VsZWN0SXRlbXMoZGF0YSwgZWxlbWVudCwgZXhjbHVk
ZUVsZW1lbnQpOworICAgICAgICBkZXNlbGVjdEl0ZW1zV2l0aG91dFZhbGlkYXRpb24oZXhjbHVk
ZUVsZW1lbnQpOwogCiAgICAgLy8gRm9yIHRoZSBtZW51IGxpc3QgY2FzZSwgdGhpcyBpcyB3aGF0
IG1ha2VzIHRoZSBzZWxlY3RlZCBlbGVtZW50IGFwcGVhci4KLSAgICBpZiAoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgaWYgKFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlci0+dXBkYXRlRnJv
bUVsZW1lbnQoKTsKIAotICAgIHNjcm9sbFRvU2VsZWN0aW9uKGRhdGEsIGVsZW1lbnQpOworICAg
IHNjcm9sbFRvU2VsZWN0aW9uKCk7CiAKICAgICAvLyBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2l0
aCBmaXJlT25DaGFuZ2VOb3cgZm9yIG1lbnUgbGlzdHMuIAotICAgIGlmIChkYXRhLnVzZXNNZW51
TGlzdCgpKSB7Ci0gICAgICAgIGRhdGEuc2V0VXNlckRyaXZlbkNoYW5nZSh1c2VyRHJpdmVuQ2hh
bmdlKTsKKyAgICBpZiAobV9kYXRhLnVzZXNNZW51TGlzdCgpKSB7CisgICAgICAgIG1fZGF0YS5z
ZXRVc2VyRHJpdmVuQ2hhbmdlKHVzZXJEcml2ZW5DaGFuZ2UpOwogICAgICAgICBpZiAoZmlyZU9u
Q2hhbmdlTm93KQotICAgICAgICAgICAgbWVudUxpc3RPbkNoYW5nZShkYXRhLCBlbGVtZW50KTsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7Cisg
ICAgICAgICAgICBtZW51TGlzdE9uQ2hhbmdlKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAg
ICAgICAgIGlmIChkYXRhLnVzZXNNZW51TGlzdCgpKQorICAgICAgICAgICAgaWYgKG1fZGF0YS51
c2VzTWVudUxpc3QoKSkKICAgICAgICAgICAgICAgICB0b1JlbmRlck1lbnVMaXN0KHJlbmRlcmVy
KS0+ZGlkU2V0U2VsZWN0ZWRJbmRleChsaXN0SW5kZXgpOwogICAgICAgICAgICAgZWxzZSBpZiAo
cmVuZGVyZXItPmlzTGlzdEJveCgpKQogICAgICAgICAgICAgICAgIHRvUmVuZGVyTGlzdEJveChy
ZW5kZXJlciktPnNlbGVjdGlvbkNoYW5nZWQoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRv
U2VsZWN0RWxlbWVudChlbGVtZW50KS0+dXBkYXRlVmFsaWRpdHkoKTsKLSAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgZnJhbWUtPnBh
Z2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtU3RhdGVEaWRDaGFuZ2UoZWxlbWVudCk7Cisg
ICAgdXBkYXRlVmFsaWRpdHkoKTsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+
ZnJhbWUoKSkKKyAgICAgICAgZnJhbWUtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3Jt
U3RhdGVEaWRDaGFuZ2UodGhpcyk7CiB9CiAKLWludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9u
VG9MaXN0SW5kZXgoY29uc3QgU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQsIGludCBvcHRpb25JbmRleCkKK2ludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9u
VG9MaXN0SW5kZXgoaW50IG9wdGlvbkluZGV4KSBjb25zdAogewotICAgIGNvbnN0IFZlY3RvcjxF
bGVtZW50Kj4mIGl0ZW1zID0gZGF0YS5saXN0SXRlbXMoZWxlbWVudCk7Ci0gICAgaW50IGxpc3RT
aXplID0gKGludCkgaXRlbXMuc2l6ZSgpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0
ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKTsKKyAgICBpbnQgbGlzdFNpemUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGl0ZW1zLnNpemUoKSk7CiAgICAgaWYgKG9wdGlvbkluZGV4IDwgMCB8fCBvcHRp
b25JbmRleCA+PSBsaXN0U2l6ZSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC04NTksMTAgKzc5
NCwxMCBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4KGNvbnN0IFNl
bGVjdEVsZW1lbnREYXRhJiBkYXRhLCBjb25zdCBFbAogICAgIHJldHVybiAtMTsKIH0KIAotaW50
IEhUTUxTZWxlY3RFbGVtZW50OjpsaXN0VG9PcHRpb25JbmRleChjb25zdCBTZWxlY3RFbGVtZW50
RGF0YSYgZGF0YSwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgaW50IGxpc3RJbmRleCkKK2ludCBI
VE1MU2VsZWN0RWxlbWVudDo6bGlzdFRvT3B0aW9uSW5kZXgoaW50IGxpc3RJbmRleCkgY29uc3QK
IHsKLSAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGRhdGEubGlzdEl0ZW1zKGVs
ZW1lbnQpOwotICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQoaXRlbXMu
c2l6ZSgpKSB8fCAhaXNPcHRpb25FbGVtZW50KGl0ZW1zW2xpc3RJbmRleF0pKQorICAgIGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKTsKKyAgICBp
ZiAobGlzdEluZGV4IDwgMCB8fCBsaXN0SW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihpdGVtcy5z
aXplKCkpIHx8ICFpc09wdGlvbkVsZW1lbnQoaXRlbXNbbGlzdEluZGV4XSkpCiAgICAgICAgIHJl
dHVybiAtMTsKIAogICAgIC8vIEFjdHVhbCBpbmRleCBvZiBvcHRpb24gbm90IGNvdW50aW5nIE9Q
VEdST1VQIGVudHJpZXMgdGhhdCBtYXkgYmUgaW4gbGlzdC4KQEAgLTg4MCw3ICs4MTUsNyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoUGFzc1JlZlB0cjxOb2Rl
PiBvbGRGb2N1c2VkTm9kZSkKICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJl
IGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4KICAgICAvLyBkaXNwYXRjaGluZyBj
aGFuZ2UgZXZlbnRzIGR1cmluZyBibHVyIGV2ZW50IGRpc3BhdGNoYWwKICAgICBpZiAobV9kYXRh
LnVzZXNNZW51TGlzdCgpKQotICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbihtX2RhdGEsIHRoaXMp
OworICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OmRpc3BhdGNoRm9jdXNFdmVudChvbGRGb2N1c2VkTm9kZSk7CiB9CiAKQEAg
LTg5MCwxMyArODI1LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2
ZW50KFBhc3NSZWZQdHI8Tm9kZT4gbmV3Rm9jdXNlZE5vZGUpCiAgICAgLy8gY2hhbmdlIGV2ZW50
cyBmb3IgbGlzdCBib3hlcyB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZSBpcyBhY3R1YWxs
eSBtYWRlLgogICAgIC8vIFRoaXMgbWF0Y2hlcyBvdGhlciBicm93c2VycycgYmVoYXZpb3IuCiAg
ICAgaWYgKG1fZGF0YS51c2VzTWVudUxpc3QoKSkKLSAgICAgICAgbWVudUxpc3RPbkNoYW5nZSht
X2RhdGEsIHRoaXMpOworICAgICAgICBtZW51TGlzdE9uQ2hhbmdlKCk7CiAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGlzcGF0Y2hCbHVyRXZlbnQobmV3Rm9jdXNlZE5vZGUp
OwogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZXNlbGVjdEl0ZW1zKFNlbGVjdEVsZW1l
bnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LCBFbGVtZW50KiBleGNsdWRlRWxlbWVudCkK
K3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OmRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlvbihF
bGVtZW50KiBleGNsdWRlRWxlbWVudCkKIHsKLSAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBp
dGVtcyA9IGRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50
Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKGl0ZW1zW2ldID09IGV4
Y2x1ZGVFbGVtZW50KQogICAgICAgICAgICAgY29udGludWU7CkBAIC05MzUsNyArODcwLDcgQEAg
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29uc3QgU3Ry
aW5nJiBzdGF0ZSkKICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQtPnNldFNlbGVjdGVkU3RhdGUo
c3RhdGVbaV0gPT0gJ1gnKTsKICAgICB9CiAKLSAgICBzZXRPcHRpb25zQ2hhbmdlZE9uUmVuZGVy
ZXIobV9kYXRhLCB0aGlzKTsKKyAgICBzZXRPcHRpb25zQ2hhbmdlZE9uUmVuZGVyZXIoKTsKICAg
ICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIH0KIApAQCAtOTk3LDMxICs5MzIsMzAgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVzZXQoKQogICAgIGlmICghc2VsZWN0ZWRPcHRpb24gJiYg
Zmlyc3RPcHRpb24gJiYgIW1fZGF0YS5tdWx0aXBsZSgpICYmIG1fZGF0YS5zaXplKCkgPD0gMSkK
ICAgICAgICAgZmlyc3RPcHRpb24tPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CiAKLSAgICBzZXRP
cHRpb25zQ2hhbmdlZE9uUmVuZGVyZXIobV9kYXRhLCB0aGlzKTsKKyAgICBzZXRPcHRpb25zQ2hh
bmdlZE9uUmVuZGVyZXIoKTsKICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgc2V0TmVl
ZHNWYWxpZGl0eUNoZWNrKCk7CiB9CiAKICNpZiAhUExBVEZPUk0oV0lOKSB8fCBPUyhXSU5DRSkK
LWJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnBsYXRmb3JtSGFuZGxlS2V5ZG93bkV2ZW50KFNlbGVj
dEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LCBLZXlib2FyZEV2ZW50KiBldmVu
dCkKK2Jvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnBsYXRmb3JtSGFuZGxlS2V5ZG93bkV2ZW50KEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQogewogI2lmIEFSUk9XX0tFWVNfUE9QX01FTlUKLSAgICBpZiAo
IWlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkp
KSB7CisgICAgaWYgKCFpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1bWVudCgpLT5mcmFt
ZSgpKSkgewogICAgICAgICBpZiAoZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiRG93biIgfHwg
ZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiVXAiKSB7Ci0gICAgICAgICAgICBlbGVtZW50LT5m
b2N1cygpOwotCisgICAgICAgICAgICBmb2N1cygpOwogICAgICAgICAgICAgLy8gQ2FsbGluZyBm
b2N1cygpIG1heSBjYXVzZSB1cyB0byBsb3NlIG91ciByZW5kZXJlci4gUmV0dXJuIHRydWUgc28K
ICAgICAgICAgICAgIC8vIHRoYXQgb3VyIGNhbGxlciBkb2Vzbid0IHByb2Nlc3MgdGhlIGV2ZW50
IGZ1cnRoZXIsIGJ1dCBkb24ndCBzZXQKICAgICAgICAgICAgIC8vIHRoZSBldmVudCBhcyBoYW5k
bGVkLgotICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAgICAgICAg
aWYgKCFyZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAg
ICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBu
ZXcgc2VsZWN0aW9uCiAgICAgICAgICAgICAvLyB3aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBldmVu
dHMgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsIHdoaWNoCiAgICAgICAgICAgICAvLyBnZXRzIGNh
bGxlZCBmcm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQsIHdoaWNoIGdldHMgY2FsbGVk
CiAgICAgICAgICAgICAvLyBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBmcm9tIHRo
ZSBtZW51LgotICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oZGF0YSwgZWxlbWVudCk7Ci0g
ICAgICAgICAgICBpZiAoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0ID0gdG9SZW5kZXJNZW51TGlz
dChlbGVtZW50LT5yZW5kZXJlcigpKSkKKyAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7
CisgICAgICAgICAgICBpZiAoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0ID0gdG9SZW5kZXJNZW51
TGlzdChyZW5kZXJlcigpKSkKICAgICAgICAgICAgICAgICBtZW51TGlzdC0+c2hvd1BvcHVwKCk7
CiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgfQpAQCAt
MTAzMiwzMCArOTY2LDI3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnBsYXRmb3JtSGFuZGxl
S2V5ZG93bkV2ZW50KFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtCiB9CiAjZW5kaWYKIAot
dm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKFNlbGVj
dEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LCBFdmVudCogZXZlbnQsIEhUTUxG
b3JtRWxlbWVudCogaHRtbEZvcm0pCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAgaWYgKCFlbGVtZW50LT5y
ZW5kZXJlcigpIHx8ICFldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgIGlmICghcmVu
ZGVyZXIoKSB8fCAhZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIGlmIChwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudChkYXRhLCBlbGVtZW50
LCBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKSkKKyAgICAgICAgaWYgKHBsYXRm
b3JtSGFuZGxlS2V5ZG93bkV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIFdoZW4gdXNpbmcgc3BhdGlhbCBu
YXZpZ2F0aW9uLCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gbmF2aWdhdGUgYXdheQogICAgICAgICAv
LyBmcm9tIHRoZSBzZWxlY3QgZWxlbWVudCB3aGVuIHRoZSB1c2VyIGhpdHMgYW55IG9mIHRoZSBh
cnJvdyBrZXlzLAogICAgICAgICAvLyBpbnN0ZWFkIG9mIGNoYW5naW5nIHRoZSBzZWxlY3Rpb24u
Ci0gICAgICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChlbGVtZW50LT5kb2N1bWVu
dCgpLT5mcmFtZSgpKSkgewotICAgICAgICAgICAgaWYgKCFkYXRhLmFjdGl2ZVNlbGVjdGlvblN0
YXRlKCkpCisgICAgICAgIGlmIChpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1bWVudCgp
LT5mcmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKCFtX2RhdGEuYWN0aXZlU2VsZWN0aW9uU3Rh
dGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjb25z
dCBTdHJpbmcmIGtleUlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZl
bnQpLT5rZXlJZGVudGlmaWVyKCk7CiAgICAgICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7Ci0KLSAg
ICAgICAgVU5VU0VEX1BBUkFNKGh0bWxGb3JtKTsKLSAgICAgICAgY29uc3QgVmVjdG9yPEVsZW1l
bnQqPiYgbGlzdEl0ZW1zID0gZGF0YS5saXN0SXRlbXMoZWxlbWVudCk7Ci0KLSAgICAgICAgaW50
IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KGRhdGEsIGVsZW1lbnQsIHNlbGVjdGVkSW5k
ZXgoZGF0YSwgZWxlbWVudCkpOworICAgICAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0
SXRlbXMgPSBtX2RhdGEubGlzdEl0ZW1zKHRoaXMpOworICAgICAgICBpbnQgbGlzdEluZGV4ID0g
b3B0aW9uVG9MaXN0SW5kZXgoc2VsZWN0ZWRJbmRleCgpKTsKIAogICAgICAgICBpZiAoa2V5SWRl
bnRpZmllciA9PSAiRG93biIgfHwga2V5SWRlbnRpZmllciA9PSAiUmlnaHQiKQogICAgICAgICAg
ICAgbGlzdEluZGV4ID0gbmV4dFZhbGlkSW5kZXgobGlzdEl0ZW1zLCBsaXN0SW5kZXgsIFNraXBG
b3J3YXJkcywgMSk7CkBAIC0xMDczLDcgKzEwMDQsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVs
ZQogICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwogCiAgICAgICAgIGlmIChoYW5kbGVkICYm
IGxpc3RJbmRleCA+PSAwICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsaXN0SW5kZXgpIDwgbGlz
dEl0ZW1zLnNpemUoKSkKLSAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgoZGF0YSwgZWxlbWVu
dCwgbGlzdFRvT3B0aW9uSW5kZXgoZGF0YSwgZWxlbWVudCwgbGlzdEluZGV4KSk7CisgICAgICAg
ICAgICBzZXRTZWxlY3RlZEluZGV4SW50ZXJuYWwobGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4
KSk7CiAKICAgICAgICAgaWYgKGhhbmRsZWQpCiAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKQEAgLTEwODIsNjUgKzEwMTMsNjUgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBF
bGUKICAgICAvLyBVc2Uga2V5IHByZXNzIGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0
ZWQgbW91c2UgZXZlbnRzCiAgICAgLy8gb24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2Vu
ZGluZyBvZiB0aGUga2V5IHByZXNzIGV2ZW50LgogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIGlmICghZWxlbWVudC0+cmVuZGVy
ZXIoKSB8fCAhZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBpZiAoIXJlbmRlcmVy
KCkgfHwgIWV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBpbnQga2V5Q29kZSA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkt
PmtleUNvZGUoKTsKICAgICAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CiAKLSAgICAgICAgaWYg
KGtleUNvZGUgPT0gJyAnICYmIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGVsZW1lbnQtPmRv
Y3VtZW50KCktPmZyYW1lKCkpKSB7CisgICAgICAgIGlmIChrZXlDb2RlID09ICcgJyAmJiBpc1Nw
YXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChkb2N1bWVudCgpLT5mcmFtZSgpKSkgewogICAgICAgICAg
ICAgLy8gVXNlIHNwYWNlIHRvIHRvZ2dsZSBhcnJvdyBrZXkgaGFuZGxpbmcgZm9yIHNlbGVjdGlv
biBjaGFuZ2Ugb3Igc3BhdGlhbCBuYXZpZ2F0aW9uLgotICAgICAgICAgICAgZGF0YS5zZXRBY3Rp
dmVTZWxlY3Rpb25TdGF0ZSghZGF0YS5hY3RpdmVTZWxlY3Rpb25TdGF0ZSgpKTsKKyAgICAgICAg
ICAgIG1fZGF0YS5zZXRBY3RpdmVTZWxlY3Rpb25TdGF0ZSghbV9kYXRhLmFjdGl2ZVNlbGVjdGlv
blN0YXRlKCkpOwogICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogI2lmIFNQQUNFX09SX1JFVFVSTl9QT1BfTUVO
VQogICAgICAgICBpZiAoa2V5Q29kZSA9PSAnICcgfHwga2V5Q29kZSA9PSAnXHInKSB7Ci0gICAg
ICAgICAgICBlbGVtZW50LT5mb2N1cygpOworICAgICAgICAgICAgZm9jdXMoKTsKIAogICAgICAg
ICAgICAgLy8gQ2FsbGluZyBmb2N1cygpIG1heSBjYXVzZSB1cyB0byBsb3NlIG91ciByZW5kZXJl
ciwgaW4gd2hpY2ggY2FzZQogICAgICAgICAgICAgLy8gZG8gbm90IHdhbnQgdG8gaGFuZGxlIHRo
ZSBldmVudC4KLSAgICAgICAgICAgIGlmICghZWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAg
ICAgIGlmICghcmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
ICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5l
dyBzZWxlY3Rpb24KICAgICAgICAgICAgIC8vIHdoZW4gZGlzcGF0Y2hpbmcgY2hhbmdlIGV2ZW50
cyBkdXJpbmcgc2V0U2VsZWN0ZWRJbmRleCwgd2hpY2gKICAgICAgICAgICAgIC8vIGdldHMgY2Fs
bGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQK
ICAgICAgICAgICAgIC8vIGFmdGVyIHRoZSB1c2VyIG1ha2VzIGEgc2VsZWN0aW9uIGZyb20gdGhl
IG1lbnUuCi0gICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbihkYXRhLCBlbGVtZW50KTsKLSAg
ICAgICAgICAgIGlmIChSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSB0b1JlbmRlck1lbnVMaXN0
KGVsZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsK
KyAgICAgICAgICAgIGlmIChSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSB0b1JlbmRlck1lbnVM
aXN0KHJlbmRlcmVyKCkpKQogICAgICAgICAgICAgICAgIG1lbnVMaXN0LT5zaG93UG9wdXAoKTsK
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICB9CiAjZWxpZiBBUlJPV19LRVlT
X1BPUF9NRU5VCiAgICAgICAgIGlmIChrZXlDb2RlID09ICcgJykgewotICAgICAgICAgICAgZWxl
bWVudC0+Zm9jdXMoKTsKKyAgICAgICAgICAgIGZvY3VzKCk7CiAKICAgICAgICAgICAgIC8vIENh
bGxpbmcgZm9jdXMoKSBtYXkgY2F1c2UgdXMgdG8gbG9zZSBvdXIgcmVuZGVyZXIsIGluIHdoaWNo
IGNhc2UKICAgICAgICAgICAgIC8vIGRvIG5vdCB3YW50IHRvIGhhbmRsZSB0aGUgZXZlbnQuCi0g
ICAgICAgICAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBpZiAoIXJl
bmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAvLyBTYXZl
IHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9u
CiAgICAgICAgICAgICAvLyB3aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBldmVudHMgZHVyaW5nIHNl
dFNlbGVjdGVkSW5kZXgsIHdoaWNoCiAgICAgICAgICAgICAvLyBnZXRzIGNhbGxlZCBmcm9tIFJl
bmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQsIHdoaWNoIGdldHMgY2FsbGVkCiAgICAgICAgICAg
ICAvLyBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBmcm9tIHRoZSBtZW51LgotICAg
ICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oZGF0YSwgZWxlbWVudCk7Ci0gICAgICAgICAgICBp
ZiAoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0ID0gdG9SZW5kZXJNZW51TGlzdChlbGVtZW50LT5y
ZW5kZXJlcigpKSkKKyAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CisgICAgICAgICAg
ICBpZiAoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0ID0gdG9SZW5kZXJNZW51TGlzdChyZW5kZXJl
cigpKSkKICAgICAgICAgICAgICAgICBtZW51TGlzdC0+c2hvd1BvcHVwKCk7CiAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09ICdccicpIHsK
LSAgICAgICAgICAgIGlmIChodG1sRm9ybSkKLSAgICAgICAgICAgICAgICBodG1sRm9ybS0+c3Vi
bWl0SW1wbGljaXRseShldmVudCwgZmFsc2UpOwotICAgICAgICAgICAgbWVudUxpc3RPbkNoYW5n
ZShkYXRhLCBlbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChmb3JtKCkpCisgICAgICAgICAgICAg
ICAgZm9ybSgpLT5zdWJtaXRJbXBsaWNpdGx5KGV2ZW50LCBmYWxzZSk7CisgICAgICAgICAgICBt
ZW51TGlzdE9uQ2hhbmdlKCk7CiAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAg
fQogI2Vsc2UKLSAgICAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KGRhdGEs
IGVsZW1lbnQsIHNlbGVjdGVkSW5kZXgoZGF0YSwgZWxlbWVudCkpOworICAgICAgICBpbnQgbGlz
dEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoc2VsZWN0ZWRJbmRleCgpKTsKICAgICAgICAgaWYg
KGtleUNvZGUgPT0gJ1xyJykgewogICAgICAgICAgICAgLy8gbGlzdEluZGV4IHNob3VsZCBhbHJl
YWR5IGJlIHNlbGVjdGVkLCBidXQgdGhpcyB3aWxsIGZpcmUgdGhlIG9uY2hhbmdlIGhhbmRsZXIu
Ci0gICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGRhdGEsIGVsZW1lbnQsIGxpc3RUb09wdGlv
bkluZGV4KGRhdGEsIGVsZW1lbnQsIGxpc3RJbmRleCksIHRydWUsIHRydWUpOworICAgICAgICAg
ICAgc2V0U2VsZWN0ZWRJbmRleEludGVybmFsKGxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCks
IHRydWUsIHRydWUpOwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIH0KICNl
bmRpZgpAQCAtMTE0OSw5ICsxMDgwLDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bWVudUxp
c3REZWZhdWx0RXZlbnRIYW5kbGVyKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGUKICAgICB9
CiAKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQg
JiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVu
dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKLSAgICAgICAgZWxlbWVudC0+Zm9jdXMoKTsK
LSAgICAgICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+
aXNNZW51TGlzdCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0
ID0gdG9SZW5kZXJNZW51TGlzdChlbGVtZW50LT5yZW5kZXJlcigpKSkgeworICAgICAgICBmb2N1
cygpOworICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc01lbnVMaXN0KCkp
IHsKKyAgICAgICAgICAgIGlmIChSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSB0b1JlbmRlck1l
bnVMaXN0KHJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1lbnVMaXN0LT5wb3B1
cElzVmlzaWJsZSgpKQogICAgICAgICAgICAgICAgICAgICBtZW51TGlzdC0+aGlkZVBvcHVwKCk7
CiAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0xMTYwLDcgKzEwOTEsNyBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERh
dGEmIGRhdGEsIEVsZQogICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBnZXRzIGNhbGxlZCBm
cm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQsCiAgICAgICAgICAgICAgICAgICAgIC8v
IHdoaWNoIGdldHMgY2FsbGVkIGFmdGVyIHRoZSB1c2VyIG1ha2VzIGEgc2VsZWN0aW9uIGZyb20K
ICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1lbnUuCi0gICAgICAgICAgICAgICAgICAgIHNh
dmVMYXN0U2VsZWN0aW9uKGRhdGEsIGVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBzYXZl
TGFzdFNlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBtZW51TGlzdC0+c2hvd1BvcHVw
KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTE2OSwyOCArMTEwMCwy
OCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIo
U2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVsZQogICAgIH0KIH0KIAotdm9pZCBIVE1MU2VsZWN0
RWxlbWVudDo6dXBkYXRlU2VsZWN0ZWRTdGF0ZShTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgRWxl
bWVudCogZWxlbWVudCwgaW50IGxpc3RJbmRleCwgYm9vbCBtdWx0aSwgYm9vbCBzaGlmdCkKK3Zv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUoaW50IGxpc3RJbmRleCwg
Ym9vbCBtdWx0aSwgYm9vbCBzaGlmdCkKIHsKICAgICBBU1NFUlQobGlzdEluZGV4ID49IDApOwog
CiAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUg
bmV3IHNlbGVjdGlvbiB3aGVuCiAgICAgLy8gZGlzcGF0Y2hpbmcgY2hhbmdlIGV2ZW50cyBkdXJp
bmcgbW91c2V1cCwgb3IgYWZ0ZXIgYXV0b3Njcm9sbCBmaW5pc2hlcy4KLSAgICBzYXZlTGFzdFNl
bGVjdGlvbihkYXRhLCBlbGVtZW50KTsKKyAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwogCi0gICAg
ZGF0YS5zZXRBY3RpdmVTZWxlY3Rpb25TdGF0ZSh0cnVlKTsKKyAgICBtX2RhdGEuc2V0QWN0aXZl
U2VsZWN0aW9uU3RhdGUodHJ1ZSk7CiAKLSAgICBib29sIHNoaWZ0U2VsZWN0ID0gZGF0YS5tdWx0
aXBsZSgpICYmIHNoaWZ0OwotICAgIGJvb2wgbXVsdGlTZWxlY3QgPSBkYXRhLm11bHRpcGxlKCkg
JiYgbXVsdGkgJiYgIXNoaWZ0OworICAgIGJvb2wgc2hpZnRTZWxlY3QgPSBtX2RhdGEubXVsdGlw
bGUoKSAmJiBzaGlmdDsKKyAgICBib29sIG11bHRpU2VsZWN0ID0gbV9kYXRhLm11bHRpcGxlKCkg
JiYgbXVsdGkgJiYgIXNoaWZ0OwogCi0gICAgRWxlbWVudCogY2xpY2tlZEVsZW1lbnQgPSBkYXRh
Lmxpc3RJdGVtcyhlbGVtZW50KVtsaXN0SW5kZXhdOworICAgIEVsZW1lbnQqIGNsaWNrZWRFbGVt
ZW50ID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlzKVtsaXN0SW5kZXhdOwogICAgIE9wdGlvbkVsZW1l
bnQqIG9wdGlvbiA9IHRvT3B0aW9uRWxlbWVudChjbGlja2VkRWxlbWVudCk7CiAgICAgaWYgKG9w
dGlvbikgewogICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgYW4gYWN0aXZlIHNlbGVj
dGlvbiAobGlrZSBkdXJpbmcgZHJhZwogICAgICAgICAvLyBzZWxlY3Rpb24pLCBzaG91bGQgc2Vs
ZWN0IG9yIGRlc2VsZWN0CiAgICAgICAgIGlmIChvcHRpb24tPnNlbGVjdGVkKCkgJiYgbXVsdGkp
Ci0gICAgICAgICAgICBkYXRhLnNldEFjdGl2ZVNlbGVjdGlvblN0YXRlKGZhbHNlKTsKKyAgICAg
ICAgICAgIG1fZGF0YS5zZXRBY3RpdmVTZWxlY3Rpb25TdGF0ZShmYWxzZSk7CiAKLSAgICAgICAg
aWYgKCFkYXRhLmFjdGl2ZVNlbGVjdGlvblN0YXRlKCkpCisgICAgICAgIGlmICghbV9kYXRhLmFj
dGl2ZVNlbGVjdGlvblN0YXRlKCkpCiAgICAgICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkU3Rh
dGUoZmFsc2UpOwogICAgIH0KIApAQCAtMTE5OCwxMiArMTEyOSwxMiBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50Ojp1cGRhdGVTZWxlY3RlZFN0YXRlKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBF
bGVtZW50KiBlbAogICAgIC8vIG90aGVyIGl0ZW1zLCBleGNsdWRpbmcgdGhlIGNsaWNrZWQgb3B0
aW9uLiBJZiBubyBvcHRpb24gd2FzIGNsaWNrZWQsIHRoZW4KICAgICAvLyB0aGlzIHdpbGwgZGVz
ZWxlY3QgYWxsIGl0ZW1zIGluIHRoZSBsaXN0LgogICAgIGlmICghc2hpZnRTZWxlY3QgJiYgIW11
bHRpU2VsZWN0KQotICAgICAgICBkZXNlbGVjdEl0ZW1zKGRhdGEsIGVsZW1lbnQsIGNsaWNrZWRF
bGVtZW50KTsKKyAgICAgICAgZGVzZWxlY3RJdGVtc1dpdGhvdXRWYWxpZGF0aW9uKGNsaWNrZWRF
bGVtZW50KTsKIAogICAgIC8vIElmIHRoZSBhbmNob3IgaGFzbid0IGJlZW4gc2V0LCBhbmQgd2Un
cmUgZG9pbmcgYSBzaW5nbGUgc2VsZWN0aW9uIG9yIGEKICAgICAvLyBzaGlmdCBzZWxlY3Rpb24s
IHRoZW4gaW5pdGlhbGl6ZSB0aGUgYW5jaG9yIHRvIHRoZSBmaXJzdCBzZWxlY3RlZCBpbmRleC4K
LSAgICBpZiAoZGF0YS5hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCAmJiAhbXVsdGlT
ZWxlY3QpCi0gICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGRhdGEsIGVsZW1l
bnQsIHNlbGVjdGVkSW5kZXgoZGF0YSwgZWxlbWVudCkpOworICAgIGlmIChtX2RhdGEuYWN0aXZl
U2VsZWN0aW9uQW5jaG9ySW5kZXgoKSA8IDAgJiYgIW11bHRpU2VsZWN0KQorICAgICAgICBzZXRB
Y3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChzZWxlY3RlZEluZGV4KCkpOwogCiAgICAgLy8gU2V0
IHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgdGhlIGNsaWNrZWQgb3B0aW9uCiAgICAgaWYgKG9wdGlv
biAmJiAhY2xpY2tlZEVsZW1lbnQtPmRpc2FibGVkKCkpCkBAIC0xMjEzLDQ0ICsxMTQ0LDQzIEBA
IHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGVkU3RhdGUoU2VsZWN0RWxlbWVu
dERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsCiAgICAgLy8gd2UncmUgZG9pbmcgYSBzaW5nbGUgc2Vs
ZWN0aW9uLCBvciBhIG11bHRpcGxlIHNlbGVjdGlvbiAodXNpbmcgY21kIG9yCiAgICAgLy8gY3Ry
bCksIHRoZW4gaW5pdGlhbGl6ZSB0aGUgYW5jaG9yIGluZGV4IHRvIHRoZSBsaXN0SW5kZXggdGhh
dCBqdXN0IGdvdAogICAgIC8vIGNsaWNrZWQuCi0gICAgaWYgKGRhdGEuYWN0aXZlU2VsZWN0aW9u
QW5jaG9ySW5kZXgoKSA8IDAgfHwgIXNoaWZ0U2VsZWN0KQotICAgICAgICBzZXRBY3RpdmVTZWxl
Y3Rpb25BbmNob3JJbmRleChkYXRhLCBlbGVtZW50LCBsaXN0SW5kZXgpOworICAgIGlmIChtX2Rh
dGEuYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoKSA8IDAgfHwgIXNoaWZ0U2VsZWN0KQorICAg
ICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChsaXN0SW5kZXgpOwogCi0gICAgc2V0
QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoZGF0YSwgbGlzdEluZGV4KTsKLSAgICB1cGRhdGVMaXN0
Qm94U2VsZWN0aW9uKGRhdGEsIGVsZW1lbnQsICFtdWx0aVNlbGVjdCk7CisgICAgc2V0QWN0aXZl
U2VsZWN0aW9uRW5kSW5kZXgobGlzdEluZGV4KTsKKyAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9u
KCFtdWx0aVNlbGVjdCk7CiB9CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZh
dWx0RXZlbnRIYW5kbGVyKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50
LCBFdmVudCogZXZlbnQsIEhUTUxGb3JtRWxlbWVudCogaHRtbEZvcm0pCit2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0g
ICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gZGF0YS5saXN0SXRlbXMoZWxl
bWVudCk7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gbV9kYXRhLmxp
c3RJdGVtcyh0aGlzKTsKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91
c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewotICAgICAgICBlbGVt
ZW50LT5mb2N1cygpOwotCisgICAgICAgIGZvY3VzKCk7CiAgICAgICAgIC8vIENhbGxpbmcgZm9j
dXMoKSBtYXkgY2F1c2UgdXMgdG8gbG9zZSBvdXIgcmVuZGVyZXIsIGluIHdoaWNoIGNhc2UgZG8g
bm90IHdhbnQgdG8gaGFuZGxlIHRoZSBldmVudC4KLSAgICAgICAgaWYgKCFlbGVtZW50LT5yZW5k
ZXJlcigpKQorICAgICAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgLy8gQ29udmVydCB0byBjb29yZHMgcmVsYXRpdmUgdG8gdGhlIGxpc3QgYm94IGlm
IG5lZWRlZC4KICAgICAgICAgTW91c2VFdmVudCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1v
dXNlRXZlbnQqPihldmVudCk7Ci0gICAgICAgIEludFBvaW50IGxvY2FsT2Zmc2V0ID0gcm91bmRl
ZEludFBvaW50KGVsZW1lbnQtPnJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChtb3VzZUV2ZW50
LT5hYnNvbHV0ZUxvY2F0aW9uKCksIGZhbHNlLCB0cnVlKSk7Ci0gICAgICAgIGludCBsaXN0SW5k
ZXggPSB0b1JlbmRlckxpc3RCb3goZWxlbWVudC0+cmVuZGVyZXIoKSktPmxpc3RJbmRleEF0T2Zm
c2V0KHRvU2l6ZShsb2NhbE9mZnNldCkpOworICAgICAgICBJbnRQb2ludCBsb2NhbE9mZnNldCA9
IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwobW91c2VFdmVudC0+
YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSkpOworICAgICAgICBpbnQgbGlzdEluZGV4
ID0gdG9SZW5kZXJMaXN0Qm94KHJlbmRlcmVyKCkpLT5saXN0SW5kZXhBdE9mZnNldCh0b1NpemUo
bG9jYWxPZmZzZXQpKTsKICAgICAgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CiAjaWYgUExBVEZP
Uk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCi0gICAgICAgICAg
ICB1cGRhdGVTZWxlY3RlZFN0YXRlKGRhdGEsIGVsZW1lbnQsIGxpc3RJbmRleCwgbW91c2VFdmVu
dC0+bWV0YUtleSgpLCBtb3VzZUV2ZW50LT5zaGlmdEtleSgpKTsKKyAgICAgICAgICAgIHVwZGF0
ZVNlbGVjdGVkU3RhdGUobGlzdEluZGV4LCBtb3VzZUV2ZW50LT5tZXRhS2V5KCksIG1vdXNlRXZl
bnQtPnNoaWZ0S2V5KCkpOwogI2Vsc2UKLSAgICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkU3RhdGUo
ZGF0YSwgZWxlbWVudCwgbGlzdEluZGV4LCBtb3VzZUV2ZW50LT5jdHJsS2V5KCksIG1vdXNlRXZl
bnQtPnNoaWZ0S2V5KCkpOworICAgICAgICAgICAgdXBkYXRlU2VsZWN0ZWRTdGF0ZShsaXN0SW5k
ZXgsIG1vdXNlRXZlbnQtPmN0cmxLZXkoKSwgbW91c2VFdmVudC0+c2hpZnRLZXkoKSk7CiAjZW5k
aWYKLSAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5m
cmFtZSgpKQorICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1l
KCkpCiAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRNb3VzZURvd25N
YXlTdGFydEF1dG9zY3JvbGwoKTsKIAogICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLm1vdXNldXBFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nh
c3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiAmJiBlbGVtZW50
LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+YXV0b3Njcm9sbFJlbmRlcmVy
KCkgIT0gZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAm
JiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9u
ICYmIGRvY3VtZW50KCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5hdXRvc2Nyb2xsUmVuZGVy
ZXIoKSAhPSByZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB3ZSBmaXJl
IGRpc3BhdGNoRm9ybUNvbnRyb2xDaGFuZ2VFdmVudCBmb3IgYSBzaW5nbGUKICAgICAgICAgLy8g
Y2xpY2suIEZvciBkcmFnIHNlbGVjdGlvbiwgb25DaGFuZ2Ugd2lsbCBmaXJlIHdoZW4gdGhlIGF1
dG9zY3JvbGwKICAgICAgICAgLy8gdGltZXIgc3RvcHMuCi0gICAgICAgIGxpc3RCb3hPbkNoYW5n
ZShkYXRhLCBlbGVtZW50KTsKKyAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CiAgICAgfSBlbHNl
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKICAgICAg
ICAgaWYgKCFldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xMjU4LDc5ICsxMTg4LDc5IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZh
dWx0RXZlbnRIYW5kbGVyKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtCiAKICAgICAgICAg
Ym9vbCBoYW5kbGVkID0gZmFsc2U7CiAgICAgICAgIGludCBlbmRJbmRleCA9IDA7Ci0gICAgICAg
IGlmIChkYXRhLmFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCkgPCAwKSB7CisgICAgICAgIGlmICht
X2RhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSA8IDApIHsKICAgICAgICAgICAgIC8vIElu
aXRpYWxpemUgdGhlIGVuZCBpbmRleAogICAgICAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0g
IkRvd24iIHx8IGtleUlkZW50aWZpZXIgPT0gIlBhZ2VEb3duIikgewotICAgICAgICAgICAgICAg
IGludCBzdGFydEluZGV4ID0gbGFzdFNlbGVjdGVkTGlzdEluZGV4KGRhdGEsIGVsZW1lbnQpOwor
ICAgICAgICAgICAgICAgIGludCBzdGFydEluZGV4ID0gbGFzdFNlbGVjdGVkTGlzdEluZGV4KCk7
CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKGtl
eUlkZW50aWZpZXIgPT0gIkRvd24iKQotICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IG5l
eHRTZWxlY3RhYmxlTGlzdEluZGV4KGRhdGEsIGVsZW1lbnQsIHN0YXJ0SW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICBlbmRJbmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4KG1fZGF0YSwg
dGhpcywgc3RhcnRJbmRleCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBlbmRJbmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4UGFnZUF3YXkoZGF0YSwgZWxl
bWVudCwgc3RhcnRJbmRleCwgU2tpcEZvcndhcmRzKTsKKyAgICAgICAgICAgICAgICAgICAgZW5k
SW5kZXggPSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleFBhZ2VBd2F5KG1fZGF0YSwgdGhpcywgc3Rh
cnRJbmRleCwgU2tpcEZvcndhcmRzKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5SWRlbnRp
ZmllciA9PSAiVXAiIHx8IGtleUlkZW50aWZpZXIgPT0gIlBhZ2VVcCIpIHsKLSAgICAgICAgICAg
ICAgICBpbnQgc3RhcnRJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KGRhdGEsIGVsZW1lbnQsIHNl
bGVjdGVkSW5kZXgoZGF0YSwgZWxlbWVudCkpOworICAgICAgICAgICAgICAgIGludCBzdGFydElu
ZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoc2VsZWN0ZWRJbmRleCgpKTsKICAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAi
VXAiKQotICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IHByZXZpb3VzU2VsZWN0YWJsZUxp
c3RJbmRleChkYXRhLCBlbGVtZW50LCBzdGFydEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
ZW5kSW5kZXggPSBwcmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgobV9kYXRhLCB0aGlzLCBzdGFy
dEluZGV4KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVuZElu
ZGV4ID0gbmV4dFNlbGVjdGFibGVMaXN0SW5kZXhQYWdlQXdheShkYXRhLCBlbGVtZW50LCBzdGFy
dEluZGV4LCBTa2lwQmFja3dhcmRzKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBu
ZXh0U2VsZWN0YWJsZUxpc3RJbmRleFBhZ2VBd2F5KG1fZGF0YSwgdGhpcywgc3RhcnRJbmRleCwg
U2tpcEJhY2t3YXJkcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBTZXQgdGhlIGVuZCBpbmRleCBiYXNlZCBvbiB0aGUgY3VycmVudCBlbmQgaW5kZXgK
ICAgICAgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIikgewotICAgICAgICAgICAg
ICAgIGVuZEluZGV4ID0gbmV4dFNlbGVjdGFibGVMaXN0SW5kZXgoZGF0YSwgZWxlbWVudCwgZGF0
YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBlbmRJbmRleCA9
IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4KG1fZGF0YSwgdGhpcywgbV9kYXRhLmFjdGl2ZVNlbGVj
dGlvbkVuZEluZGV4KCkpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAg
ICAgICAgfSBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIpIHsKLSAgICAgICAgICAgICAg
ICBlbmRJbmRleCA9IHByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleChkYXRhLCBlbGVtZW50LCBk
YXRhLmFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCkpOworICAgICAgICAgICAgICAgIGVuZEluZGV4
ID0gcHJldmlvdXNTZWxlY3RhYmxlTGlzdEluZGV4KG1fZGF0YSwgdGhpcywgbV9kYXRhLmFjdGl2
ZVNlbGVjdGlvbkVuZEluZGV4KCkpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwog
ICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJQYWdlRG93biIpIHsKLSAg
ICAgICAgICAgICAgICBlbmRJbmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4UGFnZUF3YXko
ZGF0YSwgZWxlbWVudCwgZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpLCBTa2lwRm9yd2Fy
ZHMpOworICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gbmV4dFNlbGVjdGFibGVMaXN0SW5kZXhQ
YWdlQXdheShtX2RhdGEsIHRoaXMsIG1fZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpLCBT
a2lwRm9yd2FyZHMpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAg
ICAgfSBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJQYWdlVXAiKSB7Ci0gICAgICAgICAgICAg
ICAgZW5kSW5kZXggPSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleFBhZ2VBd2F5KGRhdGEsIGVsZW1l
bnQsIGRhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSwgU2tpcEJhY2t3YXJkcyk7CisgICAg
ICAgICAgICAgICAgZW5kSW5kZXggPSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleFBhZ2VBd2F5KG1f
ZGF0YSwgdGhpcywgbV9kYXRhLmFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCksIFNraXBCYWNrd2Fy
ZHMpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJIb21lIikgewotICAgICAgICAg
ICAgZW5kSW5kZXggPSBmaXJzdFNlbGVjdGFibGVMaXN0SW5kZXgoZGF0YSwgZWxlbWVudCk7Cisg
ICAgICAgICAgICBlbmRJbmRleCA9IGZpcnN0U2VsZWN0YWJsZUxpc3RJbmRleChtX2RhdGEsIHRo
aXMpOwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoa2V5
SWRlbnRpZmllciA9PSAiRW5kIikgewotICAgICAgICAgICAgZW5kSW5kZXggPSBsYXN0U2VsZWN0
YWJsZUxpc3RJbmRleChkYXRhLCBlbGVtZW50KTsKKyAgICAgICAgICAgIGVuZEluZGV4ID0gbGFz
dFNlbGVjdGFibGVMaXN0SW5kZXgobV9kYXRhLCB0aGlzKTsKICAgICAgICAgICAgIGhhbmRsZWQg
PSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzU3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkKGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkpKQorICAgICAgICBpZiAoaXNTcGF0aWFs
TmF2aWdhdGlvbkVuYWJsZWQoZG9jdW1lbnQoKS0+ZnJhbWUoKSkpCiAgICAgICAgICAgICAvLyBD
aGVjayBpZiB0aGUgc2VsZWN0aW9uIG1vdmVzIHRvIHRoZSBib3VuZGFyeS4KLSAgICAgICAgICAg
IGlmIChrZXlJZGVudGlmaWVyID09ICJMZWZ0IiB8fCBrZXlJZGVudGlmaWVyID09ICJSaWdodCIg
fHwgKChrZXlJZGVudGlmaWVyID09ICJEb3duIiB8fCBrZXlJZGVudGlmaWVyID09ICJVcCIpICYm
IGVuZEluZGV4ID09IGRhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSkpCisgICAgICAgICAg
ICBpZiAoa2V5SWRlbnRpZmllciA9PSAiTGVmdCIgfHwga2V5SWRlbnRpZmllciA9PSAiUmlnaHQi
IHx8ICgoa2V5SWRlbnRpZmllciA9PSAiRG93biIgfHwga2V5SWRlbnRpZmllciA9PSAiVXAiKSAm
JiBlbmRJbmRleCA9PSBtX2RhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmIChlbmRJbmRleCA+PSAwICYmIGhhbmRsZWQp
IHsKICAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFy
ZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24KICAgICAgICAgICAgIC8vIHdoZW4gZGlzcGF0Y2hpbmcg
Y2hhbmdlIGV2ZW50cyBpbW1lZGlhdGVseSBhZnRlciBtYWtpbmcgdGhlIG5ldwogICAgICAgICAg
ICAgLy8gc2VsZWN0aW9uLgotICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oZGF0YSwgZWxl
bWVudCk7CisgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOwogCiAgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGxpc3RJdGVtcywgIWxpc3RJdGVtcy5zaXplKCkgfHwgKGVuZEluZGV4ID49
IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZEluZGV4KSA8IGxpc3RJdGVtcy5zaXplKCkp
KTsKLSAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGRhdGEsIGVuZEluZGV4
KTsKKyAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGVuZEluZGV4KTsKIAot
ICAgICAgICAgICAgYm9vbCBzZWxlY3ROZXdJdGVtID0gIWRhdGEubXVsdGlwbGUoKSB8fCBzdGF0
aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpLT5zaGlmdEtleSgpIHx8ICFpc1NwYXRpYWxO
YXZpZ2F0aW9uRW5hYmxlZChlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICAgICAg
ICAgIGJvb2wgc2VsZWN0TmV3SXRlbSA9ICFtX2RhdGEubXVsdGlwbGUoKSB8fCBzdGF0aWNfY2Fz
dDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpLT5zaGlmdEtleSgpIHx8ICFpc1NwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChkb2N1bWVudCgpLT5mcmFtZSgpKTsKICAgICAgICAgICAgIGlmIChzZWxlY3RO
ZXdJdGVtKQotICAgICAgICAgICAgICAgIGRhdGEuc2V0QWN0aXZlU2VsZWN0aW9uU3RhdGUodHJ1
ZSk7CisgICAgICAgICAgICAgICAgbV9kYXRhLnNldEFjdGl2ZVNlbGVjdGlvblN0YXRlKHRydWUp
OwogICAgICAgICAgICAgLy8gSWYgdGhlIGFuY2hvciBpcyB1bml0aWFsaXplZCwgb3IgaWYgd2Un
cmUgZ29pbmcgdG8gZGVzZWxlY3QgYWxsCiAgICAgICAgICAgICAvLyBvdGhlciBvcHRpb25zLCB0
aGVuIHNldCB0aGUgYW5jaG9yIGluZGV4IGVxdWFsIHRvIHRoZSBlbmQgaW5kZXguCi0gICAgICAg
ICAgICBib29sIGRlc2VsZWN0T3RoZXJzID0gIWRhdGEubXVsdGlwbGUoKSB8fCAoIXN0YXRpY19j
YXN0PEtleWJvYXJkRXZlbnQqPihldmVudCktPnNoaWZ0S2V5KCkgJiYgc2VsZWN0TmV3SXRlbSk7
Ci0gICAgICAgICAgICBpZiAoZGF0YS5hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCB8
fCBkZXNlbGVjdE90aGVycykgeworICAgICAgICAgICAgYm9vbCBkZXNlbGVjdE90aGVycyA9ICFt
X2RhdGEubXVsdGlwbGUoKSB8fCAoIXN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkt
PnNoaWZ0S2V5KCkgJiYgc2VsZWN0TmV3SXRlbSk7CisgICAgICAgICAgICBpZiAobV9kYXRhLmFj
dGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCkgPCAwIHx8IGRlc2VsZWN0T3RoZXJzKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGRlc2VsZWN0T3RoZXJzKQotICAgICAgICAgICAgICAgICAgICBkZXNl
bGVjdEl0ZW1zKGRhdGEsIGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVj
dGlvbkFuY2hvckluZGV4KGRhdGEsIGVsZW1lbnQsIGRhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIGRlc2VsZWN0SXRlbXNXaXRob3V0VmFsaWRhdGlv
bigpOworICAgICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KG1fZGF0
YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgdG9SZW5kZXJMaXN0Qm94KGVsZW1lbnQtPnJlbmRlcmVyKCkpLT5zY3JvbGxUb1JldmVhbEVs
ZW1lbnRBdExpc3RJbmRleChlbmRJbmRleCk7CisgICAgICAgICAgICB0b1JlbmRlckxpc3RCb3go
cmVuZGVyZXIoKSktPnNjcm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KGVuZEluZGV4KTsK
ICAgICAgICAgICAgIGlmIChzZWxlY3ROZXdJdGVtKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRl
TGlzdEJveFNlbGVjdGlvbihkYXRhLCBlbGVtZW50LCBkZXNlbGVjdE90aGVycyk7Ci0gICAgICAg
ICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKGRhdGEsIGVsZW1lbnQpOworICAgICAgICAgICAgICAg
IHVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24oZGVzZWxlY3RPdGhlcnMpOworICAgICAgICAgICAgICAg
IGxpc3RCb3hPbkNoYW5nZSgpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
c2Nyb2xsVG9TZWxlY3Rpb24oZGF0YSwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgc2Nyb2xs
VG9TZWxlY3Rpb24oKTsKIAogICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiAgICAgICAgIH0KQEAgLTEzNDAsNDggKzEyNzAsNDggQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIEVs
ZW0KICAgICAgICAgaW50IGtleUNvZGUgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZl
bnQpLT5rZXlDb2RlKCk7CiAKICAgICAgICAgaWYgKGtleUNvZGUgPT0gJ1xyJykgewotICAgICAg
ICAgICAgaWYgKGh0bWxGb3JtKQotICAgICAgICAgICAgICAgIGh0bWxGb3JtLT5zdWJtaXRJbXBs
aWNpdGx5KGV2ZW50LCBmYWxzZSk7CisgICAgICAgICAgICBpZiAoZm9ybSgpKQorICAgICAgICAg
ICAgICAgIGZvcm0oKS0+c3VibWl0SW1wbGljaXRseShldmVudCwgZmFsc2UpOwogICAgICAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5t
dWx0aXBsZSgpICYmIGtleUNvZGUgPT0gJyAnICYmIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVk
KGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCkpKSB7CisgICAgICAgIH0gZWxzZSBpZiAobV9k
YXRhLm11bHRpcGxlKCkgJiYga2V5Q29kZSA9PSAnICcgJiYgaXNTcGF0aWFsTmF2aWdhdGlvbkVu
YWJsZWQoZG9jdW1lbnQoKS0+ZnJhbWUoKSkpIHsKICAgICAgICAgICAgIC8vIFVzZSBzcGFjZSB0
byB0b2dnbGUgc2VsZWN0aW9uIGNoYW5nZS4KLSAgICAgICAgICAgIGRhdGEuc2V0QWN0aXZlU2Vs
ZWN0aW9uU3RhdGUoIWRhdGEuYWN0aXZlU2VsZWN0aW9uU3RhdGUoKSk7Ci0gICAgICAgICAgICB1
cGRhdGVTZWxlY3RlZFN0YXRlKGRhdGEsIGVsZW1lbnQsIGxpc3RUb09wdGlvbkluZGV4KGRhdGEs
IGVsZW1lbnQsIGRhdGEuYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSksIHRydWUgLyptdWx0aSov
LCBmYWxzZSAvKnNoaWZ0Ki8pOwotICAgICAgICAgICAgbGlzdEJveE9uQ2hhbmdlKGRhdGEsIGVs
ZW1lbnQpOworICAgICAgICAgICAgbV9kYXRhLnNldEFjdGl2ZVNlbGVjdGlvblN0YXRlKCFtX2Rh
dGEuYWN0aXZlU2VsZWN0aW9uU3RhdGUoKSk7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZFN0
YXRlKGxpc3RUb09wdGlvbkluZGV4KG1fZGF0YS5hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpKSwg
dHJ1ZSAvKm11bHRpKi8sIGZhbHNlIC8qc2hpZnQqLyk7CisgICAgICAgICAgICBsaXN0Qm94T25D
aGFuZ2UoKTsKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAg
ICB9CiAgICAgfQogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LCBFdmVudCogZXZl
bnQsIEhUTUxGb3JtRWxlbWVudCogaHRtbEZvcm0pCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQtPnJl
bmRlcmVyKCkpCisgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoZGF0YS51c2VzTWVudUxpc3QoKSkKLSAgICAgICAgbWVudUxpc3REZWZhdWx0RXZlbnRIYW5k
bGVyKGRhdGEsIGVsZW1lbnQsIGV2ZW50LCBodG1sRm9ybSk7CisgICAgaWYgKG1fZGF0YS51c2Vz
TWVudUxpc3QoKSkKKyAgICAgICAgbWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsK
ICAgICBlbHNlIAotICAgICAgICBsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihkYXRhLCBlbGVt
ZW50LCBldmVudCwgaHRtbEZvcm0pOwotCisgICAgICAgIGxpc3RCb3hEZWZhdWx0RXZlbnRIYW5k
bGVyKGV2ZW50KTsKICAgICBpZiAoZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2
ZW50ICYmIGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkgewogICAgICAgICBLZXlib2FyZEV2ZW50
KiBrZXlib2FyZEV2ZW50ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KTsKICAg
ICAgICAgaWYgKCFrZXlib2FyZEV2ZW50LT5jdHJsS2V5KCkgJiYgIWtleWJvYXJkRXZlbnQtPmFs
dEtleSgpICYmICFrZXlib2FyZEV2ZW50LT5tZXRhS2V5KCkgJiYgaXNQcmludGFibGVDaGFyKGtl
eWJvYXJkRXZlbnQtPmNoYXJDb2RlKCkpKSB7Ci0gICAgICAgICAgICB0eXBlQWhlYWRGaW5kKGRh
dGEsIGVsZW1lbnQsIGtleWJvYXJkRXZlbnQpOworICAgICAgICAgICAgdHlwZUFoZWFkRmluZChr
ZXlib2FyZEV2ZW50KTsKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQorICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogfQogCi1pbnQg
SFRNTFNlbGVjdEVsZW1lbnQ6Omxhc3RTZWxlY3RlZExpc3RJbmRleChjb25zdCBTZWxlY3RFbGVt
ZW50RGF0YSYgZGF0YSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKK2ludCBIVE1MU2VsZWN0RWxl
bWVudDo6bGFzdFNlbGVjdGVkTGlzdEluZGV4KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGl0ZXJhdGUgdGhlIGxpc3RJdGVtcyBpbiB0aGUgcmV2ZXJzZSBvcmRlci4KICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGNvbnN0IFZl
Y3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gZGF0YS5saXN0SXRlbXMoZWxlbWVudCk7CisgICAgY29u
c3QgVmVjdG9yPEVsZW1lbnQqPiYgaXRlbXMgPSBtX2RhdGEubGlzdEl0ZW1zKHRoaXMpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYg
KE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQoaXRlbXNbaV0p
KSB7CiAgICAgICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQoKSkgewpAQCAtMTM5
MSw3ICsxMzIxLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpsYXN0U2VsZWN0ZWRMaXN0SW5k
ZXgoY29uc3QgU2VsZWN0RWxlbWVudERhdGEmIGRhdGEsIGNvbnMKICAgICAgICAgfQogICAgIH0K
IAotICAgIHJldHVybiBmb3VuZCA/IChpbnQpIGluZGV4IDogLTE7CisgICAgcmV0dXJuIGZvdW5k
ID8gc3RhdGljX2Nhc3Q8aW50PihpbmRleCkgOiAtMTsKIH0KIAogc3RhdGljIFN0cmluZyBzdHJp
cExlYWRpbmdXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQpAQCAtMTQwNywxMyArMTMz
NywxMyBAQCBzdGF0aWMgU3RyaW5nIHN0cmlwTGVhZGluZ1doaXRlU3BhY2UoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiAgICAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoaSwgbGVuZ3RoIC0gaSk7CiB9
CiAKLXZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoU2VsZWN0RWxlbWVudERh
dGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQordm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsK
LSAgICBpZiAoZXZlbnQtPnRpbWVTdGFtcCgpIDwgZGF0YS5sYXN0Q2hhclRpbWUoKSkKKyAgICBp
ZiAoZXZlbnQtPnRpbWVTdGFtcCgpIDwgbV9kYXRhLmxhc3RDaGFyVGltZSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBET01UaW1lU3RhbXAgZGVsdGEgPSBldmVudC0+dGltZVN0YW1wKCkgLSBk
YXRhLmxhc3RDaGFyVGltZSgpOwotICAgIGRhdGEuc2V0TGFzdENoYXJUaW1lKGV2ZW50LT50aW1l
U3RhbXAoKSk7CisgICAgRE9NVGltZVN0YW1wIGRlbHRhID0gZXZlbnQtPnRpbWVTdGFtcCgpIC0g
bV9kYXRhLmxhc3RDaGFyVGltZSgpOworICAgIG1fZGF0YS5zZXRMYXN0Q2hhclRpbWUoZXZlbnQt
PnRpbWVTdGFtcCgpKTsKIAogICAgIFVDaGFyIGMgPSBldmVudC0+Y2hhckNvZGUoKTsKIApAQCAt
MTQyMSwyOSArMTM1MSwyOSBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5k
KFNlbGVjdEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LAogICAgIGludCBzZWFy
Y2hTdGFydE9mZnNldCA9IDE7CiAgICAgaWYgKGRlbHRhID4gdHlwZUFoZWFkVGltZW91dCkgewog
ICAgICAgICBwcmVmaXggPSBTdHJpbmcoJmMsIDEpOwotICAgICAgICBkYXRhLnNldFR5cGVkU3Ry
aW5nKHByZWZpeCk7Ci0gICAgICAgIGRhdGEuc2V0UmVwZWF0aW5nQ2hhcihjKTsKKyAgICAgICAg
bV9kYXRhLnNldFR5cGVkU3RyaW5nKHByZWZpeCk7CisgICAgICAgIG1fZGF0YS5zZXRSZXBlYXRp
bmdDaGFyKGMpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGRhdGEudHlwZWRTdHJpbmcoKS5hcHBl
bmQoYyk7CisgICAgICAgIG1fZGF0YS50eXBlZFN0cmluZygpLmFwcGVuZChjKTsKIAotICAgICAg
ICBpZiAoYyA9PSBkYXRhLnJlcGVhdGluZ0NoYXIoKSkgeworICAgICAgICBpZiAoYyA9PSBtX2Rh
dGEucmVwZWF0aW5nQ2hhcigpKSB7CiAgICAgICAgICAgICAvLyBUaGUgdXNlciBpcyBsaWtlbHkg
dHJ5aW5nIHRvIGN5Y2xlIHRocm91Z2ggYWxsIHRoZSBpdGVtcyBzdGFydGluZwogICAgICAgICAg
ICAgLy8gd2l0aCB0aGlzIGNoYXJhY3Rlciwgc28ganVzdCBzZWFyY2ggb24gdGhlIGNoYXJhY3Rl
cgogICAgICAgICAgICAgcHJlZml4ID0gU3RyaW5nKCZjLCAxKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGRhdGEuc2V0UmVwZWF0aW5nQ2hhcigwKTsKLSAgICAgICAgICAgIHByZWZp
eCA9IGRhdGEudHlwZWRTdHJpbmcoKTsKKyAgICAgICAgICAgIG1fZGF0YS5zZXRSZXBlYXRpbmdD
aGFyKDApOworICAgICAgICAgICAgcHJlZml4ID0gbV9kYXRhLnR5cGVkU3RyaW5nKCk7CiAgICAg
ICAgICAgICBzZWFyY2hTdGFydE9mZnNldCA9IDA7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBj
b25zdCBWZWN0b3I8RWxlbWVudCo+JiBpdGVtcyA9IGRhdGEubGlzdEl0ZW1zKGVsZW1lbnQpOwor
ICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGl0ZW1zID0gbV9kYXRhLmxpc3RJdGVtcyh0aGlz
KTsKICAgICBpbnQgaXRlbUNvdW50ID0gaXRlbXMuc2l6ZSgpOwogICAgIGlmIChpdGVtQ291bnQg
PCAxKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgc2VsZWN0ZWQgPSBzZWxlY3RlZEluZGV4
KGRhdGEsIGVsZW1lbnQpOwotICAgIGludCBpbmRleCA9IChvcHRpb25Ub0xpc3RJbmRleChkYXRh
LCBlbGVtZW50LCBzZWxlY3RlZCA+PSAwID8gc2VsZWN0ZWQgOiAwKSArIHNlYXJjaFN0YXJ0T2Zm
c2V0KSAlIGl0ZW1Db3VudDsKKyAgICBpbnQgc2VsZWN0ZWQgPSBzZWxlY3RlZEluZGV4KCk7Cisg
ICAgaW50IGluZGV4ID0gKG9wdGlvblRvTGlzdEluZGV4KHNlbGVjdGVkID49IDAgPyBzZWxlY3Rl
ZCA6IDApICsgc2VhcmNoU3RhcnRPZmZzZXQpICUgaXRlbUNvdW50OwogICAgIEFTU0VSVChpbmRl
eCA+PSAwKTsKIAogICAgIC8vIENvbXB1dGUgYSBjYXNlLWZvbGRlZCBjb3B5IG9mIHRoZSBwcmVm
aXggc3RyaW5nIGJlZm9yZSBiZWdpbm5pbmcgdGhlIHNlYXJjaCBmb3IKQEAgLTE0NTksMTIgKzEz
ODksMTIgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChTZWxlY3RFbGVt
ZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVudCwKICAgICAgICAgLy8gRm9sZCB0aGUgb3B0
aW9uIHN0cmluZyBhbmQgY2hlY2sgaWYgaXRzIHByZWZpeCBpcyBlcXVhbCB0byB0aGUgZm9sZGVk
IHByZWZpeC4KICAgICAgICAgU3RyaW5nIHRleHQgPSBvcHRpb25FbGVtZW50LT50ZXh0SW5kZW50
ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAgIGlmIChzdHJpcExlYWRpbmdXaGl0ZVNw
YWNlKHRleHQpLmZvbGRDYXNlKCkuc3RhcnRzV2l0aChwcmVmaXhXaXRoQ2FzZUZvbGRlZCkpIHsK
LSAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgoZGF0YSwgZWxlbWVudCwgbGlzdFRvT3B0aW9u
SW5kZXgoZGF0YSwgZWxlbWVudCwgaW5kZXgpKTsKLSAgICAgICAgICAgIGlmICghZGF0YS51c2Vz
TWVudUxpc3QoKSkKLSAgICAgICAgICAgICAgICBsaXN0Qm94T25DaGFuZ2UoZGF0YSwgZWxlbWVu
dCk7CisgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4SW50ZXJuYWwobGlzdFRvT3B0aW9uSW5k
ZXgoaW5kZXgpKTsKKyAgICAgICAgICAgIGlmICghbV9kYXRhLnVzZXNNZW51TGlzdCgpKQorICAg
ICAgICAgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOwogCi0gICAgICAgICAgICBzZXRPcHRpb25z
Q2hhbmdlZE9uUmVuZGVyZXIoZGF0YSwgZWxlbWVudCk7Ci0gICAgICAgICAgICBlbGVtZW50LT5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBzZXRPcHRpb25zQ2hhbmdlZE9uUmVu
ZGVyZXIoKTsKKyAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTE0ODcsMjAgKzE0MTcsMjAgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgpCiAg
ICAgCiAgICAgLy8gaWYgdGhpcyBpbmRleCBpcyBhbHJlYWR5IHNlbGVjdGVkLCB1bnNlbGVjdC4g
b3RoZXJ3aXNlIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgaW5kZXgKICAgICBjb25zdCBWZWN0b3I8RWxl
bWVudCo+JiBpdGVtcyA9IG1fZGF0YS5saXN0SXRlbXModGhpcyk7Ci0gICAgaW50IGxpc3RJbmRl
eCA9IG9wdGlvblRvTGlzdEluZGV4KG1fZGF0YSwgdGhpcywgaW5kZXgpOworICAgIGludCBsaXN0
SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChpbmRleCk7CiAgICAgaWYgKE9wdGlvbkVsZW1lbnQq
IG9wdGlvbkVsZW1lbnQgPSAobGlzdEluZGV4ID49IDAgPyB0b09wdGlvbkVsZW1lbnQoaXRlbXNb
bGlzdEluZGV4XSkgOiAwKSkgewogICAgICAgICBpZiAob3B0aW9uRWxlbWVudC0+c2VsZWN0ZWQo
KSkKICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQtPnNldFNlbGVjdGVkU3RhdGUoZmFsc2UpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KG1fZGF0YSwgdGhpcywg
aW5kZXgsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXhJbnRlcm5h
bChpbmRleCwgZmFsc2UsIHRydWUpOwogICAgIH0KIAogICAgIGlmIChtX2RhdGEudXNlc01lbnVM
aXN0KCkpCi0gICAgICAgIG1lbnVMaXN0T25DaGFuZ2UobV9kYXRhLCB0aGlzKTsKKyAgICAgICAg
bWVudUxpc3RPbkNoYW5nZSgpOwogICAgIGVsc2UKLSAgICAgICAgbGlzdEJveE9uQ2hhbmdlKG1f
ZGF0YSwgdGhpcyk7CisgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOwogCi0gICAgc2Nyb2xsVG9T
ZWxlY3Rpb24obV9kYXRhLCB0aGlzKTsKKyAgICBzY3JvbGxUb1NlbGVjdGlvbigpOwogfQogCiB1
bnNpZ25lZCBIVE1MU2VsZWN0RWxlbWVudDo6bGVuZ3RoKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAppbmRleCAyNTA0YjY3ZDNhZTE3MTg0OWFmYzk1MzRlMTE1
Mjg3YjJmZTQxOTFmLi5iYjFmNmFlZjM3MWViOTFiNzMzOTAxMWRhZTk0ZjNjZWQ5YjFhNDkyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCkBAIC0xNDMsMzMgKzE0Mywx
NiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBoYXNQbGFjZWhvbGRlckxhYmVsT3B0aW9uKCkgY29u
c3Q7CiAKLSAgICAvLyBGSVhNRTogRm9sZCBzb21lIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25z
LgotICAgIHN0YXRpYyB2b2lkIHNhdmVMYXN0U2VsZWN0aW9uKFNlbGVjdEVsZW1lbnREYXRhJiwg
RWxlbWVudCopOwotICAgIHN0YXRpYyB2b2lkIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4
KFNlbGVjdEVsZW1lbnREYXRhJiwgRWxlbWVudCosIGludCBpbmRleCk7Ci0gICAgc3RhdGljIHZv
aWQgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoU2VsZWN0RWxlbWVudERhdGEmLCBpbnQgaW5k
ZXgpOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24oU2VsZWN0RWxlbWVu
dERhdGEmLCBFbGVtZW50KiwgYm9vbCBkZXNlbGVjdE90aGVyT3B0aW9ucyk7Ci0gICAgc3RhdGlj
IHZvaWQgbGlzdEJveE9uQ2hhbmdlKFNlbGVjdEVsZW1lbnREYXRhJiwgRWxlbWVudCopOwotICAg
IHN0YXRpYyB2b2lkIG1lbnVMaXN0T25DaGFuZ2UoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50
Kik7Ci0gICAgc3RhdGljIHZvaWQgc2Nyb2xsVG9TZWxlY3Rpb24oU2VsZWN0RWxlbWVudERhdGEm
LCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgc2V0UmVjYWxjTGlzdEl0ZW1zKFNlbGVjdEVs
ZW1lbnREYXRhJiwgRWxlbWVudCopOwogICAgIHN0YXRpYyB2b2lkIHJlY2FsY0xpc3RJdGVtcyhT
ZWxlY3RFbGVtZW50RGF0YSYsIGNvbnN0IEVsZW1lbnQqLCBib29sIHVwZGF0ZVNlbGVjdGVkU3Rh
dGVzID0gdHJ1ZSk7Ci0gICAgc3RhdGljIGludCBzZWxlY3RlZEluZGV4KGNvbnN0IFNlbGVjdEVs
ZW1lbnREYXRhJiwgY29uc3QgRWxlbWVudCopOwotICAgIHN0YXRpYyB2b2lkIHNldFNlbGVjdGVk
SW5kZXgoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50KiwgaW50IG9wdGlvbkluZGV4LCBib29s
IGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJlT25DaGFuZ2VOb3cgPSBmYWxzZSwgYm9vbCB1c2Vy
RHJpdmVuQ2hhbmdlID0gdHJ1ZSk7Ci0gICAgc3RhdGljIGludCBvcHRpb25Ub0xpc3RJbmRleChj
b25zdCBTZWxlY3RFbGVtZW50RGF0YSYsIGNvbnN0IEVsZW1lbnQqLCBpbnQgb3B0aW9uSW5kZXgp
OwotICAgIHN0YXRpYyBpbnQgbGlzdFRvT3B0aW9uSW5kZXgoY29uc3QgU2VsZWN0RWxlbWVudERh
dGEmLCBjb25zdCBFbGVtZW50KiwgaW50IGxpc3RJbmRleCk7Ci0gICAgc3RhdGljIHZvaWQgZGVz
ZWxlY3RJdGVtcyhTZWxlY3RFbGVtZW50RGF0YSYsIEVsZW1lbnQqLCBFbGVtZW50KiBleGNsdWRl
RWxlbWVudCA9IDApOworICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleEludGVybmFsKGludCBvcHRp
b25JbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wgZmlyZU9uQ2hhbmdlTm93ID0gZmFs
c2UsIGJvb2wgdXNlckRyaXZlbkNoYW5nZSA9IHRydWUpOworICAgIHZvaWQgZGVzZWxlY3RJdGVt
c1dpdGhvdXRWYWxpZGF0aW9uKEVsZW1lbnQqIGV4Y2x1ZGVFbGVtZW50ID0gMCk7CiAgICAgdm9p
ZCBwYXJzZU11bHRpcGxlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSopOwotICAgIHN0YXRpYyB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50KiwgRXZl
bnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKLSAgICBzdGF0aWMgaW50IGxhc3RTZWxlY3RlZExpc3RJ
bmRleChjb25zdCBTZWxlY3RFbGVtZW50RGF0YSYsIGNvbnN0IEVsZW1lbnQqKTsKLSAgICBzdGF0
aWMgdm9pZCB0eXBlQWhlYWRGaW5kKFNlbGVjdEVsZW1lbnREYXRhJiwgRWxlbWVudCosIEtleWJv
YXJkRXZlbnQqKTsKLSAgICBzdGF0aWMgdm9pZCBpbnNlcnRlZEludG9UcmVlKFNlbGVjdEVsZW1l
bnREYXRhJiwgRWxlbWVudCopOwotCi0gICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0ZWRTdGF0
ZShTZWxlY3RFbGVtZW50RGF0YSYsIEVsZW1lbnQqLCBpbnQgbGlzdEluZGV4LCBib29sIG11bHRp
LCBib29sIHNoaWZ0KTsKLSAKLSAgICBzdGF0aWMgdm9pZCBtZW51TGlzdERlZmF1bHRFdmVudEhh
bmRsZXIoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50KiwgRXZlbnQqLCBIVE1MRm9ybUVsZW1l
bnQqKTsKLSAgICBzdGF0aWMgYm9vbCBwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudChTZWxlY3RF
bGVtZW50RGF0YSYsIEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgc3RhdGljIHZvaWQg
bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50Kiwg
RXZlbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRPcHRpb25zQ2hh
bmdlZE9uUmVuZGVyZXIoU2VsZWN0RWxlbWVudERhdGEmLCBFbGVtZW50Kik7CisgICAgaW50IGxh
c3RTZWxlY3RlZExpc3RJbmRleCgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU2VsZWN0ZWRTdGF0
ZShpbnQgbGlzdEluZGV4LCBib29sIG11bHRpLCBib29sIHNoaWZ0KTsKKyAgICB2b2lkIG1lbnVM
aXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIGJvb2wgcGxhdGZvcm1IYW5kbGVL
ZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgIHZvaWQgbGlzdEJveERlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2b2lkIHNldE9wdGlvbnNDaGFuZ2VkT25SZW5kZXJlcigp
OwogICAgIGZyaWVuZCBjbGFzcyBTZWxlY3RFbGVtZW50RGF0YTsKIAogICAgIFNlbGVjdEVsZW1l
bnREYXRhIG1fZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudFdp
bi5jcHAKaW5kZXggN2JlNzhjMzk1M2E0ODBmOTZkOGFjY2VkMjI3YjAyZDkzMGM2NjZjNy4uNDk5
MWQyYTdmZTljZGY5YjJjZjM3NDBlZTI2NTI4Zjg1M2U4YTgxOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudFdpbi5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEhUTUxTZWxlY3RFbGVtZW50OjpwbGF0Zm9ybUhhbmRs
ZUtleWRvd25FdmVudChTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVudCwg
S2V5Ym9hcmRFdmVudCogZXZlbnQpCitib29sIEhUTUxTZWxlY3RFbGVtZW50OjpwbGF0Zm9ybUhh
bmRsZUtleWRvd25FdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICAvLyBBbGxvdyAo
U2hpZnQpIEY0IGFuZCAoQ3RybC9TaGlmdCkgQWx0L0FsdEdyICsgVXAvRG93biBhcnJvdyB0byBw
b3AgdGhlIG1lbnUsIG1hdGNoaW5nIEZpcmVmb3guCiAgICAgYm9vbCBldmVudFNob3dzTWVudSA9
ICghZXZlbnQtPmFsdEtleSgpICYmICFldmVudC0+Y3RybEtleSgpICYmIGV2ZW50LT5rZXlJZGVu
dGlmaWVyKCkgPT0gIkY0IikKQEAgLTQyLDE0ICs0MiwxNCBAQCBib29sIEhUTUxTZWxlY3RFbGVt
ZW50OjpwbGF0Zm9ybUhhbmRsZUtleWRvd25FdmVudChTZWxlY3RFbGVtZW50RGF0YSYgZGF0YSwg
RWxlbQogCiAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0
byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIGRpc3BhdGNoaW5nIGNoYW5nZSBldmVudHMgZHVyaW5n
IHNldFNlbGVjdGVkSW5kZXgsCiAgICAgLy8gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJN
ZW51TGlzdDo6dmFsdWVDaGFuZ2VkLCB3aGljaCBnZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBt
YWtlcyBhIHNlbGVjdGlvbiBmcm9tIHRoZSBtZW51LgotICAgIHNhdmVMYXN0U2VsZWN0aW9uKGRh
dGEsIGVsZW1lbnQpOwotICAgIGlmIChSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSB0b1JlbmRl
ck1lbnVMaXN0KGVsZW1lbnQtPnJlbmRlcmVyKCkpKQorICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7
CisgICAgaWYgKFJlbmRlck1lbnVMaXN0KiBtZW51TGlzdCA9IHRvUmVuZGVyTWVudUxpc3QocmVu
ZGVyZXIoKSkpCiAgICAgICAgIG1lbnVMaXN0LT5zaG93UG9wdXAoKTsKIAotICAgIGludCBpbmRl
eCA9IHNlbGVjdGVkSW5kZXgoZGF0YSwgZWxlbWVudCk7CisgICAgaW50IGluZGV4ID0gc2VsZWN0
ZWRJbmRleCgpOwogICAgIEFTU0VSVChpbmRleCA+PSAwKTsKLSAgICBBU1NFUlQoaW5kZXggPCBk
YXRhLmxpc3RJdGVtcyhlbGVtZW50KS5zaXplKCkpOwotICAgIHNldFNlbGVjdGVkSW5kZXgoZGF0
YSwgZWxlbWVudCwgaW5kZXgpOworICAgIEFTU0VSVChpbmRleCA8IG1fZGF0YS5saXN0SXRlbXMo
dGhpcykuc2l6ZSgpKTsKKyAgICBzZXRTZWxlY3RlZEluZGV4SW50ZXJuYWwoaW5kZXgpOwogICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>