<?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>208417</bug_id>
          
          <creation_ts>2020-02-29 14:15:39 -0800</creation_ts>
          <short_desc>Simplify gradient parsing</short_desc>
          <delta_ts>2020-03-05 20:12:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1624324</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-29 14:15:39 -0800</bug_when>
    <thetext>Simplify gradient parsing code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624328</commentid>
    <comment_count>1</comment_count>
      <attachid>392073</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-29 15:03:16 -0800</bug_when>
    <thetext>Created attachment 392073
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624329</commentid>
    <comment_count>2</comment_count>
      <attachid>392073</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2020-02-29 15:12:49 -0800</bug_when>
    <thetext>Comment on attachment 392073
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        - Use Optional&lt;&gt; and invalid Color to reprsent unspecified positions and colors.

Typo &quot;reprsent&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624430</commentid>
    <comment_count>3</comment_count>
      <attachid>392108</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-01 16:38:37 -0800</bug_when>
    <thetext>Created attachment 392108
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624433</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-01 16:39:24 -0800</bug_when>
    <thetext>I’ll land this after EWS confirms I fixed the &quot;use after move&quot; mistake in my earlier patch that was screwing up parsing some gradients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624454</commentid>
    <comment_count>5</comment_count>
      <attachid>392115</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-01 18:56:24 -0800</bug_when>
    <thetext>Created attachment 392115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625079</commentid>
    <comment_count>6</comment_count>
      <attachid>392283</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-03 09:12:22 -0800</bug_when>
    <thetext>Created attachment 392283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625932</commentid>
    <comment_count>7</comment_count>
      <attachid>392533</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-04 21:00:30 -0800</bug_when>
    <thetext>Created attachment 392533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626475</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-05 20:11:45 -0800</bug_when>
    <thetext>Committed r257966: &lt;https://trac.webkit.org/changeset/257966&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626476</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-05 20:12:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/60118479&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392073</attachid>
            <date>2020-02-29 15:03:16 -0800</date>
            <delta_ts>2020-03-01 16:38:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208417-20200229150312.patch</filename>
            <type>text/plain</type>
            <size>74204</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3Njg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjQ5MmFlNzliOGZkMDU2
NWZlYzg4MzFiY2YzZGEzYTNkOGM4ZDkyMC4uMTNkYTZmNDM2ZjVkZTQyZTc4YmM2ZDQ3ZTc3OTUy
MGI0NGQzMDYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAyMC0wMi0yOSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgZ3JhZGllbnQg
cGFyc2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA4NDE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBVc2UgT3B0aW9uYWw8PiBhbmQgaW52YWxpZCBDb2xvciB0byByZXByc2VudCB1bnNwZWNpZmll
ZCBwb3NpdGlvbnMgYW5kIGNvbG9ycy4KKyAgICAgICAgICBUaGlzIGlzIHNpbXBsZXIgYW5kIGVh
c2llciB0byBnZXQgcmlnaHQgdGhhbiBzZXBhcmF0ZSBib29sZWFucy4KKyAgICAgICAgLSBTaW1w
bGlmaWVkIHNvcnRpbmcgb2Ygc3RvcHMgaW4gbGVnYWN5IGdyYWRpZW50cyB0byByZW1vdmUgZXh0
cmEgQ1NTIHZhbHVlCisgICAgICAgICAgZXZhbHVhdGlvbiBhbmQgdW5uZWNlc3NhcnkgInNvcnQg
aW4gcGxhY2UiIHRlY2huaXF1ZS4KKyAgICAgICAgLSBSZXdyb3RlIGVxdWFscyBmdW5jdGlvbnMg
Zm9yIENTUyBncmFkaWVudCB2YWx1ZSBjbGFzc2VzLiBUaGUgbmV3IHBhdHRlcm4gaXMKKyAgICAg
ICAgICB0byBjb21wYXJlIGFsbCB0aGUgZGF0YSBtZW1iZXJzIHRoYXQgaG9sZCBwYXJzZWQgQ1NT
IGRhdGEsIGhhbmRsaW5nIG51bGwKKyAgICAgICAgICBjb3JyZWN0bHksIHNpbmNlIHRoZSBwYXJz
ZXIgd29uJ3Qgc2V0IGluYXBwcm9wcmlhdGUgb25lcy4gVGhlIG9sZCBjb2RlIGhhZAorICAgICAg
ICAgIGNvbXBsZXggbG9naWMgdG8gb25seSBjb21wYXJlIGNlcnRhaW4gZGF0YSBtZW1iZXJzLCB3
aGljaCB3YXMgdW5uZWNlc3NhcnkKKyAgICAgICAgICBhbmQgaGFyZCB0byByZWFkIHRvIHRlbGwg
aWYgaXQgd2FzIGNvcnJlY3QuCisgICAgICAgIC0gQWRkZWQgc29tZSBtb3JlIHVzZSBvZiBXVEZN
b3ZlIHRvIGN1dCBkb3duIG9uIHJlZmVyZW5jZSBjb3VudCBjaHVybi4KKworICAgICAgICAqIGNz
cy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFs
dWU6OmltYWdlKTogUmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIGdldCgpLgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcGFyZVN0b3BzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRp
ZW50VmFsdWU6OnNvcnRTdG9wc0lmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnJlc29sdmVTdG9wQ29sb3JzKTogVGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBr
bm93IGJlY2F1c2UKKyAgICAgICAgb2YgcGFyc2luZyBydWxlcyB0aGF0IHRoZSBvbmx5IHN0b3Bz
IHdpdGhvdXQgY29sb3JzIGFyZSBtaWRwb2ludHMgdG8gZHJhc3RpY2FsbHkKKyAgICAgICAgc2lt
cGxpZnkgdGhpcyBmdW5jdGlvbiB0byBhIHRyaXZpYWwgbG9vcC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU0dyYWRpZW50VmFsdWU6Omhhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50IGNvbnN0KTogQWRk
ZWQuCisgICAgICAgIENoZWNrcyB0byBzZWUgaWYgYW55IG9mIHRoZSBzdG9wIGNvbG9ycyBpcyBk
ZXJpdmVkIGZyb20gdGhlIGVsZW1lbnQuIFRoZSBvbGQKKyAgICAgICAgY29kZSBjb25mdXNpbmds
eSB3b3VsZCBzdG9yZSB0aGUgYW5zd2VyIHRvIHRoaXMgaW4gdGhlIHN0b3AsIGJ1dCBvbmx5IGlu
IHRoZQorICAgICAgICBmaXJzdCBzdG9wIHdpdGggdGhpcyBwcm9wZXJ0eS4gQ29tcHV0aW5nIGl0
IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBzdG9wLCBhbmQKKyAgICAgICAgbWVtb2l6aW5nIGl0IGlu
IHRoZSBncmFkaWVudCBwcmVzZXJ2ZXMgdGhlIHNhbWUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0
aWNzCisgICAgICAgIGFzIGJlZm9yZSB3aXRob3V0IHJlcXVpcmluZyBhIGJvb2xlYW4gaW4gZWFj
aCBzdG9wIGluIHRoZSBzdG9wcyB2ZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVu
dFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCk6IENhbGwgdGhlIG5ldworICAgICAg
ICBoYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCBmdW5jdGlvbiBpbnN0ZWFkIG9mIGhhdmluZyB0
aGUgbG9naWMgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkxpbmVhckdyYWRpZW50QWRhcHRlcjo6
bm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UpOgorICAgICAgICBVcGRhdGUg
c2luY2UgR3JhZGllbnRTdG9wIG5vdyBoYXMgb3B0aW9uYWwgb2Zmc2V0cy4gQnkgdGhlIHRpbWUg
dGhpcworICAgICAgICBmdW5jdGlvbiBpcyBjYWxsZWQgdGhleSBhcmUgYWxsIGd1YXJhbnRlZWQg
dG8gYmUgZmlsbGVkIGluLCBzbyB3ZSBjYW4KKyAgICAgICAganVzdCB1c2UgdGhlICogb3BlcmF0
b3IuCisgICAgICAgIChXZWJDb3JlOjpSYWRpYWxHcmFkaWVudEFkYXB0ZXI6Om5vcm1hbGl6ZVN0
b3BzQW5kRW5kcG9pbnRzT3V0c2lkZVJhbmdlKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDb25pY0dyYWRpZW50QWRhcHRlcjo6bm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNP
dXRzaWRlUmFuZ2UpOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRp
ZW50VmFsdWU6OmNvbXB1dGVTdG9wcyk6IE1vdmVkIHRoZSBzb3J0aW5nIG9mIHN0b3BzIGZvcgor
ICAgICAgICB0aGUgZGVwcmVjYXRlZCBncmFkaWVudHMgaGVyZS4gQWxzbyB1cGRhdGVkIHNpbmNl
IEdyYWRpZW50OjpDb2xvclN0b3AKKyAgICAgICAgbm8gbG9uZ2VyIHVzZXMgIm1fIiBwcmVmaXhl
cyBvbiBpdHMgcHVibGljIHN0cnVjdCBkYXRhIG1lbWJlcnMuIFNvbWUKKyAgICAgICAgc2ltcGxp
ZmljYXRpb24gYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCB0byBleHBsaWNpdGx5IHNldCAic3Bl
Y2lmaWVkIgorICAgICAgICB0byB0cnVlIHNpbmNlIGl0J3Mgbm8gbG9uZ2VyIGEgc2VwYXJhdGUg
Ym9vbGVhbi4KKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uRnJvbVZhbHVlKTogSGFuZGxlIGEg
bnVsbCBwb2ludGVyIGZvciB2YWx1ZSBieSByZXR1cm5pbmcKKyAgICAgICAgMCwgd2hpY2ggaXMg
d2hhdCB0aGUgY2FsbGVyIHdhcyBkb2luZyBleHBsaWNpdGx5IGJlZm9yZS4gVXNlIGZsb2F0Cisg
ICAgICAgIGluc3RlYWQgb2YgaW50IGZvciBzb21lIGludGVybmFsIGNvbXB1dGF0aW9ucyB0aGF0
IHdlcmUgbWl4aW5nIHRoZSB0d28KKyAgICAgICAgZm9yIG5vIGdvb2QgcmVhc29uLgorICAgICAg
ICAoV2ViQ29yZTo6Y29tcHV0ZUVuZFBvaW50KTogUmVtb3ZlZCBudWxsIGNoZWNrcyBub3cgdGhh
dCBwb3NpdGlvbkZyb21WYWx1ZQorICAgICAgICBkb2VzIHRoZW0gZm9yIHVzLCB0dXJuaW5nIHRo
aXMgaW50byBhIG9uZS1saW5lci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6
OmlzQ2FjaGVhYmxlIGNvbnN0KTogVXNlIGhhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1ZTo6a25vd25Ub0JlT3BhcXVlIGNvbnN0KTog
UmVtb3ZlZCB1bm5uZWNlc3NhcnkKKyAgICAgICAgY2hlY2tpbmcgdGhlIGNvbG9yIGJvdGggYmVm
b3JlIGFuZCBhZnRlciB3aGVuIGEgY29sb3IgZmlsdGVyIGlzIGludm9sdmVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1ZTo6ZXF1YWxzIGNvbnN0KTogQWRkZWQuIFNoYXJlZCBi
eSBhbGwgdGhlIGVxdWFscworICAgICAgICBmdW5jdGlvbnMgZm9yIGRlcml2ZWQgY2xhc3Nlcy4K
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEdyYWRpZW50U3RvcHMpOiBVcGRhdGVkIGZvciBjaGFu
Z2VzIHRvIENTU0dyYWRpZW50Q29sb3JTdG9wLgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kU3Bh
Y2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0clRleHQpOiBBZGRlZCB0ZW1wbGF0ZSBoZWxwZXIKKyAg
ICAgICAgZm9yIHdyaXRpbmcgdHdvIG9wdGlvbmFsIENTUyB2YWx1ZXMgd2l0aCBhIHNwYWNlIGJl
dHdlZW4uCisgICAgICAgIChXZWJDb3JlOjp3cml0ZUNvbG9yU3RvcCk6IERpdHRvLiBBbHNvIGNv
bnZlcnRlZCB0byBub24tbWVtYmVyIGZ1bmN0aW9uLAorICAgICAgICByZW1vdmVkIHVubmVlZGVk
IGlzTWlkcG9pbnQgY2hlY2ssIHVzZSBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRy
VGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0xpbmVhckdyYWRpZW50VmFsdWU6OmN1c3RvbUNT
U1RleHQgY29uc3QpOiBDYWxsIGZ1bmN0aW9uCisgICAgICAgIG1lbWJlcnMgc28gd2UgZG9uJ3Qg
aGF2ZSB0byBleHBvc2UgQ1NTR3JhZGllbnRWYWx1ZSBkYXRhIG1lbWJlcnMgYXMKKyAgICAgICAg
cHJvdGVjdGVkIHRoaW5ncyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBieSBkZXJpdmVkIGNsYXNzZXMu
IFNvbWUgb3RoZXIKKyAgICAgICAgc21hbGwgcmVmYWN0b3JpbmcsIHN1Y2ggYXMgZ2V0dGluZyBy
aWQgb2YgZXh0cmEgYm9vbGVhbiB3cm90ZUZpcnN0U3RvcC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U0xpbmVhckdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KTogVXBkYXRlZCB0byB1c2UKKyAg
ICAgICAgZnVuY3Rpb24gbWVtYmVycyBpbnN0ZWFkIG9mIHByb3RlY3RlZCBkYXRhIG1lbWJlcnMu
CisgICAgICAgIChXZWJDb3JlOjpDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjplcXVhbHMgY29uc3Qp
OiBDb21wYXJlIGFsbCBkYXRhCisgICAgICAgIG1lbWJlcnMgYW5kIHVzZSBDU1NHcmFkaWVudFZh
bHVlOjplcXVhbHMsIG1ha2VzIHRoaXMgYSAxLWxpbmVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6IENhbGwgZnVuY3Rpb24K
KyAgICAgICAgbWVtYmVycyBhcyBkZXNjcmliZWQgYWJvdmUgYW5kIHVzZSBhcHBlbmRTcGFjZVNl
cGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1JhZGlhbEdy
YWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjplcXVhbHMgY29uc3QpOiBDb21wYXJlIGFsbCBkYXRhCisg
ICAgICAgIG1lbWJlcnMgYW5kIHVzZSBDU1NHcmFkaWVudFZhbHVlOjplcXVhbHMuCisgICAgICAg
IChXZWJDb3JlOjpDU1NDb25pY0dyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1RleHQgY29uc3QpOiBD
YWxsIGZ1bmN0aW9uCisgICAgICAgIG1lbWJlcnMgYXMgZGVzY3JpYmVkIGFib3ZlIGFuZCB1c2Ug
YXBwZW5kU3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0clRleHQuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDU1NDb25pY0dyYWRpZW50VmFsdWU6OmVxdWFscyBjb25zdCk6IENvbXBhcmUg
YWxsIGRhdGEKKyAgICAgICAgbWVtYmVycyBhbmQgdXNlIENTU0dyYWRpZW50VmFsdWU6OmVxdWFs
cywgbWFrZXMgdGhpcyBhIDEtbGluZXIuCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1
ZS5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KyAgICAgICAgUmVuYW1lZCBDU1NHcmFkaWVudENvbG9yU3RvcCBkYXRhIG1lbWJlcnMgdG8gbm90
IHVzZSBtXyBwcmVmaXggc2luY2UgdGhpcyBpcworICAgICAgICBhIHN0cnVjdCB3aXRoIHB1Ymxp
YyBkYXRhIG1lbWJlcnMsIGFuZCBXZWJLaXQgc3R5bGUgc2F5cyBub3QgdG8gZG8gdGhhdCBoZXJl
LgorICAgICAgICBSZW1vdmVkIG1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCBhbmQgaXNNaWRw
b2ludCBmcm9tIENTU0dyYWRpZW50Q29sb3JTdG9wLAorICAgICAgICBtX2NvbG9ySXNEZXJpdmVk
RnJvbUVsZW1lbnQgaXMgbm93IHN0b3JlZCBpbiB0aGUgZ3JhZGllbnQsIG5vdCB0aGUgY29sb3Ig
c3RvcCwKKyAgICAgICAgYW5kIG1pZHBvaW50cyBhcmUgYW55IGNvbG9yIHN0b3Agd2l0aCBudWxs
IGNvbG9yLiBSZXBsYWNlZCB0aGUKKyAgICAgICAgQ1NTR3JhZGllbnRWYWx1ZTo6c3RvcENvdW50
IGZ1bmN0aW9uLCB3aGljaCBtaXhlZCBzaXplX3QgYW5kIHVuc2lnbmVkIHR5cGVzLAorICAgICAg
ICB3aXRoIGEgaGFzVHdvU3RvcHMgZnVuY3Rpb24sIHdoaWNoIGlzIGFsbCB0aGUgY2FsbGVyIG5l
ZWRzLiBDb252ZXJ0ZWQgdGhlCisgICAgICAgIGlzRml4ZWRTaXplLCBmaXhlZFNpemUsIGlzUGVu
ZGluZywgYW5kIGxvYWRTdWJpbWFnZXMgaW50byBzdGF0aWMgbWVtYmVyCisgICAgICAgIGZ1bmN0
aW9uczogdGhleSBkb24ndCBkbyBhbnkgd29yayBhbmQgc28gZG9uJ3QgbmVlZCBhbiBpbnN0YW5j
ZS4gUmVtb3ZlZAorICAgICAgICB0aGUgdW5uZWVkZWQgZ3JhZGllbnQgdHlwZSBhcmd1bWVudCB0
byB0aGUgY2xvbmluZyBjb25zdHJ1Y3RvcnMuIFJlbW92ZWQKKyAgICAgICAgbV9zdG9wc1NvcnRl
ZCBhbmQgYWRkZWQgbV9oYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCBhbmQKKyAgICAgICAgaGFz
Q29sb3JEZXJpdmVkRnJvbUVsZW1lbnQuIEFkZGVkIGdldHRlciBmdW5jdGlvbnMgdGhhdCBhcmUg
cHJvdGVjdGVkIHNvCisgICAgICAgIHRoZSBkYXRhIG1lbWJlcnMgdGhlbXNlbHZlcyBjYW4gYmUg
cHJpdmF0ZS4gUmVtb3ZlZCBzb3J0U3RvcHNJZk5lZWRlZAorICAgICAgICBhbmQgd3JpdGVDb2xv
clN0b3AuCisKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVE
ZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3ApOgorICAgICAgICBVcGRhdGVkIGZvciBDU1NHcmFk
aWVudENvbG9yU3RvcCBtZW1iZXIgcmVuYW1pbmcuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQpOiBVc2UKKyAgICAg
ICAgbW9yZSBXVEZNb3ZlIHRvIHNhdmUgYSBsaXR0bGUgYml0IG9mIHJlZmVyZW5jZSBjb3VudCBj
aHVybjsgaW4gc29tZSBjYXNlcworICAgICAgICB0aGF0IG1lYW5zIG1vdmluZyB0aGUgc2V0dGVy
IGNhbGxzIHRvIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIGFmdGVyIGFsbAorICAgICAgICB0aGUg
ZXJyb3IgY2hlY2tpbmcuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMpOiBEaXR0by4KKyAgICAgICAgUmVtb3ZlZCBj
b2RlIHRvIHNldCBpc01pZHBvaW50IGFuZCB0aGUgRklYTUUtTkVXUEFSU0VSIGNvbW1lbnQgdGhh
dCBzYWlkCisgICAgICAgIGl0IGNvdWxkIGJlIHJlbW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29u
c3VtZVJhZGlhbEdyYWRpZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMaW5lYXJHcmFkaWVudCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29uaWNHcmFkaWVudCk6
IERpdHRvLgorCisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmF1dG9GaWxsU3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UpOiBVcGRhdGVkIGZvciB0
aGUgcmVuYW1lZAorICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBtZW1iZXJzLCBhZGRlZCBh
IG1pc3NpbmcgY2FsbCB0byBkb25lQWRkaW5nU3RvcHMsCisgICAgICAgIGFuZCB1c2Ugc29tZSBX
VEZNb3ZlIHRvIGN1dCBkb3duIG9uIHJlZmVyZW5jZSBjb3VudCBjaHVybi4KKwogMjAyMC0wMi0y
OSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0JGQ10g
Q29uc29saWRhdGUgcHJlY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25Gb3JBbmNlc3RvcnMgYW5kIHBy
ZWNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5jcHAKaW5kZXggMDE0YTU1Y2JmNDNjNTE1ZjI2ZGE2Mzc3NTg3MGU3YmNhYzEwMmVkNC4uOWNk
MjM4ZjEwYzBhNWFlYzk2ZGIzMWNlM2YzZjNhZWI3NjEyNmMwMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmNwcApAQCAtNjMsMzQgKzYzLDE2IEBAIFJlZlB0cjxJbWFnZT4g
Q1NTR3JhZGllbnRWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZs
b2F0U2l6ZSYKICAgICB9CiAgICAgYXV0byBuZXdJbWFnZSA9IEdyYWRpZW50SW1hZ2U6OmNyZWF0
ZShjcmVhdGVHcmFkaWVudCgqdGhpcywgcmVuZGVyZXIsIHNpemUpLCBzaXplKTsKICAgICBpZiAo
Y2FjaGVhYmxlKQotICAgICAgICBzYXZlQ2FjaGVkSW1hZ2VGb3JTaXplKHNpemUsIG5ld0ltYWdl
LmdldCgpKTsKKyAgICAgICAgc2F2ZUNhY2hlZEltYWdlRm9yU2l6ZShzaXplLCBuZXdJbWFnZSk7
CiAgICAgcmV0dXJuIG5ld0ltYWdlOwogfQogCi0vLyBTaG91bGQgb25seSBldmVyIGJlIGNhbGxl
ZCBmb3IgZGVwcmVjYXRlZCBncmFkaWVudHMuCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVN0
b3BzKGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBhLCBjb25zdCBDU1NHcmFkaWVudENvbG9y
U3RvcCYgYikKLXsKLSAgICBkb3VibGUgYVZhbCA9IGEubV9wb3NpdGlvbi0+ZG91YmxlVmFsdWUo
Q1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIGRvdWJsZSBiVmFsID0gYi5tX3Bvc2l0aW9u
LT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0KLSAgICByZXR1cm4gYVZh
bCA8IGJWYWw7Ci19Ci0KLXZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6c29ydFN0b3BzSWZOZWVkZWQo
KQotewotICAgIEFTU0VSVChtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkTGluZWFyR3Jh
ZGllbnQgfHwgbV9ncmFkaWVudFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KTsK
LSAgICBpZiAoIW1fc3RvcHNTb3J0ZWQpIHsKLSAgICAgICAgaWYgKG1fc3RvcHMuc2l6ZSgpKQot
ICAgICAgICAgICAgc3RkOjpzdGFibGVfc29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5k
KCksIGNvbXBhcmVTdG9wcyk7Ci0gICAgICAgIG1fc3RvcHNTb3J0ZWQgPSB0cnVlOwotICAgIH0K
LX0KLQogc3RydWN0IEdyYWRpZW50U3RvcCB7CiAgICAgQ29sb3IgY29sb3I7Ci0gICAgZmxvYXQg
b2Zmc2V0IHsgMCB9OwotICAgIGJvb2wgc3BlY2lmaWVkIHsgZmFsc2UgfTsKLSAgICBib29sIGlz
TWlkcG9pbnQgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGZsb2F0PiBvZmZzZXQ7CisKKyAgICBi
b29sIGlzU3BlY2lmaWVkKCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0Lmhhc1ZhbHVlKCk7IH0KKyAg
ICBib29sIGlzTWlkcG9pbnQoKSBjb25zdCB7IHJldHVybiAhY29sb3IuaXNWYWxpZCgpOyB9CiB9
OwogCiBzdGF0aWMgaW5saW5lIFJlZjxDU1NHcmFkaWVudFZhbHVlPiBjbG9uZShDU1NHcmFkaWVu
dFZhbHVlJiB2YWx1ZSkKQEAgLTEwMywzNSArODUsMzEgQEAgc3RhdGljIGlubGluZSBSZWY8Q1NT
R3JhZGllbnRWYWx1ZT4gY2xvbmUoQ1NTR3JhZGllbnRWYWx1ZSYgdmFsdWUpCiAgICAgcmV0dXJu
IGRvd25jYXN0PENTU0NvbmljR3JhZGllbnRWYWx1ZT4odmFsdWUpLmNsb25lKCk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPgotdm9pZCByZXNvbHZlU3RvcENvbG9ycyhWZWN0b3I8
Q1NTR3JhZGllbnRDb2xvclN0b3AsIDI+JiBzdG9wcywgRnVuY3Rpb24mJiBjb2xvclJlc29sdmVG
dW5jdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB2b2lkIHJlc29sdmVTdG9wQ29s
b3JzKFZlY3RvcjxDU1NHcmFkaWVudENvbG9yU3RvcCwgMj4mIHN0b3BzLCBGdW5jdGlvbiYmIGNv
bG9yUmVzb2x2ZUZ1bmN0aW9uKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RvcHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byYgc3RvcCA9IHN0b3BzW2ldOwotICAgICAgICBp
ZiAoc3RvcC5pc01pZHBvaW50KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChz
dG9wLm1fY29sb3IpCi0gICAgICAgICAgICBzdG9wLm1fcmVzb2x2ZWRDb2xvciA9IGNvbG9yUmVz
b2x2ZUZ1bmN0aW9uKCpzdG9wLm1fY29sb3IpOwotICAgICAgICBlbHNlIGlmIChpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBwcmV2aW91c1N0b3AgPSBzdG9wc1tpIC0gMV07Ci0gICAgICAgICAgICBB
U1NFUlQocHJldmlvdXNTdG9wLm1fY29sb3IpOwotICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0g
cHJldmlvdXNTdG9wLm1fY29sb3I7Ci0gICAgICAgICAgICBzdG9wLm1fcmVzb2x2ZWRDb2xvciA9
IHByZXZpb3VzU3RvcC5tX3Jlc29sdmVkQ29sb3I7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8m
IHN0b3AgOiBzdG9wcykgeworICAgICAgICBpZiAoc3RvcC5jb2xvcikKKyAgICAgICAgICAgIHN0
b3AucmVzb2x2ZWRDb2xvciA9IGNvbG9yUmVzb2x2ZUZ1bmN0aW9uKCpzdG9wLmNvbG9yKTsKICAg
ICB9CiB9CiAKLVJlZjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVu
dFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiti
b29sIENTU0dyYWRpZW50VmFsdWU6Omhhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50KCkgY29uc3QK
IHsKLSAgICBib29sIGNvbG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQgPSBmYWxzZTsKLSAgICBmb3Ig
KGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIGlmICghc3RvcC5pc01pZHBvaW50ICYm
IHN0b3AubV9jb2xvciAmJiBTdHlsZTo6QnVpbGRlclN0YXRlOjppc0NvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlRGVyaXZlZEZyb21FbGVtZW50KCpzdG9wLm1fY29sb3IpKSB7Ci0gICAgICAgICAgICBz
dG9wLm1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICBjb2xv
cklzRGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGlm
ICghbV9oYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCkgeworICAgICAgICBtX2hhc0NvbG9yRGVy
aXZlZEZyb21FbGVtZW50ID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3Rv
cHMpIHsKKyAgICAgICAgICAgIGlmIChzdG9wLmNvbG9yICYmIFN0eWxlOjpCdWlsZGVyU3RhdGU6
OmlzQ29sb3JGcm9tUHJpbWl0aXZlVmFsdWVEZXJpdmVkRnJvbUVsZW1lbnQoKnN0b3AuY29sb3Ip
KSB7CisgICAgICAgICAgICAgICAgbV9oYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgYXV0byByZXN1bHQgPSBjb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID8gY2xvbmUoKnRo
aXMpIDogbWFrZVJlZigqdGhpcyk7CisgICAgcmV0dXJuICptX2hhc0NvbG9yRGVyaXZlZEZyb21F
bGVtZW50OworfQorCitSZWY8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3Jh
ZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
KQoreworICAgIGF1dG8gcmVzdWx0ID0gaGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQoKSA/IGNs
b25lKCp0aGlzKSA6IG1ha2VSZWYoKnRoaXMpOwogICAgIHJlc29sdmVTdG9wQ29sb3JzKHJlc3Vs
dC0+bV9zdG9wcywgWyZdKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBjb2xvclZhbHVlKSB7CiAg
ICAgICAgIHJldHVybiBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29sb3JW
YWx1ZSk7CiAgICAgfSk7CkBAIC0xNTIsNyArMTMwLDcgQEAgcHVibGljOgogICAgICAgICA6IG1f
ZGF0YShkYXRhKQogICAgIHsKICAgICB9Ci0gICAgCisKICAgICBmbG9hdCBncmFkaWVudExlbmd0
aCgpIGNvbnN0CiAgICAgewogICAgICAgICBhdXRvIGdyYWRpZW50U2l6ZSA9IG1fZGF0YS5wb2lu
dDAgLSBtX2RhdGEucG9pbnQxOwpAQCAtMTYyLDEzICsxNDAsMTMgQEAgcHVibGljOgogCiAgICAg
dm9pZCBub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNpZGVSYW5nZShWZWN0b3I8R3JhZGll
bnRTdG9wPiYgc3RvcHMpCiAgICAgewotICAgICAgICBmbG9hdCBmaXJzdE9mZnNldCA9IHN0b3Bz
LmZpcnN0KCkub2Zmc2V0OwotICAgICAgICBmbG9hdCBsYXN0T2Zmc2V0ID0gc3RvcHMubGFzdCgp
Lm9mZnNldDsKKyAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSAqc3RvcHMuZmlyc3QoKS5vZmZz
ZXQ7CisgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSAqc3RvcHMubGFzdCgpLm9mZnNldDsKICAg
ICAgICAgaWYgKGZpcnN0T2Zmc2V0ICE9IGxhc3RPZmZzZXQpIHsKICAgICAgICAgICAgIGZsb2F0
IHNjYWxlID0gbGFzdE9mZnNldCAtIGZpcnN0T2Zmc2V0OwogCiAgICAgICAgICAgICBmb3IgKGF1
dG8mIHN0b3AgOiBzdG9wcykKLSAgICAgICAgICAgICAgICBzdG9wLm9mZnNldCA9IChzdG9wLm9m
ZnNldCAtIGZpcnN0T2Zmc2V0KSAvIHNjYWxlOworICAgICAgICAgICAgICAgIHN0b3Aub2Zmc2V0
ID0gKCpzdG9wLm9mZnNldCAtIGZpcnN0T2Zmc2V0KSAvIHNjYWxlOwogCiAgICAgICAgICAgICBh
dXRvIHAwID0gbV9kYXRhLnBvaW50MDsKICAgICAgICAgICAgIGF1dG8gcDEgPSBtX2RhdGEucG9p
bnQxOwpAQCAtMjA5LDIyICsxODcsMjIgQEAgcHVibGljOgogCiAgICAgICAgIC8vIFJhdGhlciB0
aGFuIHNjYWxpbmcgdGhlIHBvaW50cyA8IDAsIHdlIHRydW5jYXRlIHRoZW0sIHNvIG9ubHkgc2Nh
bGUgYWNjb3JkaW5nIHRvIHRoZSBsYXJnZXN0IHBvaW50LgogICAgICAgICBmbG9hdCBmaXJzdE9m
ZnNldCA9IDA7Ci0gICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBzdG9wcy5sYXN0KCkub2Zmc2V0
OworICAgICAgICBmbG9hdCBsYXN0T2Zmc2V0ID0gKnN0b3BzLmxhc3QoKS5vZmZzZXQ7CiAgICAg
ICAgIGZsb2F0IHNjYWxlID0gbGFzdE9mZnNldCAtIGZpcnN0T2Zmc2V0OwogCiAgICAgICAgIC8v
IFJlc2V0IHBvaW50cyBiZWxvdyAwIHRvIHRoZSBmaXJzdCB2aXNpYmxlIGNvbG9yLgogICAgICAg
ICBzaXplX3QgZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPSBudW1TdG9wczsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc3Rv
cHNbaV0ub2Zmc2V0ID49IDApIHsKKyAgICAgICAgICAgIGlmICgqc3RvcHNbaV0ub2Zmc2V0ID49
IDApIHsKICAgICAgICAgICAgICAgICBmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA9IGk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPiAwKSB7Ci0gICAgICAgICAgICBpZiAoZmlyc3Ra
ZXJvT3JHcmVhdGVySW5kZXggPCBudW1TdG9wcyAmJiBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJ
bmRleF0ub2Zmc2V0ID4gMCkgewotICAgICAgICAgICAgICAgIGZsb2F0IHByZXZPZmZzZXQgPSBz
dG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleCAtIDFdLm9mZnNldDsKLSAgICAgICAgICAgICAg
ICBmbG9hdCBuZXh0T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9mZnNl
dDsKKyAgICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA8IG51bVN0b3BzICYm
ICpzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0ID4gMCkgeworICAgICAgICAg
ICAgICAgIGZsb2F0IHByZXZPZmZzZXQgPSAqc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXgg
LSAxXS5vZmZzZXQ7CisgICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9mZnNldCA9ICpzdG9wc1tm
aXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0OwogCiAgICAgICAgICAgICAgICAgZmxvYXQg
aW50ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2T2Zmc2V0IC8gKG5leHRPZmZzZXQgLSBwcmV2T2Zm
c2V0KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFk
aWVudHMgdXNpbmcgcHJlbXVsdGlwbGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRp
cGxpY2F0aW9uLgpAQCAtMjQzLDcgKzIyMSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAg
ICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQotICAgICAgICAgICAgc3RvcC5vZmZzZXQgLz0g
c2NhbGU7CisgICAgICAgICAgICAqc3RvcC5vZmZzZXQgLz0gc2NhbGU7CiAKICAgICAgICAgbV9k
YXRhLnN0YXJ0UmFkaXVzICo9IHNjYWxlOwogICAgICAgICBtX2RhdGEuZW5kUmFkaXVzICo9IHNj
YWxlOwpAQCAtMjY0LDE2ICsyNDIsMTYgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgc2l6
ZV90IGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID0gbnVtU3RvcHM7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewotICAgICAgICAgICAgaWYgKHN0b3BzW2ld
Lm9mZnNldCA+PSAwKSB7CisgICAgICAgICAgICBpZiAoKnN0b3BzW2ldLm9mZnNldCA+PSAwKSB7
CiAgICAgICAgICAgICAgICAgZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPSBpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZp
cnN0WmVyb09yR3JlYXRlckluZGV4ID4gMCkgewotICAgICAgICAgICAgaWYgKGZpcnN0WmVyb09y
R3JlYXRlckluZGV4IDwgbnVtU3RvcHMgJiYgc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhd
Lm9mZnNldCA+IDApIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBwcmV2T2Zmc2V0ID0gc3RvcHNb
Zmlyc3RaZXJvT3JHcmVhdGVySW5kZXggLSAxXS5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgZmxv
YXQgbmV4dE9mZnNldCA9IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQ7Cisg
ICAgICAgICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPCBudW1TdG9wcyAmJiAqc3Rv
cHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9mZnNldCA+IDApIHsKKyAgICAgICAgICAgICAg
ICBmbG9hdCBwcmV2T2Zmc2V0ID0gKnN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0u
b2Zmc2V0OworICAgICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSAqc3RvcHNbZmlyc3Ra
ZXJvT3JHcmVhdGVySW5kZXhdLm9mZnNldDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gLXByZXZPZmZzZXQgLyAobmV4dE9mZnNl
dCAtIHByZXZPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGludGVy
cG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91bGQg
ZG8gcHJlbXVsdGlwbGljYXRpb24uCkBAIC0yOTMsMTYgKzI3MSwxNiBAQCBwdWJsaWM6CiAKICAg
ICAgICAgc2l6ZV90IGxhc3RPbmVPckxlc3NJbmRleCA9IG51bVN0b3BzOwogICAgICAgICBmb3Ig
KGludCBpID0gbnVtU3RvcHMgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgaWYgKHN0
b3BzW2ldLm9mZnNldCA8PSAxKSB7CisgICAgICAgICAgICBpZiAoKnN0b3BzW2ldLm9mZnNldCA8
PSAxKSB7CiAgICAgICAgICAgICAgICAgbGFzdE9uZU9yTGVzc0luZGV4ID0gaTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKGxhc3RPbmVPckxlc3NJbmRleCA8IG51bVN0b3BzIC0gMSkgewotICAgICAgICAgICAg
aWYgKGxhc3RPbmVPckxlc3NJbmRleCA8IG51bVN0b3BzICYmIHN0b3BzW2xhc3RPbmVPckxlc3NJ
bmRleF0ub2Zmc2V0IDwgMSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHByZXZPZmZzZXQgPSBz
dG9wc1tsYXN0T25lT3JMZXNzSW5kZXhdLm9mZnNldDsKLSAgICAgICAgICAgICAgICBmbG9hdCBu
ZXh0T2Zmc2V0ID0gc3RvcHNbbGFzdE9uZU9yTGVzc0luZGV4ICsgMV0ub2Zmc2V0OworICAgICAg
ICAgICAgaWYgKGxhc3RPbmVPckxlc3NJbmRleCA8IG51bVN0b3BzICYmICpzdG9wc1tsYXN0T25l
T3JMZXNzSW5kZXhdLm9mZnNldCA8IDEpIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBwcmV2T2Zm
c2V0ID0gKnN0b3BzW2xhc3RPbmVPckxlc3NJbmRleF0ub2Zmc2V0OworICAgICAgICAgICAgICAg
IGZsb2F0IG5leHRPZmZzZXQgPSAqc3RvcHNbbGFzdE9uZU9yTGVzc0luZGV4ICsgMV0ub2Zmc2V0
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZsb2F0IGludGVyU3RvcFByb3Bv
cnRpb24gPSAoMSAtIHByZXZPZmZzZXQpIC8gKG5leHRPZmZzZXQgLSBwcmV2T2Zmc2V0KTsKICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNp
bmcgcHJlbXVsdGlwbGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9u
LgpAQCAtMzI2LDI0ICszMDQsMjYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhZGllbnRBZGFwdGVy
PgogR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3Rv
cHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWVudEFkYXB0ZXIsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZs
b2F0IG1heExlbmd0aEZvclJlcGVhdCkKIHsKICAgICBpZiAobV9ncmFkaWVudFR5cGUgPT0gQ1NT
RGVwcmVjYXRlZExpbmVhckdyYWRpZW50IHx8IG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0
ZWRSYWRpYWxHcmFkaWVudCkgewotICAgICAgICBzb3J0U3RvcHNJZk5lZWRlZCgpOwotCiAgICAg
ICAgIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgcmVzdWx0OwogICAgICAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3N0b3BzLnNpemUoKSk7CiAKICAgICAgICAgZm9yIChhdXRv
JiBzdG9wIDogbV9zdG9wcykgewogICAgICAgICAgICAgZmxvYXQgb2Zmc2V0OwotICAgICAgICAg
ICAgaWYgKHN0b3AubV9wb3NpdGlvbi0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICAgICAg
b2Zmc2V0ID0gc3RvcC5tX3Bvc2l0aW9uLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfUEVS
Q0VOVEFHRSkgLyAxMDA7CisgICAgICAgICAgICBpZiAoc3RvcC5wb3NpdGlvbi0+aXNQZXJjZW50
YWdlKCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcC5wb3NpdGlvbi0+ZmxvYXRWYWx1
ZShDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpIC8gMTAwOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRWYWx1ZShDU1NV
bml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcC5wb3Np
dGlvbi0+ZmxvYXRWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAKLSAgICAgICAgICAg
IENvbG9yIGNvbG9yID0gc3RvcC5tX3Jlc29sdmVkQ29sb3I7CisgICAgICAgICAgICBDb2xvciBj
b2xvciA9IHN0b3AucmVzb2x2ZWRDb2xvcjsKICAgICAgICAgICAgIGlmIChzdHlsZS5oYXNBcHBs
ZUNvbG9yRmlsdGVyKCkpCiAgICAgICAgICAgICAgICAgc3R5bGUuYXBwbGVDb2xvckZpbHRlcigp
LnRyYW5zZm9ybUNvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoeyBvZmZzZXQsIGNvbG9yIH0pOwogICAgICAgICB9CiAKKyAgICAgICAgc3RkOjpzdGFibGVf
c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBbXSAoY29uc3QgR3JhZGllbnQ6OkNv
bG9yU3RvcCYgYSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYikgeworICAgICAgICAgICAg
cmV0dXJuIGEub2Zmc2V0IDwgYi5vZmZzZXQ7CisgICAgICAgIH0pOworCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCkBAIC0zNTUsMTYgKzMzNSwxNCBAQCBHcmFkaWVudDo6Q29sb3JT
dG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXIm
IGdyYWRpZQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewogICAg
ICAgICBhdXRvJiBzdG9wID0gbV9zdG9wc1tpXTsKIAotICAgICAgICBzdG9wc1tpXS5pc01pZHBv
aW50ID0gc3RvcC5pc01pZHBvaW50OwotCi0gICAgICAgIENvbG9yIGNvbG9yID0gc3RvcC5tX3Jl
c29sdmVkQ29sb3I7CisgICAgICAgIENvbG9yIGNvbG9yID0gc3RvcC5yZXNvbHZlZENvbG9yOwog
ICAgICAgICBpZiAoc3R5bGUuaGFzQXBwbGVDb2xvckZpbHRlcigpKQogICAgICAgICAgICAgc3R5
bGUuYXBwbGVDb2xvckZpbHRlcigpLnRyYW5zZm9ybUNvbG9yKGNvbG9yKTsKIAogICAgICAgICBz
dG9wc1tpXS5jb2xvciA9IGNvbG9yOwogCi0gICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24pIHsK
LSAgICAgICAgICAgIGF1dG8mIHBvc2l0aW9uVmFsdWUgPSAqc3RvcC5tX3Bvc2l0aW9uOworICAg
ICAgICBpZiAoc3RvcC5wb3NpdGlvbikgeworICAgICAgICAgICAgYXV0byYgcG9zaXRpb25WYWx1
ZSA9ICpzdG9wLnBvc2l0aW9uOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uVmFsdWUuaXNQZXJj
ZW50YWdlKCkpCiAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gcG9zaXRpb25WYWx1
ZS5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSkgLyAxMDA7CiAgICAgICAg
ICAgICBlbHNlIGlmIChwb3NpdGlvblZhbHVlLmlzTGVuZ3RoKCkgfHwgcG9zaXRpb25WYWx1ZS5p
c1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpIHx8IHBvc2l0aW9uVmFsdWUuaXNDYWxjdWxhdGVk
UGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewpAQCAtMzgyLDM1ICszNjAsMzEgQEAgR3JhZGllbnQ6
OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRB
ZGFwdGVyJiBncmFkaWUKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAwOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgc3RvcHNbaV0uc3BlY2lmaWVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIElmIHRoZSBmaXJzdCBjb2xvci1zdG9wIGRvZXMgbm90IGhhdmUgYSBwb3NpdGlv
biwgaXRzIHBvc2l0aW9uIGRlZmF1bHRzIHRvIDAlLgogICAgICAgICAgICAgLy8gSWYgdGhlIGxh
c3QgY29sb3Itc3RvcCBkb2VzIG5vdCBoYXZlIGEgcG9zaXRpb24sIGl0cyBwb3NpdGlvbiBkZWZh
dWx0cyB0byAxMDAlLgotICAgICAgICAgICAgaWYgKCFpKSB7CisgICAgICAgICAgICBpZiAoIWkp
CiAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICBz
dG9wc1tpXS5zcGVjaWZpZWQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChudW1TdG9w
cyA+IDEgJiYgaSA9PSBudW1TdG9wcyAtIDEpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKG51bVN0
b3BzID4gMSAmJiBpID09IG51bVN0b3BzIC0gMSkKICAgICAgICAgICAgICAgICBzdG9wc1tpXS5v
ZmZzZXQgPSAxOwotICAgICAgICAgICAgICAgIHN0b3BzW2ldLnNwZWNpZmllZCA9IHRydWU7Ci0g
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiBhIGNvbG9yLXN0b3AgaGFz
IGEgcG9zaXRpb24gdGhhdCBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBvZiBh
bnkKICAgICAgICAgLy8gY29sb3Itc3RvcCBiZWZvcmUgaXQgaW4gdGhlIGxpc3QsIGl0cyBwb3Np
dGlvbiBpcyBjaGFuZ2VkIHRvIGJlIGVxdWFsIHRvIHRoZQogICAgICAgICAvLyBsYXJnZXN0IHNw
ZWNpZmllZCBwb3NpdGlvbiBvZiBhbnkgY29sb3Itc3RvcCBiZWZvcmUgaXQuCi0gICAgICAgIGlm
IChzdG9wc1tpXS5zcGVjaWZpZWQgJiYgaSA+IDApIHsKKyAgICAgICAgaWYgKHN0b3BzW2ldLmlz
U3BlY2lmaWVkKCkgJiYgaSA+IDApIHsKICAgICAgICAgICAgIHNpemVfdCBwcmV2U3BlY2lmaWVk
SW5kZXg7CiAgICAgICAgICAgICBmb3IgKHByZXZTcGVjaWZpZWRJbmRleCA9IGkgLSAxOyBwcmV2
U3BlY2lmaWVkSW5kZXg7IC0tcHJldlNwZWNpZmllZEluZGV4KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHN0b3BzW3ByZXZTcGVjaWZpZWRJbmRleF0uc3BlY2lmaWVkKQorICAgICAgICAgICAgICAg
IGlmIChzdG9wc1twcmV2U3BlY2lmaWVkSW5kZXhdLmlzU3BlY2lmaWVkKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoc3RvcHNb
aV0ub2Zmc2V0IDwgc3RvcHNbcHJldlNwZWNpZmllZEluZGV4XS5vZmZzZXQpCisgICAgICAgICAg
ICBpZiAoKnN0b3BzW2ldLm9mZnNldCA8ICpzdG9wc1twcmV2U3BlY2lmaWVkSW5kZXhdLm9mZnNl
dCkKICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSBzdG9wc1twcmV2U3BlY2lmaWVk
SW5kZXhdLm9mZnNldDsKICAgICAgICAgfQogICAgIH0KIAotICAgIEFTU0VSVChzdG9wc1swXS5z
cGVjaWZpZWQgJiYgc3RvcHNbbnVtU3RvcHMgLSAxXS5zcGVjaWZpZWQpOworICAgIEFTU0VSVChz
dG9wc1swXS5pc1NwZWNpZmllZCgpICYmIHN0b3BzW251bVN0b3BzIC0gMV0uaXNTcGVjaWZpZWQo
KSk7CiAKICAgICAvLyBJZiBhbnkgY29sb3Itc3RvcCBzdGlsbCBkb2VzIG5vdCBoYXZlIGEgcG9z
aXRpb24sIHRoZW4sIGZvciBlYWNoIHJ1biBvZiBhZGphY2VudAogICAgIC8vIGNvbG9yLXN0b3Bz
IHdpdGhvdXQgcG9zaXRpb25zLCBzZXQgdGhlaXIgcG9zaXRpb25zIHNvIHRoYXQgdGhleSBhcmUg
ZXZlbmx5IHNwYWNlZApAQCAtNDIwLDE1ICszOTQsMTUgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZl
Y3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFk
aWUKICAgICAgICAgYm9vbCBpblVuc3BlY2lmaWVkUnVuID0gZmFsc2U7CiAKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0
b3BzW2ldLnNwZWNpZmllZCAmJiAhaW5VbnNwZWNpZmllZFJ1bikgeworICAgICAgICAgICAgaWYg
KCFzdG9wc1tpXS5pc1NwZWNpZmllZCgpICYmICFpblVuc3BlY2lmaWVkUnVuKSB7CiAgICAgICAg
ICAgICAgICAgdW5zcGVjaWZpZWRSdW5TdGFydCA9IGk7CiAgICAgICAgICAgICAgICAgaW5VbnNw
ZWNpZmllZFJ1biA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3BzW2ldLnNwZWNp
ZmllZCAmJiBpblVuc3BlY2lmaWVkUnVuKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3Bz
W2ldLmlzU3BlY2lmaWVkKCkgJiYgaW5VbnNwZWNpZmllZFJ1bikgewogICAgICAgICAgICAgICAg
IHNpemVfdCB1bnNwZWNpZmllZFJ1bkVuZCA9IGk7CiAKICAgICAgICAgICAgICAgICBpZiAodW5z
cGVjaWZpZWRSdW5TdGFydCA8IHVuc3BlY2lmaWVkUnVuRW5kKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGZsb2F0IGxhc3RTcGVjaWZpZWRPZmZzZXQgPSBzdG9wc1t1bnNwZWNpZmllZFJ1blN0YXJ0
IC0gMV0ub2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBuZXh0U3BlY2lmaWVkT2Zm
c2V0ID0gc3RvcHNbdW5zcGVjaWZpZWRSdW5FbmRdLm9mZnNldDsKKyAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgbGFzdFNwZWNpZmllZE9mZnNldCA9ICpzdG9wc1t1bnNwZWNpZmllZFJ1blN0YXJ0
IC0gMV0ub2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBmbG9hdCBuZXh0U3BlY2lmaWVkT2Zm
c2V0ID0gKnN0b3BzW3Vuc3BlY2lmaWVkUnVuRW5kXS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IGRlbHRhID0gKG5leHRTcGVjaWZpZWRPZmZzZXQgLSBsYXN0U3BlY2lmaWVkT2Zm
c2V0KSAvICh1bnNwZWNpZmllZFJ1bkVuZCAtIHVuc3BlY2lmaWVkUnVuU3RhcnQgKyAxKTsKIAog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gdW5zcGVjaWZpZWRSdW5TdGFydDsg
aiA8IHVuc3BlY2lmaWVkUnVuRW5kOyArK2opCkBAIC00NTQsNyArNDI4LDcgQEAgR3JhZGllbnQ6
OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRB
ZGFwdGVyJiBncmFkaWUKICAgICAvLyBNaWRwb2ludHMgdGhhdCBjb2luY2lkZSB3aXRoIGNvbG9y
IHN0b3BzIGFyZSB0cmVhdGVkIHNwZWNpYWxseSBzaW5jZSB0aGV5IGRvbid0IHJlcXVpcmUKICAg
ICAvLyBleHRyYSBzdG9wcyBhbmQgZ2VuZXJhdGUgaGFyZCBsaW5lcy4KICAgICBmb3IgKHNpemVf
dCB4ID0gMTsgeCA8IHN0b3BzLnNpemUoKSAtIDE7KSB7Ci0gICAgICAgIGlmICghc3RvcHNbeF0u
aXNNaWRwb2ludCkgeworICAgICAgICBpZiAoIXN0b3BzW3hdLmlzTWlkcG9pbnQoKSkgewogICAg
ICAgICAgICAgKyt4OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTQ2NCw5
ICs0MzgsOSBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNv
bXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgICAgICBDb2xvciBjb2xvcjEg
PSBzdG9wc1t4IC0gMV0uY29sb3I7CiAgICAgICAgIENvbG9yIGNvbG9yMiA9IHN0b3BzW3ggKyAx
XS5jb2xvcjsKICAgICAgICAgLy8gTGlrZXdpc2UgZmluZCB0aGUgcG9zaXRpb24gb2YgcHJldmlv
dXMgYW5kIG5leHQgY29sb3Igc3RvcC4KLSAgICAgICAgZmxvYXQgb2Zmc2V0MSA9IHN0b3BzW3gg
LSAxXS5vZmZzZXQ7Ci0gICAgICAgIGZsb2F0IG9mZnNldDIgPSBzdG9wc1t4ICsgMV0ub2Zmc2V0
OwotICAgICAgICBmbG9hdCBvZmZzZXQgPSBzdG9wc1t4XS5vZmZzZXQ7CisgICAgICAgIGZsb2F0
IG9mZnNldDEgPSAqc3RvcHNbeCAtIDFdLm9mZnNldDsKKyAgICAgICAgZmxvYXQgb2Zmc2V0MiA9
ICpzdG9wc1t4ICsgMV0ub2Zmc2V0OworICAgICAgICBmbG9hdCBvZmZzZXQgPSAqc3RvcHNbeF0u
b2Zmc2V0OwogCiAgICAgICAgIC8vIENoZWNrIGlmIGV2ZXJ5dGhpbmcgY29pbmNpZGVzIG9yIHRo
ZSBtaWRwb2ludCBpcyBleGFjdGx5IGluIHRoZSBtaWRkbGUuCiAgICAgICAgIC8vIElmIHNvLCBp
Z25vcmUgdGhlIG1pZHBvaW50LgpAQCAtNDc5LDcgKzQ1Myw2IEBAIEdyYWRpZW50OjpDb2xvclN0
b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYg
Z3JhZGllCiAgICAgICAgIGlmIChvZmZzZXQxID09IG9mZnNldCkgewogICAgICAgICAgICAgLy8g
TW9ycGggdGhlIG1pZHBvaW50IHRvIGEgcmVndWxhciBzdG9wIHdpdGggdGhlIGNvbG9yIG9mIHRo
ZSBuZXh0IGNvbG9yIHN0b3AuCiAgICAgICAgICAgICBzdG9wc1t4XS5jb2xvciA9IGNvbG9yMjsK
LSAgICAgICAgICAgIHN0b3BzW3hdLmlzTWlkcG9pbnQgPSBmYWxzZTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAKQEAgLTQ4Nyw3ICs0NjAsNiBAQCBHcmFkaWVudDo6Q29sb3JT
dG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXIm
IGdyYWRpZQogICAgICAgICBpZiAob2Zmc2V0MiA9PSBvZmZzZXQpIHsKICAgICAgICAgICAgIC8v
IE1vcnBoIHRoZSBtaWRwb2ludCB0byBhIHJlZ3VsYXIgc3RvcCB3aXRoIHRoZSBjb2xvciBvZiB0
aGUgcHJldmlvdXMgY29sb3Igc3RvcC4KICAgICAgICAgICAgIHN0b3BzW3hdLmNvbG9yID0gY29s
b3IxOwotICAgICAgICAgICAgc3RvcHNbeF0uaXNNaWRwb2ludCA9IGZhbHNlOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNTA4LDcgKzQ4MCw3IEBAIEdyYWRpZW50OjpD
b2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRh
cHRlciYgZ3JhZGllCiAgICAgICAgIH0KICAgICAgICAgLy8gY2FsY3VsYXRlIGNvbG9ycwogICAg
ICAgICBmb3IgKHNpemVfdCB5ID0gMDsgeSA8IDk7ICsreSkgewotICAgICAgICAgICAgZmxvYXQg
cmVsYXRpdmVPZmZzZXQgPSAobmV3U3RvcHNbeV0ub2Zmc2V0IC0gb2Zmc2V0MSkgLyAob2Zmc2V0
MiAtIG9mZnNldDEpOworICAgICAgICAgICAgZmxvYXQgcmVsYXRpdmVPZmZzZXQgPSAoKm5ld1N0
b3BzW3ldLm9mZnNldCAtIG9mZnNldDEpIC8gKG9mZnNldDIgLSBvZmZzZXQxKTsKICAgICAgICAg
ICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6OnBvdyhyZWxhdGl2ZU9mZnNldCwgc3RkOjpsb2co
LjVmKSAvIHN0ZDo6bG9nKG1pZHBvaW50KSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IG5v
dCBwcmVtdWx0aXBseSBoZXJlPwogICAgICAgICAgICAgbmV3U3RvcHNbeV0uY29sb3IgPSBibGVu
ZChjb2xvcjEsIGNvbG9yMiwgbXVsdGlwbGllciwgZmFsc2UgLyogZG8gbm90IHByZW11bHRpcGx5
ICovKTsKQEAgLTUyNyw3ICs0OTksNyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dy
YWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgIGlm
IChtX3JlcGVhdGluZyAmJiBudW1TdG9wcyA+IDEpIHsKICAgICAgICAgLy8gSWYgdGhlIGRpZmZl
cmVuY2UgaW4gdGhlIHBvc2l0aW9ucyBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgY29sb3Itc3RvcHMg
aXMgMCwKICAgICAgICAgLy8gdGhlIGdyYWRpZW50IGRlZmluZXMgYSBzb2xpZC1jb2xvciBpbWFn
ZSB3aXRoIHRoZSBjb2xvciBvZiB0aGUgbGFzdCBjb2xvci1zdG9wIGluIHRoZSBydWxlLgotICAg
ICAgICBmbG9hdCBncmFkaWVudFJhbmdlID0gc3RvcHMubGFzdCgpLm9mZnNldCAtIHN0b3BzLmZp
cnN0KCkub2Zmc2V0OworICAgICAgICBmbG9hdCBncmFkaWVudFJhbmdlID0gKnN0b3BzLmxhc3Qo
KS5vZmZzZXQgLSAqc3RvcHMuZmlyc3QoKS5vZmZzZXQ7CiAgICAgICAgIGlmICghZ3JhZGllbnRS
YW5nZSkgewogICAgICAgICAgICAgc3RvcHMuZmlyc3QoKS5vZmZzZXQgPSAwOwogICAgICAgICAg
ICAgc3RvcHMuZmlyc3QoKS5jb2xvciA9IHN0b3BzLmxhc3QoKS5jb2xvcjsKQEAgLTU0MCw3ICs1
MTIsNyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1
dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgICAgICAgICAgc2l6ZV90IG9yaWdp
bmFsRmlyc3RTdG9wSW5kZXggPSAwOwogCiAgICAgICAgICAgICAvLyBXb3JrIGJhY2t3YXJkcyBm
cm9tIHRoZSBmaXJzdCwgYWRkaW5nIHN0b3BzIHVudGlsIHdlIGdldCBvbmUgYmVmb3JlIDAuCi0g
ICAgICAgICAgICBmbG9hdCBmaXJzdE9mZnNldCA9IHN0b3BzWzBdLm9mZnNldDsKKyAgICAgICAg
ICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gKnN0b3BzWzBdLm9mZnNldDsKICAgICAgICAgICAgIGlm
IChmaXJzdE9mZnNldCA+IDApIHsKICAgICAgICAgICAgICAgICBmbG9hdCBjdXJyT2Zmc2V0ID0g
Zmlyc3RPZmZzZXQ7CiAgICAgICAgICAgICAgICAgc2l6ZV90IHNyY1N0b3BPcmRpbmFsID0gb3Jp
Z2luYWxOdW1TdG9wcyAtIDE7CkBAIC01NTQsMTMgKzUyNiwxMyBAQCBHcmFkaWVudDo6Q29sb3JT
dG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXIm
IGdyYWRpZQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNyY1N0b3BPcmRpbmFsKQotICAgICAgICAgICAgICAgICAgICAgICAgY3Vyck9m
ZnNldCAtPSBzdG9wc1tvcmlnaW5hbEZpcnN0U3RvcEluZGV4ICsgc3JjU3RvcE9yZGluYWxdLm9m
ZnNldCAtIHN0b3BzW29yaWdpbmFsRmlyc3RTdG9wSW5kZXggKyBzcmNTdG9wT3JkaW5hbCAtIDFd
Lm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJPZmZzZXQgLT0gKnN0b3BzW29y
aWdpbmFsRmlyc3RTdG9wSW5kZXggKyBzcmNTdG9wT3JkaW5hbF0ub2Zmc2V0IC0gKnN0b3BzW29y
aWdpbmFsRmlyc3RTdG9wSW5kZXggKyBzcmNTdG9wT3JkaW5hbCAtIDFdLm9mZnNldDsKICAgICAg
ICAgICAgICAgICAgICAgc3JjU3RvcE9yZGluYWwgPSAoc3JjU3RvcE9yZGluYWwgKyBvcmlnaW5h
bE51bVN0b3BzIC0gMSkgJSBvcmlnaW5hbE51bVN0b3BzOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gV29yayBmb3J3YXJkcyBmcm9tIHRoZSBlbmQs
IGFkZGluZyBzdG9wcyB1bnRpbCB3ZSBnZXQgb25lIGFmdGVyIDEuCi0gICAgICAgICAgICBmbG9h
dCBsYXN0T2Zmc2V0ID0gc3RvcHNbc3RvcHMuc2l6ZSgpIC0gMV0ub2Zmc2V0OworICAgICAgICAg
ICAgZmxvYXQgbGFzdE9mZnNldCA9ICpzdG9wc1tzdG9wcy5zaXplKCkgLSAxXS5vZmZzZXQ7CiAg
ICAgICAgICAgICBpZiAobGFzdE9mZnNldCA8IG1heEV4dGVudCkgewogICAgICAgICAgICAgICAg
IGZsb2F0IGN1cnJPZmZzZXQgPSBsYXN0T2Zmc2V0OwogICAgICAgICAgICAgICAgIHNpemVfdCBz
cmNTdG9wT3JkaW5hbCA9IDA7CkBAIC01NzMsNyArNTQ1LDcgQEAgR3JhZGllbnQ6OkNvbG9yU3Rv
cFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBn
cmFkaWUKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJPZmZzZXQgPiBtYXhFeHRlbnQpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNy
Y1N0b3BPcmRpbmFsIDwgb3JpZ2luYWxOdW1TdG9wcyAtIDEpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyT2Zmc2V0ICs9IHN0b3BzW3NyY1N0b3BJbmRleCArIDFdLm9mZnNldCAtIHN0b3Bz
W3NyY1N0b3BJbmRleF0ub2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgY3Vyck9mZnNl
dCArPSAqc3RvcHNbc3JjU3RvcEluZGV4ICsgMV0ub2Zmc2V0IC0gKnN0b3BzW3NyY1N0b3BJbmRl
eF0ub2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBzcmNTdG9wT3JkaW5hbCA9IChzcmNTdG9w
T3JkaW5hbCArIDEpICUgb3JpZ2luYWxOdW1TdG9wczsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC01ODEsNDcgKzU1Myw0NyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9y
IENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQog
ICAgIH0KIAogICAgIC8vIElmIHRoZSBncmFkaWVudCBnb2VzIG91dHNpZGUgdGhlIDAtMSByYW5n
ZSwgbm9ybWFsaXplIGl0IGJ5IG1vdmluZyB0aGUgZW5kcG9pbnRzLCBhbmQgYWRqdXN0aW5nIHRo
ZSBzdG9wcy4KLSAgICBpZiAoc3RvcHMuc2l6ZSgpID4gMSAmJiAoc3RvcHMuZmlyc3QoKS5vZmZz
ZXQgPCAwIHx8IHN0b3BzLmxhc3QoKS5vZmZzZXQgPiAxKSkKKyAgICBpZiAoc3RvcHMuc2l6ZSgp
ID4gMSAmJiAoKnN0b3BzLmZpcnN0KCkub2Zmc2V0IDwgMCB8fCAqc3RvcHMubGFzdCgpLm9mZnNl
dCA+IDEpKQogICAgICAgICBncmFkaWVudEFkYXB0ZXIubm9ybWFsaXplU3RvcHNBbmRFbmRwb2lu
dHNPdXRzaWRlUmFuZ2Uoc3RvcHMpOwogICAgIAogICAgIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0
b3IgcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0b3BzLnNpemUo
KSk7CiAgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoeyBzdG9wLm9mZnNldCwgc3RvcC5jb2xvciB9KTsKKyAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCh7ICpzdG9wLm9mZnNldCwgc3RvcC5jb2xvciB9KTsKIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIHN0YXRpYyBmbG9hdCBwb3NpdGlvbkZyb21WYWx1ZShjb25zdCBDU1NQ
cmltaXRpdmVWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcnNpb25EYXRhLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIGJvb2wgaXNIb3Jpem9udGFsKQog
ewotICAgIGludCBvcmlnaW4gPSAwOwotICAgIGludCBzaWduID0gMTsKLSAgICBpbnQgZWRnZURp
c3RhbmNlID0gaXNIb3Jpem9udGFsID8gc2l6ZS53aWR0aCgpIDogc2l6ZS5oZWlnaHQoKTsKLSAg
ICAKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IG9yaWdp
biA9IDA7CisgICAgZmxvYXQgc2lnbiA9IDE7CisgICAgZmxvYXQgZWRnZURpc3RhbmNlID0gaXNI
b3Jpem9udGFsID8gc2l6ZS53aWR0aCgpIDogc2l6ZS5oZWlnaHQoKTsKKwogICAgIC8vIEluIHRo
aXMgY2FzZSB0aGUgY2VudGVyIG9mIHRoZSBncmFkaWVudCBpcyBnaXZlbiByZWxhdGl2ZSB0byBh
biBlZGdlIGluIHRoZQogICAgIC8vIGZvcm0gb2Y6IFsgdG9wIHwgYm90dG9tIHwgcmlnaHQgfCBs
ZWZ0IF0gWyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiBdLgogICAgIGlmICh2YWx1ZS0+aXNQYWly
KCkpIHsKICAgICAgICAgQ1NTVmFsdWVJRCBvcmlnaW5JRCA9IHZhbHVlLT5wYWlyVmFsdWUoKS0+
Zmlyc3QoKS0+dmFsdWVJRCgpOwotICAgICAgICB2YWx1ZSA9IHZhbHVlLT5wYWlyVmFsdWUoKS0+
c2Vjb25kKCk7Ci0gICAgICAgIAogICAgICAgICBpZiAob3JpZ2luSUQgPT0gQ1NTVmFsdWVSaWdo
dCB8fCBvcmlnaW5JRCA9PSBDU1NWYWx1ZUJvdHRvbSkgewogICAgICAgICAgICAgLy8gRm9yIHJp
Z2h0L2JvdHRvbSwgdGhlIG9mZnNldCBpcyByZWxhdGl2ZSB0byB0aGUgZmFyIGVkZ2UuCiAgICAg
ICAgICAgICBvcmlnaW4gPSBlZGdlRGlzdGFuY2U7CiAgICAgICAgICAgICBzaWduID0gLTE7CiAg
ICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSB2YWx1ZS0+cGFpclZhbHVlKCktPnNlY29uZCgpOwog
ICAgIH0KLSAgICAKKwogICAgIGlmICh2YWx1ZS0+aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJu
IG9yaWdpbiArIHNpZ24gKiB2YWx1ZS0+ZmxvYXRWYWx1ZSgpICogY29udmVyc2lvbkRhdGEuem9v
bSgpOwotICAgIAorCiAgICAgaWYgKHZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgcmV0
dXJuIG9yaWdpbiArIHNpZ24gKiB2YWx1ZS0+ZmxvYXRWYWx1ZSgpIC8gMTAwLmYgKiBlZGdlRGlz
dGFuY2U7CisgICAgICAgIHJldHVybiBvcmlnaW4gKyBzaWduICogdmFsdWUtPmZsb2F0VmFsdWUo
KSAvIDEwMCAqIGVkZ2VEaXN0YW5jZTsKKworICAgIGlmICh2YWx1ZS0+aXNDYWxjdWxhdGVkUGVy
Y2VudGFnZVdpdGhMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIG9yaWdpbiArIHNpZ24gKiB2YWx1
ZS0+Y3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29udmVyc2lvbkRhdGEp
LT5ldmFsdWF0ZShlZGdlRGlzdGFuY2UpOwogCi0gICAgaWYgKHZhbHVlLT5pc0NhbGN1bGF0ZWRQ
ZXJjZW50YWdlV2l0aExlbmd0aCgpKSB7Ci0gICAgICAgIFJlZjxDYWxjdWxhdGlvblZhbHVlPiBj
YWxjdWxhdGlvblZhbHVlIHsgdmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlv
blZhbHVlKGNvbnZlcnNpb25EYXRhKSB9OwotICAgICAgICByZXR1cm4gb3JpZ2luICsgc2lnbiAq
IGNhbGN1bGF0aW9uVmFsdWUtPmV2YWx1YXRlKGVkZ2VEaXN0YW5jZSk7Ci0gICAgfQotICAgIAog
ICAgIHN3aXRjaCAodmFsdWUtPnZhbHVlSUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVUb3A6CiAg
ICAgICAgIEFTU0VSVCghaXNIb3Jpem9udGFsKTsKQEAgLTYzMSwxMCArNjAzLDEwIEBAIHN0YXRp
YyBmbG9hdCBwb3NpdGlvbkZyb21WYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoCiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgQ1NTVmFsdWVC
b3R0b206CiAgICAgICAgIEFTU0VSVCghaXNIb3Jpem9udGFsKTsKLSAgICAgICAgcmV0dXJuIHNp
emUuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBlZGdlRGlzdGFuY2U7CiAgICAgY2FzZSBDU1NW
YWx1ZVJpZ2h0OgogICAgICAgICBBU1NFUlQoaXNIb3Jpem9udGFsKTsKLSAgICAgICAgcmV0dXJu
IHNpemUud2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGVkZ2VEaXN0YW5jZTsKICAgICBjYXNlIENT
U1ZhbHVlQ2VudGVyOgogICAgICAgICByZXR1cm4gb3JpZ2luICsgc2lnbiAqIC41ZiAqIGVkZ2VE
aXN0YW5jZTsKICAgICBkZWZhdWx0OgpAQCAtNjQ0LDEwNyArNjE2LDk4IEBAIHN0YXRpYyBmbG9h
dCBwb3NpdGlvbkZyb21WYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoCiAgICAgcmV0dXJuIG9yaWdpbiArIHNpZ24gKiB2YWx1ZS0+Y29tcHV0ZUxl
bmd0aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpOwogfQogCi1GbG9hdFBvaW50IENTU0dyYWRpZW50
VmFsdWU6OmNvbXB1dGVFbmRQb2ludChDU1NQcmltaXRpdmVWYWx1ZSogaG9yaXpvbnRhbCwgQ1NT
UHJpbWl0aXZlVmFsdWUqIHZlcnRpY2FsLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjb252ZXJzaW9uRGF0YSwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorLy8gUmVzb2x2ZSBwb2lu
dHMvcmFkaWkgdG8gZnJvbnQgZW5kIHZhbHVlcy4KK3N0YXRpYyBGbG9hdFBvaW50IGNvbXB1dGVF
bmRQb2ludChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogaG9yaXpvbnRhbCwgY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUqIHZlcnRpY2FsLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBj
b252ZXJzaW9uRGF0YSwgY29uc3QgRmxvYXRTaXplJiBzaXplKQogewotICAgIEZsb2F0UG9pbnQg
cmVzdWx0OwotCi0gICAgaWYgKGhvcml6b250YWwpCi0gICAgICAgIHJlc3VsdC5zZXRYKHBvc2l0
aW9uRnJvbVZhbHVlKGhvcml6b250YWwsIGNvbnZlcnNpb25EYXRhLCBzaXplLCB0cnVlKSk7Ci0K
LSAgICBpZiAodmVydGljYWwpCi0gICAgICAgIHJlc3VsdC5zZXRZKHBvc2l0aW9uRnJvbVZhbHVl
KHZlcnRpY2FsLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSwgZmFsc2UpKTsKLQotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIHsgcG9zaXRpb25Gcm9tVmFsdWUoaG9yaXpvbnRhbCwgY29udmVy
c2lvbkRhdGEsIHNpemUsIHRydWUpLCBwb3NpdGlvbkZyb21WYWx1ZSh2ZXJ0aWNhbCwgY29udmVy
c2lvbkRhdGEsIHNpemUsIGZhbHNlKSB9OwogfQogCiBib29sIENTU0dyYWRpZW50VmFsdWU6Omlz
Q2FjaGVhYmxlKCkgY29uc3QKIHsKKyAgICBpZiAoaGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMp
IHsKLSAgICAgICAgaWYgKHN0b3AubV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghc3RvcC5tX3Bvc2l0aW9uKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbi0+aXNGb250
UmVsYXRpdmVMZW5ndGgoKSkKKyAgICAgICAgaWYgKHN0b3AucG9zaXRpb24gJiYgc3RvcC5wb3Np
dGlvbi0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBDU1NHcmFkaWVudFZhbHVlOjpr
bm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpIGNvbnN0CiB7CiAg
ICAgYm9vbCBoYXNDb2xvckZpbHRlciA9IHJlbmRlcmVyLnN0eWxlKCkuaGFzQXBwbGVDb2xvckZp
bHRlcigpOwotCiAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykgewotICAgICAgICBpZiAo
aGFzQ29sb3JGaWx0ZXIpIHsKLSAgICAgICAgICAgIENvbG9yIHN0b3BDb2xvciA9IHN0b3AubV9y
ZXNvbHZlZENvbG9yOwotICAgICAgICAgICAgcmVuZGVyZXIuc3R5bGUoKS5hcHBsZUNvbG9yRmls
dGVyKCkudHJhbnNmb3JtQ29sb3Ioc3RvcENvbG9yKTsKLSAgICAgICAgICAgIGlmICghc3RvcENv
bG9yLmlzT3BhcXVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFzdG9wLm1fcmVzb2x2ZWRDb2xvci5pc09wYXF1ZSgpKQorICAgICAg
ICBDb2xvciBjb2xvciA9IHN0b3AucmVzb2x2ZWRDb2xvcjsKKyAgICAgICAgaWYgKGhhc0NvbG9y
RmlsdGVyKQorICAgICAgICAgICAgcmVuZGVyZXIuc3R5bGUoKS5hcHBsZUNvbG9yRmlsdGVyKCku
dHJhbnNmb3JtQ29sb3IoY29sb3IpOworICAgICAgICBpZiAoIWNvbG9yLmlzT3BhcXVlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCiti
b29sIENTU0dyYWRpZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NHcmFkaWVudFZhbHVlJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhl
ci5tX2ZpcnN0WCkKKyAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhl
ci5tX2ZpcnN0WSkKKyAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vjb25kWCwgb3Ro
ZXIubV9zZWNvbmRYKQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9zZWNvbmRZLCBv
dGhlci5tX3NlY29uZFkpCisgICAgICAgICYmIG1fc3RvcHMgPT0gb3RoZXIubV9zdG9wcworICAg
ICAgICAmJiBtX2dyYWRpZW50VHlwZSA9PSBvdGhlci5tX2dyYWRpZW50VHlwZQorICAgICAgICAm
JiBtX3JlcGVhdGluZyA9PSBvdGhlci5tX3JlcGVhdGluZzsKK30KKwogc3RhdGljIHZvaWQgYXBw
ZW5kR3JhZGllbnRTdG9wcyhTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBWZWN0b3I8Q1NT
R3JhZGllbnRDb2xvclN0b3AsIDI+JiBzdG9wcykKIHsKICAgICBmb3IgKGF1dG8mIHN0b3AgOiBz
dG9wcykgewotICAgICAgICBkb3VibGUgcG9zaXRpb24gPSBzdG9wLm1fcG9zaXRpb24tPmRvdWJs
ZVZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgZG91YmxlIHBvc2l0aW9u
ID0gc3RvcC5wb3NpdGlvbi0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwog
ICAgICAgICBpZiAoIXBvc2l0aW9uKQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgZnJv
bSgiLCBzdG9wLm1fY29sb3ItPmNzc1RleHQoKSwgJyknKTsKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCIsIGZyb20oIiwgc3RvcC5jb2xvci0+Y3NzVGV4dCgpLCAnKScpOwogICAgICAgICBl
bHNlIGlmIChwb3NpdGlvbiA9PSAxKQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgdG8o
Iiwgc3RvcC5tX2NvbG9yLT5jc3NUZXh0KCksICcpJyk7CisgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgiLCB0bygiLCBzdG9wLmNvbG9yLT5jc3NUZXh0KCksICcpJyk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIGNvbG9yLXN0b3AoIiwgcG9zaXRpb24sICIs
ICIsIHN0b3AubV9jb2xvci0+Y3NzVGV4dCgpLCAnKScpOworICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiwgY29sb3Itc3RvcCgiLCBwb3NpdGlvbiwgIiwgIiwgc3RvcC5jb2xvci0+Y3NzVGV4
dCgpLCAnKScpOwogICAgIH0KIH0KIAotdm9pZCBDU1NHcmFkaWVudFZhbHVlOjp3cml0ZUNvbG9y
U3RvcChTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBDU1NHcmFkaWVudENvbG9yU3RvcCYg
c3RvcCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyB2b2lk
IGFwcGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIsIGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpCiB7Ci0gICAgaWYgKCFzdG9wLmlzTWlkcG9p
bnQgJiYgc3RvcC5tX2NvbG9yKQotICAgICAgICBidWlsZGVyLmFwcGVuZChzdG9wLm1fY29sb3It
PmNzc1RleHQoKSk7CisgICAgaWYgKGEgJiYgYikKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYS0+
Y3NzVGV4dCgpLCAnICcsIGItPmNzc1RleHQoKSk7CisgICAgZWxzZSBpZiAoYSkKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoYS0+Y3NzVGV4dCgpKTsKKyAgICBlbHNlIGlmIChiKQorICAgICAgICBi
dWlsZGVyLmFwcGVuZChiLT5jc3NUZXh0KCkpOworfQogCi0gICAgaWYgKHN0b3AubV9wb3NpdGlv
bikgewotICAgICAgICBpZiAoIXN0b3AuaXNNaWRwb2ludCkKLSAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0b3AubV9wb3NpdGlvbi0+Y3Nz
VGV4dCgpKTsKLSAgICB9CitzdGF0aWMgdm9pZCB3cml0ZUNvbG9yU3RvcChTdHJpbmdCdWlsZGVy
JiBidWlsZGVyLCBjb25zdCBDU1NHcmFkaWVudENvbG9yU3RvcCYgc3RvcCkKK3sKKyAgICBhcHBl
bmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dChidWlsZGVyLCBzdG9wLmNvbG9yLCBz
dG9wLnBvc2l0aW9uKTsKIH0KIAogU3RyaW5nIENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmN1c3Rv
bUNTU1RleHQoKSBjb25zdAogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIGlmICht
X2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGllbnQpIHsKLSAgICAgICAg
cmVzdWx0LmFwcGVuZCgiLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsICIsIG1fZmlyc3RYLT5jc3NU
ZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSwgIiwgIiwgbV9zZWNvbmRYLT5jc3NUZXh0
KCksICcgJywgbV9zZWNvbmRZLT5jc3NUZXh0KCkpOwotICAgICAgICBhcHBlbmRHcmFkaWVudFN0
b3BzKHJlc3VsdCwgbV9zdG9wcyk7Ci0gICAgfSBlbHNlIGlmIChtX2dyYWRpZW50VHlwZSA9PSBD
U1NQcmVmaXhlZExpbmVhckdyYWRpZW50KSB7Ci0gICAgICAgIGlmIChtX3JlcGVhdGluZykKKyAg
ICBpZiAoZ3JhZGllbnRUeXBlKCkgPT0gQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KSB7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAiLCBmaXJzdFgo
KS0+Y3NzVGV4dCgpLCAnICcsIGZpcnN0WSgpLT5jc3NUZXh0KCksICIsICIsIHNlY29uZFgoKS0+
Y3NzVGV4dCgpLCAnICcsIHNlY29uZFkoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgYXBwZW5kR3Jh
ZGllbnRTdG9wcyhyZXN1bHQsIHN0b3BzKCkpOworICAgIH0gZWxzZSBpZiAoZ3JhZGllbnRUeXBl
KCkgPT0gQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudCkgeworICAgICAgICBpZiAoaXNSZXBlYXRp
bmcoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCItd2Via2l0LXJlcGVhdGlu
Zy1saW5lYXItZ3JhZGllbnQoIik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCItd2Via2l0LWxpbmVhci1ncmFkaWVudCgiKTsKIAogICAgICAgICBpZiAo
bV9hbmdsZSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9hbmdsZS0+Y3NzVGV4dCgpKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9maXJzdFggJiYgbV9maXJzdFkpCi0g
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAnICcsIG1f
Zmlyc3RZLT5jc3NUZXh0KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9maXJzdFgpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1fZmlyc3RZKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9m
aXJzdFktPmNzc1RleHQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YXBwZW5kU3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0clRleHQocmVzdWx0LCBmaXJzdFgoKSwg
Zmlyc3RZKCkpOwogCi0gICAgICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZExpdGVyYWwoIiwgIik7CiAgICAgICAgICAgICB3cml0ZUNvbG9yU3RvcChyZXN1bHQsIHN0b3Ap
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fcmVwZWF0aW5nKQorICAg
ICAgICBpZiAoaXNSZXBlYXRpbmcoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFs
KCJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KCIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgibGluZWFyLWdyYWRpZW50KCIpOwpAQCAtNzU0LDI1ICs3
MTcsMTYgQEAgU3RyaW5nIENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1RleHQoKSBj
b25zdAogICAgICAgICBpZiAobV9hbmdsZSAmJiBtX2FuZ2xlLT5jb21wdXRlRGVncmVlcygpICE9
IDE4MCkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2FuZ2xlLT5jc3NUZXh0KCkpOwog
ICAgICAgICAgICAgd3JvdGVTb21ldGhpbmcgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCht
X2ZpcnN0WCB8fCBtX2ZpcnN0WSkgJiYgISghbV9maXJzdFggJiYgbV9maXJzdFkgJiYgbV9maXJz
dFktPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJvdHRvbSkpIHsKKyAgICAgICAgfSBlbHNlIGlmICgo
Zmlyc3RYKCkgfHwgZmlyc3RZKCkpICYmICEoIWZpcnN0WCgpICYmIGZpcnN0WSgpICYmIGZpcnN0
WSgpLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3R0b20pKSB7CiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kTGl0ZXJhbCgidG8gIik7Ci0gICAgICAgICAgICBpZiAobV9maXJzdFggJiYgbV9maXJz
dFkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAn
ICcsIG1fZmlyc3RZLT5jc3NUZXh0KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9maXJzdFgp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RZLT5j
c3NUZXh0KCkpOworICAgICAgICAgICAgYXBwZW5kU3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0
clRleHQocmVzdWx0LCBmaXJzdFgoKSwgZmlyc3RZKCkpOwogICAgICAgICAgICAgd3JvdGVTb21l
dGhpbmcgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdyb3RlU29tZXRoaW5nKQot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7Ci0KLSAgICAgICAgYm9vbCB3
cm90ZUZpcnN0U3RvcCA9IGZhbHNlOwotICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3Bz
KSB7Ci0gICAgICAgICAgICBpZiAod3JvdGVGaXJzdFN0b3ApCisgICAgICAgIGZvciAoYXV0byYg
c3RvcCA6IHN0b3BzKCkpIHsKKyAgICAgICAgICAgIGlmICh3cm90ZVNvbWV0aGluZykKICAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgICAgIHdyb3Rl
Rmlyc3RTdG9wID0gdHJ1ZTsKKyAgICAgICAgICAgIHdyb3RlU29tZXRoaW5nID0gdHJ1ZTsKICAg
ICAgICAgICAgIHdyaXRlQ29sb3JTdG9wKHJlc3VsdCwgc3RvcCk7CiAgICAgICAgIH0KICAgICB9
CkBAIC04NTksNDQgKzgxMyw0NCBAQCBSZWY8R3JhZGllbnQ+IENTU0xpbmVhckdyYWRpZW50VmFs
dWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjbwogICAgIEZsb2F0
UG9pbnQgc2Vjb25kUG9pbnQ7CiAgICAgaWYgKG1fYW5nbGUpIHsKICAgICAgICAgZmxvYXQgYW5n
bGUgPSBtX2FuZ2xlLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfREVHKTsKLSAgICAgICAg
ZW5kUG9pbnRzRnJvbUFuZ2xlKGFuZ2xlLCBzaXplLCBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCwg
bV9ncmFkaWVudFR5cGUpOworICAgICAgICBlbmRQb2ludHNGcm9tQW5nbGUoYW5nbGUsIHNpemUs
IGZpcnN0UG9pbnQsIHNlY29uZFBvaW50LCBncmFkaWVudFR5cGUoKSk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgc3dpdGNoIChtX2dyYWRpZW50VHlwZSkgeworICAgICAgICBzd2l0Y2ggKGdyYWRp
ZW50VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRpZW50Ogot
ICAgICAgICAgICAgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2ludChtX2ZpcnN0WC5nZXQoKSwg
bV9maXJzdFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKLSAgICAgICAgICAgIGlmICht
X3NlY29uZFggfHwgbV9zZWNvbmRZKQotICAgICAgICAgICAgICAgIHNlY29uZFBvaW50ID0gY29t
cHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNvbmRZLmdldCgpLCBjb252ZXJzaW9u
RGF0YSwgc2l6ZSk7CisgICAgICAgICAgICBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KGZp
cnN0WCgpLCBmaXJzdFkoKSwgY29udmVyc2lvbkRhdGEsIHNpemUpOworICAgICAgICAgICAgaWYg
KHNlY29uZFgoKSB8fCBzZWNvbmRZKCkpCisgICAgICAgICAgICAgICAgc2Vjb25kUG9pbnQgPSBj
b21wdXRlRW5kUG9pbnQoc2Vjb25kWCgpLCBzZWNvbmRZKCksIGNvbnZlcnNpb25EYXRhLCBzaXpl
KTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0WCkKKyAg
ICAgICAgICAgICAgICBpZiAoZmlyc3RYKCkpCiAgICAgICAgICAgICAgICAgICAgIHNlY29uZFBv
aW50LnNldFgoc2l6ZS53aWR0aCgpIC0gZmlyc3RQb2ludC54KCkpOwotICAgICAgICAgICAgICAg
IGlmIChtX2ZpcnN0WSkKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RZKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHNlY29uZFBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAtIGZpcnN0UG9pbnQueSgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1By
ZWZpeGVkTGluZWFyR3JhZGllbnQ6Ci0gICAgICAgICAgICBmaXJzdFBvaW50ID0gY29tcHV0ZUVu
ZFBvaW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgY29udmVyc2lvbkRhdGEsIHNp
emUpOwotICAgICAgICAgICAgaWYgKG1fZmlyc3RYKQorICAgICAgICAgICAgZmlyc3RQb2ludCA9
IGNvbXB1dGVFbmRQb2ludChmaXJzdFgoKSwgZmlyc3RZKCksIGNvbnZlcnNpb25EYXRhLCBzaXpl
KTsKKyAgICAgICAgICAgIGlmIChmaXJzdFgoKSkKICAgICAgICAgICAgICAgICBzZWNvbmRQb2lu
dC5zZXRYKHNpemUud2lkdGgoKSAtIGZpcnN0UG9pbnQueCgpKTsKLSAgICAgICAgICAgIGlmICht
X2ZpcnN0WSkKKyAgICAgICAgICAgIGlmIChmaXJzdFkoKSkKICAgICAgICAgICAgICAgICBzZWNv
bmRQb2ludC5zZXRZKHNpemUuaGVpZ2h0KCkgLSBmaXJzdFBvaW50LnkoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NMaW5lYXJHcmFkaWVudDoKLSAgICAgICAgICAgIGlm
IChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkgeworICAgICAgICAgICAgaWYgKGZpcnN0WCgpICYmIGZp
cnN0WSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gIk1hZ2ljIiBjb3JuZXJzLCBzbyB0aGUgNTAl
IGxpbmUgdG91Y2hlcyB0d28gY29ybmVycy4KICAgICAgICAgICAgICAgICBmbG9hdCByaXNlID0g
c2l6ZS53aWR0aCgpOwogICAgICAgICAgICAgICAgIGZsb2F0IHJ1biA9IHNpemUuaGVpZ2h0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RYLT52YWx1ZUlEKCkgPT0g
Q1NTVmFsdWVMZWZ0KQorICAgICAgICAgICAgICAgIGlmIChmaXJzdFgoKSAmJiBmaXJzdFgoKS0+
dmFsdWVJRCgpID09IENTU1ZhbHVlTGVmdCkKICAgICAgICAgICAgICAgICAgICAgcnVuICo9IC0x
OwotICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0WSAmJiBtX2ZpcnN0WS0+dmFsdWVJRCgpID09
IENTU1ZhbHVlQm90dG9tKQorICAgICAgICAgICAgICAgIGlmIChmaXJzdFkoKSAmJiBmaXJzdFko
KS0+dmFsdWVJRCgpID09IENTU1ZhbHVlQm90dG9tKQogICAgICAgICAgICAgICAgICAgICByaXNl
ICo9IC0xOwogICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgYW5nbGUsIGFuZCBmbGlwIGl0IGJh
Y2sgdG8gImJlYXJpbmcgYW5nbGUiIGRlZ3JlZXMuCiAgICAgICAgICAgICAgICAgZmxvYXQgYW5n
bGUgPSA5MCAtIHJhZDJkZWcoYXRhbjIocmlzZSwgcnVuKSk7Ci0gICAgICAgICAgICAgICAgZW5k
UG9pbnRzRnJvbUFuZ2xlKGFuZ2xlLCBzaXplLCBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCwgbV9n
cmFkaWVudFR5cGUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZpcnN0WCB8fCBtX2ZpcnN0
WSkgeyAKLSAgICAgICAgICAgICAgICBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQb2ludChtX2Zp
cnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKLSAgICAg
ICAgICAgICAgICBpZiAobV9maXJzdFgpCisgICAgICAgICAgICAgICAgZW5kUG9pbnRzRnJvbUFu
Z2xlKGFuZ2xlLCBzaXplLCBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCwgZ3JhZGllbnRUeXBlKCkp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdFgoKSB8fCBmaXJzdFkoKSkgeworICAgICAg
ICAgICAgICAgIHNlY29uZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KGZpcnN0WCgpLCBmaXJzdFko
KSwgY29udmVyc2lvbkRhdGEsIHNpemUpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFgoKSkK
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RQb2ludC5zZXRYKHNpemUud2lkdGgoKSAtIHNlY29u
ZFBvaW50LngoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZmlyc3RZKQorICAgICAgICAgICAg
ICAgIGlmIChmaXJzdFkoKSkKICAgICAgICAgICAgICAgICAgICAgZmlyc3RQb2ludC5zZXRZKHNp
emUuaGVpZ2h0KCkgLSBzZWNvbmRQb2ludC55KCkpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WShzaXplLmhlaWdodCgpKTsKQEAgLTkxNyw1OSAr
ODcxLDI1IEBAIFJlZjxHcmFkaWVudD4gQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3Jh
ZGllbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvCiAKIGJvb2wgQ1NTTGluZWFyR3JhZGll
bnRWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0xpbmVhckdyYWRpZW50VmFsdWUmIG90aGVyKSBjb25z
dAogewotICAgIGlmIChtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGll
bnQpCi0gICAgICAgIHJldHVybiBvdGhlci5tX2dyYWRpZW50VHlwZSA9PSBtX2dyYWRpZW50VHlw
ZQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5tX2Zp
cnN0WCkKLSAgICAgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WSwgb3RoZXIu
bV9maXJzdFkpCi0gICAgICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9zZWNvbmRYLCBv
dGhlci5tX3NlY29uZFgpCi0gICAgICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9zZWNv
bmRZLCBvdGhlci5tX3NlY29uZFkpCi0gICAgICAgICAgICAmJiBtX3N0b3BzID09IG90aGVyLm1f
c3RvcHM7Ci0KLSAgICBpZiAobV9ncmFkaWVudFR5cGUgIT0gb3RoZXIubV9ncmFkaWVudFR5cGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3JlcGVhdGluZyAhPSBvdGhlci5t
X3JlcGVhdGluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fYW5nbGUpCi0g
ICAgICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVQdHIobV9hbmdsZSwgb3RoZXIubV9hbmdsZSkg
JiYgbV9zdG9wcyA9PSBvdGhlci5tX3N0b3BzOwotCi0gICAgaWYgKG90aGVyLm1fYW5nbGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgZXF1YWxYYW5kWSA9IGZhbHNlOwotICAg
IGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkKLSAgICAgICAgZXF1YWxYYW5kWSA9IGNvbXBhcmVD
U1NWYWx1ZVB0cihtX2ZpcnN0WCwgb3RoZXIubV9maXJzdFgpICYmIGNvbXBhcmVDU1NWYWx1ZVB0
cihtX2ZpcnN0WSwgb3RoZXIubV9maXJzdFkpOwotICAgIGVsc2UgaWYgKG1fZmlyc3RYKQotICAg
ICAgICBlcXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5tX2Zp
cnN0WCkgJiYgIW90aGVyLm1fZmlyc3RZOwotICAgIGVsc2UgaWYgKG1fZmlyc3RZKQotICAgICAg
ICBlcXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0
WSkgJiYgIW90aGVyLm1fZmlyc3RYOwotICAgIGVsc2UKLSAgICAgICAgZXF1YWxYYW5kWSA9ICFv
dGhlci5tX2ZpcnN0WCAmJiAhb3RoZXIubV9maXJzdFk7Ci0KLSAgICByZXR1cm4gZXF1YWxYYW5k
WSAmJiBtX3N0b3BzID09IG90aGVyLm1fc3RvcHM7CisgICAgcmV0dXJuIENTU0dyYWRpZW50VmFs
dWU6OmVxdWFscyhvdGhlcikgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fYW5nbGUsIG90aGVyLm1f
YW5nbGUpOwogfQogCiBTdHJpbmcgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4
dCgpIGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKLSAgICBpZiAobV9ncmFk
aWVudFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KSB7Ci0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoIi13ZWJraXQtZ3JhZGllbnQocmFkaWFsLCAiLCBtX2ZpcnN0WC0+Y3NzVGV4dCgp
LCAnICcsIG1fZmlyc3RZLT5jc3NUZXh0KCksICIsICIsIG1fZmlyc3RSYWRpdXMtPmNzc1RleHQo
KSwKLSAgICAgICAgICAgICIsICIsIG1fc2Vjb25kWC0+Y3NzVGV4dCgpLCAnICcsIG1fc2Vjb25k
WS0+Y3NzVGV4dCgpLCAiLCAiLCBtX3NlY29uZFJhZGl1cy0+Y3NzVGV4dCgpKTsKLSAgICAgICAg
YXBwZW5kR3JhZGllbnRTdG9wcyhyZXN1bHQsIG1fc3RvcHMpOwotICAgIH0gZWxzZSBpZiAobV9n
cmFkaWVudFR5cGUgPT0gQ1NTUHJlZml4ZWRSYWRpYWxHcmFkaWVudCkgewotICAgICAgICBpZiAo
bV9yZXBlYXRpbmcpCisgICAgaWYgKGdyYWRpZW50VHlwZSgpID09IENTU0RlcHJlY2F0ZWRSYWRp
YWxHcmFkaWVudCkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCItd2Via2l0LWdyYWRpZW50KHJh
ZGlhbCwgIiwgZmlyc3RYKCktPmNzc1RleHQoKSwgJyAnLCBmaXJzdFkoKS0+Y3NzVGV4dCgpLCAi
LCAiLCBtX2ZpcnN0UmFkaXVzLT5jc3NUZXh0KCksCisgICAgICAgICAgICAiLCAiLCBzZWNvbmRY
KCktPmNzc1RleHQoKSwgJyAnLCBzZWNvbmRZKCktPmNzc1RleHQoKSwgIiwgIiwgbV9zZWNvbmRS
YWRpdXMtPmNzc1RleHQoKSk7CisgICAgICAgIGFwcGVuZEdyYWRpZW50U3RvcHMocmVzdWx0LCBz
dG9wcygpKTsKKyAgICB9IGVsc2UgaWYgKGdyYWRpZW50VHlwZSgpID09IENTU1ByZWZpeGVkUmFk
aWFsR3JhZGllbnQpIHsKKyAgICAgICAgaWYgKGlzUmVwZWF0aW5nKCkpCiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLXdlYmtpdC1yZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLXdlYmtp
dC1yYWRpYWwtZ3JhZGllbnQoIik7CiAKLSAgICAgICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZ
KQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAnICcsIG1f
Zmlyc3RZLT5jc3NUZXh0KCkpOwotICAgICAgICBlbHNlIGlmIChtX2ZpcnN0WCkKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSk7Ci0gICAgICAgIGVsc2UgaWYg
KG1fZmlyc3RZKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WS0+Y3NzVGV4dCgp
KTsKKyAgICAgICAgaWYgKGZpcnN0WCgpIHx8IGZpcnN0WSgpKQorICAgICAgICAgICAgYXBwZW5k
U3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0clRleHQocmVzdWx0LCBmaXJzdFgoKSwgZmlyc3RZ
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiY2Vu
dGVyIik7CiAKQEAgLTk4NiwxMiArOTA2LDEyIEBAIFN0cmluZyBDU1NSYWRpYWxHcmFkaWVudFZh
bHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAgICAgICAgfSBlbHNlIGlmIChtX2VuZEhvcml6
b250YWxTaXplICYmIG1fZW5kVmVydGljYWxTaXplKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiLCAiLCBtX2VuZEhvcml6b250YWxTaXplLT5jc3NUZXh0KCksICcgJywgbV9lbmRWZXJ0aWNh
bFNpemUtPmNzc1RleHQoKSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykg
eworICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7CiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKICAgICAgICAgICAgIHdyaXRlQ29sb3JTdG9wKHJlc3Vs
dCwgc3RvcCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9yZXBlYXRp
bmcpCisgICAgICAgIGlmIChpc1JlcGVhdGluZygpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZExpdGVyYWwoInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQoIik7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJyYWRpYWwtZ3JhZGllbnQoIik7CkBAIC0x
MDE5LDE2ICs5MzksMTEgQEAgU3RyaW5nIENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmN1c3RvbUNT
U1RleHQoKSBjb25zdAogICAgICAgICAgICAgd3JvdGVTb21ldGhpbmcgPSB0cnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1fZmlyc3RYIHx8IG1fZmlyc3RZKSB7CisgICAgICAgIGlmIChm
aXJzdFgoKSB8fCBmaXJzdFkoKSkgewogICAgICAgICAgICAgaWYgKHdyb3RlU29tZXRoaW5nKQog
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCJhdCAiKTsKLSAgICAgICAgICAgIGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0
WSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RYLT5jc3NUZXh0KCksICcg
JywgbV9maXJzdFktPmNzc1RleHQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX2ZpcnN0WCkK
LSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RYLT5jc3NUZXh0KCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFktPmNz
c1RleHQoKSk7CisgICAgICAgICAgICBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRy
VGV4dChyZXN1bHQsIGZpcnN0WCgpLCBmaXJzdFkoKSk7CiAgICAgICAgICAgICB3cm90ZVNvbWV0
aGluZyA9IHRydWU7CiAgICAgICAgIH0KIApAQCAtMTAzNiw3ICs5NTEsNyBAQCBTdHJpbmcgQ1NT
UmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKIAogICAgICAgICBib29sIHdyb3RlRmlyc3RTdG9w
ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkgewogICAgICAgICAgICAgaWYgKHdyb3RlRmlyc3RT
dG9wKQogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwogICAgICAg
ICAgICAgd3JvdGVGaXJzdFN0b3AgPSB0cnVlOwpAQCAtMTE0MywxNiArMTA1OCwxNiBAQCBSZWY8
R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjbwogCiAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252
ZXJzaW9uRGF0YSgmcmVuZGVyZXIuc3R5bGUoKSwgcmVuZGVyZXIuZG9jdW1lbnQoKS5kb2N1bWVu
dEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKSwgJnJlbmRlcmVyLnZpZXcoKSk7CiAKLSAgICBGbG9h
dFBvaW50IGZpcnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCksIG1fZmly
c3RZLmdldCgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7Ci0gICAgaWYgKCFtX2ZpcnN0WCkKKyAg
ICBGbG9hdFBvaW50IGZpcnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQoZmlyc3RYKCksIGZpcnN0
WSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CisgICAgaWYgKCFmaXJzdFgoKSkKICAgICAgICAg
Zmlyc3RQb2ludC5zZXRYKHNpemUud2lkdGgoKSAvIDIpOwotICAgIGlmICghbV9maXJzdFkpCisg
ICAgaWYgKCFmaXJzdFkoKSkKICAgICAgICAgZmlyc3RQb2ludC5zZXRZKHNpemUuaGVpZ2h0KCkg
LyAyKTsKIAotICAgIEZsb2F0UG9pbnQgc2Vjb25kUG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9z
ZWNvbmRYLmdldCgpLCBtX3NlY29uZFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKLSAg
ICBpZiAoIW1fc2Vjb25kWCkKKyAgICBGbG9hdFBvaW50IHNlY29uZFBvaW50ID0gY29tcHV0ZUVu
ZFBvaW50KHNlY29uZFgoKSwgc2Vjb25kWSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CisgICAg
aWYgKCFzZWNvbmRYKCkpCiAgICAgICAgIHNlY29uZFBvaW50LnNldFgoc2l6ZS53aWR0aCgpIC8g
Mik7Ci0gICAgaWYgKCFtX3NlY29uZFkpCisgICAgaWYgKCFzZWNvbmRZKCkpCiAgICAgICAgIHNl
Y29uZFBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAvIDIpOwogCiAgICAgZmxvYXQgZmlyc3RSYWRp
dXMgPSAwOwpAQCAtMTI2Niw3ICsxMTgxLDcgQEAgUmVmPEdyYWRpZW50PiBDU1NSYWRpYWxHcmFk
aWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY28KIAog
ICAgIC8vIGNvbXB1dGVTdG9wcygpIG9ubHkgdXNlcyBtYXhFeHRlbnQgZm9yIHJlcGVhdGluZyBn
cmFkaWVudHMuCiAgICAgZmxvYXQgbWF4RXh0ZW50ID0gMDsKLSAgICBpZiAobV9yZXBlYXRpbmcp
IHsKKyAgICBpZiAoaXNSZXBlYXRpbmcoKSkgewogICAgICAgICBGbG9hdFBvaW50IGNvcm5lcjsK
ICAgICAgICAgbWF4RXh0ZW50ID0gZGlzdGFuY2VUb0ZhcnRoZXN0Q29ybmVyKHNlY29uZFBvaW50
LCBzaXplLCBjb3JuZXIpOwogICAgIH0KQEAgLTEyODIsNTkgKzExOTcsMTggQEAgUmVmPEdyYWRp
ZW50PiBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY28KIAogYm9vbCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjplcXVhbHMoY29u
c3QgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZ3Jh
ZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkKLSAgICAgICAgcmV0dXJu
IG90aGVyLm1fZ3JhZGllbnRUeXBlID09IG1fZ3JhZGllbnRUeXBlCi0gICAgICAgICAgICAmJiBj
b21wYXJlQ1NTVmFsdWVQdHIobV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKQotICAgICAgICAgICAg
JiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0WSkKLSAgICAgICAg
ICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX3NlY29uZFgsIG90aGVyLm1fc2Vjb25kWCkKLSAg
ICAgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX3NlY29uZFksIG90aGVyLm1fc2Vjb25k
WSkKLSAgICAgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0UmFkaXVzLCBvdGhl
ci5tX2ZpcnN0UmFkaXVzKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vj
b25kUmFkaXVzLCBvdGhlci5tX3NlY29uZFJhZGl1cykKLSAgICAgICAgICAgICYmIG1fc3RvcHMg
PT0gb3RoZXIubV9zdG9wczsKLQotICAgIGlmIChtX2dyYWRpZW50VHlwZSAhPSBvdGhlci5tX2dy
YWRpZW50VHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcmVwZWF0aW5n
ICE9IG90aGVyLm1fcmVwZWF0aW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29s
IGVxdWFsWGFuZFkgPSBmYWxzZTsKLSAgICBpZiAobV9maXJzdFggJiYgbV9maXJzdFkpCi0gICAg
ICAgIGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NTVmFsdWVQdHIobV9maXJzdFgsIG90aGVyLm1fZmly
c3RYKSAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9maXJzdFksIG90aGVyLm1fZmlyc3RZKTsKLSAg
ICBlbHNlIGlmIChtX2ZpcnN0WCkKLSAgICAgICAgZXF1YWxYYW5kWSA9IGNvbXBhcmVDU1NWYWx1
ZVB0cihtX2ZpcnN0WCwgb3RoZXIubV9maXJzdFgpICYmICFvdGhlci5tX2ZpcnN0WTsKLSAgICBl
bHNlIGlmIChtX2ZpcnN0WSkKLSAgICAgICAgZXF1YWxYYW5kWSA9IGNvbXBhcmVDU1NWYWx1ZVB0
cihtX2ZpcnN0WSwgb3RoZXIubV9maXJzdFkpICYmICFvdGhlci5tX2ZpcnN0WDsKLSAgICBlbHNl
Ci0gICAgICAgIGVxdWFsWGFuZFkgPSAhb3RoZXIubV9maXJzdFggJiYgIW90aGVyLm1fZmlyc3RZ
OwotCi0gICAgaWYgKCFlcXVhbFhhbmRZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBi
b29sIGVxdWFsU2hhcGUgPSB0cnVlOwotICAgIGJvb2wgZXF1YWxTaXppbmdCZWhhdmlvciA9IHRy
dWU7Ci0gICAgYm9vbCBlcXVhbEhvcml6b250YWxBbmRWZXJ0aWNhbFNpemUgPSB0cnVlOwotCi0g
ICAgaWYgKG1fc2hhcGUpCi0gICAgICAgIGVxdWFsU2hhcGUgPSBjb21wYXJlQ1NTVmFsdWVQdHIo
bV9zaGFwZSwgb3RoZXIubV9zaGFwZSk7Ci0gICAgZWxzZSBpZiAobV9zaXppbmdCZWhhdmlvcikK
LSAgICAgICAgZXF1YWxTaXppbmdCZWhhdmlvciA9IGNvbXBhcmVDU1NWYWx1ZVB0cihtX3Npemlu
Z0JlaGF2aW9yLCBvdGhlci5tX3NpemluZ0JlaGF2aW9yKTsKLSAgICBlbHNlIGlmIChtX2VuZEhv
cml6b250YWxTaXplICYmIG1fZW5kVmVydGljYWxTaXplKQotICAgICAgICBlcXVhbEhvcml6b250
YWxBbmRWZXJ0aWNhbFNpemUgPSBjb21wYXJlQ1NTVmFsdWVQdHIobV9lbmRIb3Jpem9udGFsU2l6
ZSwgb3RoZXIubV9lbmRIb3Jpem9udGFsU2l6ZSkgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZW5k
VmVydGljYWxTaXplLCBvdGhlci5tX2VuZFZlcnRpY2FsU2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGVxdWFsU2hhcGUgPSAhb3RoZXIubV9zaGFwZTsKLSAgICAgICAgZXF1YWxTaXppbmdCZWhh
dmlvciA9ICFvdGhlci5tX3NpemluZ0JlaGF2aW9yOwotICAgICAgICBlcXVhbEhvcml6b250YWxB
bmRWZXJ0aWNhbFNpemUgPSAhb3RoZXIubV9lbmRIb3Jpem9udGFsU2l6ZSAmJiAhb3RoZXIubV9l
bmRWZXJ0aWNhbFNpemU7Ci0gICAgfQotICAgIHJldHVybiBlcXVhbFNoYXBlICYmIGVxdWFsU2l6
aW5nQmVoYXZpb3IgJiYgZXF1YWxIb3Jpem9udGFsQW5kVmVydGljYWxTaXplICYmIG1fc3RvcHMg
PT0gb3RoZXIubV9zdG9wczsKKyAgICByZXR1cm4gQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKG90
aGVyKQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9zaGFwZSwgb3RoZXIubV9zaGFw
ZSkKKyAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2l6aW5nQmVoYXZpb3IsIG90aGVy
Lm1fc2l6aW5nQmVoYXZpb3IpCisgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2VuZEhv
cml6b250YWxTaXplLCBvdGhlci5tX2VuZEhvcml6b250YWxTaXplKQorICAgICAgICAmJiBjb21w
YXJlQ1NTVmFsdWVQdHIobV9lbmRWZXJ0aWNhbFNpemUsIG90aGVyLm1fZW5kVmVydGljYWxTaXpl
KTsKIH0KIAotCiBTdHJpbmcgQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0KCkg
Y29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIAotICAgIGlmIChtX3JlcGVhdGlu
ZykKKyAgICBpZiAoaXNSZXBlYXRpbmcoKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwo
InJlcGVhdGluZy1jb25pYy1ncmFkaWVudCgiKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCJjb25pYy1ncmFkaWVudCgiKTsKQEAgLTEzNDYsMTAgKzEyMjAsMTEgQEAg
U3RyaW5nIENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAg
ICAgIHdyb3RlU29tZXRoaW5nID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAobV9maXJzdFggJiYg
bV9maXJzdFkpIHsKKyAgICBpZiAoZmlyc3RYKCkgJiYgZmlyc3RZKCkpIHsKICAgICAgICAgaWYg
KHdyb3RlU29tZXRoaW5nKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwotICAgICAg
ICByZXN1bHQuYXBwZW5kKCJhdCAiLCBtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAnICcsIG1fZmlyc3RZ
LT5jc3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiYXQgIik7CisgICAg
ICAgIGFwcGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KHJlc3VsdCwgZmlyc3RY
KCksIGZpcnN0WSgpKTsKICAgICAgICAgd3JvdGVTb21ldGhpbmcgPSB0cnVlOwogICAgIH0KIApA
QCAtMTM1Nyw3ICsxMjMyLDcgQEAgU3RyaW5nIENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3VzdG9t
Q1NTVGV4dCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwogCiAg
ICAgYm9vbCB3cm90ZUZpcnN0U3RvcCA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgc3RvcCA6IG1f
c3RvcHMpIHsKKyAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7CiAgICAgICAgIGlmICh3
cm90ZUZpcnN0U3RvcCkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwog
ICAgICAgICB3cm90ZUZpcnN0U3RvcCA9IHRydWU7CkBAIC0xMzc0LDEwICsxMjQ5LDEwIEBAIFJl
ZjxHcmFkaWVudD4gQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgY29uCiAKICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNv
bnZlcnNpb25EYXRhKCZyZW5kZXJlci5zdHlsZSgpLCByZW5kZXJlci5kb2N1bWVudCgpLmRvY3Vt
ZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpLCAmcmVuZGVyZXIudmlldygpKTsKIAotICAgIEZs
b2F0UG9pbnQgY2VudGVyUG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCksIG1f
Zmlyc3RZLmdldCgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7Ci0gICAgaWYgKCFtX2ZpcnN0WCkK
KyAgICBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gY29tcHV0ZUVuZFBvaW50KGZpcnN0WCgpLCBm
aXJzdFkoKSwgY29udmVyc2lvbkRhdGEsIHNpemUpOworICAgIGlmICghZmlyc3RYKCkpCiAgICAg
ICAgIGNlbnRlclBvaW50LnNldFgoc2l6ZS53aWR0aCgpIC8gMik7Ci0gICAgaWYgKCFtX2ZpcnN0
WSkKKyAgICBpZiAoIWZpcnN0WSgpKQogICAgICAgICBjZW50ZXJQb2ludC5zZXRZKHNpemUuaGVp
Z2h0KCkgLyAyKTsKIAogICAgIGZsb2F0IGFuZ2xlUmFkaWFucyA9IDA7CkBAIC0xMzk1LDIzICsx
MjcwLDcgQEAgUmVmPEdyYWRpZW50PiBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRp
ZW50KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb24KIAogYm9vbCBDU1NDb25pY0dyYWRpZW50
VmFsdWU6OmVxdWFscyhjb25zdCBDU1NDb25pY0dyYWRpZW50VmFsdWUmIG90aGVyKSBjb25zdAog
ewotICAgIGlmIChtX3JlcGVhdGluZyAhPSBvdGhlci5tX3JlcGVhdGluZykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjb21wYXJlQ1NTVmFsdWVQdHIobV9hbmdsZSwgb3RoZXIu
bV9hbmdsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgZXF1YWxYYW5kWSA9
IGZhbHNlOwotICAgIGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkKLSAgICAgICAgZXF1YWxYYW5k
WSA9IGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WCwgb3RoZXIubV9maXJzdFgpICYmIGNvbXBh
cmVDU1NWYWx1ZVB0cihtX2ZpcnN0WSwgb3RoZXIubV9maXJzdFkpOwotICAgIGVsc2UgaWYgKG1f
Zmlyc3RYKQotICAgICAgICBlcXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RY
LCBvdGhlci5tX2ZpcnN0WCkgJiYgIW90aGVyLm1fZmlyc3RZOwotICAgIGVsc2UgaWYgKG1fZmly
c3RZKQotICAgICAgICBlcXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBv
dGhlci5tX2ZpcnN0WSkgJiYgIW90aGVyLm1fZmlyc3RYOwotICAgIGVsc2UKLSAgICAgICAgZXF1
YWxYYW5kWSA9ICFvdGhlci5tX2ZpcnN0WCAmJiAhb3RoZXIubV9maXJzdFk7Ci0KLSAgICByZXR1
cm4gZXF1YWxYYW5kWSAmJiBtX3N0b3BzID09IG90aGVyLm1fc3RvcHM7CisgICAgcmV0dXJuIENT
U0dyYWRpZW50VmFsdWU6OmVxdWFscyhvdGhlcikgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fYW5n
bGUsIG90aGVyLm1fYW5nbGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAppbmRleCBkNzU0NDJlMGEyYjlkZTg1MDRlOTFiNTll
OWUwMjQzNTYzNjU0NzAwLi4zNzk0MzcyNjMyYzUyOGMyMzAzYWMwOWRlMDZhZmY5OGRlZTI3MTY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKQEAgLTI4LDEzICsyOCw5IEBA
CiAjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1p
dGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIFN0
eWxlUmVzb2x2ZXI7Ci0KIG5hbWVzcGFjZSBTdHlsZSB7CiBjbGFzcyBCdWlsZGVyU3RhdGU7CiB9
CkBAIC01MSw0NyArNDcsMzggQEAgZW51bSBDU1NHcmFkaWVudFR5cGUgewogZW51bSBDU1NHcmFk
aWVudFJlcGVhdCB7IE5vblJlcGVhdGluZywgUmVwZWF0aW5nIH07CiAKIHN0cnVjdCBDU1NHcmFk
aWVudENvbG9yU3RvcCB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Bvc2l0aW9u
OyAvLyBwZXJjZW50YWdlIG9yIGxlbmd0aAotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
bV9jb2xvcjsKLSAgICBDb2xvciBtX3Jlc29sdmVkQ29sb3I7Ci0gICAgYm9vbCBtX2NvbG9ySXNE
ZXJpdmVkRnJvbUVsZW1lbnQgPSBmYWxzZTsKLSAgICBib29sIGlzTWlkcG9pbnQgPSBmYWxzZTsK
LSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2NvbG9yLCBv
dGhlci5tX2NvbG9yKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fcG9zaXRp
b24sIG90aGVyLm1fcG9zaXRpb24pOwotICAgIH0KKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHBvc2l0aW9uOyAvLyBwZXJjZW50YWdlIG9yIGxlbmd0aAorICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29sb3I7CisgICAgQ29sb3IgcmVzb2x2ZWRDb2xvcjsKIH07CiAKK2lubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIGEsIGNvbnN0IENT
U0dyYWRpZW50Q29sb3JTdG9wJiBiKQoreworICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVQdHIo
YS5jb2xvciwgYi5jb2xvcikgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKGEucG9zaXRpb24sIGIucG9z
aXRpb24pOworfQorCiBjbGFzcyBDU1NHcmFkaWVudFZhbHVlIDogcHVibGljIENTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUgewogcHVibGljOgotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyRWxl
bWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYpOwotCi0gICAgdm9pZCBzZXRGaXJzdFgoUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX2ZpcnN0WCA9IFdURk1vdmUodmFsKTsgfQotICAg
IHZvaWQgc2V0Rmlyc3RZKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9maXJz
dFkgPSBXVEZNb3ZlKHZhbCk7IH0KLSAgICB2b2lkIHNldFNlY29uZFgoUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiYmIHZhbCkgeyBtX3NlY29uZFggPSBXVEZNb3ZlKHZhbCk7IH0KLSAgICB2b2lk
IHNldFNlY29uZFkoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX3NlY29uZFkg
PSBXVEZNb3ZlKHZhbCk7IH0KLQotICAgIHZvaWQgYWRkU3RvcChjb25zdCBDU1NHcmFkaWVudENv
bG9yU3RvcCYgc3RvcCkgeyBtX3N0b3BzLmFwcGVuZChzdG9wKTsgfQorICAgIHZvaWQgc2V0Rmly
c3RYKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkgeyBtX2ZpcnN0WCA9IFdURk1v
dmUodmFsdWUpOyB9CisgICAgdm9pZCBzZXRGaXJzdFkoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiYmIHZhbHVlKSB7IG1fZmlyc3RZID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFNl
Y29uZFgoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fc2Vjb25kWCA9IFdU
Rk1vdmUodmFsdWUpOyB9CisgICAgdm9pZCBzZXRTZWNvbmRZKFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4mJiB2YWx1ZSkgeyBtX3NlY29uZFkgPSBXVEZNb3ZlKHZhbHVlKTsgfQorICAgIHZvaWQg
YWRkU3RvcChDU1NHcmFkaWVudENvbG9yU3RvcCYmIHN0b3ApIHsgbV9zdG9wcy5hcHBlbmQoV1RG
TW92ZShzdG9wKSk7IH0KICAgICB2b2lkIGRvbmVBZGRpbmdTdG9wcygpIHsgbV9zdG9wcy5zaHJp
bmtUb0ZpdCgpOyB9Ci0KLSAgICB1bnNpZ25lZCBzdG9wQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X3N0b3BzLnNpemUoKTsgfQotCi0gICAgdm9pZCBzb3J0U3RvcHNJZk5lZWRlZCgpOwotCi0gICAg
Ym9vbCBpc1JlcGVhdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwZWF0aW5nOyB9CisgICAgYm9v
bCBoYXNBdExlYXN0VHdvU3RvcHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BzLnNpemUoKSA+PSAy
OyB9CisgICAgdm9pZCByZXNvbHZlUkdCQ29sb3JzKCk7CiAKICAgICBDU1NHcmFkaWVudFR5cGUg
Z3JhZGllbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudFR5cGU7IH0KIAotICAgIGJv
b2wgaXNGaXhlZFNpemUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIEZsb2F0U2l6ZSBm
aXhlZFNpemUoY29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0IHsgcmV0dXJuIEZsb2F0U2l6ZSgp
OyB9Ci0KLSAgICBib29sIGlzUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
UmVmUHRyPEltYWdlPiBpbWFnZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmxvYXRTaXplJik7CiAg
ICAgYm9vbCBrbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0OwogCi0g
ICAgdm9pZCBsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zJikgeyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRml4ZWRT
aXplKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMgRmxvYXRTaXplIGZpeGVkU2l6ZShj
b25zdCBSZW5kZXJFbGVtZW50JikgeyByZXR1cm4gRmxvYXRTaXplKCk7IH0KKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNQZW5kaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMg
dm9pZCBsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VM
b2FkZXJPcHRpb25zJikgeyB9CisKICAgICBSZWY8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRX
aXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOwotICAgIHZvaWQgcmVzb2x2
ZVJHQkNvbG9ycygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTR3JhZGllbnRWYWx1ZShDbGFzc1R5
cGUgY2xhc3NUeXBlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXQsIENTU0dyYWRpZW50VHlwZSBn
cmFkaWVudFR5cGUpCkBAIC0xMDEsNDEgKzg4LDQzIEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAg
fQogCi0gICAgQ1NTR3JhZGllbnRWYWx1ZShjb25zdCBDU1NHcmFkaWVudFZhbHVlJiBvdGhlciwg
Q2xhc3NUeXBlIGNsYXNzVHlwZSwgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKKyAgICBD
U1NHcmFkaWVudFZhbHVlKGNvbnN0IENTU0dyYWRpZW50VmFsdWUmIG90aGVyLCBDbGFzc1R5cGUg
Y2xhc3NUeXBlKQogICAgICAgICA6IENTU0ltYWdlR2VuZXJhdG9yVmFsdWUoY2xhc3NUeXBlKQog
ICAgICAgICAsIG1fZmlyc3RYKG90aGVyLm1fZmlyc3RYKQogICAgICAgICAsIG1fZmlyc3RZKG90
aGVyLm1fZmlyc3RZKQogICAgICAgICAsIG1fc2Vjb25kWChvdGhlci5tX3NlY29uZFgpCiAgICAg
ICAgICwgbV9zZWNvbmRZKG90aGVyLm1fc2Vjb25kWSkKICAgICAgICAgLCBtX3N0b3BzKG90aGVy
Lm1fc3RvcHMpCi0gICAgICAgICwgbV9zdG9wc1NvcnRlZChvdGhlci5tX3N0b3BzU29ydGVkKQot
ICAgICAgICAsIG1fZ3JhZGllbnRUeXBlKGdyYWRpZW50VHlwZSkKKyAgICAgICAgLCBtX2dyYWRp
ZW50VHlwZShvdGhlci5tX2dyYWRpZW50VHlwZSkKICAgICAgICAgLCBtX3JlcGVhdGluZyhvdGhl
ci5tX3JlcGVhdGluZykKKyAgICAgICAgLCBtX2hhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50KG90
aGVyLm1faGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQpCiAgICAgewogICAgIH0KIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEdyYWRpZW50QWRhcHRlcj4KLSAgICBHcmFkaWVudDo6Q29sb3JTdG9w
VmVjdG9yIGNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBl
YXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYWRpZW50QWRhcHRlcj4gR3JhZGllbnQ6OkNv
bG9yU3RvcFZlY3RvciBjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgZmxvYXQgbWF4TGVuZ3Ro
Rm9yUmVwZWF0KTsKIAotICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2
YWx1ZXMuCi0gICAgRmxvYXRQb2ludCBjb21wdXRlRW5kUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUq
LCBDU1NQcmltaXRpdmVWYWx1ZSosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBj
b25zdCBGbG9hdFNpemUmKTsKKyAgICBhdXRvIGZpcnN0WCgpIGNvbnN0IHsgcmV0dXJuIG1fZmly
c3RYLmdldCgpOyB9CisgICAgYXV0byBmaXJzdFkoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0WS5n
ZXQoKTsgfQorICAgIGF1dG8gc2Vjb25kWCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vjb25kWC5nZXQo
KTsgfQorICAgIGF1dG8gc2Vjb25kWSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vjb25kWS5nZXQoKTsg
fQorICAgIGF1dG8mIHN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQorICAgIGJvb2wg
aXNSZXBlYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX3JlcGVhdGluZzsgfQorCisgICAgYm9vbCBl
cXVhbHMoY29uc3QgQ1NTR3JhZGllbnRWYWx1ZSYpIGNvbnN0OwogCitwcml2YXRlOgorICAgIGJv
b2wgaGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQoKSBjb25zdDsKICAgICBib29sIGlzQ2FjaGVh
YmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB3cml0ZUNvbG9yU3RvcChTdHJpbmdCdWlsZGVy
JiwgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmKSBjb25zdDsKIAotICAgIC8vIFBvaW50cy4g
U29tZSBvZiB0aGVzZSBtYXkgYmUgbnVsbC4KICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IG1fZmlyc3RYOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdFk7Ci0KICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fc2Vjb25kWDsKICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IG1fc2Vjb25kWTsKLQotICAgIC8vIFN0b3BzCiAgICAgVmVjdG9yPENTU0dy
YWRpZW50Q29sb3JTdG9wLCAyPiBtX3N0b3BzOwotICAgIGJvb2wgbV9zdG9wc1NvcnRlZCB7IGZh
bHNlIH07CiAgICAgQ1NTR3JhZGllbnRUeXBlIG1fZ3JhZGllbnRUeXBlOwogICAgIGJvb2wgbV9y
ZXBlYXRpbmcgeyBmYWxzZSB9OworCisgICAgbXV0YWJsZSBPcHRpb25hbDxib29sPiBtX2hhc0Nv
bG9yRGVyaXZlZEZyb21FbGVtZW50OwogfTsKIAogY2xhc3MgQ1NTTGluZWFyR3JhZGllbnRWYWx1
ZSBmaW5hbCA6IHB1YmxpYyBDU1NHcmFkaWVudFZhbHVlIHsKQEAgLTE0NSw3ICsxMzQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0xpbmVhckdyYWRpZW50VmFs
dWUocmVwZWF0LCBncmFkaWVudFR5cGUpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEFuZ2xlKFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9hbmdsZSA9IFdURk1vdmUodmFsKTsgfQor
ICAgIHZvaWQgc2V0QW5nbGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fYW5n
bGUgPSBXVEZNb3ZlKHZhbHVlKTsgfQogCiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25z
dDsKIApAQCAtMTY2LDcgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgQ1NTTGluZWFy
R3JhZGllbnRWYWx1ZShjb25zdCBDU1NMaW5lYXJHcmFkaWVudFZhbHVlJiBvdGhlcikKLSAgICAg
ICAgOiBDU1NHcmFkaWVudFZhbHVlKG90aGVyLCBMaW5lYXJHcmFkaWVudENsYXNzLCBvdGhlci5n
cmFkaWVudFR5cGUoKSkKKyAgICAgICAgOiBDU1NHcmFkaWVudFZhbHVlKG90aGVyLCBMaW5lYXJH
cmFkaWVudENsYXNzKQogICAgICAgICAsIG1fYW5nbGUob3RoZXIubV9hbmdsZSkKICAgICB7CiAg
ICAgfQpAQCAtMTg4LDE0ICsxNzcsMTQgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGN1c3RvbUNT
U1RleHQoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0Rmlyc3RSYWRpdXMoUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiYmIHZhbCkgeyBtX2ZpcnN0UmFkaXVzID0gV1RGTW92ZSh2YWwpOyB9Ci0gICAg
dm9pZCBzZXRTZWNvbmRSYWRpdXMoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBt
X3NlY29uZFJhZGl1cyA9IFdURk1vdmUodmFsKTsgfQorICAgIHZvaWQgc2V0Rmlyc3RSYWRpdXMo
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fZmlyc3RSYWRpdXMgPSBXVEZN
b3ZlKHZhbHVlKTsgfQorICAgIHZvaWQgc2V0U2Vjb25kUmFkaXVzKFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4mJiB2YWx1ZSkgeyBtX3NlY29uZFJhZGl1cyA9IFdURk1vdmUodmFsdWUpOyB9CiAK
LSAgICB2b2lkIHNldFNoYXBlKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9z
aGFwZSA9IFdURk1vdmUodmFsKTsgfQotICAgIHZvaWQgc2V0U2l6aW5nQmVoYXZpb3IoUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX3NpemluZ0JlaGF2aW9yID0gV1RGTW92ZSh2
YWwpOyB9CisgICAgdm9pZCBzZXRTaGFwZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFs
dWUpIHsgbV9zaGFwZSA9IFdURk1vdmUodmFsdWUpOyB9CisgICAgdm9pZCBzZXRTaXppbmdCZWhh
dmlvcihSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpIHsgbV9zaXppbmdCZWhhdmlv
ciA9IFdURk1vdmUodmFsdWUpOyB9CiAKLSAgICB2b2lkIHNldEVuZEhvcml6b250YWxTaXplKFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9lbmRIb3Jpem9udGFsU2l6ZSA9IFdU
Rk1vdmUodmFsKTsgfQotICAgIHZvaWQgc2V0RW5kVmVydGljYWxTaXplKFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9lbmRWZXJ0aWNhbFNpemUgPSBXVEZNb3ZlKHZhbCk7IH0K
KyAgICB2b2lkIHNldEVuZEhvcml6b250YWxTaXplKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4m
JiB2YWx1ZSkgeyBtX2VuZEhvcml6b250YWxTaXplID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICB2
b2lkIHNldEVuZFZlcnRpY2FsU2l6ZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUp
IHsgbV9lbmRWZXJ0aWNhbFNpemUgPSBXVEZNb3ZlKHZhbHVlKTsgfQogCiAgICAgLy8gQ3JlYXRl
IHRoZSBncmFkaWVudCBmb3IgYSBnaXZlbiBzaXplLgogICAgIFJlZjxHcmFkaWVudD4gY3JlYXRl
R3JhZGllbnQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYpOwpAQCAtMjA5LDcgKzE5
OCw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZShjb25z
dCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlJiBvdGhlcikKLSAgICAgICAgOiBDU1NHcmFkaWVudFZh
bHVlKG90aGVyLCBSYWRpYWxHcmFkaWVudENsYXNzLCBvdGhlci5ncmFkaWVudFR5cGUoKSkKKyAg
ICAgICAgOiBDU1NHcmFkaWVudFZhbHVlKG90aGVyLCBSYWRpYWxHcmFkaWVudENsYXNzKQogICAg
ICAgICAsIG1fZmlyc3RSYWRpdXMob3RoZXIubV9maXJzdFJhZGl1cykKICAgICAgICAgLCBtX3Nl
Y29uZFJhZGl1cyhvdGhlci5tX3NlY29uZFJhZGl1cykKICAgICAgICAgLCBtX3NoYXBlKG90aGVy
Lm1fc2hhcGUpCkBAIC0yNDgsNyArMjM3LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGN1c3Rv
bUNTU1RleHQoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0QW5nbGUoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYmIHZhbCkgeyBtX2FuZ2xlID0gV1RGTW92ZSh2YWwpOyB9CisgICAgdm9pZCBzZXRB
bmdsZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpIHsgbV9hbmdsZSA9IFdURk1v
dmUodmFsdWUpOyB9CiAKICAgICAvLyBDcmVhdGUgdGhlIGdyYWRpZW50IGZvciBhIGdpdmVuIHNp
emUuCiAgICAgUmVmPEdyYWRpZW50PiBjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiwgY29u
c3QgRmxvYXRTaXplJik7CkBAIC0yNTYsMTMgKzI0NSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBl
cXVhbHMoY29uc3QgQ1NTQ29uaWNHcmFkaWVudFZhbHVlJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0g
ICAgQ1NTQ29uaWNHcmFkaWVudFZhbHVlKENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdCkKKyAgICBl
eHBsaWNpdCBDU1NDb25pY0dyYWRpZW50VmFsdWUoQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0KQog
ICAgICAgICA6IENTU0dyYWRpZW50VmFsdWUoQ29uaWNHcmFkaWVudENsYXNzLCByZXBlYXQsIENT
U0NvbmljR3JhZGllbnQpCiAgICAgewogICAgIH0KIAogICAgIENTU0NvbmljR3JhZGllbnRWYWx1
ZShjb25zdCBDU1NDb25pY0dyYWRpZW50VmFsdWUmIG90aGVyKQotICAgICAgICA6IENTU0dyYWRp
ZW50VmFsdWUob3RoZXIsIENvbmljR3JhZGllbnRDbGFzcywgb3RoZXIuZ3JhZGllbnRUeXBlKCkp
CisgICAgICAgIDogQ1NTR3JhZGllbnRWYWx1ZShvdGhlciwgQ29uaWNHcmFkaWVudENsYXNzKQog
ICAgICAgICAsIG1fYW5nbGUob3RoZXIubV9hbmdsZSkKICAgICB7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
CmluZGV4IDI4MWJjY2U5MjhiZTYwOTBkZWY3ZDlmNjE2MjQ4ZDhiOWQ0NWZiNDEuLjIxZjk3MjIw
OTI5YmJiNmRkNDk5MzBjYWNjNmIxYWZkMGFmZjhiZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKQEAgLTEwMjEs
OSArMTAyMSw5IEBAIHN0YXRpYyBib29sIGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0
b3AoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU0dyCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgc3RvcC5tX3Bvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShwb3NpdGlvbiwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwot
ICAgIHN0b3AubV9jb2xvciA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoYXJn
cywgY3NzUGFyc2VyTW9kZSk7Ci0gICAgcmV0dXJuIHN0b3AubV9jb2xvciAmJiBhcmdzLmF0RW5k
KCk7CisgICAgc3RvcC5wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
VmFsdWUocG9zaXRpb24sIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICBzdG9wLmNvbG9y
ID0gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcihhcmdzLCBjc3NQYXJzZXJNb2Rl
KTsKKyAgICByZXR1cm4gc3RvcC5jb2xvciAmJiBhcmdzLmF0RW5kKCk7CiB9CiAKIHN0YXRpYyBS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQpAQCAtMTA0MSwxMSArMTA0
MSwxMSBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTUwogICAgIGF1dG8gcG9pbnQgPSBjb25zdW1l
RGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYXJncywgdHJ1ZSk7CiAgICAgaWYgKCFwb2ludCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmVzdWx0LT5zZXRGaXJzdFgocG9pbnQuY29weVJl
ZigpKTsKKyAgICByZXN1bHQtPnNldEZpcnN0WChXVEZNb3ZlKHBvaW50KSk7CiAgICAgcG9pbnQg
PSBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYXJncywgZmFsc2UpOwogICAgIGlmICgh
cG9pbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJlc3VsdC0+c2V0Rmlyc3RZKHBv
aW50LmNvcHlSZWYoKSk7CisgICAgcmVzdWx0LT5zZXRGaXJzdFkoV1RGTW92ZShwb2ludCkpOwog
CiAgICAgaWYgKCFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwNTUsMTcgKzEwNTUsMTcgQEAgc3RhdGljIFJlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBh
cmdzLCBDU1MKICAgICAgICAgYXV0byByYWRpdXMgPSBjb25zdW1lTnVtYmVyKGFyZ3MsIFZhbHVl
UmFuZ2VOb25OZWdhdGl2ZSk7CiAgICAgICAgIGlmICghcmFkaXVzIHx8ICFjb25zdW1lQ29tbWFJ
bmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KHJlc3VsdC5nZXQoKSktPnNl
dEZpcnN0UmFkaXVzKHJhZGl1cy5jb3B5UmVmKCkpOworICAgICAgICBkb3duY2FzdDxDU1NSYWRp
YWxHcmFkaWVudFZhbHVlPihyZXN1bHQuZ2V0KCkpLT5zZXRGaXJzdFJhZGl1cyhXVEZNb3ZlKHJh
ZGl1cykpOwogICAgIH0KIAogICAgIHBvaW50ID0gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFBv
aW50KGFyZ3MsIHRydWUpOwogICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJlc3VsdC0+c2V0U2Vjb25kWChwb2ludC5jb3B5UmVmKCkpOworICAgIHJlc3VsdC0+
c2V0U2Vjb25kWChXVEZNb3ZlKHBvaW50KSk7CiAgICAgcG9pbnQgPSBjb25zdW1lRGVwcmVjYXRl
ZEdyYWRpZW50UG9pbnQoYXJncywgZmFsc2UpOwogICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJlc3VsdC0+c2V0U2Vjb25kWShwb2ludC5jb3B5UmVmKCkpOwor
ICAgIHJlc3VsdC0+c2V0U2Vjb25kWShXVEZNb3ZlKHBvaW50KSk7CiAKICAgICAvLyBGb3IgcmFk
aWFsIGdyYWRpZW50cyBvbmx5LCB3ZSBub3cgZXhwZWN0IHRoZSBzZWNvbmQgcmFkaXVzLgogICAg
IGlmIChpc0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkgewpAQCAtMTA3NCwxNCArMTA3NCwxNCBA
QCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENTU1Bh
cnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTUwogICAgICAgICBhdXRvIHJhZGl1cyA9IGNvbnN1bWVO
dW1iZXIoYXJncywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgaWYgKCFyYWRpdXMp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFs
R3JhZGllbnRWYWx1ZT4ocmVzdWx0LmdldCgpKS0+c2V0U2Vjb25kUmFkaXVzKHJhZGl1cy5jb3B5
UmVmKCkpOworICAgICAgICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPihyZXN1bHQu
Z2V0KCkpLT5zZXRTZWNvbmRSYWRpdXMoV1RGTW92ZShyYWRpdXMpKTsKICAgICB9CiAKICAgICBD
U1NHcmFkaWVudENvbG9yU3RvcCBzdG9wOwogICAgIHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRp
bmdXaGl0ZXNwYWNlKGFyZ3MpKSB7CiAgICAgICAgIGlmICghY29uc3VtZURlcHJlY2F0ZWRHcmFk
aWVudENvbG9yU3RvcChhcmdzLCBzdG9wLCBjc3NQYXJzZXJNb2RlKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICByZXN1bHQtPmFkZFN0b3Aoc3RvcCk7CisgICAgICAgIHJl
c3VsdC0+YWRkU3RvcChXVEZNb3ZlKHN0b3ApKTsKICAgICB9CiAKICAgICByZXN1bHQtPmRvbmVB
ZGRpbmdTdG9wcygpOwpAQCAtMTA5OCwzOCArMTA5OCwzNCBAQCBzdGF0aWMgYm9vbCBjb25zdW1l
R3JhZGllbnRDb2xvclN0b3BzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJN
b2RlCiAgICAgYm9vbCBwcmV2aW91c1N0b3BXYXNDb2xvckhpbnQgPSB0cnVlOwogICAgIGRvIHsK
ICAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcDsKLSAgICAgICAgc3RvcC5tX2NvbG9y
ID0gY29uc3VtZUNvbG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAgc3RvcC5jb2xv
ciA9IGNvbnN1bWVDb2xvcihyYW5nZSwgY3NzUGFyc2VyTW9kZSk7CiAgICAgICAgIC8vIFR3byBo
aW50cyBpbiBhIHJvdyBhcmUgbm90IGFsbG93ZWQuCi0gICAgICAgIGlmICghc3RvcC5tX2NvbG9y
ICYmICghc3VwcG9ydHNDb2xvckhpbnRzIHx8IHByZXZpb3VzU3RvcFdhc0NvbG9ySGludCkpCisg
ICAgICAgIGlmICghc3RvcC5jb2xvciAmJiAoIXN1cHBvcnRzQ29sb3JIaW50cyB8fCBwcmV2aW91
c1N0b3BXYXNDb2xvckhpbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAK
LSAgICAgICAgcHJldmlvdXNTdG9wV2FzQ29sb3JIaW50ID0gIXN0b3AubV9jb2xvcjsKLSAgICAg
ICAgCi0gICAgICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogVGhpcyBib29sZWFuIGNvdWxkIGJlIHJl
bW92ZWQuIE51bGwgY2hlY2tpbmcgY29sb3Igd291bGQgYmUgc3VmZmljaWVudC4KLSAgICAgICAg
c3RvcC5pc01pZHBvaW50ID0gIXN0b3AubV9jb2xvcjsKKworICAgICAgICBwcmV2aW91c1N0b3BX
YXNDb2xvckhpbnQgPSAhc3RvcC5jb2xvcjsKIAogICAgICAgICBpZiAoaXNDb25pY0dyYWRpZW50
KQotICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY29uc3VtZUFuZ2xlT3JQZXJjZW50KHJh
bmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxsLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQp
OworICAgICAgICAgICAgc3RvcC5wb3NpdGlvbiA9IGNvbnN1bWVBbmdsZU9yUGVyY2VudChyYW5n
ZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY29uc3VtZUxlbmd0
aE9yUGVyY2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoIXN0b3AubV9jb2xvciAmJiAhc3RvcC5tX3Bvc2l0aW9uKQorICAgICAg
ICAgICAgc3RvcC5wb3NpdGlvbiA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIGNzc1Bh
cnNlck1vZGUsIFZhbHVlUmFuZ2VBbGwpOworCisgICAgICAgIGlmICghc3RvcC5jb2xvciAmJiAh
c3RvcC5wb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBncmFk
aWVudC5hZGRTdG9wKHN0b3ApOworICAgICAgICBncmFkaWVudC5hZGRTdG9wKFdURk1vdmUoc3Rv
cCkpOwogCi0gICAgICAgIGlmICghc3RvcC5tX2NvbG9yIHx8ICFzdG9wLm1fcG9zaXRpb24pCisg
ICAgICAgIGlmICghc3RvcC5jb2xvciB8fCAhc3RvcC5wb3NpdGlvbikKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHNlY29uZFN0b3A7CiAgICAg
ICAgIGlmIChpc0NvbmljR3JhZGllbnQpCi0gICAgICAgICAgICBzZWNvbmRTdG9wLm1fcG9zaXRp
b24gPSBjb25zdW1lQW5nbGVPclBlcmNlbnQocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFu
Z2VBbGwsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CisgICAgICAgICAgICBzZWNvbmRTdG9wLnBv
c2l0aW9uID0gY29uc3VtZUFuZ2xlT3JQZXJjZW50KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1
ZVJhbmdlQWxsLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzZWNvbmRTdG9wLm1fcG9zaXRpb24gPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdl
LCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxsKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChz
ZWNvbmRTdG9wLm1fcG9zaXRpb24pCi0gICAgICAgICAgICBncmFkaWVudC5hZGRTdG9wKHNlY29u
ZFN0b3ApOwotICAgICAgICAKKyAgICAgICAgICAgIHNlY29uZFN0b3AucG9zaXRpb24gPSBjb25z
dW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxsKTsK
KworICAgICAgICBpZiAoc2Vjb25kU3RvcC5wb3NpdGlvbikKKyAgICAgICAgICAgIGdyYWRpZW50
LmFkZFN0b3AoV1RGTW92ZShzZWNvbmRTdG9wKSk7CiAgICAgfSB3aGlsZSAoY29uc3VtZUNvbW1h
SW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOwogCiAgICAgZ3JhZGllbnQuZG9uZUFkZGluZ1N0
b3BzKCk7CkBAIC0xMTM5LDI5ICsxMTM1LDIzIEBAIHN0YXRpYyBib29sIGNvbnN1bWVHcmFkaWVu
dENvbG9yU3RvcHMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gTXVzdCBoYXZlIDIgb3IgbW9yZSBzdG9wcyB0
byBiZSB2YWxpZC4KLSAgICByZXR1cm4gZ3JhZGllbnQuc3RvcENvdW50KCkgPj0gMjsKKyAgICBy
ZXR1cm4gZ3JhZGllbnQuaGFzQXRMZWFzdFR3b1N0b3BzKCk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NHcmFkaWVudFJlcGVh
dCByZXBlYXRpbmcpCiB7Ci0gICAgUmVmUHRyPENTU1JhZGlhbEdyYWRpZW50VmFsdWU+IHJlc3Vs
dCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1ByZWZpeGVk
UmFkaWFsR3JhZGllbnQpOworICAgIGF1dG8gcmVzdWx0ID0gQ1NTUmFkaWFsR3JhZGllbnRWYWx1
ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUHJlZml4ZWRSYWRpYWxHcmFkaWVudCk7CisKICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclg7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjZW50ZXJZOwogICAgIGNvbnN1bWVPbmVPclR3b1ZhbHVlZFBvc2l0aW9uKGFyZ3Ms
IGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgY2VudGVyWCwgY2VudGVyWSk7
CiAgICAgaWYgKChjZW50ZXJYIHx8IGNlbnRlclkpICYmICFjb25zdW1lQ29tbWFJbmNsdWRpbmdX
aGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJlc3VsdC0+
c2V0Rmlyc3RYKGNlbnRlclguY29weVJlZigpKTsKLSAgICByZXN1bHQtPnNldEZpcnN0WShjZW50
ZXJZLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRYKGNlbnRlclguY29weVJlZigp
KTsKLSAgICByZXN1bHQtPnNldFNlY29uZFkoY2VudGVyWS5jb3B5UmVmKCkpOwotCiAgICAgYXV0
byBzaGFwZSA9IGNvbnN1bWVJZGVudDxDU1NWYWx1ZUNpcmNsZSwgQ1NTVmFsdWVFbGxpcHNlPihh
cmdzKTsKICAgICBhdXRvIHNpemVLZXl3b3JkID0gY29uc3VtZUlkZW50PENTU1ZhbHVlQ2xvc2Vz
dFNpZGUsIENTU1ZhbHVlQ2xvc2VzdENvcm5lciwgQ1NTVmFsdWVGYXJ0aGVzdFNpZGUsIENTU1Zh
bHVlRmFydGhlc3RDb3JuZXIsIENTU1ZhbHVlQ29udGFpbiwgQ1NTVmFsdWVDb3Zlcj4oYXJncyk7
CiAgICAgaWYgKCFzaGFwZSkKICAgICAgICAgc2hhcGUgPSBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVD
aXJjbGUsIENTU1ZhbHVlRWxsaXBzZT4oYXJncyk7Ci0gICAgcmVzdWx0LT5zZXRTaGFwZShzaGFw
ZS5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0U2l6aW5nQmVoYXZpb3Ioc2l6ZUtleXdvcmQu
Y29weVJlZigpKTsKIAogICAgIC8vIE9yLCB0d28gbGVuZ3RocyBvciBwZXJjZW50YWdlcwogICAg
IGlmICghc2hhcGUgJiYgIXNpemVLZXl3b3JkKSB7CkBAIC0xMTcyLDE2ICsxMTYyLDI0IEBAIHN0
YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgYXJnCiAgICAgICAgICAgICBpZiAoIXZlcnRpY2FsU2l6ZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGNvbnN1bWVDb21tYUlu
Y2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEVuZEhvcml6
b250YWxTaXplKGhvcml6b250YWxTaXplLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICByZXN1bHQt
PnNldEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29weVJlZigpKTsKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0RW5kSG9yaXpvbnRhbFNpemUoV1RGTW92ZShob3Jpem9udGFsU2l6ZSkpOwor
ICAgICAgICAgICAgcmVzdWx0LT5zZXRFbmRWZXJ0aWNhbFNpemUoV1RGTW92ZSh2ZXJ0aWNhbFNp
emUpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN1bWVDb21tYUluY2x1
ZGluZ1doaXRlc3BhY2UoYXJncyk7CiAgICAgfQotICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29s
b3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCAqcmVzdWx0KSkKKworICAgIGlmICghY29uc3Vt
ZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCByZXN1bHQpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0LT5zZXRG
aXJzdFgoY2VudGVyWC5jb3B5UmVmKCkpOworICAgIHJlc3VsdC0+c2V0Rmlyc3RZKGNlbnRlclku
Y29weVJlZigpKTsKKyAgICByZXN1bHQtPnNldFNlY29uZFgoV1RGTW92ZShjZW50ZXJYKSk7Cisg
ICAgcmVzdWx0LT5zZXRTZWNvbmRZKFdURk1vdmUoY2VudGVyWSkpOworICAgIHJlc3VsdC0+c2V0
U2hhcGUoV1RGTW92ZShzaGFwZSkpOworICAgIHJlc3VsdC0+c2V0U2l6aW5nQmVoYXZpb3IoV1RG
TW92ZShzaXplS2V5d29yZCkpOworCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAog
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRv
a2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTR3JhZGllbnRS
ZXBlYXQgcmVwZWF0aW5nKQpAQCAtMTI0MiwxMSArMTI0MCw2IEBAIHN0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBD
U1NQYXJzCiAgICAgICAgIHx8ICh2ZXJ0aWNhbFNpemUgJiYgdmVydGljYWxTaXplLT5pc0NhbGN1
bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXN1bHQtPnNldFNoYXBlKHNoYXBlLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRT
aXppbmdCZWhhdmlvcihzaXplS2V5d29yZC5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0RW5k
SG9yaXpvbnRhbFNpemUoaG9yaXpvbnRhbFNpemUuY29weVJlZigpKTsKLSAgICByZXN1bHQtPnNl
dEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29weVJlZigpKTsKLQogICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY2VudGVyWDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNlbnRlclk7CiAgICAgaWYgKGFyZ3MucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVBdCkgewpAQCAt
MTI2Nyw2ICsxMjYwLDEyIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVSYWRpYWxH
cmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQ
YXJzZXJNb2RlLCAqcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXN1
bHQtPnNldFNoYXBlKFdURk1vdmUoc2hhcGUpKTsKKyAgICByZXN1bHQtPnNldFNpemluZ0JlaGF2
aW9yKFdURk1vdmUoc2l6ZUtleXdvcmQpKTsKKyAgICByZXN1bHQtPnNldEVuZEhvcml6b250YWxT
aXplKFdURk1vdmUoaG9yaXpvbnRhbFNpemUpKTsKKyAgICByZXN1bHQtPnNldEVuZFZlcnRpY2Fs
U2l6ZShXVEZNb3ZlKHZlcnRpY2FsU2l6ZSkpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTI5MCw4ICsxMjg5LDggQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVh
ckdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnMKICAgICAgICAgICAg
IGVuZFggPSBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVMZWZ0LCBDU1NWYWx1ZVJpZ2h0PihhcmdzKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RYKGVuZFguY29weVJlZigpKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkoZW5kWS5jb3B5UmVmKCkpOworICAgICAgICByZXN1
bHQtPnNldEZpcnN0WChXVEZNb3ZlKGVuZFgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFko
V1RGTW92ZShlbmRZKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZXhwZWN0Q29tbWEgPSBmYWxz
ZTsKICAgICB9CkBAIC0xMzE0LDcgKzEzMTMsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lQ29uaWNHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZQog
ICAgICAgICAgICAgYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZShhcmdzLCBjb250ZXh0Lm1vZGUs
IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiAgICAgICAgICAgICBpZiAoIWFuZ2xlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShh
bmdsZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoV1RG
TW92ZShhbmdsZSkpOwogICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMTMyOSw4ICsxMzI4LDggQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZUNvbmljR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2UK
ICAgICAgICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RZKGNlbnRlclkuY29weVJlZigpKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gUmlnaHQgbm93LCBjb25pYyBncmFkaWVudHMgaGF2ZSB0
aGUgc2FtZSBzdGFydCBhbmQgZW5kIGNlbnRlcnMuCi0gICAgICAgICAgICByZXN1bHQtPnNldFNl
Y29uZFgoY2VudGVyWC5jb3B5UmVmKCkpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRTZWNvbmRZ
KGNlbnRlclkuY29weVJlZigpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U2Vjb25kWChXVEZN
b3ZlKGNlbnRlclgpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U2Vjb25kWShXVEZNb3ZlKGNl
bnRlclkpKTsKICAgICAKICAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggNWQwOGU5ZTQ5
NDVlMmQ5M2NkYjhkY2EyMDVmYzAzMzFjYmVmZjhmMS4uZjhjNGRjYzQxNGEyN2IxODEwY2FhNDhk
MWZhZTU1OWZhMTc0NTdjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCkBAIC0yMDU1LDE5ICsyMDU1LDE5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1dEVs
ZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlRm9yQmluZGluZ3MoaW50IHN0YXJ0LCBpbnQKIHN0YXRp
YyBSZWY8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4gYXV0b0ZpbGxTdHJvbmdQYXNzd29yZE1hc2tJ
bWFnZSgpCiB7CiAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3AgZmlyc3RTdG9wOwotICAgIGZpcnN0
U3RvcC5tX2NvbG9yID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVDb2xvclZhbHVl
KENvbG9yOjpibGFjayk7Ci0gICAgZmlyc3RTdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDUwLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0Up
OworICAgIGZpcnN0U3RvcC5jb2xvciA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
Q29sb3JWYWx1ZShDb2xvcjo6YmxhY2spOworICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoNTAsIENTU1VuaXRUeXBlOjpDU1NfUEVS
Q0VOVEFHRSk7CiAKICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzZWNvbmRTdG9wOwotICAgIHNl
Y29uZFN0b3AubV9jb2xvciA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JW
YWx1ZShDb2xvcjo6dHJhbnNwYXJlbnQpOwotICAgIHNlY29uZFN0b3AubV9wb3NpdGlvbiA9IENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoMTAwLCBDU1NVbml0VHlwZTo6Q1NT
X1BFUkNFTlRBR0UpOworICAgIHNlY29uZFN0b3AuY29sb3IgPSBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBzZWNvbmRT
dG9wLnBvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgxMDAs
IENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CiAKICAgICBhdXRvIGdyYWRpZW50ID0gQ1NT
TGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKENTU0dyYWRpZW50UmVwZWF0OjpOb25SZXBlYXRp
bmcsIENTU0dyYWRpZW50VHlwZTo6Q1NTTGluZWFyR3JhZGllbnQpOwogICAgIGdyYWRpZW50LT5z
ZXRBbmdsZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDkwLCBDU1NVbml0
VHlwZTo6Q1NTX0RFRykpOwotICAgIGdyYWRpZW50LT5hZGRTdG9wKGZpcnN0U3RvcCk7Ci0gICAg
Z3JhZGllbnQtPmFkZFN0b3Aoc2Vjb25kU3RvcCk7CisgICAgZ3JhZGllbnQtPmFkZFN0b3AoV1RG
TW92ZShmaXJzdFN0b3ApKTsKKyAgICBncmFkaWVudC0+YWRkU3RvcChXVEZNb3ZlKHNlY29uZFN0
b3ApKTsKKyAgICBncmFkaWVudC0+ZG9uZUFkZGluZ1N0b3BzKCk7CiAgICAgZ3JhZGllbnQtPnJl
c29sdmVSR0JDb2xvcnMoKTsKLQogICAgIHJldHVybiBncmFkaWVudDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392108</attachid>
            <date>2020-03-01 16:38:37 -0800</date>
            <delta_ts>2020-03-01 18:56:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208417-20200301163833.patch</filename>
            <type>text/plain</type>
            <size>74400</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3Njk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTA5NjRjY2E3NDAzNTZj
MDlmMWI2ZTI4Njc2MjcxOTFiYjc5ZjJmNS4uZTJmZjFkZjRkYzk5Mjg0YmQ0MDYzMWNjYjYxYTNk
YjljNmY1NmE1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAyMC0wMi0yOSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgZ3JhZGllbnQg
cGFyc2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA4NDE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAg
IC0gVXNlIE9wdGlvbmFsPD4gYW5kIGludmFsaWQgQ29sb3IgdG8gcmVwcmVzZW50IHVuc3BlY2lm
aWVkIHBvc2l0aW9ucyBhbmQgY29sb3JzLgorICAgICAgICAgIFRoaXMgaXMgc2ltcGxlciBhbmQg
ZWFzaWVyIHRvIGdldCByaWdodCB0aGFuIHNlcGFyYXRlIGJvb2xlYW5zLgorICAgICAgICAtIFNp
bXBsaWZpZWQgc29ydGluZyBvZiBzdG9wcyBpbiBsZWdhY3kgZ3JhZGllbnRzIHRvIHJlbW92ZSBl
eHRyYSBDU1MgdmFsdWUKKyAgICAgICAgICBldmFsdWF0aW9uIGFuZCB1bm5lY2Vzc2FyeSAic29y
dCBpbiBwbGFjZSIgdGVjaG5pcXVlLgorICAgICAgICAtIFJld3JvdGUgZXF1YWxzIGZ1bmN0aW9u
cyBmb3IgQ1NTIGdyYWRpZW50IHZhbHVlIGNsYXNzZXMuIFRoZSBuZXcgcGF0dGVybiBpcworICAg
ICAgICAgIHRvIGNvbXBhcmUgYWxsIHRoZSBkYXRhIG1lbWJlcnMgdGhhdCBob2xkIHBhcnNlZCBD
U1MgZGF0YSwgaGFuZGxpbmcgbnVsbAorICAgICAgICAgIGNvcnJlY3RseSwgc2luY2UgdGhlIHBh
cnNlciB3b24ndCBzZXQgaW5hcHByb3ByaWF0ZSBvbmVzLiBUaGUgb2xkIGNvZGUgaGFkCisgICAg
ICAgICAgY29tcGxleCBsb2dpYyB0byBvbmx5IGNvbXBhcmUgY2VydGFpbiBkYXRhIG1lbWJlcnMs
IHdoaWNoIHdhcyB1bm5lY2Vzc2FyeQorICAgICAgICAgIGFuZCBoYXJkIHRvIHJlYWQgdG8gdGVs
bCBpZiBpdCB3YXMgY29ycmVjdC4KKyAgICAgICAgLSBBZGRlZCBzb21lIG1vcmUgdXNlIG9mIFdU
Rk1vdmUgdG8gY3V0IGRvd24gb24gcmVmZXJlbmNlIGNvdW50IGNodXJuLgorCisgICAgICAgICog
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRW
YWx1ZTo6aW1hZ2UpOiBSZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gZ2V0KCkuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlU3RvcHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3Jh
ZGllbnRWYWx1ZTo6c29ydFN0b3BzSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6cmVzb2x2ZVN0b3BDb2xvcnMpOiBUYWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdl
IGtub3cgYmVjYXVzZQorICAgICAgICBvZiBwYXJzaW5nIHJ1bGVzIHRoYXQgdGhlIG9ubHkgc3Rv
cHMgd2l0aG91dCBjb2xvcnMgYXJlIG1pZHBvaW50cyB0byBkcmFzdGljYWxseQorICAgICAgICBz
aW1wbGlmeSB0aGlzIGZ1bmN0aW9uIHRvIGEgdHJpdmlhbCBsb29wLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTR3JhZGllbnRWYWx1ZTo6aGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQgY29uc3QpOiBB
ZGRlZC4KKyAgICAgICAgQ2hlY2tzIHRvIHNlZSBpZiBhbnkgb2YgdGhlIHN0b3AgY29sb3JzIGlz
IGRlcml2ZWQgZnJvbSB0aGUgZWxlbWVudC4gVGhlIG9sZAorICAgICAgICBjb2RlIGNvbmZ1c2lu
Z2x5IHdvdWxkIHN0b3JlIHRoZSBhbnN3ZXIgdG8gdGhpcyBpbiB0aGUgc3RvcCwgYnV0IG9ubHkg
aW4gdGhlCisgICAgICAgIGZpcnN0IHN0b3Agd2l0aCB0aGlzIHByb3BlcnR5LiBDb21wdXRpbmcg
aXQgd2l0aG91dCBtb2RpZnlpbmcgdGhlIHN0b3AsIGFuZAorICAgICAgICBtZW1vaXppbmcgaXQg
aW4gdGhlIGdyYWRpZW50IHByZXNlcnZlcyB0aGUgc2FtZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJp
c3RpY3MKKyAgICAgICAgYXMgYmVmb3JlIHdpdGhvdXQgcmVxdWlyaW5nIGEgYm9vbGVhbiBpbiBl
YWNoIHN0b3AgaW4gdGhlIHN0b3BzIHZlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRp
ZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKTogQ2FsbCB0aGUgbmV3CisgICAg
ICAgIGhhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50IGZ1bmN0aW9uIGluc3RlYWQgb2YgaGF2aW5n
IHRoZSBsb2dpYyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6TGluZWFyR3JhZGllbnRBZGFwdGVy
Ojpub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNpZGVSYW5nZSk6CisgICAgICAgIFVwZGF0
ZSBzaW5jZSBHcmFkaWVudFN0b3Agbm93IGhhcyBvcHRpb25hbCBvZmZzZXRzLiBCeSB0aGUgdGlt
ZSB0aGlzCisgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCB0aGV5IGFyZSBhbGwgZ3VhcmFudGVl
ZCB0byBiZSBmaWxsZWQgaW4sIHNvIHdlIGNhbgorICAgICAgICBqdXN0IHVzZSB0aGUgKiBvcGVy
YXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlJhZGlhbEdyYWRpZW50QWRhcHRlcjo6bm9ybWFsaXpl
U3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UpOgorICAgICAgICBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbmljR3JhZGllbnRBZGFwdGVyOjpub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50
c091dHNpZGVSYW5nZSk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3Jh
ZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKTogTW92ZWQgdGhlIHNvcnRpbmcgb2Ygc3RvcHMgZm9y
CisgICAgICAgIHRoZSBkZXByZWNhdGVkIGdyYWRpZW50cyBoZXJlLiBBbHNvIHVwZGF0ZWQgc2lu
Y2UgR3JhZGllbnQ6OkNvbG9yU3RvcAorICAgICAgICBubyBsb25nZXIgdXNlcyAibV8iIHByZWZp
eGVzIG9uIGl0cyBwdWJsaWMgc3RydWN0IGRhdGEgbWVtYmVycy4gU29tZQorICAgICAgICBzaW1w
bGlmaWNhdGlvbiBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0ICJz
cGVjaWZpZWQiCisgICAgICAgIHRvIHRydWUgc2luY2UgaXQncyBubyBsb25nZXIgYSBzZXBhcmF0
ZSBib29sZWFuLgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gcm9tVmFsdWUpOiBIYW5kbGUg
YSBudWxsIHBvaW50ZXIgZm9yIHZhbHVlIGJ5IHJldHVybmluZworICAgICAgICAwLCB3aGljaCBp
cyB3aGF0IHRoZSBjYWxsZXIgd2FzIGRvaW5nIGV4cGxpY2l0bHkgYmVmb3JlLiBVc2UgZmxvYXQK
KyAgICAgICAgaW5zdGVhZCBvZiBpbnQgZm9yIHNvbWUgaW50ZXJuYWwgY29tcHV0YXRpb25zIHRo
YXQgd2VyZSBtaXhpbmcgdGhlIHR3bworICAgICAgICBmb3Igbm8gZ29vZCByZWFzb24uCisgICAg
ICAgIChXZWJDb3JlOjpjb21wdXRlRW5kUG9pbnQpOiBSZW1vdmVkIG51bGwgY2hlY2tzIG5vdyB0
aGF0IHBvc2l0aW9uRnJvbVZhbHVlCisgICAgICAgIGRvZXMgdGhlbSBmb3IgdXMsIHR1cm5pbmcg
dGhpcyBpbnRvIGEgb25lLWxpbmVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1
ZTo6aXNDYWNoZWFibGUgY29uc3QpOiBVc2UgaGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjprbm93blRvQmVPcGFxdWUgY29uc3Qp
OiBSZW1vdmVkIHVubm5lY2Vzc2FyeQorICAgICAgICBjaGVja2luZyB0aGUgY29sb3IgYm90aCBi
ZWZvcmUgYW5kIGFmdGVyIHdoZW4gYSBjb2xvciBmaWx0ZXIgaXMgaW52b2x2ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjplcXVhbHMgY29uc3QpOiBBZGRlZC4gU2hhcmVk
IGJ5IGFsbCB0aGUgZXF1YWxzCisgICAgICAgIGZ1bmN0aW9ucyBmb3IgZGVyaXZlZCBjbGFzc2Vz
LgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kR3JhZGllbnRTdG9wcyk6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgdG8gQ1NTR3JhZGllbnRDb2xvclN0b3AuCisgICAgICAgIChXZWJDb3JlOjphcHBlbmRT
cGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dCk6IEFkZGVkIHRlbXBsYXRlIGhlbHBlcgor
ICAgICAgICBmb3Igd3JpdGluZyB0d28gb3B0aW9uYWwgQ1NTIHZhbHVlcyB3aXRoIGEgc3BhY2Ug
YmV0d2Vlbi4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQ29sb3JTdG9wKTogRGl0dG8uIEFsc28g
Y29udmVydGVkIHRvIG5vbi1tZW1iZXIgZnVuY3Rpb24sCisgICAgICAgIHJlbW92ZWQgdW5uZWVk
ZWQgaXNNaWRwb2ludCBjaGVjaywgdXNlIGFwcGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQ
dHJUZXh0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3VzdG9t
Q1NTVGV4dCBjb25zdCk6IENhbGwgZnVuY3Rpb24KKyAgICAgICAgbWVtYmVycyBzbyB3ZSBkb24n
dCBoYXZlIHRvIGV4cG9zZSBDU1NHcmFkaWVudFZhbHVlIGRhdGEgbWVtYmVycyBhcworICAgICAg
ICBwcm90ZWN0ZWQgdGhpbmdzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IGRlcml2ZWQgY2xhc3Nl
cy4gU29tZSBvdGhlcgorICAgICAgICBzbWFsbCByZWZhY3RvcmluZywgc3VjaCBhcyBnZXR0aW5n
IHJpZCBvZiBleHRyYSBib29sZWFuIHdyb3RlRmlyc3RTdG9wLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBVcGRhdGVkIHRvIHVzZQor
ICAgICAgICBmdW5jdGlvbiBtZW1iZXJzIGluc3RlYWQgb2YgcHJvdGVjdGVkIGRhdGEgbWVtYmVy
cy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0xpbmVhckdyYWRpZW50VmFsdWU6OmVxdWFscyBjb25z
dCk6IENvbXBhcmUgYWxsIGRhdGEKKyAgICAgICAgbWVtYmVycyBhbmQgdXNlIENTU0dyYWRpZW50
VmFsdWU6OmVxdWFscywgbWFrZXMgdGhpcyBhIDEtbGluZXIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0IGNvbnN0KTogQ2FsbCBmdW5jdGlv
bgorICAgICAgICBtZW1iZXJzIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgdXNlIGFwcGVuZFNwYWNl
U2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUmFkaWFs
R3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmVxdWFscyBjb25zdCk6IENvbXBhcmUgYWxsIGRhdGEK
KyAgICAgICAgbWVtYmVycyBhbmQgdXNlIENTU0dyYWRpZW50VmFsdWU6OmVxdWFscy4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6
IENhbGwgZnVuY3Rpb24KKyAgICAgICAgbWVtYmVycyBhcyBkZXNjcmliZWQgYWJvdmUgYW5kIHVz
ZSBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6ZXF1YWxzIGNvbnN0KTogQ29tcGFy
ZSBhbGwgZGF0YQorICAgICAgICBtZW1iZXJzIGFuZCB1c2UgQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1
YWxzLCBtYWtlcyB0aGlzIGEgMS1saW5lci4KKworICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZh
bHVlLmg6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25z
LgorICAgICAgICBSZW5hbWVkIENTU0dyYWRpZW50Q29sb3JTdG9wIGRhdGEgbWVtYmVycyB0byBu
b3QgdXNlIG1fIHByZWZpeCBzaW5jZSB0aGlzIGlzCisgICAgICAgIGEgc3RydWN0IHdpdGggcHVi
bGljIGRhdGEgbWVtYmVycywgYW5kIFdlYktpdCBzdHlsZSBzYXlzIG5vdCB0byBkbyB0aGF0IGhl
cmUuCisgICAgICAgIFJlbW92ZWQgbV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50IGFuZCBpc01p
ZHBvaW50IGZyb20gQ1NTR3JhZGllbnRDb2xvclN0b3AsCisgICAgICAgIG1fY29sb3JJc0Rlcml2
ZWRGcm9tRWxlbWVudCBpcyBub3cgc3RvcmVkIGluIHRoZSBncmFkaWVudCwgbm90IHRoZSBjb2xv
ciBzdG9wLAorICAgICAgICBhbmQgbWlkcG9pbnRzIGFyZSBhbnkgY29sb3Igc3RvcCB3aXRoIG51
bGwgY29sb3IuIFJlcGxhY2VkIHRoZQorICAgICAgICBDU1NHcmFkaWVudFZhbHVlOjpzdG9wQ291
bnQgZnVuY3Rpb24sIHdoaWNoIG1peGVkIHNpemVfdCBhbmQgdW5zaWduZWQgdHlwZXMsCisgICAg
ICAgIHdpdGggYSBoYXNUd29TdG9wcyBmdW5jdGlvbiwgd2hpY2ggaXMgYWxsIHRoZSBjYWxsZXIg
bmVlZHMuIENvbnZlcnRlZCB0aGUKKyAgICAgICAgaXNGaXhlZFNpemUsIGZpeGVkU2l6ZSwgaXNQ
ZW5kaW5nLCBhbmQgbG9hZFN1YmltYWdlcyBpbnRvIHN0YXRpYyBtZW1iZXIKKyAgICAgICAgZnVu
Y3Rpb25zOiB0aGV5IGRvbid0IGRvIGFueSB3b3JrIGFuZCBzbyBkb24ndCBuZWVkIGFuIGluc3Rh
bmNlLiBSZW1vdmVkCisgICAgICAgIHRoZSB1bm5lZWRlZCBncmFkaWVudCB0eXBlIGFyZ3VtZW50
IHRvIHRoZSBjbG9uaW5nIGNvbnN0cnVjdG9ycy4gUmVtb3ZlZAorICAgICAgICBtX3N0b3BzU29y
dGVkIGFuZCBhZGRlZCBtX2hhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50IGFuZAorICAgICAgICBo
YXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudC4gQWRkZWQgZ2V0dGVyIGZ1bmN0aW9ucyB0aGF0IGFy
ZSBwcm90ZWN0ZWQgc28KKyAgICAgICAgdGhlIGRhdGEgbWVtYmVycyB0aGVtc2VsdmVzIGNhbiBi
ZSBwcml2YXRlLiBSZW1vdmVkIHNvcnRTdG9wc0lmTmVlZGVkCisgICAgICAgIGFuZCB3cml0ZUNv
bG9yU3RvcC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcCk6CisgICAgICAgIFVwZGF0ZWQgZm9yIENTU0dy
YWRpZW50Q29sb3JTdG9wIG1lbWJlciByZW5hbWluZy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudCk6IFVzZQorICAg
ICAgICBtb3JlIFdURk1vdmUgdG8gc2F2ZSBhIGxpdHRsZSBiaXQgb2YgcmVmZXJlbmNlIGNvdW50
IGNodXJuOyBpbiBzb21lIGNhc2VzCisgICAgICAgIHRoYXQgbWVhbnMgbW92aW5nIHRoZSBzZXR0
ZXIgY2FsbHMgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gYWZ0ZXIgYWxsCisgICAgICAgIHRo
ZSBlcnJvciBjaGVja2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6IERpdHRvLgorICAgICAgICBSZW1vdmVk
IGNvZGUgdG8gc2V0IGlzTWlkcG9pbnQgYW5kIHRoZSBGSVhNRS1ORVdQQVJTRVIgY29tbWVudCB0
aGF0IHNhaWQKKyAgICAgICAgaXQgY291bGQgYmUgcmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lUmFkaWFsR3JhZGllbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxpbmVhckdyYWRpZW50KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVDb25pY0dyYWRpZW50
KTogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YXV0b0ZpbGxTdHJvbmdQYXNzd29yZE1hc2tJbWFnZSk6IFVwZGF0ZWQgZm9y
IHRoZSByZW5hbWVkCisgICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIG1lbWJlcnMsIGFkZGVk
IGEgbWlzc2luZyBjYWxsIHRvIGRvbmVBZGRpbmdTdG9wcywKKyAgICAgICAgYW5kIHVzZSBzb21l
IFdURk1vdmUgdG8gY3V0IGRvd24gb24gcmVmZXJlbmNlIGNvdW50IGNodXJuLgorCiAyMDIwLTAz
LTAxICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bTWFy
Z2luQ29sbGFwc2luZ10gRG8gbm90IHJlLWNvbXB1dGUgUG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRp
Y2FsTWFyZ2luIHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmlu
ZGV4IDAxNGE1NWNiZjQzYzUxNWYyNmRhNjM3NzU4NzBlN2JjYWMxMDJlZDQuLjljZDIzOGYxMGMw
YTVhZWM5NmRiMzFjZTNmM2YzYWViNzYxMjZjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHAKQEAgLTYzLDM0ICs2MywxNiBAQCBSZWZQdHI8SW1hZ2U+IENTU0dyYWRp
ZW50VmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUm
CiAgICAgfQogICAgIGF1dG8gbmV3SW1hZ2UgPSBHcmFkaWVudEltYWdlOjpjcmVhdGUoY3JlYXRl
R3JhZGllbnQoKnRoaXMsIHJlbmRlcmVyLCBzaXplKSwgc2l6ZSk7CiAgICAgaWYgKGNhY2hlYWJs
ZSkKLSAgICAgICAgc2F2ZUNhY2hlZEltYWdlRm9yU2l6ZShzaXplLCBuZXdJbWFnZS5nZXQoKSk7
CisgICAgICAgIHNhdmVDYWNoZWRJbWFnZUZvclNpemUoc2l6ZSwgbmV3SW1hZ2UpOwogICAgIHJl
dHVybiBuZXdJbWFnZTsKIH0KIAotLy8gU2hvdWxkIG9ubHkgZXZlciBiZSBjYWxsZWQgZm9yIGRl
cHJlY2F0ZWQgZ3JhZGllbnRzLgotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVTdG9wcyhjb25z
dCBDU1NHcmFkaWVudENvbG9yU3RvcCYgYSwgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIGIp
Ci17Ci0gICAgZG91YmxlIGFWYWwgPSBhLm1fcG9zaXRpb24tPmRvdWJsZVZhbHVlKENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSKTsKLSAgICBkb3VibGUgYlZhbCA9IGIubV9wb3NpdGlvbi0+ZG91Ymxl
VmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotCi0gICAgcmV0dXJuIGFWYWwgPCBiVmFs
OwotfQotCi12b2lkIENTU0dyYWRpZW50VmFsdWU6OnNvcnRTdG9wc0lmTmVlZGVkKCkKLXsKLSAg
ICBBU1NFUlQobV9ncmFkaWVudFR5cGUgPT0gQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRpZW50IHx8
IG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCk7Ci0gICAgaWYg
KCFtX3N0b3BzU29ydGVkKSB7Ci0gICAgICAgIGlmIChtX3N0b3BzLnNpemUoKSkKLSAgICAgICAg
ICAgIHN0ZDo6c3RhYmxlX3NvcnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVuZCgpLCBjb21w
YXJlU3RvcHMpOwotICAgICAgICBtX3N0b3BzU29ydGVkID0gdHJ1ZTsKLSAgICB9Ci19Ci0KIHN0
cnVjdCBHcmFkaWVudFN0b3AgewogICAgIENvbG9yIGNvbG9yOwotICAgIGZsb2F0IG9mZnNldCB7
IDAgfTsKLSAgICBib29sIHNwZWNpZmllZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc01pZHBvaW50
IHsgZmFsc2UgfTsKKyAgICBPcHRpb25hbDxmbG9hdD4gb2Zmc2V0OworCisgICAgYm9vbCBpc1Nw
ZWNpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldC5oYXNWYWx1ZSgpOyB9CisgICAgYm9vbCBp
c01pZHBvaW50KCkgY29uc3QgeyByZXR1cm4gIWNvbG9yLmlzVmFsaWQoKTsgfQogfTsKIAogc3Rh
dGljIGlubGluZSBSZWY8Q1NTR3JhZGllbnRWYWx1ZT4gY2xvbmUoQ1NTR3JhZGllbnRWYWx1ZSYg
dmFsdWUpCkBAIC0xMDMsMzUgKzg1LDMxIEBAIHN0YXRpYyBpbmxpbmUgUmVmPENTU0dyYWRpZW50
VmFsdWU+IGNsb25lKENTU0dyYWRpZW50VmFsdWUmIHZhbHVlKQogICAgIHJldHVybiBkb3duY2Fz
dDxDU1NDb25pY0dyYWRpZW50VmFsdWU+KHZhbHVlKS5jbG9uZSgpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdGlvbj4KLXZvaWQgcmVzb2x2ZVN0b3BDb2xvcnMoVmVjdG9yPENTU0dyYWRp
ZW50Q29sb3JTdG9wLCAyPiYgc3RvcHMsIEZ1bmN0aW9uJiYgY29sb3JSZXNvbHZlRnVuY3Rpb24p
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4gdm9pZCByZXNvbHZlU3RvcENvbG9ycyhWZWN0
b3I8Q1NTR3JhZGllbnRDb2xvclN0b3AsIDI+JiBzdG9wcywgRnVuY3Rpb24mJiBjb2xvclJlc29s
dmVGdW5jdGlvbikKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0b3BzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGF1dG8mIHN0b3AgPSBzdG9wc1tpXTsKLSAgICAgICAgaWYgKHN0b3Au
aXNNaWRwb2ludCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc3RvcC5tX2Nv
bG9yKQotICAgICAgICAgICAgc3RvcC5tX3Jlc29sdmVkQ29sb3IgPSBjb2xvclJlc29sdmVGdW5j
dGlvbigqc3RvcC5tX2NvbG9yKTsKLSAgICAgICAgZWxzZSBpZiAoaSkgewotICAgICAgICAgICAg
YXV0byYgcHJldmlvdXNTdG9wID0gc3RvcHNbaSAtIDFdOwotICAgICAgICAgICAgQVNTRVJUKHBy
ZXZpb3VzU3RvcC5tX2NvbG9yKTsKLSAgICAgICAgICAgIHN0b3AubV9jb2xvciA9IHByZXZpb3Vz
U3RvcC5tX2NvbG9yOwotICAgICAgICAgICAgc3RvcC5tX3Jlc29sdmVkQ29sb3IgPSBwcmV2aW91
c1N0b3AubV9yZXNvbHZlZENvbG9yOwotICAgICAgICB9CisgICAgZm9yIChhdXRvJiBzdG9wIDog
c3RvcHMpIHsKKyAgICAgICAgaWYgKHN0b3AuY29sb3IpCisgICAgICAgICAgICBzdG9wLnJlc29s
dmVkQ29sb3IgPSBjb2xvclJlc29sdmVGdW5jdGlvbigqc3RvcC5jb2xvcik7CiAgICAgfQogfQog
Ci1SZWY8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5
bGVzUmVzb2x2ZWQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQorYm9vbCBDU1NH
cmFkaWVudFZhbHVlOjpoYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAg
Ym9vbCBjb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBz
dG9wIDogbV9zdG9wcykgewotICAgICAgICBpZiAoIXN0b3AuaXNNaWRwb2ludCAmJiBzdG9wLm1f
Y29sb3IgJiYgU3R5bGU6OkJ1aWxkZXJTdGF0ZTo6aXNDb2xvckZyb21QcmltaXRpdmVWYWx1ZURl
cml2ZWRGcm9tRWxlbWVudCgqc3RvcC5tX2NvbG9yKSkgewotICAgICAgICAgICAgc3RvcC5tX2Nv
bG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgY29sb3JJc0Rlcml2
ZWRGcm9tRWxlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBpZiAoIW1faGFz
Q29sb3JEZXJpdmVkRnJvbUVsZW1lbnQpIHsKKyAgICAgICAgbV9oYXNDb2xvckRlcml2ZWRGcm9t
RWxlbWVudCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7Cisg
ICAgICAgICAgICBpZiAoc3RvcC5jb2xvciAmJiBTdHlsZTo6QnVpbGRlclN0YXRlOjppc0NvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlRGVyaXZlZEZyb21FbGVtZW50KCpzdG9wLmNvbG9yKSkgeworICAg
ICAgICAgICAgICAgIG1faGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGF1
dG8gcmVzdWx0ID0gY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA/IGNsb25lKCp0aGlzKSA6IG1h
a2VSZWYoKnRoaXMpOworICAgIHJldHVybiAqbV9oYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudDsK
K30KKworUmVmPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0
aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKK3sKKyAg
ICBhdXRvIHJlc3VsdCA9IGhhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50KCkgPyBjbG9uZSgqdGhp
cykgOiBtYWtlUmVmKCp0aGlzKTsKICAgICByZXNvbHZlU3RvcENvbG9ycyhyZXN1bHQtPm1fc3Rv
cHMsIFsmXShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgY29sb3JWYWx1ZSkgewogICAgICAgICBy
ZXR1cm4gYnVpbGRlclN0YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbG9yVmFsdWUpOwog
ICAgIH0pOwpAQCAtMTUyLDcgKzEzMCw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2RhdGEoZGF0
YSkKICAgICB7CiAgICAgfQotICAgIAorCiAgICAgZmxvYXQgZ3JhZGllbnRMZW5ndGgoKSBjb25z
dAogICAgIHsKICAgICAgICAgYXV0byBncmFkaWVudFNpemUgPSBtX2RhdGEucG9pbnQwIC0gbV9k
YXRhLnBvaW50MTsKQEAgLTE2MiwxMyArMTQwLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbm9y
bWFsaXplU3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UoVmVjdG9yPEdyYWRpZW50U3RvcD4m
IHN0b3BzKQogICAgIHsKLSAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSBzdG9wcy5maXJzdCgp
Lm9mZnNldDsKLSAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9IHN0b3BzLmxhc3QoKS5vZmZzZXQ7
CisgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gKnN0b3BzLmZpcnN0KCkub2Zmc2V0OworICAg
ICAgICBmbG9hdCBsYXN0T2Zmc2V0ID0gKnN0b3BzLmxhc3QoKS5vZmZzZXQ7CiAgICAgICAgIGlm
IChmaXJzdE9mZnNldCAhPSBsYXN0T2Zmc2V0KSB7CiAgICAgICAgICAgICBmbG9hdCBzY2FsZSA9
IGxhc3RPZmZzZXQgLSBmaXJzdE9mZnNldDsKIAogICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9w
IDogc3RvcHMpCi0gICAgICAgICAgICAgICAgc3RvcC5vZmZzZXQgPSAoc3RvcC5vZmZzZXQgLSBm
aXJzdE9mZnNldCkgLyBzY2FsZTsKKyAgICAgICAgICAgICAgICBzdG9wLm9mZnNldCA9ICgqc3Rv
cC5vZmZzZXQgLSBmaXJzdE9mZnNldCkgLyBzY2FsZTsKIAogICAgICAgICAgICAgYXV0byBwMCA9
IG1fZGF0YS5wb2ludDA7CiAgICAgICAgICAgICBhdXRvIHAxID0gbV9kYXRhLnBvaW50MTsKQEAg
LTIwOSwyMiArMTg3LDIyIEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBSYXRoZXIgdGhhbiBzY2Fs
aW5nIHRoZSBwb2ludHMgPCAwLCB3ZSB0cnVuY2F0ZSB0aGVtLCBzbyBvbmx5IHNjYWxlIGFjY29y
ZGluZyB0byB0aGUgbGFyZ2VzdCBwb2ludC4KICAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSAw
OwotICAgICAgICBmbG9hdCBsYXN0T2Zmc2V0ID0gc3RvcHMubGFzdCgpLm9mZnNldDsKKyAgICAg
ICAgZmxvYXQgbGFzdE9mZnNldCA9ICpzdG9wcy5sYXN0KCkub2Zmc2V0OwogICAgICAgICBmbG9h
dCBzY2FsZSA9IGxhc3RPZmZzZXQgLSBmaXJzdE9mZnNldDsKIAogICAgICAgICAvLyBSZXNldCBw
b2ludHMgYmVsb3cgMCB0byB0aGUgZmlyc3QgdmlzaWJsZSBjb2xvci4KICAgICAgICAgc2l6ZV90
IGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID0gbnVtU3RvcHM7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewotICAgICAgICAgICAgaWYgKHN0b3BzW2ldLm9m
ZnNldCA+PSAwKSB7CisgICAgICAgICAgICBpZiAoKnN0b3BzW2ldLm9mZnNldCA+PSAwKSB7CiAg
ICAgICAgICAgICAgICAgZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPSBpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZpcnN0
WmVyb09yR3JlYXRlckluZGV4ID4gMCkgewotICAgICAgICAgICAgaWYgKGZpcnN0WmVyb09yR3Jl
YXRlckluZGV4IDwgbnVtU3RvcHMgJiYgc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9m
ZnNldCA+IDApIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBwcmV2T2Zmc2V0ID0gc3RvcHNbZmly
c3RaZXJvT3JHcmVhdGVySW5kZXggLSAxXS5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
bmV4dE9mZnNldCA9IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQ7CisgICAg
ICAgICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPCBudW1TdG9wcyAmJiAqc3RvcHNb
Zmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9mZnNldCA+IDApIHsKKyAgICAgICAgICAgICAgICBm
bG9hdCBwcmV2T2Zmc2V0ID0gKnN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0ub2Zm
c2V0OworICAgICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSAqc3RvcHNbZmlyc3RaZXJv
T3JHcmVhdGVySW5kZXhdLm9mZnNldDsKIAogICAgICAgICAgICAgICAgIGZsb2F0IGludGVyU3Rv
cFByb3BvcnRpb24gPSAtcHJldk9mZnNldCAvIChuZXh0T2Zmc2V0IC0gcHJldk9mZnNldCk7CiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaW50ZXJwb2xhdGUgZ3JhZGllbnRzIHVz
aW5nIHByZW11bHRpcGxpZWQgY29sb3JzLCB0aGlzIHNob3VsZCBkbyBwcmVtdWx0aXBsaWNhdGlv
bi4KQEAgLTI0Myw3ICsyMjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBmb3Ig
KGF1dG8mIHN0b3AgOiBzdG9wcykKLSAgICAgICAgICAgIHN0b3Aub2Zmc2V0IC89IHNjYWxlOwor
ICAgICAgICAgICAgKnN0b3Aub2Zmc2V0IC89IHNjYWxlOwogCiAgICAgICAgIG1fZGF0YS5zdGFy
dFJhZGl1cyAqPSBzY2FsZTsKICAgICAgICAgbV9kYXRhLmVuZFJhZGl1cyAqPSBzY2FsZTsKQEAg
LTI2NCwxNiArMjQyLDE2IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHNpemVfdCBmaXJz
dFplcm9PckdyZWF0ZXJJbmRleCA9IG51bVN0b3BzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bVN0b3BzOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChzdG9wc1tpXS5vZmZzZXQg
Pj0gMCkgeworICAgICAgICAgICAgaWYgKCpzdG9wc1tpXS5vZmZzZXQgPj0gMCkgewogICAgICAg
ICAgICAgICAgIGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID0gaTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChmaXJzdFplcm9P
ckdyZWF0ZXJJbmRleCA+IDApIHsKLSAgICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJ
bmRleCA8IG51bVN0b3BzICYmIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQg
PiAwKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgcHJldk9mZnNldCA9IHN0b3BzW2ZpcnN0WmVy
b09yR3JlYXRlckluZGV4IC0gMV0ub2Zmc2V0OwotICAgICAgICAgICAgICAgIGZsb2F0IG5leHRP
ZmZzZXQgPSBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0OworICAgICAgICAg
ICAgaWYgKGZpcnN0WmVyb09yR3JlYXRlckluZGV4IDwgbnVtU3RvcHMgJiYgKnN0b3BzW2ZpcnN0
WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQgPiAwKSB7CisgICAgICAgICAgICAgICAgZmxvYXQg
cHJldk9mZnNldCA9ICpzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleCAtIDFdLm9mZnNldDsK
KyAgICAgICAgICAgICAgICBmbG9hdCBuZXh0T2Zmc2V0ID0gKnN0b3BzW2ZpcnN0WmVyb09yR3Jl
YXRlckluZGV4XS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZmxv
YXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2T2Zmc2V0IC8gKG5leHRPZmZzZXQgLSBwcmV2
T2Zmc2V0KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBn
cmFkaWVudHMgdXNpbmcgcHJlbXVsdGlwbGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11
bHRpcGxpY2F0aW9uLgpAQCAtMjkzLDE2ICsyNzEsMTYgQEAgcHVibGljOgogCiAgICAgICAgIHNp
emVfdCBsYXN0T25lT3JMZXNzSW5kZXggPSBudW1TdG9wczsKICAgICAgICAgZm9yIChpbnQgaSA9
IG51bVN0b3BzIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIGlmIChzdG9wc1tpXS5v
ZmZzZXQgPD0gMSkgeworICAgICAgICAgICAgaWYgKCpzdG9wc1tpXS5vZmZzZXQgPD0gMSkgewog
ICAgICAgICAgICAgICAgIGxhc3RPbmVPckxlc3NJbmRleCA9IGk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChs
YXN0T25lT3JMZXNzSW5kZXggPCBudW1TdG9wcyAtIDEpIHsKLSAgICAgICAgICAgIGlmIChsYXN0
T25lT3JMZXNzSW5kZXggPCBudW1TdG9wcyAmJiBzdG9wc1tsYXN0T25lT3JMZXNzSW5kZXhdLm9m
ZnNldCA8IDEpIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBwcmV2T2Zmc2V0ID0gc3RvcHNbbGFz
dE9uZU9yTGVzc0luZGV4XS5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9mZnNl
dCA9IHN0b3BzW2xhc3RPbmVPckxlc3NJbmRleCArIDFdLm9mZnNldDsKKyAgICAgICAgICAgIGlm
IChsYXN0T25lT3JMZXNzSW5kZXggPCBudW1TdG9wcyAmJiAqc3RvcHNbbGFzdE9uZU9yTGVzc0lu
ZGV4XS5vZmZzZXQgPCAxKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgcHJldk9mZnNldCA9ICpz
dG9wc1tsYXN0T25lT3JMZXNzSW5kZXhdLm9mZnNldDsKKyAgICAgICAgICAgICAgICBmbG9hdCBu
ZXh0T2Zmc2V0ID0gKnN0b3BzW2xhc3RPbmVPckxlc3NJbmRleCArIDFdLm9mZnNldDsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0g
KDEgLSBwcmV2T2Zmc2V0KSAvIChuZXh0T2Zmc2V0IC0gcHJldk9mZnNldCk7CiAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaW50ZXJwb2xhdGUgZ3JhZGllbnRzIHVzaW5nIHByZW11
bHRpcGxpZWQgY29sb3JzLCB0aGlzIHNob3VsZCBkbyBwcmVtdWx0aXBsaWNhdGlvbi4KQEAgLTMy
NiwyNCArMzA0LDI2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEdyYWRpZW50QWRhcHRlcj4KIEdyYWRp
ZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRp
ZW50QWRhcHRlciYgZ3JhZGllbnRBZGFwdGVyLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiBjb252ZXJzaW9uRGF0YSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCBtYXhM
ZW5ndGhGb3JSZXBlYXQpCiB7CiAgICAgaWYgKG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0
ZWRMaW5lYXJHcmFkaWVudCB8fCBtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFs
R3JhZGllbnQpIHsKLSAgICAgICAgc29ydFN0b3BzSWZOZWVkZWQoKTsKLQogICAgICAgICBHcmFk
aWVudDo6Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKICAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkpOwogCiAgICAgICAgIGZvciAoYXV0byYgc3RvcCA6
IG1fc3RvcHMpIHsKICAgICAgICAgICAgIGZsb2F0IG9mZnNldDsKLSAgICAgICAgICAgIGlmIChz
dG9wLm1fcG9zaXRpb24tPmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgICAgIG9mZnNldCA9
IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0Up
IC8gMTAwOworICAgICAgICAgICAgaWYgKHN0b3AucG9zaXRpb24tPmlzUGVyY2VudGFnZSgpKQor
ICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0b3AucG9zaXRpb24tPmZsb2F0VmFsdWUoQ1NTVW5p
dFR5cGU6OkNTU19QRVJDRU5UQUdFKSAvIDEwMDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBzdG9wLm1fcG9zaXRpb24tPmZsb2F0VmFsdWUoQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpOworICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0b3AucG9zaXRpb24tPmZs
b2F0VmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwogCi0gICAgICAgICAgICBDb2xvciBj
b2xvciA9IHN0b3AubV9yZXNvbHZlZENvbG9yOworICAgICAgICAgICAgQ29sb3IgY29sb3IgPSBz
dG9wLnJlc29sdmVkQ29sb3I7CiAgICAgICAgICAgICBpZiAoc3R5bGUuaGFzQXBwbGVDb2xvckZp
bHRlcigpKQogICAgICAgICAgICAgICAgIHN0eWxlLmFwcGxlQ29sb3JGaWx0ZXIoKS50cmFuc2Zv
cm1Db2xvcihjb2xvcik7CiAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgb2Zm
c2V0LCBjb2xvciB9KTsKICAgICAgICAgfQogCisgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQocmVz
dWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgW10gKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3Am
IGEsIGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBh
Lm9mZnNldCA8IGIub2Zmc2V0OworICAgICAgICB9KTsKKwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIApAQCAtMzU1LDE2ICszMzUsMTQgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3Rv
ciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsKICAgICAgICAgYXV0
byYgc3RvcCA9IG1fc3RvcHNbaV07CiAKLSAgICAgICAgc3RvcHNbaV0uaXNNaWRwb2ludCA9IHN0
b3AuaXNNaWRwb2ludDsKLQotICAgICAgICBDb2xvciBjb2xvciA9IHN0b3AubV9yZXNvbHZlZENv
bG9yOworICAgICAgICBDb2xvciBjb2xvciA9IHN0b3AucmVzb2x2ZWRDb2xvcjsKICAgICAgICAg
aWYgKHN0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKICAgICAgICAgICAgIHN0eWxlLmFwcGxl
Q29sb3JGaWx0ZXIoKS50cmFuc2Zvcm1Db2xvcihjb2xvcik7CiAKICAgICAgICAgc3RvcHNbaV0u
Y29sb3IgPSBjb2xvcjsKIAotICAgICAgICBpZiAoc3RvcC5tX3Bvc2l0aW9uKSB7Ci0gICAgICAg
ICAgICBhdXRvJiBwb3NpdGlvblZhbHVlID0gKnN0b3AubV9wb3NpdGlvbjsKKyAgICAgICAgaWYg
KHN0b3AucG9zaXRpb24pIHsKKyAgICAgICAgICAgIGF1dG8mIHBvc2l0aW9uVmFsdWUgPSAqc3Rv
cC5wb3NpdGlvbjsKICAgICAgICAgICAgIGlmIChwb3NpdGlvblZhbHVlLmlzUGVyY2VudGFnZSgp
KQogICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IHBvc2l0aW9uVmFsdWUuZmxvYXRW
YWx1ZShDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpIC8gMTAwOwogICAgICAgICAgICAgZWxz
ZSBpZiAocG9zaXRpb25WYWx1ZS5pc0xlbmd0aCgpIHx8IHBvc2l0aW9uVmFsdWUuaXNWaWV3cG9y
dFBlcmNlbnRhZ2VMZW5ndGgoKSB8fCBwb3NpdGlvblZhbHVlLmlzQ2FsY3VsYXRlZFBlcmNlbnRh
Z2VXaXRoTGVuZ3RoKCkpIHsKQEAgLTM4MiwzNSArMzYwLDMxIEBAIEdyYWRpZW50OjpDb2xvclN0
b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYg
Z3JhZGllCiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0
b3BzW2ldLnNwZWNpZmllZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBJZiB0aGUgZmlyc3QgY29sb3Itc3RvcCBkb2VzIG5vdCBoYXZlIGEgcG9zaXRpb24sIGl0cyBw
b3NpdGlvbiBkZWZhdWx0cyB0byAwJS4KICAgICAgICAgICAgIC8vIElmIHRoZSBsYXN0IGNvbG9y
LXN0b3AgZG9lcyBub3QgaGF2ZSBhIHBvc2l0aW9uLCBpdHMgcG9zaXRpb24gZGVmYXVsdHMgdG8g
MTAwJS4KLSAgICAgICAgICAgIGlmICghaSkgeworICAgICAgICAgICAgaWYgKCFpKQogICAgICAg
ICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgc3RvcHNbaV0u
c3BlY2lmaWVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtU3RvcHMgPiAxICYm
IGkgPT0gbnVtU3RvcHMgLSAxKSB7CisgICAgICAgICAgICBlbHNlIGlmIChudW1TdG9wcyA+IDEg
JiYgaSA9PSBudW1TdG9wcyAtIDEpCiAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0g
MTsKLSAgICAgICAgICAgICAgICBzdG9wc1tpXS5zcGVjaWZpZWQgPSB0cnVlOwotICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgYSBjb2xvci1zdG9wIGhhcyBhIHBvc2l0
aW9uIHRoYXQgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gb2YgYW55CiAgICAg
ICAgIC8vIGNvbG9yLXN0b3AgYmVmb3JlIGl0IGluIHRoZSBsaXN0LCBpdHMgcG9zaXRpb24gaXMg
Y2hhbmdlZCB0byBiZSBlcXVhbCB0byB0aGUKICAgICAgICAgLy8gbGFyZ2VzdCBzcGVjaWZpZWQg
cG9zaXRpb24gb2YgYW55IGNvbG9yLXN0b3AgYmVmb3JlIGl0LgotICAgICAgICBpZiAoc3RvcHNb
aV0uc3BlY2lmaWVkICYmIGkgPiAwKSB7CisgICAgICAgIGlmIChzdG9wc1tpXS5pc1NwZWNpZmll
ZCgpICYmIGkgPiAwKSB7CiAgICAgICAgICAgICBzaXplX3QgcHJldlNwZWNpZmllZEluZGV4Owog
ICAgICAgICAgICAgZm9yIChwcmV2U3BlY2lmaWVkSW5kZXggPSBpIC0gMTsgcHJldlNwZWNpZmll
ZEluZGV4OyAtLXByZXZTcGVjaWZpZWRJbmRleCkgewotICAgICAgICAgICAgICAgIGlmIChzdG9w
c1twcmV2U3BlY2lmaWVkSW5kZXhdLnNwZWNpZmllZCkKKyAgICAgICAgICAgICAgICBpZiAoc3Rv
cHNbcHJldlNwZWNpZmllZEluZGV4XS5pc1NwZWNpZmllZCgpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHN0b3BzW2ldLm9mZnNl
dCA8IHN0b3BzW3ByZXZTcGVjaWZpZWRJbmRleF0ub2Zmc2V0KQorICAgICAgICAgICAgaWYgKCpz
dG9wc1tpXS5vZmZzZXQgPCAqc3RvcHNbcHJldlNwZWNpZmllZEluZGV4XS5vZmZzZXQpCiAgICAg
ICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gc3RvcHNbcHJldlNwZWNpZmllZEluZGV4XS5v
ZmZzZXQ7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NFUlQoc3RvcHNbMF0uc3BlY2lmaWVk
ICYmIHN0b3BzW251bVN0b3BzIC0gMV0uc3BlY2lmaWVkKTsKKyAgICBBU1NFUlQoc3RvcHNbMF0u
aXNTcGVjaWZpZWQoKSAmJiBzdG9wc1tudW1TdG9wcyAtIDFdLmlzU3BlY2lmaWVkKCkpOwogCiAg
ICAgLy8gSWYgYW55IGNvbG9yLXN0b3Agc3RpbGwgZG9lcyBub3QgaGF2ZSBhIHBvc2l0aW9uLCB0
aGVuLCBmb3IgZWFjaCBydW4gb2YgYWRqYWNlbnQKICAgICAvLyBjb2xvci1zdG9wcyB3aXRob3V0
IHBvc2l0aW9ucywgc2V0IHRoZWlyIHBvc2l0aW9ucyBzbyB0aGF0IHRoZXkgYXJlIGV2ZW5seSBz
cGFjZWQKQEAgLTQyMCwxNSArMzk0LDE1IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NT
R3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAgICAg
ICAgIGJvb2wgaW5VbnNwZWNpZmllZFJ1biA9IGZhbHNlOwogCiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewotICAgICAgICAgICAgaWYgKCFzdG9wc1tpXS5z
cGVjaWZpZWQgJiYgIWluVW5zcGVjaWZpZWRSdW4pIHsKKyAgICAgICAgICAgIGlmICghc3RvcHNb
aV0uaXNTcGVjaWZpZWQoKSAmJiAhaW5VbnNwZWNpZmllZFJ1bikgewogICAgICAgICAgICAgICAg
IHVuc3BlY2lmaWVkUnVuU3RhcnQgPSBpOwogICAgICAgICAgICAgICAgIGluVW5zcGVjaWZpZWRS
dW4gPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9wc1tpXS5zcGVjaWZpZWQgJiYg
aW5VbnNwZWNpZmllZFJ1bikgeworICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9wc1tpXS5pc1Nw
ZWNpZmllZCgpICYmIGluVW5zcGVjaWZpZWRSdW4pIHsKICAgICAgICAgICAgICAgICBzaXplX3Qg
dW5zcGVjaWZpZWRSdW5FbmQgPSBpOwogCiAgICAgICAgICAgICAgICAgaWYgKHVuc3BlY2lmaWVk
UnVuU3RhcnQgPCB1bnNwZWNpZmllZFJ1bkVuZCkgewotICAgICAgICAgICAgICAgICAgICBmbG9h
dCBsYXN0U3BlY2lmaWVkT2Zmc2V0ID0gc3RvcHNbdW5zcGVjaWZpZWRSdW5TdGFydCAtIDFdLm9m
ZnNldDsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgbmV4dFNwZWNpZmllZE9mZnNldCA9IHN0
b3BzW3Vuc3BlY2lmaWVkUnVuRW5kXS5vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0
IGxhc3RTcGVjaWZpZWRPZmZzZXQgPSAqc3RvcHNbdW5zcGVjaWZpZWRSdW5TdGFydCAtIDFdLm9m
ZnNldDsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgbmV4dFNwZWNpZmllZE9mZnNldCA9ICpz
dG9wc1t1bnNwZWNpZmllZFJ1bkVuZF0ub2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBmbG9h
dCBkZWx0YSA9IChuZXh0U3BlY2lmaWVkT2Zmc2V0IC0gbGFzdFNwZWNpZmllZE9mZnNldCkgLyAo
dW5zcGVjaWZpZWRSdW5FbmQgLSB1bnNwZWNpZmllZFJ1blN0YXJ0ICsgMSk7CiAKICAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IHVuc3BlY2lmaWVkUnVuU3RhcnQ7IGogPCB1bnNw
ZWNpZmllZFJ1bkVuZDsgKytqKQpAQCAtNDU0LDcgKzQyOCw3IEBAIEdyYWRpZW50OjpDb2xvclN0
b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYg
Z3JhZGllCiAgICAgLy8gTWlkcG9pbnRzIHRoYXQgY29pbmNpZGUgd2l0aCBjb2xvciBzdG9wcyBh
cmUgdHJlYXRlZCBzcGVjaWFsbHkgc2luY2UgdGhleSBkb24ndCByZXF1aXJlCiAgICAgLy8gZXh0
cmEgc3RvcHMgYW5kIGdlbmVyYXRlIGhhcmQgbGluZXMuCiAgICAgZm9yIChzaXplX3QgeCA9IDE7
IHggPCBzdG9wcy5zaXplKCkgLSAxOykgewotICAgICAgICBpZiAoIXN0b3BzW3hdLmlzTWlkcG9p
bnQpIHsKKyAgICAgICAgaWYgKCFzdG9wc1t4XS5pc01pZHBvaW50KCkpIHsKICAgICAgICAgICAg
ICsreDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC00NjQsOSArNDM4LDkg
QEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3Rv
cHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUKICAgICAgICAgQ29sb3IgY29sb3IxID0gc3RvcHNb
eCAtIDFdLmNvbG9yOwogICAgICAgICBDb2xvciBjb2xvcjIgPSBzdG9wc1t4ICsgMV0uY29sb3I7
CiAgICAgICAgIC8vIExpa2V3aXNlIGZpbmQgdGhlIHBvc2l0aW9uIG9mIHByZXZpb3VzIGFuZCBu
ZXh0IGNvbG9yIHN0b3AuCi0gICAgICAgIGZsb2F0IG9mZnNldDEgPSBzdG9wc1t4IC0gMV0ub2Zm
c2V0OwotICAgICAgICBmbG9hdCBvZmZzZXQyID0gc3RvcHNbeCArIDFdLm9mZnNldDsKLSAgICAg
ICAgZmxvYXQgb2Zmc2V0ID0gc3RvcHNbeF0ub2Zmc2V0OworICAgICAgICBmbG9hdCBvZmZzZXQx
ID0gKnN0b3BzW3ggLSAxXS5vZmZzZXQ7CisgICAgICAgIGZsb2F0IG9mZnNldDIgPSAqc3RvcHNb
eCArIDFdLm9mZnNldDsKKyAgICAgICAgZmxvYXQgb2Zmc2V0ID0gKnN0b3BzW3hdLm9mZnNldDsK
IAogICAgICAgICAvLyBDaGVjayBpZiBldmVyeXRoaW5nIGNvaW5jaWRlcyBvciB0aGUgbWlkcG9p
bnQgaXMgZXhhY3RseSBpbiB0aGUgbWlkZGxlLgogICAgICAgICAvLyBJZiBzbywgaWdub3JlIHRo
ZSBtaWRwb2ludC4KQEAgLTQ3OSw3ICs0NTMsNiBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9y
IENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQog
ICAgICAgICBpZiAob2Zmc2V0MSA9PSBvZmZzZXQpIHsKICAgICAgICAgICAgIC8vIE1vcnBoIHRo
ZSBtaWRwb2ludCB0byBhIHJlZ3VsYXIgc3RvcCB3aXRoIHRoZSBjb2xvciBvZiB0aGUgbmV4dCBj
b2xvciBzdG9wLgogICAgICAgICAgICAgc3RvcHNbeF0uY29sb3IgPSBjb2xvcjI7Ci0gICAgICAg
ICAgICBzdG9wc1t4XS5pc01pZHBvaW50ID0gZmFsc2U7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCkBAIC00ODcsNyArNDYwLDYgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3Rv
ciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUK
ICAgICAgICAgaWYgKG9mZnNldDIgPT0gb2Zmc2V0KSB7CiAgICAgICAgICAgICAvLyBNb3JwaCB0
aGUgbWlkcG9pbnQgdG8gYSByZWd1bGFyIHN0b3Agd2l0aCB0aGUgY29sb3Igb2YgdGhlIHByZXZp
b3VzIGNvbG9yIHN0b3AuCiAgICAgICAgICAgICBzdG9wc1t4XS5jb2xvciA9IGNvbG9yMTsKLSAg
ICAgICAgICAgIHN0b3BzW3hdLmlzTWlkcG9pbnQgPSBmYWxzZTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKQEAgLTUwOCw3ICs0ODAsNyBAQCBHcmFkaWVudDo6Q29sb3JTdG9w
VmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdy
YWRpZQogICAgICAgICB9CiAgICAgICAgIC8vIGNhbGN1bGF0ZSBjb2xvcnMKICAgICAgICAgZm9y
IChzaXplX3QgeSA9IDA7IHkgPCA5OyArK3kpIHsKLSAgICAgICAgICAgIGZsb2F0IHJlbGF0aXZl
T2Zmc2V0ID0gKG5ld1N0b3BzW3ldLm9mZnNldCAtIG9mZnNldDEpIC8gKG9mZnNldDIgLSBvZmZz
ZXQxKTsKKyAgICAgICAgICAgIGZsb2F0IHJlbGF0aXZlT2Zmc2V0ID0gKCpuZXdTdG9wc1t5XS5v
ZmZzZXQgLSBvZmZzZXQxKSAvIChvZmZzZXQyIC0gb2Zmc2V0MSk7CiAgICAgICAgICAgICBmbG9h
dCBtdWx0aXBsaWVyID0gc3RkOjpwb3cocmVsYXRpdmVPZmZzZXQsIHN0ZDo6bG9nKC41ZikgLyBz
dGQ6OmxvZyhtaWRwb2ludCkpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBub3QgcHJlbXVs
dGlwbHkgaGVyZT8KICAgICAgICAgICAgIG5ld1N0b3BzW3ldLmNvbG9yID0gYmxlbmQoY29sb3Ix
LCBjb2xvcjIsIG11bHRpcGxpZXIsIGZhbHNlIC8qIGRvIG5vdCBwcmVtdWx0aXBseSAqLyk7CkBA
IC01MjcsNyArNDk5LDcgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZh
bHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUKICAgICBpZiAobV9yZXBl
YXRpbmcgJiYgbnVtU3RvcHMgPiAxKSB7CiAgICAgICAgIC8vIElmIHRoZSBkaWZmZXJlbmNlIGlu
IHRoZSBwb3NpdGlvbnMgb2YgdGhlIGZpcnN0IGFuZCBsYXN0IGNvbG9yLXN0b3BzIGlzIDAsCiAg
ICAgICAgIC8vIHRoZSBncmFkaWVudCBkZWZpbmVzIGEgc29saWQtY29sb3IgaW1hZ2Ugd2l0aCB0
aGUgY29sb3Igb2YgdGhlIGxhc3QgY29sb3Itc3RvcCBpbiB0aGUgcnVsZS4KLSAgICAgICAgZmxv
YXQgZ3JhZGllbnRSYW5nZSA9IHN0b3BzLmxhc3QoKS5vZmZzZXQgLSBzdG9wcy5maXJzdCgpLm9m
ZnNldDsKKyAgICAgICAgZmxvYXQgZ3JhZGllbnRSYW5nZSA9ICpzdG9wcy5sYXN0KCkub2Zmc2V0
IC0gKnN0b3BzLmZpcnN0KCkub2Zmc2V0OwogICAgICAgICBpZiAoIWdyYWRpZW50UmFuZ2UpIHsK
ICAgICAgICAgICAgIHN0b3BzLmZpcnN0KCkub2Zmc2V0ID0gMDsKICAgICAgICAgICAgIHN0b3Bz
LmZpcnN0KCkuY29sb3IgPSBzdG9wcy5sYXN0KCkuY29sb3I7CkBAIC01NDAsNyArNTEyLDcgQEAg
R3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMo
R3JhZGllbnRBZGFwdGVyJiBncmFkaWUKICAgICAgICAgICAgIHNpemVfdCBvcmlnaW5hbEZpcnN0
U3RvcEluZGV4ID0gMDsKIAogICAgICAgICAgICAgLy8gV29yayBiYWNrd2FyZHMgZnJvbSB0aGUg
Zmlyc3QsIGFkZGluZyBzdG9wcyB1bnRpbCB3ZSBnZXQgb25lIGJlZm9yZSAwLgotICAgICAgICAg
ICAgZmxvYXQgZmlyc3RPZmZzZXQgPSBzdG9wc1swXS5vZmZzZXQ7CisgICAgICAgICAgICBmbG9h
dCBmaXJzdE9mZnNldCA9ICpzdG9wc1swXS5vZmZzZXQ7CiAgICAgICAgICAgICBpZiAoZmlyc3RP
ZmZzZXQgPiAwKSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgY3Vyck9mZnNldCA9IGZpcnN0T2Zm
c2V0OwogICAgICAgICAgICAgICAgIHNpemVfdCBzcmNTdG9wT3JkaW5hbCA9IG9yaWdpbmFsTnVt
U3RvcHMgLSAxOwpAQCAtNTU0LDEzICs1MjYsMTMgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3Rv
ciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICAgIGlm
IChzcmNTdG9wT3JkaW5hbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJPZmZzZXQgLT0g
c3RvcHNbb3JpZ2luYWxGaXJzdFN0b3BJbmRleCArIHNyY1N0b3BPcmRpbmFsXS5vZmZzZXQgLSBz
dG9wc1tvcmlnaW5hbEZpcnN0U3RvcEluZGV4ICsgc3JjU3RvcE9yZGluYWwgLSAxXS5vZmZzZXQ7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyT2Zmc2V0IC09ICpzdG9wc1tvcmlnaW5hbEZp
cnN0U3RvcEluZGV4ICsgc3JjU3RvcE9yZGluYWxdLm9mZnNldCAtICpzdG9wc1tvcmlnaW5hbEZp
cnN0U3RvcEluZGV4ICsgc3JjU3RvcE9yZGluYWwgLSAxXS5vZmZzZXQ7CiAgICAgICAgICAgICAg
ICAgICAgIHNyY1N0b3BPcmRpbmFsID0gKHNyY1N0b3BPcmRpbmFsICsgb3JpZ2luYWxOdW1TdG9w
cyAtIDEpICUgb3JpZ2luYWxOdW1TdG9wczsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIC8vIFdvcmsgZm9yd2FyZHMgZnJvbSB0aGUgZW5kLCBhZGRpbmcg
c3RvcHMgdW50aWwgd2UgZ2V0IG9uZSBhZnRlciAxLgotICAgICAgICAgICAgZmxvYXQgbGFzdE9m
ZnNldCA9IHN0b3BzW3N0b3BzLnNpemUoKSAtIDFdLm9mZnNldDsKKyAgICAgICAgICAgIGZsb2F0
IGxhc3RPZmZzZXQgPSAqc3RvcHNbc3RvcHMuc2l6ZSgpIC0gMV0ub2Zmc2V0OwogICAgICAgICAg
ICAgaWYgKGxhc3RPZmZzZXQgPCBtYXhFeHRlbnQpIHsKICAgICAgICAgICAgICAgICBmbG9hdCBj
dXJyT2Zmc2V0ID0gbGFzdE9mZnNldDsKICAgICAgICAgICAgICAgICBzaXplX3Qgc3JjU3RvcE9y
ZGluYWwgPSAwOwpAQCAtNTczLDcgKzU0NSw3IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3Ig
Q1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyT2Zmc2V0ID4gbWF4RXh0ZW50KQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNTdG9wT3Jk
aW5hbCA8IG9yaWdpbmFsTnVtU3RvcHMgLSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
ck9mZnNldCArPSBzdG9wc1tzcmNTdG9wSW5kZXggKyAxXS5vZmZzZXQgLSBzdG9wc1tzcmNTdG9w
SW5kZXhdLm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gKnN0
b3BzW3NyY1N0b3BJbmRleCArIDFdLm9mZnNldCAtICpzdG9wc1tzcmNTdG9wSW5kZXhdLm9mZnNl
dDsKICAgICAgICAgICAgICAgICAgICAgc3JjU3RvcE9yZGluYWwgPSAoc3JjU3RvcE9yZGluYWwg
KyAxKSAlIG9yaWdpbmFsTnVtU3RvcHM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQpAQCAtNTgxLDQ3ICs1NTMsNDcgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFk
aWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUKICAgICB9CiAK
ICAgICAvLyBJZiB0aGUgZ3JhZGllbnQgZ29lcyBvdXRzaWRlIHRoZSAwLTEgcmFuZ2UsIG5vcm1h
bGl6ZSBpdCBieSBtb3ZpbmcgdGhlIGVuZHBvaW50cywgYW5kIGFkanVzdGluZyB0aGUgc3RvcHMu
Ci0gICAgaWYgKHN0b3BzLnNpemUoKSA+IDEgJiYgKHN0b3BzLmZpcnN0KCkub2Zmc2V0IDwgMCB8
fCBzdG9wcy5sYXN0KCkub2Zmc2V0ID4gMSkpCisgICAgaWYgKHN0b3BzLnNpemUoKSA+IDEgJiYg
KCpzdG9wcy5maXJzdCgpLm9mZnNldCA8IDAgfHwgKnN0b3BzLmxhc3QoKS5vZmZzZXQgPiAxKSkK
ICAgICAgICAgZ3JhZGllbnRBZGFwdGVyLm5vcm1hbGl6ZVN0b3BzQW5kRW5kcG9pbnRzT3V0c2lk
ZVJhbmdlKHN0b3BzKTsKICAgICAKICAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHJlc3Vs
dDsKICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzdG9wcy5zaXplKCkpOwogICAg
IGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KHsgc3RvcC5vZmZzZXQsIHN0b3AuY29sb3IgfSk7CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoeyAqc3RvcC5vZmZzZXQsIHN0b3AuY29sb3IgfSk7CiAKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBzdGF0aWMgZmxvYXQgcG9zaXRpb25Gcm9tVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZl
VmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9u
RGF0YSwgY29uc3QgRmxvYXRTaXplJiBzaXplLCBib29sIGlzSG9yaXpvbnRhbCkKIHsKLSAgICBp
bnQgb3JpZ2luID0gMDsKLSAgICBpbnQgc2lnbiA9IDE7Ci0gICAgaW50IGVkZ2VEaXN0YW5jZSA9
IGlzSG9yaXpvbnRhbCA/IHNpemUud2lkdGgoKSA6IHNpemUuaGVpZ2h0KCk7Ci0gICAgCisgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmbG9hdCBvcmlnaW4gPSAwOwor
ICAgIGZsb2F0IHNpZ24gPSAxOworICAgIGZsb2F0IGVkZ2VEaXN0YW5jZSA9IGlzSG9yaXpvbnRh
bCA/IHNpemUud2lkdGgoKSA6IHNpemUuaGVpZ2h0KCk7CisKICAgICAvLyBJbiB0aGlzIGNhc2Ug
dGhlIGNlbnRlciBvZiB0aGUgZ3JhZGllbnQgaXMgZ2l2ZW4gcmVsYXRpdmUgdG8gYW4gZWRnZSBp
biB0aGUKICAgICAvLyBmb3JtIG9mOiBbIHRvcCB8IGJvdHRvbSB8IHJpZ2h0IHwgbGVmdCBdIFsg
PHBlcmNlbnRhZ2U+IHwgPGxlbmd0aD4gXS4KICAgICBpZiAodmFsdWUtPmlzUGFpcigpKSB7CiAg
ICAgICAgIENTU1ZhbHVlSUQgb3JpZ2luSUQgPSB2YWx1ZS0+cGFpclZhbHVlKCktPmZpcnN0KCkt
PnZhbHVlSUQoKTsKLSAgICAgICAgdmFsdWUgPSB2YWx1ZS0+cGFpclZhbHVlKCktPnNlY29uZCgp
OwotICAgICAgICAKICAgICAgICAgaWYgKG9yaWdpbklEID09IENTU1ZhbHVlUmlnaHQgfHwgb3Jp
Z2luSUQgPT0gQ1NTVmFsdWVCb3R0b20pIHsKICAgICAgICAgICAgIC8vIEZvciByaWdodC9ib3R0
b20sIHRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIGZhciBlZGdlLgogICAgICAgICAgICAg
b3JpZ2luID0gZWRnZURpc3RhbmNlOwogICAgICAgICAgICAgc2lnbiA9IC0xOwogICAgICAgICB9
CisgICAgICAgIHZhbHVlID0gdmFsdWUtPnBhaXJWYWx1ZSgpLT5zZWNvbmQoKTsKICAgICB9Ci0g
ICAgCisKICAgICBpZiAodmFsdWUtPmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBvcmlnaW4g
KyBzaWduICogdmFsdWUtPmZsb2F0VmFsdWUoKSAqIGNvbnZlcnNpb25EYXRhLnpvb20oKTsKLSAg
ICAKKwogICAgIGlmICh2YWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIHJldHVybiBvcmln
aW4gKyBzaWduICogdmFsdWUtPmZsb2F0VmFsdWUoKSAvIDEwMC5mICogZWRnZURpc3RhbmNlOwor
ICAgICAgICByZXR1cm4gb3JpZ2luICsgc2lnbiAqIHZhbHVlLT5mbG9hdFZhbHVlKCkgLyAxMDAg
KiBlZGdlRGlzdGFuY2U7CisKKyAgICBpZiAodmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VX
aXRoTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBvcmlnaW4gKyBzaWduICogdmFsdWUtPmNzc0Nh
bGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnZlcnNpb25EYXRhKS0+ZXZhbHVh
dGUoZWRnZURpc3RhbmNlKTsKIAotICAgIGlmICh2YWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFn
ZVdpdGhMZW5ndGgoKSkgewotICAgICAgICBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY2FsY3VsYXRp
b25WYWx1ZSB7IHZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShj
b252ZXJzaW9uRGF0YSkgfTsKLSAgICAgICAgcmV0dXJuIG9yaWdpbiArIHNpZ24gKiBjYWxjdWxh
dGlvblZhbHVlLT5ldmFsdWF0ZShlZGdlRGlzdGFuY2UpOwotICAgIH0KLSAgICAKICAgICBzd2l0
Y2ggKHZhbHVlLT52YWx1ZUlEKCkpIHsKICAgICBjYXNlIENTU1ZhbHVlVG9wOgogICAgICAgICBB
U1NFUlQoIWlzSG9yaXpvbnRhbCk7CkBAIC02MzEsMTAgKzYwMywxMCBAQCBzdGF0aWMgZmxvYXQg
cG9zaXRpb25Gcm9tVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBjb25zdCBD
U1NUb0xlbmd0aAogICAgICAgICByZXR1cm4gMDsKICAgICBjYXNlIENTU1ZhbHVlQm90dG9tOgog
ICAgICAgICBBU1NFUlQoIWlzSG9yaXpvbnRhbCk7Ci0gICAgICAgIHJldHVybiBzaXplLmhlaWdo
dCgpOworICAgICAgICByZXR1cm4gZWRnZURpc3RhbmNlOwogICAgIGNhc2UgQ1NTVmFsdWVSaWdo
dDoKICAgICAgICAgQVNTRVJUKGlzSG9yaXpvbnRhbCk7Ci0gICAgICAgIHJldHVybiBzaXplLndp
ZHRoKCk7CisgICAgICAgIHJldHVybiBlZGdlRGlzdGFuY2U7CiAgICAgY2FzZSBDU1NWYWx1ZUNl
bnRlcjoKICAgICAgICAgcmV0dXJuIG9yaWdpbiArIHNpZ24gKiAuNWYgKiBlZGdlRGlzdGFuY2U7
CiAgICAgZGVmYXVsdDoKQEAgLTY0NCwxMDcgKzYxNiw5OCBAQCBzdGF0aWMgZmxvYXQgcG9zaXRp
b25Gcm9tVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aAogICAgIHJldHVybiBvcmlnaW4gKyBzaWduICogdmFsdWUtPmNvbXB1dGVMZW5ndGg8Zmxv
YXQ+KGNvbnZlcnNpb25EYXRhKTsKIH0KIAotRmxvYXRQb2ludCBDU1NHcmFkaWVudFZhbHVlOjpj
b21wdXRlRW5kUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqIGhvcml6b250YWwsIENTU1ByaW1pdGl2
ZVZhbHVlKiB2ZXJ0aWNhbCwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKy8vIFJlc29sdmUgcG9pbnRzL3JhZGlp
IHRvIGZyb250IGVuZCB2YWx1ZXMuCitzdGF0aWMgRmxvYXRQb2ludCBjb21wdXRlRW5kUG9pbnQo
Y29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIGhvcml6b250YWwsIGNvbnN0IENTU1ByaW1pdGl2ZVZh
bHVlKiB2ZXJ0aWNhbCwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKLSAgICBGbG9hdFBvaW50IHJlc3VsdDsK
LQotICAgIGlmIChob3Jpem9udGFsKQotICAgICAgICByZXN1bHQuc2V0WChwb3NpdGlvbkZyb21W
YWx1ZShob3Jpem9udGFsLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSwgdHJ1ZSkpOwotCi0gICAgaWYg
KHZlcnRpY2FsKQotICAgICAgICByZXN1bHQuc2V0WShwb3NpdGlvbkZyb21WYWx1ZSh2ZXJ0aWNh
bCwgY29udmVyc2lvbkRhdGEsIHNpemUsIGZhbHNlKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiB7IHBvc2l0aW9uRnJvbVZhbHVlKGhvcml6b250YWwsIGNvbnZlcnNpb25EYXRh
LCBzaXplLCB0cnVlKSwgcG9zaXRpb25Gcm9tVmFsdWUodmVydGljYWwsIGNvbnZlcnNpb25EYXRh
LCBzaXplLCBmYWxzZSkgfTsKIH0KIAogYm9vbCBDU1NHcmFkaWVudFZhbHVlOjppc0NhY2hlYWJs
ZSgpIGNvbnN0CiB7CisgICAgaWYgKGhhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAg
ICAgIGlmIChzdG9wLm1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIXN0b3AubV9wb3NpdGlvbikKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24tPmlzRm9udFJlbGF0aXZl
TGVuZ3RoKCkpCisgICAgICAgIGlmIChzdG9wLnBvc2l0aW9uICYmIHN0b3AucG9zaXRpb24tPmlz
Rm9udFJlbGF0aXZlTGVuZ3RoKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgQ1NTR3JhZGllbnRWYWx1ZTo6a25vd25Ub0Jl
T3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKSBjb25zdAogewogICAgIGJvb2wg
aGFzQ29sb3JGaWx0ZXIgPSByZW5kZXJlci5zdHlsZSgpLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKTsK
LQogICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgaWYgKGhhc0NvbG9y
RmlsdGVyKSB7Ci0gICAgICAgICAgICBDb2xvciBzdG9wQ29sb3IgPSBzdG9wLm1fcmVzb2x2ZWRD
b2xvcjsKLSAgICAgICAgICAgIHJlbmRlcmVyLnN0eWxlKCkuYXBwbGVDb2xvckZpbHRlcigpLnRy
YW5zZm9ybUNvbG9yKHN0b3BDb2xvcik7Ci0gICAgICAgICAgICBpZiAoIXN0b3BDb2xvci5pc09w
YXF1ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghc3RvcC5tX3Jlc29sdmVkQ29sb3IuaXNPcGFxdWUoKSkKKyAgICAgICAgQ29sb3Ig
Y29sb3IgPSBzdG9wLnJlc29sdmVkQ29sb3I7CisgICAgICAgIGlmIChoYXNDb2xvckZpbHRlcikK
KyAgICAgICAgICAgIHJlbmRlcmVyLnN0eWxlKCkuYXBwbGVDb2xvckZpbHRlcigpLnRyYW5zZm9y
bUNvbG9yKGNvbG9yKTsKKyAgICAgICAgaWYgKCFjb2xvci5pc09wYXF1ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBDU1NH
cmFkaWVudFZhbHVlOjplcXVhbHMoY29uc3QgQ1NTR3JhZGllbnRWYWx1ZSYgb3RoZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WCwgb3RoZXIubV9maXJz
dFgpCisgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WSwgb3RoZXIubV9maXJz
dFkpCisgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX3NlY29uZFgsIG90aGVyLm1fc2Vj
b25kWCkKKyAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vjb25kWSwgb3RoZXIubV9z
ZWNvbmRZKQorICAgICAgICAmJiBtX3N0b3BzID09IG90aGVyLm1fc3RvcHMKKyAgICAgICAgJiYg
bV9ncmFkaWVudFR5cGUgPT0gb3RoZXIubV9ncmFkaWVudFR5cGUKKyAgICAgICAgJiYgbV9yZXBl
YXRpbmcgPT0gb3RoZXIubV9yZXBlYXRpbmc7Cit9CisKIHN0YXRpYyB2b2lkIGFwcGVuZEdyYWRp
ZW50U3RvcHMoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgVmVjdG9yPENTU0dyYWRpZW50
Q29sb3JTdG9wLCAyPiYgc3RvcHMpCiB7CiAgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpIHsK
LSAgICAgICAgZG91YmxlIHBvc2l0aW9uID0gc3RvcC5tX3Bvc2l0aW9uLT5kb3VibGVWYWx1ZShD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIGRvdWJsZSBwb3NpdGlvbiA9IHN0b3Au
cG9zaXRpb24tPmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKICAgICAgICAg
aWYgKCFwb3NpdGlvbikKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIGZyb20oIiwgc3Rv
cC5tX2NvbG9yLT5jc3NUZXh0KCksICcpJyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgi
LCBmcm9tKCIsIHN0b3AuY29sb3ItPmNzc1RleHQoKSwgJyknKTsKICAgICAgICAgZWxzZSBpZiAo
cG9zaXRpb24gPT0gMSkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIHRvKCIsIHN0b3Au
bV9jb2xvci0+Y3NzVGV4dCgpLCAnKScpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwg
dG8oIiwgc3RvcC5jb2xvci0+Y3NzVGV4dCgpLCAnKScpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiLCBjb2xvci1zdG9wKCIsIHBvc2l0aW9uLCAiLCAiLCBzdG9w
Lm1fY29sb3ItPmNzc1RleHQoKSwgJyknKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIs
IGNvbG9yLXN0b3AoIiwgcG9zaXRpb24sICIsICIsIHN0b3AuY29sb3ItPmNzc1RleHQoKSwgJykn
KTsKICAgICB9CiB9CiAKLXZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6d3JpdGVDb2xvclN0b3AoU3Ry
aW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3ApIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgdm9pZCBhcHBlbmRT
cGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dChTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBj
b25zdCBUJiBhLCBjb25zdCBVJiBiKQogewotICAgIGlmICghc3RvcC5pc01pZHBvaW50ICYmIHN0
b3AubV9jb2xvcikKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RvcC5tX2NvbG9yLT5jc3NUZXh0
KCkpOworICAgIGlmIChhICYmIGIpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGEtPmNzc1RleHQo
KSwgJyAnLCBiLT5jc3NUZXh0KCkpOworICAgIGVsc2UgaWYgKGEpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGEtPmNzc1RleHQoKSk7CisgICAgZWxzZSBpZiAoYikKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoYi0+Y3NzVGV4dCgpKTsKK30KIAotICAgIGlmIChzdG9wLm1fcG9zaXRpb24pIHsKLSAg
ICAgICAgaWYgKCFzdG9wLmlzTWlkcG9pbnQpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
ICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzdG9wLm1fcG9zaXRpb24tPmNzc1RleHQoKSk7
Ci0gICAgfQorc3RhdGljIHZvaWQgd3JpdGVDb2xvclN0b3AoU3RyaW5nQnVpbGRlciYgYnVpbGRl
ciwgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3ApCit7CisgICAgYXBwZW5kU3BhY2VT
ZXBhcmF0ZWRPcHRpb25hbENTU1B0clRleHQoYnVpbGRlciwgc3RvcC5jb2xvciwgc3RvcC5wb3Np
dGlvbik7CiB9CiAKIFN0cmluZyBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0
KCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBpZiAobV9ncmFkaWVu
dFR5cGUgPT0gQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KSB7Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAiLCBtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAn
ICcsIG1fZmlyc3RZLT5jc3NUZXh0KCksICIsICIsIG1fc2Vjb25kWC0+Y3NzVGV4dCgpLCAnICcs
IG1fc2Vjb25kWS0+Y3NzVGV4dCgpKTsKLSAgICAgICAgYXBwZW5kR3JhZGllbnRTdG9wcyhyZXN1
bHQsIG1fc3RvcHMpOwotICAgIH0gZWxzZSBpZiAobV9ncmFkaWVudFR5cGUgPT0gQ1NTUHJlZml4
ZWRMaW5lYXJHcmFkaWVudCkgewotICAgICAgICBpZiAobV9yZXBlYXRpbmcpCisgICAgaWYgKGdy
YWRpZW50VHlwZSgpID09IENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCkgeworICAgICAgICBy
ZXN1bHQuYXBwZW5kKCItd2Via2l0LWdyYWRpZW50KGxpbmVhciwgIiwgZmlyc3RYKCktPmNzc1Rl
eHQoKSwgJyAnLCBmaXJzdFkoKS0+Y3NzVGV4dCgpLCAiLCAiLCBzZWNvbmRYKCktPmNzc1RleHQo
KSwgJyAnLCBzZWNvbmRZKCktPmNzc1RleHQoKSk7CisgICAgICAgIGFwcGVuZEdyYWRpZW50U3Rv
cHMocmVzdWx0LCBzdG9wcygpKTsKKyAgICB9IGVsc2UgaWYgKGdyYWRpZW50VHlwZSgpID09IENT
U1ByZWZpeGVkTGluZWFyR3JhZGllbnQpIHsKKyAgICAgICAgaWYgKGlzUmVwZWF0aW5nKCkpCiAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLXdlYmtpdC1yZXBlYXRpbmctbGluZWFy
LWdyYWRpZW50KCIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0
ZXJhbCgiLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoIik7CiAKICAgICAgICAgaWYgKG1fYW5nbGUp
CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fYW5nbGUtPmNzc1RleHQoKSk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZKQotICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSwgJyAnLCBtX2ZpcnN0WS0+
Y3NzVGV4dCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fZmlyc3RYKQotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChtX2ZpcnN0WSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RZLT5j
c3NUZXh0KCkpOwotICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGVuZFNw
YWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KHJlc3VsdCwgZmlyc3RYKCksIGZpcnN0WSgp
KTsKIAotICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CisgICAgICAgIGZvciAo
YXV0byYgc3RvcCA6IHN0b3BzKCkpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFs
KCIsICIpOwogICAgICAgICAgICAgd3JpdGVDb2xvclN0b3AocmVzdWx0LCBzdG9wKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3JlcGVhdGluZykKKyAgICAgICAgaWYg
KGlzUmVwZWF0aW5nKCkpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgicmVwZWF0
aW5nLWxpbmVhci1ncmFkaWVudCgiKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZExpdGVyYWwoImxpbmVhci1ncmFkaWVudCgiKTsKQEAgLTc1NCwyNSArNzE3LDE2IEBA
IFN0cmluZyBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAg
ICAgICAgaWYgKG1fYW5nbGUgJiYgbV9hbmdsZS0+Y29tcHV0ZURlZ3JlZXMoKSAhPSAxODApIHsK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9hbmdsZS0+Y3NzVGV4dCgpKTsKICAgICAgICAg
ICAgIHdyb3RlU29tZXRoaW5nID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmICgobV9maXJzdFgg
fHwgbV9maXJzdFkpICYmICEoIW1fZmlyc3RYICYmIG1fZmlyc3RZICYmIG1fZmlyc3RZLT52YWx1
ZUlEKCkgPT0gQ1NTVmFsdWVCb3R0b20pKSB7CisgICAgICAgIH0gZWxzZSBpZiAoKGZpcnN0WCgp
IHx8IGZpcnN0WSgpKSAmJiAhKCFmaXJzdFgoKSAmJiBmaXJzdFkoKSAmJiBmaXJzdFkoKS0+dmFs
dWVJRCgpID09IENTU1ZhbHVlQm90dG9tKSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoInRvICIpOwotICAgICAgICAgICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZKQotICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSwgJyAnLCBtX2Zp
cnN0WS0+Y3NzVGV4dCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fZmlyc3RYKQotICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WS0+Y3NzVGV4dCgp
KTsKKyAgICAgICAgICAgIGFwcGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KHJl
c3VsdCwgZmlyc3RYKCksIGZpcnN0WSgpKTsKICAgICAgICAgICAgIHdyb3RlU29tZXRoaW5nID0g
dHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh3cm90ZVNvbWV0aGluZykKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwotCi0gICAgICAgIGJvb2wgd3JvdGVGaXJz
dFN0b3AgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykgewotICAg
ICAgICAgICAgaWYgKHdyb3RlRmlyc3RTdG9wKQorICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBz
dG9wcygpKSB7CisgICAgICAgICAgICBpZiAod3JvdGVTb21ldGhpbmcpCiAgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAgICAgICB3cm90ZUZpcnN0U3Rv
cCA9IHRydWU7CisgICAgICAgICAgICB3cm90ZVNvbWV0aGluZyA9IHRydWU7CiAgICAgICAgICAg
ICB3cml0ZUNvbG9yU3RvcChyZXN1bHQsIHN0b3ApOwogICAgICAgICB9CiAgICAgfQpAQCAtODU5
LDQ0ICs4MTMsNDQgQEAgUmVmPEdyYWRpZW50PiBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcmVh
dGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY28KICAgICBGbG9hdFBvaW50IHNl
Y29uZFBvaW50OwogICAgIGlmIChtX2FuZ2xlKSB7CiAgICAgICAgIGZsb2F0IGFuZ2xlID0gbV9h
bmdsZS0+ZmxvYXRWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX0RFRyk7Ci0gICAgICAgIGVuZFBvaW50
c0Zyb21BbmdsZShhbmdsZSwgc2l6ZSwgZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQsIG1fZ3JhZGll
bnRUeXBlKTsKKyAgICAgICAgZW5kUG9pbnRzRnJvbUFuZ2xlKGFuZ2xlLCBzaXplLCBmaXJzdFBv
aW50LCBzZWNvbmRQb2ludCwgZ3JhZGllbnRUeXBlKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IHN3aXRjaCAobV9ncmFkaWVudFR5cGUpIHsKKyAgICAgICAgc3dpdGNoIChncmFkaWVudFR5cGUo
KSkgewogICAgICAgICBjYXNlIENTU0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudDoKLSAgICAgICAg
ICAgIGZpcnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCksIG1fZmlyc3RZ
LmdldCgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7Ci0gICAgICAgICAgICBpZiAobV9zZWNvbmRY
IHx8IG1fc2Vjb25kWSkKLSAgICAgICAgICAgICAgICBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQ
b2ludChtX3NlY29uZFguZ2V0KCksIG1fc2Vjb25kWS5nZXQoKSwgY29udmVyc2lvbkRhdGEsIHNp
emUpOworICAgICAgICAgICAgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2ludChmaXJzdFgoKSwg
Zmlyc3RZKCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKKyAgICAgICAgICAgIGlmIChzZWNvbmRY
KCkgfHwgc2Vjb25kWSgpKQorICAgICAgICAgICAgICAgIHNlY29uZFBvaW50ID0gY29tcHV0ZUVu
ZFBvaW50KHNlY29uZFgoKSwgc2Vjb25kWSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CiAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobV9maXJzdFgpCisgICAgICAgICAg
ICAgICAgaWYgKGZpcnN0WCgpKQogICAgICAgICAgICAgICAgICAgICBzZWNvbmRQb2ludC5zZXRY
KHNpemUud2lkdGgoKSAtIGZpcnN0UG9pbnQueCgpKTsKLSAgICAgICAgICAgICAgICBpZiAobV9m
aXJzdFkpCisgICAgICAgICAgICAgICAgaWYgKGZpcnN0WSgpKQogICAgICAgICAgICAgICAgICAg
ICBzZWNvbmRQb2ludC5zZXRZKHNpemUuaGVpZ2h0KCkgLSBmaXJzdFBvaW50LnkoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NQcmVmaXhlZExp
bmVhckdyYWRpZW50OgotICAgICAgICAgICAgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2ludCht
X2ZpcnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKLSAg
ICAgICAgICAgIGlmIChtX2ZpcnN0WCkKKyAgICAgICAgICAgIGZpcnN0UG9pbnQgPSBjb21wdXRl
RW5kUG9pbnQoZmlyc3RYKCksIGZpcnN0WSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CisgICAg
ICAgICAgICBpZiAoZmlyc3RYKCkpCiAgICAgICAgICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WChz
aXplLndpZHRoKCkgLSBmaXJzdFBvaW50LngoKSk7Ci0gICAgICAgICAgICBpZiAobV9maXJzdFkp
CisgICAgICAgICAgICBpZiAoZmlyc3RZKCkpCiAgICAgICAgICAgICAgICAgc2Vjb25kUG9pbnQu
c2V0WShzaXplLmhlaWdodCgpIC0gZmlyc3RQb2ludC55KCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTTGluZWFyR3JhZGllbnQ6Ci0gICAgICAgICAgICBpZiAobV9maXJz
dFggJiYgbV9maXJzdFkpIHsKKyAgICAgICAgICAgIGlmIChmaXJzdFgoKSAmJiBmaXJzdFkoKSkg
ewogICAgICAgICAgICAgICAgIC8vICJNYWdpYyIgY29ybmVycywgc28gdGhlIDUwJSBsaW5lIHRv
dWNoZXMgdHdvIGNvcm5lcnMuCiAgICAgICAgICAgICAgICAgZmxvYXQgcmlzZSA9IHNpemUud2lk
dGgoKTsKICAgICAgICAgICAgICAgICBmbG9hdCBydW4gPSBzaXplLmhlaWdodCgpOwotICAgICAg
ICAgICAgICAgIGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0WC0+dmFsdWVJRCgpID09IENTU1ZhbHVl
TGVmdCkKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RYKCkgJiYgZmlyc3RYKCktPnZhbHVlSUQo
KSA9PSBDU1NWYWx1ZUxlZnQpCiAgICAgICAgICAgICAgICAgICAgIHJ1biAqPSAtMTsKLSAgICAg
ICAgICAgICAgICBpZiAobV9maXJzdFkgJiYgbV9maXJzdFktPnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZUJvdHRvbSkKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RZKCkgJiYgZmlyc3RZKCktPnZhbHVl
SUQoKSA9PSBDU1NWYWx1ZUJvdHRvbSkKICAgICAgICAgICAgICAgICAgICAgcmlzZSAqPSAtMTsK
ICAgICAgICAgICAgICAgICAvLyBDb21wdXRlIGFuZ2xlLCBhbmQgZmxpcCBpdCBiYWNrIHRvICJi
ZWFyaW5nIGFuZ2xlIiBkZWdyZWVzLgogICAgICAgICAgICAgICAgIGZsb2F0IGFuZ2xlID0gOTAg
LSByYWQyZGVnKGF0YW4yKHJpc2UsIHJ1bikpOwotICAgICAgICAgICAgICAgIGVuZFBvaW50c0Zy
b21BbmdsZShhbmdsZSwgc2l6ZSwgZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQsIG1fZ3JhZGllbnRU
eXBlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9maXJzdFggfHwgbV9maXJzdFkpIHsgCi0g
ICAgICAgICAgICAgICAgc2Vjb25kUG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0
KCksIG1fZmlyc3RZLmdldCgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fZmlyc3RYKQorICAgICAgICAgICAgICAgIGVuZFBvaW50c0Zyb21BbmdsZShhbmds
ZSwgc2l6ZSwgZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQsIGdyYWRpZW50VHlwZSgpKTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZmlyc3RYKCkgfHwgZmlyc3RZKCkpIHsKKyAgICAgICAgICAgICAg
ICBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQb2ludChmaXJzdFgoKSwgZmlyc3RZKCksIGNvbnZl
cnNpb25EYXRhLCBzaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RYKCkpCiAgICAgICAg
ICAgICAgICAgICAgIGZpcnN0UG9pbnQuc2V0WChzaXplLndpZHRoKCkgLSBzZWNvbmRQb2ludC54
KCkpOwotICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0WSkKKyAgICAgICAgICAgICAgICBpZiAo
Zmlyc3RZKCkpCiAgICAgICAgICAgICAgICAgICAgIGZpcnN0UG9pbnQuc2V0WShzaXplLmhlaWdo
dCgpIC0gc2Vjb25kUG9pbnQueSgpKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
ICAgIHNlY29uZFBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSk7CkBAIC05MTcsNTkgKzg3MSwyNSBA
QCBSZWY8R3JhZGllbnQ+IENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjbwogCiBib29sIENTU0xpbmVhckdyYWRpZW50VmFsdWU6
OmVxdWFscyhjb25zdCBDU1NMaW5lYXJHcmFkaWVudFZhbHVlJiBvdGhlcikgY29uc3QKIHsKLSAg
ICBpZiAobV9ncmFkaWVudFR5cGUgPT0gQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KQotICAg
ICAgICByZXR1cm4gb3RoZXIubV9ncmFkaWVudFR5cGUgPT0gbV9ncmFkaWVudFR5cGUKLSAgICAg
ICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WCwgb3RoZXIubV9maXJzdFgpCi0g
ICAgICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9maXJzdFksIG90aGVyLm1fZmlyc3RZ
KQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vjb25kWCwgb3RoZXIubV9z
ZWNvbmRYKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vjb25kWSwgb3Ro
ZXIubV9zZWNvbmRZKQotICAgICAgICAgICAgJiYgbV9zdG9wcyA9PSBvdGhlci5tX3N0b3BzOwot
Ci0gICAgaWYgKG1fZ3JhZGllbnRUeXBlICE9IG90aGVyLm1fZ3JhZGllbnRUeXBlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9yZXBlYXRpbmcgIT0gb3RoZXIubV9yZXBlYXRp
bmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2FuZ2xlKQotICAgICAgICBy
ZXR1cm4gY29tcGFyZUNTU1ZhbHVlUHRyKG1fYW5nbGUsIG90aGVyLm1fYW5nbGUpICYmIG1fc3Rv
cHMgPT0gb3RoZXIubV9zdG9wczsKLQotICAgIGlmIChvdGhlci5tX2FuZ2xlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGVxdWFsWGFuZFkgPSBmYWxzZTsKLSAgICBpZiAobV9m
aXJzdFggJiYgbV9maXJzdFkpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NTVmFsdWVQ
dHIobV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKSAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9maXJz
dFksIG90aGVyLm1fZmlyc3RZKTsKLSAgICBlbHNlIGlmIChtX2ZpcnN0WCkKLSAgICAgICAgZXF1
YWxYYW5kWSA9IGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WCwgb3RoZXIubV9maXJzdFgpICYm
ICFvdGhlci5tX2ZpcnN0WTsKLSAgICBlbHNlIGlmIChtX2ZpcnN0WSkKLSAgICAgICAgZXF1YWxY
YW5kWSA9IGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WSwgb3RoZXIubV9maXJzdFkpICYmICFv
dGhlci5tX2ZpcnN0WDsKLSAgICBlbHNlCi0gICAgICAgIGVxdWFsWGFuZFkgPSAhb3RoZXIubV9m
aXJzdFggJiYgIW90aGVyLm1fZmlyc3RZOwotCi0gICAgcmV0dXJuIGVxdWFsWGFuZFkgJiYgbV9z
dG9wcyA9PSBvdGhlci5tX3N0b3BzOworICAgIHJldHVybiBDU1NHcmFkaWVudFZhbHVlOjplcXVh
bHMob3RoZXIpICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2FuZ2xlLCBvdGhlci5tX2FuZ2xlKTsK
IH0KIAogU3RyaW5nIENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjb25z
dAogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogCi0gICAgaWYgKG1fZ3JhZGllbnRUeXBl
ID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkgewotICAgICAgICByZXN1bHQuYXBwZW5k
KCItd2Via2l0LWdyYWRpZW50KHJhZGlhbCwgIiwgbV9maXJzdFgtPmNzc1RleHQoKSwgJyAnLCBt
X2ZpcnN0WS0+Y3NzVGV4dCgpLCAiLCAiLCBtX2ZpcnN0UmFkaXVzLT5jc3NUZXh0KCksCi0gICAg
ICAgICAgICAiLCAiLCBtX3NlY29uZFgtPmNzc1RleHQoKSwgJyAnLCBtX3NlY29uZFktPmNzc1Rl
eHQoKSwgIiwgIiwgbV9zZWNvbmRSYWRpdXMtPmNzc1RleHQoKSk7Ci0gICAgICAgIGFwcGVuZEdy
YWRpZW50U3RvcHMocmVzdWx0LCBtX3N0b3BzKTsKLSAgICB9IGVsc2UgaWYgKG1fZ3JhZGllbnRU
eXBlID09IENTU1ByZWZpeGVkUmFkaWFsR3JhZGllbnQpIHsKLSAgICAgICAgaWYgKG1fcmVwZWF0
aW5nKQorICAgIGlmIChncmFkaWVudFR5cGUoKSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGll
bnQpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiLXdlYmtpdC1ncmFkaWVudChyYWRpYWwsICIs
IGZpcnN0WCgpLT5jc3NUZXh0KCksICcgJywgZmlyc3RZKCktPmNzc1RleHQoKSwgIiwgIiwgbV9m
aXJzdFJhZGl1cy0+Y3NzVGV4dCgpLAorICAgICAgICAgICAgIiwgIiwgc2Vjb25kWCgpLT5jc3NU
ZXh0KCksICcgJywgc2Vjb25kWSgpLT5jc3NUZXh0KCksICIsICIsIG1fc2Vjb25kUmFkaXVzLT5j
c3NUZXh0KCkpOworICAgICAgICBhcHBlbmRHcmFkaWVudFN0b3BzKHJlc3VsdCwgc3RvcHMoKSk7
CisgICAgfSBlbHNlIGlmIChncmFkaWVudFR5cGUoKSA9PSBDU1NQcmVmaXhlZFJhZGlhbEdyYWRp
ZW50KSB7CisgICAgICAgIGlmIChpc1JlcGVhdGluZygpKQogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZExpdGVyYWwoIi13ZWJraXQtcmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgiKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtcmFkaWFs
LWdyYWRpZW50KCIpOwogCi0gICAgICAgIGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSwgJyAnLCBtX2ZpcnN0WS0+
Y3NzVGV4dCgpKTsKLSAgICAgICAgZWxzZSBpZiAobV9maXJzdFgpCi0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKG1fZmlyc3RYLT5jc3NUZXh0KCkpOwotICAgICAgICBlbHNlIGlmIChtX2ZpcnN0
WSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CisgICAg
ICAgIGlmIChmaXJzdFgoKSB8fCBmaXJzdFkoKSkKKyAgICAgICAgICAgIGFwcGVuZFNwYWNlU2Vw
YXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KHJlc3VsdCwgZmlyc3RYKCksIGZpcnN0WSgpKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImNlbnRlciIpOwog
CkBAIC05ODYsMTIgKzkwNiwxMiBAQCBTdHJpbmcgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3Vz
dG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgICAgIH0gZWxzZSBpZiAobV9lbmRIb3Jpem9udGFsU2l6
ZSAmJiBtX2VuZFZlcnRpY2FsU2l6ZSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiwgIiwg
bV9lbmRIb3Jpem9udGFsU2l6ZS0+Y3NzVGV4dCgpLCAnICcsIG1fZW5kVmVydGljYWxTaXplLT5j
c3NUZXh0KCkpOwogCi0gICAgICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZExpdGVyYWwoIiwgIik7CiAgICAgICAgICAgICB3cml0ZUNvbG9yU3RvcChyZXN1bHQsIHN0b3Ap
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fcmVwZWF0aW5nKQorICAg
ICAgICBpZiAoaXNSZXBlYXRpbmcoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFs
KCJyZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgicmFkaWFsLWdyYWRpZW50KCIpOwpAQCAtMTAxOSwxNiAr
OTM5LDExIEBAIFN0cmluZyBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0KCkg
Y29uc3QKICAgICAgICAgICAgIHdyb3RlU29tZXRoaW5nID0gdHJ1ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChtX2ZpcnN0WCB8fCBtX2ZpcnN0WSkgeworICAgICAgICBpZiAoZmlyc3RYKCkg
fHwgZmlyc3RZKCkpIHsKICAgICAgICAgICAgIGlmICh3cm90ZVNvbWV0aGluZykKICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0
ZXJhbCgiYXQgIik7Ci0gICAgICAgICAgICBpZiAobV9maXJzdFggJiYgbV9maXJzdFkpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAnICcsIG1fZmly
c3RZLT5jc3NUZXh0KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9maXJzdFgpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RZLT5jc3NUZXh0KCkp
OworICAgICAgICAgICAgYXBwZW5kU3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0clRleHQocmVz
dWx0LCBmaXJzdFgoKSwgZmlyc3RZKCkpOwogICAgICAgICAgICAgd3JvdGVTb21ldGhpbmcgPSB0
cnVlOwogICAgICAgICB9CiAKQEAgLTEwMzYsNyArOTUxLDcgQEAgU3RyaW5nIENTU1JhZGlhbEdy
YWRpZW50VmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZExpdGVyYWwoIiwgIik7CiAKICAgICAgICAgYm9vbCB3cm90ZUZpcnN0U3RvcCA9IGZhbHNl
OwotICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CisgICAgICAgIGZvciAoYXV0
byYgc3RvcCA6IHN0b3BzKCkpIHsKICAgICAgICAgICAgIGlmICh3cm90ZUZpcnN0U3RvcCkKICAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKICAgICAgICAgICAgIHdy
b3RlRmlyc3RTdG9wID0gdHJ1ZTsKQEAgLTExNDMsMTYgKzEwNTgsMTYgQEAgUmVmPEdyYWRpZW50
PiBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY28KIAogICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRh
dGEoJnJlbmRlcmVyLnN0eWxlKCksIHJlbmRlcmVyLmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50
KCktPnJlbmRlclN0eWxlKCksICZyZW5kZXJlci52aWV3KCkpOwogCi0gICAgRmxvYXRQb2ludCBm
aXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQo
KSwgY29udmVyc2lvbkRhdGEsIHNpemUpOwotICAgIGlmICghbV9maXJzdFgpCisgICAgRmxvYXRQ
b2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KGZpcnN0WCgpLCBmaXJzdFkoKSwgY29u
dmVyc2lvbkRhdGEsIHNpemUpOworICAgIGlmICghZmlyc3RYKCkpCiAgICAgICAgIGZpcnN0UG9p
bnQuc2V0WChzaXplLndpZHRoKCkgLyAyKTsKLSAgICBpZiAoIW1fZmlyc3RZKQorICAgIGlmICgh
Zmlyc3RZKCkpCiAgICAgICAgIGZpcnN0UG9pbnQuc2V0WShzaXplLmhlaWdodCgpIC8gMik7CiAK
LSAgICBGbG9hdFBvaW50IHNlY29uZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5n
ZXQoKSwgbV9zZWNvbmRZLmdldCgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7Ci0gICAgaWYgKCFt
X3NlY29uZFgpCisgICAgRmxvYXRQb2ludCBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQb2ludChz
ZWNvbmRYKCksIHNlY29uZFkoKSwgY29udmVyc2lvbkRhdGEsIHNpemUpOworICAgIGlmICghc2Vj
b25kWCgpKQogICAgICAgICBzZWNvbmRQb2ludC5zZXRYKHNpemUud2lkdGgoKSAvIDIpOwotICAg
IGlmICghbV9zZWNvbmRZKQorICAgIGlmICghc2Vjb25kWSgpKQogICAgICAgICBzZWNvbmRQb2lu
dC5zZXRZKHNpemUuaGVpZ2h0KCkgLyAyKTsKIAogICAgIGZsb2F0IGZpcnN0UmFkaXVzID0gMDsK
QEAgLTEyNjYsNyArMTE4MSw3IEBAIFJlZjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1
ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvCiAKICAgICAvLyBj
b21wdXRlU3RvcHMoKSBvbmx5IHVzZXMgbWF4RXh0ZW50IGZvciByZXBlYXRpbmcgZ3JhZGllbnRz
LgogICAgIGZsb2F0IG1heEV4dGVudCA9IDA7Ci0gICAgaWYgKG1fcmVwZWF0aW5nKSB7CisgICAg
aWYgKGlzUmVwZWF0aW5nKCkpIHsKICAgICAgICAgRmxvYXRQb2ludCBjb3JuZXI7CiAgICAgICAg
IG1heEV4dGVudCA9IGRpc3RhbmNlVG9GYXJ0aGVzdENvcm5lcihzZWNvbmRQb2ludCwgc2l6ZSwg
Y29ybmVyKTsKICAgICB9CkBAIC0xMjgyLDU5ICsxMTk3LDE4IEBAIFJlZjxHcmFkaWVudD4gQ1NT
UmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvCiAKIGJvb2wgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU1Jh
ZGlhbEdyYWRpZW50VmFsdWUmIG90aGVyKSBjb25zdAogewotICAgIGlmIChtX2dyYWRpZW50VHlw
ZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQpCi0gICAgICAgIHJldHVybiBvdGhlci5t
X2dyYWRpZW50VHlwZSA9PSBtX2dyYWRpZW50VHlwZQotICAgICAgICAgICAgJiYgY29tcGFyZUNT
U1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5tX2ZpcnN0WCkKLSAgICAgICAgICAgICYmIGNvbXBh
cmVDU1NWYWx1ZVB0cihtX2ZpcnN0WSwgb3RoZXIubV9maXJzdFkpCi0gICAgICAgICAgICAmJiBj
b21wYXJlQ1NTVmFsdWVQdHIobV9zZWNvbmRYLCBvdGhlci5tX3NlY29uZFgpCi0gICAgICAgICAg
ICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9zZWNvbmRZLCBvdGhlci5tX3NlY29uZFkpCi0gICAg
ICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9maXJzdFJhZGl1cywgb3RoZXIubV9maXJz
dFJhZGl1cykKLSAgICAgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX3NlY29uZFJhZGl1
cywgb3RoZXIubV9zZWNvbmRSYWRpdXMpCi0gICAgICAgICAgICAmJiBtX3N0b3BzID09IG90aGVy
Lm1fc3RvcHM7Ci0KLSAgICBpZiAobV9ncmFkaWVudFR5cGUgIT0gb3RoZXIubV9ncmFkaWVudFR5
cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3JlcGVhdGluZyAhPSBvdGhl
ci5tX3JlcGVhdGluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBlcXVhbFhh
bmRZID0gZmFsc2U7Ci0gICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZKQotICAgICAgICBlcXVh
bFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5tX2ZpcnN0WCkgJiYg
Y29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0WSk7Ci0gICAgZWxzZSBp
ZiAobV9maXJzdFgpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NTVmFsdWVQdHIobV9m
aXJzdFgsIG90aGVyLm1fZmlyc3RYKSAmJiAhb3RoZXIubV9maXJzdFk7Ci0gICAgZWxzZSBpZiAo
bV9maXJzdFkpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NTVmFsdWVQdHIobV9maXJz
dFksIG90aGVyLm1fZmlyc3RZKSAmJiAhb3RoZXIubV9maXJzdFg7Ci0gICAgZWxzZQotICAgICAg
ICBlcXVhbFhhbmRZID0gIW90aGVyLm1fZmlyc3RYICYmICFvdGhlci5tX2ZpcnN0WTsKLQotICAg
IGlmICghZXF1YWxYYW5kWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBlcXVh
bFNoYXBlID0gdHJ1ZTsKLSAgICBib29sIGVxdWFsU2l6aW5nQmVoYXZpb3IgPSB0cnVlOwotICAg
IGJvb2wgZXF1YWxIb3Jpem9udGFsQW5kVmVydGljYWxTaXplID0gdHJ1ZTsKLQotICAgIGlmICht
X3NoYXBlKQotICAgICAgICBlcXVhbFNoYXBlID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2hhcGUs
IG90aGVyLm1fc2hhcGUpOwotICAgIGVsc2UgaWYgKG1fc2l6aW5nQmVoYXZpb3IpCi0gICAgICAg
IGVxdWFsU2l6aW5nQmVoYXZpb3IgPSBjb21wYXJlQ1NTVmFsdWVQdHIobV9zaXppbmdCZWhhdmlv
ciwgb3RoZXIubV9zaXppbmdCZWhhdmlvcik7Ci0gICAgZWxzZSBpZiAobV9lbmRIb3Jpem9udGFs
U2l6ZSAmJiBtX2VuZFZlcnRpY2FsU2l6ZSkKLSAgICAgICAgZXF1YWxIb3Jpem9udGFsQW5kVmVy
dGljYWxTaXplID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZW5kSG9yaXpvbnRhbFNpemUsIG90aGVy
Lm1fZW5kSG9yaXpvbnRhbFNpemUpICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2VuZFZlcnRpY2Fs
U2l6ZSwgb3RoZXIubV9lbmRWZXJ0aWNhbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBlcXVh
bFNoYXBlID0gIW90aGVyLm1fc2hhcGU7Ci0gICAgICAgIGVxdWFsU2l6aW5nQmVoYXZpb3IgPSAh
b3RoZXIubV9zaXppbmdCZWhhdmlvcjsKLSAgICAgICAgZXF1YWxIb3Jpem9udGFsQW5kVmVydGlj
YWxTaXplID0gIW90aGVyLm1fZW5kSG9yaXpvbnRhbFNpemUgJiYgIW90aGVyLm1fZW5kVmVydGlj
YWxTaXplOwotICAgIH0KLSAgICByZXR1cm4gZXF1YWxTaGFwZSAmJiBlcXVhbFNpemluZ0JlaGF2
aW9yICYmIGVxdWFsSG9yaXpvbnRhbEFuZFZlcnRpY2FsU2l6ZSAmJiBtX3N0b3BzID09IG90aGVy
Lm1fc3RvcHM7CisgICAgcmV0dXJuIENTU0dyYWRpZW50VmFsdWU6OmVxdWFscyhvdGhlcikKKyAg
ICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2hhcGUsIG90aGVyLm1fc2hhcGUpCisgICAg
ICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX3NpemluZ0JlaGF2aW9yLCBvdGhlci5tX3Npemlu
Z0JlaGF2aW9yKQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9lbmRIb3Jpem9udGFs
U2l6ZSwgb3RoZXIubV9lbmRIb3Jpem9udGFsU2l6ZSkKKyAgICAgICAgJiYgY29tcGFyZUNTU1Zh
bHVlUHRyKG1fZW5kVmVydGljYWxTaXplLCBvdGhlci5tX2VuZFZlcnRpY2FsU2l6ZSk7CiB9CiAK
LQogU3RyaW5nIENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiB7
CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKLSAgICBpZiAobV9yZXBlYXRpbmcpCisgICAg
aWYgKGlzUmVwZWF0aW5nKCkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJyZXBlYXRp
bmctY29uaWMtZ3JhZGllbnQoIik7CiAgICAgZWxzZQogICAgICAgICByZXN1bHQuYXBwZW5kTGl0
ZXJhbCgiY29uaWMtZ3JhZGllbnQoIik7CkBAIC0xMzQ2LDEwICsxMjIwLDExIEBAIFN0cmluZyBD
U1NDb25pY0dyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAogICAgICAgICB3cm90
ZVNvbWV0aGluZyA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZ
KSB7CisgICAgaWYgKGZpcnN0WCgpICYmIGZpcnN0WSgpKSB7CiAgICAgICAgIGlmICh3cm90ZVNv
bWV0aGluZykKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgiYXQgIiwgbV9maXJzdFgtPmNzc1RleHQoKSwgJyAnLCBtX2ZpcnN0WS0+Y3NzVGV4
dCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImF0ICIpOworICAgICAgICBhcHBl
bmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dChyZXN1bHQsIGZpcnN0WCgpLCBmaXJz
dFkoKSk7CiAgICAgICAgIHdyb3RlU29tZXRoaW5nID0gdHJ1ZTsKICAgICB9CiAKQEAgLTEzNTcs
NyArMTIzMiw3IEBAIFN0cmluZyBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1RleHQo
KSBjb25zdAogICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKIAogICAgIGJvb2wg
d3JvdGVGaXJzdFN0b3AgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7
CisgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkgewogICAgICAgICBpZiAod3JvdGVGaXJz
dFN0b3ApCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKICAgICAgICAg
d3JvdGVGaXJzdFN0b3AgPSB0cnVlOwpAQCAtMTM3NCwxMCArMTI0OSwxMCBAQCBSZWY8R3JhZGll
bnQ+IENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGNvbgogCiAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9u
RGF0YSgmcmVuZGVyZXIuc3R5bGUoKSwgcmVuZGVyZXIuZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1l
bnQoKS0+cmVuZGVyU3R5bGUoKSwgJnJlbmRlcmVyLnZpZXcoKSk7CiAKLSAgICBGbG9hdFBvaW50
IGNlbnRlclBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5n
ZXQoKSwgY29udmVyc2lvbkRhdGEsIHNpemUpOwotICAgIGlmICghbV9maXJzdFgpCisgICAgRmxv
YXRQb2ludCBjZW50ZXJQb2ludCA9IGNvbXB1dGVFbmRQb2ludChmaXJzdFgoKSwgZmlyc3RZKCks
IGNvbnZlcnNpb25EYXRhLCBzaXplKTsKKyAgICBpZiAoIWZpcnN0WCgpKQogICAgICAgICBjZW50
ZXJQb2ludC5zZXRYKHNpemUud2lkdGgoKSAvIDIpOwotICAgIGlmICghbV9maXJzdFkpCisgICAg
aWYgKCFmaXJzdFkoKSkKICAgICAgICAgY2VudGVyUG9pbnQuc2V0WShzaXplLmhlaWdodCgpIC8g
Mik7CiAKICAgICBmbG9hdCBhbmdsZVJhZGlhbnMgPSAwOwpAQCAtMTM5NSwyMyArMTI3MCw3IEBA
IFJlZjxHcmFkaWVudD4gQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5k
ZXJFbGVtZW50JiByZW5kZXJlciwgY29uCiAKIGJvb2wgQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpl
cXVhbHMoY29uc3QgQ1NTQ29uaWNHcmFkaWVudFZhbHVlJiBvdGhlcikgY29uc3QKIHsKLSAgICBp
ZiAobV9yZXBlYXRpbmcgIT0gb3RoZXIubV9yZXBlYXRpbmcpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICghY29tcGFyZUNTU1ZhbHVlUHRyKG1fYW5nbGUsIG90aGVyLm1fYW5nbGUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGVxdWFsWGFuZFkgPSBmYWxzZTsK
LSAgICBpZiAobV9maXJzdFggJiYgbV9maXJzdFkpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21w
YXJlQ1NTVmFsdWVQdHIobV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKSAmJiBjb21wYXJlQ1NTVmFs
dWVQdHIobV9maXJzdFksIG90aGVyLm1fZmlyc3RZKTsKLSAgICBlbHNlIGlmIChtX2ZpcnN0WCkK
LSAgICAgICAgZXF1YWxYYW5kWSA9IGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WCwgb3RoZXIu
bV9maXJzdFgpICYmICFvdGhlci5tX2ZpcnN0WTsKLSAgICBlbHNlIGlmIChtX2ZpcnN0WSkKLSAg
ICAgICAgZXF1YWxYYW5kWSA9IGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WSwgb3RoZXIubV9m
aXJzdFkpICYmICFvdGhlci5tX2ZpcnN0WDsKLSAgICBlbHNlCi0gICAgICAgIGVxdWFsWGFuZFkg
PSAhb3RoZXIubV9maXJzdFggJiYgIW90aGVyLm1fZmlyc3RZOwotCi0gICAgcmV0dXJuIGVxdWFs
WGFuZFkgJiYgbV9zdG9wcyA9PSBvdGhlci5tX3N0b3BzOworICAgIHJldHVybiBDU1NHcmFkaWVu
dFZhbHVlOjplcXVhbHMob3RoZXIpICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2FuZ2xlLCBvdGhl
ci5tX2FuZ2xlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmgKaW5kZXggZDc1NDQyZTBhMmI5ZGU4NTA0ZTkxYjU5ZTllMDI0MzU2
MzY1NDcwMC4uMzc5NDM3MjYzMmM1MjhjMjMwM2FjMDlkZTA2YWZmOThkZWUyNzE2NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCkBAIC0yOCwxMyArMjgsOSBAQAogI2luY2x1
ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZS5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBTdHlsZVJlc29s
dmVyOwotCiBuYW1lc3BhY2UgU3R5bGUgewogY2xhc3MgQnVpbGRlclN0YXRlOwogfQpAQCAtNTEs
NDcgKzQ3LDM4IEBAIGVudW0gQ1NTR3JhZGllbnRUeXBlIHsKIGVudW0gQ1NTR3JhZGllbnRSZXBl
YXQgeyBOb25SZXBlYXRpbmcsIFJlcGVhdGluZyB9OwogCiBzdHJ1Y3QgQ1NTR3JhZGllbnRDb2xv
clN0b3AgewotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9wb3NpdGlvbjsgLy8gcGVy
Y2VudGFnZSBvciBsZW5ndGgKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fY29sb3I7
Ci0gICAgQ29sb3IgbV9yZXNvbHZlZENvbG9yOwotICAgIGJvb2wgbV9jb2xvcklzRGVyaXZlZEZy
b21FbGVtZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBpc01pZHBvaW50ID0gZmFsc2U7Ci0gICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBvdGhlcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVQdHIobV9jb2xvciwgb3RoZXIubV9j
b2xvcikKLSAgICAgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX3Bvc2l0aW9uLCBvdGhl
ci5tX3Bvc2l0aW9uKTsKLSAgICB9CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwb3Np
dGlvbjsgLy8gcGVyY2VudGFnZSBvciBsZW5ndGgKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbG9yOworICAgIENvbG9yIHJlc29sdmVkQ29sb3I7CiB9OwogCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBhLCBjb25zdCBDU1NHcmFkaWVu
dENvbG9yU3RvcCYgYikKK3sKKyAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlUHRyKGEuY29sb3Is
IGIuY29sb3IpICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihhLnBvc2l0aW9uLCBiLnBvc2l0aW9uKTsK
K30KKwogY2xhc3MgQ1NTR3JhZGllbnRWYWx1ZSA6IHB1YmxpYyBDU1NJbWFnZUdlbmVyYXRvclZh
bHVlIHsKIHB1YmxpYzoKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBGbG9hdFNpemUmKTsKLQotICAgIHZvaWQgc2V0Rmlyc3RYKFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4mJiB2YWwpIHsgbV9maXJzdFggPSBXVEZNb3ZlKHZhbCk7IH0KLSAgICB2b2lkIHNl
dEZpcnN0WShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fZmlyc3RZID0gV1RG
TW92ZSh2YWwpOyB9Ci0gICAgdm9pZCBzZXRTZWNvbmRYKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mJiB2YWwpIHsgbV9zZWNvbmRYID0gV1RGTW92ZSh2YWwpOyB9Ci0gICAgdm9pZCBzZXRTZWNv
bmRZKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9zZWNvbmRZID0gV1RGTW92
ZSh2YWwpOyB9Ci0KLSAgICB2b2lkIGFkZFN0b3AoY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3Am
IHN0b3ApIHsgbV9zdG9wcy5hcHBlbmQoc3RvcCk7IH0KKyAgICB2b2lkIHNldEZpcnN0WChSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpIHsgbV9maXJzdFggPSBXVEZNb3ZlKHZhbHVl
KTsgfQorICAgIHZvaWQgc2V0Rmlyc3RZKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1
ZSkgeyBtX2ZpcnN0WSA9IFdURk1vdmUodmFsdWUpOyB9CisgICAgdm9pZCBzZXRTZWNvbmRYKFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkgeyBtX3NlY29uZFggPSBXVEZNb3ZlKHZh
bHVlKTsgfQorICAgIHZvaWQgc2V0U2Vjb25kWShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYg
dmFsdWUpIHsgbV9zZWNvbmRZID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICB2b2lkIGFkZFN0b3Ao
Q1NTR3JhZGllbnRDb2xvclN0b3AmJiBzdG9wKSB7IG1fc3RvcHMuYXBwZW5kKFdURk1vdmUoc3Rv
cCkpOyB9CiAgICAgdm9pZCBkb25lQWRkaW5nU3RvcHMoKSB7IG1fc3RvcHMuc2hyaW5rVG9GaXQo
KTsgfQotCi0gICAgdW5zaWduZWQgc3RvcENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zdG9wcy5z
aXplKCk7IH0KLQotICAgIHZvaWQgc29ydFN0b3BzSWZOZWVkZWQoKTsKLQotICAgIGJvb2wgaXNS
ZXBlYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX3JlcGVhdGluZzsgfQorICAgIGJvb2wgaGFzQXRM
ZWFzdFR3b1N0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wcy5zaXplKCkgPj0gMjsgfQorICAg
IHZvaWQgcmVzb2x2ZVJHQkNvbG9ycygpOwogCiAgICAgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnRUeXBlOyB9CiAKLSAgICBib29sIGlzRml4
ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBGbG9hdFNpemUgZml4ZWRTaXpl
KGNvbnN0IFJlbmRlckVsZW1lbnQmKSBjb25zdCB7IHJldHVybiBGbG9hdFNpemUoKTsgfQotCi0g
ICAgYm9vbCBpc1BlbmRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYpOwogICAgIGJvb2wg
a25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1lbnQmKSBjb25zdDsKIAotICAgIHZvaWQg
bG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVy
T3B0aW9ucyYpIHsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ZpeGVkU2l6ZSgpIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIEZsb2F0U2l6ZSBmaXhlZFNpemUoY29uc3QgUmVu
ZGVyRWxlbWVudCYpIHsgcmV0dXJuIEZsb2F0U2l6ZSgpOyB9CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzUGVuZGluZygpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIHZvaWQgbG9h
ZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0
aW9ucyYpIHsgfQorCiAgICAgUmVmPENTU0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxl
c1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKLSAgICB2b2lkIHJlc29sdmVSR0JDb2xv
cnMoKTsKIAogcHJvdGVjdGVkOgogICAgIENTU0dyYWRpZW50VmFsdWUoQ2xhc3NUeXBlIGNsYXNz
VHlwZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0LCBDU1NHcmFkaWVudFR5cGUgZ3JhZGllbnRU
eXBlKQpAQCAtMTAxLDQxICs4OCw0MyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAg
IENTU0dyYWRpZW50VmFsdWUoY29uc3QgQ1NTR3JhZGllbnRWYWx1ZSYgb3RoZXIsIENsYXNzVHlw
ZSBjbGFzc1R5cGUsIENTU0dyYWRpZW50VHlwZSBncmFkaWVudFR5cGUpCisgICAgQ1NTR3JhZGll
bnRWYWx1ZShjb25zdCBDU1NHcmFkaWVudFZhbHVlJiBvdGhlciwgQ2xhc3NUeXBlIGNsYXNzVHlw
ZSkKICAgICAgICAgOiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKGNsYXNzVHlwZSkKICAgICAgICAg
LCBtX2ZpcnN0WChvdGhlci5tX2ZpcnN0WCkKICAgICAgICAgLCBtX2ZpcnN0WShvdGhlci5tX2Zp
cnN0WSkKICAgICAgICAgLCBtX3NlY29uZFgob3RoZXIubV9zZWNvbmRYKQogICAgICAgICAsIG1f
c2Vjb25kWShvdGhlci5tX3NlY29uZFkpCiAgICAgICAgICwgbV9zdG9wcyhvdGhlci5tX3N0b3Bz
KQotICAgICAgICAsIG1fc3RvcHNTb3J0ZWQob3RoZXIubV9zdG9wc1NvcnRlZCkKLSAgICAgICAg
LCBtX2dyYWRpZW50VHlwZShncmFkaWVudFR5cGUpCisgICAgICAgICwgbV9ncmFkaWVudFR5cGUo
b3RoZXIubV9ncmFkaWVudFR5cGUpCiAgICAgICAgICwgbV9yZXBlYXRpbmcob3RoZXIubV9yZXBl
YXRpbmcpCisgICAgICAgICwgbV9oYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudChvdGhlci5tX2hh
c0NvbG9yRGVyaXZlZEZyb21FbGVtZW50KQogICAgIHsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBHcmFkaWVudEFkYXB0ZXI+Ci0gICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBj
b21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFkaWVudEFkYXB0ZXI+IEdyYWRpZW50OjpDb2xvclN0b3BW
ZWN0b3IgY29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0IG1heExlbmd0aEZvclJlcGVh
dCk7CiAKLSAgICAvLyBSZXNvbHZlIHBvaW50cy9yYWRpaSB0byBmcm9udCBlbmQgdmFsdWVzLgot
ICAgIEZsb2F0UG9pbnQgY29tcHV0ZUVuZFBvaW50KENTU1ByaW1pdGl2ZVZhbHVlKiwgQ1NTUHJp
bWl0aXZlVmFsdWUqLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgY29uc3QgRmxv
YXRTaXplJik7CisgICAgYXV0byBmaXJzdFgoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0WC5nZXQo
KTsgfQorICAgIGF1dG8gZmlyc3RZKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFkuZ2V0KCk7IH0K
KyAgICBhdXRvIHNlY29uZFgoKSBjb25zdCB7IHJldHVybiBtX3NlY29uZFguZ2V0KCk7IH0KKyAg
ICBhdXRvIHNlY29uZFkoKSBjb25zdCB7IHJldHVybiBtX3NlY29uZFkuZ2V0KCk7IH0KKyAgICBh
dXRvJiBzdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KKyAgICBib29sIGlzUmVwZWF0
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZXBlYXRpbmc7IH0KKworICAgIGJvb2wgZXF1YWxzKGNv
bnN0IENTU0dyYWRpZW50VmFsdWUmKSBjb25zdDsKIAorcHJpdmF0ZToKKyAgICBib29sIGhhc0Nv
bG9yRGVyaXZlZEZyb21FbGVtZW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0NhY2hlYWJsZSgpIGNv
bnN0OwotICAgIAotICAgIHZvaWQgd3JpdGVDb2xvclN0b3AoU3RyaW5nQnVpbGRlciYsIGNvbnN0
IENTU0dyYWRpZW50Q29sb3JTdG9wJikgY29uc3Q7CiAKLSAgICAvLyBQb2ludHMuIFNvbWUgb2Yg
dGhlc2UgbWF5IGJlIG51bGwuCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2ZpcnN0
WDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3RZOwotCiAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBtX3NlY29uZFg7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX3NlY29uZFk7Ci0KLSAgICAvLyBTdG9wcwogICAgIFZlY3RvcjxDU1NHcmFkaWVudENv
bG9yU3RvcCwgMj4gbV9zdG9wczsKLSAgICBib29sIG1fc3RvcHNTb3J0ZWQgeyBmYWxzZSB9Owog
ICAgIENTU0dyYWRpZW50VHlwZSBtX2dyYWRpZW50VHlwZTsKICAgICBib29sIG1fcmVwZWF0aW5n
IHsgZmFsc2UgfTsKKworICAgIG11dGFibGUgT3B0aW9uYWw8Ym9vbD4gbV9oYXNDb2xvckRlcml2
ZWRGcm9tRWxlbWVudDsKIH07CiAKIGNsYXNzIENTU0xpbmVhckdyYWRpZW50VmFsdWUgZmluYWwg
OiBwdWJsaWMgQ1NTR3JhZGllbnRWYWx1ZSB7CkBAIC0xNDUsNyArMTM0LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NMaW5lYXJHcmFkaWVudFZhbHVlKHJlcGVh
dCwgZ3JhZGllbnRUeXBlKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRBbmdsZShSZWY8Q1NTUHJp
bWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fYW5nbGUgPSBXVEZNb3ZlKHZhbCk7IH0KKyAgICB2b2lk
IHNldEFuZ2xlKFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkgeyBtX2FuZ2xlID0gV1RG
TW92ZSh2YWx1ZSk7IH0KIAogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CiAKQEAg
LTE2Niw3ICsxNTUsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIENTU0xpbmVhckdyYWRpZW50
VmFsdWUoY29uc3QgQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSYgb3RoZXIpCi0gICAgICAgIDogQ1NT
R3JhZGllbnRWYWx1ZShvdGhlciwgTGluZWFyR3JhZGllbnRDbGFzcywgb3RoZXIuZ3JhZGllbnRU
eXBlKCkpCisgICAgICAgIDogQ1NTR3JhZGllbnRWYWx1ZShvdGhlciwgTGluZWFyR3JhZGllbnRD
bGFzcykKICAgICAgICAgLCBtX2FuZ2xlKG90aGVyLm1fYW5nbGUpCiAgICAgewogICAgIH0KQEAg
LTE4OCwxNCArMTc3LDE0IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHNldEZpcnN0UmFkaXVzKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mJiB2YWwpIHsgbV9maXJzdFJhZGl1cyA9IFdURk1vdmUodmFsKTsgfQotICAgIHZvaWQgc2V0
U2Vjb25kUmFkaXVzKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9zZWNvbmRS
YWRpdXMgPSBXVEZNb3ZlKHZhbCk7IH0KKyAgICB2b2lkIHNldEZpcnN0UmFkaXVzKFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkgeyBtX2ZpcnN0UmFkaXVzID0gV1RGTW92ZSh2YWx1
ZSk7IH0KKyAgICB2b2lkIHNldFNlY29uZFJhZGl1cyhSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
JiYgdmFsdWUpIHsgbV9zZWNvbmRSYWRpdXMgPSBXVEZNb3ZlKHZhbHVlKTsgfQogCi0gICAgdm9p
ZCBzZXRTaGFwZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fc2hhcGUgPSBX
VEZNb3ZlKHZhbCk7IH0KLSAgICB2b2lkIHNldFNpemluZ0JlaGF2aW9yKFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9zaXppbmdCZWhhdmlvciA9IFdURk1vdmUodmFsKTsgfQor
ICAgIHZvaWQgc2V0U2hhcGUoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1f
c2hhcGUgPSBXVEZNb3ZlKHZhbHVlKTsgfQorICAgIHZvaWQgc2V0U2l6aW5nQmVoYXZpb3IoUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fc2l6aW5nQmVoYXZpb3IgPSBXVEZN
b3ZlKHZhbHVlKTsgfQogCi0gICAgdm9pZCBzZXRFbmRIb3Jpem9udGFsU2l6ZShSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fZW5kSG9yaXpvbnRhbFNpemUgPSBXVEZNb3ZlKHZh
bCk7IH0KLSAgICB2b2lkIHNldEVuZFZlcnRpY2FsU2l6ZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+JiYgdmFsKSB7IG1fZW5kVmVydGljYWxTaXplID0gV1RGTW92ZSh2YWwpOyB9CisgICAgdm9p
ZCBzZXRFbmRIb3Jpem9udGFsU2l6ZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUp
IHsgbV9lbmRIb3Jpem9udGFsU2l6ZSA9IFdURk1vdmUodmFsdWUpOyB9CisgICAgdm9pZCBzZXRF
bmRWZXJ0aWNhbFNpemUoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fZW5k
VmVydGljYWxTaXplID0gV1RGTW92ZSh2YWx1ZSk7IH0KIAogICAgIC8vIENyZWF0ZSB0aGUgZ3Jh
ZGllbnQgZm9yIGEgZ2l2ZW4gc2l6ZS4KICAgICBSZWY8R3JhZGllbnQ+IGNyZWF0ZUdyYWRpZW50
KFJlbmRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFNpemUmKTsKQEAgLTIwOSw3ICsxOTgsNyBAQCBw
cml2YXRlOgogICAgIH0KIAogICAgIENTU1JhZGlhbEdyYWRpZW50VmFsdWUoY29uc3QgQ1NTUmFk
aWFsR3JhZGllbnRWYWx1ZSYgb3RoZXIpCi0gICAgICAgIDogQ1NTR3JhZGllbnRWYWx1ZShvdGhl
ciwgUmFkaWFsR3JhZGllbnRDbGFzcywgb3RoZXIuZ3JhZGllbnRUeXBlKCkpCisgICAgICAgIDog
Q1NTR3JhZGllbnRWYWx1ZShvdGhlciwgUmFkaWFsR3JhZGllbnRDbGFzcykKICAgICAgICAgLCBt
X2ZpcnN0UmFkaXVzKG90aGVyLm1fZmlyc3RSYWRpdXMpCiAgICAgICAgICwgbV9zZWNvbmRSYWRp
dXMob3RoZXIubV9zZWNvbmRSYWRpdXMpCiAgICAgICAgICwgbV9zaGFwZShvdGhlci5tX3NoYXBl
KQpAQCAtMjQ4LDcgKzIzNyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjdXN0b21DU1NUZXh0
KCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEFuZ2xlKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4m
JiB2YWwpIHsgbV9hbmdsZSA9IFdURk1vdmUodmFsKTsgfQorICAgIHZvaWQgc2V0QW5nbGUoUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fYW5nbGUgPSBXVEZNb3ZlKHZhbHVl
KTsgfQogCiAgICAgLy8gQ3JlYXRlIHRoZSBncmFkaWVudCBmb3IgYSBnaXZlbiBzaXplLgogICAg
IFJlZjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZsb2F0
U2l6ZSYpOwpAQCAtMjU2LDEzICsyNDUsMTMgQEAgcHVibGljOgogICAgIGJvb2wgZXF1YWxzKGNv
bnN0IENTU0NvbmljR3JhZGllbnRWYWx1ZSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIENTU0Nv
bmljR3JhZGllbnRWYWx1ZShDU1NHcmFkaWVudFJlcGVhdCByZXBlYXQpCisgICAgZXhwbGljaXQg
Q1NTQ29uaWNHcmFkaWVudFZhbHVlKENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdCkKICAgICAgICAg
OiBDU1NHcmFkaWVudFZhbHVlKENvbmljR3JhZGllbnRDbGFzcywgcmVwZWF0LCBDU1NDb25pY0dy
YWRpZW50KQogICAgIHsKICAgICB9CiAKICAgICBDU1NDb25pY0dyYWRpZW50VmFsdWUoY29uc3Qg
Q1NTQ29uaWNHcmFkaWVudFZhbHVlJiBvdGhlcikKLSAgICAgICAgOiBDU1NHcmFkaWVudFZhbHVl
KG90aGVyLCBDb25pY0dyYWRpZW50Q2xhc3MsIG90aGVyLmdyYWRpZW50VHlwZSgpKQorICAgICAg
ICA6IENTU0dyYWRpZW50VmFsdWUob3RoZXIsIENvbmljR3JhZGllbnRDbGFzcykKICAgICAgICAg
LCBtX2FuZ2xlKG90aGVyLm1fYW5nbGUpCiAgICAgewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCAy
ODFiY2NlOTI4YmU2MDkwZGVmN2Q5ZjYxNjI0OGQ4YjlkNDVmYjQxLi4zYWY1ODRhNjFhMDExMDhh
ZTZlNjYzMzg2YmI2ZDQ3YjMwMzEyYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCkBAIC0xMDIxLDkgKzEwMjEs
OSBAQCBzdGF0aWMgYm9vbCBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NHcgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIHN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlVmFsdWUocG9zaXRpb24sIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLSAgICBzdG9w
Lm1fY29sb3IgPSBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50U3RvcENvbG9yKGFyZ3MsIGNzc1Bh
cnNlck1vZGUpOwotICAgIHJldHVybiBzdG9wLm1fY29sb3IgJiYgYXJncy5hdEVuZCgpOworICAg
IHN0b3AucG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBv
c2l0aW9uLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgc3RvcC5jb2xvciA9IGNvbnN1
bWVEZXByZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoYXJncywgY3NzUGFyc2VyTW9kZSk7CisgICAg
cmV0dXJuIHN0b3AuY29sb3IgJiYgYXJncy5hdEVuZCgpOwogfQogCiBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFy
Z3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKQEAgLTEwNDEsMTEgKzEwNDEsMTEgQEAg
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJz
ZXJUb2tlblJhbmdlJiBhcmdzLCBDU1MKICAgICBhdXRvIHBvaW50ID0gY29uc3VtZURlcHJlY2F0
ZWRHcmFkaWVudFBvaW50KGFyZ3MsIHRydWUpOwogICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJlc3VsdC0+c2V0Rmlyc3RYKHBvaW50LmNvcHlSZWYoKSk7Cisg
ICAgcmVzdWx0LT5zZXRGaXJzdFgoV1RGTW92ZShwb2ludCkpOwogICAgIHBvaW50ID0gY29uc3Vt
ZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KGFyZ3MsIGZhbHNlKTsKICAgICBpZiAoIXBvaW50KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXN1bHQtPnNldEZpcnN0WShwb2ludC5jb3B5
UmVmKCkpOworICAgIHJlc3VsdC0+c2V0Rmlyc3RZKFdURk1vdmUocG9pbnQpKTsKIAogICAgIGlm
ICghY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0xMDU1LDE3ICsxMDU1LDE3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NT
CiAgICAgICAgIGF1dG8gcmFkaXVzID0gY29uc3VtZU51bWJlcihhcmdzLCBWYWx1ZVJhbmdlTm9u
TmVnYXRpdmUpOwogICAgICAgICBpZiAoIXJhZGl1cyB8fCAhY29uc3VtZUNvbW1hSW5jbHVkaW5n
V2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBk
b3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPihyZXN1bHQuZ2V0KCkpLT5zZXRGaXJzdFJh
ZGl1cyhyYWRpdXMuY29weVJlZigpKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGll
bnRWYWx1ZT4ocmVzdWx0LmdldCgpKS0+c2V0Rmlyc3RSYWRpdXMoV1RGTW92ZShyYWRpdXMpKTsK
ICAgICB9CiAKICAgICBwb2ludCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRQb2ludChhcmdz
LCB0cnVlKTsKICAgICBpZiAoIXBvaW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXN1bHQtPnNldFNlY29uZFgocG9pbnQuY29weVJlZigpKTsKKyAgICByZXN1bHQtPnNldFNlY29u
ZFgoV1RGTW92ZShwb2ludCkpOwogICAgIHBvaW50ID0gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVu
dFBvaW50KGFyZ3MsIGZhbHNlKTsKICAgICBpZiAoIXBvaW50KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXN1bHQtPnNldFNlY29uZFkocG9pbnQuY29weVJlZigpKTsKKyAgICByZXN1
bHQtPnNldFNlY29uZFkoV1RGTW92ZShwb2ludCkpOwogCiAgICAgLy8gRm9yIHJhZGlhbCBncmFk
aWVudHMgb25seSwgd2Ugbm93IGV4cGVjdCB0aGUgc2Vjb25kIHJhZGl1cy4KICAgICBpZiAoaXNE
ZXByZWNhdGVkUmFkaWFsR3JhZGllbnQpIHsKQEAgLTEwNzQsMTQgKzEwNzQsMTQgQEAgc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJUb2tl
blJhbmdlJiBhcmdzLCBDU1MKICAgICAgICAgYXV0byByYWRpdXMgPSBjb25zdW1lTnVtYmVyKGFy
Z3MsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSk7CiAgICAgICAgIGlmICghcmFkaXVzKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50
VmFsdWU+KHJlc3VsdC5nZXQoKSktPnNldFNlY29uZFJhZGl1cyhyYWRpdXMuY29weVJlZigpKTsK
KyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4ocmVzdWx0LmdldCgpKS0+
c2V0U2Vjb25kUmFkaXVzKFdURk1vdmUocmFkaXVzKSk7CiAgICAgfQogCiAgICAgQ1NTR3JhZGll
bnRDb2xvclN0b3Agc3RvcDsKICAgICB3aGlsZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVz
cGFjZShhcmdzKSkgewogICAgICAgICBpZiAoIWNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xv
clN0b3AoYXJncywgc3RvcCwgY3NzUGFyc2VyTW9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgcmVzdWx0LT5hZGRTdG9wKHN0b3ApOworICAgICAgICByZXN1bHQtPmFk
ZFN0b3AoV1RGTW92ZShzdG9wKSk7CiAgICAgfQogCiAgICAgcmVzdWx0LT5kb25lQWRkaW5nU3Rv
cHMoKTsKQEAgLTEwOTgsMzggKzEwOTgsMzYgQEAgc3RhdGljIGJvb2wgY29uc3VtZUdyYWRpZW50
Q29sb3JTdG9wcyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZQogICAg
IGJvb2wgcHJldmlvdXNTdG9wV2FzQ29sb3JIaW50ID0gdHJ1ZTsKICAgICBkbyB7CiAgICAgICAg
IENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3A7Ci0gICAgICAgIHN0b3AubV9jb2xvciA9IGNvbnN1
bWVDb2xvcihyYW5nZSwgY3NzUGFyc2VyTW9kZSk7CisgICAgICAgIHN0b3AuY29sb3IgPSBjb25z
dW1lQ29sb3IocmFuZ2UsIGNzc1BhcnNlck1vZGUpOwogICAgICAgICAvLyBUd28gaGludHMgaW4g
YSByb3cgYXJlIG5vdCBhbGxvd2VkLgotICAgICAgICBpZiAoIXN0b3AubV9jb2xvciAmJiAoIXN1
cHBvcnRzQ29sb3JIaW50cyB8fCBwcmV2aW91c1N0b3BXYXNDb2xvckhpbnQpKQorICAgICAgICBp
ZiAoIXN0b3AuY29sb3IgJiYgKCFzdXBwb3J0c0NvbG9ySGludHMgfHwgcHJldmlvdXNTdG9wV2Fz
Q29sb3JIaW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAg
IHByZXZpb3VzU3RvcFdhc0NvbG9ySGludCA9ICFzdG9wLm1fY29sb3I7Ci0gICAgICAgIAotICAg
ICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFRoaXMgYm9vbGVhbiBjb3VsZCBiZSByZW1vdmVkLiBO
dWxsIGNoZWNraW5nIGNvbG9yIHdvdWxkIGJlIHN1ZmZpY2llbnQuCi0gICAgICAgIHN0b3AuaXNN
aWRwb2ludCA9ICFzdG9wLm1fY29sb3I7CisKKyAgICAgICAgcHJldmlvdXNTdG9wV2FzQ29sb3JI
aW50ID0gIXN0b3AuY29sb3I7CiAKICAgICAgICAgaWYgKGlzQ29uaWNHcmFkaWVudCkKLSAgICAg
ICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNvbnN1bWVBbmdsZU9yUGVyY2VudChyYW5nZSwgY3Nz
UGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKKyAgICAg
ICAgICAgIHN0b3AucG9zaXRpb24gPSBjb25zdW1lQW5nbGVPclBlcmNlbnQocmFuZ2UsIGNzc1Bh
cnNlck1vZGUsIFZhbHVlUmFuZ2VBbGwsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNvbnN1bWVMZW5ndGhPclBlcmNl
bnQocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VBbGwpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCFzdG9wLm1fY29sb3IgJiYgIXN0b3AubV9wb3NpdGlvbikKKyAgICAgICAgICAgIHN0
b3AucG9zaXRpb24gPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBjc3NQYXJzZXJNb2Rl
LCBWYWx1ZVJhbmdlQWxsKTsKKworICAgICAgICBpZiAoIXN0b3AuY29sb3IgJiYgIXN0b3AucG9z
aXRpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgZ3JhZGllbnQuYWRk
U3RvcChzdG9wKTsKKyAgICAgICAgYm9vbCBpc1NlY29uZFN0b3BQb3NzaWJsZSA9IHN0b3AuY29s
b3IgJiYgc3RvcC5wb3NpdGlvbjsKKworICAgICAgICBncmFkaWVudC5hZGRTdG9wKFdURk1vdmUo
c3RvcCkpOwogCi0gICAgICAgIGlmICghc3RvcC5tX2NvbG9yIHx8ICFzdG9wLm1fcG9zaXRpb24p
CisgICAgICAgIGlmICghaXNTZWNvbmRTdG9wUG9zc2libGUpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzZWNvbmRTdG9wOwogICAgICAgICBp
ZiAoaXNDb25pY0dyYWRpZW50KQotICAgICAgICAgICAgc2Vjb25kU3RvcC5tX3Bvc2l0aW9uID0g
Y29uc3VtZUFuZ2xlT3JQZXJjZW50KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxs
LCBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOworICAgICAgICAgICAgc2Vjb25kU3RvcC5wb3NpdGlv
biA9IGNvbnN1bWVBbmdsZU9yUGVyY2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZUFsbCwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
c2Vjb25kU3RvcC5tX3Bvc2l0aW9uID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgY3Nz
UGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2Vjb25k
U3RvcC5tX3Bvc2l0aW9uKQotICAgICAgICAgICAgZ3JhZGllbnQuYWRkU3RvcChzZWNvbmRTdG9w
KTsKLSAgICAgICAgCisgICAgICAgICAgICBzZWNvbmRTdG9wLnBvc2l0aW9uID0gY29uc3VtZUxl
bmd0aE9yUGVyY2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCk7CisKKyAg
ICAgICAgaWYgKHNlY29uZFN0b3AucG9zaXRpb24pCisgICAgICAgICAgICBncmFkaWVudC5hZGRT
dG9wKFdURk1vdmUoc2Vjb25kU3RvcCkpOwogICAgIH0gd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1
ZGluZ1doaXRlc3BhY2UocmFuZ2UpKTsKIAogICAgIGdyYWRpZW50LmRvbmVBZGRpbmdTdG9wcygp
OwpAQCAtMTEzOSwyOSArMTEzNywyMyBAQCBzdGF0aWMgYm9vbCBjb25zdW1lR3JhZGllbnRDb2xv
clN0b3BzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIE11c3QgaGF2ZSAyIG9yIG1vcmUgc3RvcHMgdG8gYmUg
dmFsaWQuCi0gICAgcmV0dXJuIGdyYWRpZW50LnN0b3BDb3VudCgpID49IDI7CisgICAgcmV0dXJu
IGdyYWRpZW50Lmhhc0F0TGVhc3RUd29TdG9wcygpOwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2Um
IGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVw
ZWF0aW5nKQogewotICAgIFJlZlB0cjxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPiByZXN1bHQgPSBD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nLCBDU1NQcmVmaXhlZFJhZGlh
bEdyYWRpZW50KTsKKyAgICBhdXRvIHJlc3VsdCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNy
ZWF0ZShyZXBlYXRpbmcsIENTU1ByZWZpeGVkUmFkaWFsR3JhZGllbnQpOworCiAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJYOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY2VudGVyWTsKICAgICBjb25zdW1lT25lT3JUd29WYWx1ZWRQb3NpdGlvbihhcmdzLCBjc3NQ
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIGNlbnRlclgsIGNlbnRlclkpOwogICAg
IGlmICgoY2VudGVyWCB8fCBjZW50ZXJZKSAmJiAhY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVz
cGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXN1bHQtPnNldEZp
cnN0WChjZW50ZXJYLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRGaXJzdFkoY2VudGVyWS5j
b3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0U2Vjb25kWChjZW50ZXJYLmNvcHlSZWYoKSk7Ci0g
ICAgcmVzdWx0LT5zZXRTZWNvbmRZKGNlbnRlclkuY29weVJlZigpKTsKLQogICAgIGF1dG8gc2hh
cGUgPSBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVDaXJjbGUsIENTU1ZhbHVlRWxsaXBzZT4oYXJncyk7
CiAgICAgYXV0byBzaXplS2V5d29yZCA9IGNvbnN1bWVJZGVudDxDU1NWYWx1ZUNsb3Nlc3RTaWRl
LCBDU1NWYWx1ZUNsb3Nlc3RDb3JuZXIsIENTU1ZhbHVlRmFydGhlc3RTaWRlLCBDU1NWYWx1ZUZh
cnRoZXN0Q29ybmVyLCBDU1NWYWx1ZUNvbnRhaW4sIENTU1ZhbHVlQ292ZXI+KGFyZ3MpOwogICAg
IGlmICghc2hhcGUpCiAgICAgICAgIHNoYXBlID0gY29uc3VtZUlkZW50PENTU1ZhbHVlQ2lyY2xl
LCBDU1NWYWx1ZUVsbGlwc2U+KGFyZ3MpOwotICAgIHJlc3VsdC0+c2V0U2hhcGUoc2hhcGUuY29w
eVJlZigpKTsKLSAgICByZXN1bHQtPnNldFNpemluZ0JlaGF2aW9yKHNpemVLZXl3b3JkLmNvcHlS
ZWYoKSk7CiAKICAgICAvLyBPciwgdHdvIGxlbmd0aHMgb3IgcGVyY2VudGFnZXMKICAgICBpZiAo
IXNoYXBlICYmICFzaXplS2V5d29yZCkgewpAQCAtMTE3MiwxNiArMTE2NCwyNCBAQCBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIGFyZwogICAgICAgICAgICAgaWYgKCF2ZXJ0aWNhbFNpemUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBjb25zdW1lQ29tbWFJbmNsdWRp
bmdXaGl0ZXNwYWNlKGFyZ3MpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRFbmRIb3Jpem9udGFs
U2l6ZShob3Jpem9udGFsU2l6ZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRF
bmRWZXJ0aWNhbFNpemUodmVydGljYWxTaXplLmNvcHlSZWYoKSk7CisgICAgICAgICAgICByZXN1
bHQtPnNldEVuZEhvcml6b250YWxTaXplKFdURk1vdmUoaG9yaXpvbnRhbFNpemUpKTsKKyAgICAg
ICAgICAgIHJlc3VsdC0+c2V0RW5kVmVydGljYWxTaXplKFdURk1vdmUodmVydGljYWxTaXplKSk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBjb25zdW1lQ29tbWFJbmNsdWRpbmdX
aGl0ZXNwYWNlKGFyZ3MpOwogICAgIH0KLSAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3Rv
cHMoYXJncywgY3NzUGFyc2VyTW9kZSwgKnJlc3VsdCkpCisKKyAgICBpZiAoIWNvbnN1bWVHcmFk
aWVudENvbG9yU3RvcHMoYXJncywgY3NzUGFyc2VyTW9kZSwgcmVzdWx0KSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdC0+c2V0Rmlyc3RY
KGNlbnRlclguY29weVJlZigpKTsKKyAgICByZXN1bHQtPnNldEZpcnN0WShjZW50ZXJZLmNvcHlS
ZWYoKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRYKFdURk1vdmUoY2VudGVyWCkpOworICAgIHJl
c3VsdC0+c2V0U2Vjb25kWShXVEZNb3ZlKGNlbnRlclkpKTsKKyAgICByZXN1bHQtPnNldFNoYXBl
KFdURk1vdmUoc2hhcGUpKTsKKyAgICByZXN1bHQtPnNldFNpemluZ0JlaGF2aW9yKFdURk1vdmUo
c2l6ZUtleXdvcmQpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKIHN0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJUb2tlblJh
bmdlJiBhcmdzLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIENTU0dyYWRpZW50UmVwZWF0
IHJlcGVhdGluZykKQEAgLTEyNDIsMTEgKzEyNDIsNiBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFy
cwogICAgICAgICB8fCAodmVydGljYWxTaXplICYmIHZlcnRpY2FsU2l6ZS0+aXNDYWxjdWxhdGVk
UGVyY2VudGFnZVdpdGhMZW5ndGgoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
cmVzdWx0LT5zZXRTaGFwZShzaGFwZS5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0U2l6aW5n
QmVoYXZpb3Ioc2l6ZUtleXdvcmQuY29weVJlZigpKTsKLSAgICByZXN1bHQtPnNldEVuZEhvcml6
b250YWxTaXplKGhvcml6b250YWxTaXplLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRFbmRW
ZXJ0aWNhbFNpemUodmVydGljYWxTaXplLmNvcHlSZWYoKSk7Ci0KICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNlbnRlclg7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50
ZXJZOwogICAgIGlmIChhcmdzLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlQXQpIHsKQEAgLTEyNjcs
NiArMTI2MiwxMiBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lUmFkaWFsR3JhZGll
bnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFycwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBpZiAoIWNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMoYXJncywgY3NzUGFyc2Vy
TW9kZSwgKnJlc3VsdCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmVzdWx0LT5z
ZXRTaGFwZShXVEZNb3ZlKHNoYXBlKSk7CisgICAgcmVzdWx0LT5zZXRTaXppbmdCZWhhdmlvcihX
VEZNb3ZlKHNpemVLZXl3b3JkKSk7CisgICAgcmVzdWx0LT5zZXRFbmRIb3Jpem9udGFsU2l6ZShX
VEZNb3ZlKGhvcml6b250YWxTaXplKSk7CisgICAgcmVzdWx0LT5zZXRFbmRWZXJ0aWNhbFNpemUo
V1RGTW92ZSh2ZXJ0aWNhbFNpemUpKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEy
OTAsOCArMTI5MSw4IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVMaW5lYXJHcmFk
aWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzCiAgICAgICAgICAgICBlbmRY
ID0gY29uc3VtZUlkZW50PENTU1ZhbHVlTGVmdCwgQ1NTVmFsdWVSaWdodD4oYXJncyk7CiAgICAg
ICAgIH0KIAotICAgICAgICByZXN1bHQtPnNldEZpcnN0WChlbmRYLmNvcHlSZWYoKSk7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0Rmlyc3RZKGVuZFkuY29weVJlZigpKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRGaXJzdFgoV1RGTW92ZShlbmRYKSk7CisgICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RZKFdURk1v
dmUoZW5kWSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGV4cGVjdENvbW1hID0gZmFsc2U7CiAg
ICAgfQpAQCAtMTMxNCw3ICsxMzE1LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3Vt
ZUNvbmljR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2UKICAgICAg
ICAgICAgIGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGUoYXJncywgY29udGV4dC5tb2RlLCBVbml0
bGVzc1F1aXJrOjpGb3JiaWQpOwogICAgICAgICAgICAgaWYgKCFhbmdsZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoYW5nbGUu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICByZXN1bHQtPnNldEFuZ2xlKFdURk1vdmUo
YW5nbGUpKTsKICAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTEzMjUsMTMgKzEzMjYsOSBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25z
dW1lQ29uaWNHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZQogICAg
ICAgICAgICAgaWYgKCEoY2VudGVyWCAmJiBjZW50ZXJZKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFgo
Y2VudGVyWC5jb3B5UmVmKCkpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkoY2VudGVy
WS5jb3B5UmVmKCkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFgoV1RGTW92ZShjZW50
ZXJYKSk7CisgICAgICAgICAgICByZXN1bHQtPnNldEZpcnN0WShXVEZNb3ZlKGNlbnRlclkpKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gUmlnaHQgbm93LCBjb25pYyBncmFkaWVudHMg
aGF2ZSB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIGNlbnRlcnMuCi0gICAgICAgICAgICByZXN1bHQt
PnNldFNlY29uZFgoY2VudGVyWC5jb3B5UmVmKCkpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRT
ZWNvbmRZKGNlbnRlclkuY29weVJlZigpKTsKLSAgICAKICAgICAgICAgICAgIGV4cGVjdENvbW1h
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCmluZGV4IDVkMDhlOWU0OTQ1ZTJkOTNjZGI4ZGNhMjA1ZmMwMzMxY2JlZmY4ZjEu
LmY4YzRkY2M0MTRhMjdiMTgxMGNhYTQ4ZDFmYWU1NTlmYTE3NDU3YzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMjA1NSwxOSArMjA1NSwxOSBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBIVE1MSW5wdXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZUZvckJpbmRp
bmdzKGludCBzdGFydCwgaW50CiBzdGF0aWMgUmVmPENTU0xpbmVhckdyYWRpZW50VmFsdWU+IGF1
dG9GaWxsU3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UoKQogewogICAgIENTU0dyYWRpZW50Q29sb3JT
dG9wIGZpcnN0U3RvcDsKLSAgICBmaXJzdFN0b3AubV9jb2xvciA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShDb2xvcjo6YmxhY2spOwotICAgIGZpcnN0U3RvcC5t
X3Bvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSg1MCwgQ1NT
VW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICBmaXJzdFN0b3AuY29sb3IgPSBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoQ29sb3I6OmJsYWNrKTsKKyAgICBm
aXJzdFN0b3AucG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KDUwLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOwogCiAgICAgQ1NTR3JhZGllbnRDb2xv
clN0b3Agc2Vjb25kU3RvcDsKLSAgICBzZWNvbmRTdG9wLm1fY29sb3IgPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICBz
ZWNvbmRTdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKDEwMCwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICBzZWNvbmRTdG9wLmNv
bG9yID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKENvbG9yOjp0
cmFuc3BhcmVudCk7CisgICAgc2Vjb25kU3RvcC5wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlVmFsdWUoMTAwLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOwog
CiAgICAgYXV0byBncmFkaWVudCA9IENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmNyZWF0ZShDU1NH
cmFkaWVudFJlcGVhdDo6Tm9uUmVwZWF0aW5nLCBDU1NHcmFkaWVudFR5cGU6OkNTU0xpbmVhckdy
YWRpZW50KTsKICAgICBncmFkaWVudC0+c2V0QW5nbGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVWYWx1ZSg5MCwgQ1NTVW5pdFR5cGU6OkNTU19ERUcpKTsKLSAgICBncmFkaWVudC0+
YWRkU3RvcChmaXJzdFN0b3ApOwotICAgIGdyYWRpZW50LT5hZGRTdG9wKHNlY29uZFN0b3ApOwor
ICAgIGdyYWRpZW50LT5hZGRTdG9wKFdURk1vdmUoZmlyc3RTdG9wKSk7CisgICAgZ3JhZGllbnQt
PmFkZFN0b3AoV1RGTW92ZShzZWNvbmRTdG9wKSk7CisgICAgZ3JhZGllbnQtPmRvbmVBZGRpbmdT
dG9wcygpOwogICAgIGdyYWRpZW50LT5yZXNvbHZlUkdCQ29sb3JzKCk7Ci0KICAgICByZXR1cm4g
Z3JhZGllbnQ7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392115</attachid>
            <date>2020-03-01 18:56:24 -0800</date>
            <delta_ts>2020-03-03 09:12:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208417-20200301185620.patch</filename>
            <type>text/plain</type>
            <size>74516</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3Njk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTNkNTZmNTE1MTQzZWNm
ZjRjM2NmMTFhODc0NTc2YzhlYTJmZDFjMC4uNmFhZjhlNzFmMjg5NzEwMGY0ODVmYzQzN2EyYjY5
OWFmOWQ0M2Q3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMCBAQAorMjAyMC0wMi0yOSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgZ3JhZGllbnQg
cGFyc2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA4NDE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAg
IC0gVXNlIE9wdGlvbmFsPD4gYW5kIGludmFsaWQgQ29sb3IgdG8gcmVwcmVzZW50IHVuc3BlY2lm
aWVkIHBvc2l0aW9ucyBhbmQgY29sb3JzLgorICAgICAgICAgIFRoaXMgaXMgc2ltcGxlciBhbmQg
ZWFzaWVyIHRvIGdldCByaWdodCB0aGFuIHNlcGFyYXRlIGJvb2xlYW5zLgorICAgICAgICAtIFNp
bXBsaWZpZWQgc29ydGluZyBvZiBzdG9wcyBpbiBsZWdhY3kgZ3JhZGllbnRzIHRvIHJlbW92ZSBl
eHRyYSBDU1MgdmFsdWUKKyAgICAgICAgICBldmFsdWF0aW9uIGFuZCB1bm5lY2Vzc2FyeSAic29y
dCBpbiBwbGFjZSIgdGVjaG5pcXVlLgorICAgICAgICAtIFJld3JvdGUgZXF1YWxzIGZ1bmN0aW9u
cyBmb3IgQ1NTIGdyYWRpZW50IHZhbHVlIGNsYXNzZXMuIFRoZSBuZXcgcGF0dGVybiBpcworICAg
ICAgICAgIHRvIGNvbXBhcmUgYWxsIHRoZSBkYXRhIG1lbWJlcnMgdGhhdCBob2xkIHBhcnNlZCBD
U1MgZGF0YSwgaGFuZGxpbmcgbnVsbAorICAgICAgICAgIGNvcnJlY3RseSwgc2luY2UgdGhlIHBh
cnNlciB3b24ndCBzZXQgaW5hcHByb3ByaWF0ZSBvbmVzLiBUaGUgb2xkIGNvZGUgaGFkCisgICAg
ICAgICAgY29tcGxleCBsb2dpYyB0byBvbmx5IGNvbXBhcmUgY2VydGFpbiBkYXRhIG1lbWJlcnMs
IHdoaWNoIHdhcyB1bm5lY2Vzc2FyeQorICAgICAgICAgIGFuZCBoYXJkIHRvIHJlYWQgdG8gdGVs
bCBpZiBpdCB3YXMgY29ycmVjdC4KKyAgICAgICAgLSBBZGRlZCBzb21lIG1vcmUgdXNlIG9mIFdU
Rk1vdmUgdG8gY3V0IGRvd24gb24gcmVmZXJlbmNlIGNvdW50IGNodXJuLgorCisgICAgICAgICog
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRW
YWx1ZTo6aW1hZ2UpOiBSZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gZ2V0KCkuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlU3RvcHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3Jh
ZGllbnRWYWx1ZTo6c29ydFN0b3BzSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6cmVzb2x2ZVN0b3BDb2xvcnMpOiBUYWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdl
IGtub3cgYmVjYXVzZQorICAgICAgICBvZiBwYXJzaW5nIHJ1bGVzIHRoYXQgdGhlIG9ubHkgc3Rv
cHMgd2l0aG91dCBjb2xvcnMgYXJlIG1pZHBvaW50cyB0byBkcmFzdGljYWxseQorICAgICAgICBz
aW1wbGlmeSB0aGlzIGZ1bmN0aW9uIHRvIGEgdHJpdmlhbCBsb29wLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTR3JhZGllbnRWYWx1ZTo6aGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQgY29uc3QpOiBB
ZGRlZC4KKyAgICAgICAgQ2hlY2tzIHRvIHNlZSBpZiBhbnkgb2YgdGhlIHN0b3AgY29sb3JzIGlz
IGRlcml2ZWQgZnJvbSB0aGUgZWxlbWVudC4gVGhlIG9sZAorICAgICAgICBjb2RlIGNvbmZ1c2lu
Z2x5IHdvdWxkIHN0b3JlIHRoZSBhbnN3ZXIgdG8gdGhpcyBpbiB0aGUgc3RvcCwgYnV0IG9ubHkg
aW4gdGhlCisgICAgICAgIGZpcnN0IHN0b3Agd2l0aCB0aGlzIHByb3BlcnR5LiBDb21wdXRpbmcg
aXQgd2l0aG91dCBtb2RpZnlpbmcgdGhlIHN0b3AsIGFuZAorICAgICAgICBtZW1vaXppbmcgaXQg
aW4gdGhlIGdyYWRpZW50IHByZXNlcnZlcyB0aGUgc2FtZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJp
c3RpY3MKKyAgICAgICAgYXMgYmVmb3JlIHdpdGhvdXQgcmVxdWlyaW5nIGEgYm9vbGVhbiBpbiBl
YWNoIHN0b3AgaW4gdGhlIHN0b3BzIHZlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRp
ZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKTogQ2FsbCB0aGUgbmV3CisgICAg
ICAgIGhhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50IGZ1bmN0aW9uIGluc3RlYWQgb2YgaGF2aW5n
IHRoZSBsb2dpYyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6TGluZWFyR3JhZGllbnRBZGFwdGVy
Ojpub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNpZGVSYW5nZSk6CisgICAgICAgIFVwZGF0
ZSBzaW5jZSBHcmFkaWVudFN0b3Agbm93IGhhcyBvcHRpb25hbCBvZmZzZXRzLiBCeSB0aGUgdGlt
ZSB0aGlzCisgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCB0aGV5IGFyZSBhbGwgZ3VhcmFudGVl
ZCB0byBiZSBmaWxsZWQgaW4sIHNvIHdlIGNhbgorICAgICAgICBqdXN0IHVzZSB0aGUgKiBvcGVy
YXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlJhZGlhbEdyYWRpZW50QWRhcHRlcjo6bm9ybWFsaXpl
U3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UpOgorICAgICAgICBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbmljR3JhZGllbnRBZGFwdGVyOjpub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50
c091dHNpZGVSYW5nZSk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3Jh
ZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKTogTW92ZWQgdGhlIHNvcnRpbmcgb2Ygc3RvcHMgZm9y
CisgICAgICAgIHRoZSBkZXByZWNhdGVkIGdyYWRpZW50cyBoZXJlLiBBbHNvIHVwZGF0ZWQgc2lu
Y2UgR3JhZGllbnQ6OkNvbG9yU3RvcAorICAgICAgICBubyBsb25nZXIgdXNlcyAibV8iIHByZWZp
eGVzIG9uIGl0cyBwdWJsaWMgc3RydWN0IGRhdGEgbWVtYmVycy4gU29tZQorICAgICAgICBzaW1w
bGlmaWNhdGlvbiBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0ICJz
cGVjaWZpZWQiCisgICAgICAgIHRvIHRydWUgc2luY2UgaXQncyBubyBsb25nZXIgYSBzZXBhcmF0
ZSBib29sZWFuLgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gcm9tVmFsdWUpOiBIYW5kbGUg
YSBudWxsIHBvaW50ZXIgZm9yIHZhbHVlIGJ5IHJldHVybmluZworICAgICAgICAwLCB3aGljaCBp
cyB3aGF0IHRoZSBjYWxsZXIgd2FzIGRvaW5nIGV4cGxpY2l0bHkgYmVmb3JlLiBVc2UgZmxvYXQK
KyAgICAgICAgaW5zdGVhZCBvZiBpbnQgZm9yIHNvbWUgaW50ZXJuYWwgY29tcHV0YXRpb25zIHRo
YXQgd2VyZSBtaXhpbmcgdGhlIHR3bworICAgICAgICBmb3Igbm8gZ29vZCByZWFzb24uCisgICAg
ICAgIChXZWJDb3JlOjpjb21wdXRlRW5kUG9pbnQpOiBSZW1vdmVkIG51bGwgY2hlY2tzIG5vdyB0
aGF0IHBvc2l0aW9uRnJvbVZhbHVlCisgICAgICAgIGRvZXMgdGhlbSBmb3IgdXMsIHR1cm5pbmcg
dGhpcyBpbnRvIGEgb25lLWxpbmVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1
ZTo6aXNDYWNoZWFibGUgY29uc3QpOiBVc2UgaGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjprbm93blRvQmVPcGFxdWUgY29uc3Qp
OiBSZW1vdmVkIHVubm5lY2Vzc2FyeQorICAgICAgICBjaGVja2luZyB0aGUgY29sb3IgYm90aCBi
ZWZvcmUgYW5kIGFmdGVyIHdoZW4gYSBjb2xvciBmaWx0ZXIgaXMgaW52b2x2ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjplcXVhbHMgY29uc3QpOiBBZGRlZC4gU2hhcmVk
IGJ5IGFsbCB0aGUgZXF1YWxzCisgICAgICAgIGZ1bmN0aW9ucyBmb3IgZGVyaXZlZCBjbGFzc2Vz
LgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kR3JhZGllbnRTdG9wcyk6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgdG8gQ1NTR3JhZGllbnRDb2xvclN0b3AuCisgICAgICAgIChXZWJDb3JlOjphcHBlbmRT
cGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dCk6IEFkZGVkIHRlbXBsYXRlIGhlbHBlcgor
ICAgICAgICBmb3Igd3JpdGluZyB0d28gb3B0aW9uYWwgQ1NTIHZhbHVlcyB3aXRoIGEgc3BhY2Ug
YmV0d2Vlbi4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQ29sb3JTdG9wKTogRGl0dG8uIEFsc28g
Y29udmVydGVkIHRvIG5vbi1tZW1iZXIgZnVuY3Rpb24sCisgICAgICAgIHJlbW92ZWQgdW5uZWVk
ZWQgaXNNaWRwb2ludCBjaGVjaywgdXNlIGFwcGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQ
dHJUZXh0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3VzdG9t
Q1NTVGV4dCBjb25zdCk6IENhbGwgZnVuY3Rpb24KKyAgICAgICAgbWVtYmVycyBzbyB3ZSBkb24n
dCBoYXZlIHRvIGV4cG9zZSBDU1NHcmFkaWVudFZhbHVlIGRhdGEgbWVtYmVycyBhcworICAgICAg
ICBwcm90ZWN0ZWQgdGhpbmdzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IGRlcml2ZWQgY2xhc3Nl
cy4gU29tZSBvdGhlcgorICAgICAgICBzbWFsbCByZWZhY3RvcmluZywgc3VjaCBhcyBnZXR0aW5n
IHJpZCBvZiBleHRyYSBib29sZWFuIHdyb3RlRmlyc3RTdG9wLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBVcGRhdGVkIHRvIHVzZQor
ICAgICAgICBmdW5jdGlvbiBtZW1iZXJzIGluc3RlYWQgb2YgcHJvdGVjdGVkIGRhdGEgbWVtYmVy
cy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0xpbmVhckdyYWRpZW50VmFsdWU6OmVxdWFscyBjb25z
dCk6IENvbXBhcmUgYWxsIGRhdGEKKyAgICAgICAgbWVtYmVycyBhbmQgdXNlIENTU0dyYWRpZW50
VmFsdWU6OmVxdWFscywgbWFrZXMgdGhpcyBhIDEtbGluZXIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0IGNvbnN0KTogQ2FsbCBmdW5jdGlv
bgorICAgICAgICBtZW1iZXJzIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgdXNlIGFwcGVuZFNwYWNl
U2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUmFkaWFs
R3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmVxdWFscyBjb25zdCk6IENvbXBhcmUgYWxsIGRhdGEK
KyAgICAgICAgbWVtYmVycyBhbmQgdXNlIENTU0dyYWRpZW50VmFsdWU6OmVxdWFscy4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6
IENhbGwgZnVuY3Rpb24KKyAgICAgICAgbWVtYmVycyBhcyBkZXNjcmliZWQgYWJvdmUgYW5kIHVz
ZSBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6ZXF1YWxzIGNvbnN0KTogQ29tcGFy
ZSBhbGwgZGF0YQorICAgICAgICBtZW1iZXJzIGFuZCB1c2UgQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1
YWxzLCBtYWtlcyB0aGlzIGEgMS1saW5lci4KKworICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZh
bHVlLmg6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25z
LgorICAgICAgICBSZW5hbWVkIENTU0dyYWRpZW50Q29sb3JTdG9wIGRhdGEgbWVtYmVycyB0byBu
b3QgdXNlIG1fIHByZWZpeCBzaW5jZSB0aGlzIGlzCisgICAgICAgIGEgc3RydWN0IHdpdGggcHVi
bGljIGRhdGEgbWVtYmVycywgYW5kIFdlYktpdCBzdHlsZSBzYXlzIG5vdCB0byBkbyB0aGF0IGhl
cmUuCisgICAgICAgIFJlbW92ZWQgbV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50IGFuZCBpc01p
ZHBvaW50IGZyb20gQ1NTR3JhZGllbnRDb2xvclN0b3AsCisgICAgICAgIG1fY29sb3JJc0Rlcml2
ZWRGcm9tRWxlbWVudCBpcyBub3cgc3RvcmVkIGluIHRoZSBncmFkaWVudCwgbm90IHRoZSBjb2xv
ciBzdG9wLAorICAgICAgICBhbmQgbWlkcG9pbnRzIGFyZSBhbnkgY29sb3Igc3RvcCB3aXRoIG51
bGwgY29sb3IuIFJlcGxhY2VkIHRoZQorICAgICAgICBDU1NHcmFkaWVudFZhbHVlOjpzdG9wQ291
bnQgZnVuY3Rpb24sIHdoaWNoIG1peGVkIHNpemVfdCBhbmQgdW5zaWduZWQgdHlwZXMsCisgICAg
ICAgIHdpdGggYSBoYXNUd29TdG9wcyBmdW5jdGlvbiwgd2hpY2ggaXMgYWxsIHRoZSBjYWxsZXIg
bmVlZHMuIENvbnZlcnRlZCB0aGUKKyAgICAgICAgaXNGaXhlZFNpemUsIGZpeGVkU2l6ZSwgaXNQ
ZW5kaW5nLCBhbmQgbG9hZFN1YmltYWdlcyBpbnRvIHN0YXRpYyBtZW1iZXIKKyAgICAgICAgZnVu
Y3Rpb25zOiB0aGV5IGRvbid0IGRvIGFueSB3b3JrIGFuZCBzbyBkb24ndCBuZWVkIGFuIGluc3Rh
bmNlLiBSZW1vdmVkCisgICAgICAgIHRoZSB1bm5lZWRlZCBncmFkaWVudCB0eXBlIGFyZ3VtZW50
IHRvIHRoZSBjbG9uaW5nIGNvbnN0cnVjdG9ycy4gUmVtb3ZlZAorICAgICAgICBtX3N0b3BzU29y
dGVkIGFuZCBhZGRlZCBtX2hhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50IGFuZAorICAgICAgICBo
YXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudC4gQWRkZWQgZ2V0dGVyIGZ1bmN0aW9ucyB0aGF0IGFy
ZSBwcm90ZWN0ZWQgc28KKyAgICAgICAgdGhlIGRhdGEgbWVtYmVycyB0aGVtc2VsdmVzIGNhbiBi
ZSBwcml2YXRlLiBSZW1vdmVkIHNvcnRTdG9wc0lmTmVlZGVkCisgICAgICAgIGFuZCB3cml0ZUNv
bG9yU3RvcC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcCk6CisgICAgICAgIFVwZGF0ZWQgZm9yIENTU0dy
YWRpZW50Q29sb3JTdG9wIG1lbWJlciByZW5hbWluZy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudCk6IFVzZQorICAg
ICAgICBtb3JlIFdURk1vdmUgdG8gc2F2ZSBhIGxpdHRsZSBiaXQgb2YgcmVmZXJlbmNlIGNvdW50
IGNodXJuOyBpbiBzb21lIGNhc2VzCisgICAgICAgIHRoYXQgbWVhbnMgbW92aW5nIHRoZSBzZXR0
ZXIgY2FsbHMgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gYWZ0ZXIgYWxsCisgICAgICAgIHRo
ZSBlcnJvciBjaGVja2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6IERpdHRvLgorICAgICAgICBSZW1vdmVk
IGNvZGUgdG8gc2V0IGlzTWlkcG9pbnQgYW5kIHRoZSBGSVhNRS1ORVdQQVJTRVIgY29tbWVudCB0
aGF0IHNhaWQKKyAgICAgICAgaXQgY291bGQgYmUgcmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVu
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lUmFkaWFsR3JhZGllbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxpbmVhckdyYWRpZW50KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVDb25pY0dyYWRpZW50
KTogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YXV0b0ZpbGxTdHJvbmdQYXNzd29yZE1hc2tJbWFnZSk6IFVwZGF0ZWQgZm9y
IHRoZSByZW5hbWVkCisgICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIG1lbWJlcnMsIGFkZGVk
IGEgbWlzc2luZyBjYWxsIHRvIGRvbmVBZGRpbmdTdG9wcywKKyAgICAgICAgYW5kIHVzZSBzb21l
IFdURk1vdmUgdG8gY3V0IGRvd24gb24gcmVmZXJlbmNlIGNvdW50IGNodXJuLgorCiAyMDIwLTAy
LTI5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTbGltIGRvd24g
c29tZSBDU1MgcGFyc2luZyBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhZGllbnRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5j
cHAKaW5kZXggMDE0YTU1Y2JmNDNjNTE1ZjI2ZGE2Mzc3NTg3MGU3YmNhYzEwMmVkNC4uOWNkMjM4
ZjEwYzBhNWFlYzk2ZGIzMWNlM2YzZjNhZWI3NjEyNmMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcApAQCAtNjMsMzQgKzYzLDE2IEBAIFJlZlB0cjxJbWFnZT4gQ1NT
R3JhZGllbnRWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0
U2l6ZSYKICAgICB9CiAgICAgYXV0byBuZXdJbWFnZSA9IEdyYWRpZW50SW1hZ2U6OmNyZWF0ZShj
cmVhdGVHcmFkaWVudCgqdGhpcywgcmVuZGVyZXIsIHNpemUpLCBzaXplKTsKICAgICBpZiAoY2Fj
aGVhYmxlKQotICAgICAgICBzYXZlQ2FjaGVkSW1hZ2VGb3JTaXplKHNpemUsIG5ld0ltYWdlLmdl
dCgpKTsKKyAgICAgICAgc2F2ZUNhY2hlZEltYWdlRm9yU2l6ZShzaXplLCBuZXdJbWFnZSk7CiAg
ICAgcmV0dXJuIG5ld0ltYWdlOwogfQogCi0vLyBTaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBm
b3IgZGVwcmVjYXRlZCBncmFkaWVudHMuCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVN0b3Bz
KGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBhLCBjb25zdCBDU1NHcmFkaWVudENvbG9yU3Rv
cCYgYikKLXsKLSAgICBkb3VibGUgYVZhbCA9IGEubV9wb3NpdGlvbi0+ZG91YmxlVmFsdWUoQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIGRvdWJsZSBiVmFsID0gYi5tX3Bvc2l0aW9uLT5k
b3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0KLSAgICByZXR1cm4gYVZhbCA8
IGJWYWw7Ci19Ci0KLXZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6c29ydFN0b3BzSWZOZWVkZWQoKQot
ewotICAgIEFTU0VSVChtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGll
bnQgfHwgbV9ncmFkaWVudFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KTsKLSAg
ICBpZiAoIW1fc3RvcHNTb3J0ZWQpIHsKLSAgICAgICAgaWYgKG1fc3RvcHMuc2l6ZSgpKQotICAg
ICAgICAgICAgc3RkOjpzdGFibGVfc29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5kKCks
IGNvbXBhcmVTdG9wcyk7Ci0gICAgICAgIG1fc3RvcHNTb3J0ZWQgPSB0cnVlOwotICAgIH0KLX0K
LQogc3RydWN0IEdyYWRpZW50U3RvcCB7CiAgICAgQ29sb3IgY29sb3I7Ci0gICAgZmxvYXQgb2Zm
c2V0IHsgMCB9OwotICAgIGJvb2wgc3BlY2lmaWVkIHsgZmFsc2UgfTsKLSAgICBib29sIGlzTWlk
cG9pbnQgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGZsb2F0PiBvZmZzZXQ7CisKKyAgICBib29s
IGlzU3BlY2lmaWVkKCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0Lmhhc1ZhbHVlKCk7IH0KKyAgICBi
b29sIGlzTWlkcG9pbnQoKSBjb25zdCB7IHJldHVybiAhY29sb3IuaXNWYWxpZCgpOyB9CiB9Owog
CiBzdGF0aWMgaW5saW5lIFJlZjxDU1NHcmFkaWVudFZhbHVlPiBjbG9uZShDU1NHcmFkaWVudFZh
bHVlJiB2YWx1ZSkKQEAgLTEwMywzNSArODUsMzEgQEAgc3RhdGljIGlubGluZSBSZWY8Q1NTR3Jh
ZGllbnRWYWx1ZT4gY2xvbmUoQ1NTR3JhZGllbnRWYWx1ZSYgdmFsdWUpCiAgICAgcmV0dXJuIGRv
d25jYXN0PENTU0NvbmljR3JhZGllbnRWYWx1ZT4odmFsdWUpLmNsb25lKCk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0aW9uPgotdm9pZCByZXNvbHZlU3RvcENvbG9ycyhWZWN0b3I8Q1NT
R3JhZGllbnRDb2xvclN0b3AsIDI+JiBzdG9wcywgRnVuY3Rpb24mJiBjb2xvclJlc29sdmVGdW5j
dGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB2b2lkIHJlc29sdmVTdG9wQ29sb3Jz
KFZlY3RvcjxDU1NHcmFkaWVudENvbG9yU3RvcCwgMj4mIHN0b3BzLCBGdW5jdGlvbiYmIGNvbG9y
UmVzb2x2ZUZ1bmN0aW9uKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RvcHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byYgc3RvcCA9IHN0b3BzW2ldOwotICAgICAgICBpZiAo
c3RvcC5pc01pZHBvaW50KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChzdG9w
Lm1fY29sb3IpCi0gICAgICAgICAgICBzdG9wLm1fcmVzb2x2ZWRDb2xvciA9IGNvbG9yUmVzb2x2
ZUZ1bmN0aW9uKCpzdG9wLm1fY29sb3IpOwotICAgICAgICBlbHNlIGlmIChpKSB7Ci0gICAgICAg
ICAgICBhdXRvJiBwcmV2aW91c1N0b3AgPSBzdG9wc1tpIC0gMV07Ci0gICAgICAgICAgICBBU1NF
UlQocHJldmlvdXNTdG9wLm1fY29sb3IpOwotICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0gcHJl
dmlvdXNTdG9wLm1fY29sb3I7Ci0gICAgICAgICAgICBzdG9wLm1fcmVzb2x2ZWRDb2xvciA9IHBy
ZXZpb3VzU3RvcC5tX3Jlc29sdmVkQ29sb3I7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIHN0
b3AgOiBzdG9wcykgeworICAgICAgICBpZiAoc3RvcC5jb2xvcikKKyAgICAgICAgICAgIHN0b3Au
cmVzb2x2ZWRDb2xvciA9IGNvbG9yUmVzb2x2ZUZ1bmN0aW9uKCpzdG9wLmNvbG9yKTsKICAgICB9
CiB9CiAKLVJlZjxDU1NHcmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdp
dGhTdHlsZXNSZXNvbHZlZChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCitib29s
IENTU0dyYWRpZW50VmFsdWU6Omhhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50KCkgY29uc3QKIHsK
LSAgICBib29sIGNvbG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQgPSBmYWxzZTsKLSAgICBmb3IgKGF1
dG8mIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIGlmICghc3RvcC5pc01pZHBvaW50ICYmIHN0
b3AubV9jb2xvciAmJiBTdHlsZTo6QnVpbGRlclN0YXRlOjppc0NvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlRGVyaXZlZEZyb21FbGVtZW50KCpzdG9wLm1fY29sb3IpKSB7Ci0gICAgICAgICAgICBzdG9w
Lm1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICBjb2xvcklz
RGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGlmICgh
bV9oYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCkgeworICAgICAgICBtX2hhc0NvbG9yRGVyaXZl
ZEZyb21FbGVtZW50ID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMp
IHsKKyAgICAgICAgICAgIGlmIChzdG9wLmNvbG9yICYmIFN0eWxlOjpCdWlsZGVyU3RhdGU6Omlz
Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWVEZXJpdmVkRnJvbUVsZW1lbnQoKnN0b3AuY29sb3IpKSB7
CisgICAgICAgICAgICAgICAgbV9oYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgYXV0byByZXN1bHQgPSBjb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID8gY2xvbmUoKnRoaXMp
IDogbWFrZVJlZigqdGhpcyk7CisgICAgcmV0dXJuICptX2hhc0NvbG9yRGVyaXZlZEZyb21FbGVt
ZW50OworfQorCitSZWY8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGll
bnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQor
eworICAgIGF1dG8gcmVzdWx0ID0gaGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQoKSA/IGNsb25l
KCp0aGlzKSA6IG1ha2VSZWYoKnRoaXMpOwogICAgIHJlc29sdmVTdG9wQ29sb3JzKHJlc3VsdC0+
bV9zdG9wcywgWyZdKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBjb2xvclZhbHVlKSB7CiAgICAg
ICAgIHJldHVybiBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29sb3JWYWx1
ZSk7CiAgICAgfSk7CkBAIC0xNTIsNyArMTMwLDcgQEAgcHVibGljOgogICAgICAgICA6IG1fZGF0
YShkYXRhKQogICAgIHsKICAgICB9Ci0gICAgCisKICAgICBmbG9hdCBncmFkaWVudExlbmd0aCgp
IGNvbnN0CiAgICAgewogICAgICAgICBhdXRvIGdyYWRpZW50U2l6ZSA9IG1fZGF0YS5wb2ludDAg
LSBtX2RhdGEucG9pbnQxOwpAQCAtMTYyLDEzICsxNDAsMTMgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNpZGVSYW5nZShWZWN0b3I8R3JhZGllbnRT
dG9wPiYgc3RvcHMpCiAgICAgewotICAgICAgICBmbG9hdCBmaXJzdE9mZnNldCA9IHN0b3BzLmZp
cnN0KCkub2Zmc2V0OwotICAgICAgICBmbG9hdCBsYXN0T2Zmc2V0ID0gc3RvcHMubGFzdCgpLm9m
ZnNldDsKKyAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSAqc3RvcHMuZmlyc3QoKS5vZmZzZXQ7
CisgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSAqc3RvcHMubGFzdCgpLm9mZnNldDsKICAgICAg
ICAgaWYgKGZpcnN0T2Zmc2V0ICE9IGxhc3RPZmZzZXQpIHsKICAgICAgICAgICAgIGZsb2F0IHNj
YWxlID0gbGFzdE9mZnNldCAtIGZpcnN0T2Zmc2V0OwogCiAgICAgICAgICAgICBmb3IgKGF1dG8m
IHN0b3AgOiBzdG9wcykKLSAgICAgICAgICAgICAgICBzdG9wLm9mZnNldCA9IChzdG9wLm9mZnNl
dCAtIGZpcnN0T2Zmc2V0KSAvIHNjYWxlOworICAgICAgICAgICAgICAgIHN0b3Aub2Zmc2V0ID0g
KCpzdG9wLm9mZnNldCAtIGZpcnN0T2Zmc2V0KSAvIHNjYWxlOwogCiAgICAgICAgICAgICBhdXRv
IHAwID0gbV9kYXRhLnBvaW50MDsKICAgICAgICAgICAgIGF1dG8gcDEgPSBtX2RhdGEucG9pbnQx
OwpAQCAtMjA5LDIyICsxODcsMjIgQEAgcHVibGljOgogCiAgICAgICAgIC8vIFJhdGhlciB0aGFu
IHNjYWxpbmcgdGhlIHBvaW50cyA8IDAsIHdlIHRydW5jYXRlIHRoZW0sIHNvIG9ubHkgc2NhbGUg
YWNjb3JkaW5nIHRvIHRoZSBsYXJnZXN0IHBvaW50LgogICAgICAgICBmbG9hdCBmaXJzdE9mZnNl
dCA9IDA7Ci0gICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBzdG9wcy5sYXN0KCkub2Zmc2V0Owor
ICAgICAgICBmbG9hdCBsYXN0T2Zmc2V0ID0gKnN0b3BzLmxhc3QoKS5vZmZzZXQ7CiAgICAgICAg
IGZsb2F0IHNjYWxlID0gbGFzdE9mZnNldCAtIGZpcnN0T2Zmc2V0OwogCiAgICAgICAgIC8vIFJl
c2V0IHBvaW50cyBiZWxvdyAwIHRvIHRoZSBmaXJzdCB2aXNpYmxlIGNvbG9yLgogICAgICAgICBz
aXplX3QgZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPSBudW1TdG9wczsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc3RvcHNb
aV0ub2Zmc2V0ID49IDApIHsKKyAgICAgICAgICAgIGlmICgqc3RvcHNbaV0ub2Zmc2V0ID49IDAp
IHsKICAgICAgICAgICAgICAgICBmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA9IGk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
Zmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPiAwKSB7Ci0gICAgICAgICAgICBpZiAoZmlyc3RaZXJv
T3JHcmVhdGVySW5kZXggPCBudW1TdG9wcyAmJiBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRl
eF0ub2Zmc2V0ID4gMCkgewotICAgICAgICAgICAgICAgIGZsb2F0IHByZXZPZmZzZXQgPSBzdG9w
c1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleCAtIDFdLm9mZnNldDsKLSAgICAgICAgICAgICAgICBm
bG9hdCBuZXh0T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9mZnNldDsK
KyAgICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA8IG51bVN0b3BzICYmICpz
dG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0ID4gMCkgeworICAgICAgICAgICAg
ICAgIGZsb2F0IHByZXZPZmZzZXQgPSAqc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggLSAx
XS5vZmZzZXQ7CisgICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9mZnNldCA9ICpzdG9wc1tmaXJz
dFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0OwogCiAgICAgICAgICAgICAgICAgZmxvYXQgaW50
ZXJTdG9wUHJvcG9ydGlvbiA9IC1wcmV2T2Zmc2V0IC8gKG5leHRPZmZzZXQgLSBwcmV2T2Zmc2V0
KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVu
dHMgdXNpbmcgcHJlbXVsdGlwbGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxp
Y2F0aW9uLgpAQCAtMjQzLDcgKzIyMSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAg
IGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQotICAgICAgICAgICAgc3RvcC5vZmZzZXQgLz0gc2Nh
bGU7CisgICAgICAgICAgICAqc3RvcC5vZmZzZXQgLz0gc2NhbGU7CiAKICAgICAgICAgbV9kYXRh
LnN0YXJ0UmFkaXVzICo9IHNjYWxlOwogICAgICAgICBtX2RhdGEuZW5kUmFkaXVzICo9IHNjYWxl
OwpAQCAtMjY0LDE2ICsyNDIsMTYgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgc2l6ZV90
IGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID0gbnVtU3RvcHM7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewotICAgICAgICAgICAgaWYgKHN0b3BzW2ldLm9m
ZnNldCA+PSAwKSB7CisgICAgICAgICAgICBpZiAoKnN0b3BzW2ldLm9mZnNldCA+PSAwKSB7CiAg
ICAgICAgICAgICAgICAgZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPSBpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZpcnN0
WmVyb09yR3JlYXRlckluZGV4ID4gMCkgewotICAgICAgICAgICAgaWYgKGZpcnN0WmVyb09yR3Jl
YXRlckluZGV4IDwgbnVtU3RvcHMgJiYgc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9m
ZnNldCA+IDApIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBwcmV2T2Zmc2V0ID0gc3RvcHNbZmly
c3RaZXJvT3JHcmVhdGVySW5kZXggLSAxXS5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
bmV4dE9mZnNldCA9IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQ7CisgICAg
ICAgICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPCBudW1TdG9wcyAmJiAqc3RvcHNb
Zmlyc3RaZXJvT3JHcmVhdGVySW5kZXhdLm9mZnNldCA+IDApIHsKKyAgICAgICAgICAgICAgICBm
bG9hdCBwcmV2T2Zmc2V0ID0gKnN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0ub2Zm
c2V0OworICAgICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSAqc3RvcHNbZmlyc3RaZXJv
T3JHcmVhdGVySW5kZXhdLm9mZnNldDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gLXByZXZPZmZzZXQgLyAobmV4dE9mZnNldCAt
IHByZXZPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGludGVycG9s
YXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91bGQgZG8g
cHJlbXVsdGlwbGljYXRpb24uCkBAIC0yOTMsMTYgKzI3MSwxNiBAQCBwdWJsaWM6CiAKICAgICAg
ICAgc2l6ZV90IGxhc3RPbmVPckxlc3NJbmRleCA9IG51bVN0b3BzOwogICAgICAgICBmb3IgKGlu
dCBpID0gbnVtU3RvcHMgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgaWYgKHN0b3Bz
W2ldLm9mZnNldCA8PSAxKSB7CisgICAgICAgICAgICBpZiAoKnN0b3BzW2ldLm9mZnNldCA8PSAx
KSB7CiAgICAgICAgICAgICAgICAgbGFzdE9uZU9yTGVzc0luZGV4ID0gaTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
aWYgKGxhc3RPbmVPckxlc3NJbmRleCA8IG51bVN0b3BzIC0gMSkgewotICAgICAgICAgICAgaWYg
KGxhc3RPbmVPckxlc3NJbmRleCA8IG51bVN0b3BzICYmIHN0b3BzW2xhc3RPbmVPckxlc3NJbmRl
eF0ub2Zmc2V0IDwgMSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHByZXZPZmZzZXQgPSBzdG9w
c1tsYXN0T25lT3JMZXNzSW5kZXhdLm9mZnNldDsKLSAgICAgICAgICAgICAgICBmbG9hdCBuZXh0
T2Zmc2V0ID0gc3RvcHNbbGFzdE9uZU9yTGVzc0luZGV4ICsgMV0ub2Zmc2V0OworICAgICAgICAg
ICAgaWYgKGxhc3RPbmVPckxlc3NJbmRleCA8IG51bVN0b3BzICYmICpzdG9wc1tsYXN0T25lT3JM
ZXNzSW5kZXhdLm9mZnNldCA8IDEpIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBwcmV2T2Zmc2V0
ID0gKnN0b3BzW2xhc3RPbmVPckxlc3NJbmRleF0ub2Zmc2V0OworICAgICAgICAgICAgICAgIGZs
b2F0IG5leHRPZmZzZXQgPSAqc3RvcHNbbGFzdE9uZU9yTGVzc0luZGV4ICsgMV0ub2Zmc2V0Owog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZsb2F0IGludGVyU3RvcFByb3BvcnRp
b24gPSAoMSAtIHByZXZPZmZzZXQpIC8gKG5leHRPZmZzZXQgLSBwcmV2T2Zmc2V0KTsKICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBpbnRlcnBvbGF0ZSBncmFkaWVudHMgdXNpbmcg
cHJlbXVsdGlwbGllZCBjb2xvcnMsIHRoaXMgc2hvdWxkIGRvIHByZW11bHRpcGxpY2F0aW9uLgpA
QCAtMzI2LDI0ICszMDQsMjYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhZGllbnRBZGFwdGVyPgog
R3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMo
R3JhZGllbnRBZGFwdGVyJiBncmFkaWVudEFkYXB0ZXIsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0
IG1heExlbmd0aEZvclJlcGVhdCkKIHsKICAgICBpZiAobV9ncmFkaWVudFR5cGUgPT0gQ1NTRGVw
cmVjYXRlZExpbmVhckdyYWRpZW50IHx8IG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRS
YWRpYWxHcmFkaWVudCkgewotICAgICAgICBzb3J0U3RvcHNJZk5lZWRlZCgpOwotCiAgICAgICAg
IEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgcmVzdWx0OwogICAgICAgICByZXN1bHQucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShtX3N0b3BzLnNpemUoKSk7CiAKICAgICAgICAgZm9yIChhdXRvJiBz
dG9wIDogbV9zdG9wcykgewogICAgICAgICAgICAgZmxvYXQgb2Zmc2V0OwotICAgICAgICAgICAg
aWYgKHN0b3AubV9wb3NpdGlvbi0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICAgICAgb2Zm
c2V0ID0gc3RvcC5tX3Bvc2l0aW9uLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VO
VEFHRSkgLyAxMDA7CisgICAgICAgICAgICBpZiAoc3RvcC5wb3NpdGlvbi0+aXNQZXJjZW50YWdl
KCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcC5wb3NpdGlvbi0+ZmxvYXRWYWx1ZShD
U1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpIC8gMTAwOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+ZmxvYXRWYWx1ZShDU1NVbml0
VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcC5wb3NpdGlv
bi0+ZmxvYXRWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAKLSAgICAgICAgICAgIENv
bG9yIGNvbG9yID0gc3RvcC5tX3Jlc29sdmVkQ29sb3I7CisgICAgICAgICAgICBDb2xvciBjb2xv
ciA9IHN0b3AucmVzb2x2ZWRDb2xvcjsKICAgICAgICAgICAgIGlmIChzdHlsZS5oYXNBcHBsZUNv
bG9yRmlsdGVyKCkpCiAgICAgICAgICAgICAgICAgc3R5bGUuYXBwbGVDb2xvckZpbHRlcigpLnRy
YW5zZm9ybUNvbG9yKGNvbG9yKTsKICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
eyBvZmZzZXQsIGNvbG9yIH0pOwogICAgICAgICB9CiAKKyAgICAgICAgc3RkOjpzdGFibGVfc29y
dChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBbXSAoY29uc3QgR3JhZGllbnQ6OkNvbG9y
U3RvcCYgYSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYikgeworICAgICAgICAgICAgcmV0
dXJuIGEub2Zmc2V0IDwgYi5vZmZzZXQ7CisgICAgICAgIH0pOworCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCkBAIC0zNTUsMTYgKzMzNSwxNCBAQCBHcmFkaWVudDo6Q29sb3JTdG9w
VmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdy
YWRpZQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewogICAgICAg
ICBhdXRvJiBzdG9wID0gbV9zdG9wc1tpXTsKIAotICAgICAgICBzdG9wc1tpXS5pc01pZHBvaW50
ID0gc3RvcC5pc01pZHBvaW50OwotCi0gICAgICAgIENvbG9yIGNvbG9yID0gc3RvcC5tX3Jlc29s
dmVkQ29sb3I7CisgICAgICAgIENvbG9yIGNvbG9yID0gc3RvcC5yZXNvbHZlZENvbG9yOwogICAg
ICAgICBpZiAoc3R5bGUuaGFzQXBwbGVDb2xvckZpbHRlcigpKQogICAgICAgICAgICAgc3R5bGUu
YXBwbGVDb2xvckZpbHRlcigpLnRyYW5zZm9ybUNvbG9yKGNvbG9yKTsKIAogICAgICAgICBzdG9w
c1tpXS5jb2xvciA9IGNvbG9yOwogCi0gICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24pIHsKLSAg
ICAgICAgICAgIGF1dG8mIHBvc2l0aW9uVmFsdWUgPSAqc3RvcC5tX3Bvc2l0aW9uOworICAgICAg
ICBpZiAoc3RvcC5wb3NpdGlvbikgeworICAgICAgICAgICAgYXV0byYgcG9zaXRpb25WYWx1ZSA9
ICpzdG9wLnBvc2l0aW9uOwogICAgICAgICAgICAgaWYgKHBvc2l0aW9uVmFsdWUuaXNQZXJjZW50
YWdlKCkpCiAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gcG9zaXRpb25WYWx1ZS5m
bG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSkgLyAxMDA7CiAgICAgICAgICAg
ICBlbHNlIGlmIChwb3NpdGlvblZhbHVlLmlzTGVuZ3RoKCkgfHwgcG9zaXRpb25WYWx1ZS5pc1Zp
ZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpIHx8IHBvc2l0aW9uVmFsdWUuaXNDYWxjdWxhdGVkUGVy
Y2VudGFnZVdpdGhMZW5ndGgoKSkgewpAQCAtMzgyLDM1ICszNjAsMzEgQEAgR3JhZGllbnQ6OkNv
bG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFw
dGVyJiBncmFkaWUKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAwOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgc3RvcHNbaV0uc3BlY2lmaWVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIElmIHRoZSBmaXJzdCBjb2xvci1zdG9wIGRvZXMgbm90IGhhdmUgYSBwb3NpdGlvbiwg
aXRzIHBvc2l0aW9uIGRlZmF1bHRzIHRvIDAlLgogICAgICAgICAgICAgLy8gSWYgdGhlIGxhc3Qg
Y29sb3Itc3RvcCBkb2VzIG5vdCBoYXZlIGEgcG9zaXRpb24sIGl0cyBwb3NpdGlvbiBkZWZhdWx0
cyB0byAxMDAlLgotICAgICAgICAgICAgaWYgKCFpKSB7CisgICAgICAgICAgICBpZiAoIWkpCiAg
ICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICBzdG9w
c1tpXS5zcGVjaWZpZWQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChudW1TdG9wcyA+
IDEgJiYgaSA9PSBudW1TdG9wcyAtIDEpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKG51bVN0b3Bz
ID4gMSAmJiBpID09IG51bVN0b3BzIC0gMSkKICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZz
ZXQgPSAxOwotICAgICAgICAgICAgICAgIHN0b3BzW2ldLnNwZWNpZmllZCA9IHRydWU7Ci0gICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiBhIGNvbG9yLXN0b3AgaGFzIGEg
cG9zaXRpb24gdGhhdCBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBvZiBhbnkK
ICAgICAgICAgLy8gY29sb3Itc3RvcCBiZWZvcmUgaXQgaW4gdGhlIGxpc3QsIGl0cyBwb3NpdGlv
biBpcyBjaGFuZ2VkIHRvIGJlIGVxdWFsIHRvIHRoZQogICAgICAgICAvLyBsYXJnZXN0IHNwZWNp
ZmllZCBwb3NpdGlvbiBvZiBhbnkgY29sb3Itc3RvcCBiZWZvcmUgaXQuCi0gICAgICAgIGlmIChz
dG9wc1tpXS5zcGVjaWZpZWQgJiYgaSA+IDApIHsKKyAgICAgICAgaWYgKHN0b3BzW2ldLmlzU3Bl
Y2lmaWVkKCkgJiYgaSA+IDApIHsKICAgICAgICAgICAgIHNpemVfdCBwcmV2U3BlY2lmaWVkSW5k
ZXg7CiAgICAgICAgICAgICBmb3IgKHByZXZTcGVjaWZpZWRJbmRleCA9IGkgLSAxOyBwcmV2U3Bl
Y2lmaWVkSW5kZXg7IC0tcHJldlNwZWNpZmllZEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHN0b3BzW3ByZXZTcGVjaWZpZWRJbmRleF0uc3BlY2lmaWVkKQorICAgICAgICAgICAgICAgIGlm
IChzdG9wc1twcmV2U3BlY2lmaWVkSW5kZXhdLmlzU3BlY2lmaWVkKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoc3RvcHNbaV0u
b2Zmc2V0IDwgc3RvcHNbcHJldlNwZWNpZmllZEluZGV4XS5vZmZzZXQpCisgICAgICAgICAgICBp
ZiAoKnN0b3BzW2ldLm9mZnNldCA8ICpzdG9wc1twcmV2U3BlY2lmaWVkSW5kZXhdLm9mZnNldCkK
ICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSBzdG9wc1twcmV2U3BlY2lmaWVkSW5k
ZXhdLm9mZnNldDsKICAgICAgICAgfQogICAgIH0KIAotICAgIEFTU0VSVChzdG9wc1swXS5zcGVj
aWZpZWQgJiYgc3RvcHNbbnVtU3RvcHMgLSAxXS5zcGVjaWZpZWQpOworICAgIEFTU0VSVChzdG9w
c1swXS5pc1NwZWNpZmllZCgpICYmIHN0b3BzW251bVN0b3BzIC0gMV0uaXNTcGVjaWZpZWQoKSk7
CiAKICAgICAvLyBJZiBhbnkgY29sb3Itc3RvcCBzdGlsbCBkb2VzIG5vdCBoYXZlIGEgcG9zaXRp
b24sIHRoZW4sIGZvciBlYWNoIHJ1biBvZiBhZGphY2VudAogICAgIC8vIGNvbG9yLXN0b3BzIHdp
dGhvdXQgcG9zaXRpb25zLCBzZXQgdGhlaXIgcG9zaXRpb25zIHNvIHRoYXQgdGhleSBhcmUgZXZl
bmx5IHNwYWNlZApAQCAtNDIwLDE1ICszOTQsMTUgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3Rv
ciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUK
ICAgICAgICAgYm9vbCBpblVuc3BlY2lmaWVkUnVuID0gZmFsc2U7CiAKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0b3Bz
W2ldLnNwZWNpZmllZCAmJiAhaW5VbnNwZWNpZmllZFJ1bikgeworICAgICAgICAgICAgaWYgKCFz
dG9wc1tpXS5pc1NwZWNpZmllZCgpICYmICFpblVuc3BlY2lmaWVkUnVuKSB7CiAgICAgICAgICAg
ICAgICAgdW5zcGVjaWZpZWRSdW5TdGFydCA9IGk7CiAgICAgICAgICAgICAgICAgaW5VbnNwZWNp
ZmllZFJ1biA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3BzW2ldLnNwZWNpZmll
ZCAmJiBpblVuc3BlY2lmaWVkUnVuKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3BzW2ld
LmlzU3BlY2lmaWVkKCkgJiYgaW5VbnNwZWNpZmllZFJ1bikgewogICAgICAgICAgICAgICAgIHNp
emVfdCB1bnNwZWNpZmllZFJ1bkVuZCA9IGk7CiAKICAgICAgICAgICAgICAgICBpZiAodW5zcGVj
aWZpZWRSdW5TdGFydCA8IHVuc3BlY2lmaWVkUnVuRW5kKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZsb2F0IGxhc3RTcGVjaWZpZWRPZmZzZXQgPSBzdG9wc1t1bnNwZWNpZmllZFJ1blN0YXJ0IC0g
MV0ub2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBmbG9hdCBuZXh0U3BlY2lmaWVkT2Zmc2V0
ID0gc3RvcHNbdW5zcGVjaWZpZWRSdW5FbmRdLm9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgbGFzdFNwZWNpZmllZE9mZnNldCA9ICpzdG9wc1t1bnNwZWNpZmllZFJ1blN0YXJ0IC0g
MV0ub2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBmbG9hdCBuZXh0U3BlY2lmaWVkT2Zmc2V0
ID0gKnN0b3BzW3Vuc3BlY2lmaWVkUnVuRW5kXS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGRlbHRhID0gKG5leHRTcGVjaWZpZWRPZmZzZXQgLSBsYXN0U3BlY2lmaWVkT2Zmc2V0
KSAvICh1bnNwZWNpZmllZFJ1bkVuZCAtIHVuc3BlY2lmaWVkUnVuU3RhcnQgKyAxKTsKIAogICAg
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gdW5zcGVjaWZpZWRSdW5TdGFydDsgaiA8
IHVuc3BlY2lmaWVkUnVuRW5kOyArK2opCkBAIC00NTQsNyArNDI4LDcgQEAgR3JhZGllbnQ6OkNv
bG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFw
dGVyJiBncmFkaWUKICAgICAvLyBNaWRwb2ludHMgdGhhdCBjb2luY2lkZSB3aXRoIGNvbG9yIHN0
b3BzIGFyZSB0cmVhdGVkIHNwZWNpYWxseSBzaW5jZSB0aGV5IGRvbid0IHJlcXVpcmUKICAgICAv
LyBleHRyYSBzdG9wcyBhbmQgZ2VuZXJhdGUgaGFyZCBsaW5lcy4KICAgICBmb3IgKHNpemVfdCB4
ID0gMTsgeCA8IHN0b3BzLnNpemUoKSAtIDE7KSB7Ci0gICAgICAgIGlmICghc3RvcHNbeF0uaXNN
aWRwb2ludCkgeworICAgICAgICBpZiAoIXN0b3BzW3hdLmlzTWlkcG9pbnQoKSkgewogICAgICAg
ICAgICAgKyt4OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTQ2NCw5ICs0
MzgsOSBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1
dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgICAgICBDb2xvciBjb2xvcjEgPSBz
dG9wc1t4IC0gMV0uY29sb3I7CiAgICAgICAgIENvbG9yIGNvbG9yMiA9IHN0b3BzW3ggKyAxXS5j
b2xvcjsKICAgICAgICAgLy8gTGlrZXdpc2UgZmluZCB0aGUgcG9zaXRpb24gb2YgcHJldmlvdXMg
YW5kIG5leHQgY29sb3Igc3RvcC4KLSAgICAgICAgZmxvYXQgb2Zmc2V0MSA9IHN0b3BzW3ggLSAx
XS5vZmZzZXQ7Ci0gICAgICAgIGZsb2F0IG9mZnNldDIgPSBzdG9wc1t4ICsgMV0ub2Zmc2V0Owot
ICAgICAgICBmbG9hdCBvZmZzZXQgPSBzdG9wc1t4XS5vZmZzZXQ7CisgICAgICAgIGZsb2F0IG9m
ZnNldDEgPSAqc3RvcHNbeCAtIDFdLm9mZnNldDsKKyAgICAgICAgZmxvYXQgb2Zmc2V0MiA9ICpz
dG9wc1t4ICsgMV0ub2Zmc2V0OworICAgICAgICBmbG9hdCBvZmZzZXQgPSAqc3RvcHNbeF0ub2Zm
c2V0OwogCiAgICAgICAgIC8vIENoZWNrIGlmIGV2ZXJ5dGhpbmcgY29pbmNpZGVzIG9yIHRoZSBt
aWRwb2ludCBpcyBleGFjdGx5IGluIHRoZSBtaWRkbGUuCiAgICAgICAgIC8vIElmIHNvLCBpZ25v
cmUgdGhlIG1pZHBvaW50LgpAQCAtNDc5LDcgKzQ1Myw2IEBAIEdyYWRpZW50OjpDb2xvclN0b3BW
ZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYgZ3Jh
ZGllCiAgICAgICAgIGlmIChvZmZzZXQxID09IG9mZnNldCkgewogICAgICAgICAgICAgLy8gTW9y
cGggdGhlIG1pZHBvaW50IHRvIGEgcmVndWxhciBzdG9wIHdpdGggdGhlIGNvbG9yIG9mIHRoZSBu
ZXh0IGNvbG9yIHN0b3AuCiAgICAgICAgICAgICBzdG9wc1t4XS5jb2xvciA9IGNvbG9yMjsKLSAg
ICAgICAgICAgIHN0b3BzW3hdLmlzTWlkcG9pbnQgPSBmYWxzZTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKQEAgLTQ4Nyw3ICs0NjAsNiBAQCBHcmFkaWVudDo6Q29sb3JTdG9w
VmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdy
YWRpZQogICAgICAgICBpZiAob2Zmc2V0MiA9PSBvZmZzZXQpIHsKICAgICAgICAgICAgIC8vIE1v
cnBoIHRoZSBtaWRwb2ludCB0byBhIHJlZ3VsYXIgc3RvcCB3aXRoIHRoZSBjb2xvciBvZiB0aGUg
cHJldmlvdXMgY29sb3Igc3RvcC4KICAgICAgICAgICAgIHN0b3BzW3hdLmNvbG9yID0gY29sb3Ix
OwotICAgICAgICAgICAgc3RvcHNbeF0uaXNNaWRwb2ludCA9IGZhbHNlOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KIApAQCAtNTA4LDcgKzQ4MCw3IEBAIEdyYWRpZW50OjpDb2xv
clN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRl
ciYgZ3JhZGllCiAgICAgICAgIH0KICAgICAgICAgLy8gY2FsY3VsYXRlIGNvbG9ycwogICAgICAg
ICBmb3IgKHNpemVfdCB5ID0gMDsgeSA8IDk7ICsreSkgewotICAgICAgICAgICAgZmxvYXQgcmVs
YXRpdmVPZmZzZXQgPSAobmV3U3RvcHNbeV0ub2Zmc2V0IC0gb2Zmc2V0MSkgLyAob2Zmc2V0MiAt
IG9mZnNldDEpOworICAgICAgICAgICAgZmxvYXQgcmVsYXRpdmVPZmZzZXQgPSAoKm5ld1N0b3Bz
W3ldLm9mZnNldCAtIG9mZnNldDEpIC8gKG9mZnNldDIgLSBvZmZzZXQxKTsKICAgICAgICAgICAg
IGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6OnBvdyhyZWxhdGl2ZU9mZnNldCwgc3RkOjpsb2coLjVm
KSAvIHN0ZDo6bG9nKG1pZHBvaW50KSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IG5vdCBw
cmVtdWx0aXBseSBoZXJlPwogICAgICAgICAgICAgbmV3U3RvcHNbeV0uY29sb3IgPSBibGVuZChj
b2xvcjEsIGNvbG9yMiwgbXVsdGlwbGllciwgZmFsc2UgLyogZG8gbm90IHByZW11bHRpcGx5ICov
KTsKQEAgLTUyNyw3ICs0OTksNyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRp
ZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgIGlmICht
X3JlcGVhdGluZyAmJiBudW1TdG9wcyA+IDEpIHsKICAgICAgICAgLy8gSWYgdGhlIGRpZmZlcmVu
Y2UgaW4gdGhlIHBvc2l0aW9ucyBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgY29sb3Itc3RvcHMgaXMg
MCwKICAgICAgICAgLy8gdGhlIGdyYWRpZW50IGRlZmluZXMgYSBzb2xpZC1jb2xvciBpbWFnZSB3
aXRoIHRoZSBjb2xvciBvZiB0aGUgbGFzdCBjb2xvci1zdG9wIGluIHRoZSBydWxlLgotICAgICAg
ICBmbG9hdCBncmFkaWVudFJhbmdlID0gc3RvcHMubGFzdCgpLm9mZnNldCAtIHN0b3BzLmZpcnN0
KCkub2Zmc2V0OworICAgICAgICBmbG9hdCBncmFkaWVudFJhbmdlID0gKnN0b3BzLmxhc3QoKS5v
ZmZzZXQgLSAqc3RvcHMuZmlyc3QoKS5vZmZzZXQ7CiAgICAgICAgIGlmICghZ3JhZGllbnRSYW5n
ZSkgewogICAgICAgICAgICAgc3RvcHMuZmlyc3QoKS5vZmZzZXQgPSAwOwogICAgICAgICAgICAg
c3RvcHMuZmlyc3QoKS5jb2xvciA9IHN0b3BzLmxhc3QoKS5jb2xvcjsKQEAgLTU0MCw3ICs1MTIs
NyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVT
dG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgICAgICAgICAgc2l6ZV90IG9yaWdpbmFs
Rmlyc3RTdG9wSW5kZXggPSAwOwogCiAgICAgICAgICAgICAvLyBXb3JrIGJhY2t3YXJkcyBmcm9t
IHRoZSBmaXJzdCwgYWRkaW5nIHN0b3BzIHVudGlsIHdlIGdldCBvbmUgYmVmb3JlIDAuCi0gICAg
ICAgICAgICBmbG9hdCBmaXJzdE9mZnNldCA9IHN0b3BzWzBdLm9mZnNldDsKKyAgICAgICAgICAg
IGZsb2F0IGZpcnN0T2Zmc2V0ID0gKnN0b3BzWzBdLm9mZnNldDsKICAgICAgICAgICAgIGlmIChm
aXJzdE9mZnNldCA+IDApIHsKICAgICAgICAgICAgICAgICBmbG9hdCBjdXJyT2Zmc2V0ID0gZmly
c3RPZmZzZXQ7CiAgICAgICAgICAgICAgICAgc2l6ZV90IHNyY1N0b3BPcmRpbmFsID0gb3JpZ2lu
YWxOdW1TdG9wcyAtIDE7CkBAIC01NTQsMTMgKzUyNiwxMyBAQCBHcmFkaWVudDo6Q29sb3JTdG9w
VmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdy
YWRpZQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNyY1N0b3BPcmRpbmFsKQotICAgICAgICAgICAgICAgICAgICAgICAgY3Vyck9mZnNl
dCAtPSBzdG9wc1tvcmlnaW5hbEZpcnN0U3RvcEluZGV4ICsgc3JjU3RvcE9yZGluYWxdLm9mZnNl
dCAtIHN0b3BzW29yaWdpbmFsRmlyc3RTdG9wSW5kZXggKyBzcmNTdG9wT3JkaW5hbCAtIDFdLm9m
ZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJPZmZzZXQgLT0gKnN0b3BzW29yaWdp
bmFsRmlyc3RTdG9wSW5kZXggKyBzcmNTdG9wT3JkaW5hbF0ub2Zmc2V0IC0gKnN0b3BzW29yaWdp
bmFsRmlyc3RTdG9wSW5kZXggKyBzcmNTdG9wT3JkaW5hbCAtIDFdLm9mZnNldDsKICAgICAgICAg
ICAgICAgICAgICAgc3JjU3RvcE9yZGluYWwgPSAoc3JjU3RvcE9yZGluYWwgKyBvcmlnaW5hbE51
bVN0b3BzIC0gMSkgJSBvcmlnaW5hbE51bVN0b3BzOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgLy8gV29yayBmb3J3YXJkcyBmcm9tIHRoZSBlbmQsIGFk
ZGluZyBzdG9wcyB1bnRpbCB3ZSBnZXQgb25lIGFmdGVyIDEuCi0gICAgICAgICAgICBmbG9hdCBs
YXN0T2Zmc2V0ID0gc3RvcHNbc3RvcHMuc2l6ZSgpIC0gMV0ub2Zmc2V0OworICAgICAgICAgICAg
ZmxvYXQgbGFzdE9mZnNldCA9ICpzdG9wc1tzdG9wcy5zaXplKCkgLSAxXS5vZmZzZXQ7CiAgICAg
ICAgICAgICBpZiAobGFzdE9mZnNldCA8IG1heEV4dGVudCkgewogICAgICAgICAgICAgICAgIGZs
b2F0IGN1cnJPZmZzZXQgPSBsYXN0T2Zmc2V0OwogICAgICAgICAgICAgICAgIHNpemVfdCBzcmNT
dG9wT3JkaW5hbCA9IDA7CkBAIC01NzMsNyArNTQ1LDcgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZl
Y3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFk
aWUKICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJPZmZzZXQgPiBtYXhFeHRlbnQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY1N0
b3BPcmRpbmFsIDwgb3JpZ2luYWxOdW1TdG9wcyAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyT2Zmc2V0ICs9IHN0b3BzW3NyY1N0b3BJbmRleCArIDFdLm9mZnNldCAtIHN0b3BzW3Ny
Y1N0b3BJbmRleF0ub2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgY3Vyck9mZnNldCAr
PSAqc3RvcHNbc3JjU3RvcEluZGV4ICsgMV0ub2Zmc2V0IC0gKnN0b3BzW3NyY1N0b3BJbmRleF0u
b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBzcmNTdG9wT3JkaW5hbCA9IChzcmNTdG9wT3Jk
aW5hbCArIDEpICUgb3JpZ2luYWxOdW1TdG9wczsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC01ODEsNDcgKzU1Myw0NyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENT
U0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAg
IH0KIAogICAgIC8vIElmIHRoZSBncmFkaWVudCBnb2VzIG91dHNpZGUgdGhlIDAtMSByYW5nZSwg
bm9ybWFsaXplIGl0IGJ5IG1vdmluZyB0aGUgZW5kcG9pbnRzLCBhbmQgYWRqdXN0aW5nIHRoZSBz
dG9wcy4KLSAgICBpZiAoc3RvcHMuc2l6ZSgpID4gMSAmJiAoc3RvcHMuZmlyc3QoKS5vZmZzZXQg
PCAwIHx8IHN0b3BzLmxhc3QoKS5vZmZzZXQgPiAxKSkKKyAgICBpZiAoc3RvcHMuc2l6ZSgpID4g
MSAmJiAoKnN0b3BzLmZpcnN0KCkub2Zmc2V0IDwgMCB8fCAqc3RvcHMubGFzdCgpLm9mZnNldCA+
IDEpKQogICAgICAgICBncmFkaWVudEFkYXB0ZXIubm9ybWFsaXplU3RvcHNBbmRFbmRwb2ludHNP
dXRzaWRlUmFuZ2Uoc3RvcHMpOwogICAgIAogICAgIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3Ig
cmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0b3BzLnNpemUoKSk7
CiAgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCi0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoeyBzdG9wLm9mZnNldCwgc3RvcC5jb2xvciB9KTsKKyAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZCh7ICpzdG9wLm9mZnNldCwgc3RvcC5jb2xvciB9KTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIHN0YXRpYyBmbG9hdCBwb3NpdGlvbkZyb21WYWx1ZShjb25zdCBDU1NQcmlt
aXRpdmVWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBjb25zdCBGbG9hdFNpemUmIHNpemUsIGJvb2wgaXNIb3Jpem9udGFsKQogewot
ICAgIGludCBvcmlnaW4gPSAwOwotICAgIGludCBzaWduID0gMTsKLSAgICBpbnQgZWRnZURpc3Rh
bmNlID0gaXNIb3Jpem9udGFsID8gc2l6ZS53aWR0aCgpIDogc2l6ZS5oZWlnaHQoKTsKLSAgICAK
KyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IG9yaWdpbiA9
IDA7CisgICAgZmxvYXQgc2lnbiA9IDE7CisgICAgZmxvYXQgZWRnZURpc3RhbmNlID0gaXNIb3Jp
em9udGFsID8gc2l6ZS53aWR0aCgpIDogc2l6ZS5oZWlnaHQoKTsKKwogICAgIC8vIEluIHRoaXMg
Y2FzZSB0aGUgY2VudGVyIG9mIHRoZSBncmFkaWVudCBpcyBnaXZlbiByZWxhdGl2ZSB0byBhbiBl
ZGdlIGluIHRoZQogICAgIC8vIGZvcm0gb2Y6IFsgdG9wIHwgYm90dG9tIHwgcmlnaHQgfCBsZWZ0
IF0gWyA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiBdLgogICAgIGlmICh2YWx1ZS0+aXNQYWlyKCkp
IHsKICAgICAgICAgQ1NTVmFsdWVJRCBvcmlnaW5JRCA9IHZhbHVlLT5wYWlyVmFsdWUoKS0+Zmly
c3QoKS0+dmFsdWVJRCgpOwotICAgICAgICB2YWx1ZSA9IHZhbHVlLT5wYWlyVmFsdWUoKS0+c2Vj
b25kKCk7Ci0gICAgICAgIAogICAgICAgICBpZiAob3JpZ2luSUQgPT0gQ1NTVmFsdWVSaWdodCB8
fCBvcmlnaW5JRCA9PSBDU1NWYWx1ZUJvdHRvbSkgewogICAgICAgICAgICAgLy8gRm9yIHJpZ2h0
L2JvdHRvbSwgdGhlIG9mZnNldCBpcyByZWxhdGl2ZSB0byB0aGUgZmFyIGVkZ2UuCiAgICAgICAg
ICAgICBvcmlnaW4gPSBlZGdlRGlzdGFuY2U7CiAgICAgICAgICAgICBzaWduID0gLTE7CiAgICAg
ICAgIH0KKyAgICAgICAgdmFsdWUgPSB2YWx1ZS0+cGFpclZhbHVlKCktPnNlY29uZCgpOwogICAg
IH0KLSAgICAKKwogICAgIGlmICh2YWx1ZS0+aXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIG9y
aWdpbiArIHNpZ24gKiB2YWx1ZS0+ZmxvYXRWYWx1ZSgpICogY29udmVyc2lvbkRhdGEuem9vbSgp
OwotICAgIAorCiAgICAgaWYgKHZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgcmV0dXJu
IG9yaWdpbiArIHNpZ24gKiB2YWx1ZS0+ZmxvYXRWYWx1ZSgpIC8gMTAwLmYgKiBlZGdlRGlzdGFu
Y2U7CisgICAgICAgIHJldHVybiBvcmlnaW4gKyBzaWduICogdmFsdWUtPmZsb2F0VmFsdWUoKSAv
IDEwMCAqIGVkZ2VEaXN0YW5jZTsKKworICAgIGlmICh2YWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2Vu
dGFnZVdpdGhMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIG9yaWdpbiArIHNpZ24gKiB2YWx1ZS0+
Y3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29udmVyc2lvbkRhdGEpLT5l
dmFsdWF0ZShlZGdlRGlzdGFuY2UpOwogCi0gICAgaWYgKHZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJj
ZW50YWdlV2l0aExlbmd0aCgpKSB7Ci0gICAgICAgIFJlZjxDYWxjdWxhdGlvblZhbHVlPiBjYWxj
dWxhdGlvblZhbHVlIHsgdmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZh
bHVlKGNvbnZlcnNpb25EYXRhKSB9OwotICAgICAgICByZXR1cm4gb3JpZ2luICsgc2lnbiAqIGNh
bGN1bGF0aW9uVmFsdWUtPmV2YWx1YXRlKGVkZ2VEaXN0YW5jZSk7Ci0gICAgfQotICAgIAogICAg
IHN3aXRjaCAodmFsdWUtPnZhbHVlSUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVUb3A6CiAgICAg
ICAgIEFTU0VSVCghaXNIb3Jpem9udGFsKTsKQEAgLTYzMSwxMCArNjAzLDEwIEBAIHN0YXRpYyBm
bG9hdCBwb3NpdGlvbkZyb21WYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoCiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgQ1NTVmFsdWVCb3R0
b206CiAgICAgICAgIEFTU0VSVCghaXNIb3Jpem9udGFsKTsKLSAgICAgICAgcmV0dXJuIHNpemUu
aGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBlZGdlRGlzdGFuY2U7CiAgICAgY2FzZSBDU1NWYWx1
ZVJpZ2h0OgogICAgICAgICBBU1NFUlQoaXNIb3Jpem9udGFsKTsKLSAgICAgICAgcmV0dXJuIHNp
emUud2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGVkZ2VEaXN0YW5jZTsKICAgICBjYXNlIENTU1Zh
bHVlQ2VudGVyOgogICAgICAgICByZXR1cm4gb3JpZ2luICsgc2lnbiAqIC41ZiAqIGVkZ2VEaXN0
YW5jZTsKICAgICBkZWZhdWx0OgpAQCAtNjQ0LDEwNyArNjE2LDk4IEBAIHN0YXRpYyBmbG9hdCBw
b3NpdGlvbkZyb21WYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoCiAgICAgcmV0dXJuIG9yaWdpbiArIHNpZ24gKiB2YWx1ZS0+Y29tcHV0ZUxlbmd0
aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpOwogfQogCi1GbG9hdFBvaW50IENTU0dyYWRpZW50VmFs
dWU6OmNvbXB1dGVFbmRQb2ludChDU1NQcmltaXRpdmVWYWx1ZSogaG9yaXpvbnRhbCwgQ1NTUHJp
bWl0aXZlVmFsdWUqIHZlcnRpY2FsLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBj
b252ZXJzaW9uRGF0YSwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorLy8gUmVzb2x2ZSBwb2ludHMv
cmFkaWkgdG8gZnJvbnQgZW5kIHZhbHVlcy4KK3N0YXRpYyBGbG9hdFBvaW50IGNvbXB1dGVFbmRQ
b2ludChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogaG9yaXpvbnRhbCwgY29uc3QgQ1NTUHJpbWl0
aXZlVmFsdWUqIHZlcnRpY2FsLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252
ZXJzaW9uRGF0YSwgY29uc3QgRmxvYXRTaXplJiBzaXplKQogewotICAgIEZsb2F0UG9pbnQgcmVz
dWx0OwotCi0gICAgaWYgKGhvcml6b250YWwpCi0gICAgICAgIHJlc3VsdC5zZXRYKHBvc2l0aW9u
RnJvbVZhbHVlKGhvcml6b250YWwsIGNvbnZlcnNpb25EYXRhLCBzaXplLCB0cnVlKSk7Ci0KLSAg
ICBpZiAodmVydGljYWwpCi0gICAgICAgIHJlc3VsdC5zZXRZKHBvc2l0aW9uRnJvbVZhbHVlKHZl
cnRpY2FsLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSwgZmFsc2UpKTsKLQotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIHsgcG9zaXRpb25Gcm9tVmFsdWUoaG9yaXpvbnRhbCwgY29udmVyc2lv
bkRhdGEsIHNpemUsIHRydWUpLCBwb3NpdGlvbkZyb21WYWx1ZSh2ZXJ0aWNhbCwgY29udmVyc2lv
bkRhdGEsIHNpemUsIGZhbHNlKSB9OwogfQogCiBib29sIENTU0dyYWRpZW50VmFsdWU6OmlzQ2Fj
aGVhYmxlKCkgY29uc3QKIHsKKyAgICBpZiAoaGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsK
LSAgICAgICAgaWYgKHN0b3AubV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghc3RvcC5tX3Bvc2l0aW9uKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbi0+aXNGb250UmVs
YXRpdmVMZW5ndGgoKSkKKyAgICAgICAgaWYgKHN0b3AucG9zaXRpb24gJiYgc3RvcC5wb3NpdGlv
bi0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBDU1NHcmFkaWVudFZhbHVlOjprbm93
blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpIGNvbnN0CiB7CiAgICAg
Ym9vbCBoYXNDb2xvckZpbHRlciA9IHJlbmRlcmVyLnN0eWxlKCkuaGFzQXBwbGVDb2xvckZpbHRl
cigpOwotCiAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykgewotICAgICAgICBpZiAoaGFz
Q29sb3JGaWx0ZXIpIHsKLSAgICAgICAgICAgIENvbG9yIHN0b3BDb2xvciA9IHN0b3AubV9yZXNv
bHZlZENvbG9yOwotICAgICAgICAgICAgcmVuZGVyZXIuc3R5bGUoKS5hcHBsZUNvbG9yRmlsdGVy
KCkudHJhbnNmb3JtQ29sb3Ioc3RvcENvbG9yKTsKLSAgICAgICAgICAgIGlmICghc3RvcENvbG9y
LmlzT3BhcXVlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFzdG9wLm1fcmVzb2x2ZWRDb2xvci5pc09wYXF1ZSgpKQorICAgICAgICBD
b2xvciBjb2xvciA9IHN0b3AucmVzb2x2ZWRDb2xvcjsKKyAgICAgICAgaWYgKGhhc0NvbG9yRmls
dGVyKQorICAgICAgICAgICAgcmVuZGVyZXIuc3R5bGUoKS5hcHBsZUNvbG9yRmlsdGVyKCkudHJh
bnNmb3JtQ29sb3IoY29sb3IpOworICAgICAgICBpZiAoIWNvbG9yLmlzT3BhcXVlKCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IENTU0dyYWRpZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NHcmFkaWVudFZhbHVlJiBvdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5t
X2ZpcnN0WCkKKyAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5t
X2ZpcnN0WSkKKyAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vjb25kWCwgb3RoZXIu
bV9zZWNvbmRYKQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9zZWNvbmRZLCBvdGhl
ci5tX3NlY29uZFkpCisgICAgICAgICYmIG1fc3RvcHMgPT0gb3RoZXIubV9zdG9wcworICAgICAg
ICAmJiBtX2dyYWRpZW50VHlwZSA9PSBvdGhlci5tX2dyYWRpZW50VHlwZQorICAgICAgICAmJiBt
X3JlcGVhdGluZyA9PSBvdGhlci5tX3JlcGVhdGluZzsKK30KKwogc3RhdGljIHZvaWQgYXBwZW5k
R3JhZGllbnRTdG9wcyhTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBWZWN0b3I8Q1NTR3Jh
ZGllbnRDb2xvclN0b3AsIDI+JiBzdG9wcykKIHsKICAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9w
cykgewotICAgICAgICBkb3VibGUgcG9zaXRpb24gPSBzdG9wLm1fcG9zaXRpb24tPmRvdWJsZVZh
bHVlKENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgZG91YmxlIHBvc2l0aW9uID0g
c3RvcC5wb3NpdGlvbi0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwogICAg
ICAgICBpZiAoIXBvc2l0aW9uKQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgZnJvbSgi
LCBzdG9wLm1fY29sb3ItPmNzc1RleHQoKSwgJyknKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIsIGZyb20oIiwgc3RvcC5jb2xvci0+Y3NzVGV4dCgpLCAnKScpOwogICAgICAgICBlbHNl
IGlmIChwb3NpdGlvbiA9PSAxKQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgdG8oIiwg
c3RvcC5tX2NvbG9yLT5jc3NUZXh0KCksICcpJyk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiLCB0bygiLCBzdG9wLmNvbG9yLT5jc3NUZXh0KCksICcpJyk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIGNvbG9yLXN0b3AoIiwgcG9zaXRpb24sICIsICIs
IHN0b3AubV9jb2xvci0+Y3NzVGV4dCgpLCAnKScpOworICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoIiwgY29sb3Itc3RvcCgiLCBwb3NpdGlvbiwgIiwgIiwgc3RvcC5jb2xvci0+Y3NzVGV4dCgp
LCAnKScpOwogICAgIH0KIH0KIAotdm9pZCBDU1NHcmFkaWVudFZhbHVlOjp3cml0ZUNvbG9yU3Rv
cChTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBDU1NHcmFkaWVudENvbG9yU3RvcCYgc3Rv
cCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyB2b2lkIGFw
cGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KFN0cmluZ0J1aWxkZXImIGJ1aWxk
ZXIsIGNvbnN0IFQmIGEsIGNvbnN0IFUmIGIpCiB7Ci0gICAgaWYgKCFzdG9wLmlzTWlkcG9pbnQg
JiYgc3RvcC5tX2NvbG9yKQotICAgICAgICBidWlsZGVyLmFwcGVuZChzdG9wLm1fY29sb3ItPmNz
c1RleHQoKSk7CisgICAgaWYgKGEgJiYgYikKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYS0+Y3Nz
VGV4dCgpLCAnICcsIGItPmNzc1RleHQoKSk7CisgICAgZWxzZSBpZiAoYSkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoYS0+Y3NzVGV4dCgpKTsKKyAgICBlbHNlIGlmIChiKQorICAgICAgICBidWls
ZGVyLmFwcGVuZChiLT5jc3NUZXh0KCkpOworfQogCi0gICAgaWYgKHN0b3AubV9wb3NpdGlvbikg
ewotICAgICAgICBpZiAoIXN0b3AuaXNNaWRwb2ludCkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0b3AubV9wb3NpdGlvbi0+Y3NzVGV4
dCgpKTsKLSAgICB9CitzdGF0aWMgdm9pZCB3cml0ZUNvbG9yU3RvcChTdHJpbmdCdWlsZGVyJiBi
dWlsZGVyLCBjb25zdCBDU1NHcmFkaWVudENvbG9yU3RvcCYgc3RvcCkKK3sKKyAgICBhcHBlbmRT
cGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dChidWlsZGVyLCBzdG9wLmNvbG9yLCBzdG9w
LnBvc2l0aW9uKTsKIH0KIAogU3RyaW5nIENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmN1c3RvbUNT
U1RleHQoKSBjb25zdAogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIGlmIChtX2dy
YWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGllbnQpIHsKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCgiLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsICIsIG1fZmlyc3RYLT5jc3NUZXh0
KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSwgIiwgIiwgbV9zZWNvbmRYLT5jc3NUZXh0KCks
ICcgJywgbV9zZWNvbmRZLT5jc3NUZXh0KCkpOwotICAgICAgICBhcHBlbmRHcmFkaWVudFN0b3Bz
KHJlc3VsdCwgbV9zdG9wcyk7Ci0gICAgfSBlbHNlIGlmIChtX2dyYWRpZW50VHlwZSA9PSBDU1NQ
cmVmaXhlZExpbmVhckdyYWRpZW50KSB7Ci0gICAgICAgIGlmIChtX3JlcGVhdGluZykKKyAgICBp
ZiAoZ3JhZGllbnRUeXBlKCkgPT0gQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRpZW50KSB7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAiLCBmaXJzdFgoKS0+
Y3NzVGV4dCgpLCAnICcsIGZpcnN0WSgpLT5jc3NUZXh0KCksICIsICIsIHNlY29uZFgoKS0+Y3Nz
VGV4dCgpLCAnICcsIHNlY29uZFkoKS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgYXBwZW5kR3JhZGll
bnRTdG9wcyhyZXN1bHQsIHN0b3BzKCkpOworICAgIH0gZWxzZSBpZiAoZ3JhZGllbnRUeXBlKCkg
PT0gQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudCkgeworICAgICAgICBpZiAoaXNSZXBlYXRpbmco
KSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCItd2Via2l0LXJlcGVhdGluZy1s
aW5lYXItZ3JhZGllbnQoIik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmRMaXRlcmFsKCItd2Via2l0LWxpbmVhci1ncmFkaWVudCgiKTsKIAogICAgICAgICBpZiAobV9h
bmdsZSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9hbmdsZS0+Y3NzVGV4dCgpKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9maXJzdFggJiYgbV9maXJzdFkpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAnICcsIG1fZmly
c3RZLT5jc3NUZXh0KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9maXJzdFgpCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKG1fZmlyc3RZKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJz
dFktPmNzc1RleHQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBw
ZW5kU3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0clRleHQocmVzdWx0LCBmaXJzdFgoKSwgZmly
c3RZKCkpOwogCi0gICAgICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoIiwgIik7CiAgICAgICAgICAgICB3cml0ZUNvbG9yU3RvcChyZXN1bHQsIHN0b3ApOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fcmVwZWF0aW5nKQorICAgICAg
ICBpZiAoaXNSZXBlYXRpbmcoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJy
ZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KCIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgibGluZWFyLWdyYWRpZW50KCIpOwpAQCAtNzU0LDI1ICs3MTcs
MTYgQEAgU3RyaW5nIENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjb25z
dAogICAgICAgICBpZiAobV9hbmdsZSAmJiBtX2FuZ2xlLT5jb21wdXRlRGVncmVlcygpICE9IDE4
MCkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2FuZ2xlLT5jc3NUZXh0KCkpOwogICAg
ICAgICAgICAgd3JvdGVTb21ldGhpbmcgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKChtX2Zp
cnN0WCB8fCBtX2ZpcnN0WSkgJiYgISghbV9maXJzdFggJiYgbV9maXJzdFkgJiYgbV9maXJzdFkt
PnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJvdHRvbSkpIHsKKyAgICAgICAgfSBlbHNlIGlmICgoZmly
c3RYKCkgfHwgZmlyc3RZKCkpICYmICEoIWZpcnN0WCgpICYmIGZpcnN0WSgpICYmIGZpcnN0WSgp
LT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3R0b20pKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kTGl0ZXJhbCgidG8gIik7Ci0gICAgICAgICAgICBpZiAobV9maXJzdFggJiYgbV9maXJzdFkp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAnICcs
IG1fZmlyc3RZLT5jc3NUZXh0KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9maXJzdFgpCi0g
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RZLT5jc3NU
ZXh0KCkpOworICAgICAgICAgICAgYXBwZW5kU3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0clRl
eHQocmVzdWx0LCBmaXJzdFgoKSwgZmlyc3RZKCkpOwogICAgICAgICAgICAgd3JvdGVTb21ldGhp
bmcgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdyb3RlU29tZXRoaW5nKQotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiwgIik7Ci0KLSAgICAgICAgYm9vbCB3cm90
ZUZpcnN0U3RvcCA9IGZhbHNlOwotICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7
Ci0gICAgICAgICAgICBpZiAod3JvdGVGaXJzdFN0b3ApCisgICAgICAgIGZvciAoYXV0byYgc3Rv
cCA6IHN0b3BzKCkpIHsKKyAgICAgICAgICAgIGlmICh3cm90ZVNvbWV0aGluZykKICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgICAgIHdyb3RlRmly
c3RTdG9wID0gdHJ1ZTsKKyAgICAgICAgICAgIHdyb3RlU29tZXRoaW5nID0gdHJ1ZTsKICAgICAg
ICAgICAgIHdyaXRlQ29sb3JTdG9wKHJlc3VsdCwgc3RvcCk7CiAgICAgICAgIH0KICAgICB9CkBA
IC04NTksNDQgKzgxMyw0NCBAQCBSZWY8R3JhZGllbnQ+IENTU0xpbmVhckdyYWRpZW50VmFsdWU6
OmNyZWF0ZUdyYWRpZW50KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjbwogICAgIEZsb2F0UG9p
bnQgc2Vjb25kUG9pbnQ7CiAgICAgaWYgKG1fYW5nbGUpIHsKICAgICAgICAgZmxvYXQgYW5nbGUg
PSBtX2FuZ2xlLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfREVHKTsKLSAgICAgICAgZW5k
UG9pbnRzRnJvbUFuZ2xlKGFuZ2xlLCBzaXplLCBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCwgbV9n
cmFkaWVudFR5cGUpOworICAgICAgICBlbmRQb2ludHNGcm9tQW5nbGUoYW5nbGUsIHNpemUsIGZp
cnN0UG9pbnQsIHNlY29uZFBvaW50LCBncmFkaWVudFR5cGUoKSk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgc3dpdGNoIChtX2dyYWRpZW50VHlwZSkgeworICAgICAgICBzd2l0Y2ggKGdyYWRpZW50
VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ1NTRGVwcmVjYXRlZExpbmVhckdyYWRpZW50OgotICAg
ICAgICAgICAgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2ludChtX2ZpcnN0WC5nZXQoKSwgbV9m
aXJzdFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKLSAgICAgICAgICAgIGlmIChtX3Nl
Y29uZFggfHwgbV9zZWNvbmRZKQotICAgICAgICAgICAgICAgIHNlY29uZFBvaW50ID0gY29tcHV0
ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNvbmRZLmdldCgpLCBjb252ZXJzaW9uRGF0
YSwgc2l6ZSk7CisgICAgICAgICAgICBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KGZpcnN0
WCgpLCBmaXJzdFkoKSwgY29udmVyc2lvbkRhdGEsIHNpemUpOworICAgICAgICAgICAgaWYgKHNl
Y29uZFgoKSB8fCBzZWNvbmRZKCkpCisgICAgICAgICAgICAgICAgc2Vjb25kUG9pbnQgPSBjb21w
dXRlRW5kUG9pbnQoc2Vjb25kWCgpLCBzZWNvbmRZKCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsK
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0WCkKKyAgICAg
ICAgICAgICAgICBpZiAoZmlyc3RYKCkpCiAgICAgICAgICAgICAgICAgICAgIHNlY29uZFBvaW50
LnNldFgoc2l6ZS53aWR0aCgpIC0gZmlyc3RQb2ludC54KCkpOwotICAgICAgICAgICAgICAgIGlm
IChtX2ZpcnN0WSkKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RZKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHNlY29uZFBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAtIGZpcnN0UG9pbnQueSgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ByZWZp
eGVkTGluZWFyR3JhZGllbnQ6Ci0gICAgICAgICAgICBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBv
aW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgY29udmVyc2lvbkRhdGEsIHNpemUp
OwotICAgICAgICAgICAgaWYgKG1fZmlyc3RYKQorICAgICAgICAgICAgZmlyc3RQb2ludCA9IGNv
bXB1dGVFbmRQb2ludChmaXJzdFgoKSwgZmlyc3RZKCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsK
KyAgICAgICAgICAgIGlmIChmaXJzdFgoKSkKICAgICAgICAgICAgICAgICBzZWNvbmRQb2ludC5z
ZXRYKHNpemUud2lkdGgoKSAtIGZpcnN0UG9pbnQueCgpKTsKLSAgICAgICAgICAgIGlmIChtX2Zp
cnN0WSkKKyAgICAgICAgICAgIGlmIChmaXJzdFkoKSkKICAgICAgICAgICAgICAgICBzZWNvbmRQ
b2ludC5zZXRZKHNpemUuaGVpZ2h0KCkgLSBmaXJzdFBvaW50LnkoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NMaW5lYXJHcmFkaWVudDoKLSAgICAgICAgICAgIGlmICht
X2ZpcnN0WCAmJiBtX2ZpcnN0WSkgeworICAgICAgICAgICAgaWYgKGZpcnN0WCgpICYmIGZpcnN0
WSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gIk1hZ2ljIiBjb3JuZXJzLCBzbyB0aGUgNTAlIGxp
bmUgdG91Y2hlcyB0d28gY29ybmVycy4KICAgICAgICAgICAgICAgICBmbG9hdCByaXNlID0gc2l6
ZS53aWR0aCgpOwogICAgICAgICAgICAgICAgIGZsb2F0IHJ1biA9IHNpemUuaGVpZ2h0KCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RYLT52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVMZWZ0KQorICAgICAgICAgICAgICAgIGlmIChmaXJzdFgoKSAmJiBmaXJzdFgoKS0+dmFs
dWVJRCgpID09IENTU1ZhbHVlTGVmdCkKICAgICAgICAgICAgICAgICAgICAgcnVuICo9IC0xOwot
ICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0WSAmJiBtX2ZpcnN0WS0+dmFsdWVJRCgpID09IENT
U1ZhbHVlQm90dG9tKQorICAgICAgICAgICAgICAgIGlmIChmaXJzdFkoKSAmJiBmaXJzdFkoKS0+
dmFsdWVJRCgpID09IENTU1ZhbHVlQm90dG9tKQogICAgICAgICAgICAgICAgICAgICByaXNlICo9
IC0xOwogICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgYW5nbGUsIGFuZCBmbGlwIGl0IGJhY2sg
dG8gImJlYXJpbmcgYW5nbGUiIGRlZ3JlZXMuCiAgICAgICAgICAgICAgICAgZmxvYXQgYW5nbGUg
PSA5MCAtIHJhZDJkZWcoYXRhbjIocmlzZSwgcnVuKSk7Ci0gICAgICAgICAgICAgICAgZW5kUG9p
bnRzRnJvbUFuZ2xlKGFuZ2xlLCBzaXplLCBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCwgbV9ncmFk
aWVudFR5cGUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZpcnN0WCB8fCBtX2ZpcnN0WSkg
eyAKLSAgICAgICAgICAgICAgICBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQb2ludChtX2ZpcnN0
WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKLSAgICAgICAg
ICAgICAgICBpZiAobV9maXJzdFgpCisgICAgICAgICAgICAgICAgZW5kUG9pbnRzRnJvbUFuZ2xl
KGFuZ2xlLCBzaXplLCBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCwgZ3JhZGllbnRUeXBlKCkpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdFgoKSB8fCBmaXJzdFkoKSkgeworICAgICAgICAg
ICAgICAgIHNlY29uZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KGZpcnN0WCgpLCBmaXJzdFkoKSwg
Y29udmVyc2lvbkRhdGEsIHNpemUpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFgoKSkKICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RQb2ludC5zZXRYKHNpemUud2lkdGgoKSAtIHNlY29uZFBv
aW50LngoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZmlyc3RZKQorICAgICAgICAgICAgICAg
IGlmIChmaXJzdFkoKSkKICAgICAgICAgICAgICAgICAgICAgZmlyc3RQb2ludC5zZXRZKHNpemUu
aGVpZ2h0KCkgLSBzZWNvbmRQb2ludC55KCkpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WShzaXplLmhlaWdodCgpKTsKQEAgLTkxNyw1OSArODcx
LDI1IEBAIFJlZjxHcmFkaWVudD4gQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGll
bnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvCiAKIGJvb2wgQ1NTTGluZWFyR3JhZGllbnRW
YWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0xpbmVhckdyYWRpZW50VmFsdWUmIG90aGVyKSBjb25zdAog
ewotICAgIGlmIChtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGllbnQp
Ci0gICAgICAgIHJldHVybiBvdGhlci5tX2dyYWRpZW50VHlwZSA9PSBtX2dyYWRpZW50VHlwZQot
ICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5tX2ZpcnN0
WCkKLSAgICAgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WSwgb3RoZXIubV9m
aXJzdFkpCi0gICAgICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9zZWNvbmRYLCBvdGhl
ci5tX3NlY29uZFgpCi0gICAgICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9zZWNvbmRZ
LCBvdGhlci5tX3NlY29uZFkpCi0gICAgICAgICAgICAmJiBtX3N0b3BzID09IG90aGVyLm1fc3Rv
cHM7Ci0KLSAgICBpZiAobV9ncmFkaWVudFR5cGUgIT0gb3RoZXIubV9ncmFkaWVudFR5cGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3JlcGVhdGluZyAhPSBvdGhlci5tX3Jl
cGVhdGluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fYW5nbGUpCi0gICAg
ICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVQdHIobV9hbmdsZSwgb3RoZXIubV9hbmdsZSkgJiYg
bV9zdG9wcyA9PSBvdGhlci5tX3N0b3BzOwotCi0gICAgaWYgKG90aGVyLm1fYW5nbGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgZXF1YWxYYW5kWSA9IGZhbHNlOwotICAgIGlm
IChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkKLSAgICAgICAgZXF1YWxYYW5kWSA9IGNvbXBhcmVDU1NW
YWx1ZVB0cihtX2ZpcnN0WCwgb3RoZXIubV9maXJzdFgpICYmIGNvbXBhcmVDU1NWYWx1ZVB0ciht
X2ZpcnN0WSwgb3RoZXIubV9maXJzdFkpOwotICAgIGVsc2UgaWYgKG1fZmlyc3RYKQotICAgICAg
ICBlcXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5tX2ZpcnN0
WCkgJiYgIW90aGVyLm1fZmlyc3RZOwotICAgIGVsc2UgaWYgKG1fZmlyc3RZKQotICAgICAgICBl
cXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0WSkg
JiYgIW90aGVyLm1fZmlyc3RYOwotICAgIGVsc2UKLSAgICAgICAgZXF1YWxYYW5kWSA9ICFvdGhl
ci5tX2ZpcnN0WCAmJiAhb3RoZXIubV9maXJzdFk7Ci0KLSAgICByZXR1cm4gZXF1YWxYYW5kWSAm
JiBtX3N0b3BzID09IG90aGVyLm1fc3RvcHM7CisgICAgcmV0dXJuIENTU0dyYWRpZW50VmFsdWU6
OmVxdWFscyhvdGhlcikgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fYW5nbGUsIG90aGVyLm1fYW5n
bGUpOwogfQogCiBTdHJpbmcgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgp
IGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAKLSAgICBpZiAobV9ncmFkaWVu
dFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KSB7Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIi13ZWJraXQtZ3JhZGllbnQocmFkaWFsLCAiLCBtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAn
ICcsIG1fZmlyc3RZLT5jc3NUZXh0KCksICIsICIsIG1fZmlyc3RSYWRpdXMtPmNzc1RleHQoKSwK
LSAgICAgICAgICAgICIsICIsIG1fc2Vjb25kWC0+Y3NzVGV4dCgpLCAnICcsIG1fc2Vjb25kWS0+
Y3NzVGV4dCgpLCAiLCAiLCBtX3NlY29uZFJhZGl1cy0+Y3NzVGV4dCgpKTsKLSAgICAgICAgYXBw
ZW5kR3JhZGllbnRTdG9wcyhyZXN1bHQsIG1fc3RvcHMpOwotICAgIH0gZWxzZSBpZiAobV9ncmFk
aWVudFR5cGUgPT0gQ1NTUHJlZml4ZWRSYWRpYWxHcmFkaWVudCkgewotICAgICAgICBpZiAobV9y
ZXBlYXRpbmcpCisgICAgaWYgKGdyYWRpZW50VHlwZSgpID09IENTU0RlcHJlY2F0ZWRSYWRpYWxH
cmFkaWVudCkgeworICAgICAgICByZXN1bHQuYXBwZW5kKCItd2Via2l0LWdyYWRpZW50KHJhZGlh
bCwgIiwgZmlyc3RYKCktPmNzc1RleHQoKSwgJyAnLCBmaXJzdFkoKS0+Y3NzVGV4dCgpLCAiLCAi
LCBtX2ZpcnN0UmFkaXVzLT5jc3NUZXh0KCksCisgICAgICAgICAgICAiLCAiLCBzZWNvbmRYKCkt
PmNzc1RleHQoKSwgJyAnLCBzZWNvbmRZKCktPmNzc1RleHQoKSwgIiwgIiwgbV9zZWNvbmRSYWRp
dXMtPmNzc1RleHQoKSk7CisgICAgICAgIGFwcGVuZEdyYWRpZW50U3RvcHMocmVzdWx0LCBzdG9w
cygpKTsKKyAgICB9IGVsc2UgaWYgKGdyYWRpZW50VHlwZSgpID09IENTU1ByZWZpeGVkUmFkaWFs
R3JhZGllbnQpIHsKKyAgICAgICAgaWYgKGlzUmVwZWF0aW5nKCkpCiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kTGl0ZXJhbCgiLXdlYmtpdC1yZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50KCIpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLXdlYmtpdC1y
YWRpYWwtZ3JhZGllbnQoIik7CiAKLSAgICAgICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZKQot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAnICcsIG1fZmly
c3RZLT5jc3NUZXh0KCkpOwotICAgICAgICBlbHNlIGlmIChtX2ZpcnN0WCkKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQobV9maXJzdFgtPmNzc1RleHQoKSk7Ci0gICAgICAgIGVsc2UgaWYgKG1f
Zmlyc3RZKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WS0+Y3NzVGV4dCgpKTsK
KyAgICAgICAgaWYgKGZpcnN0WCgpIHx8IGZpcnN0WSgpKQorICAgICAgICAgICAgYXBwZW5kU3Bh
Y2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0clRleHQocmVzdWx0LCBmaXJzdFgoKSwgZmlyc3RZKCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiY2VudGVy
Iik7CiAKQEAgLTk4NiwxMiArOTA2LDEyIEBAIFN0cmluZyBDU1NSYWRpYWxHcmFkaWVudFZhbHVl
OjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAgICAgICAgfSBlbHNlIGlmIChtX2VuZEhvcml6b250
YWxTaXplICYmIG1fZW5kVmVydGljYWxTaXplKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgi
LCAiLCBtX2VuZEhvcml6b250YWxTaXplLT5jc3NUZXh0KCksICcgJywgbV9lbmRWZXJ0aWNhbFNp
emUtPmNzc1RleHQoKSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykgewor
ICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7CiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kTGl0ZXJhbCgiLCAiKTsKICAgICAgICAgICAgIHdyaXRlQ29sb3JTdG9wKHJlc3VsdCwg
c3RvcCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9yZXBlYXRpbmcp
CisgICAgICAgIGlmIChpc1JlcGVhdGluZygpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQoIik7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJyYWRpYWwtZ3JhZGllbnQoIik7CkBAIC0xMDE5
LDE2ICs5MzksMTEgQEAgU3RyaW5nIENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1Rl
eHQoKSBjb25zdAogICAgICAgICAgICAgd3JvdGVTb21ldGhpbmcgPSB0cnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKG1fZmlyc3RYIHx8IG1fZmlyc3RZKSB7CisgICAgICAgIGlmIChmaXJz
dFgoKSB8fCBmaXJzdFkoKSkgewogICAgICAgICAgICAgaWYgKHdyb3RlU29tZXRoaW5nKQogICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmRMaXRlcmFsKCJhdCAiKTsKLSAgICAgICAgICAgIGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkK
LSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RYLT5jc3NUZXh0KCksICcgJywg
bV9maXJzdFktPmNzc1RleHQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX2ZpcnN0WCkKLSAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RYLT5jc3NUZXh0KCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJzdFktPmNzc1Rl
eHQoKSk7CisgICAgICAgICAgICBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4
dChyZXN1bHQsIGZpcnN0WCgpLCBmaXJzdFkoKSk7CiAgICAgICAgICAgICB3cm90ZVNvbWV0aGlu
ZyA9IHRydWU7CiAgICAgICAgIH0KIApAQCAtMTAzNiw3ICs5NTEsNyBAQCBTdHJpbmcgQ1NTUmFk
aWFsR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKIAogICAgICAgICBib29sIHdyb3RlRmlyc3RTdG9wID0g
ZmFsc2U7Ci0gICAgICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBzdG9wIDogc3RvcHMoKSkgewogICAgICAgICAgICAgaWYgKHdyb3RlRmlyc3RTdG9w
KQogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwogICAgICAgICAg
ICAgd3JvdGVGaXJzdFN0b3AgPSB0cnVlOwpAQCAtMTE0MywxNiArMTA1OCwxNiBAQCBSZWY8R3Jh
ZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjbwogCiAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJz
aW9uRGF0YSgmcmVuZGVyZXIuc3R5bGUoKSwgcmVuZGVyZXIuZG9jdW1lbnQoKS5kb2N1bWVudEVs
ZW1lbnQoKS0+cmVuZGVyU3R5bGUoKSwgJnJlbmRlcmVyLnZpZXcoKSk7CiAKLSAgICBGbG9hdFBv
aW50IGZpcnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCksIG1fZmlyc3RZ
LmdldCgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7Ci0gICAgaWYgKCFtX2ZpcnN0WCkKKyAgICBG
bG9hdFBvaW50IGZpcnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQoZmlyc3RYKCksIGZpcnN0WSgp
LCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CisgICAgaWYgKCFmaXJzdFgoKSkKICAgICAgICAgZmly
c3RQb2ludC5zZXRYKHNpemUud2lkdGgoKSAvIDIpOwotICAgIGlmICghbV9maXJzdFkpCisgICAg
aWYgKCFmaXJzdFkoKSkKICAgICAgICAgZmlyc3RQb2ludC5zZXRZKHNpemUuaGVpZ2h0KCkgLyAy
KTsKIAotICAgIEZsb2F0UG9pbnQgc2Vjb25kUG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9zZWNv
bmRYLmdldCgpLCBtX3NlY29uZFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKLSAgICBp
ZiAoIW1fc2Vjb25kWCkKKyAgICBGbG9hdFBvaW50IHNlY29uZFBvaW50ID0gY29tcHV0ZUVuZFBv
aW50KHNlY29uZFgoKSwgc2Vjb25kWSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CisgICAgaWYg
KCFzZWNvbmRYKCkpCiAgICAgICAgIHNlY29uZFBvaW50LnNldFgoc2l6ZS53aWR0aCgpIC8gMik7
Ci0gICAgaWYgKCFtX3NlY29uZFkpCisgICAgaWYgKCFzZWNvbmRZKCkpCiAgICAgICAgIHNlY29u
ZFBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAvIDIpOwogCiAgICAgZmxvYXQgZmlyc3RSYWRpdXMg
PSAwOwpAQCAtMTI2Niw3ICsxMTgxLDcgQEAgUmVmPEdyYWRpZW50PiBDU1NSYWRpYWxHcmFkaWVu
dFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY28KIAogICAg
IC8vIGNvbXB1dGVTdG9wcygpIG9ubHkgdXNlcyBtYXhFeHRlbnQgZm9yIHJlcGVhdGluZyBncmFk
aWVudHMuCiAgICAgZmxvYXQgbWF4RXh0ZW50ID0gMDsKLSAgICBpZiAobV9yZXBlYXRpbmcpIHsK
KyAgICBpZiAoaXNSZXBlYXRpbmcoKSkgewogICAgICAgICBGbG9hdFBvaW50IGNvcm5lcjsKICAg
ICAgICAgbWF4RXh0ZW50ID0gZGlzdGFuY2VUb0ZhcnRoZXN0Q29ybmVyKHNlY29uZFBvaW50LCBz
aXplLCBjb3JuZXIpOwogICAgIH0KQEAgLTEyODIsNTkgKzExOTcsMTggQEAgUmVmPEdyYWRpZW50
PiBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY28KIAogYm9vbCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjplcXVhbHMoY29uc3Qg
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZ3JhZGll
bnRUeXBlID09IENTU0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkKLSAgICAgICAgcmV0dXJuIG90
aGVyLm1fZ3JhZGllbnRUeXBlID09IG1fZ3JhZGllbnRUeXBlCi0gICAgICAgICAgICAmJiBjb21w
YXJlQ1NTVmFsdWVQdHIobV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKQotICAgICAgICAgICAgJiYg
Y29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0WSkKLSAgICAgICAgICAg
ICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX3NlY29uZFgsIG90aGVyLm1fc2Vjb25kWCkKLSAgICAg
ICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX3NlY29uZFksIG90aGVyLm1fc2Vjb25kWSkK
LSAgICAgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0UmFkaXVzLCBvdGhlci5t
X2ZpcnN0UmFkaXVzKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vjb25k
UmFkaXVzLCBvdGhlci5tX3NlY29uZFJhZGl1cykKLSAgICAgICAgICAgICYmIG1fc3RvcHMgPT0g
b3RoZXIubV9zdG9wczsKLQotICAgIGlmIChtX2dyYWRpZW50VHlwZSAhPSBvdGhlci5tX2dyYWRp
ZW50VHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fcmVwZWF0aW5nICE9
IG90aGVyLm1fcmVwZWF0aW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGVx
dWFsWGFuZFkgPSBmYWxzZTsKLSAgICBpZiAobV9maXJzdFggJiYgbV9maXJzdFkpCi0gICAgICAg
IGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NTVmFsdWVQdHIobV9maXJzdFgsIG90aGVyLm1fZmlyc3RY
KSAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9maXJzdFksIG90aGVyLm1fZmlyc3RZKTsKLSAgICBl
bHNlIGlmIChtX2ZpcnN0WCkKLSAgICAgICAgZXF1YWxYYW5kWSA9IGNvbXBhcmVDU1NWYWx1ZVB0
cihtX2ZpcnN0WCwgb3RoZXIubV9maXJzdFgpICYmICFvdGhlci5tX2ZpcnN0WTsKLSAgICBlbHNl
IGlmIChtX2ZpcnN0WSkKLSAgICAgICAgZXF1YWxYYW5kWSA9IGNvbXBhcmVDU1NWYWx1ZVB0ciht
X2ZpcnN0WSwgb3RoZXIubV9maXJzdFkpICYmICFvdGhlci5tX2ZpcnN0WDsKLSAgICBlbHNlCi0g
ICAgICAgIGVxdWFsWGFuZFkgPSAhb3RoZXIubV9maXJzdFggJiYgIW90aGVyLm1fZmlyc3RZOwot
Ci0gICAgaWYgKCFlcXVhbFhhbmRZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29s
IGVxdWFsU2hhcGUgPSB0cnVlOwotICAgIGJvb2wgZXF1YWxTaXppbmdCZWhhdmlvciA9IHRydWU7
Ci0gICAgYm9vbCBlcXVhbEhvcml6b250YWxBbmRWZXJ0aWNhbFNpemUgPSB0cnVlOwotCi0gICAg
aWYgKG1fc2hhcGUpCi0gICAgICAgIGVxdWFsU2hhcGUgPSBjb21wYXJlQ1NTVmFsdWVQdHIobV9z
aGFwZSwgb3RoZXIubV9zaGFwZSk7Ci0gICAgZWxzZSBpZiAobV9zaXppbmdCZWhhdmlvcikKLSAg
ICAgICAgZXF1YWxTaXppbmdCZWhhdmlvciA9IGNvbXBhcmVDU1NWYWx1ZVB0cihtX3NpemluZ0Jl
aGF2aW9yLCBvdGhlci5tX3NpemluZ0JlaGF2aW9yKTsKLSAgICBlbHNlIGlmIChtX2VuZEhvcml6
b250YWxTaXplICYmIG1fZW5kVmVydGljYWxTaXplKQotICAgICAgICBlcXVhbEhvcml6b250YWxB
bmRWZXJ0aWNhbFNpemUgPSBjb21wYXJlQ1NTVmFsdWVQdHIobV9lbmRIb3Jpem9udGFsU2l6ZSwg
b3RoZXIubV9lbmRIb3Jpem9udGFsU2l6ZSkgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZW5kVmVy
dGljYWxTaXplLCBvdGhlci5tX2VuZFZlcnRpY2FsU2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGVxdWFsU2hhcGUgPSAhb3RoZXIubV9zaGFwZTsKLSAgICAgICAgZXF1YWxTaXppbmdCZWhhdmlv
ciA9ICFvdGhlci5tX3NpemluZ0JlaGF2aW9yOwotICAgICAgICBlcXVhbEhvcml6b250YWxBbmRW
ZXJ0aWNhbFNpemUgPSAhb3RoZXIubV9lbmRIb3Jpem9udGFsU2l6ZSAmJiAhb3RoZXIubV9lbmRW
ZXJ0aWNhbFNpemU7Ci0gICAgfQotICAgIHJldHVybiBlcXVhbFNoYXBlICYmIGVxdWFsU2l6aW5n
QmVoYXZpb3IgJiYgZXF1YWxIb3Jpem9udGFsQW5kVmVydGljYWxTaXplICYmIG1fc3RvcHMgPT0g
b3RoZXIubV9zdG9wczsKKyAgICByZXR1cm4gQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKG90aGVy
KQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9zaGFwZSwgb3RoZXIubV9zaGFwZSkK
KyAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2l6aW5nQmVoYXZpb3IsIG90aGVyLm1f
c2l6aW5nQmVoYXZpb3IpCisgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2VuZEhvcml6
b250YWxTaXplLCBvdGhlci5tX2VuZEhvcml6b250YWxTaXplKQorICAgICAgICAmJiBjb21wYXJl
Q1NTVmFsdWVQdHIobV9lbmRWZXJ0aWNhbFNpemUsIG90aGVyLm1fZW5kVmVydGljYWxTaXplKTsK
IH0KIAotCiBTdHJpbmcgQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29u
c3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIAotICAgIGlmIChtX3JlcGVhdGluZykK
KyAgICBpZiAoaXNSZXBlYXRpbmcoKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoInJl
cGVhdGluZy1jb25pYy1ncmFkaWVudCgiKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdC5hcHBl
bmRMaXRlcmFsKCJjb25pYy1ncmFkaWVudCgiKTsKQEAgLTEzNDYsMTAgKzEyMjAsMTEgQEAgU3Ry
aW5nIENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgICAg
IHdyb3RlU29tZXRoaW5nID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAobV9maXJzdFggJiYgbV9m
aXJzdFkpIHsKKyAgICBpZiAoZmlyc3RYKCkgJiYgZmlyc3RZKCkpIHsKICAgICAgICAgaWYgKHdy
b3RlU29tZXRoaW5nKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJhdCAiLCBtX2ZpcnN0WC0+Y3NzVGV4dCgpLCAnICcsIG1fZmlyc3RZLT5j
c3NUZXh0KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiYXQgIik7CisgICAgICAg
IGFwcGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KHJlc3VsdCwgZmlyc3RYKCks
IGZpcnN0WSgpKTsKICAgICAgICAgd3JvdGVTb21ldGhpbmcgPSB0cnVlOwogICAgIH0KIApAQCAt
MTM1Nyw3ICsxMjMyLDcgQEAgU3RyaW5nIENTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NT
VGV4dCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwogCiAgICAg
Ym9vbCB3cm90ZUZpcnN0U3RvcCA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3Rv
cHMpIHsKKyAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7CiAgICAgICAgIGlmICh3cm90
ZUZpcnN0U3RvcCkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwogICAg
ICAgICB3cm90ZUZpcnN0U3RvcCA9IHRydWU7CkBAIC0xMzc0LDEwICsxMjQ5LDEwIEBAIFJlZjxH
cmFkaWVudD4gQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uCiAKICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZl
cnNpb25EYXRhKCZyZW5kZXJlci5zdHlsZSgpLCByZW5kZXJlci5kb2N1bWVudCgpLmRvY3VtZW50
RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpLCAmcmVuZGVyZXIudmlldygpKTsKIAotICAgIEZsb2F0
UG9pbnQgY2VudGVyUG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCksIG1fZmly
c3RZLmdldCgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7Ci0gICAgaWYgKCFtX2ZpcnN0WCkKKyAg
ICBGbG9hdFBvaW50IGNlbnRlclBvaW50ID0gY29tcHV0ZUVuZFBvaW50KGZpcnN0WCgpLCBmaXJz
dFkoKSwgY29udmVyc2lvbkRhdGEsIHNpemUpOworICAgIGlmICghZmlyc3RYKCkpCiAgICAgICAg
IGNlbnRlclBvaW50LnNldFgoc2l6ZS53aWR0aCgpIC8gMik7Ci0gICAgaWYgKCFtX2ZpcnN0WSkK
KyAgICBpZiAoIWZpcnN0WSgpKQogICAgICAgICBjZW50ZXJQb2ludC5zZXRZKHNpemUuaGVpZ2h0
KCkgLyAyKTsKIAogICAgIGZsb2F0IGFuZ2xlUmFkaWFucyA9IDA7CkBAIC0xMzk1LDIzICsxMjcw
LDcgQEAgUmVmPEdyYWRpZW50PiBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb24KIAogYm9vbCBDU1NDb25pY0dyYWRpZW50VmFs
dWU6OmVxdWFscyhjb25zdCBDU1NDb25pY0dyYWRpZW50VmFsdWUmIG90aGVyKSBjb25zdAogewot
ICAgIGlmIChtX3JlcGVhdGluZyAhPSBvdGhlci5tX3JlcGVhdGluZykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFjb21wYXJlQ1NTVmFsdWVQdHIobV9hbmdsZSwgb3RoZXIubV9h
bmdsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgZXF1YWxYYW5kWSA9IGZh
bHNlOwotICAgIGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkKLSAgICAgICAgZXF1YWxYYW5kWSA9
IGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WCwgb3RoZXIubV9maXJzdFgpICYmIGNvbXBhcmVD
U1NWYWx1ZVB0cihtX2ZpcnN0WSwgb3RoZXIubV9maXJzdFkpOwotICAgIGVsc2UgaWYgKG1fZmly
c3RYKQotICAgICAgICBlcXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBv
dGhlci5tX2ZpcnN0WCkgJiYgIW90aGVyLm1fZmlyc3RZOwotICAgIGVsc2UgaWYgKG1fZmlyc3RZ
KQotICAgICAgICBlcXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhl
ci5tX2ZpcnN0WSkgJiYgIW90aGVyLm1fZmlyc3RYOwotICAgIGVsc2UKLSAgICAgICAgZXF1YWxY
YW5kWSA9ICFvdGhlci5tX2ZpcnN0WCAmJiAhb3RoZXIubV9maXJzdFk7Ci0KLSAgICByZXR1cm4g
ZXF1YWxYYW5kWSAmJiBtX3N0b3BzID09IG90aGVyLm1fc3RvcHM7CisgICAgcmV0dXJuIENTU0dy
YWRpZW50VmFsdWU6OmVxdWFscyhvdGhlcikgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fYW5nbGUs
IG90aGVyLm1fYW5nbGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuaAppbmRleCBkNzU0NDJlMGEyYjlkZTg1MDRlOTFiNTllOWUw
MjQzNTYzNjU0NzAwLi4zNzk0MzcyNjMyYzUyOGMyMzAzYWMwOWRlMDZhZmY5OGRlZTI3MTY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKQEAgLTI4LDEzICsyOCw5IEBACiAj
aW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIFN0eWxl
UmVzb2x2ZXI7Ci0KIG5hbWVzcGFjZSBTdHlsZSB7CiBjbGFzcyBCdWlsZGVyU3RhdGU7CiB9CkBA
IC01MSw0NyArNDcsMzggQEAgZW51bSBDU1NHcmFkaWVudFR5cGUgewogZW51bSBDU1NHcmFkaWVu
dFJlcGVhdCB7IE5vblJlcGVhdGluZywgUmVwZWF0aW5nIH07CiAKIHN0cnVjdCBDU1NHcmFkaWVu
dENvbG9yU3RvcCB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Bvc2l0aW9uOyAv
LyBwZXJjZW50YWdlIG9yIGxlbmd0aAotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9j
b2xvcjsKLSAgICBDb2xvciBtX3Jlc29sdmVkQ29sb3I7Ci0gICAgYm9vbCBtX2NvbG9ySXNEZXJp
dmVkRnJvbUVsZW1lbnQgPSBmYWxzZTsKLSAgICBib29sIGlzTWlkcG9pbnQgPSBmYWxzZTsKLSAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2NvbG9yLCBvdGhl
ci5tX2NvbG9yKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fcG9zaXRpb24s
IG90aGVyLm1fcG9zaXRpb24pOwotICAgIH0KKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHBvc2l0aW9uOyAvLyBwZXJjZW50YWdlIG9yIGxlbmd0aAorICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29sb3I7CisgICAgQ29sb3IgcmVzb2x2ZWRDb2xvcjsKIH07CiAKK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIGEsIGNvbnN0IENTU0dy
YWRpZW50Q29sb3JTdG9wJiBiKQoreworICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWVQdHIoYS5j
b2xvciwgYi5jb2xvcikgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKGEucG9zaXRpb24sIGIucG9zaXRp
b24pOworfQorCiBjbGFzcyBDU1NHcmFkaWVudFZhbHVlIDogcHVibGljIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUgewogcHVibGljOgotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UoUmVuZGVyRWxlbWVu
dCYsIGNvbnN0IEZsb2F0U2l6ZSYpOwotCi0gICAgdm9pZCBzZXRGaXJzdFgoUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX2ZpcnN0WCA9IFdURk1vdmUodmFsKTsgfQotICAgIHZv
aWQgc2V0Rmlyc3RZKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9maXJzdFkg
PSBXVEZNb3ZlKHZhbCk7IH0KLSAgICB2b2lkIHNldFNlY29uZFgoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYmIHZhbCkgeyBtX3NlY29uZFggPSBXVEZNb3ZlKHZhbCk7IH0KLSAgICB2b2lkIHNl
dFNlY29uZFkoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX3NlY29uZFkgPSBX
VEZNb3ZlKHZhbCk7IH0KLQotICAgIHZvaWQgYWRkU3RvcChjb25zdCBDU1NHcmFkaWVudENvbG9y
U3RvcCYgc3RvcCkgeyBtX3N0b3BzLmFwcGVuZChzdG9wKTsgfQorICAgIHZvaWQgc2V0Rmlyc3RY
KFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkgeyBtX2ZpcnN0WCA9IFdURk1vdmUo
dmFsdWUpOyB9CisgICAgdm9pZCBzZXRGaXJzdFkoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYm
IHZhbHVlKSB7IG1fZmlyc3RZID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFNlY29u
ZFgoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fc2Vjb25kWCA9IFdURk1v
dmUodmFsdWUpOyB9CisgICAgdm9pZCBzZXRTZWNvbmRZKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mJiB2YWx1ZSkgeyBtX3NlY29uZFkgPSBXVEZNb3ZlKHZhbHVlKTsgfQorICAgIHZvaWQgYWRk
U3RvcChDU1NHcmFkaWVudENvbG9yU3RvcCYmIHN0b3ApIHsgbV9zdG9wcy5hcHBlbmQoV1RGTW92
ZShzdG9wKSk7IH0KICAgICB2b2lkIGRvbmVBZGRpbmdTdG9wcygpIHsgbV9zdG9wcy5zaHJpbmtU
b0ZpdCgpOyB9Ci0KLSAgICB1bnNpZ25lZCBzdG9wQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3N0
b3BzLnNpemUoKTsgfQotCi0gICAgdm9pZCBzb3J0U3RvcHNJZk5lZWRlZCgpOwotCi0gICAgYm9v
bCBpc1JlcGVhdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwZWF0aW5nOyB9CisgICAgYm9vbCBo
YXNBdExlYXN0VHdvU3RvcHMoKSBjb25zdCB7IHJldHVybiBtX3N0b3BzLnNpemUoKSA+PSAyOyB9
CisgICAgdm9pZCByZXNvbHZlUkdCQ29sb3JzKCk7CiAKICAgICBDU1NHcmFkaWVudFR5cGUgZ3Jh
ZGllbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudFR5cGU7IH0KIAotICAgIGJvb2wg
aXNGaXhlZFNpemUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIEZsb2F0U2l6ZSBmaXhl
ZFNpemUoY29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0IHsgcmV0dXJuIEZsb2F0U2l6ZSgpOyB9
Ci0KLSAgICBib29sIGlzUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgUmVm
UHRyPEltYWdlPiBpbWFnZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmxvYXRTaXplJik7CiAgICAg
Ym9vbCBrbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCYpIGNvbnN0OwogCi0gICAg
dm9pZCBsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VM
b2FkZXJPcHRpb25zJikgeyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRml4ZWRTaXpl
KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMgRmxvYXRTaXplIGZpeGVkU2l6ZShjb25z
dCBSZW5kZXJFbGVtZW50JikgeyByZXR1cm4gRmxvYXRTaXplKCk7IH0KKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNQZW5kaW5nKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMgdm9p
ZCBsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zJikgeyB9CisKICAgICBSZWY8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRo
U3R5bGVzUmVzb2x2ZWQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOwotICAgIHZvaWQgcmVzb2x2ZVJH
QkNvbG9ycygpOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTR3JhZGllbnRWYWx1ZShDbGFzc1R5cGUg
Y2xhc3NUeXBlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXQsIENTU0dyYWRpZW50VHlwZSBncmFk
aWVudFR5cGUpCkBAIC0xMDEsNDEgKzg4LDQzIEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQog
Ci0gICAgQ1NTR3JhZGllbnRWYWx1ZShjb25zdCBDU1NHcmFkaWVudFZhbHVlJiBvdGhlciwgQ2xh
c3NUeXBlIGNsYXNzVHlwZSwgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKKyAgICBDU1NH
cmFkaWVudFZhbHVlKGNvbnN0IENTU0dyYWRpZW50VmFsdWUmIG90aGVyLCBDbGFzc1R5cGUgY2xh
c3NUeXBlKQogICAgICAgICA6IENTU0ltYWdlR2VuZXJhdG9yVmFsdWUoY2xhc3NUeXBlKQogICAg
ICAgICAsIG1fZmlyc3RYKG90aGVyLm1fZmlyc3RYKQogICAgICAgICAsIG1fZmlyc3RZKG90aGVy
Lm1fZmlyc3RZKQogICAgICAgICAsIG1fc2Vjb25kWChvdGhlci5tX3NlY29uZFgpCiAgICAgICAg
ICwgbV9zZWNvbmRZKG90aGVyLm1fc2Vjb25kWSkKICAgICAgICAgLCBtX3N0b3BzKG90aGVyLm1f
c3RvcHMpCi0gICAgICAgICwgbV9zdG9wc1NvcnRlZChvdGhlci5tX3N0b3BzU29ydGVkKQotICAg
ICAgICAsIG1fZ3JhZGllbnRUeXBlKGdyYWRpZW50VHlwZSkKKyAgICAgICAgLCBtX2dyYWRpZW50
VHlwZShvdGhlci5tX2dyYWRpZW50VHlwZSkKICAgICAgICAgLCBtX3JlcGVhdGluZyhvdGhlci5t
X3JlcGVhdGluZykKKyAgICAgICAgLCBtX2hhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50KG90aGVy
Lm1faGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQpCiAgICAgewogICAgIH0KIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEdyYWRpZW50QWRhcHRlcj4KLSAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVj
dG9yIGNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiwgY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYWRpZW50QWRhcHRlcj4gR3JhZGllbnQ6OkNvbG9y
U3RvcFZlY3RvciBjb21wdXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYsIGNvbnN0IFJlbmRlclN0eWxlJiwgZmxvYXQgbWF4TGVuZ3RoRm9y
UmVwZWF0KTsKIAotICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1
ZXMuCi0gICAgRmxvYXRQb2ludCBjb21wdXRlRW5kUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBD
U1NQcmltaXRpdmVWYWx1ZSosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBjb25z
dCBGbG9hdFNpemUmKTsKKyAgICBhdXRvIGZpcnN0WCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RY
LmdldCgpOyB9CisgICAgYXV0byBmaXJzdFkoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0WS5nZXQo
KTsgfQorICAgIGF1dG8gc2Vjb25kWCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vjb25kWC5nZXQoKTsg
fQorICAgIGF1dG8gc2Vjb25kWSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vjb25kWS5nZXQoKTsgfQor
ICAgIGF1dG8mIHN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQorICAgIGJvb2wgaXNS
ZXBlYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX3JlcGVhdGluZzsgfQorCisgICAgYm9vbCBlcXVh
bHMoY29uc3QgQ1NTR3JhZGllbnRWYWx1ZSYpIGNvbnN0OwogCitwcml2YXRlOgorICAgIGJvb2wg
aGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQoKSBjb25zdDsKICAgICBib29sIGlzQ2FjaGVhYmxl
KCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB3cml0ZUNvbG9yU3RvcChTdHJpbmdCdWlsZGVyJiwg
Y29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmKSBjb25zdDsKIAotICAgIC8vIFBvaW50cy4gU29t
ZSBvZiB0aGVzZSBtYXkgYmUgbnVsbC4KICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1f
Zmlyc3RYOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdFk7Ci0KICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fc2Vjb25kWDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IG1fc2Vjb25kWTsKLQotICAgIC8vIFN0b3BzCiAgICAgVmVjdG9yPENTU0dyYWRp
ZW50Q29sb3JTdG9wLCAyPiBtX3N0b3BzOwotICAgIGJvb2wgbV9zdG9wc1NvcnRlZCB7IGZhbHNl
IH07CiAgICAgQ1NTR3JhZGllbnRUeXBlIG1fZ3JhZGllbnRUeXBlOwogICAgIGJvb2wgbV9yZXBl
YXRpbmcgeyBmYWxzZSB9OworCisgICAgbXV0YWJsZSBPcHRpb25hbDxib29sPiBtX2hhc0NvbG9y
RGVyaXZlZEZyb21FbGVtZW50OwogfTsKIAogY2xhc3MgQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSBm
aW5hbCA6IHB1YmxpYyBDU1NHcmFkaWVudFZhbHVlIHsKQEAgLTE0NSw3ICsxMzQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0xpbmVhckdyYWRpZW50VmFsdWUo
cmVwZWF0LCBncmFkaWVudFR5cGUpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEFuZ2xlKFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9hbmdsZSA9IFdURk1vdmUodmFsKTsgfQorICAg
IHZvaWQgc2V0QW5nbGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fYW5nbGUg
PSBXVEZNb3ZlKHZhbHVlKTsgfQogCiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsK
IApAQCAtMTY2LDcgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgQ1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZShjb25zdCBDU1NMaW5lYXJHcmFkaWVudFZhbHVlJiBvdGhlcikKLSAgICAgICAg
OiBDU1NHcmFkaWVudFZhbHVlKG90aGVyLCBMaW5lYXJHcmFkaWVudENsYXNzLCBvdGhlci5ncmFk
aWVudFR5cGUoKSkKKyAgICAgICAgOiBDU1NHcmFkaWVudFZhbHVlKG90aGVyLCBMaW5lYXJHcmFk
aWVudENsYXNzKQogICAgICAgICAsIG1fYW5nbGUob3RoZXIubV9hbmdsZSkKICAgICB7CiAgICAg
fQpAQCAtMTg4LDE0ICsxNzcsMTQgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGN1c3RvbUNTU1Rl
eHQoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0Rmlyc3RSYWRpdXMoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYmIHZhbCkgeyBtX2ZpcnN0UmFkaXVzID0gV1RGTW92ZSh2YWwpOyB9Ci0gICAgdm9p
ZCBzZXRTZWNvbmRSYWRpdXMoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX3Nl
Y29uZFJhZGl1cyA9IFdURk1vdmUodmFsKTsgfQorICAgIHZvaWQgc2V0Rmlyc3RSYWRpdXMoUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fZmlyc3RSYWRpdXMgPSBXVEZNb3Zl
KHZhbHVlKTsgfQorICAgIHZvaWQgc2V0U2Vjb25kUmFkaXVzKFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4mJiB2YWx1ZSkgeyBtX3NlY29uZFJhZGl1cyA9IFdURk1vdmUodmFsdWUpOyB9CiAKLSAg
ICB2b2lkIHNldFNoYXBlKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9zaGFw
ZSA9IFdURk1vdmUodmFsKTsgfQotICAgIHZvaWQgc2V0U2l6aW5nQmVoYXZpb3IoUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX3NpemluZ0JlaGF2aW9yID0gV1RGTW92ZSh2YWwp
OyB9CisgICAgdm9pZCBzZXRTaGFwZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUp
IHsgbV9zaGFwZSA9IFdURk1vdmUodmFsdWUpOyB9CisgICAgdm9pZCBzZXRTaXppbmdCZWhhdmlv
cihSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpIHsgbV9zaXppbmdCZWhhdmlvciA9
IFdURk1vdmUodmFsdWUpOyB9CiAKLSAgICB2b2lkIHNldEVuZEhvcml6b250YWxTaXplKFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWwpIHsgbV9lbmRIb3Jpem9udGFsU2l6ZSA9IFdURk1v
dmUodmFsKTsgfQotICAgIHZvaWQgc2V0RW5kVmVydGljYWxTaXplKFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4mJiB2YWwpIHsgbV9lbmRWZXJ0aWNhbFNpemUgPSBXVEZNb3ZlKHZhbCk7IH0KKyAg
ICB2b2lkIHNldEVuZEhvcml6b250YWxTaXplKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2
YWx1ZSkgeyBtX2VuZEhvcml6b250YWxTaXplID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICB2b2lk
IHNldEVuZFZlcnRpY2FsU2l6ZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpIHsg
bV9lbmRWZXJ0aWNhbFNpemUgPSBXVEZNb3ZlKHZhbHVlKTsgfQogCiAgICAgLy8gQ3JlYXRlIHRo
ZSBncmFkaWVudCBmb3IgYSBnaXZlbiBzaXplLgogICAgIFJlZjxHcmFkaWVudD4gY3JlYXRlR3Jh
ZGllbnQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZsb2F0U2l6ZSYpOwpAQCAtMjA5LDcgKzE5OCw3
IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZShjb25zdCBD
U1NSYWRpYWxHcmFkaWVudFZhbHVlJiBvdGhlcikKLSAgICAgICAgOiBDU1NHcmFkaWVudFZhbHVl
KG90aGVyLCBSYWRpYWxHcmFkaWVudENsYXNzLCBvdGhlci5ncmFkaWVudFR5cGUoKSkKKyAgICAg
ICAgOiBDU1NHcmFkaWVudFZhbHVlKG90aGVyLCBSYWRpYWxHcmFkaWVudENsYXNzKQogICAgICAg
ICAsIG1fZmlyc3RSYWRpdXMob3RoZXIubV9maXJzdFJhZGl1cykKICAgICAgICAgLCBtX3NlY29u
ZFJhZGl1cyhvdGhlci5tX3NlY29uZFJhZGl1cykKICAgICAgICAgLCBtX3NoYXBlKG90aGVyLm1f
c2hhcGUpCkBAIC0yNDgsNyArMjM3LDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGN1c3RvbUNT
U1RleHQoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0QW5nbGUoUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYmIHZhbCkgeyBtX2FuZ2xlID0gV1RGTW92ZSh2YWwpOyB9CisgICAgdm9pZCBzZXRBbmds
ZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpIHsgbV9hbmdsZSA9IFdURk1vdmUo
dmFsdWUpOyB9CiAKICAgICAvLyBDcmVhdGUgdGhlIGdyYWRpZW50IGZvciBhIGdpdmVuIHNpemUu
CiAgICAgUmVmPEdyYWRpZW50PiBjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiwgY29uc3Qg
RmxvYXRTaXplJik7CkBAIC0yNTYsMTMgKzI0NSwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBlcXVh
bHMoY29uc3QgQ1NTQ29uaWNHcmFkaWVudFZhbHVlJikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAg
Q1NTQ29uaWNHcmFkaWVudFZhbHVlKENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdCkKKyAgICBleHBs
aWNpdCBDU1NDb25pY0dyYWRpZW50VmFsdWUoQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0KQogICAg
ICAgICA6IENTU0dyYWRpZW50VmFsdWUoQ29uaWNHcmFkaWVudENsYXNzLCByZXBlYXQsIENTU0Nv
bmljR3JhZGllbnQpCiAgICAgewogICAgIH0KIAogICAgIENTU0NvbmljR3JhZGllbnRWYWx1ZShj
b25zdCBDU1NDb25pY0dyYWRpZW50VmFsdWUmIG90aGVyKQotICAgICAgICA6IENTU0dyYWRpZW50
VmFsdWUob3RoZXIsIENvbmljR3JhZGllbnRDbGFzcywgb3RoZXIuZ3JhZGllbnRUeXBlKCkpCisg
ICAgICAgIDogQ1NTR3JhZGllbnRWYWx1ZShvdGhlciwgQ29uaWNHcmFkaWVudENsYXNzKQogICAg
ICAgICAsIG1fYW5nbGUob3RoZXIubV9hbmdsZSkKICAgICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCmlu
ZGV4IDI4MWJjY2U5MjhiZTYwOTBkZWY3ZDlmNjE2MjQ4ZDhiOWQ0NWZiNDEuLjNiZWQ0YzRjOTk4
MjI4YjY2ZjAyYWYxZmFlMTkxOGI3YWFjNzA4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKQEAgLTEwMjEsOSAr
MTAyMSw5IEBAIHN0YXRpYyBib29sIGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3Ao
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU0dyCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgc3RvcC5tX3Bvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVWYWx1ZShwb3NpdGlvbiwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAg
IHN0b3AubV9jb2xvciA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRTdG9wQ29sb3IoYXJncywg
Y3NzUGFyc2VyTW9kZSk7Ci0gICAgcmV0dXJuIHN0b3AubV9jb2xvciAmJiBhcmdzLmF0RW5kKCk7
CisgICAgc3RvcC5wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFs
dWUocG9zaXRpb24sIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICBzdG9wLmNvbG9yID0g
Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFN0b3BDb2xvcihhcmdzLCBjc3NQYXJzZXJNb2RlKTsK
KyAgICByZXR1cm4gc3RvcC5jb2xvciAmJiBhcmdzLmF0RW5kKCk7CiB9CiAKIHN0YXRpYyBSZWZQ
dHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQpAQCAtMTA0MSwxMSArMTA0MSwx
MSBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTUwogICAgIGF1dG8gcG9pbnQgPSBjb25zdW1lRGVw
cmVjYXRlZEdyYWRpZW50UG9pbnQoYXJncywgdHJ1ZSk7CiAgICAgaWYgKCFwb2ludCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmVzdWx0LT5zZXRGaXJzdFgocG9pbnQuY29weVJlZigp
KTsKKyAgICByZXN1bHQtPnNldEZpcnN0WChXVEZNb3ZlKHBvaW50KSk7CiAgICAgcG9pbnQgPSBj
b25zdW1lRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYXJncywgZmFsc2UpOwogICAgIGlmICghcG9p
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJlc3VsdC0+c2V0Rmlyc3RZKHBvaW50
LmNvcHlSZWYoKSk7CisgICAgcmVzdWx0LT5zZXRGaXJzdFkoV1RGTW92ZShwb2ludCkpOwogCiAg
ICAgaWYgKCFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTEwNTUsMTcgKzEwNTUsMTcgQEAgc3RhdGljIFJlZlB0cjxDU1NW
YWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdz
LCBDU1MKICAgICAgICAgYXV0byByYWRpdXMgPSBjb25zdW1lTnVtYmVyKGFyZ3MsIFZhbHVlUmFu
Z2VOb25OZWdhdGl2ZSk7CiAgICAgICAgIGlmICghcmFkaXVzIHx8ICFjb25zdW1lQ29tbWFJbmNs
dWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KHJlc3VsdC5nZXQoKSktPnNldEZp
cnN0UmFkaXVzKHJhZGl1cy5jb3B5UmVmKCkpOworICAgICAgICBkb3duY2FzdDxDU1NSYWRpYWxH
cmFkaWVudFZhbHVlPihyZXN1bHQuZ2V0KCkpLT5zZXRGaXJzdFJhZGl1cyhXVEZNb3ZlKHJhZGl1
cykpOwogICAgIH0KIAogICAgIHBvaW50ID0gY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50
KGFyZ3MsIHRydWUpOwogICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJlc3VsdC0+c2V0U2Vjb25kWChwb2ludC5jb3B5UmVmKCkpOworICAgIHJlc3VsdC0+c2V0
U2Vjb25kWChXVEZNb3ZlKHBvaW50KSk7CiAgICAgcG9pbnQgPSBjb25zdW1lRGVwcmVjYXRlZEdy
YWRpZW50UG9pbnQoYXJncywgZmFsc2UpOwogICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIHJlc3VsdC0+c2V0U2Vjb25kWShwb2ludC5jb3B5UmVmKCkpOworICAg
IHJlc3VsdC0+c2V0U2Vjb25kWShXVEZNb3ZlKHBvaW50KSk7CiAKICAgICAvLyBGb3IgcmFkaWFs
IGdyYWRpZW50cyBvbmx5LCB3ZSBub3cgZXhwZWN0IHRoZSBzZWNvbmQgcmFkaXVzLgogICAgIGlm
IChpc0RlcHJlY2F0ZWRSYWRpYWxHcmFkaWVudCkgewpAQCAtMTA3NCwxNCArMTA3NCwxNCBAQCBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIGFyZ3MsIENTUwogICAgICAgICBhdXRvIHJhZGl1cyA9IGNvbnN1bWVOdW1i
ZXIoYXJncywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgaWYgKCFyYWRpdXMpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZT4ocmVzdWx0LmdldCgpKS0+c2V0U2Vjb25kUmFkaXVzKHJhZGl1cy5jb3B5UmVm
KCkpOworICAgICAgICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPihyZXN1bHQuZ2V0
KCkpLT5zZXRTZWNvbmRSYWRpdXMoV1RGTW92ZShyYWRpdXMpKTsKICAgICB9CiAKICAgICBDU1NH
cmFkaWVudENvbG9yU3RvcCBzdG9wOwogICAgIHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRpbmdX
aGl0ZXNwYWNlKGFyZ3MpKSB7CiAgICAgICAgIGlmICghY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVu
dENvbG9yU3RvcChhcmdzLCBzdG9wLCBjc3NQYXJzZXJNb2RlKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICByZXN1bHQtPmFkZFN0b3Aoc3RvcCk7CisgICAgICAgIHJlc3Vs
dC0+YWRkU3RvcChXVEZNb3ZlKHN0b3ApKTsKICAgICB9CiAKICAgICByZXN1bHQtPmRvbmVBZGRp
bmdTdG9wcygpOwpAQCAtMTA5OCwzOCArMTA5OCwzNiBAQCBzdGF0aWMgYm9vbCBjb25zdW1lR3Jh
ZGllbnRDb2xvclN0b3BzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2Rl
CiAgICAgYm9vbCBwcmV2aW91c1N0b3BXYXNDb2xvckhpbnQgPSB0cnVlOwogICAgIGRvIHsKICAg
ICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcDsKLSAgICAgICAgc3RvcC5tX2NvbG9yID0g
Y29uc3VtZUNvbG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKKyAgICAgICAgc3RvcC5jb2xvciA9
IGNvbnN1bWVDb2xvcihyYW5nZSwgY3NzUGFyc2VyTW9kZSk7CiAgICAgICAgIC8vIFR3byBoaW50
cyBpbiBhIHJvdyBhcmUgbm90IGFsbG93ZWQuCi0gICAgICAgIGlmICghc3RvcC5tX2NvbG9yICYm
ICghc3VwcG9ydHNDb2xvckhpbnRzIHx8IHByZXZpb3VzU3RvcFdhc0NvbG9ySGludCkpCisgICAg
ICAgIGlmICghc3RvcC5jb2xvciAmJiAoIXN1cHBvcnRzQ29sb3JIaW50cyB8fCBwcmV2aW91c1N0
b3BXYXNDb2xvckhpbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAg
ICAgICAgcHJldmlvdXNTdG9wV2FzQ29sb3JIaW50ID0gIXN0b3AubV9jb2xvcjsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogVGhpcyBib29sZWFuIGNvdWxkIGJlIHJlbW92
ZWQuIE51bGwgY2hlY2tpbmcgY29sb3Igd291bGQgYmUgc3VmZmljaWVudC4KLSAgICAgICAgc3Rv
cC5pc01pZHBvaW50ID0gIXN0b3AubV9jb2xvcjsKKworICAgICAgICBwcmV2aW91c1N0b3BXYXND
b2xvckhpbnQgPSAhc3RvcC5jb2xvcjsKIAogICAgICAgICBpZiAoaXNDb25pY0dyYWRpZW50KQot
ICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY29uc3VtZUFuZ2xlT3JQZXJjZW50KHJhbmdl
LCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxsLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwor
ICAgICAgICAgICAgc3RvcC5wb3NpdGlvbiA9IGNvbnN1bWVBbmdsZU9yUGVyY2VudChyYW5nZSwg
Y3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY29uc3VtZUxlbmd0aE9y
UGVyY2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIXN0b3AubV9jb2xvciAmJiAhc3RvcC5tX3Bvc2l0aW9uKQorICAgICAgICAg
ICAgc3RvcC5wb3NpdGlvbiA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIGNzc1BhcnNl
ck1vZGUsIFZhbHVlUmFuZ2VBbGwpOworCisgICAgICAgIGlmICghc3RvcC5jb2xvciAmJiAhc3Rv
cC5wb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBncmFkaWVu
dC5hZGRTdG9wKHN0b3ApOworICAgICAgICBib29sIGlzU2Vjb25kU3RvcFBvc3NpYmxlID0gc3Rv
cC5jb2xvciAmJiBzdG9wLnBvc2l0aW9uOworCisgICAgICAgIGdyYWRpZW50LmFkZFN0b3AoV1RG
TW92ZShzdG9wKSk7CiAKLSAgICAgICAgaWYgKCFzdG9wLm1fY29sb3IgfHwgIXN0b3AubV9wb3Np
dGlvbikKKyAgICAgICAgaWYgKCFpc1NlY29uZFN0b3BQb3NzaWJsZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHNlY29uZFN0b3A7CiAgICAg
ICAgIGlmIChpc0NvbmljR3JhZGllbnQpCi0gICAgICAgICAgICBzZWNvbmRTdG9wLm1fcG9zaXRp
b24gPSBjb25zdW1lQW5nbGVPclBlcmNlbnQocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFu
Z2VBbGwsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CisgICAgICAgICAgICBzZWNvbmRTdG9wLnBv
c2l0aW9uID0gY29uc3VtZUFuZ2xlT3JQZXJjZW50KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1
ZVJhbmdlQWxsLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzZWNvbmRTdG9wLm1fcG9zaXRpb24gPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdl
LCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxsKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChz
ZWNvbmRTdG9wLm1fcG9zaXRpb24pCi0gICAgICAgICAgICBncmFkaWVudC5hZGRTdG9wKHNlY29u
ZFN0b3ApOwotICAgICAgICAKKyAgICAgICAgICAgIHNlY29uZFN0b3AucG9zaXRpb24gPSBjb25z
dW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxsKTsK
KworICAgICAgICBpZiAoc2Vjb25kU3RvcC5wb3NpdGlvbikKKyAgICAgICAgICAgIGdyYWRpZW50
LmFkZFN0b3AoV1RGTW92ZShzZWNvbmRTdG9wKSk7CiAgICAgfSB3aGlsZSAoY29uc3VtZUNvbW1h
SW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOwogCiAgICAgZ3JhZGllbnQuZG9uZUFkZGluZ1N0
b3BzKCk7CkBAIC0xMTM5LDI5ICsxMTM3LDIzIEBAIHN0YXRpYyBib29sIGNvbnN1bWVHcmFkaWVu
dENvbG9yU3RvcHMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gTXVzdCBoYXZlIDIgb3IgbW9yZSBzdG9wcyB0
byBiZSB2YWxpZC4KLSAgICByZXR1cm4gZ3JhZGllbnQuc3RvcENvdW50KCkgPj0gMjsKKyAgICBy
ZXR1cm4gZ3JhZGllbnQuaGFzQXRMZWFzdFR3b1N0b3BzKCk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NHcmFkaWVudFJlcGVh
dCByZXBlYXRpbmcpCiB7Ci0gICAgUmVmUHRyPENTU1JhZGlhbEdyYWRpZW50VmFsdWU+IHJlc3Vs
dCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcsIENTU1ByZWZpeGVk
UmFkaWFsR3JhZGllbnQpOworICAgIGF1dG8gcmVzdWx0ID0gQ1NTUmFkaWFsR3JhZGllbnRWYWx1
ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUHJlZml4ZWRSYWRpYWxHcmFkaWVudCk7CisKICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclg7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjZW50ZXJZOwogICAgIGNvbnN1bWVPbmVPclR3b1ZhbHVlZFBvc2l0aW9uKGFyZ3Ms
IGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgY2VudGVyWCwgY2VudGVyWSk7
CiAgICAgaWYgKChjZW50ZXJYIHx8IGNlbnRlclkpICYmICFjb25zdW1lQ29tbWFJbmNsdWRpbmdX
aGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJlc3VsdC0+
c2V0Rmlyc3RYKGNlbnRlclguY29weVJlZigpKTsKLSAgICByZXN1bHQtPnNldEZpcnN0WShjZW50
ZXJZLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRYKGNlbnRlclguY29weVJlZigp
KTsKLSAgICByZXN1bHQtPnNldFNlY29uZFkoY2VudGVyWS5jb3B5UmVmKCkpOwotCiAgICAgYXV0
byBzaGFwZSA9IGNvbnN1bWVJZGVudDxDU1NWYWx1ZUNpcmNsZSwgQ1NTVmFsdWVFbGxpcHNlPihh
cmdzKTsKICAgICBhdXRvIHNpemVLZXl3b3JkID0gY29uc3VtZUlkZW50PENTU1ZhbHVlQ2xvc2Vz
dFNpZGUsIENTU1ZhbHVlQ2xvc2VzdENvcm5lciwgQ1NTVmFsdWVGYXJ0aGVzdFNpZGUsIENTU1Zh
bHVlRmFydGhlc3RDb3JuZXIsIENTU1ZhbHVlQ29udGFpbiwgQ1NTVmFsdWVDb3Zlcj4oYXJncyk7
CiAgICAgaWYgKCFzaGFwZSkKICAgICAgICAgc2hhcGUgPSBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVD
aXJjbGUsIENTU1ZhbHVlRWxsaXBzZT4oYXJncyk7Ci0gICAgcmVzdWx0LT5zZXRTaGFwZShzaGFw
ZS5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0U2l6aW5nQmVoYXZpb3Ioc2l6ZUtleXdvcmQu
Y29weVJlZigpKTsKIAogICAgIC8vIE9yLCB0d28gbGVuZ3RocyBvciBwZXJjZW50YWdlcwogICAg
IGlmICghc2hhcGUgJiYgIXNpemVLZXl3b3JkKSB7CkBAIC0xMTcyLDE2ICsxMTY0LDI0IEBAIHN0
YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgYXJnCiAgICAgICAgICAgICBpZiAoIXZlcnRpY2FsU2l6ZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGNvbnN1bWVDb21tYUlu
Y2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEVuZEhvcml6
b250YWxTaXplKGhvcml6b250YWxTaXplLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICByZXN1bHQt
PnNldEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29weVJlZigpKTsKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0RW5kSG9yaXpvbnRhbFNpemUoV1RGTW92ZShob3Jpem9udGFsU2l6ZSkpOwor
ICAgICAgICAgICAgcmVzdWx0LT5zZXRFbmRWZXJ0aWNhbFNpemUoV1RGTW92ZSh2ZXJ0aWNhbFNp
emUpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN1bWVDb21tYUluY2x1
ZGluZ1doaXRlc3BhY2UoYXJncyk7CiAgICAgfQotICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29s
b3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCAqcmVzdWx0KSkKKworICAgIGlmICghY29uc3Vt
ZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCByZXN1bHQpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0LT5zZXRG
aXJzdFgoY2VudGVyWC5jb3B5UmVmKCkpOworICAgIHJlc3VsdC0+c2V0Rmlyc3RZKGNlbnRlclku
Y29weVJlZigpKTsKKyAgICByZXN1bHQtPnNldFNlY29uZFgoV1RGTW92ZShjZW50ZXJYKSk7Cisg
ICAgcmVzdWx0LT5zZXRTZWNvbmRZKFdURk1vdmUoY2VudGVyWSkpOworICAgIHJlc3VsdC0+c2V0
U2hhcGUoV1RGTW92ZShzaGFwZSkpOworICAgIHJlc3VsdC0+c2V0U2l6aW5nQmVoYXZpb3IoV1RG
TW92ZShzaXplS2V5d29yZCkpOworCisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAog
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclRv
a2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTR3JhZGllbnRS
ZXBlYXQgcmVwZWF0aW5nKQpAQCAtMTI0MiwxMSArMTI0Miw2IEBAIHN0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBD
U1NQYXJzCiAgICAgICAgIHx8ICh2ZXJ0aWNhbFNpemUgJiYgdmVydGljYWxTaXplLT5pc0NhbGN1
bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXN1bHQtPnNldFNoYXBlKHNoYXBlLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRT
aXppbmdCZWhhdmlvcihzaXplS2V5d29yZC5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0RW5k
SG9yaXpvbnRhbFNpemUoaG9yaXpvbnRhbFNpemUuY29weVJlZigpKTsKLSAgICByZXN1bHQtPnNl
dEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29weVJlZigpKTsKLQogICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY2VudGVyWDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNlbnRlclk7CiAgICAgaWYgKGFyZ3MucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVBdCkgewpAQCAt
MTI2Nyw2ICsxMjYyLDEyIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVSYWRpYWxH
cmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQ
YXJzZXJNb2RlLCAqcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXN1
bHQtPnNldFNoYXBlKFdURk1vdmUoc2hhcGUpKTsKKyAgICByZXN1bHQtPnNldFNpemluZ0JlaGF2
aW9yKFdURk1vdmUoc2l6ZUtleXdvcmQpKTsKKyAgICByZXN1bHQtPnNldEVuZEhvcml6b250YWxT
aXplKFdURk1vdmUoaG9yaXpvbnRhbFNpemUpKTsKKyAgICByZXN1bHQtPnNldEVuZFZlcnRpY2Fs
U2l6ZShXVEZNb3ZlKHZlcnRpY2FsU2l6ZSkpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMTI5MCw4ICsxMjkxLDggQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUxpbmVh
ckdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnMKICAgICAgICAgICAg
IGVuZFggPSBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVMZWZ0LCBDU1NWYWx1ZVJpZ2h0PihhcmdzKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RYKGVuZFguY29weVJlZigpKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkoZW5kWS5jb3B5UmVmKCkpOworICAgICAgICByZXN1
bHQtPnNldEZpcnN0WChXVEZNb3ZlKGVuZFgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFko
V1RGTW92ZShlbmRZKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZXhwZWN0Q29tbWEgPSBmYWxz
ZTsKICAgICB9CkBAIC0xMzE0LDI0ICsxMzE1LDI0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVDb25pY0dyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNl
CiAgICAgICAgICAgICBhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xlKGFyZ3MsIGNvbnRleHQubW9k
ZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKICAgICAgICAgICAgIGlmICghYW5nbGUpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEFuZ2xl
KGFuZ2xlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShX
VEZNb3ZlKGFuZ2xlKSk7CiAgICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CiAgICAgICAg
IH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnN1bWVJZGVudDxDU1NWYWx1ZUF0Pihhcmdz
KSkgewogICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJYOwogICAg
ICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJZOwogICAgICAgICAgICAg
Y29uc3VtZVBvc2l0aW9uKGFyZ3MsIGNvbnRleHQubW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlk
LCBQb3NpdGlvblN5bnRheDo6UG9zaXRpb24sIGNlbnRlclgsIGNlbnRlclkpOwogICAgICAgICAg
ICAgaWYgKCEoY2VudGVyWCAmJiBjZW50ZXJZKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXN1bHQtPnNldEZpcnN0WChjZW50
ZXJYLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldEZpcnN0WShjZW50ZXJZLmNv
cHlSZWYoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gUmlnaHQgbm93LCBjb25p
YyBncmFkaWVudHMgaGF2ZSB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIGNlbnRlcnMuCi0gICAgICAg
ICAgICByZXN1bHQtPnNldFNlY29uZFgoY2VudGVyWC5jb3B5UmVmKCkpOwotICAgICAgICAgICAg
cmVzdWx0LT5zZXRTZWNvbmRZKGNlbnRlclkuY29weVJlZigpKTsKLSAgICAKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0U2Vjb25kWChXVEZNb3ZlKGNlbnRlclgpKTsKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U2Vjb25kWShXVEZNb3ZlKGNlbnRlclkpKTsKKwogICAgICAgICAgICAgZXhwZWN0Q29t
bWEgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKaW5kZXggNWQwOGU5ZTQ5NDVlMmQ5M2NkYjhkY2EyMDVmYzAzMzFjYmVmZjhm
MS4uZjhjNGRjYzQxNGEyN2IxODEwY2FhNDhkMWZhZTU1OWZhMTc0NTdjMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0yMDU1LDE5ICsyMDU1LDE5IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFNlbGVjdGlvblJhbmdlRm9yQmlu
ZGluZ3MoaW50IHN0YXJ0LCBpbnQKIHN0YXRpYyBSZWY8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4g
YXV0b0ZpbGxTdHJvbmdQYXNzd29yZE1hc2tJbWFnZSgpCiB7CiAgICAgQ1NTR3JhZGllbnRDb2xv
clN0b3AgZmlyc3RTdG9wOwotICAgIGZpcnN0U3RvcC5tX2NvbG9yID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKENvbG9yOjpibGFjayk7Ci0gICAgZmlyc3RTdG9w
Lm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDUwLCBD
U1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIGZpcnN0U3RvcC5jb2xvciA9IENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShDb2xvcjo6YmxhY2spOworICAg
IGZpcnN0U3RvcC5wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFs
dWUoNTAsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CiAKICAgICBDU1NHcmFkaWVudENv
bG9yU3RvcCBzZWNvbmRTdG9wOwotICAgIHNlY29uZFN0b3AubV9jb2xvciA9IENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShDb2xvcjo6dHJhbnNwYXJlbnQpOwotICAg
IHNlY29uZFN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
VmFsdWUoMTAwLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIHNlY29uZFN0b3Au
Y29sb3IgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUNvbG9yVmFsdWUoQ29sb3I6
OnRyYW5zcGFyZW50KTsKKyAgICBzZWNvbmRTdG9wLnBvc2l0aW9uID0gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgxMDAsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7
CiAKICAgICBhdXRvIGdyYWRpZW50ID0gQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKENT
U0dyYWRpZW50UmVwZWF0OjpOb25SZXBlYXRpbmcsIENTU0dyYWRpZW50VHlwZTo6Q1NTTGluZWFy
R3JhZGllbnQpOwogICAgIGdyYWRpZW50LT5zZXRBbmdsZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZVZhbHVlKDkwLCBDU1NVbml0VHlwZTo6Q1NTX0RFRykpOwotICAgIGdyYWRpZW50
LT5hZGRTdG9wKGZpcnN0U3RvcCk7Ci0gICAgZ3JhZGllbnQtPmFkZFN0b3Aoc2Vjb25kU3RvcCk7
CisgICAgZ3JhZGllbnQtPmFkZFN0b3AoV1RGTW92ZShmaXJzdFN0b3ApKTsKKyAgICBncmFkaWVu
dC0+YWRkU3RvcChXVEZNb3ZlKHNlY29uZFN0b3ApKTsKKyAgICBncmFkaWVudC0+ZG9uZUFkZGlu
Z1N0b3BzKCk7CiAgICAgZ3JhZGllbnQtPnJlc29sdmVSR0JDb2xvcnMoKTsKLQogICAgIHJldHVy
biBncmFkaWVudDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392283</attachid>
            <date>2020-03-03 09:12:22 -0800</date>
            <delta_ts>2020-03-04 21:00:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208417-20200303091218.patch</filename>
            <type>text/plain</type>
            <size>75506</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2MxZjliYjY5NjJiOWE2
MTc5MGI0Y2ZlMGZmMjkzNmZmOTAwOTg5NC4uZjc4ZGQwZjFlOTdmZDAzNDQwMmQzZDhmZWRlMjkw
ODE5YTk5NTI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAyMC0wMi0yOSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgZ3JhZGllbnQg
cGFyc2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA4NDE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAg
IC0gVXNlIE9wdGlvbmFsPD4gYW5kIGludmFsaWQgQ29sb3IgdG8gcmVwcmVzZW50IHVuc3BlY2lm
aWVkIHBvc2l0aW9ucyBhbmQgY29sb3JzLgorICAgICAgICAgIFRoaXMgaXMgc2ltcGxlciBhbmQg
ZWFzaWVyIHRvIGdldCByaWdodCB0aGFuIHNlcGFyYXRlIGJvb2xlYW5zLgorICAgICAgICAtIFNp
bXBsaWZpZWQgc29ydGluZyBvZiBzdG9wcyBpbiBsZWdhY3kgZ3JhZGllbnRzIHRvIHJlbW92ZSBl
eHRyYSBDU1MgdmFsdWUKKyAgICAgICAgICBldmFsdWF0aW9uIGFuZCB1bm5lY2Vzc2FyeSAic29y
dCBpbiBwbGFjZSIgdGVjaG5pcXVlLgorICAgICAgICAtIFJld3JvdGUgZXF1YWxzIGZ1bmN0aW9u
cyBmb3IgQ1NTIGdyYWRpZW50IHZhbHVlIGNsYXNzZXMuIFRoZSBuZXcgcGF0dGVybiBpcworICAg
ICAgICAgIHRvIGNvbXBhcmUgYWxsIHRoZSBkYXRhIG1lbWJlcnMgdGhhdCBob2xkIHBhcnNlZCBD
U1MgZGF0YSwgaGFuZGxpbmcgbnVsbAorICAgICAgICAgIGNvcnJlY3RseSwgc2luY2UgdGhlIHBh
cnNlciB3b24ndCBzZXQgaW5hcHByb3ByaWF0ZSBvbmVzLiBUaGUgb2xkIGNvZGUgaGFkCisgICAg
ICAgICAgY29tcGxleCBsb2dpYyB0byBvbmx5IGNvbXBhcmUgY2VydGFpbiBkYXRhIG1lbWJlcnMs
IHdoaWNoIHdhcyB1bm5lY2Vzc2FyeQorICAgICAgICAgIGFuZCBoYXJkIHRvIHJlYWQgdG8gdGVs
bCBpZiBpdCB3YXMgY29ycmVjdC4KKyAgICAgICAgLSBBZGRlZCBzb21lIG1vcmUgdXNlIG9mIFdU
Rk1vdmUgdG8gY3V0IGRvd24gb24gcmVmZXJlbmNlIGNvdW50IGNodXJuLgorCisgICAgICAgICog
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRW
YWx1ZTo6aW1hZ2UpOiBSZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gZ2V0KCkuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlU3RvcHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3Jh
ZGllbnRWYWx1ZTo6c29ydFN0b3BzSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6cmVzb2x2ZVN0b3BDb2xvcnMpOiBUYWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdl
IGtub3cgYmVjYXVzZQorICAgICAgICBvZiBwYXJzaW5nIHJ1bGVzIHRoYXQgdGhlIG9ubHkgc3Rv
cHMgd2l0aG91dCBjb2xvcnMgYXJlIG1pZHBvaW50cyB0byBkcmFzdGljYWxseQorICAgICAgICBz
aW1wbGlmeSB0aGlzIGZ1bmN0aW9uIHRvIGEgdHJpdmlhbCBsb29wLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTR3JhZGllbnRWYWx1ZTo6aGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQgY29uc3QpOiBB
ZGRlZC4KKyAgICAgICAgQ2hlY2tzIHRvIHNlZSBpZiBhbnkgb2YgdGhlIHN0b3AgY29sb3JzIGlz
IGRlcml2ZWQgZnJvbSB0aGUgZWxlbWVudC4gVGhlIG9sZAorICAgICAgICBjb2RlIGNvbmZ1c2lu
Z2x5IHdvdWxkIHN0b3JlIHRoZSBhbnN3ZXIgdG8gdGhpcyBpbiB0aGUgc3RvcCwgYnV0IG9ubHkg
aW4gdGhlCisgICAgICAgIGZpcnN0IHN0b3Agd2l0aCB0aGlzIHByb3BlcnR5LiBDb21wdXRpbmcg
aXQgd2l0aG91dCBtb2RpZnlpbmcgdGhlIHN0b3AsIGFuZAorICAgICAgICBtZW1vaXppbmcgaXQg
aW4gdGhlIGdyYWRpZW50IHByZXNlcnZlcyB0aGUgc2FtZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJp
c3RpY3MKKyAgICAgICAgYXMgYmVmb3JlIHdpdGhvdXQgcmVxdWlyaW5nIGEgYm9vbGVhbiBpbiBl
YWNoIHN0b3AgaW4gdGhlIHN0b3BzIHZlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRp
ZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKTogQ2FsbCB0aGUgbmV3CisgICAg
ICAgIGhhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50IGZ1bmN0aW9uIGluc3RlYWQgb2YgaGF2aW5n
IHRoZSBsb2dpYyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6TGluZWFyR3JhZGllbnRBZGFwdGVy
Ojpub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNpZGVSYW5nZSk6CisgICAgICAgIFVwZGF0
ZSBzaW5jZSBHcmFkaWVudFN0b3Agbm93IGhhcyBvcHRpb25hbCBvZmZzZXRzLiBCeSB0aGUgdGlt
ZSB0aGlzCisgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCB0aGV5IGFyZSBhbGwgZ3VhcmFudGVl
ZCB0byBiZSBmaWxsZWQgaW4sIHNvIHdlIGNhbgorICAgICAgICBqdXN0IHVzZSB0aGUgKiBvcGVy
YXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlJhZGlhbEdyYWRpZW50QWRhcHRlcjo6bm9ybWFsaXpl
U3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UpOgorICAgICAgICBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbmljR3JhZGllbnRBZGFwdGVyOjpub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50
c091dHNpZGVSYW5nZSk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3Jh
ZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKTogTW92ZWQgdGhlIHNvcnRpbmcgb2Ygc3RvcHMgZm9y
CisgICAgICAgIHRoZSBkZXByZWNhdGVkIGdyYWRpZW50cyBoZXJlLiBBbHNvIHVwZGF0ZWQgc2lu
Y2UgR3JhZGllbnQ6OkNvbG9yU3RvcAorICAgICAgICBubyBsb25nZXIgdXNlcyAibV8iIHByZWZp
eGVzIG9uIGl0cyBwdWJsaWMgc3RydWN0IGRhdGEgbWVtYmVycy4gU29tZQorICAgICAgICBzaW1w
bGlmaWNhdGlvbiBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0ICJz
cGVjaWZpZWQiCisgICAgICAgIHRvIHRydWUgc2luY2UgaXQncyBubyBsb25nZXIgYSBzZXBhcmF0
ZSBib29sZWFuLgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gcm9tVmFsdWUpOiBIYW5kbGUg
YSBudWxsIHBvaW50ZXIgZm9yIHZhbHVlIGJ5IHJldHVybmluZworICAgICAgICAwLCB3aGljaCBp
cyB3aGF0IHRoZSBjYWxsZXIgd2FzIGRvaW5nIGV4cGxpY2l0bHkgYmVmb3JlLiBVc2UgZmxvYXQK
KyAgICAgICAgaW5zdGVhZCBvZiBpbnQgZm9yIHNvbWUgaW50ZXJuYWwgY29tcHV0YXRpb25zIHRo
YXQgd2VyZSBtaXhpbmcgdGhlIHR3bworICAgICAgICBmb3Igbm8gZ29vZCByZWFzb24uCisgICAg
ICAgIChXZWJDb3JlOjpjb21wdXRlRW5kUG9pbnQpOiBSZW1vdmVkIG51bGwgY2hlY2tzIG5vdyB0
aGF0IHBvc2l0aW9uRnJvbVZhbHVlCisgICAgICAgIGRvZXMgdGhlbSBmb3IgdXMsIHR1cm5pbmcg
dGhpcyBpbnRvIGEgb25lLWxpbmVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1
ZTo6aXNDYWNoZWFibGUgY29uc3QpOiBVc2UgaGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjprbm93blRvQmVPcGFxdWUgY29uc3Qp
OiBSZW1vdmVkIHVubm5lY2Vzc2FyeQorICAgICAgICBjaGVja2luZyB0aGUgY29sb3IgYm90aCBi
ZWZvcmUgYW5kIGFmdGVyIHdoZW4gYSBjb2xvciBmaWx0ZXIgaXMgaW52b2x2ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjplcXVhbHMgY29uc3QpOiBBZGRlZC4gU2hhcmVk
IGJ5IGFsbCB0aGUgZXF1YWxzCisgICAgICAgIGZ1bmN0aW9ucyBmb3IgZGVyaXZlZCBjbGFzc2Vz
LgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kR3JhZGllbnRTdG9wcyk6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgdG8gQ1NTR3JhZGllbnRDb2xvclN0b3AuCisgICAgICAgIChXZWJDb3JlOjphcHBlbmRT
cGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dCk6IEFkZGVkIHRlbXBsYXRlIGhlbHBlcgor
ICAgICAgICBmb3Igd3JpdGluZyB0d28gb3B0aW9uYWwgQ1NTIHZhbHVlcyB3aXRoIGEgc3BhY2Ug
YmV0d2Vlbi4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQ29sb3JTdG9wKTogRGl0dG8uIEFsc28g
Y29udmVydGVkIHRvIG5vbi1tZW1iZXIgZnVuY3Rpb24sCisgICAgICAgIHJlbW92ZWQgdW5uZWVk
ZWQgaXNNaWRwb2ludCBjaGVjaywgdXNlIGFwcGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQ
dHJUZXh0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3VzdG9t
Q1NTVGV4dCBjb25zdCk6IENhbGwgZnVuY3Rpb24KKyAgICAgICAgbWVtYmVycyBzbyB3ZSBkb24n
dCBoYXZlIHRvIGV4cG9zZSBDU1NHcmFkaWVudFZhbHVlIGRhdGEgbWVtYmVycyBhcworICAgICAg
ICBwcm90ZWN0ZWQgdGhpbmdzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IGRlcml2ZWQgY2xhc3Nl
cy4gU29tZSBvdGhlcgorICAgICAgICBzbWFsbCByZWZhY3RvcmluZywgc3VjaCBhcyBnZXR0aW5n
IHJpZCBvZiBleHRyYSBib29sZWFuIHdyb3RlRmlyc3RTdG9wLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBVcGRhdGVkIHRvIHVzZQor
ICAgICAgICBmdW5jdGlvbiBtZW1iZXJzIGluc3RlYWQgb2YgcHJvdGVjdGVkIGRhdGEgbWVtYmVy
cy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0xpbmVhckdyYWRpZW50VmFsdWU6OmVxdWFscyBjb25z
dCk6IENvbXBhcmUgYWxsIGRhdGEKKyAgICAgICAgbWVtYmVycyBhbmQgdXNlIENTU0dyYWRpZW50
VmFsdWU6OmVxdWFscywgbWFrZXMgdGhpcyBhIDEtbGluZXIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0IGNvbnN0KTogQ2FsbCBmdW5jdGlv
bgorICAgICAgICBtZW1iZXJzIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgdXNlIGFwcGVuZFNwYWNl
U2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUmFkaWFs
R3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmVxdWFscyBjb25zdCk6IENvbXBhcmUgYWxsIGRhdGEK
KyAgICAgICAgbWVtYmVycyBhbmQgdXNlIENTU0dyYWRpZW50VmFsdWU6OmVxdWFscy4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6
IENhbGwgZnVuY3Rpb24KKyAgICAgICAgbWVtYmVycyBhcyBkZXNjcmliZWQgYWJvdmUgYW5kIHVz
ZSBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6ZXF1YWxzIGNvbnN0KTogQ29tcGFy
ZSBhbGwgZGF0YQorICAgICAgICBtZW1iZXJzIGFuZCB1c2UgQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1
YWxzLCBtYWtlcyB0aGlzIGEgMS1saW5lci4KKworICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZh
bHVlLmg6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25z
LgorICAgICAgICBSZW5hbWVkIENTU0dyYWRpZW50Q29sb3JTdG9wIGRhdGEgbWVtYmVycyB0byBu
b3QgdXNlIG1fIHByZWZpeCBzaW5jZSB0aGlzIGlzCisgICAgICAgIGEgc3RydWN0IHdpdGggcHVi
bGljIGRhdGEgbWVtYmVycywgYW5kIFdlYktpdCBzdHlsZSBzYXlzIG5vdCB0byBkbyB0aGF0IGhl
cmUuCisgICAgICAgIFJlbW92ZWQgbV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50IGFuZCBpc01p
ZHBvaW50IGZyb20gQ1NTR3JhZGllbnRDb2xvclN0b3AsCisgICAgICAgIG1fY29sb3JJc0Rlcml2
ZWRGcm9tRWxlbWVudCBpcyBub3cgc3RvcmVkIGluIHRoZSBncmFkaWVudCwgbm90IHRoZSBjb2xv
ciBzdG9wLAorICAgICAgICBhbmQgbWlkcG9pbnRzIGFyZSBhbnkgY29sb3Igc3RvcCB3aXRoIG51
bGwgY29sb3IuIFJlcGxhY2VkIHRoZQorICAgICAgICBDU1NHcmFkaWVudFZhbHVlOjpzdG9wQ291
bnQgZnVuY3Rpb24sIHdoaWNoIG1peGVkIHNpemVfdCBhbmQgdW5zaWduZWQgdHlwZXMsCisgICAg
ICAgIHdpdGggYSBoYXNUd29TdG9wcyBmdW5jdGlvbiwgd2hpY2ggaXMgYWxsIHRoZSBjYWxsZXIg
bmVlZHMuIENvbnZlcnRlZCB0aGUKKyAgICAgICAgaXNGaXhlZFNpemUsIGZpeGVkU2l6ZSwgaXNQ
ZW5kaW5nLCBhbmQgbG9hZFN1YmltYWdlcyBpbnRvIHN0YXRpYyBtZW1iZXIKKyAgICAgICAgZnVu
Y3Rpb25zOiB0aGV5IGRvbid0IGRvIGFueSB3b3JrIGFuZCBzbyBkb24ndCBuZWVkIGFuIGluc3Rh
bmNlLiBSZW1vdmVkCisgICAgICAgIHRoZSB1bm5lZWRlZCBncmFkaWVudCB0eXBlIGFyZ3VtZW50
IHRvIHRoZSBjbG9uaW5nIGNvbnN0cnVjdG9ycy4gUmVtb3ZlZAorICAgICAgICBtX3N0b3BzU29y
dGVkIGFuZCBhZGRlZCBtX2hhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50IGFuZAorICAgICAgICBo
YXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudC4gQWRkZWQgZ2V0dGVyIGZ1bmN0aW9ucyB0aGF0IGFy
ZSBwcm90ZWN0ZWQgc28KKyAgICAgICAgdGhlIGRhdGEgbWVtYmVycyB0aGVtc2VsdmVzIGNhbiBi
ZSBwcml2YXRlLiBSZW1vdmVkIHNvcnRTdG9wc0lmTmVlZGVkCisgICAgICAgIGFuZCB3cml0ZUNv
bG9yU3RvcC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcCk6CisgICAgICAgIFVwZGF0ZWQgZm9yIENTU0dy
YWRpZW50Q29sb3JTdG9wIG1lbWJlciByZW5hbWluZy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudCk6IFVzZQorICAg
ICAgICBtb3JlIFdURk1vdmUgdG8gc2F2ZSBhIGxpdHRsZSBiaXQgb2YgcmVmZXJlbmNlIGNvdW50
IGNodXJuOyBpbiBzb21lIGNhc2VzCisgICAgICAgIHRoYXQgbWVhbnMgbW92aW5nIHRoZSBzZXR0
ZXIgY2FsbHMgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gYWZ0ZXIgYWxsCisgICAgICAgIHRo
ZSBlcnJvciBjaGVja2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6IERpdHRvLgorICAgICAgICBSZW1vdmVk
IGNvZGUgdG8gc2V0IGlzTWlkcG9pbnQgYW5kIHRoZSBGSVhNRS1ORVdQQVJTRVIgY29tbWVudCB0
aGF0IHNhaWQKKyAgICAgICAgaXQgY291bGQgYmUgcmVtb3ZlZC4gVXNlZCBsYW1iZGEgdG8gY3V0
IGRvd24gb24gcmVwZWF0ZWQgY29kZS4gQ2hhbmdlZAorICAgICAgICBwYXJzaW5nIG9mIHN0b3Bz
IHdpdGggYSBzZWNvbmQgcG9zaXRpb24gdG8gcmVwZWF0IHRoZSBjb2xvciBpbnN0ZWFkIG9mCisg
ICAgICAgIHJlbHlpbmcgb24gbGF0ZXIgY29tcHV0YXRpb24gdG8gcmVwZWF0IGl0OyB0aGlzIGlz
IHJlcXVpcmVkIHNvIHdlIGNhbgorICAgICAgICBhbHdheXMgdHJlYXQgYW4gb21pdHRlZCBjb2xv
ciBhcyBhIG1pZHBvaW50LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVSYWRpYWxHcmFkaWVudCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lTGluZWFyR3JhZGllbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbmljR3JhZGllbnQpOiBEaXR0by4KKworICAgICAgICAq
IGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphdXRvRmlsbFN0
cm9uZ1Bhc3N3b3JkTWFza0ltYWdlKTogVXBkYXRlZCBmb3IgdGhlIHJlbmFtZWQKKyAgICAgICAg
Q1NTR3JhZGllbnRDb2xvclN0b3AgbWVtYmVycywgYWRkZWQgYSBtaXNzaW5nIGNhbGwgdG8gZG9u
ZUFkZGluZ1N0b3BzLAorICAgICAgICBhbmQgdXNlIHNvbWUgV1RGTW92ZSB0byBjdXQgZG93biBv
biByZWZlcmVuY2UgY291bnQgY2h1cm4uCisKIDIwMjAtMDMtMDMgIEthdGUgQ2hlbmV5ICA8a2F0
aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hlY2sgZm9yIG5hdmlnYXRpb24g
dG8gYXBwLWJvdW5kIGRvbWFpbiBkdXJpbmcgc2NyaXB0IGV2YWx1YXRpb24KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCAwMTRhNTVjYmY0M2M1MTVmMjZkYTYzNzc1
ODcwZTdiY2FjMTAyZWQ0Li45Y2QyMzhmMTBjMGE1YWVjOTZkYjMxY2UzZjNmM2FlYjc2MTI2YzAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC02MywzNCArNjMs
MTYgQEAgUmVmUHRyPEltYWdlPiBDU1NHcmFkaWVudFZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJgogICAgIH0KICAgICBhdXRvIG5ld0ltYWdlID0g
R3JhZGllbnRJbWFnZTo6Y3JlYXRlKGNyZWF0ZUdyYWRpZW50KCp0aGlzLCByZW5kZXJlciwgc2l6
ZSksIHNpemUpOwogICAgIGlmIChjYWNoZWFibGUpCi0gICAgICAgIHNhdmVDYWNoZWRJbWFnZUZv
clNpemUoc2l6ZSwgbmV3SW1hZ2UuZ2V0KCkpOworICAgICAgICBzYXZlQ2FjaGVkSW1hZ2VGb3JT
aXplKHNpemUsIG5ld0ltYWdlKTsKICAgICByZXR1cm4gbmV3SW1hZ2U7CiB9CiAKLS8vIFNob3Vs
ZCBvbmx5IGV2ZXIgYmUgY2FsbGVkIGZvciBkZXByZWNhdGVkIGdyYWRpZW50cy4KLXN0YXRpYyBp
bmxpbmUgYm9vbCBjb21wYXJlU3RvcHMoY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIGEsIGNv
bnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBiKQotewotICAgIGRvdWJsZSBhVmFsID0gYS5tX3Bv
c2l0aW9uLT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgZG91Ymxl
IGJWYWwgPSBiLm1fcG9zaXRpb24tPmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVNQkVS
KTsKLQotICAgIHJldHVybiBhVmFsIDwgYlZhbDsKLX0KLQotdm9pZCBDU1NHcmFkaWVudFZhbHVl
Ojpzb3J0U3RvcHNJZk5lZWRlZCgpCi17Ci0gICAgQVNTRVJUKG1fZ3JhZGllbnRUeXBlID09IENT
U0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCB8fCBtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQpOwotICAgIGlmICghbV9zdG9wc1NvcnRlZCkgewotICAgICAgICBp
ZiAobV9zdG9wcy5zaXplKCkpCi0gICAgICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fc3RvcHMu
YmVnaW4oKSwgbV9zdG9wcy5lbmQoKSwgY29tcGFyZVN0b3BzKTsKLSAgICAgICAgbV9zdG9wc1Nv
cnRlZCA9IHRydWU7Ci0gICAgfQotfQotCiBzdHJ1Y3QgR3JhZGllbnRTdG9wIHsKICAgICBDb2xv
ciBjb2xvcjsKLSAgICBmbG9hdCBvZmZzZXQgeyAwIH07Ci0gICAgYm9vbCBzcGVjaWZpZWQgeyBm
YWxzZSB9OwotICAgIGJvb2wgaXNNaWRwb2ludCB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Zmxv
YXQ+IG9mZnNldDsKKworICAgIGJvb2wgaXNTcGVjaWZpZWQoKSBjb25zdCB7IHJldHVybiBvZmZz
ZXQuaGFzVmFsdWUoKTsgfQorICAgIGJvb2wgaXNNaWRwb2ludCgpIGNvbnN0IHsgcmV0dXJuICFj
b2xvci5pc1ZhbGlkKCk7IH0KIH07CiAKIHN0YXRpYyBpbmxpbmUgUmVmPENTU0dyYWRpZW50VmFs
dWU+IGNsb25lKENTU0dyYWRpZW50VmFsdWUmIHZhbHVlKQpAQCAtMTAzLDM1ICs4NSwzMSBAQCBz
dGF0aWMgaW5saW5lIFJlZjxDU1NHcmFkaWVudFZhbHVlPiBjbG9uZShDU1NHcmFkaWVudFZhbHVl
JiB2YWx1ZSkKICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ29uaWNHcmFkaWVudFZhbHVlPih2YWx1
ZSkuY2xvbmUoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+Ci12b2lkIHJlc29s
dmVTdG9wQ29sb3JzKFZlY3RvcjxDU1NHcmFkaWVudENvbG9yU3RvcCwgMj4mIHN0b3BzLCBGdW5j
dGlvbiYmIGNvbG9yUmVzb2x2ZUZ1bmN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+
IHZvaWQgcmVzb2x2ZVN0b3BDb2xvcnMoVmVjdG9yPENTU0dyYWRpZW50Q29sb3JTdG9wLCAyPiYg
c3RvcHMsIEZ1bmN0aW9uJiYgY29sb3JSZXNvbHZlRnVuY3Rpb24pCiB7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBzdG9wID0g
c3RvcHNbaV07Ci0gICAgICAgIGlmIChzdG9wLmlzTWlkcG9pbnQpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKHN0b3AubV9jb2xvcikKLSAgICAgICAgICAgIHN0b3AubV9yZXNv
bHZlZENvbG9yID0gY29sb3JSZXNvbHZlRnVuY3Rpb24oKnN0b3AubV9jb2xvcik7Ci0gICAgICAg
IGVsc2UgaWYgKGkpIHsKLSAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzU3RvcCA9IHN0b3BzW2kg
LSAxXTsKLSAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c1N0b3AubV9jb2xvcik7Ci0gICAgICAg
ICAgICBzdG9wLm1fY29sb3IgPSBwcmV2aW91c1N0b3AubV9jb2xvcjsKLSAgICAgICAgICAgIHN0
b3AubV9yZXNvbHZlZENvbG9yID0gcHJldmlvdXNTdG9wLm1fcmVzb2x2ZWRDb2xvcjsKLSAgICAg
ICAgfQorICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKSB7CisgICAgICAgIGlmIChzdG9wLmNv
bG9yKQorICAgICAgICAgICAgc3RvcC5yZXNvbHZlZENvbG9yID0gY29sb3JSZXNvbHZlRnVuY3Rp
b24oKnN0b3AuY29sb3IpOwogICAgIH0KIH0KIAotUmVmPENTU0dyYWRpZW50VmFsdWU+IENTU0dy
YWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSkKK2Jvb2wgQ1NTR3JhZGllbnRWYWx1ZTo6aGFzQ29sb3JEZXJpdmVk
RnJvbUVsZW1lbnQoKSBjb25zdAogewotICAgIGJvb2wgY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVu
dCA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgaWYg
KCFzdG9wLmlzTWlkcG9pbnQgJiYgc3RvcC5tX2NvbG9yICYmIFN0eWxlOjpCdWlsZGVyU3RhdGU6
OmlzQ29sb3JGcm9tUHJpbWl0aXZlVmFsdWVEZXJpdmVkRnJvbUVsZW1lbnQoKnN0b3AubV9jb2xv
cikpIHsKLSAgICAgICAgICAgIHN0b3AubV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1
ZTsKLSAgICAgICAgICAgIGNvbG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7CisgICAgaWYgKCFtX2hhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50KSB7Cisg
ICAgICAgIG1faGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgZm9y
IChhdXRvJiBzdG9wIDogbV9zdG9wcykgeworICAgICAgICAgICAgaWYgKHN0b3AuY29sb3IgJiYg
U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6aXNDb2xvckZyb21QcmltaXRpdmVWYWx1ZURlcml2ZWRGcm9t
RWxlbWVudCgqc3RvcC5jb2xvcikpIHsKKyAgICAgICAgICAgICAgICBtX2hhc0NvbG9yRGVyaXZl
ZEZyb21FbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IGNvbG9ySXNEZXJpdmVkRnJv
bUVsZW1lbnQgPyBjbG9uZSgqdGhpcykgOiBtYWtlUmVmKCp0aGlzKTsKKyAgICByZXR1cm4gKm1f
aGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQ7Cit9CisKK1JlZjxDU1NHcmFkaWVudFZhbHVlPiBD
U1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUpCit7CisgICAgYXV0byByZXN1bHQgPSBoYXNDb2xvckRlcml2
ZWRGcm9tRWxlbWVudCgpID8gY2xvbmUoKnRoaXMpIDogbWFrZVJlZigqdGhpcyk7CiAgICAgcmVz
b2x2ZVN0b3BDb2xvcnMocmVzdWx0LT5tX3N0b3BzLCBbJl0oY29uc3QgQ1NTUHJpbWl0aXZlVmFs
dWUmIGNvbG9yVmFsdWUpIHsKICAgICAgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5jb2xvckZyb21Q
cmltaXRpdmVWYWx1ZShjb2xvclZhbHVlKTsKICAgICB9KTsKQEAgLTE1Miw3ICsxMzAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIDogbV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KLSAgICAKKwogICAg
IGZsb2F0IGdyYWRpZW50TGVuZ3RoKCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8gZ3JhZGll
bnRTaXplID0gbV9kYXRhLnBvaW50MCAtIG1fZGF0YS5wb2ludDE7CkBAIC0xNjIsMTMgKzE0MCwx
MyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG5vcm1hbGl6ZVN0b3BzQW5kRW5kcG9pbnRzT3V0c2lk
ZVJhbmdlKFZlY3RvcjxHcmFkaWVudFN0b3A+JiBzdG9wcykKICAgICB7Ci0gICAgICAgIGZsb2F0
IGZpcnN0T2Zmc2V0ID0gc3RvcHMuZmlyc3QoKS5vZmZzZXQ7Ci0gICAgICAgIGZsb2F0IGxhc3RP
ZmZzZXQgPSBzdG9wcy5sYXN0KCkub2Zmc2V0OworICAgICAgICBmbG9hdCBmaXJzdE9mZnNldCA9
ICpzdG9wcy5maXJzdCgpLm9mZnNldDsKKyAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9ICpzdG9w
cy5sYXN0KCkub2Zmc2V0OwogICAgICAgICBpZiAoZmlyc3RPZmZzZXQgIT0gbGFzdE9mZnNldCkg
ewogICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBsYXN0T2Zmc2V0IC0gZmlyc3RPZmZzZXQ7CiAK
ICAgICAgICAgICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQotICAgICAgICAgICAgICAgIHN0
b3Aub2Zmc2V0ID0gKHN0b3Aub2Zmc2V0IC0gZmlyc3RPZmZzZXQpIC8gc2NhbGU7CisgICAgICAg
ICAgICAgICAgc3RvcC5vZmZzZXQgPSAoKnN0b3Aub2Zmc2V0IC0gZmlyc3RPZmZzZXQpIC8gc2Nh
bGU7CiAKICAgICAgICAgICAgIGF1dG8gcDAgPSBtX2RhdGEucG9pbnQwOwogICAgICAgICAgICAg
YXV0byBwMSA9IG1fZGF0YS5wb2ludDE7CkBAIC0yMDksMjIgKzE4NywyMiBAQCBwdWJsaWM6CiAK
ICAgICAgICAgLy8gUmF0aGVyIHRoYW4gc2NhbGluZyB0aGUgcG9pbnRzIDwgMCwgd2UgdHJ1bmNh
dGUgdGhlbSwgc28gb25seSBzY2FsZSBhY2NvcmRpbmcgdG8gdGhlIGxhcmdlc3QgcG9pbnQuCiAg
ICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gMDsKLSAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9
IHN0b3BzLmxhc3QoKS5vZmZzZXQ7CisgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSAqc3RvcHMu
bGFzdCgpLm9mZnNldDsKICAgICAgICAgZmxvYXQgc2NhbGUgPSBsYXN0T2Zmc2V0IC0gZmlyc3RP
ZmZzZXQ7CiAKICAgICAgICAgLy8gUmVzZXQgcG9pbnRzIGJlbG93IDAgdG8gdGhlIGZpcnN0IHZp
c2libGUgY29sb3IuCiAgICAgICAgIHNpemVfdCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA9IG51
bVN0b3BzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsK
LSAgICAgICAgICAgIGlmIChzdG9wc1tpXS5vZmZzZXQgPj0gMCkgeworICAgICAgICAgICAgaWYg
KCpzdG9wc1tpXS5vZmZzZXQgPj0gMCkgewogICAgICAgICAgICAgICAgIGZpcnN0WmVyb09yR3Jl
YXRlckluZGV4ID0gaTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA+IDApIHsKLSAg
ICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA8IG51bVN0b3BzICYmIHN0b3Bz
W2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQgPiAwKSB7Ci0gICAgICAgICAgICAgICAg
ZmxvYXQgcHJldk9mZnNldCA9IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0ub2Zm
c2V0OwotICAgICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tmaXJzdFplcm9P
ckdyZWF0ZXJJbmRleF0ub2Zmc2V0OworICAgICAgICAgICAgaWYgKGZpcnN0WmVyb09yR3JlYXRl
ckluZGV4IDwgbnVtU3RvcHMgJiYgKnN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZz
ZXQgPiAwKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgcHJldk9mZnNldCA9ICpzdG9wc1tmaXJz
dFplcm9PckdyZWF0ZXJJbmRleCAtIDFdLm9mZnNldDsKKyAgICAgICAgICAgICAgICBmbG9hdCBu
ZXh0T2Zmc2V0ID0gKnN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQ7CiAKICAg
ICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gLXByZXZPZmZzZXQgLyAo
bmV4dE9mZnNldCAtIHByZXZPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVu
IHdlIGludGVycG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhp
cyBzaG91bGQgZG8gcHJlbXVsdGlwbGljYXRpb24uCkBAIC0yNDMsNyArMjIxLDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAKICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCi0gICAgICAg
ICAgICBzdG9wLm9mZnNldCAvPSBzY2FsZTsKKyAgICAgICAgICAgICpzdG9wLm9mZnNldCAvPSBz
Y2FsZTsKIAogICAgICAgICBtX2RhdGEuc3RhcnRSYWRpdXMgKj0gc2NhbGU7CiAgICAgICAgIG1f
ZGF0YS5lbmRSYWRpdXMgKj0gc2NhbGU7CkBAIC0yNjQsMTYgKzI0MiwxNiBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICBzaXplX3QgZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPSBudW1TdG9w
czsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoc3RvcHNbaV0ub2Zmc2V0ID49IDApIHsKKyAgICAgICAgICAgIGlmICgqc3Rv
cHNbaV0ub2Zmc2V0ID49IDApIHsKICAgICAgICAgICAgICAgICBmaXJzdFplcm9PckdyZWF0ZXJJ
bmRleCA9IGk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPiAwKSB7Ci0gICAgICAg
ICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPCBudW1TdG9wcyAmJiBzdG9wc1tmaXJz
dFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0ID4gMCkgewotICAgICAgICAgICAgICAgIGZsb2F0
IHByZXZPZmZzZXQgPSBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleCAtIDFdLm9mZnNldDsK
LSAgICAgICAgICAgICAgICBmbG9hdCBuZXh0T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVh
dGVySW5kZXhdLm9mZnNldDsKKyAgICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRl
eCA8IG51bVN0b3BzICYmICpzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0ID4g
MCkgeworICAgICAgICAgICAgICAgIGZsb2F0IHByZXZPZmZzZXQgPSAqc3RvcHNbZmlyc3RaZXJv
T3JHcmVhdGVySW5kZXggLSAxXS5vZmZzZXQ7CisgICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9m
ZnNldCA9ICpzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0OwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGZsb2F0IGludGVyU3RvcFByb3BvcnRpb24gPSAtcHJl
dk9mZnNldCAvIChuZXh0T2Zmc2V0IC0gcHJldk9mZnNldCk7CiAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IHdoZW4gd2UgaW50ZXJwb2xhdGUgZ3JhZGllbnRzIHVzaW5nIHByZW11bHRpcGxpZWQg
Y29sb3JzLCB0aGlzIHNob3VsZCBkbyBwcmVtdWx0aXBsaWNhdGlvbi4KQEAgLTI5MywxNiArMjcx
LDE2IEBAIHB1YmxpYzoKIAogICAgICAgICBzaXplX3QgbGFzdE9uZU9yTGVzc0luZGV4ID0gbnVt
U3RvcHM7CiAgICAgICAgIGZvciAoaW50IGkgPSBudW1TdG9wcyAtIDE7IGkgPj0gMDsgLS1pKSB7
Ci0gICAgICAgICAgICBpZiAoc3RvcHNbaV0ub2Zmc2V0IDw9IDEpIHsKKyAgICAgICAgICAgIGlm
ICgqc3RvcHNbaV0ub2Zmc2V0IDw9IDEpIHsKICAgICAgICAgICAgICAgICBsYXN0T25lT3JMZXNz
SW5kZXggPSBpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAobGFzdE9uZU9yTGVzc0luZGV4IDwgbnVtU3RvcHMg
LSAxKSB7Ci0gICAgICAgICAgICBpZiAobGFzdE9uZU9yTGVzc0luZGV4IDwgbnVtU3RvcHMgJiYg
c3RvcHNbbGFzdE9uZU9yTGVzc0luZGV4XS5vZmZzZXQgPCAxKSB7Ci0gICAgICAgICAgICAgICAg
ZmxvYXQgcHJldk9mZnNldCA9IHN0b3BzW2xhc3RPbmVPckxlc3NJbmRleF0ub2Zmc2V0OwotICAg
ICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tsYXN0T25lT3JMZXNzSW5kZXgg
KyAxXS5vZmZzZXQ7CisgICAgICAgICAgICBpZiAobGFzdE9uZU9yTGVzc0luZGV4IDwgbnVtU3Rv
cHMgJiYgKnN0b3BzW2xhc3RPbmVPckxlc3NJbmRleF0ub2Zmc2V0IDwgMSkgeworICAgICAgICAg
ICAgICAgIGZsb2F0IHByZXZPZmZzZXQgPSAqc3RvcHNbbGFzdE9uZU9yTGVzc0luZGV4XS5vZmZz
ZXQ7CisgICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9mZnNldCA9ICpzdG9wc1tsYXN0T25lT3JM
ZXNzSW5kZXggKyAxXS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ZmxvYXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9ICgxIC0gcHJldk9mZnNldCkgLyAobmV4dE9mZnNl
dCAtIHByZXZPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGludGVy
cG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91bGQg
ZG8gcHJlbXVsdGlwbGljYXRpb24uCkBAIC0zMjYsMjQgKzMwNCwyNiBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBHcmFkaWVudEFkYXB0ZXI+CiBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRp
ZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZW50QWRhcHRlciwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KQogewogICAgIGlmICht
X2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGllbnQgfHwgbV9ncmFkaWVu
dFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KSB7Ci0gICAgICAgIHNvcnRTdG9w
c0lmTmVlZGVkKCk7Ci0KICAgICAgICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciByZXN1bHQ7
CiAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RvcHMuc2l6ZSgpKTsK
IAogICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CiAgICAgICAgICAgICBmbG9h
dCBvZmZzZXQ7Ci0gICAgICAgICAgICBpZiAoc3RvcC5tX3Bvc2l0aW9uLT5pc1BlcmNlbnRhZ2Uo
KSkKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdG9wLm1fcG9zaXRpb24tPmZsb2F0VmFsdWUo
Q1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKSAvIDEwMDsKKyAgICAgICAgICAgIGlmIChzdG9w
LnBvc2l0aW9uLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdG9w
LnBvc2l0aW9uLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSkgLyAxMDA7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcC5tX3Bvc2l0
aW9uLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAg
ICBvZmZzZXQgPSBzdG9wLnBvc2l0aW9uLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKTsKIAotICAgICAgICAgICAgQ29sb3IgY29sb3IgPSBzdG9wLm1fcmVzb2x2ZWRDb2xvcjsK
KyAgICAgICAgICAgIENvbG9yIGNvbG9yID0gc3RvcC5yZXNvbHZlZENvbG9yOwogICAgICAgICAg
ICAgaWYgKHN0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKICAgICAgICAgICAgICAgICBzdHls
ZS5hcHBsZUNvbG9yRmlsdGVyKCkudHJhbnNmb3JtQ29sb3IoY29sb3IpOwogICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IG9mZnNldCwgY29sb3IgfSk7CiAgICAgICAgIH0KIAor
ICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIFtd
IChjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBhLCBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9w
JiBiKSB7CisgICAgICAgICAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9mZnNldDsKKyAgICAgICAg
fSk7CisKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTM1NSwxNiArMzM1LDE0
IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0
b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1TdG9wczsgKytpKSB7CiAgICAgICAgIGF1dG8mIHN0b3AgPSBtX3N0b3BzW2ldOwogCi0gICAg
ICAgIHN0b3BzW2ldLmlzTWlkcG9pbnQgPSBzdG9wLmlzTWlkcG9pbnQ7Ci0KLSAgICAgICAgQ29s
b3IgY29sb3IgPSBzdG9wLm1fcmVzb2x2ZWRDb2xvcjsKKyAgICAgICAgQ29sb3IgY29sb3IgPSBz
dG9wLnJlc29sdmVkQ29sb3I7CiAgICAgICAgIGlmIChzdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVy
KCkpCiAgICAgICAgICAgICBzdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkudHJhbnNmb3JtQ29sb3Io
Y29sb3IpOwogCiAgICAgICAgIHN0b3BzW2ldLmNvbG9yID0gY29sb3I7CiAKLSAgICAgICAgaWYg
KHN0b3AubV9wb3NpdGlvbikgewotICAgICAgICAgICAgYXV0byYgcG9zaXRpb25WYWx1ZSA9ICpz
dG9wLm1fcG9zaXRpb247CisgICAgICAgIGlmIChzdG9wLnBvc2l0aW9uKSB7CisgICAgICAgICAg
ICBhdXRvJiBwb3NpdGlvblZhbHVlID0gKnN0b3AucG9zaXRpb247CiAgICAgICAgICAgICBpZiAo
cG9zaXRpb25WYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgICAgICBzdG9wc1tpXS5v
ZmZzZXQgPSBwb3NpdGlvblZhbHVlLmZsb2F0VmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5U
QUdFKSAvIDEwMDsKICAgICAgICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uVmFsdWUuaXNMZW5ndGgo
KSB8fCBwb3NpdGlvblZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkgfHwgcG9zaXRp
b25WYWx1ZS5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSB7CkBAIC0zODIsMzUg
KzM2MCwzMSBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNv
bXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IDA7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdG9wc1tpXS5zcGVjaWZpZWQgPSB0cnVlOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGNvbG9yLXN0b3AgZG9l
cyBub3QgaGF2ZSBhIHBvc2l0aW9uLCBpdHMgcG9zaXRpb24gZGVmYXVsdHMgdG8gMCUuCiAgICAg
ICAgICAgICAvLyBJZiB0aGUgbGFzdCBjb2xvci1zdG9wIGRvZXMgbm90IGhhdmUgYSBwb3NpdGlv
biwgaXRzIHBvc2l0aW9uIGRlZmF1bHRzIHRvIDEwMCUuCi0gICAgICAgICAgICBpZiAoIWkpIHsK
KyAgICAgICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAw
OwotICAgICAgICAgICAgICAgIHN0b3BzW2ldLnNwZWNpZmllZCA9IHRydWU7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKG51bVN0b3BzID4gMSAmJiBpID09IG51bVN0b3BzIC0gMSkgeworICAgICAg
ICAgICAgZWxzZSBpZiAobnVtU3RvcHMgPiAxICYmIGkgPT0gbnVtU3RvcHMgLSAxKQogICAgICAg
ICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IDE7Ci0gICAgICAgICAgICAgICAgc3RvcHNbaV0u
c3BlY2lmaWVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8v
IElmIGEgY29sb3Itc3RvcCBoYXMgYSBwb3NpdGlvbiB0aGF0IGlzIGxlc3MgdGhhbiB0aGUgc3Bl
Y2lmaWVkIHBvc2l0aW9uIG9mIGFueQogICAgICAgICAvLyBjb2xvci1zdG9wIGJlZm9yZSBpdCBp
biB0aGUgbGlzdCwgaXRzIHBvc2l0aW9uIGlzIGNoYW5nZWQgdG8gYmUgZXF1YWwgdG8gdGhlCiAg
ICAgICAgIC8vIGxhcmdlc3Qgc3BlY2lmaWVkIHBvc2l0aW9uIG9mIGFueSBjb2xvci1zdG9wIGJl
Zm9yZSBpdC4KLSAgICAgICAgaWYgKHN0b3BzW2ldLnNwZWNpZmllZCAmJiBpID4gMCkgeworICAg
ICAgICBpZiAoc3RvcHNbaV0uaXNTcGVjaWZpZWQoKSAmJiBpID4gMCkgewogICAgICAgICAgICAg
c2l6ZV90IHByZXZTcGVjaWZpZWRJbmRleDsKICAgICAgICAgICAgIGZvciAocHJldlNwZWNpZmll
ZEluZGV4ID0gaSAtIDE7IHByZXZTcGVjaWZpZWRJbmRleDsgLS1wcmV2U3BlY2lmaWVkSW5kZXgp
IHsKLSAgICAgICAgICAgICAgICBpZiAoc3RvcHNbcHJldlNwZWNpZmllZEluZGV4XS5zcGVjaWZp
ZWQpCisgICAgICAgICAgICAgICAgaWYgKHN0b3BzW3ByZXZTcGVjaWZpZWRJbmRleF0uaXNTcGVj
aWZpZWQoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmIChzdG9wc1tpXS5vZmZzZXQgPCBzdG9wc1twcmV2U3BlY2lmaWVkSW5kZXhd
Lm9mZnNldCkKKyAgICAgICAgICAgIGlmICgqc3RvcHNbaV0ub2Zmc2V0IDwgKnN0b3BzW3ByZXZT
cGVjaWZpZWRJbmRleF0ub2Zmc2V0KQogICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9
IHN0b3BzW3ByZXZTcGVjaWZpZWRJbmRleF0ub2Zmc2V0OwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgQVNTRVJUKHN0b3BzWzBdLnNwZWNpZmllZCAmJiBzdG9wc1tudW1TdG9wcyAtIDFdLnNwZWNp
ZmllZCk7CisgICAgQVNTRVJUKHN0b3BzWzBdLmlzU3BlY2lmaWVkKCkgJiYgc3RvcHNbbnVtU3Rv
cHMgLSAxXS5pc1NwZWNpZmllZCgpKTsKIAogICAgIC8vIElmIGFueSBjb2xvci1zdG9wIHN0aWxs
IGRvZXMgbm90IGhhdmUgYSBwb3NpdGlvbiwgdGhlbiwgZm9yIGVhY2ggcnVuIG9mIGFkamFjZW50
CiAgICAgLy8gY29sb3Itc3RvcHMgd2l0aG91dCBwb3NpdGlvbnMsIHNldCB0aGVpciBwb3NpdGlv
bnMgc28gdGhhdCB0aGV5IGFyZSBldmVubHkgc3BhY2VkCkBAIC00MjAsMTUgKzM5NCwxNSBAQCBH
cmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhH
cmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgICAgICBib29sIGluVW5zcGVjaWZpZWRSdW4gPSBm
YWxzZTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsK
LSAgICAgICAgICAgIGlmICghc3RvcHNbaV0uc3BlY2lmaWVkICYmICFpblVuc3BlY2lmaWVkUnVu
KSB7CisgICAgICAgICAgICBpZiAoIXN0b3BzW2ldLmlzU3BlY2lmaWVkKCkgJiYgIWluVW5zcGVj
aWZpZWRSdW4pIHsKICAgICAgICAgICAgICAgICB1bnNwZWNpZmllZFJ1blN0YXJ0ID0gaTsKICAg
ICAgICAgICAgICAgICBpblVuc3BlY2lmaWVkUnVuID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc3RvcHNbaV0uc3BlY2lmaWVkICYmIGluVW5zcGVjaWZpZWRSdW4pIHsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc3RvcHNbaV0uaXNTcGVjaWZpZWQoKSAmJiBpblVuc3BlY2lmaWVkUnVu
KSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IHVuc3BlY2lmaWVkUnVuRW5kID0gaTsKIAogICAg
ICAgICAgICAgICAgIGlmICh1bnNwZWNpZmllZFJ1blN0YXJ0IDwgdW5zcGVjaWZpZWRSdW5FbmQp
IHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgbGFzdFNwZWNpZmllZE9mZnNldCA9IHN0b3Bz
W3Vuc3BlY2lmaWVkUnVuU3RhcnQgLSAxXS5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGZs
b2F0IG5leHRTcGVjaWZpZWRPZmZzZXQgPSBzdG9wc1t1bnNwZWNpZmllZFJ1bkVuZF0ub2Zmc2V0
OworICAgICAgICAgICAgICAgICAgICBmbG9hdCBsYXN0U3BlY2lmaWVkT2Zmc2V0ID0gKnN0b3Bz
W3Vuc3BlY2lmaWVkUnVuU3RhcnQgLSAxXS5vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGZs
b2F0IG5leHRTcGVjaWZpZWRPZmZzZXQgPSAqc3RvcHNbdW5zcGVjaWZpZWRSdW5FbmRdLm9mZnNl
dDsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGVsdGEgPSAobmV4dFNwZWNpZmllZE9mZnNl
dCAtIGxhc3RTcGVjaWZpZWRPZmZzZXQpIC8gKHVuc3BlY2lmaWVkUnVuRW5kIC0gdW5zcGVjaWZp
ZWRSdW5TdGFydCArIDEpOwogCiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSB1
bnNwZWNpZmllZFJ1blN0YXJ0OyBqIDwgdW5zcGVjaWZpZWRSdW5FbmQ7ICsraikKQEAgLTQ1NCw3
ICs0MjgsNyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNv
bXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgIC8vIE1pZHBvaW50cyB0aGF0
IGNvaW5jaWRlIHdpdGggY29sb3Igc3RvcHMgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5IHNpbmNlIHRo
ZXkgZG9uJ3QgcmVxdWlyZQogICAgIC8vIGV4dHJhIHN0b3BzIGFuZCBnZW5lcmF0ZSBoYXJkIGxp
bmVzLgogICAgIGZvciAoc2l6ZV90IHggPSAxOyB4IDwgc3RvcHMuc2l6ZSgpIC0gMTspIHsKLSAg
ICAgICAgaWYgKCFzdG9wc1t4XS5pc01pZHBvaW50KSB7CisgICAgICAgIGlmICghc3RvcHNbeF0u
aXNNaWRwb2ludCgpKSB7CiAgICAgICAgICAgICArK3g7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQpAQCAtNDY0LDkgKzQzOCw5IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3Ig
Q1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAg
ICAgICAgIENvbG9yIGNvbG9yMSA9IHN0b3BzW3ggLSAxXS5jb2xvcjsKICAgICAgICAgQ29sb3Ig
Y29sb3IyID0gc3RvcHNbeCArIDFdLmNvbG9yOwogICAgICAgICAvLyBMaWtld2lzZSBmaW5kIHRo
ZSBwb3NpdGlvbiBvZiBwcmV2aW91cyBhbmQgbmV4dCBjb2xvciBzdG9wLgotICAgICAgICBmbG9h
dCBvZmZzZXQxID0gc3RvcHNbeCAtIDFdLm9mZnNldDsKLSAgICAgICAgZmxvYXQgb2Zmc2V0MiA9
IHN0b3BzW3ggKyAxXS5vZmZzZXQ7Ci0gICAgICAgIGZsb2F0IG9mZnNldCA9IHN0b3BzW3hdLm9m
ZnNldDsKKyAgICAgICAgZmxvYXQgb2Zmc2V0MSA9ICpzdG9wc1t4IC0gMV0ub2Zmc2V0OworICAg
ICAgICBmbG9hdCBvZmZzZXQyID0gKnN0b3BzW3ggKyAxXS5vZmZzZXQ7CisgICAgICAgIGZsb2F0
IG9mZnNldCA9ICpzdG9wc1t4XS5vZmZzZXQ7CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgZXZlcnl0
aGluZyBjb2luY2lkZXMgb3IgdGhlIG1pZHBvaW50IGlzIGV4YWN0bHkgaW4gdGhlIG1pZGRsZS4K
ICAgICAgICAgLy8gSWYgc28sIGlnbm9yZSB0aGUgbWlkcG9pbnQuCkBAIC00NzksNyArNDUzLDYg
QEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3Rv
cHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUKICAgICAgICAgaWYgKG9mZnNldDEgPT0gb2Zmc2V0
KSB7CiAgICAgICAgICAgICAvLyBNb3JwaCB0aGUgbWlkcG9pbnQgdG8gYSByZWd1bGFyIHN0b3Ag
d2l0aCB0aGUgY29sb3Igb2YgdGhlIG5leHQgY29sb3Igc3RvcC4KICAgICAgICAgICAgIHN0b3Bz
W3hdLmNvbG9yID0gY29sb3IyOwotICAgICAgICAgICAgc3RvcHNbeF0uaXNNaWRwb2ludCA9IGZh
bHNlOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNDg3LDcgKzQ2MCw2
IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0
b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAgICAgICAgIGlmIChvZmZzZXQyID09IG9mZnNl
dCkgewogICAgICAgICAgICAgLy8gTW9ycGggdGhlIG1pZHBvaW50IHRvIGEgcmVndWxhciBzdG9w
IHdpdGggdGhlIGNvbG9yIG9mIHRoZSBwcmV2aW91cyBjb2xvciBzdG9wLgogICAgICAgICAgICAg
c3RvcHNbeF0uY29sb3IgPSBjb2xvcjE7Ci0gICAgICAgICAgICBzdG9wc1t4XS5pc01pZHBvaW50
ID0gZmFsc2U7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC01MDgsNyAr
NDgwLDcgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21w
dXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUKICAgICAgICAgfQogICAgICAgICAvLyBj
YWxjdWxhdGUgY29sb3JzCiAgICAgICAgIGZvciAoc2l6ZV90IHkgPSAwOyB5IDwgOTsgKyt5KSB7
Ci0gICAgICAgICAgICBmbG9hdCByZWxhdGl2ZU9mZnNldCA9IChuZXdTdG9wc1t5XS5vZmZzZXQg
LSBvZmZzZXQxKSAvIChvZmZzZXQyIC0gb2Zmc2V0MSk7CisgICAgICAgICAgICBmbG9hdCByZWxh
dGl2ZU9mZnNldCA9ICgqbmV3U3RvcHNbeV0ub2Zmc2V0IC0gb2Zmc2V0MSkgLyAob2Zmc2V0MiAt
IG9mZnNldDEpOwogICAgICAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6cG93KHJlbGF0
aXZlT2Zmc2V0LCBzdGQ6OmxvZyguNWYpIC8gc3RkOjpsb2cobWlkcG9pbnQpKTsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXaHkgbm90IHByZW11bHRpcGx5IGhlcmU/CiAgICAgICAgICAgICBuZXdT
dG9wc1t5XS5jb2xvciA9IGJsZW5kKGNvbG9yMSwgY29sb3IyLCBtdWx0aXBsaWVyLCBmYWxzZSAv
KiBkbyBub3QgcHJlbXVsdGlwbHkgKi8pOwpAQCAtNTI3LDcgKzQ5OSw3IEBAIEdyYWRpZW50OjpD
b2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRh
cHRlciYgZ3JhZGllCiAgICAgaWYgKG1fcmVwZWF0aW5nICYmIG51bVN0b3BzID4gMSkgewogICAg
ICAgICAvLyBJZiB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgcG9zaXRpb25zIG9mIHRoZSBmaXJzdCBh
bmQgbGFzdCBjb2xvci1zdG9wcyBpcyAwLAogICAgICAgICAvLyB0aGUgZ3JhZGllbnQgZGVmaW5l
cyBhIHNvbGlkLWNvbG9yIGltYWdlIHdpdGggdGhlIGNvbG9yIG9mIHRoZSBsYXN0IGNvbG9yLXN0
b3AgaW4gdGhlIHJ1bGUuCi0gICAgICAgIGZsb2F0IGdyYWRpZW50UmFuZ2UgPSBzdG9wcy5sYXN0
KCkub2Zmc2V0IC0gc3RvcHMuZmlyc3QoKS5vZmZzZXQ7CisgICAgICAgIGZsb2F0IGdyYWRpZW50
UmFuZ2UgPSAqc3RvcHMubGFzdCgpLm9mZnNldCAtICpzdG9wcy5maXJzdCgpLm9mZnNldDsKICAg
ICAgICAgaWYgKCFncmFkaWVudFJhbmdlKSB7CiAgICAgICAgICAgICBzdG9wcy5maXJzdCgpLm9m
ZnNldCA9IDA7CiAgICAgICAgICAgICBzdG9wcy5maXJzdCgpLmNvbG9yID0gc3RvcHMubGFzdCgp
LmNvbG9yOwpAQCAtNTQwLDcgKzUxMiw3IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NT
R3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAgICAg
ICAgICAgICBzaXplX3Qgb3JpZ2luYWxGaXJzdFN0b3BJbmRleCA9IDA7CiAKICAgICAgICAgICAg
IC8vIFdvcmsgYmFja3dhcmRzIGZyb20gdGhlIGZpcnN0LCBhZGRpbmcgc3RvcHMgdW50aWwgd2Ug
Z2V0IG9uZSBiZWZvcmUgMC4KLSAgICAgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gc3RvcHNb
MF0ub2Zmc2V0OworICAgICAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSAqc3RvcHNbMF0ub2Zm
c2V0OwogICAgICAgICAgICAgaWYgKGZpcnN0T2Zmc2V0ID4gMCkgewogICAgICAgICAgICAgICAg
IGZsb2F0IGN1cnJPZmZzZXQgPSBmaXJzdE9mZnNldDsKICAgICAgICAgICAgICAgICBzaXplX3Qg
c3JjU3RvcE9yZGluYWwgPSBvcmlnaW5hbE51bVN0b3BzIC0gMTsKQEAgLTU1NCwxMyArNTI2LDEz
IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0
b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoc3JjU3RvcE9yZGluYWwpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyT2Zmc2V0IC09IHN0b3BzW29yaWdpbmFsRmlyc3RTdG9wSW5kZXgg
KyBzcmNTdG9wT3JkaW5hbF0ub2Zmc2V0IC0gc3RvcHNbb3JpZ2luYWxGaXJzdFN0b3BJbmRleCAr
IHNyY1N0b3BPcmRpbmFsIC0gMV0ub2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
ck9mZnNldCAtPSAqc3RvcHNbb3JpZ2luYWxGaXJzdFN0b3BJbmRleCArIHNyY1N0b3BPcmRpbmFs
XS5vZmZzZXQgLSAqc3RvcHNbb3JpZ2luYWxGaXJzdFN0b3BJbmRleCArIHNyY1N0b3BPcmRpbmFs
IC0gMV0ub2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBzcmNTdG9wT3JkaW5hbCA9IChzcmNT
dG9wT3JkaW5hbCArIG9yaWdpbmFsTnVtU3RvcHMgLSAxKSAlIG9yaWdpbmFsTnVtU3RvcHM7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBXb3JrIGZv
cndhcmRzIGZyb20gdGhlIGVuZCwgYWRkaW5nIHN0b3BzIHVudGlsIHdlIGdldCBvbmUgYWZ0ZXIg
MS4KLSAgICAgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBzdG9wc1tzdG9wcy5zaXplKCkgLSAx
XS5vZmZzZXQ7CisgICAgICAgICAgICBmbG9hdCBsYXN0T2Zmc2V0ID0gKnN0b3BzW3N0b3BzLnNp
emUoKSAtIDFdLm9mZnNldDsKICAgICAgICAgICAgIGlmIChsYXN0T2Zmc2V0IDwgbWF4RXh0ZW50
KSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgY3Vyck9mZnNldCA9IGxhc3RPZmZzZXQ7CiAgICAg
ICAgICAgICAgICAgc2l6ZV90IHNyY1N0b3BPcmRpbmFsID0gMDsKQEAgLTU3Myw3ICs1NDUsNyBA
QCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9w
cyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyck9m
ZnNldCA+IG1heEV4dGVudCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoc3JjU3RvcE9yZGluYWwgPCBvcmlnaW5hbE51bVN0b3BzIC0gMSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gc3RvcHNbc3JjU3RvcEluZGV4
ICsgMV0ub2Zmc2V0IC0gc3RvcHNbc3JjU3RvcEluZGV4XS5vZmZzZXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyT2Zmc2V0ICs9ICpzdG9wc1tzcmNTdG9wSW5kZXggKyAxXS5vZmZzZXQg
LSAqc3RvcHNbc3JjU3RvcEluZGV4XS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIHNyY1N0
b3BPcmRpbmFsID0gKHNyY1N0b3BPcmRpbmFsICsgMSkgJSBvcmlnaW5hbE51bVN0b3BzOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTU4MSw0NyArNTUzLDQ3IEBAIEdyYWRp
ZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRp
ZW50QWRhcHRlciYgZ3JhZGllCiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGdyYWRpZW50IGdvZXMg
b3V0c2lkZSB0aGUgMC0xIHJhbmdlLCBub3JtYWxpemUgaXQgYnkgbW92aW5nIHRoZSBlbmRwb2lu
dHMsIGFuZCBhZGp1c3RpbmcgdGhlIHN0b3BzLgotICAgIGlmIChzdG9wcy5zaXplKCkgPiAxICYm
IChzdG9wcy5maXJzdCgpLm9mZnNldCA8IDAgfHwgc3RvcHMubGFzdCgpLm9mZnNldCA+IDEpKQor
ICAgIGlmIChzdG9wcy5zaXplKCkgPiAxICYmICgqc3RvcHMuZmlyc3QoKS5vZmZzZXQgPCAwIHx8
ICpzdG9wcy5sYXN0KCkub2Zmc2V0ID4gMSkpCiAgICAgICAgIGdyYWRpZW50QWRhcHRlci5ub3Jt
YWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNpZGVSYW5nZShzdG9wcyk7CiAgICAgCiAgICAgR3Jh
ZGllbnQ6OkNvbG9yU3RvcFZlY3RvciByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc3RvcHMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcykKLSAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9yIH0p
OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgKnN0b3Aub2Zmc2V0LCBzdG9wLmNv
bG9yIH0pOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGZsb2F0IHBvc2l0aW9u
RnJvbVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Ym9vbCBpc0hvcml6b250YWwpCiB7Ci0gICAgaW50IG9yaWdpbiA9IDA7Ci0gICAgaW50IHNpZ24g
PSAxOwotICAgIGludCBlZGdlRGlzdGFuY2UgPSBpc0hvcml6b250YWwgPyBzaXplLndpZHRoKCkg
OiBzaXplLmhlaWdodCgpOwotICAgIAorICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAw
OworCisgICAgZmxvYXQgb3JpZ2luID0gMDsKKyAgICBmbG9hdCBzaWduID0gMTsKKyAgICBmbG9h
dCBlZGdlRGlzdGFuY2UgPSBpc0hvcml6b250YWwgPyBzaXplLndpZHRoKCkgOiBzaXplLmhlaWdo
dCgpOworCiAgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBjZW50ZXIgb2YgdGhlIGdyYWRpZW50IGlz
IGdpdmVuIHJlbGF0aXZlIHRvIGFuIGVkZ2UgaW4gdGhlCiAgICAgLy8gZm9ybSBvZjogWyB0b3Ag
fCBib3R0b20gfCByaWdodCB8IGxlZnQgXSBbIDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IF0uCiAg
ICAgaWYgKHZhbHVlLT5pc1BhaXIoKSkgewogICAgICAgICBDU1NWYWx1ZUlEIG9yaWdpbklEID0g
dmFsdWUtPnBhaXJWYWx1ZSgpLT5maXJzdCgpLT52YWx1ZUlEKCk7Ci0gICAgICAgIHZhbHVlID0g
dmFsdWUtPnBhaXJWYWx1ZSgpLT5zZWNvbmQoKTsKLSAgICAgICAgCiAgICAgICAgIGlmIChvcmln
aW5JRCA9PSBDU1NWYWx1ZVJpZ2h0IHx8IG9yaWdpbklEID09IENTU1ZhbHVlQm90dG9tKSB7CiAg
ICAgICAgICAgICAvLyBGb3IgcmlnaHQvYm90dG9tLCB0aGUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRv
IHRoZSBmYXIgZWRnZS4KICAgICAgICAgICAgIG9yaWdpbiA9IGVkZ2VEaXN0YW5jZTsKICAgICAg
ICAgICAgIHNpZ24gPSAtMTsKICAgICAgICAgfQorICAgICAgICB2YWx1ZSA9IHZhbHVlLT5wYWly
VmFsdWUoKS0+c2Vjb25kKCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHZhbHVlLT5pc051bWJl
cigpKQogICAgICAgICByZXR1cm4gb3JpZ2luICsgc2lnbiAqIHZhbHVlLT5mbG9hdFZhbHVlKCkg
KiBjb252ZXJzaW9uRGF0YS56b29tKCk7Ci0gICAgCisKICAgICBpZiAodmFsdWUtPmlzUGVyY2Vu
dGFnZSgpKQotICAgICAgICByZXR1cm4gb3JpZ2luICsgc2lnbiAqIHZhbHVlLT5mbG9hdFZhbHVl
KCkgLyAxMDAuZiAqIGVkZ2VEaXN0YW5jZTsKKyAgICAgICAgcmV0dXJuIG9yaWdpbiArIHNpZ24g
KiB2YWx1ZS0+ZmxvYXRWYWx1ZSgpIC8gMTAwICogZWRnZURpc3RhbmNlOworCisgICAgaWYgKHZh
bHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQorICAgICAgICByZXR1cm4g
b3JpZ2luICsgc2lnbiAqIHZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25W
YWx1ZShjb252ZXJzaW9uRGF0YSktPmV2YWx1YXRlKGVkZ2VEaXN0YW5jZSk7CiAKLSAgICBpZiAo
dmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsKLSAgICAgICAgUmVm
PENhbGN1bGF0aW9uVmFsdWU+IGNhbGN1bGF0aW9uVmFsdWUgeyB2YWx1ZS0+Y3NzQ2FsY1ZhbHVl
KCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29udmVyc2lvbkRhdGEpIH07Ci0gICAgICAgIHJl
dHVybiBvcmlnaW4gKyBzaWduICogY2FsY3VsYXRpb25WYWx1ZS0+ZXZhbHVhdGUoZWRnZURpc3Rh
bmNlKTsKLSAgICB9Ci0gICAgCiAgICAgc3dpdGNoICh2YWx1ZS0+dmFsdWVJRCgpKSB7CiAgICAg
Y2FzZSBDU1NWYWx1ZVRvcDoKICAgICAgICAgQVNTRVJUKCFpc0hvcml6b250YWwpOwpAQCAtNjMx
LDEwICs2MDMsMTAgQEAgc3RhdGljIGZsb2F0IHBvc2l0aW9uRnJvbVZhbHVlKGNvbnN0IENTU1By
aW1pdGl2ZVZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGgKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgY2FzZSBDU1NWYWx1ZUJvdHRvbToKICAgICAgICAgQVNTRVJUKCFpc0hvcml6b250YWwp
OwotICAgICAgICByZXR1cm4gc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIGVkZ2VEaXN0
YW5jZTsKICAgICBjYXNlIENTU1ZhbHVlUmlnaHQ6CiAgICAgICAgIEFTU0VSVChpc0hvcml6b250
YWwpOwotICAgICAgICByZXR1cm4gc2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gZWRnZURp
c3RhbmNlOwogICAgIGNhc2UgQ1NTVmFsdWVDZW50ZXI6CiAgICAgICAgIHJldHVybiBvcmlnaW4g
KyBzaWduICogLjVmICogZWRnZURpc3RhbmNlOwogICAgIGRlZmF1bHQ6CkBAIC02NDQsMTA3ICs2
MTYsOTggQEAgc3RhdGljIGZsb2F0IHBvc2l0aW9uRnJvbVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2
ZVZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGgKICAgICByZXR1cm4gb3JpZ2luICsgc2ln
biAqIHZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihjb252ZXJzaW9uRGF0YSk7CiB9CiAKLUZs
b2F0UG9pbnQgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZUVuZFBvaW50KENTU1ByaW1pdGl2ZVZh
bHVlKiBob3Jpem9udGFsLCBDU1NQcmltaXRpdmVWYWx1ZSogdmVydGljYWwsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBjb25zdCBGbG9hdFNpemUmIHNp
emUpCisvLyBSZXNvbHZlIHBvaW50cy9yYWRpaSB0byBmcm9udCBlbmQgdmFsdWVzLgorc3RhdGlj
IEZsb2F0UG9pbnQgY29tcHV0ZUVuZFBvaW50KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiBob3Jp
em9udGFsLCBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogdmVydGljYWwsIGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBjb25zdCBGbG9hdFNpemUmIHNpemUp
CiB7Ci0gICAgRmxvYXRQb2ludCByZXN1bHQ7Ci0KLSAgICBpZiAoaG9yaXpvbnRhbCkKLSAgICAg
ICAgcmVzdWx0LnNldFgocG9zaXRpb25Gcm9tVmFsdWUoaG9yaXpvbnRhbCwgY29udmVyc2lvbkRh
dGEsIHNpemUsIHRydWUpKTsKLQotICAgIGlmICh2ZXJ0aWNhbCkKLSAgICAgICAgcmVzdWx0LnNl
dFkocG9zaXRpb25Gcm9tVmFsdWUodmVydGljYWwsIGNvbnZlcnNpb25EYXRhLCBzaXplLCBmYWxz
ZSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4geyBwb3NpdGlvbkZyb21WYWx1
ZShob3Jpem9udGFsLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSwgdHJ1ZSksIHBvc2l0aW9uRnJvbVZh
bHVlKHZlcnRpY2FsLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSwgZmFsc2UpIH07CiB9CiAKIGJvb2wg
Q1NTR3JhZGllbnRWYWx1ZTo6aXNDYWNoZWFibGUoKSBjb25zdAogeworICAgIGlmIChoYXNDb2xv
ckRlcml2ZWRGcm9tRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChh
dXRvJiBzdG9wIDogbV9zdG9wcykgewotICAgICAgICBpZiAoc3RvcC5tX2NvbG9ySXNEZXJpdmVk
RnJvbUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFz
dG9wLm1fcG9zaXRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoc3Rv
cC5tX3Bvc2l0aW9uLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKQorICAgICAgICBpZiAoc3RvcC5w
b3NpdGlvbiAmJiBzdG9wLnBvc2l0aW9uLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQogICAgIHJldHVybiB0cnVlOwogfQogCiBib29s
IENTU0dyYWRpZW50VmFsdWU6Omtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlcikgY29uc3QKIHsKICAgICBib29sIGhhc0NvbG9yRmlsdGVyID0gcmVuZGVyZXIuc3R5
bGUoKS5oYXNBcHBsZUNvbG9yRmlsdGVyKCk7Ci0KICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0
b3BzKSB7Ci0gICAgICAgIGlmIChoYXNDb2xvckZpbHRlcikgewotICAgICAgICAgICAgQ29sb3Ig
c3RvcENvbG9yID0gc3RvcC5tX3Jlc29sdmVkQ29sb3I7Ci0gICAgICAgICAgICByZW5kZXJlci5z
dHlsZSgpLmFwcGxlQ29sb3JGaWx0ZXIoKS50cmFuc2Zvcm1Db2xvcihzdG9wQ29sb3IpOwotICAg
ICAgICAgICAgaWYgKCFzdG9wQ29sb3IuaXNPcGFxdWUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0b3AubV9yZXNvbHZlZENvbG9y
LmlzT3BhcXVlKCkpCisgICAgICAgIENvbG9yIGNvbG9yID0gc3RvcC5yZXNvbHZlZENvbG9yOwor
ICAgICAgICBpZiAoaGFzQ29sb3JGaWx0ZXIpCisgICAgICAgICAgICByZW5kZXJlci5zdHlsZSgp
LmFwcGxlQ29sb3JGaWx0ZXIoKS50cmFuc2Zvcm1Db2xvcihjb2xvcik7CisgICAgICAgIGlmICgh
Y29sb3IuaXNPcGFxdWUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKGNvbnN0IENT
U0dyYWRpZW50VmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBjb21wYXJlQ1NTVmFs
dWVQdHIobV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFs
dWVQdHIobV9maXJzdFksIG90aGVyLm1fZmlyc3RZKQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFs
dWVQdHIobV9zZWNvbmRYLCBvdGhlci5tX3NlY29uZFgpCisgICAgICAgICYmIGNvbXBhcmVDU1NW
YWx1ZVB0cihtX3NlY29uZFksIG90aGVyLm1fc2Vjb25kWSkKKyAgICAgICAgJiYgbV9zdG9wcyA9
PSBvdGhlci5tX3N0b3BzCisgICAgICAgICYmIG1fZ3JhZGllbnRUeXBlID09IG90aGVyLm1fZ3Jh
ZGllbnRUeXBlCisgICAgICAgICYmIG1fcmVwZWF0aW5nID09IG90aGVyLm1fcmVwZWF0aW5nOwor
fQorCiBzdGF0aWMgdm9pZCBhcHBlbmRHcmFkaWVudFN0b3BzKFN0cmluZ0J1aWxkZXImIGJ1aWxk
ZXIsIGNvbnN0IFZlY3RvcjxDU1NHcmFkaWVudENvbG9yU3RvcCwgMj4mIHN0b3BzKQogewogICAg
IGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKSB7Ci0gICAgICAgIGRvdWJsZSBwb3NpdGlvbiA9IHN0
b3AubV9wb3NpdGlvbi0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAg
ICAgICBkb3VibGUgcG9zaXRpb24gPSBzdG9wLnBvc2l0aW9uLT5kb3VibGVWYWx1ZShDU1NVbml0
VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGlmICghcG9zaXRpb24pCi0gICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiLCBmcm9tKCIsIHN0b3AubV9jb2xvci0+Y3NzVGV4dCgpLCAnKScpOwor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgZnJvbSgiLCBzdG9wLmNvbG9yLT5jc3NUZXh0
KCksICcpJyk7CiAgICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uID09IDEpCi0gICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiLCB0bygiLCBzdG9wLm1fY29sb3ItPmNzc1RleHQoKSwgJyknKTsKKyAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIHRvKCIsIHN0b3AuY29sb3ItPmNzc1RleHQoKSwg
JyknKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgY29sb3It
c3RvcCgiLCBwb3NpdGlvbiwgIiwgIiwgc3RvcC5tX2NvbG9yLT5jc3NUZXh0KCksICcpJyk7Cisg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBjb2xvci1zdG9wKCIsIHBvc2l0aW9uLCAiLCAi
LCBzdG9wLmNvbG9yLT5jc3NUZXh0KCksICcpJyk7CiAgICAgfQogfQogCi12b2lkIENTU0dyYWRp
ZW50VmFsdWU6OndyaXRlQ29sb3JTdG9wKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IENT
U0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gc3RhdGljIHZvaWQgYXBwZW5kU3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0clRl
eHQoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgVCYgYSwgY29uc3QgVSYgYikKIHsKLSAg
ICBpZiAoIXN0b3AuaXNNaWRwb2ludCAmJiBzdG9wLm1fY29sb3IpCi0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHN0b3AubV9jb2xvci0+Y3NzVGV4dCgpKTsKKyAgICBpZiAoYSAmJiBiKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZChhLT5jc3NUZXh0KCksICcgJywgYi0+Y3NzVGV4dCgpKTsKKyAgICBl
bHNlIGlmIChhKQorICAgICAgICBidWlsZGVyLmFwcGVuZChhLT5jc3NUZXh0KCkpOworICAgIGVs
c2UgaWYgKGIpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGItPmNzc1RleHQoKSk7Cit9CiAKLSAg
ICBpZiAoc3RvcC5tX3Bvc2l0aW9uKSB7Ci0gICAgICAgIGlmICghc3RvcC5pc01pZHBvaW50KQot
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
c3RvcC5tX3Bvc2l0aW9uLT5jc3NUZXh0KCkpOwotICAgIH0KK3N0YXRpYyB2b2lkIHdyaXRlQ29s
b3JTdG9wKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9w
JiBzdG9wKQoreworICAgIGFwcGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KGJ1
aWxkZXIsIHN0b3AuY29sb3IsIHN0b3AucG9zaXRpb24pOwogfQogCiBTdHJpbmcgQ1NTTGluZWFy
R3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7Ci0gICAgaWYgKG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRMaW5lYXJH
cmFkaWVudCkgewotICAgICAgICByZXN1bHQuYXBwZW5kKCItd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwgIiwgbV9maXJzdFgtPmNzc1RleHQoKSwgJyAnLCBtX2ZpcnN0WS0+Y3NzVGV4dCgpLCAiLCAi
LCBtX3NlY29uZFgtPmNzc1RleHQoKSwgJyAnLCBtX3NlY29uZFktPmNzc1RleHQoKSk7Ci0gICAg
ICAgIGFwcGVuZEdyYWRpZW50U3RvcHMocmVzdWx0LCBtX3N0b3BzKTsKLSAgICB9IGVsc2UgaWYg
KG1fZ3JhZGllbnRUeXBlID09IENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQpIHsKLSAgICAgICAg
aWYgKG1fcmVwZWF0aW5nKQorICAgIGlmIChncmFkaWVudFR5cGUoKSA9PSBDU1NEZXByZWNhdGVk
TGluZWFyR3JhZGllbnQpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiLXdlYmtpdC1ncmFkaWVu
dChsaW5lYXIsICIsIGZpcnN0WCgpLT5jc3NUZXh0KCksICcgJywgZmlyc3RZKCktPmNzc1RleHQo
KSwgIiwgIiwgc2Vjb25kWCgpLT5jc3NUZXh0KCksICcgJywgc2Vjb25kWSgpLT5jc3NUZXh0KCkp
OworICAgICAgICBhcHBlbmRHcmFkaWVudFN0b3BzKHJlc3VsdCwgc3RvcHMoKSk7CisgICAgfSBl
bHNlIGlmIChncmFkaWVudFR5cGUoKSA9PSBDU1NQcmVmaXhlZExpbmVhckdyYWRpZW50KSB7Cisg
ICAgICAgIGlmIChpc1JlcGVhdGluZygpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoIi13ZWJraXQtcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgiKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtbGluZWFyLWdyYWRpZW50
KCIpOwogCiAgICAgICAgIGlmIChtX2FuZ2xlKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCht
X2FuZ2xlLT5jc3NUZXh0KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX2Zp
cnN0WCAmJiBtX2ZpcnN0WSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RY
LT5jc3NUZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChtX2ZpcnN0WCkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RYLT5j
c3NUZXh0KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9maXJzdFkpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WS0+Y3NzVGV4dCgpKTsKLSAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4
dChyZXN1bHQsIGZpcnN0WCgpLCBmaXJzdFkoKSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBzdG9w
IDogbV9zdG9wcykgeworICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7CiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKICAgICAgICAgICAgIHdyaXRlQ29s
b3JTdG9wKHJlc3VsdCwgc3RvcCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBp
ZiAobV9yZXBlYXRpbmcpCisgICAgICAgIGlmIChpc1JlcGVhdGluZygpKQogICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZExpdGVyYWwoInJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoIik7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJsaW5lYXItZ3JhZGll
bnQoIik7CkBAIC03NTQsMjUgKzcxNywxNiBAQCBTdHJpbmcgQ1NTTGluZWFyR3JhZGllbnRWYWx1
ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgICAgIGlmIChtX2FuZ2xlICYmIG1fYW5nbGUt
PmNvbXB1dGVEZWdyZWVzKCkgIT0gMTgwKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1f
YW5nbGUtPmNzc1RleHQoKSk7CiAgICAgICAgICAgICB3cm90ZVNvbWV0aGluZyA9IHRydWU7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoKG1fZmlyc3RYIHx8IG1fZmlyc3RZKSAmJiAhKCFtX2ZpcnN0WCAm
JiBtX2ZpcnN0WSAmJiBtX2ZpcnN0WS0+dmFsdWVJRCgpID09IENTU1ZhbHVlQm90dG9tKSkgewor
ICAgICAgICB9IGVsc2UgaWYgKChmaXJzdFgoKSB8fCBmaXJzdFkoKSkgJiYgISghZmlyc3RYKCkg
JiYgZmlyc3RZKCkgJiYgZmlyc3RZKCktPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJvdHRvbSkpIHsK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJ0byAiKTsKLSAgICAgICAgICAgIGlm
IChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1f
Zmlyc3RYLT5jc3NUZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtX2ZpcnN0WCkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmly
c3RYLT5jc3NUZXh0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CisgICAgICAgICAgICBhcHBlbmRTcGFjZVNl
cGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dChyZXN1bHQsIGZpcnN0WCgpLCBmaXJzdFkoKSk7CiAg
ICAgICAgICAgICB3cm90ZVNvbWV0aGluZyA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAod3JvdGVTb21ldGhpbmcpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAi
KTsKLQotICAgICAgICBib29sIHdyb3RlRmlyc3RTdG9wID0gZmFsc2U7Ci0gICAgICAgIGZvciAo
YXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgICAgIGlmICh3cm90ZUZpcnN0U3RvcCkK
KyAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkgeworICAgICAgICAgICAgaWYgKHdy
b3RlU29tZXRoaW5nKQogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIp
OwotICAgICAgICAgICAgd3JvdGVGaXJzdFN0b3AgPSB0cnVlOworICAgICAgICAgICAgd3JvdGVT
b21ldGhpbmcgPSB0cnVlOwogICAgICAgICAgICAgd3JpdGVDb2xvclN0b3AocmVzdWx0LCBzdG9w
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTg1OSw0NCArODEzLDQ0IEBAIFJlZjxHcmFkaWVudD4g
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvCiAgICAgRmxvYXRQb2ludCBzZWNvbmRQb2ludDsKICAgICBpZiAobV9hbmdsZSkg
ewogICAgICAgICBmbG9hdCBhbmdsZSA9IG1fYW5nbGUtPmZsb2F0VmFsdWUoQ1NTVW5pdFR5cGU6
OkNTU19ERUcpOwotICAgICAgICBlbmRQb2ludHNGcm9tQW5nbGUoYW5nbGUsIHNpemUsIGZpcnN0
UG9pbnQsIHNlY29uZFBvaW50LCBtX2dyYWRpZW50VHlwZSk7CisgICAgICAgIGVuZFBvaW50c0Zy
b21BbmdsZShhbmdsZSwgc2l6ZSwgZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQsIGdyYWRpZW50VHlw
ZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKG1fZ3JhZGllbnRUeXBlKSB7Cisg
ICAgICAgIHN3aXRjaCAoZ3JhZGllbnRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBDU1NEZXByZWNh
dGVkTGluZWFyR3JhZGllbnQ6Ci0gICAgICAgICAgICBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBv
aW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgY29udmVyc2lvbkRhdGEsIHNpemUp
OwotICAgICAgICAgICAgaWYgKG1fc2Vjb25kWCB8fCBtX3NlY29uZFkpCi0gICAgICAgICAgICAg
ICAgc2Vjb25kUG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9zZWNvbmRYLmdldCgpLCBtX3NlY29u
ZFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKKyAgICAgICAgICAgIGZpcnN0UG9pbnQg
PSBjb21wdXRlRW5kUG9pbnQoZmlyc3RYKCksIGZpcnN0WSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6
ZSk7CisgICAgICAgICAgICBpZiAoc2Vjb25kWCgpIHx8IHNlY29uZFkoKSkKKyAgICAgICAgICAg
ICAgICBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQb2ludChzZWNvbmRYKCksIHNlY29uZFkoKSwg
Y29udmVyc2lvbkRhdGEsIHNpemUpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fZmlyc3RYKQorICAgICAgICAgICAgICAgIGlmIChmaXJzdFgoKSkKICAgICAgICAg
ICAgICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WChzaXplLndpZHRoKCkgLSBmaXJzdFBvaW50Lngo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZmlyc3RZKQorICAgICAgICAgICAgICAgIGlmIChm
aXJzdFkoKSkKICAgICAgICAgICAgICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WShzaXplLmhlaWdo
dCgpIC0gZmlyc3RQb2ludC55KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudDoKLSAgICAgICAgICAgIGZp
cnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCksIG1fZmlyc3RZLmdldCgp
LCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7Ci0gICAgICAgICAgICBpZiAobV9maXJzdFgpCisgICAg
ICAgICAgICBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KGZpcnN0WCgpLCBmaXJzdFkoKSwg
Y29udmVyc2lvbkRhdGEsIHNpemUpOworICAgICAgICAgICAgaWYgKGZpcnN0WCgpKQogICAgICAg
ICAgICAgICAgIHNlY29uZFBvaW50LnNldFgoc2l6ZS53aWR0aCgpIC0gZmlyc3RQb2ludC54KCkp
OwotICAgICAgICAgICAgaWYgKG1fZmlyc3RZKQorICAgICAgICAgICAgaWYgKGZpcnN0WSgpKQog
ICAgICAgICAgICAgICAgIHNlY29uZFBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAtIGZpcnN0UG9p
bnQueSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU0xpbmVhckdyYWRp
ZW50OgotICAgICAgICAgICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZKSB7CisgICAgICAgICAg
ICBpZiAoZmlyc3RYKCkgJiYgZmlyc3RZKCkpIHsKICAgICAgICAgICAgICAgICAvLyAiTWFnaWMi
IGNvcm5lcnMsIHNvIHRoZSA1MCUgbGluZSB0b3VjaGVzIHR3byBjb3JuZXJzLgogICAgICAgICAg
ICAgICAgIGZsb2F0IHJpc2UgPSBzaXplLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgZmxvYXQg
cnVuID0gc2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9maXJzdFggJiYgbV9m
aXJzdFgtPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUxlZnQpCisgICAgICAgICAgICAgICAgaWYgKGZp
cnN0WCgpICYmIGZpcnN0WCgpLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVMZWZ0KQogICAgICAgICAg
ICAgICAgICAgICBydW4gKj0gLTE7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZmlyc3RZICYmIG1f
Zmlyc3RZLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3R0b20pCisgICAgICAgICAgICAgICAgaWYg
KGZpcnN0WSgpICYmIGZpcnN0WSgpLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3R0b20pCiAgICAg
ICAgICAgICAgICAgICAgIHJpc2UgKj0gLTE7CiAgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBh
bmdsZSwgYW5kIGZsaXAgaXQgYmFjayB0byAiYmVhcmluZyBhbmdsZSIgZGVncmVlcy4KICAgICAg
ICAgICAgICAgICBmbG9hdCBhbmdsZSA9IDkwIC0gcmFkMmRlZyhhdGFuMihyaXNlLCBydW4pKTsK
LSAgICAgICAgICAgICAgICBlbmRQb2ludHNGcm9tQW5nbGUoYW5nbGUsIHNpemUsIGZpcnN0UG9p
bnQsIHNlY29uZFBvaW50LCBtX2dyYWRpZW50VHlwZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KG1fZmlyc3RYIHx8IG1fZmlyc3RZKSB7IAotICAgICAgICAgICAgICAgIHNlY29uZFBvaW50ID0g
Y29tcHV0ZUVuZFBvaW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgY29udmVyc2lv
bkRhdGEsIHNpemUpOwotICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0WCkKKyAgICAgICAgICAg
ICAgICBlbmRQb2ludHNGcm9tQW5nbGUoYW5nbGUsIHNpemUsIGZpcnN0UG9pbnQsIHNlY29uZFBv
aW50LCBncmFkaWVudFR5cGUoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0WCgpIHx8
IGZpcnN0WSgpKSB7CisgICAgICAgICAgICAgICAgc2Vjb25kUG9pbnQgPSBjb21wdXRlRW5kUG9p
bnQoZmlyc3RYKCksIGZpcnN0WSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CisgICAgICAgICAg
ICAgICAgaWYgKGZpcnN0WCgpKQogICAgICAgICAgICAgICAgICAgICBmaXJzdFBvaW50LnNldFgo
c2l6ZS53aWR0aCgpIC0gc2Vjb25kUG9pbnQueCgpKTsKLSAgICAgICAgICAgICAgICBpZiAobV9m
aXJzdFkpCisgICAgICAgICAgICAgICAgaWYgKGZpcnN0WSgpKQogICAgICAgICAgICAgICAgICAg
ICBmaXJzdFBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAtIHNlY29uZFBvaW50LnkoKSk7CiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBzZWNvbmRQb2ludC5zZXRZKHNpemUuaGVp
Z2h0KCkpOwpAQCAtOTE3LDU5ICs4NzEsMjUgQEAgUmVmPEdyYWRpZW50PiBDU1NMaW5lYXJHcmFk
aWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY28KIAog
Ym9vbCBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjplcXVhbHMoY29uc3QgQ1NTTGluZWFyR3JhZGll
bnRWYWx1ZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZ3JhZGllbnRUeXBlID09IENTU0Rl
cHJlY2F0ZWRMaW5lYXJHcmFkaWVudCkKLSAgICAgICAgcmV0dXJuIG90aGVyLm1fZ3JhZGllbnRU
eXBlID09IG1fZ3JhZGllbnRUeXBlCi0gICAgICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIo
bV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVl
UHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0WSkKLSAgICAgICAgICAgICYmIGNvbXBhcmVDU1NW
YWx1ZVB0cihtX3NlY29uZFgsIG90aGVyLm1fc2Vjb25kWCkKLSAgICAgICAgICAgICYmIGNvbXBh
cmVDU1NWYWx1ZVB0cihtX3NlY29uZFksIG90aGVyLm1fc2Vjb25kWSkKLSAgICAgICAgICAgICYm
IG1fc3RvcHMgPT0gb3RoZXIubV9zdG9wczsKLQotICAgIGlmIChtX2dyYWRpZW50VHlwZSAhPSBv
dGhlci5tX2dyYWRpZW50VHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1f
cmVwZWF0aW5nICE9IG90aGVyLm1fcmVwZWF0aW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAobV9hbmdsZSkKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2Fu
Z2xlLCBvdGhlci5tX2FuZ2xlKSAmJiBtX3N0b3BzID09IG90aGVyLm1fc3RvcHM7Ci0KLSAgICBp
ZiAob3RoZXIubV9hbmdsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBlcXVh
bFhhbmRZID0gZmFsc2U7Ci0gICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZKQotICAgICAgICBl
cXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5tX2ZpcnN0WCkg
JiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0WSk7Ci0gICAgZWxz
ZSBpZiAobV9maXJzdFgpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NTVmFsdWVQdHIo
bV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKSAmJiAhb3RoZXIubV9maXJzdFk7Ci0gICAgZWxzZSBp
ZiAobV9maXJzdFkpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NTVmFsdWVQdHIobV9m
aXJzdFksIG90aGVyLm1fZmlyc3RZKSAmJiAhb3RoZXIubV9maXJzdFg7Ci0gICAgZWxzZQotICAg
ICAgICBlcXVhbFhhbmRZID0gIW90aGVyLm1fZmlyc3RYICYmICFvdGhlci5tX2ZpcnN0WTsKLQot
ICAgIHJldHVybiBlcXVhbFhhbmRZICYmIG1fc3RvcHMgPT0gb3RoZXIubV9zdG9wczsKKyAgICBy
ZXR1cm4gQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKG90aGVyKSAmJiBjb21wYXJlQ1NTVmFsdWVQ
dHIobV9hbmdsZSwgb3RoZXIubV9hbmdsZSk7CiB9CiAKIFN0cmluZyBDU1NSYWRpYWxHcmFkaWVu
dFZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3Vs
dDsKIAotICAgIGlmIChtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGll
bnQpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLXdlYmtpdC1ncmFkaWVudChyYWRpYWwsICIs
IG1fZmlyc3RYLT5jc3NUZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSwgIiwgIiwgbV9m
aXJzdFJhZGl1cy0+Y3NzVGV4dCgpLAotICAgICAgICAgICAgIiwgIiwgbV9zZWNvbmRYLT5jc3NU
ZXh0KCksICcgJywgbV9zZWNvbmRZLT5jc3NUZXh0KCksICIsICIsIG1fc2Vjb25kUmFkaXVzLT5j
c3NUZXh0KCkpOwotICAgICAgICBhcHBlbmRHcmFkaWVudFN0b3BzKHJlc3VsdCwgbV9zdG9wcyk7
Ci0gICAgfSBlbHNlIGlmIChtX2dyYWRpZW50VHlwZSA9PSBDU1NQcmVmaXhlZFJhZGlhbEdyYWRp
ZW50KSB7Ci0gICAgICAgIGlmIChtX3JlcGVhdGluZykKKyAgICBpZiAoZ3JhZGllbnRUeXBlKCkg
PT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
Ii13ZWJraXQtZ3JhZGllbnQocmFkaWFsLCAiLCBmaXJzdFgoKS0+Y3NzVGV4dCgpLCAnICcsIGZp
cnN0WSgpLT5jc3NUZXh0KCksICIsICIsIG1fZmlyc3RSYWRpdXMtPmNzc1RleHQoKSwKKyAgICAg
ICAgICAgICIsICIsIHNlY29uZFgoKS0+Y3NzVGV4dCgpLCAnICcsIHNlY29uZFkoKS0+Y3NzVGV4
dCgpLCAiLCAiLCBtX3NlY29uZFJhZGl1cy0+Y3NzVGV4dCgpKTsKKyAgICAgICAgYXBwZW5kR3Jh
ZGllbnRTdG9wcyhyZXN1bHQsIHN0b3BzKCkpOworICAgIH0gZWxzZSBpZiAoZ3JhZGllbnRUeXBl
KCkgPT0gQ1NTUHJlZml4ZWRSYWRpYWxHcmFkaWVudCkgeworICAgICAgICBpZiAoaXNSZXBlYXRp
bmcoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCItd2Via2l0LXJlcGVhdGlu
Zy1yYWRpYWwtZ3JhZGllbnQoIik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCItd2Via2l0LXJhZGlhbC1ncmFkaWVudCgiKTsKIAotICAgICAgICBpZiAo
bV9maXJzdFggJiYgbV9maXJzdFkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RY
LT5jc3NUZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSk7Ci0gICAgICAgIGVsc2UgaWYg
KG1fZmlyc3RYKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgp
KTsKLSAgICAgICAgZWxzZSBpZiAobV9maXJzdFkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KG1fZmlyc3RZLT5jc3NUZXh0KCkpOworICAgICAgICBpZiAoZmlyc3RYKCkgfHwgZmlyc3RZKCkp
CisgICAgICAgICAgICBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dChyZXN1
bHQsIGZpcnN0WCgpLCBmaXJzdFkoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmRMaXRlcmFsKCJjZW50ZXIiKTsKIApAQCAtOTg2LDEyICs5MDYsMTIgQEAgU3RyaW5n
IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAogICAgICAgICB9
IGVsc2UgaWYgKG1fZW5kSG9yaXpvbnRhbFNpemUgJiYgbV9lbmRWZXJ0aWNhbFNpemUpCiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCIsICIsIG1fZW5kSG9yaXpvbnRhbFNpemUtPmNzc1RleHQo
KSwgJyAnLCBtX2VuZFZlcnRpY2FsU2l6ZS0+Y3NzVGV4dCgpKTsKIAotICAgICAgICBmb3IgKGF1
dG8mIHN0b3AgOiBtX3N0b3BzKSB7CisgICAgICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKCkp
IHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwogICAgICAgICAgICAg
d3JpdGVDb2xvclN0b3AocmVzdWx0LCBzdG9wKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChtX3JlcGVhdGluZykKKyAgICAgICAgaWYgKGlzUmVwZWF0aW5nKCkpCiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgicmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgi
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoInJhZGlh
bC1ncmFkaWVudCgiKTsKQEAgLTEwMTksMTYgKzkzOSwxMSBAQCBTdHJpbmcgQ1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICB3cm90ZVNvbWV0
aGluZyA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9maXJzdFggfHwgbV9maXJz
dFkpIHsKKyAgICAgICAgaWYgKGZpcnN0WCgpIHx8IGZpcnN0WSgpKSB7CiAgICAgICAgICAgICBp
ZiAod3JvdGVTb21ldGhpbmcpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImF0ICIpOwotICAgICAgICAgICAgaWYg
KG1fZmlyc3RYICYmIG1fZmlyc3RZKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9m
aXJzdFgtPmNzc1RleHQoKSwgJyAnLCBtX2ZpcnN0WS0+Y3NzVGV4dCgpKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKG1fZmlyc3RYKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJz
dFgtPmNzc1RleHQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChtX2ZpcnN0WS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIGFwcGVuZFNwYWNlU2Vw
YXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KHJlc3VsdCwgZmlyc3RYKCksIGZpcnN0WSgpKTsKICAg
ICAgICAgICAgIHdyb3RlU29tZXRoaW5nID0gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xMDM2LDcg
Kzk1MSw3IEBAIFN0cmluZyBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0KCkg
Y29uc3QKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwogCiAgICAgICAg
IGJvb2wgd3JvdGVGaXJzdFN0b3AgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBzdG9wIDog
bV9zdG9wcykgeworICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7CiAgICAgICAg
ICAgICBpZiAod3JvdGVGaXJzdFN0b3ApCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoIiwgIik7CiAgICAgICAgICAgICB3cm90ZUZpcnN0U3RvcCA9IHRydWU7CkBAIC0xMTQz
LDE2ICsxMDU4LDE2IEBAIFJlZjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3Jl
YXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvCiAKICAgICBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKCZyZW5kZXJlci5zdHlsZSgpLCByZW5kZXJl
ci5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpLCAmcmVuZGVyZXIu
dmlldygpKTsKIAotICAgIEZsb2F0UG9pbnQgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2ludCht
X2ZpcnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKLSAg
ICBpZiAoIW1fZmlyc3RYKQorICAgIEZsb2F0UG9pbnQgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQ
b2ludChmaXJzdFgoKSwgZmlyc3RZKCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKKyAgICBpZiAo
IWZpcnN0WCgpKQogICAgICAgICBmaXJzdFBvaW50LnNldFgoc2l6ZS53aWR0aCgpIC8gMik7Ci0g
ICAgaWYgKCFtX2ZpcnN0WSkKKyAgICBpZiAoIWZpcnN0WSgpKQogICAgICAgICBmaXJzdFBvaW50
LnNldFkoc2l6ZS5oZWlnaHQoKSAvIDIpOwogCi0gICAgRmxvYXRQb2ludCBzZWNvbmRQb2ludCA9
IGNvbXB1dGVFbmRQb2ludChtX3NlY29uZFguZ2V0KCksIG1fc2Vjb25kWS5nZXQoKSwgY29udmVy
c2lvbkRhdGEsIHNpemUpOwotICAgIGlmICghbV9zZWNvbmRYKQorICAgIEZsb2F0UG9pbnQgc2Vj
b25kUG9pbnQgPSBjb21wdXRlRW5kUG9pbnQoc2Vjb25kWCgpLCBzZWNvbmRZKCksIGNvbnZlcnNp
b25EYXRhLCBzaXplKTsKKyAgICBpZiAoIXNlY29uZFgoKSkKICAgICAgICAgc2Vjb25kUG9pbnQu
c2V0WChzaXplLndpZHRoKCkgLyAyKTsKLSAgICBpZiAoIW1fc2Vjb25kWSkKKyAgICBpZiAoIXNl
Y29uZFkoKSkKICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WShzaXplLmhlaWdodCgpIC8gMik7CiAK
ICAgICBmbG9hdCBmaXJzdFJhZGl1cyA9IDA7CkBAIC0xMjY2LDcgKzExODEsNyBAQCBSZWY8R3Jh
ZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjbwogCiAgICAgLy8gY29tcHV0ZVN0b3BzKCkgb25seSB1c2VzIG1heEV4
dGVudCBmb3IgcmVwZWF0aW5nIGdyYWRpZW50cy4KICAgICBmbG9hdCBtYXhFeHRlbnQgPSAwOwot
ICAgIGlmIChtX3JlcGVhdGluZykgeworICAgIGlmIChpc1JlcGVhdGluZygpKSB7CiAgICAgICAg
IEZsb2F0UG9pbnQgY29ybmVyOwogICAgICAgICBtYXhFeHRlbnQgPSBkaXN0YW5jZVRvRmFydGhl
c3RDb3JuZXIoc2Vjb25kUG9pbnQsIHNpemUsIGNvcm5lcik7CiAgICAgfQpAQCAtMTI4Miw1OSAr
MTE5NywxOCBAQCBSZWY8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdy
YWRpZW50KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjbwogCiBib29sIENTU1JhZGlhbEdyYWRp
ZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlJiBvdGhlcikgY29u
c3QKIHsKLSAgICBpZiAobV9ncmFkaWVudFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRp
ZW50KQotICAgICAgICByZXR1cm4gb3RoZXIubV9ncmFkaWVudFR5cGUgPT0gbV9ncmFkaWVudFR5
cGUKLSAgICAgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WCwgb3RoZXIubV9m
aXJzdFgpCi0gICAgICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9maXJzdFksIG90aGVy
Lm1fZmlyc3RZKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vjb25kWCwg
b3RoZXIubV9zZWNvbmRYKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vj
b25kWSwgb3RoZXIubV9zZWNvbmRZKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRy
KG1fZmlyc3RSYWRpdXMsIG90aGVyLm1fZmlyc3RSYWRpdXMpCi0gICAgICAgICAgICAmJiBjb21w
YXJlQ1NTVmFsdWVQdHIobV9zZWNvbmRSYWRpdXMsIG90aGVyLm1fc2Vjb25kUmFkaXVzKQotICAg
ICAgICAgICAgJiYgbV9zdG9wcyA9PSBvdGhlci5tX3N0b3BzOwotCi0gICAgaWYgKG1fZ3JhZGll
bnRUeXBlICE9IG90aGVyLm1fZ3JhZGllbnRUeXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAobV9yZXBlYXRpbmcgIT0gb3RoZXIubV9yZXBlYXRpbmcpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGJvb2wgZXF1YWxYYW5kWSA9IGZhbHNlOwotICAgIGlmIChtX2ZpcnN0
WCAmJiBtX2ZpcnN0WSkKLSAgICAgICAgZXF1YWxYYW5kWSA9IGNvbXBhcmVDU1NWYWx1ZVB0ciht
X2ZpcnN0WCwgb3RoZXIubV9maXJzdFgpICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WSwg
b3RoZXIubV9maXJzdFkpOwotICAgIGVsc2UgaWYgKG1fZmlyc3RYKQotICAgICAgICBlcXVhbFhh
bmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5tX2ZpcnN0WCkgJiYgIW90
aGVyLm1fZmlyc3RZOwotICAgIGVsc2UgaWYgKG1fZmlyc3RZKQotICAgICAgICBlcXVhbFhhbmRZ
ID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0WSkgJiYgIW90aGVy
Lm1fZmlyc3RYOwotICAgIGVsc2UKLSAgICAgICAgZXF1YWxYYW5kWSA9ICFvdGhlci5tX2ZpcnN0
WCAmJiAhb3RoZXIubV9maXJzdFk7Ci0KLSAgICBpZiAoIWVxdWFsWGFuZFkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGJvb2wgZXF1YWxTaGFwZSA9IHRydWU7Ci0gICAgYm9vbCBlcXVh
bFNpemluZ0JlaGF2aW9yID0gdHJ1ZTsKLSAgICBib29sIGVxdWFsSG9yaXpvbnRhbEFuZFZlcnRp
Y2FsU2l6ZSA9IHRydWU7Ci0KLSAgICBpZiAobV9zaGFwZSkKLSAgICAgICAgZXF1YWxTaGFwZSA9
IGNvbXBhcmVDU1NWYWx1ZVB0cihtX3NoYXBlLCBvdGhlci5tX3NoYXBlKTsKLSAgICBlbHNlIGlm
IChtX3NpemluZ0JlaGF2aW9yKQotICAgICAgICBlcXVhbFNpemluZ0JlaGF2aW9yID0gY29tcGFy
ZUNTU1ZhbHVlUHRyKG1fc2l6aW5nQmVoYXZpb3IsIG90aGVyLm1fc2l6aW5nQmVoYXZpb3IpOwot
ICAgIGVsc2UgaWYgKG1fZW5kSG9yaXpvbnRhbFNpemUgJiYgbV9lbmRWZXJ0aWNhbFNpemUpCi0g
ICAgICAgIGVxdWFsSG9yaXpvbnRhbEFuZFZlcnRpY2FsU2l6ZSA9IGNvbXBhcmVDU1NWYWx1ZVB0
cihtX2VuZEhvcml6b250YWxTaXplLCBvdGhlci5tX2VuZEhvcml6b250YWxTaXplKSAmJiBjb21w
YXJlQ1NTVmFsdWVQdHIobV9lbmRWZXJ0aWNhbFNpemUsIG90aGVyLm1fZW5kVmVydGljYWxTaXpl
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgZXF1YWxTaGFwZSA9ICFvdGhlci5tX3NoYXBlOwotICAg
ICAgICBlcXVhbFNpemluZ0JlaGF2aW9yID0gIW90aGVyLm1fc2l6aW5nQmVoYXZpb3I7Ci0gICAg
ICAgIGVxdWFsSG9yaXpvbnRhbEFuZFZlcnRpY2FsU2l6ZSA9ICFvdGhlci5tX2VuZEhvcml6b250
YWxTaXplICYmICFvdGhlci5tX2VuZFZlcnRpY2FsU2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGVx
dWFsU2hhcGUgJiYgZXF1YWxTaXppbmdCZWhhdmlvciAmJiBlcXVhbEhvcml6b250YWxBbmRWZXJ0
aWNhbFNpemUgJiYgbV9zdG9wcyA9PSBvdGhlci5tX3N0b3BzOworICAgIHJldHVybiBDU1NHcmFk
aWVudFZhbHVlOjplcXVhbHMob3RoZXIpCisgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0ciht
X3NoYXBlLCBvdGhlci5tX3NoYXBlKQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9z
aXppbmdCZWhhdmlvciwgb3RoZXIubV9zaXppbmdCZWhhdmlvcikKKyAgICAgICAgJiYgY29tcGFy
ZUNTU1ZhbHVlUHRyKG1fZW5kSG9yaXpvbnRhbFNpemUsIG90aGVyLm1fZW5kSG9yaXpvbnRhbFNp
emUpCisgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2VuZFZlcnRpY2FsU2l6ZSwgb3Ro
ZXIubV9lbmRWZXJ0aWNhbFNpemUpOwogfQogCi0KIFN0cmluZyBDU1NDb25pY0dyYWRpZW50VmFs
dWU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0Owog
Ci0gICAgaWYgKG1fcmVwZWF0aW5nKQorICAgIGlmIChpc1JlcGVhdGluZygpKQogICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgicmVwZWF0aW5nLWNvbmljLWdyYWRpZW50KCIpOwogICAgIGVs
c2UKICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImNvbmljLWdyYWRpZW50KCIpOwpAQCAt
MTM0NiwxMCArMTIyMCwxMSBAQCBTdHJpbmcgQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjdXN0b21D
U1NUZXh0KCkgY29uc3QKICAgICAgICAgd3JvdGVTb21ldGhpbmcgPSB0cnVlOwogICAgIH0KIAot
ICAgIGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkgeworICAgIGlmIChmaXJzdFgoKSAmJiBmaXJz
dFkoKSkgewogICAgICAgICBpZiAod3JvdGVTb21ldGhpbmcpCiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgJyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoImF0ICIsIG1fZmlyc3RYLT5jc3NU
ZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmRM
aXRlcmFsKCJhdCAiKTsKKyAgICAgICAgYXBwZW5kU3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0
clRleHQocmVzdWx0LCBmaXJzdFgoKSwgZmlyc3RZKCkpOwogICAgICAgICB3cm90ZVNvbWV0aGlu
ZyA9IHRydWU7CiAgICAgfQogCkBAIC0xMzU3LDcgKzEyMzIsNyBAQCBTdHJpbmcgQ1NTQ29uaWNH
cmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAgICAgICAgcmVzdWx0LmFwcGVu
ZExpdGVyYWwoIiwgIik7CiAKICAgICBib29sIHdyb3RlRmlyc3RTdG9wID0gZmFsc2U7Ci0gICAg
Zm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykgeworICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3Bz
KCkpIHsKICAgICAgICAgaWYgKHdyb3RlRmlyc3RTdG9wKQogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZExpdGVyYWwoIiwgIik7CiAgICAgICAgIHdyb3RlRmlyc3RTdG9wID0gdHJ1ZTsKQEAgLTEz
NzQsMTAgKzEyNDksMTAgQEAgUmVmPEdyYWRpZW50PiBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNy
ZWF0ZUdyYWRpZW50KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb24KIAogICAgIENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEoJnJlbmRlcmVyLnN0eWxlKCksIHJlbmRl
cmVyLmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCksICZyZW5kZXJl
ci52aWV3KCkpOwogCi0gICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludCA9IGNvbXB1dGVFbmRQb2lu
dChtX2ZpcnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsK
LSAgICBpZiAoIW1fZmlyc3RYKQorICAgIEZsb2F0UG9pbnQgY2VudGVyUG9pbnQgPSBjb21wdXRl
RW5kUG9pbnQoZmlyc3RYKCksIGZpcnN0WSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CisgICAg
aWYgKCFmaXJzdFgoKSkKICAgICAgICAgY2VudGVyUG9pbnQuc2V0WChzaXplLndpZHRoKCkgLyAy
KTsKLSAgICBpZiAoIW1fZmlyc3RZKQorICAgIGlmICghZmlyc3RZKCkpCiAgICAgICAgIGNlbnRl
clBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAvIDIpOwogCiAgICAgZmxvYXQgYW5nbGVSYWRpYW5z
ID0gMDsKQEAgLTEzOTUsMjMgKzEyNzAsNyBAQCBSZWY8R3JhZGllbnQ+IENTU0NvbmljR3JhZGll
bnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbgogCiBi
b29sIENTU0NvbmljR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0NvbmljR3JhZGllbnRW
YWx1ZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmVwZWF0aW5nICE9IG90aGVyLm1fcmVw
ZWF0aW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNvbXBhcmVDU1NWYWx1
ZVB0cihtX2FuZ2xlLCBvdGhlci5tX2FuZ2xlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYm9vbCBlcXVhbFhhbmRZID0gZmFsc2U7Ci0gICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZ
KQotICAgICAgICBlcXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhl
ci5tX2ZpcnN0WCkgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0
WSk7Ci0gICAgZWxzZSBpZiAobV9maXJzdFgpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJl
Q1NTVmFsdWVQdHIobV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKSAmJiAhb3RoZXIubV9maXJzdFk7
Ci0gICAgZWxzZSBpZiAobV9maXJzdFkpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NT
VmFsdWVQdHIobV9maXJzdFksIG90aGVyLm1fZmlyc3RZKSAmJiAhb3RoZXIubV9maXJzdFg7Ci0g
ICAgZWxzZQotICAgICAgICBlcXVhbFhhbmRZID0gIW90aGVyLm1fZmlyc3RYICYmICFvdGhlci5t
X2ZpcnN0WTsKLQotICAgIHJldHVybiBlcXVhbFhhbmRZICYmIG1fc3RvcHMgPT0gb3RoZXIubV9z
dG9wczsKKyAgICByZXR1cm4gQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKG90aGVyKSAmJiBjb21w
YXJlQ1NTVmFsdWVQdHIobV9hbmdsZSwgb3RoZXIubV9hbmdsZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCmluZGV4IGQ3NTQ0
MmUwYTJiOWRlODUwNGU5MWI1OWU5ZTAyNDM1NjM2NTQ3MDAuLjM3OTQzNzI2MzJjNTI4YzIzMDNh
YzA5ZGUwNmFmZjk4ZGVlMjcxNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFkaWVudFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUu
aApAQCAtMjgsMTMgKzI4LDkgQEAKICNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBG
bG9hdFBvaW50OwotY2xhc3MgU3R5bGVSZXNvbHZlcjsKLQogbmFtZXNwYWNlIFN0eWxlIHsKIGNs
YXNzIEJ1aWxkZXJTdGF0ZTsKIH0KQEAgLTUxLDQ3ICs0NywzOCBAQCBlbnVtIENTU0dyYWRpZW50
VHlwZSB7CiBlbnVtIENTU0dyYWRpZW50UmVwZWF0IHsgTm9uUmVwZWF0aW5nLCBSZXBlYXRpbmcg
fTsKIAogc3RydWN0IENTU0dyYWRpZW50Q29sb3JTdG9wIHsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IG1fcG9zaXRpb247IC8vIHBlcmNlbnRhZ2Ugb3IgbGVuZ3RoCi0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBtX2NvbG9yOwotICAgIENvbG9yIG1fcmVzb2x2ZWRDb2xvcjsK
LSAgICBib29sIG1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IGZhbHNlOwotICAgIGJvb2wg
aXNNaWRwb2ludCA9IGZhbHNlOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NHcmFkaWVu
dENvbG9yU3RvcCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gY29tcGFyZUNT
U1ZhbHVlUHRyKG1fY29sb3IsIG90aGVyLm1fY29sb3IpCi0gICAgICAgICAgICAmJiBjb21wYXJl
Q1NTVmFsdWVQdHIobV9wb3NpdGlvbiwgb3RoZXIubV9wb3NpdGlvbik7Ci0gICAgfQorICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcG9zaXRpb247IC8vIHBlcmNlbnRhZ2Ugb3IgbGVuZ3Ro
CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcjsKKyAgICBDb2xvciByZXNvbHZl
ZENvbG9yOwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NHcmFkaWVudENv
bG9yU3RvcCYgYSwgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIGIpCit7CisgICAgcmV0dXJu
IGNvbXBhcmVDU1NWYWx1ZVB0cihhLmNvbG9yLCBiLmNvbG9yKSAmJiBjb21wYXJlQ1NTVmFsdWVQ
dHIoYS5wb3NpdGlvbiwgYi5wb3NpdGlvbik7Cit9CisKIGNsYXNzIENTU0dyYWRpZW50VmFsdWUg
OiBwdWJsaWMgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgUmVmUHRyPElt
YWdlPiBpbWFnZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmxvYXRTaXplJik7Ci0KLSAgICB2b2lk
IHNldEZpcnN0WChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fZmlyc3RYID0g
V1RGTW92ZSh2YWwpOyB9Ci0gICAgdm9pZCBzZXRGaXJzdFkoUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYmIHZhbCkgeyBtX2ZpcnN0WSA9IFdURk1vdmUodmFsKTsgfQotICAgIHZvaWQgc2V0U2Vj
b25kWChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fc2Vjb25kWCA9IFdURk1v
dmUodmFsKTsgfQotICAgIHZvaWQgc2V0U2Vjb25kWShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
JiYgdmFsKSB7IG1fc2Vjb25kWSA9IFdURk1vdmUodmFsKTsgfQotCi0gICAgdm9pZCBhZGRTdG9w
KGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wKSB7IG1fc3RvcHMuYXBwZW5kKHN0b3Ap
OyB9CisgICAgdm9pZCBzZXRGaXJzdFgoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVl
KSB7IG1fZmlyc3RYID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldEZpcnN0WShSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpIHsgbV9maXJzdFkgPSBXVEZNb3ZlKHZhbHVl
KTsgfQorICAgIHZvaWQgc2V0U2Vjb25kWChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFs
dWUpIHsgbV9zZWNvbmRYID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFNlY29uZFko
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fc2Vjb25kWSA9IFdURk1vdmUo
dmFsdWUpOyB9CisgICAgdm9pZCBhZGRTdG9wKENTU0dyYWRpZW50Q29sb3JTdG9wJiYgc3RvcCkg
eyBtX3N0b3BzLmFwcGVuZChXVEZNb3ZlKHN0b3ApKTsgfQogICAgIHZvaWQgZG9uZUFkZGluZ1N0
b3BzKCkgeyBtX3N0b3BzLnNocmlua1RvRml0KCk7IH0KLQotICAgIHVuc2lnbmVkIHN0b3BDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHMuc2l6ZSgpOyB9Ci0KLSAgICB2b2lkIHNvcnRTdG9w
c0lmTmVlZGVkKCk7Ci0KLSAgICBib29sIGlzUmVwZWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXBlYXRpbmc7IH0KKyAgICBib29sIGhhc0F0TGVhc3RUd29TdG9wcygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RvcHMuc2l6ZSgpID49IDI7IH0KKyAgICB2b2lkIHJlc29sdmVSR0JDb2xvcnMoKTsKIAog
ICAgIENTU0dyYWRpZW50VHlwZSBncmFkaWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2dyYWRp
ZW50VHlwZTsgfQogCi0gICAgYm9vbCBpc0ZpeGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgRmxvYXRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50JikgY29uc3Qg
eyByZXR1cm4gRmxvYXRTaXplKCk7IH0KLQotICAgIGJvb2wgaXNQZW5kaW5nKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBGbG9hdFNpemUmKTsKICAgICBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJF
bGVtZW50JikgY29uc3Q7CiAKLSAgICB2b2lkIGxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VM
b2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSB7IH0KKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNGaXhlZFNpemUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBG
bG9hdFNpemUgZml4ZWRTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQmKSB7IHJldHVybiBGbG9hdFNp
emUoKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc1BlbmRpbmcoKSB7IHJldHVybiBm
YWxzZTsgfQorICAgIHN0YXRpYyB2b2lkIGxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSB7IH0KKwogICAgIFJlZjxDU1NHcmFk
aWVudFZhbHVlPiBncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZTo6QnVpbGRlclN0YXRl
Jik7Ci0gICAgdm9pZCByZXNvbHZlUkdCQ29sb3JzKCk7CiAKIHByb3RlY3RlZDoKICAgICBDU1NH
cmFkaWVudFZhbHVlKENsYXNzVHlwZSBjbGFzc1R5cGUsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVh
dCwgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKQEAgLTEwMSw0MSArODgsNDMgQEAgcHJv
dGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBDU1NHcmFkaWVudFZhbHVlKGNvbnN0IENTU0dy
YWRpZW50VmFsdWUmIG90aGVyLCBDbGFzc1R5cGUgY2xhc3NUeXBlLCBDU1NHcmFkaWVudFR5cGUg
Z3JhZGllbnRUeXBlKQorICAgIENTU0dyYWRpZW50VmFsdWUoY29uc3QgQ1NTR3JhZGllbnRWYWx1
ZSYgb3RoZXIsIENsYXNzVHlwZSBjbGFzc1R5cGUpCiAgICAgICAgIDogQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZShjbGFzc1R5cGUpCiAgICAgICAgICwgbV9maXJzdFgob3RoZXIubV9maXJzdFgpCiAg
ICAgICAgICwgbV9maXJzdFkob3RoZXIubV9maXJzdFkpCiAgICAgICAgICwgbV9zZWNvbmRYKG90
aGVyLm1fc2Vjb25kWCkKICAgICAgICAgLCBtX3NlY29uZFkob3RoZXIubV9zZWNvbmRZKQogICAg
ICAgICAsIG1fc3RvcHMob3RoZXIubV9zdG9wcykKLSAgICAgICAgLCBtX3N0b3BzU29ydGVkKG90
aGVyLm1fc3RvcHNTb3J0ZWQpCi0gICAgICAgICwgbV9ncmFkaWVudFR5cGUoZ3JhZGllbnRUeXBl
KQorICAgICAgICAsIG1fZ3JhZGllbnRUeXBlKG90aGVyLm1fZ3JhZGllbnRUeXBlKQogICAgICAg
ICAsIG1fcmVwZWF0aW5nKG90aGVyLm1fcmVwZWF0aW5nKQorICAgICAgICAsIG1faGFzQ29sb3JE
ZXJpdmVkRnJvbUVsZW1lbnQob3RoZXIubV9oYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCkKICAg
ICB7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhZGllbnRBZGFwdGVyPgotICAg
IEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgY29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGZs
b2F0IG1heExlbmd0aEZvclJlcGVhdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhZGllbnRB
ZGFwdGVyPiBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIGNvbXB1dGVTdG9wcyhHcmFkaWVudEFk
YXB0ZXImLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgY29uc3QgUmVuZGVyU3R5
bGUmLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQpOwogCi0gICAgLy8gUmVzb2x2ZSBwb2ludHMv
cmFkaWkgdG8gZnJvbnQgZW5kIHZhbHVlcy4KLSAgICBGbG9hdFBvaW50IGNvbXB1dGVFbmRQb2lu
dChDU1NQcmltaXRpdmVWYWx1ZSosIENTU1ByaW1pdGl2ZVZhbHVlKiwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYsIGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIGF1dG8gZmlyc3RYKCkg
Y29uc3QgeyByZXR1cm4gbV9maXJzdFguZ2V0KCk7IH0KKyAgICBhdXRvIGZpcnN0WSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlyc3RZLmdldCgpOyB9CisgICAgYXV0byBzZWNvbmRYKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWNvbmRYLmdldCgpOyB9CisgICAgYXV0byBzZWNvbmRZKCkgY29uc3QgeyByZXR1
cm4gbV9zZWNvbmRZLmdldCgpOyB9CisgICAgYXV0byYgc3RvcHMoKSBjb25zdCB7IHJldHVybiBt
X3N0b3BzOyB9CisgICAgYm9vbCBpc1JlcGVhdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwZWF0
aW5nOyB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NHcmFkaWVudFZhbHVlJikgY29uc3Q7
CiAKK3ByaXZhdGU6CisgICAgYm9vbCBoYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCgpIGNvbnN0
OwogICAgIGJvb2wgaXNDYWNoZWFibGUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHdyaXRlQ29s
b3JTdG9wKFN0cmluZ0J1aWxkZXImLCBjb25zdCBDU1NHcmFkaWVudENvbG9yU3RvcCYpIGNvbnN0
OwogCi0gICAgLy8gUG9pbnRzLiBTb21lIG9mIHRoZXNlIG1heSBiZSBudWxsLgogICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdFg7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX2ZpcnN0WTsKLQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9zZWNvbmRY
OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9zZWNvbmRZOwotCi0gICAgLy8gU3Rv
cHMKICAgICBWZWN0b3I8Q1NTR3JhZGllbnRDb2xvclN0b3AsIDI+IG1fc3RvcHM7Ci0gICAgYm9v
bCBtX3N0b3BzU29ydGVkIHsgZmFsc2UgfTsKICAgICBDU1NHcmFkaWVudFR5cGUgbV9ncmFkaWVu
dFR5cGU7CiAgICAgYm9vbCBtX3JlcGVhdGluZyB7IGZhbHNlIH07CisKKyAgICBtdXRhYmxlIE9w
dGlvbmFsPGJvb2w+IG1faGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQ7CiB9OwogCiBjbGFzcyBD
U1NMaW5lYXJHcmFkaWVudFZhbHVlIGZpbmFsIDogcHVibGljIENTU0dyYWRpZW50VmFsdWUgewpA
QCAtMTQ1LDcgKzEzNCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZShyZXBlYXQsIGdyYWRpZW50VHlwZSkpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0QW5nbGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX2FuZ2xl
ID0gV1RGTW92ZSh2YWwpOyB9CisgICAgdm9pZCBzZXRBbmdsZShSZWY8Q1NTUHJpbWl0aXZlVmFs
dWU+JiYgdmFsdWUpIHsgbV9hbmdsZSA9IFdURk1vdmUodmFsdWUpOyB9CiAKICAgICBTdHJpbmcg
Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCkBAIC0xNjYsNyArMTU1LDcgQEAgcHJpdmF0ZToKICAg
ICB9CiAKICAgICBDU1NMaW5lYXJHcmFkaWVudFZhbHVlKGNvbnN0IENTU0xpbmVhckdyYWRpZW50
VmFsdWUmIG90aGVyKQotICAgICAgICA6IENTU0dyYWRpZW50VmFsdWUob3RoZXIsIExpbmVhckdy
YWRpZW50Q2xhc3MsIG90aGVyLmdyYWRpZW50VHlwZSgpKQorICAgICAgICA6IENTU0dyYWRpZW50
VmFsdWUob3RoZXIsIExpbmVhckdyYWRpZW50Q2xhc3MpCiAgICAgICAgICwgbV9hbmdsZShvdGhl
ci5tX2FuZ2xlKQogICAgIHsKICAgICB9CkBAIC0xODgsMTQgKzE3NywxNCBAQCBwdWJsaWM6CiAK
ICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRGaXJzdFJh
ZGl1cyhSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fZmlyc3RSYWRpdXMgPSBX
VEZNb3ZlKHZhbCk7IH0KLSAgICB2b2lkIHNldFNlY29uZFJhZGl1cyhSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+JiYgdmFsKSB7IG1fc2Vjb25kUmFkaXVzID0gV1RGTW92ZSh2YWwpOyB9CisgICAg
dm9pZCBzZXRGaXJzdFJhZGl1cyhSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpIHsg
bV9maXJzdFJhZGl1cyA9IFdURk1vdmUodmFsdWUpOyB9CisgICAgdm9pZCBzZXRTZWNvbmRSYWRp
dXMoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fc2Vjb25kUmFkaXVzID0g
V1RGTW92ZSh2YWx1ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hhcGUoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYmIHZhbCkgeyBtX3NoYXBlID0gV1RGTW92ZSh2YWwpOyB9Ci0gICAgdm9pZCBzZXRT
aXppbmdCZWhhdmlvcihSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fc2l6aW5n
QmVoYXZpb3IgPSBXVEZNb3ZlKHZhbCk7IH0KKyAgICB2b2lkIHNldFNoYXBlKFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkgeyBtX3NoYXBlID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAg
ICB2b2lkIHNldFNpemluZ0JlaGF2aW9yKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1
ZSkgeyBtX3NpemluZ0JlaGF2aW9yID0gV1RGTW92ZSh2YWx1ZSk7IH0KIAotICAgIHZvaWQgc2V0
RW5kSG9yaXpvbnRhbFNpemUoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX2Vu
ZEhvcml6b250YWxTaXplID0gV1RGTW92ZSh2YWwpOyB9Ci0gICAgdm9pZCBzZXRFbmRWZXJ0aWNh
bFNpemUoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX2VuZFZlcnRpY2FsU2l6
ZSA9IFdURk1vdmUodmFsKTsgfQorICAgIHZvaWQgc2V0RW5kSG9yaXpvbnRhbFNpemUoUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fZW5kSG9yaXpvbnRhbFNpemUgPSBXVEZN
b3ZlKHZhbHVlKTsgfQorICAgIHZvaWQgc2V0RW5kVmVydGljYWxTaXplKFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4mJiB2YWx1ZSkgeyBtX2VuZFZlcnRpY2FsU2l6ZSA9IFdURk1vdmUodmFsdWUp
OyB9CiAKICAgICAvLyBDcmVhdGUgdGhlIGdyYWRpZW50IGZvciBhIGdpdmVuIHNpemUuCiAgICAg
UmVmPEdyYWRpZW50PiBjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmxvYXRT
aXplJik7CkBAIC0yMDksNyArMTk4LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBDU1NSYWRp
YWxHcmFkaWVudFZhbHVlKGNvbnN0IENTU1JhZGlhbEdyYWRpZW50VmFsdWUmIG90aGVyKQotICAg
ICAgICA6IENTU0dyYWRpZW50VmFsdWUob3RoZXIsIFJhZGlhbEdyYWRpZW50Q2xhc3MsIG90aGVy
LmdyYWRpZW50VHlwZSgpKQorICAgICAgICA6IENTU0dyYWRpZW50VmFsdWUob3RoZXIsIFJhZGlh
bEdyYWRpZW50Q2xhc3MpCiAgICAgICAgICwgbV9maXJzdFJhZGl1cyhvdGhlci5tX2ZpcnN0UmFk
aXVzKQogICAgICAgICAsIG1fc2Vjb25kUmFkaXVzKG90aGVyLm1fc2Vjb25kUmFkaXVzKQogICAg
ICAgICAsIG1fc2hhcGUob3RoZXIubV9zaGFwZSkKQEAgLTI0OCw3ICsyMzcsNyBAQCBwdWJsaWM6
CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRBbmds
ZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fYW5nbGUgPSBXVEZNb3ZlKHZh
bCk7IH0KKyAgICB2b2lkIHNldEFuZ2xlKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1
ZSkgeyBtX2FuZ2xlID0gV1RGTW92ZSh2YWx1ZSk7IH0KIAogICAgIC8vIENyZWF0ZSB0aGUgZ3Jh
ZGllbnQgZm9yIGEgZ2l2ZW4gc2l6ZS4KICAgICBSZWY8R3JhZGllbnQ+IGNyZWF0ZUdyYWRpZW50
KFJlbmRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFNpemUmKTsKQEAgLTI1NiwxMyArMjQ1LDEzIEBA
IHB1YmxpYzoKICAgICBib29sIGVxdWFscyhjb25zdCBDU1NDb25pY0dyYWRpZW50VmFsdWUmKSBj
b25zdDsKIAogcHJpdmF0ZToKLSAgICBDU1NDb25pY0dyYWRpZW50VmFsdWUoQ1NTR3JhZGllbnRS
ZXBlYXQgcmVwZWF0KQorICAgIGV4cGxpY2l0IENTU0NvbmljR3JhZGllbnRWYWx1ZShDU1NHcmFk
aWVudFJlcGVhdCByZXBlYXQpCiAgICAgICAgIDogQ1NTR3JhZGllbnRWYWx1ZShDb25pY0dyYWRp
ZW50Q2xhc3MsIHJlcGVhdCwgQ1NTQ29uaWNHcmFkaWVudCkKICAgICB7CiAgICAgfQogCiAgICAg
Q1NTQ29uaWNHcmFkaWVudFZhbHVlKGNvbnN0IENTU0NvbmljR3JhZGllbnRWYWx1ZSYgb3RoZXIp
Ci0gICAgICAgIDogQ1NTR3JhZGllbnRWYWx1ZShvdGhlciwgQ29uaWNHcmFkaWVudENsYXNzLCBv
dGhlci5ncmFkaWVudFR5cGUoKSkKKyAgICAgICAgOiBDU1NHcmFkaWVudFZhbHVlKG90aGVyLCBD
b25pY0dyYWRpZW50Q2xhc3MpCiAgICAgICAgICwgbV9hbmdsZShvdGhlci5tX2FuZ2xlKQogICAg
IHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5jcHAKaW5kZXggMjgxYmNjZTkyOGJlNjA5MGRlZjdkOWY2MTYyNDhk
OGI5ZDQ1ZmI0MS4uZmIwNDJjNzgzOWFjYmY1N2UzMGI3OTNhYzVhZmFhZmE0YzRiMDg3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmNwcApAQCAtMTAyMSw5ICsxMDIxLDkgQEAgc3RhdGljIGJvb2wgY29uc3VtZURlcHJl
Y2F0ZWRHcmFkaWVudENvbG9yU3RvcChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTR3IK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdG9wLm1fcG9zaXRpb24g
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBvc2l0aW9uLCBDU1NVbml0
VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgc3RvcC5tX2NvbG9yID0gY29uc3VtZURlcHJlY2F0ZWRH
cmFkaWVudFN0b3BDb2xvcihhcmdzLCBjc3NQYXJzZXJNb2RlKTsKLSAgICByZXR1cm4gc3RvcC5t
X2NvbG9yICYmIGFyZ3MuYXRFbmQoKTsKKyAgICBzdG9wLnBvc2l0aW9uID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwb3NpdGlvbiwgQ1NTVW5pdFR5cGU6OkNTU19OVU1C
RVIpOworICAgIHN0b3AuY29sb3IgPSBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50U3RvcENvbG9y
KGFyZ3MsIGNzc1BhcnNlck1vZGUpOworICAgIHJldHVybiBzdG9wLmNvbG9yICYmIGFyZ3MuYXRF
bmQoKTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRHcmFk
aWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1v
ZGUpCkBAIC0xMDQxLDExICsxMDQxLDExIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1
bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTCiAgICAg
YXV0byBwb2ludCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRQb2ludChhcmdzLCB0cnVlKTsK
ICAgICBpZiAoIXBvaW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXN1bHQtPnNl
dEZpcnN0WChwb2ludC5jb3B5UmVmKCkpOworICAgIHJlc3VsdC0+c2V0Rmlyc3RYKFdURk1vdmUo
cG9pbnQpKTsKICAgICBwb2ludCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRQb2ludChhcmdz
LCBmYWxzZSk7CiAgICAgaWYgKCFwb2ludCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmVzdWx0LT5zZXRGaXJzdFkocG9pbnQuY29weVJlZigpKTsKKyAgICByZXN1bHQtPnNldEZpcnN0
WShXVEZNb3ZlKHBvaW50KSk7CiAKICAgICBpZiAoIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRl
c3BhY2UoYXJncykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTA1NSwxNyArMTA1NSwx
NyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTUwogICAgICAgICBhdXRvIHJhZGl1cyA9IGNvbnN1
bWVOdW1iZXIoYXJncywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgaWYgKCFyYWRp
dXMgfHwgIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1
ZT4ocmVzdWx0LmdldCgpKS0+c2V0Rmlyc3RSYWRpdXMocmFkaXVzLmNvcHlSZWYoKSk7CisgICAg
ICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KHJlc3VsdC5nZXQoKSktPnNldEZp
cnN0UmFkaXVzKFdURk1vdmUocmFkaXVzKSk7CiAgICAgfQogCiAgICAgcG9pbnQgPSBjb25zdW1l
RGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYXJncywgdHJ1ZSk7CiAgICAgaWYgKCFwb2ludCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRYKHBvaW50LmNvcHlS
ZWYoKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRYKFdURk1vdmUocG9pbnQpKTsKICAgICBwb2lu
dCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRQb2ludChhcmdzLCBmYWxzZSk7CiAgICAgaWYg
KCFwb2ludCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRZ
KHBvaW50LmNvcHlSZWYoKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRZKFdURk1vdmUocG9pbnQp
KTsKIAogICAgIC8vIEZvciByYWRpYWwgZ3JhZGllbnRzIG9ubHksIHdlIG5vdyBleHBlY3QgdGhl
IHNlY29uZCByYWRpdXMuCiAgICAgaWYgKGlzRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KSB7CkBA
IC0xMDc0LDk0ICsxMDc0LDc4IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXBy
ZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTCiAgICAgICAgIGF1
dG8gcmFkaXVzID0gY29uc3VtZU51bWJlcihhcmdzLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwog
ICAgICAgICBpZiAoIXJhZGl1cykKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPihyZXN1bHQuZ2V0KCkpLT5zZXRTZWNv
bmRSYWRpdXMocmFkaXVzLmNvcHlSZWYoKSk7CisgICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdy
YWRpZW50VmFsdWU+KHJlc3VsdC5nZXQoKSktPnNldFNlY29uZFJhZGl1cyhXVEZNb3ZlKHJhZGl1
cykpOwogICAgIH0KIAogICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3A7CiAgICAgd2hpbGUg
KGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpIHsKICAgICAgICAgaWYgKCFj
b25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKGFyZ3MsIHN0b3AsIGNzc1BhcnNlck1v
ZGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJlc3VsdC0+YWRkU3Rv
cChzdG9wKTsKKyAgICAgICAgcmVzdWx0LT5hZGRTdG9wKFdURk1vdmUoc3RvcCkpOwogICAgIH0K
IAogICAgIHJlc3VsdC0+ZG9uZUFkZGluZ1N0b3BzKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGJvb2wgY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NHcmFkaWVudFZhbHVl
JiBncmFkaWVudCkKK3N0YXRpYyBib29sIGNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgbW9kZSwgQ1NTR3JhZGllbnRWYWx1
ZSYgZ3JhZGllbnQpCiB7CiAgICAgYm9vbCBzdXBwb3J0c0NvbG9ySGludHMgPSBncmFkaWVudC5n
cmFkaWVudFR5cGUoKSA9PSBDU1NMaW5lYXJHcmFkaWVudCB8fCBncmFkaWVudC5ncmFkaWVudFR5
cGUoKSA9PSBDU1NSYWRpYWxHcmFkaWVudCB8fCBncmFkaWVudC5ncmFkaWVudFR5cGUoKSA9PSBD
U1NDb25pY0dyYWRpZW50OwogICAgIAotICAgIGJvb2wgaXNDb25pY0dyYWRpZW50ID0gZ3JhZGll
bnQuZ3JhZGllbnRUeXBlKCkgPT0gQ1NTQ29uaWNHcmFkaWVudDsKKyAgICBhdXRvIGNvbnN1bWVT
dG9wUG9zaXRpb24gPSBbJl0geworICAgICAgICByZXR1cm4gZ3JhZGllbnQuZ3JhZGllbnRUeXBl
KCkgPT0gQ1NTQ29uaWNHcmFkaWVudAorICAgICAgICAgICAgPyBjb25zdW1lQW5nbGVPclBlcmNl
bnQocmFuZ2UsIG1vZGUsIFZhbHVlUmFuZ2VBbGwsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCkKKyAg
ICAgICAgICAgIDogY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgbW9kZSwgVmFsdWVSYW5n
ZUFsbCk7CisgICAgfTsKIAogICAgIC8vIFRoZSBmaXJzdCBjb2xvciBzdG9wIGNhbm5vdCBiZSBh
IGNvbG9yIGhpbnQuCiAgICAgYm9vbCBwcmV2aW91c1N0b3BXYXNDb2xvckhpbnQgPSB0cnVlOwog
ICAgIGRvIHsKLSAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcDsKLSAgICAgICAgc3Rv
cC5tX2NvbG9yID0gY29uc3VtZUNvbG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKLSAgICAgICAg
Ly8gVHdvIGhpbnRzIGluIGEgcm93IGFyZSBub3QgYWxsb3dlZC4KLSAgICAgICAgaWYgKCFzdG9w
Lm1fY29sb3IgJiYgKCFzdXBwb3J0c0NvbG9ySGludHMgfHwgcHJldmlvdXNTdG9wV2FzQ29sb3JI
aW50KSkKKyAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcCB7IGNvbnN1bWVDb2xvcihy
YW5nZSwgbW9kZSksIGNvbnN1bWVTdG9wUG9zaXRpb24oKSwgeyB9IH07CisgICAgICAgIGlmICgh
c3RvcC5jb2xvciAmJiAhc3RvcC5wb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIHByZXZpb3VzU3RvcFdhc0NvbG9ySGludCA9ICFzdG9wLm1fY29s
b3I7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFRoaXMgYm9vbGVhbiBj
b3VsZCBiZSByZW1vdmVkLiBOdWxsIGNoZWNraW5nIGNvbG9yIHdvdWxkIGJlIHN1ZmZpY2llbnQu
Ci0gICAgICAgIHN0b3AuaXNNaWRwb2ludCA9ICFzdG9wLm1fY29sb3I7CiAKLSAgICAgICAgaWYg
KGlzQ29uaWNHcmFkaWVudCkKLSAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNvbnN1bWVB
bmdsZU9yUGVyY2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCwgVW5pdGxl
c3NRdWlyazo6Rm9yYmlkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RvcC5tX3Bvc2l0
aW9uID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVS
YW5nZUFsbCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXN0b3AubV9jb2xvciAmJiAhc3RvcC5t
X3Bvc2l0aW9uKQorICAgICAgICAvLyBUd28gY29sb3IgaGludHMgaW4gYSByb3cgYXJlIG5vdCBh
bGxvd2VkLgorICAgICAgICBpZiAoIXN0b3AuY29sb3IgJiYgKCFzdXBwb3J0c0NvbG9ySGludHMg
fHwgcHJldmlvdXNTdG9wV2FzQ29sb3JIaW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcHJldmlvdXNTdG9wV2FzQ29sb3JIaW50ID0gIXN0b3AuY29sb3I7CiAKLSAgICAg
ICAgZ3JhZGllbnQuYWRkU3RvcChzdG9wKTsKLQotICAgICAgICBpZiAoIXN0b3AubV9jb2xvciB8
fCAhc3RvcC5tX3Bvc2l0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ1NT
R3JhZGllbnRDb2xvclN0b3Agc2Vjb25kU3RvcDsKLSAgICAgICAgaWYgKGlzQ29uaWNHcmFkaWVu
dCkKLSAgICAgICAgICAgIHNlY29uZFN0b3AubV9wb3NpdGlvbiA9IGNvbnN1bWVBbmdsZU9yUGVy
Y2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCwgVW5pdGxlc3NRdWlyazo6
Rm9yYmlkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2Vjb25kU3RvcC5tX3Bvc2l0aW9u
ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZUFsbCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2Vjb25kU3RvcC5tX3Bvc2l0aW9uKQotICAg
ICAgICAgICAgZ3JhZGllbnQuYWRkU3RvcChzZWNvbmRTdG9wKTsKLSAgICAgICAgCisgICAgICAg
IC8vIFN0b3BzIHdpdGggYm90aCBhIGNvbG9yIGFuZCBhIHBvc2l0aW9uIGNhbiBoYXZlIGEgc2Vj
b25kIHBvc2l0aW9uLCB3aGljaCBzaGFyZXMgdGhlIHNhbWUgY29sb3IuCisgICAgICAgIGlmIChz
dG9wLmNvbG9yICYmIHN0b3AucG9zaXRpb24pIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHNlY29u
ZFBvc2l0aW9uID0gY29uc3VtZVN0b3BQb3NpdGlvbigpKSB7CisgICAgICAgICAgICAgICAgZ3Jh
ZGllbnQuYWRkU3RvcChDU1NHcmFkaWVudENvbG9yU3RvcCB7IHN0b3AgfSk7CisgICAgICAgICAg
ICAgICAgc3RvcC5wb3NpdGlvbiA9IFdURk1vdmUoc2Vjb25kUG9zaXRpb24pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGdyYWRpZW50LmFkZFN0b3AoV1RGTW92ZShzdG9wKSk7
CiAgICAgfSB3aGlsZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOwog
Ci0gICAgZ3JhZGllbnQuZG9uZUFkZGluZ1N0b3BzKCk7Ci0KICAgICAvLyBUaGUgbGFzdCBjb2xv
ciBzdG9wIGNhbm5vdCBiZSBhIGNvbG9yIGhpbnQuCiAgICAgaWYgKHByZXZpb3VzU3RvcFdhc0Nv
bG9ySGludCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gTXVzdCBoYXZlIDIgb3Ig
bW9yZSBzdG9wcyB0byBiZSB2YWxpZC4KLSAgICByZXR1cm4gZ3JhZGllbnQuc3RvcENvdW50KCkg
Pj0gMjsKKyAgICAvLyBNdXN0IGhhdmUgdHdvIG9yIG1vcmUgc3RvcHMgdG8gYmUgdmFsaWQuCisg
ICAgaWYgKCFncmFkaWVudC5oYXNBdExlYXN0VHdvU3RvcHMoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZ3JhZGllbnQuZG9uZUFkZGluZ1N0b3BzKCk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3Jh
ZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCiB7Ci0gICAgUmVmUHRyPENTU1JhZGlh
bEdyYWRpZW50VmFsdWU+IHJlc3VsdCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShy
ZXBlYXRpbmcsIENTU1ByZWZpeGVkUmFkaWFsR3JhZGllbnQpOworICAgIGF1dG8gcmVzdWx0ID0g
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUHJlZml4ZWRSYWRp
YWxHcmFkaWVudCk7CisKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclg7CiAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJZOwogICAgIGNvbnN1bWVPbmVPclR3
b1ZhbHVlZFBvc2l0aW9uKGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJp
ZCwgY2VudGVyWCwgY2VudGVyWSk7CiAgICAgaWYgKChjZW50ZXJYIHx8IGNlbnRlclkpICYmICFj
b25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIHJlc3VsdC0+c2V0Rmlyc3RYKGNlbnRlclguY29weVJlZigpKTsKLSAgICBy
ZXN1bHQtPnNldEZpcnN0WShjZW50ZXJZLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRTZWNv
bmRYKGNlbnRlclguY29weVJlZigpKTsKLSAgICByZXN1bHQtPnNldFNlY29uZFkoY2VudGVyWS5j
b3B5UmVmKCkpOwotCiAgICAgYXV0byBzaGFwZSA9IGNvbnN1bWVJZGVudDxDU1NWYWx1ZUNpcmNs
ZSwgQ1NTVmFsdWVFbGxpcHNlPihhcmdzKTsKICAgICBhdXRvIHNpemVLZXl3b3JkID0gY29uc3Vt
ZUlkZW50PENTU1ZhbHVlQ2xvc2VzdFNpZGUsIENTU1ZhbHVlQ2xvc2VzdENvcm5lciwgQ1NTVmFs
dWVGYXJ0aGVzdFNpZGUsIENTU1ZhbHVlRmFydGhlc3RDb3JuZXIsIENTU1ZhbHVlQ29udGFpbiwg
Q1NTVmFsdWVDb3Zlcj4oYXJncyk7CiAgICAgaWYgKCFzaGFwZSkKICAgICAgICAgc2hhcGUgPSBj
b25zdW1lSWRlbnQ8Q1NTVmFsdWVDaXJjbGUsIENTU1ZhbHVlRWxsaXBzZT4oYXJncyk7Ci0gICAg
cmVzdWx0LT5zZXRTaGFwZShzaGFwZS5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0U2l6aW5n
QmVoYXZpb3Ioc2l6ZUtleXdvcmQuY29weVJlZigpKTsKIAogICAgIC8vIE9yLCB0d28gbGVuZ3Ro
cyBvciBwZXJjZW50YWdlcwogICAgIGlmICghc2hhcGUgJiYgIXNpemVLZXl3b3JkKSB7CkBAIC0x
MTcyLDE2ICsxMTU2LDI0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJnCiAgICAgICAgICAgICBp
ZiAoIXZlcnRpY2FsU2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgICAgIGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgICAg
ICByZXN1bHQtPnNldEVuZEhvcml6b250YWxTaXplKGhvcml6b250YWxTaXplLmNvcHlSZWYoKSk7
Ci0gICAgICAgICAgICByZXN1bHQtPnNldEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29w
eVJlZigpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RW5kSG9yaXpvbnRhbFNpemUoV1RGTW92
ZShob3Jpem9udGFsU2l6ZSkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRFbmRWZXJ0aWNhbFNp
emUoV1RGTW92ZSh2ZXJ0aWNhbFNpemUpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7CiAgICAgfQotICAgIGlm
ICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCAqcmVzdWx0
KSkKKworICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJN
b2RlLCByZXN1bHQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmVzdWx0LT5zZXRGaXJzdFgoY2VudGVyWC5jb3B5UmVmKCkpOworICAgIHJlc3Vs
dC0+c2V0Rmlyc3RZKGNlbnRlclkuY29weVJlZigpKTsKKyAgICByZXN1bHQtPnNldFNlY29uZFgo
V1RGTW92ZShjZW50ZXJYKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRZKFdURk1vdmUoY2VudGVy
WSkpOworICAgIHJlc3VsdC0+c2V0U2hhcGUoV1RGTW92ZShzaGFwZSkpOworICAgIHJlc3VsdC0+
c2V0U2l6aW5nQmVoYXZpb3IoV1RGTW92ZShzaXplS2V5d29yZCkpOworCisgICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0KTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlh
bEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFy
c2VyTW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQpAQCAtMTI0MiwxMSArMTIzNCw2
IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVSYWRpYWxHcmFkaWVudChDU1NQYXJz
ZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzCiAgICAgICAgIHx8ICh2ZXJ0aWNhbFNpemUgJiYg
dmVydGljYWxTaXplLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXN1bHQtPnNldFNoYXBlKHNoYXBlLmNvcHlSZWYo
KSk7Ci0gICAgcmVzdWx0LT5zZXRTaXppbmdCZWhhdmlvcihzaXplS2V5d29yZC5jb3B5UmVmKCkp
OwotICAgIHJlc3VsdC0+c2V0RW5kSG9yaXpvbnRhbFNpemUoaG9yaXpvbnRhbFNpemUuY29weVJl
ZigpKTsKLSAgICByZXN1bHQtPnNldEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29weVJl
ZigpKTsKLQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY2VudGVyWDsKICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclk7CiAgICAgaWYgKGFyZ3MucGVlaygpLmlkKCkg
PT0gQ1NTVmFsdWVBdCkgewpAQCAtMTI2Nyw2ICsxMjU0LDEyIEBAIHN0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBD
U1NQYXJzCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghY29uc3VtZUdyYWRpZW50
Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCAqcmVzdWx0KSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXN1bHQtPnNldFNoYXBlKFdURk1vdmUoc2hhcGUpKTsKKyAgICBy
ZXN1bHQtPnNldFNpemluZ0JlaGF2aW9yKFdURk1vdmUoc2l6ZUtleXdvcmQpKTsKKyAgICByZXN1
bHQtPnNldEVuZEhvcml6b250YWxTaXplKFdURk1vdmUoaG9yaXpvbnRhbFNpemUpKTsKKyAgICBy
ZXN1bHQtPnNldEVuZFZlcnRpY2FsU2l6ZShXVEZNb3ZlKHZlcnRpY2FsU2l6ZSkpOworCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTI5MCw4ICsxMjgzLDggQEAgc3RhdGljIFJlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3Ms
IENTU1BhcnMKICAgICAgICAgICAgIGVuZFggPSBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVMZWZ0LCBD
U1NWYWx1ZVJpZ2h0PihhcmdzKTsKICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdC0+c2V0Rmly
c3RYKGVuZFguY29weVJlZigpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkoZW5kWS5jb3B5
UmVmKCkpOworICAgICAgICByZXN1bHQtPnNldEZpcnN0WChXVEZNb3ZlKGVuZFgpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRGaXJzdFkoV1RGTW92ZShlbmRZKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgZXhwZWN0Q29tbWEgPSBmYWxzZTsKICAgICB9CkBAIC0xMzE0LDI0ICsxMzA3LDI0IEBAIHN0
YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDb25pY0dyYWRpZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIGFyZ3MsIENTU1BhcnNlCiAgICAgICAgICAgICBhdXRvIGFuZ2xlID0gY29uc3VtZUFu
Z2xlKGFyZ3MsIGNvbnRleHQubW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKICAgICAgICAg
ICAgIGlmICghYW5nbGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
ICAgICByZXN1bHQtPnNldEFuZ2xlKGFuZ2xlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAg
ICAgcmVzdWx0LT5zZXRBbmdsZShXVEZNb3ZlKGFuZ2xlKSk7CiAgICAgICAgICAgICBleHBlY3RD
b21tYSA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnN1bWVJ
ZGVudDxDU1NWYWx1ZUF0PihhcmdzKSkgewogICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjZW50ZXJYOwogICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
ZW50ZXJZOwogICAgICAgICAgICAgY29uc3VtZVBvc2l0aW9uKGFyZ3MsIGNvbnRleHQubW9kZSwg
VW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBQb3NpdGlvblN5bnRheDo6UG9zaXRpb24sIGNlbnRlclgs
IGNlbnRlclkpOwogICAgICAgICAgICAgaWYgKCEoY2VudGVyWCAmJiBjZW50ZXJZKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBy
ZXN1bHQtPnNldEZpcnN0WChjZW50ZXJYLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICByZXN1bHQt
PnNldEZpcnN0WShjZW50ZXJZLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAg
ICAgLy8gUmlnaHQgbm93LCBjb25pYyBncmFkaWVudHMgaGF2ZSB0aGUgc2FtZSBzdGFydCBhbmQg
ZW5kIGNlbnRlcnMuCi0gICAgICAgICAgICByZXN1bHQtPnNldFNlY29uZFgoY2VudGVyWC5jb3B5
UmVmKCkpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRTZWNvbmRZKGNlbnRlclkuY29weVJlZigp
KTsKLSAgICAKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U2Vjb25kWChXVEZNb3ZlKGNlbnRlclgp
KTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U2Vjb25kWShXVEZNb3ZlKGNlbnRlclkpKTsKKwog
ICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggNWQwOGU5ZTQ5NDVlMmQ5M2Nk
YjhkY2EyMDVmYzAzMzFjYmVmZjhmMS4uZjhjNGRjYzQxNGEyN2IxODEwY2FhNDhkMWZhZTU1OWZh
MTc0NTdjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0y
MDU1LDE5ICsyMDU1LDE5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dFNlbGVjdGlvblJhbmdlRm9yQmluZGluZ3MoaW50IHN0YXJ0LCBpbnQKIHN0YXRpYyBSZWY8Q1NT
TGluZWFyR3JhZGllbnRWYWx1ZT4gYXV0b0ZpbGxTdHJvbmdQYXNzd29yZE1hc2tJbWFnZSgpCiB7
CiAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3AgZmlyc3RTdG9wOwotICAgIGZpcnN0U3RvcC5tX2Nv
bG9yID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKENvbG9yOjpi
bGFjayk7Ci0gICAgZmlyc3RTdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZVZhbHVlKDUwLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIGZp
cnN0U3RvcC5jb2xvciA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1
ZShDb2xvcjo6YmxhY2spOworICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoNTAsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7
CiAKICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzZWNvbmRTdG9wOwotICAgIHNlY29uZFN0b3Au
bV9jb2xvciA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShDb2xv
cjo6dHJhbnNwYXJlbnQpOwotICAgIHNlY29uZFN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoMTAwLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRB
R0UpOworICAgIHNlY29uZFN0b3AuY29sb3IgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUNvbG9yVmFsdWUoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBzZWNvbmRTdG9wLnBvc2l0
aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgxMDAsIENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRSk7CiAKICAgICBhdXRvIGdyYWRpZW50ID0gQ1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZTo6Y3JlYXRlKENTU0dyYWRpZW50UmVwZWF0OjpOb25SZXBlYXRpbmcsIENTU0dy
YWRpZW50VHlwZTo6Q1NTTGluZWFyR3JhZGllbnQpOwogICAgIGdyYWRpZW50LT5zZXRBbmdsZShD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDkwLCBDU1NVbml0VHlwZTo6Q1NT
X0RFRykpOwotICAgIGdyYWRpZW50LT5hZGRTdG9wKGZpcnN0U3RvcCk7Ci0gICAgZ3JhZGllbnQt
PmFkZFN0b3Aoc2Vjb25kU3RvcCk7CisgICAgZ3JhZGllbnQtPmFkZFN0b3AoV1RGTW92ZShmaXJz
dFN0b3ApKTsKKyAgICBncmFkaWVudC0+YWRkU3RvcChXVEZNb3ZlKHNlY29uZFN0b3ApKTsKKyAg
ICBncmFkaWVudC0+ZG9uZUFkZGluZ1N0b3BzKCk7CiAgICAgZ3JhZGllbnQtPnJlc29sdmVSR0JD
b2xvcnMoKTsKLQogICAgIHJldHVybiBncmFkaWVudDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392533</attachid>
            <date>2020-03-04 21:00:30 -0800</date>
            <delta_ts>2020-03-04 21:00:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208417-20200304210025.patch</filename>
            <type>text/plain</type>
            <size>75506</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3ODk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzhmZDRlNjM5ODQ0YjQ2
MTgyY2ViN2RjZTMzODMyZmU0OTk0YjFmMy4uODhhMTRlNmJlNWM2YmViZGY4YTMzMTc2Y2UwMTk1
NDNkY2U2YjYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAyMC0wMi0yOSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgZ3JhZGllbnQg
cGFyc2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA4NDE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAg
IC0gVXNlIE9wdGlvbmFsPD4gYW5kIGludmFsaWQgQ29sb3IgdG8gcmVwcmVzZW50IHVuc3BlY2lm
aWVkIHBvc2l0aW9ucyBhbmQgY29sb3JzLgorICAgICAgICAgIFRoaXMgaXMgc2ltcGxlciBhbmQg
ZWFzaWVyIHRvIGdldCByaWdodCB0aGFuIHNlcGFyYXRlIGJvb2xlYW5zLgorICAgICAgICAtIFNp
bXBsaWZpZWQgc29ydGluZyBvZiBzdG9wcyBpbiBsZWdhY3kgZ3JhZGllbnRzIHRvIHJlbW92ZSBl
eHRyYSBDU1MgdmFsdWUKKyAgICAgICAgICBldmFsdWF0aW9uIGFuZCB1bm5lY2Vzc2FyeSAic29y
dCBpbiBwbGFjZSIgdGVjaG5pcXVlLgorICAgICAgICAtIFJld3JvdGUgZXF1YWxzIGZ1bmN0aW9u
cyBmb3IgQ1NTIGdyYWRpZW50IHZhbHVlIGNsYXNzZXMuIFRoZSBuZXcgcGF0dGVybiBpcworICAg
ICAgICAgIHRvIGNvbXBhcmUgYWxsIHRoZSBkYXRhIG1lbWJlcnMgdGhhdCBob2xkIHBhcnNlZCBD
U1MgZGF0YSwgaGFuZGxpbmcgbnVsbAorICAgICAgICAgIGNvcnJlY3RseSwgc2luY2UgdGhlIHBh
cnNlciB3b24ndCBzZXQgaW5hcHByb3ByaWF0ZSBvbmVzLiBUaGUgb2xkIGNvZGUgaGFkCisgICAg
ICAgICAgY29tcGxleCBsb2dpYyB0byBvbmx5IGNvbXBhcmUgY2VydGFpbiBkYXRhIG1lbWJlcnMs
IHdoaWNoIHdhcyB1bm5lY2Vzc2FyeQorICAgICAgICAgIGFuZCBoYXJkIHRvIHJlYWQgdG8gdGVs
bCBpZiBpdCB3YXMgY29ycmVjdC4KKyAgICAgICAgLSBBZGRlZCBzb21lIG1vcmUgdXNlIG9mIFdU
Rk1vdmUgdG8gY3V0IGRvd24gb24gcmVmZXJlbmNlIGNvdW50IGNodXJuLgorCisgICAgICAgICog
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRW
YWx1ZTo6aW1hZ2UpOiBSZW1vdmVkIHVubmVlZGVkIGNhbGwgdG8gZ2V0KCkuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wYXJlU3RvcHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3Jh
ZGllbnRWYWx1ZTo6c29ydFN0b3BzSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6cmVzb2x2ZVN0b3BDb2xvcnMpOiBUYWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdl
IGtub3cgYmVjYXVzZQorICAgICAgICBvZiBwYXJzaW5nIHJ1bGVzIHRoYXQgdGhlIG9ubHkgc3Rv
cHMgd2l0aG91dCBjb2xvcnMgYXJlIG1pZHBvaW50cyB0byBkcmFzdGljYWxseQorICAgICAgICBz
aW1wbGlmeSB0aGlzIGZ1bmN0aW9uIHRvIGEgdHJpdmlhbCBsb29wLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTR3JhZGllbnRWYWx1ZTo6aGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQgY29uc3QpOiBB
ZGRlZC4KKyAgICAgICAgQ2hlY2tzIHRvIHNlZSBpZiBhbnkgb2YgdGhlIHN0b3AgY29sb3JzIGlz
IGRlcml2ZWQgZnJvbSB0aGUgZWxlbWVudC4gVGhlIG9sZAorICAgICAgICBjb2RlIGNvbmZ1c2lu
Z2x5IHdvdWxkIHN0b3JlIHRoZSBhbnN3ZXIgdG8gdGhpcyBpbiB0aGUgc3RvcCwgYnV0IG9ubHkg
aW4gdGhlCisgICAgICAgIGZpcnN0IHN0b3Agd2l0aCB0aGlzIHByb3BlcnR5LiBDb21wdXRpbmcg
aXQgd2l0aG91dCBtb2RpZnlpbmcgdGhlIHN0b3AsIGFuZAorICAgICAgICBtZW1vaXppbmcgaXQg
aW4gdGhlIGdyYWRpZW50IHByZXNlcnZlcyB0aGUgc2FtZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJp
c3RpY3MKKyAgICAgICAgYXMgYmVmb3JlIHdpdGhvdXQgcmVxdWlyaW5nIGEgYm9vbGVhbiBpbiBl
YWNoIHN0b3AgaW4gdGhlIHN0b3BzIHZlY3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRp
ZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKTogQ2FsbCB0aGUgbmV3CisgICAg
ICAgIGhhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50IGZ1bmN0aW9uIGluc3RlYWQgb2YgaGF2aW5n
IHRoZSBsb2dpYyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6TGluZWFyR3JhZGllbnRBZGFwdGVy
Ojpub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNpZGVSYW5nZSk6CisgICAgICAgIFVwZGF0
ZSBzaW5jZSBHcmFkaWVudFN0b3Agbm93IGhhcyBvcHRpb25hbCBvZmZzZXRzLiBCeSB0aGUgdGlt
ZSB0aGlzCisgICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCB0aGV5IGFyZSBhbGwgZ3VhcmFudGVl
ZCB0byBiZSBmaWxsZWQgaW4sIHNvIHdlIGNhbgorICAgICAgICBqdXN0IHVzZSB0aGUgKiBvcGVy
YXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlJhZGlhbEdyYWRpZW50QWRhcHRlcjo6bm9ybWFsaXpl
U3RvcHNBbmRFbmRwb2ludHNPdXRzaWRlUmFuZ2UpOgorICAgICAgICBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbmljR3JhZGllbnRBZGFwdGVyOjpub3JtYWxpemVTdG9wc0FuZEVuZHBvaW50
c091dHNpZGVSYW5nZSk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3Jh
ZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKTogTW92ZWQgdGhlIHNvcnRpbmcgb2Ygc3RvcHMgZm9y
CisgICAgICAgIHRoZSBkZXByZWNhdGVkIGdyYWRpZW50cyBoZXJlLiBBbHNvIHVwZGF0ZWQgc2lu
Y2UgR3JhZGllbnQ6OkNvbG9yU3RvcAorICAgICAgICBubyBsb25nZXIgdXNlcyAibV8iIHByZWZp
eGVzIG9uIGl0cyBwdWJsaWMgc3RydWN0IGRhdGEgbWVtYmVycy4gU29tZQorICAgICAgICBzaW1w
bGlmaWNhdGlvbiBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0ICJz
cGVjaWZpZWQiCisgICAgICAgIHRvIHRydWUgc2luY2UgaXQncyBubyBsb25nZXIgYSBzZXBhcmF0
ZSBib29sZWFuLgorICAgICAgICAoV2ViQ29yZTo6cG9zaXRpb25Gcm9tVmFsdWUpOiBIYW5kbGUg
YSBudWxsIHBvaW50ZXIgZm9yIHZhbHVlIGJ5IHJldHVybmluZworICAgICAgICAwLCB3aGljaCBp
cyB3aGF0IHRoZSBjYWxsZXIgd2FzIGRvaW5nIGV4cGxpY2l0bHkgYmVmb3JlLiBVc2UgZmxvYXQK
KyAgICAgICAgaW5zdGVhZCBvZiBpbnQgZm9yIHNvbWUgaW50ZXJuYWwgY29tcHV0YXRpb25zIHRo
YXQgd2VyZSBtaXhpbmcgdGhlIHR3bworICAgICAgICBmb3Igbm8gZ29vZCByZWFzb24uCisgICAg
ICAgIChXZWJDb3JlOjpjb21wdXRlRW5kUG9pbnQpOiBSZW1vdmVkIG51bGwgY2hlY2tzIG5vdyB0
aGF0IHBvc2l0aW9uRnJvbVZhbHVlCisgICAgICAgIGRvZXMgdGhlbSBmb3IgdXMsIHR1cm5pbmcg
dGhpcyBpbnRvIGEgb25lLWxpbmVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTR3JhZGllbnRWYWx1
ZTo6aXNDYWNoZWFibGUgY29uc3QpOiBVc2UgaGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjprbm93blRvQmVPcGFxdWUgY29uc3Qp
OiBSZW1vdmVkIHVubm5lY2Vzc2FyeQorICAgICAgICBjaGVja2luZyB0aGUgY29sb3IgYm90aCBi
ZWZvcmUgYW5kIGFmdGVyIHdoZW4gYSBjb2xvciBmaWx0ZXIgaXMgaW52b2x2ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjplcXVhbHMgY29uc3QpOiBBZGRlZC4gU2hhcmVk
IGJ5IGFsbCB0aGUgZXF1YWxzCisgICAgICAgIGZ1bmN0aW9ucyBmb3IgZGVyaXZlZCBjbGFzc2Vz
LgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kR3JhZGllbnRTdG9wcyk6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgdG8gQ1NTR3JhZGllbnRDb2xvclN0b3AuCisgICAgICAgIChXZWJDb3JlOjphcHBlbmRT
cGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dCk6IEFkZGVkIHRlbXBsYXRlIGhlbHBlcgor
ICAgICAgICBmb3Igd3JpdGluZyB0d28gb3B0aW9uYWwgQ1NTIHZhbHVlcyB3aXRoIGEgc3BhY2Ug
YmV0d2Vlbi4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQ29sb3JTdG9wKTogRGl0dG8uIEFsc28g
Y29udmVydGVkIHRvIG5vbi1tZW1iZXIgZnVuY3Rpb24sCisgICAgICAgIHJlbW92ZWQgdW5uZWVk
ZWQgaXNNaWRwb2ludCBjaGVjaywgdXNlIGFwcGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQ
dHJUZXh0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3VzdG9t
Q1NTVGV4dCBjb25zdCk6IENhbGwgZnVuY3Rpb24KKyAgICAgICAgbWVtYmVycyBzbyB3ZSBkb24n
dCBoYXZlIHRvIGV4cG9zZSBDU1NHcmFkaWVudFZhbHVlIGRhdGEgbWVtYmVycyBhcworICAgICAg
ICBwcm90ZWN0ZWQgdGhpbmdzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IGRlcml2ZWQgY2xhc3Nl
cy4gU29tZSBvdGhlcgorICAgICAgICBzbWFsbCByZWZhY3RvcmluZywgc3VjaCBhcyBnZXR0aW5n
IHJpZCBvZiBleHRyYSBib29sZWFuIHdyb3RlRmlyc3RTdG9wLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBVcGRhdGVkIHRvIHVzZQor
ICAgICAgICBmdW5jdGlvbiBtZW1iZXJzIGluc3RlYWQgb2YgcHJvdGVjdGVkIGRhdGEgbWVtYmVy
cy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0xpbmVhckdyYWRpZW50VmFsdWU6OmVxdWFscyBjb25z
dCk6IENvbXBhcmUgYWxsIGRhdGEKKyAgICAgICAgbWVtYmVycyBhbmQgdXNlIENTU0dyYWRpZW50
VmFsdWU6OmVxdWFscywgbWFrZXMgdGhpcyBhIDEtbGluZXIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0IGNvbnN0KTogQ2FsbCBmdW5jdGlv
bgorICAgICAgICBtZW1iZXJzIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgdXNlIGFwcGVuZFNwYWNl
U2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUmFkaWFs
R3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmVxdWFscyBjb25zdCk6IENvbXBhcmUgYWxsIGRhdGEK
KyAgICAgICAgbWVtYmVycyBhbmQgdXNlIENTU0dyYWRpZW50VmFsdWU6OmVxdWFscy4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6
IENhbGwgZnVuY3Rpb24KKyAgICAgICAgbWVtYmVycyBhcyBkZXNjcmliZWQgYWJvdmUgYW5kIHVz
ZSBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NvbmljR3JhZGllbnRWYWx1ZTo6ZXF1YWxzIGNvbnN0KTogQ29tcGFy
ZSBhbGwgZGF0YQorICAgICAgICBtZW1iZXJzIGFuZCB1c2UgQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1
YWxzLCBtYWtlcyB0aGlzIGEgMS1saW5lci4KKworICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZh
bHVlLmg6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25z
LgorICAgICAgICBSZW5hbWVkIENTU0dyYWRpZW50Q29sb3JTdG9wIGRhdGEgbWVtYmVycyB0byBu
b3QgdXNlIG1fIHByZWZpeCBzaW5jZSB0aGlzIGlzCisgICAgICAgIGEgc3RydWN0IHdpdGggcHVi
bGljIGRhdGEgbWVtYmVycywgYW5kIFdlYktpdCBzdHlsZSBzYXlzIG5vdCB0byBkbyB0aGF0IGhl
cmUuCisgICAgICAgIFJlbW92ZWQgbV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50IGFuZCBpc01p
ZHBvaW50IGZyb20gQ1NTR3JhZGllbnRDb2xvclN0b3AsCisgICAgICAgIG1fY29sb3JJc0Rlcml2
ZWRGcm9tRWxlbWVudCBpcyBub3cgc3RvcmVkIGluIHRoZSBncmFkaWVudCwgbm90IHRoZSBjb2xv
ciBzdG9wLAorICAgICAgICBhbmQgbWlkcG9pbnRzIGFyZSBhbnkgY29sb3Igc3RvcCB3aXRoIG51
bGwgY29sb3IuIFJlcGxhY2VkIHRoZQorICAgICAgICBDU1NHcmFkaWVudFZhbHVlOjpzdG9wQ291
bnQgZnVuY3Rpb24sIHdoaWNoIG1peGVkIHNpemVfdCBhbmQgdW5zaWduZWQgdHlwZXMsCisgICAg
ICAgIHdpdGggYSBoYXNUd29TdG9wcyBmdW5jdGlvbiwgd2hpY2ggaXMgYWxsIHRoZSBjYWxsZXIg
bmVlZHMuIENvbnZlcnRlZCB0aGUKKyAgICAgICAgaXNGaXhlZFNpemUsIGZpeGVkU2l6ZSwgaXNQ
ZW5kaW5nLCBhbmQgbG9hZFN1YmltYWdlcyBpbnRvIHN0YXRpYyBtZW1iZXIKKyAgICAgICAgZnVu
Y3Rpb25zOiB0aGV5IGRvbid0IGRvIGFueSB3b3JrIGFuZCBzbyBkb24ndCBuZWVkIGFuIGluc3Rh
bmNlLiBSZW1vdmVkCisgICAgICAgIHRoZSB1bm5lZWRlZCBncmFkaWVudCB0eXBlIGFyZ3VtZW50
IHRvIHRoZSBjbG9uaW5nIGNvbnN0cnVjdG9ycy4gUmVtb3ZlZAorICAgICAgICBtX3N0b3BzU29y
dGVkIGFuZCBhZGRlZCBtX2hhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50IGFuZAorICAgICAgICBo
YXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudC4gQWRkZWQgZ2V0dGVyIGZ1bmN0aW9ucyB0aGF0IGFy
ZSBwcm90ZWN0ZWQgc28KKyAgICAgICAgdGhlIGRhdGEgbWVtYmVycyB0aGVtc2VsdmVzIGNhbiBi
ZSBwcml2YXRlLiBSZW1vdmVkIHNvcnRTdG9wc0lmTmVlZGVkCisgICAgICAgIGFuZCB3cml0ZUNv
bG9yU3RvcC4KKworICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcCk6CisgICAgICAgIFVwZGF0ZWQgZm9yIENTU0dy
YWRpZW50Q29sb3JTdG9wIG1lbWJlciByZW5hbWluZy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudCk6IFVzZQorICAg
ICAgICBtb3JlIFdURk1vdmUgdG8gc2F2ZSBhIGxpdHRsZSBiaXQgb2YgcmVmZXJlbmNlIGNvdW50
IGNodXJuOyBpbiBzb21lIGNhc2VzCisgICAgICAgIHRoYXQgbWVhbnMgbW92aW5nIHRoZSBzZXR0
ZXIgY2FsbHMgdG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gYWZ0ZXIgYWxsCisgICAgICAgIHRo
ZSBlcnJvciBjaGVja2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyk6IERpdHRvLgorICAgICAgICBSZW1vdmVk
IGNvZGUgdG8gc2V0IGlzTWlkcG9pbnQgYW5kIHRoZSBGSVhNRS1ORVdQQVJTRVIgY29tbWVudCB0
aGF0IHNhaWQKKyAgICAgICAgaXQgY291bGQgYmUgcmVtb3ZlZC4gVXNlZCBsYW1iZGEgdG8gY3V0
IGRvd24gb24gcmVwZWF0ZWQgY29kZS4gQ2hhbmdlZAorICAgICAgICBwYXJzaW5nIG9mIHN0b3Bz
IHdpdGggYSBzZWNvbmQgcG9zaXRpb24gdG8gcmVwZWF0IHRoZSBjb2xvciBpbnN0ZWFkIG9mCisg
ICAgICAgIHJlbHlpbmcgb24gbGF0ZXIgY29tcHV0YXRpb24gdG8gcmVwZWF0IGl0OyB0aGlzIGlz
IHJlcXVpcmVkIHNvIHdlIGNhbgorICAgICAgICBhbHdheXMgdHJlYXQgYW4gb21pdHRlZCBjb2xv
ciBhcyBhIG1pZHBvaW50LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVSYWRpYWxHcmFkaWVudCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lTGluZWFyR3JhZGllbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbmljR3JhZGllbnQpOiBEaXR0by4KKworICAgICAgICAq
IGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphdXRvRmlsbFN0
cm9uZ1Bhc3N3b3JkTWFza0ltYWdlKTogVXBkYXRlZCBmb3IgdGhlIHJlbmFtZWQKKyAgICAgICAg
Q1NTR3JhZGllbnRDb2xvclN0b3AgbWVtYmVycywgYWRkZWQgYSBtaXNzaW5nIGNhbGwgdG8gZG9u
ZUFkZGluZ1N0b3BzLAorICAgICAgICBhbmQgdXNlIHNvbWUgV1RGTW92ZSB0byBjdXQgZG93biBv
biByZWZlcmVuY2UgY291bnQgY2h1cm4uCisKIDIwMjAtMDMtMDQgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbVk5FIGxheW91dF0gTW92ZSB2aXN1YWxseSBub24t
ZW1wdHkgY29udGVudCByZXBvcnRpbmcgdG8gUmVuZGVyVHJlZUJ1aWxkZXIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCAwMTRhNTVjYmY0M2M1MTVmMjZkYTYzNzc1
ODcwZTdiY2FjMTAyZWQ0Li45Y2QyMzhmMTBjMGE1YWVjOTZkYjMxY2UzZjNmM2FlYjc2MTI2YzAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC02MywzNCArNjMs
MTYgQEAgUmVmUHRyPEltYWdlPiBDU1NHcmFkaWVudFZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJgogICAgIH0KICAgICBhdXRvIG5ld0ltYWdlID0g
R3JhZGllbnRJbWFnZTo6Y3JlYXRlKGNyZWF0ZUdyYWRpZW50KCp0aGlzLCByZW5kZXJlciwgc2l6
ZSksIHNpemUpOwogICAgIGlmIChjYWNoZWFibGUpCi0gICAgICAgIHNhdmVDYWNoZWRJbWFnZUZv
clNpemUoc2l6ZSwgbmV3SW1hZ2UuZ2V0KCkpOworICAgICAgICBzYXZlQ2FjaGVkSW1hZ2VGb3JT
aXplKHNpemUsIG5ld0ltYWdlKTsKICAgICByZXR1cm4gbmV3SW1hZ2U7CiB9CiAKLS8vIFNob3Vs
ZCBvbmx5IGV2ZXIgYmUgY2FsbGVkIGZvciBkZXByZWNhdGVkIGdyYWRpZW50cy4KLXN0YXRpYyBp
bmxpbmUgYm9vbCBjb21wYXJlU3RvcHMoY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIGEsIGNv
bnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBiKQotewotICAgIGRvdWJsZSBhVmFsID0gYS5tX3Bv
c2l0aW9uLT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgZG91Ymxl
IGJWYWwgPSBiLm1fcG9zaXRpb24tPmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVNQkVS
KTsKLQotICAgIHJldHVybiBhVmFsIDwgYlZhbDsKLX0KLQotdm9pZCBDU1NHcmFkaWVudFZhbHVl
Ojpzb3J0U3RvcHNJZk5lZWRlZCgpCi17Ci0gICAgQVNTRVJUKG1fZ3JhZGllbnRUeXBlID09IENT
U0RlcHJlY2F0ZWRMaW5lYXJHcmFkaWVudCB8fCBtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQpOwotICAgIGlmICghbV9zdG9wc1NvcnRlZCkgewotICAgICAgICBp
ZiAobV9zdG9wcy5zaXplKCkpCi0gICAgICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fc3RvcHMu
YmVnaW4oKSwgbV9zdG9wcy5lbmQoKSwgY29tcGFyZVN0b3BzKTsKLSAgICAgICAgbV9zdG9wc1Nv
cnRlZCA9IHRydWU7Ci0gICAgfQotfQotCiBzdHJ1Y3QgR3JhZGllbnRTdG9wIHsKICAgICBDb2xv
ciBjb2xvcjsKLSAgICBmbG9hdCBvZmZzZXQgeyAwIH07Ci0gICAgYm9vbCBzcGVjaWZpZWQgeyBm
YWxzZSB9OwotICAgIGJvb2wgaXNNaWRwb2ludCB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Zmxv
YXQ+IG9mZnNldDsKKworICAgIGJvb2wgaXNTcGVjaWZpZWQoKSBjb25zdCB7IHJldHVybiBvZmZz
ZXQuaGFzVmFsdWUoKTsgfQorICAgIGJvb2wgaXNNaWRwb2ludCgpIGNvbnN0IHsgcmV0dXJuICFj
b2xvci5pc1ZhbGlkKCk7IH0KIH07CiAKIHN0YXRpYyBpbmxpbmUgUmVmPENTU0dyYWRpZW50VmFs
dWU+IGNsb25lKENTU0dyYWRpZW50VmFsdWUmIHZhbHVlKQpAQCAtMTAzLDM1ICs4NSwzMSBAQCBz
dGF0aWMgaW5saW5lIFJlZjxDU1NHcmFkaWVudFZhbHVlPiBjbG9uZShDU1NHcmFkaWVudFZhbHVl
JiB2YWx1ZSkKICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ29uaWNHcmFkaWVudFZhbHVlPih2YWx1
ZSkuY2xvbmUoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+Ci12b2lkIHJlc29s
dmVTdG9wQ29sb3JzKFZlY3RvcjxDU1NHcmFkaWVudENvbG9yU3RvcCwgMj4mIHN0b3BzLCBGdW5j
dGlvbiYmIGNvbG9yUmVzb2x2ZUZ1bmN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+
IHZvaWQgcmVzb2x2ZVN0b3BDb2xvcnMoVmVjdG9yPENTU0dyYWRpZW50Q29sb3JTdG9wLCAyPiYg
c3RvcHMsIEZ1bmN0aW9uJiYgY29sb3JSZXNvbHZlRnVuY3Rpb24pCiB7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBzdG9wID0g
c3RvcHNbaV07Ci0gICAgICAgIGlmIChzdG9wLmlzTWlkcG9pbnQpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKHN0b3AubV9jb2xvcikKLSAgICAgICAgICAgIHN0b3AubV9yZXNv
bHZlZENvbG9yID0gY29sb3JSZXNvbHZlRnVuY3Rpb24oKnN0b3AubV9jb2xvcik7Ci0gICAgICAg
IGVsc2UgaWYgKGkpIHsKLSAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzU3RvcCA9IHN0b3BzW2kg
LSAxXTsKLSAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c1N0b3AubV9jb2xvcik7Ci0gICAgICAg
ICAgICBzdG9wLm1fY29sb3IgPSBwcmV2aW91c1N0b3AubV9jb2xvcjsKLSAgICAgICAgICAgIHN0
b3AubV9yZXNvbHZlZENvbG9yID0gcHJldmlvdXNTdG9wLm1fcmVzb2x2ZWRDb2xvcjsKLSAgICAg
ICAgfQorICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKSB7CisgICAgICAgIGlmIChzdG9wLmNv
bG9yKQorICAgICAgICAgICAgc3RvcC5yZXNvbHZlZENvbG9yID0gY29sb3JSZXNvbHZlRnVuY3Rp
b24oKnN0b3AuY29sb3IpOwogICAgIH0KIH0KIAotUmVmPENTU0dyYWRpZW50VmFsdWU+IENTU0dy
YWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSkKK2Jvb2wgQ1NTR3JhZGllbnRWYWx1ZTo6aGFzQ29sb3JEZXJpdmVk
RnJvbUVsZW1lbnQoKSBjb25zdAogewotICAgIGJvb2wgY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVu
dCA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgaWYg
KCFzdG9wLmlzTWlkcG9pbnQgJiYgc3RvcC5tX2NvbG9yICYmIFN0eWxlOjpCdWlsZGVyU3RhdGU6
OmlzQ29sb3JGcm9tUHJpbWl0aXZlVmFsdWVEZXJpdmVkRnJvbUVsZW1lbnQoKnN0b3AubV9jb2xv
cikpIHsKLSAgICAgICAgICAgIHN0b3AubV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50ID0gdHJ1
ZTsKLSAgICAgICAgICAgIGNvbG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7CisgICAgaWYgKCFtX2hhc0NvbG9yRGVyaXZlZEZyb21FbGVtZW50KSB7Cisg
ICAgICAgIG1faGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgZm9y
IChhdXRvJiBzdG9wIDogbV9zdG9wcykgeworICAgICAgICAgICAgaWYgKHN0b3AuY29sb3IgJiYg
U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6aXNDb2xvckZyb21QcmltaXRpdmVWYWx1ZURlcml2ZWRGcm9t
RWxlbWVudCgqc3RvcC5jb2xvcikpIHsKKyAgICAgICAgICAgICAgICBtX2hhc0NvbG9yRGVyaXZl
ZEZyb21FbGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IGNvbG9ySXNEZXJpdmVkRnJv
bUVsZW1lbnQgPyBjbG9uZSgqdGhpcykgOiBtYWtlUmVmKCp0aGlzKTsKKyAgICByZXR1cm4gKm1f
aGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQ7Cit9CisKK1JlZjxDU1NHcmFkaWVudFZhbHVlPiBD
U1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUpCit7CisgICAgYXV0byByZXN1bHQgPSBoYXNDb2xvckRlcml2
ZWRGcm9tRWxlbWVudCgpID8gY2xvbmUoKnRoaXMpIDogbWFrZVJlZigqdGhpcyk7CiAgICAgcmVz
b2x2ZVN0b3BDb2xvcnMocmVzdWx0LT5tX3N0b3BzLCBbJl0oY29uc3QgQ1NTUHJpbWl0aXZlVmFs
dWUmIGNvbG9yVmFsdWUpIHsKICAgICAgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5jb2xvckZyb21Q
cmltaXRpdmVWYWx1ZShjb2xvclZhbHVlKTsKICAgICB9KTsKQEAgLTE1Miw3ICsxMzAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIDogbV9kYXRhKGRhdGEpCiAgICAgewogICAgIH0KLSAgICAKKwogICAg
IGZsb2F0IGdyYWRpZW50TGVuZ3RoKCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8gZ3JhZGll
bnRTaXplID0gbV9kYXRhLnBvaW50MCAtIG1fZGF0YS5wb2ludDE7CkBAIC0xNjIsMTMgKzE0MCwx
MyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG5vcm1hbGl6ZVN0b3BzQW5kRW5kcG9pbnRzT3V0c2lk
ZVJhbmdlKFZlY3RvcjxHcmFkaWVudFN0b3A+JiBzdG9wcykKICAgICB7Ci0gICAgICAgIGZsb2F0
IGZpcnN0T2Zmc2V0ID0gc3RvcHMuZmlyc3QoKS5vZmZzZXQ7Ci0gICAgICAgIGZsb2F0IGxhc3RP
ZmZzZXQgPSBzdG9wcy5sYXN0KCkub2Zmc2V0OworICAgICAgICBmbG9hdCBmaXJzdE9mZnNldCA9
ICpzdG9wcy5maXJzdCgpLm9mZnNldDsKKyAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9ICpzdG9w
cy5sYXN0KCkub2Zmc2V0OwogICAgICAgICBpZiAoZmlyc3RPZmZzZXQgIT0gbGFzdE9mZnNldCkg
ewogICAgICAgICAgICAgZmxvYXQgc2NhbGUgPSBsYXN0T2Zmc2V0IC0gZmlyc3RPZmZzZXQ7CiAK
ICAgICAgICAgICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQotICAgICAgICAgICAgICAgIHN0
b3Aub2Zmc2V0ID0gKHN0b3Aub2Zmc2V0IC0gZmlyc3RPZmZzZXQpIC8gc2NhbGU7CisgICAgICAg
ICAgICAgICAgc3RvcC5vZmZzZXQgPSAoKnN0b3Aub2Zmc2V0IC0gZmlyc3RPZmZzZXQpIC8gc2Nh
bGU7CiAKICAgICAgICAgICAgIGF1dG8gcDAgPSBtX2RhdGEucG9pbnQwOwogICAgICAgICAgICAg
YXV0byBwMSA9IG1fZGF0YS5wb2ludDE7CkBAIC0yMDksMjIgKzE4NywyMiBAQCBwdWJsaWM6CiAK
ICAgICAgICAgLy8gUmF0aGVyIHRoYW4gc2NhbGluZyB0aGUgcG9pbnRzIDwgMCwgd2UgdHJ1bmNh
dGUgdGhlbSwgc28gb25seSBzY2FsZSBhY2NvcmRpbmcgdG8gdGhlIGxhcmdlc3QgcG9pbnQuCiAg
ICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gMDsKLSAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9
IHN0b3BzLmxhc3QoKS5vZmZzZXQ7CisgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSAqc3RvcHMu
bGFzdCgpLm9mZnNldDsKICAgICAgICAgZmxvYXQgc2NhbGUgPSBsYXN0T2Zmc2V0IC0gZmlyc3RP
ZmZzZXQ7CiAKICAgICAgICAgLy8gUmVzZXQgcG9pbnRzIGJlbG93IDAgdG8gdGhlIGZpcnN0IHZp
c2libGUgY29sb3IuCiAgICAgICAgIHNpemVfdCBmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA9IG51
bVN0b3BzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsK
LSAgICAgICAgICAgIGlmIChzdG9wc1tpXS5vZmZzZXQgPj0gMCkgeworICAgICAgICAgICAgaWYg
KCpzdG9wc1tpXS5vZmZzZXQgPj0gMCkgewogICAgICAgICAgICAgICAgIGZpcnN0WmVyb09yR3Jl
YXRlckluZGV4ID0gaTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA+IDApIHsKLSAg
ICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA8IG51bVN0b3BzICYmIHN0b3Bz
W2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQgPiAwKSB7Ci0gICAgICAgICAgICAgICAg
ZmxvYXQgcHJldk9mZnNldCA9IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0ub2Zm
c2V0OwotICAgICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tmaXJzdFplcm9P
ckdyZWF0ZXJJbmRleF0ub2Zmc2V0OworICAgICAgICAgICAgaWYgKGZpcnN0WmVyb09yR3JlYXRl
ckluZGV4IDwgbnVtU3RvcHMgJiYgKnN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZz
ZXQgPiAwKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgcHJldk9mZnNldCA9ICpzdG9wc1tmaXJz
dFplcm9PckdyZWF0ZXJJbmRleCAtIDFdLm9mZnNldDsKKyAgICAgICAgICAgICAgICBmbG9hdCBu
ZXh0T2Zmc2V0ID0gKnN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQ7CiAKICAg
ICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gLXByZXZPZmZzZXQgLyAo
bmV4dE9mZnNldCAtIHByZXZPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVu
IHdlIGludGVycG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhp
cyBzaG91bGQgZG8gcHJlbXVsdGlwbGljYXRpb24uCkBAIC0yNDMsNyArMjIxLDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAKICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCi0gICAgICAg
ICAgICBzdG9wLm9mZnNldCAvPSBzY2FsZTsKKyAgICAgICAgICAgICpzdG9wLm9mZnNldCAvPSBz
Y2FsZTsKIAogICAgICAgICBtX2RhdGEuc3RhcnRSYWRpdXMgKj0gc2NhbGU7CiAgICAgICAgIG1f
ZGF0YS5lbmRSYWRpdXMgKj0gc2NhbGU7CkBAIC0yNjQsMTYgKzI0MiwxNiBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICBzaXplX3QgZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPSBudW1TdG9w
czsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoc3RvcHNbaV0ub2Zmc2V0ID49IDApIHsKKyAgICAgICAgICAgIGlmICgqc3Rv
cHNbaV0ub2Zmc2V0ID49IDApIHsKICAgICAgICAgICAgICAgICBmaXJzdFplcm9PckdyZWF0ZXJJ
bmRleCA9IGk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPiAwKSB7Ci0gICAgICAg
ICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPCBudW1TdG9wcyAmJiBzdG9wc1tmaXJz
dFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0ID4gMCkgewotICAgICAgICAgICAgICAgIGZsb2F0
IHByZXZPZmZzZXQgPSBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleCAtIDFdLm9mZnNldDsK
LSAgICAgICAgICAgICAgICBmbG9hdCBuZXh0T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVh
dGVySW5kZXhdLm9mZnNldDsKKyAgICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRl
eCA8IG51bVN0b3BzICYmICpzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0ID4g
MCkgeworICAgICAgICAgICAgICAgIGZsb2F0IHByZXZPZmZzZXQgPSAqc3RvcHNbZmlyc3RaZXJv
T3JHcmVhdGVySW5kZXggLSAxXS5vZmZzZXQ7CisgICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9m
ZnNldCA9ICpzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0OwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGZsb2F0IGludGVyU3RvcFByb3BvcnRpb24gPSAtcHJl
dk9mZnNldCAvIChuZXh0T2Zmc2V0IC0gcHJldk9mZnNldCk7CiAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IHdoZW4gd2UgaW50ZXJwb2xhdGUgZ3JhZGllbnRzIHVzaW5nIHByZW11bHRpcGxpZWQg
Y29sb3JzLCB0aGlzIHNob3VsZCBkbyBwcmVtdWx0aXBsaWNhdGlvbi4KQEAgLTI5MywxNiArMjcx
LDE2IEBAIHB1YmxpYzoKIAogICAgICAgICBzaXplX3QgbGFzdE9uZU9yTGVzc0luZGV4ID0gbnVt
U3RvcHM7CiAgICAgICAgIGZvciAoaW50IGkgPSBudW1TdG9wcyAtIDE7IGkgPj0gMDsgLS1pKSB7
Ci0gICAgICAgICAgICBpZiAoc3RvcHNbaV0ub2Zmc2V0IDw9IDEpIHsKKyAgICAgICAgICAgIGlm
ICgqc3RvcHNbaV0ub2Zmc2V0IDw9IDEpIHsKICAgICAgICAgICAgICAgICBsYXN0T25lT3JMZXNz
SW5kZXggPSBpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAobGFzdE9uZU9yTGVzc0luZGV4IDwgbnVtU3RvcHMg
LSAxKSB7Ci0gICAgICAgICAgICBpZiAobGFzdE9uZU9yTGVzc0luZGV4IDwgbnVtU3RvcHMgJiYg
c3RvcHNbbGFzdE9uZU9yTGVzc0luZGV4XS5vZmZzZXQgPCAxKSB7Ci0gICAgICAgICAgICAgICAg
ZmxvYXQgcHJldk9mZnNldCA9IHN0b3BzW2xhc3RPbmVPckxlc3NJbmRleF0ub2Zmc2V0OwotICAg
ICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSBzdG9wc1tsYXN0T25lT3JMZXNzSW5kZXgg
KyAxXS5vZmZzZXQ7CisgICAgICAgICAgICBpZiAobGFzdE9uZU9yTGVzc0luZGV4IDwgbnVtU3Rv
cHMgJiYgKnN0b3BzW2xhc3RPbmVPckxlc3NJbmRleF0ub2Zmc2V0IDwgMSkgeworICAgICAgICAg
ICAgICAgIGZsb2F0IHByZXZPZmZzZXQgPSAqc3RvcHNbbGFzdE9uZU9yTGVzc0luZGV4XS5vZmZz
ZXQ7CisgICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9mZnNldCA9ICpzdG9wc1tsYXN0T25lT3JM
ZXNzSW5kZXggKyAxXS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ZmxvYXQgaW50ZXJTdG9wUHJvcG9ydGlvbiA9ICgxIC0gcHJldk9mZnNldCkgLyAobmV4dE9mZnNl
dCAtIHByZXZPZmZzZXQpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGludGVy
cG9sYXRlIGdyYWRpZW50cyB1c2luZyBwcmVtdWx0aXBsaWVkIGNvbG9ycywgdGhpcyBzaG91bGQg
ZG8gcHJlbXVsdGlwbGljYXRpb24uCkBAIC0zMjYsMjQgKzMwNCwyNiBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBHcmFkaWVudEFkYXB0ZXI+CiBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRp
ZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZW50QWRhcHRlciwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KQogewogICAgIGlmICht
X2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkTGluZWFyR3JhZGllbnQgfHwgbV9ncmFkaWVu
dFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KSB7Ci0gICAgICAgIHNvcnRTdG9w
c0lmTmVlZGVkKCk7Ci0KICAgICAgICAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciByZXN1bHQ7
CiAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RvcHMuc2l6ZSgpKTsK
IAogICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CiAgICAgICAgICAgICBmbG9h
dCBvZmZzZXQ7Ci0gICAgICAgICAgICBpZiAoc3RvcC5tX3Bvc2l0aW9uLT5pc1BlcmNlbnRhZ2Uo
KSkKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdG9wLm1fcG9zaXRpb24tPmZsb2F0VmFsdWUo
Q1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKSAvIDEwMDsKKyAgICAgICAgICAgIGlmIChzdG9w
LnBvc2l0aW9uLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdG9w
LnBvc2l0aW9uLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSkgLyAxMDA7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcC5tX3Bvc2l0
aW9uLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAg
ICBvZmZzZXQgPSBzdG9wLnBvc2l0aW9uLT5mbG9hdFZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKTsKIAotICAgICAgICAgICAgQ29sb3IgY29sb3IgPSBzdG9wLm1fcmVzb2x2ZWRDb2xvcjsK
KyAgICAgICAgICAgIENvbG9yIGNvbG9yID0gc3RvcC5yZXNvbHZlZENvbG9yOwogICAgICAgICAg
ICAgaWYgKHN0eWxlLmhhc0FwcGxlQ29sb3JGaWx0ZXIoKSkKICAgICAgICAgICAgICAgICBzdHls
ZS5hcHBsZUNvbG9yRmlsdGVyKCkudHJhbnNmb3JtQ29sb3IoY29sb3IpOwogICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IG9mZnNldCwgY29sb3IgfSk7CiAgICAgICAgIH0KIAor
ICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIFtd
IChjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBhLCBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9w
JiBiKSB7CisgICAgICAgICAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9mZnNldDsKKyAgICAgICAg
fSk7CisKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTM1NSwxNiArMzM1LDE0
IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0
b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1TdG9wczsgKytpKSB7CiAgICAgICAgIGF1dG8mIHN0b3AgPSBtX3N0b3BzW2ldOwogCi0gICAg
ICAgIHN0b3BzW2ldLmlzTWlkcG9pbnQgPSBzdG9wLmlzTWlkcG9pbnQ7Ci0KLSAgICAgICAgQ29s
b3IgY29sb3IgPSBzdG9wLm1fcmVzb2x2ZWRDb2xvcjsKKyAgICAgICAgQ29sb3IgY29sb3IgPSBz
dG9wLnJlc29sdmVkQ29sb3I7CiAgICAgICAgIGlmIChzdHlsZS5oYXNBcHBsZUNvbG9yRmlsdGVy
KCkpCiAgICAgICAgICAgICBzdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCkudHJhbnNmb3JtQ29sb3Io
Y29sb3IpOwogCiAgICAgICAgIHN0b3BzW2ldLmNvbG9yID0gY29sb3I7CiAKLSAgICAgICAgaWYg
KHN0b3AubV9wb3NpdGlvbikgewotICAgICAgICAgICAgYXV0byYgcG9zaXRpb25WYWx1ZSA9ICpz
dG9wLm1fcG9zaXRpb247CisgICAgICAgIGlmIChzdG9wLnBvc2l0aW9uKSB7CisgICAgICAgICAg
ICBhdXRvJiBwb3NpdGlvblZhbHVlID0gKnN0b3AucG9zaXRpb247CiAgICAgICAgICAgICBpZiAo
cG9zaXRpb25WYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgICAgICBzdG9wc1tpXS5v
ZmZzZXQgPSBwb3NpdGlvblZhbHVlLmZsb2F0VmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5U
QUdFKSAvIDEwMDsKICAgICAgICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uVmFsdWUuaXNMZW5ndGgo
KSB8fCBwb3NpdGlvblZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkgfHwgcG9zaXRp
b25WYWx1ZS5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSB7CkBAIC0zODIsMzUg
KzM2MCwzMSBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNv
bXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IDA7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdG9wc1tpXS5zcGVjaWZpZWQgPSB0cnVlOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGNvbG9yLXN0b3AgZG9l
cyBub3QgaGF2ZSBhIHBvc2l0aW9uLCBpdHMgcG9zaXRpb24gZGVmYXVsdHMgdG8gMCUuCiAgICAg
ICAgICAgICAvLyBJZiB0aGUgbGFzdCBjb2xvci1zdG9wIGRvZXMgbm90IGhhdmUgYSBwb3NpdGlv
biwgaXRzIHBvc2l0aW9uIGRlZmF1bHRzIHRvIDEwMCUuCi0gICAgICAgICAgICBpZiAoIWkpIHsK
KyAgICAgICAgICAgIGlmICghaSkKICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAw
OwotICAgICAgICAgICAgICAgIHN0b3BzW2ldLnNwZWNpZmllZCA9IHRydWU7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKG51bVN0b3BzID4gMSAmJiBpID09IG51bVN0b3BzIC0gMSkgeworICAgICAg
ICAgICAgZWxzZSBpZiAobnVtU3RvcHMgPiAxICYmIGkgPT0gbnVtU3RvcHMgLSAxKQogICAgICAg
ICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IDE7Ci0gICAgICAgICAgICAgICAgc3RvcHNbaV0u
c3BlY2lmaWVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8v
IElmIGEgY29sb3Itc3RvcCBoYXMgYSBwb3NpdGlvbiB0aGF0IGlzIGxlc3MgdGhhbiB0aGUgc3Bl
Y2lmaWVkIHBvc2l0aW9uIG9mIGFueQogICAgICAgICAvLyBjb2xvci1zdG9wIGJlZm9yZSBpdCBp
biB0aGUgbGlzdCwgaXRzIHBvc2l0aW9uIGlzIGNoYW5nZWQgdG8gYmUgZXF1YWwgdG8gdGhlCiAg
ICAgICAgIC8vIGxhcmdlc3Qgc3BlY2lmaWVkIHBvc2l0aW9uIG9mIGFueSBjb2xvci1zdG9wIGJl
Zm9yZSBpdC4KLSAgICAgICAgaWYgKHN0b3BzW2ldLnNwZWNpZmllZCAmJiBpID4gMCkgeworICAg
ICAgICBpZiAoc3RvcHNbaV0uaXNTcGVjaWZpZWQoKSAmJiBpID4gMCkgewogICAgICAgICAgICAg
c2l6ZV90IHByZXZTcGVjaWZpZWRJbmRleDsKICAgICAgICAgICAgIGZvciAocHJldlNwZWNpZmll
ZEluZGV4ID0gaSAtIDE7IHByZXZTcGVjaWZpZWRJbmRleDsgLS1wcmV2U3BlY2lmaWVkSW5kZXgp
IHsKLSAgICAgICAgICAgICAgICBpZiAoc3RvcHNbcHJldlNwZWNpZmllZEluZGV4XS5zcGVjaWZp
ZWQpCisgICAgICAgICAgICAgICAgaWYgKHN0b3BzW3ByZXZTcGVjaWZpZWRJbmRleF0uaXNTcGVj
aWZpZWQoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmIChzdG9wc1tpXS5vZmZzZXQgPCBzdG9wc1twcmV2U3BlY2lmaWVkSW5kZXhd
Lm9mZnNldCkKKyAgICAgICAgICAgIGlmICgqc3RvcHNbaV0ub2Zmc2V0IDwgKnN0b3BzW3ByZXZT
cGVjaWZpZWRJbmRleF0ub2Zmc2V0KQogICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9
IHN0b3BzW3ByZXZTcGVjaWZpZWRJbmRleF0ub2Zmc2V0OwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgQVNTRVJUKHN0b3BzWzBdLnNwZWNpZmllZCAmJiBzdG9wc1tudW1TdG9wcyAtIDFdLnNwZWNp
ZmllZCk7CisgICAgQVNTRVJUKHN0b3BzWzBdLmlzU3BlY2lmaWVkKCkgJiYgc3RvcHNbbnVtU3Rv
cHMgLSAxXS5pc1NwZWNpZmllZCgpKTsKIAogICAgIC8vIElmIGFueSBjb2xvci1zdG9wIHN0aWxs
IGRvZXMgbm90IGhhdmUgYSBwb3NpdGlvbiwgdGhlbiwgZm9yIGVhY2ggcnVuIG9mIGFkamFjZW50
CiAgICAgLy8gY29sb3Itc3RvcHMgd2l0aG91dCBwb3NpdGlvbnMsIHNldCB0aGVpciBwb3NpdGlv
bnMgc28gdGhhdCB0aGV5IGFyZSBldmVubHkgc3BhY2VkCkBAIC00MjAsMTUgKzM5NCwxNSBAQCBH
cmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9wcyhH
cmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgICAgICBib29sIGluVW5zcGVjaWZpZWRSdW4gPSBm
YWxzZTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsK
LSAgICAgICAgICAgIGlmICghc3RvcHNbaV0uc3BlY2lmaWVkICYmICFpblVuc3BlY2lmaWVkUnVu
KSB7CisgICAgICAgICAgICBpZiAoIXN0b3BzW2ldLmlzU3BlY2lmaWVkKCkgJiYgIWluVW5zcGVj
aWZpZWRSdW4pIHsKICAgICAgICAgICAgICAgICB1bnNwZWNpZmllZFJ1blN0YXJ0ID0gaTsKICAg
ICAgICAgICAgICAgICBpblVuc3BlY2lmaWVkUnVuID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc3RvcHNbaV0uc3BlY2lmaWVkICYmIGluVW5zcGVjaWZpZWRSdW4pIHsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc3RvcHNbaV0uaXNTcGVjaWZpZWQoKSAmJiBpblVuc3BlY2lmaWVkUnVu
KSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IHVuc3BlY2lmaWVkUnVuRW5kID0gaTsKIAogICAg
ICAgICAgICAgICAgIGlmICh1bnNwZWNpZmllZFJ1blN0YXJ0IDwgdW5zcGVjaWZpZWRSdW5FbmQp
IHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgbGFzdFNwZWNpZmllZE9mZnNldCA9IHN0b3Bz
W3Vuc3BlY2lmaWVkUnVuU3RhcnQgLSAxXS5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGZs
b2F0IG5leHRTcGVjaWZpZWRPZmZzZXQgPSBzdG9wc1t1bnNwZWNpZmllZFJ1bkVuZF0ub2Zmc2V0
OworICAgICAgICAgICAgICAgICAgICBmbG9hdCBsYXN0U3BlY2lmaWVkT2Zmc2V0ID0gKnN0b3Bz
W3Vuc3BlY2lmaWVkUnVuU3RhcnQgLSAxXS5vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGZs
b2F0IG5leHRTcGVjaWZpZWRPZmZzZXQgPSAqc3RvcHNbdW5zcGVjaWZpZWRSdW5FbmRdLm9mZnNl
dDsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGVsdGEgPSAobmV4dFNwZWNpZmllZE9mZnNl
dCAtIGxhc3RTcGVjaWZpZWRPZmZzZXQpIC8gKHVuc3BlY2lmaWVkUnVuRW5kIC0gdW5zcGVjaWZp
ZWRSdW5TdGFydCArIDEpOwogCiAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSB1
bnNwZWNpZmllZFJ1blN0YXJ0OyBqIDwgdW5zcGVjaWZpZWRSdW5FbmQ7ICsraikKQEAgLTQ1NCw3
ICs0MjgsNyBAQCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNv
bXB1dGVTdG9wcyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgIC8vIE1pZHBvaW50cyB0aGF0
IGNvaW5jaWRlIHdpdGggY29sb3Igc3RvcHMgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5IHNpbmNlIHRo
ZXkgZG9uJ3QgcmVxdWlyZQogICAgIC8vIGV4dHJhIHN0b3BzIGFuZCBnZW5lcmF0ZSBoYXJkIGxp
bmVzLgogICAgIGZvciAoc2l6ZV90IHggPSAxOyB4IDwgc3RvcHMuc2l6ZSgpIC0gMTspIHsKLSAg
ICAgICAgaWYgKCFzdG9wc1t4XS5pc01pZHBvaW50KSB7CisgICAgICAgIGlmICghc3RvcHNbeF0u
aXNNaWRwb2ludCgpKSB7CiAgICAgICAgICAgICArK3g7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQpAQCAtNDY0LDkgKzQzOCw5IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3Ig
Q1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAg
ICAgICAgIENvbG9yIGNvbG9yMSA9IHN0b3BzW3ggLSAxXS5jb2xvcjsKICAgICAgICAgQ29sb3Ig
Y29sb3IyID0gc3RvcHNbeCArIDFdLmNvbG9yOwogICAgICAgICAvLyBMaWtld2lzZSBmaW5kIHRo
ZSBwb3NpdGlvbiBvZiBwcmV2aW91cyBhbmQgbmV4dCBjb2xvciBzdG9wLgotICAgICAgICBmbG9h
dCBvZmZzZXQxID0gc3RvcHNbeCAtIDFdLm9mZnNldDsKLSAgICAgICAgZmxvYXQgb2Zmc2V0MiA9
IHN0b3BzW3ggKyAxXS5vZmZzZXQ7Ci0gICAgICAgIGZsb2F0IG9mZnNldCA9IHN0b3BzW3hdLm9m
ZnNldDsKKyAgICAgICAgZmxvYXQgb2Zmc2V0MSA9ICpzdG9wc1t4IC0gMV0ub2Zmc2V0OworICAg
ICAgICBmbG9hdCBvZmZzZXQyID0gKnN0b3BzW3ggKyAxXS5vZmZzZXQ7CisgICAgICAgIGZsb2F0
IG9mZnNldCA9ICpzdG9wc1t4XS5vZmZzZXQ7CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgZXZlcnl0
aGluZyBjb2luY2lkZXMgb3IgdGhlIG1pZHBvaW50IGlzIGV4YWN0bHkgaW4gdGhlIG1pZGRsZS4K
ICAgICAgICAgLy8gSWYgc28sIGlnbm9yZSB0aGUgbWlkcG9pbnQuCkBAIC00NzksNyArNDUzLDYg
QEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlU3Rv
cHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUKICAgICAgICAgaWYgKG9mZnNldDEgPT0gb2Zmc2V0
KSB7CiAgICAgICAgICAgICAvLyBNb3JwaCB0aGUgbWlkcG9pbnQgdG8gYSByZWd1bGFyIHN0b3Ag
d2l0aCB0aGUgY29sb3Igb2YgdGhlIG5leHQgY29sb3Igc3RvcC4KICAgICAgICAgICAgIHN0b3Bz
W3hdLmNvbG9yID0gY29sb3IyOwotICAgICAgICAgICAgc3RvcHNbeF0uaXNNaWRwb2ludCA9IGZh
bHNlOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNDg3LDcgKzQ2MCw2
IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0
b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAgICAgICAgIGlmIChvZmZzZXQyID09IG9mZnNl
dCkgewogICAgICAgICAgICAgLy8gTW9ycGggdGhlIG1pZHBvaW50IHRvIGEgcmVndWxhciBzdG9w
IHdpdGggdGhlIGNvbG9yIG9mIHRoZSBwcmV2aW91cyBjb2xvciBzdG9wLgogICAgICAgICAgICAg
c3RvcHNbeF0uY29sb3IgPSBjb2xvcjE7Ci0gICAgICAgICAgICBzdG9wc1t4XS5pc01pZHBvaW50
ID0gZmFsc2U7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC01MDgsNyAr
NDgwLDcgQEAgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBDU1NHcmFkaWVudFZhbHVlOjpjb21w
dXRlU3RvcHMoR3JhZGllbnRBZGFwdGVyJiBncmFkaWUKICAgICAgICAgfQogICAgICAgICAvLyBj
YWxjdWxhdGUgY29sb3JzCiAgICAgICAgIGZvciAoc2l6ZV90IHkgPSAwOyB5IDwgOTsgKyt5KSB7
Ci0gICAgICAgICAgICBmbG9hdCByZWxhdGl2ZU9mZnNldCA9IChuZXdTdG9wc1t5XS5vZmZzZXQg
LSBvZmZzZXQxKSAvIChvZmZzZXQyIC0gb2Zmc2V0MSk7CisgICAgICAgICAgICBmbG9hdCByZWxh
dGl2ZU9mZnNldCA9ICgqbmV3U3RvcHNbeV0ub2Zmc2V0IC0gb2Zmc2V0MSkgLyAob2Zmc2V0MiAt
IG9mZnNldDEpOwogICAgICAgICAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6cG93KHJlbGF0
aXZlT2Zmc2V0LCBzdGQ6OmxvZyguNWYpIC8gc3RkOjpsb2cobWlkcG9pbnQpKTsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXaHkgbm90IHByZW11bHRpcGx5IGhlcmU/CiAgICAgICAgICAgICBuZXdT
dG9wc1t5XS5jb2xvciA9IGJsZW5kKGNvbG9yMSwgY29sb3IyLCBtdWx0aXBsaWVyLCBmYWxzZSAv
KiBkbyBub3QgcHJlbXVsdGlwbHkgKi8pOwpAQCAtNTI3LDcgKzQ5OSw3IEBAIEdyYWRpZW50OjpD
b2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRh
cHRlciYgZ3JhZGllCiAgICAgaWYgKG1fcmVwZWF0aW5nICYmIG51bVN0b3BzID4gMSkgewogICAg
ICAgICAvLyBJZiB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgcG9zaXRpb25zIG9mIHRoZSBmaXJzdCBh
bmQgbGFzdCBjb2xvci1zdG9wcyBpcyAwLAogICAgICAgICAvLyB0aGUgZ3JhZGllbnQgZGVmaW5l
cyBhIHNvbGlkLWNvbG9yIGltYWdlIHdpdGggdGhlIGNvbG9yIG9mIHRoZSBsYXN0IGNvbG9yLXN0
b3AgaW4gdGhlIHJ1bGUuCi0gICAgICAgIGZsb2F0IGdyYWRpZW50UmFuZ2UgPSBzdG9wcy5sYXN0
KCkub2Zmc2V0IC0gc3RvcHMuZmlyc3QoKS5vZmZzZXQ7CisgICAgICAgIGZsb2F0IGdyYWRpZW50
UmFuZ2UgPSAqc3RvcHMubGFzdCgpLm9mZnNldCAtICpzdG9wcy5maXJzdCgpLm9mZnNldDsKICAg
ICAgICAgaWYgKCFncmFkaWVudFJhbmdlKSB7CiAgICAgICAgICAgICBzdG9wcy5maXJzdCgpLm9m
ZnNldCA9IDA7CiAgICAgICAgICAgICBzdG9wcy5maXJzdCgpLmNvbG9yID0gc3RvcHMubGFzdCgp
LmNvbG9yOwpAQCAtNTQwLDcgKzUxMiw3IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NT
R3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAgICAg
ICAgICAgICBzaXplX3Qgb3JpZ2luYWxGaXJzdFN0b3BJbmRleCA9IDA7CiAKICAgICAgICAgICAg
IC8vIFdvcmsgYmFja3dhcmRzIGZyb20gdGhlIGZpcnN0LCBhZGRpbmcgc3RvcHMgdW50aWwgd2Ug
Z2V0IG9uZSBiZWZvcmUgMC4KLSAgICAgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0ID0gc3RvcHNb
MF0ub2Zmc2V0OworICAgICAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSAqc3RvcHNbMF0ub2Zm
c2V0OwogICAgICAgICAgICAgaWYgKGZpcnN0T2Zmc2V0ID4gMCkgewogICAgICAgICAgICAgICAg
IGZsb2F0IGN1cnJPZmZzZXQgPSBmaXJzdE9mZnNldDsKICAgICAgICAgICAgICAgICBzaXplX3Qg
c3JjU3RvcE9yZGluYWwgPSBvcmlnaW5hbE51bVN0b3BzIC0gMTsKQEAgLTU1NCwxMyArNTI2LDEz
IEBAIEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0
b3BzKEdyYWRpZW50QWRhcHRlciYgZ3JhZGllCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoc3JjU3RvcE9yZGluYWwpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjdXJyT2Zmc2V0IC09IHN0b3BzW29yaWdpbmFsRmlyc3RTdG9wSW5kZXgg
KyBzcmNTdG9wT3JkaW5hbF0ub2Zmc2V0IC0gc3RvcHNbb3JpZ2luYWxGaXJzdFN0b3BJbmRleCAr
IHNyY1N0b3BPcmRpbmFsIC0gMV0ub2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
ck9mZnNldCAtPSAqc3RvcHNbb3JpZ2luYWxGaXJzdFN0b3BJbmRleCArIHNyY1N0b3BPcmRpbmFs
XS5vZmZzZXQgLSAqc3RvcHNbb3JpZ2luYWxGaXJzdFN0b3BJbmRleCArIHNyY1N0b3BPcmRpbmFs
IC0gMV0ub2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBzcmNTdG9wT3JkaW5hbCA9IChzcmNT
dG9wT3JkaW5hbCArIG9yaWdpbmFsTnVtU3RvcHMgLSAxKSAlIG9yaWdpbmFsTnVtU3RvcHM7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBXb3JrIGZv
cndhcmRzIGZyb20gdGhlIGVuZCwgYWRkaW5nIHN0b3BzIHVudGlsIHdlIGdldCBvbmUgYWZ0ZXIg
MS4KLSAgICAgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBzdG9wc1tzdG9wcy5zaXplKCkgLSAx
XS5vZmZzZXQ7CisgICAgICAgICAgICBmbG9hdCBsYXN0T2Zmc2V0ID0gKnN0b3BzW3N0b3BzLnNp
emUoKSAtIDFdLm9mZnNldDsKICAgICAgICAgICAgIGlmIChsYXN0T2Zmc2V0IDwgbWF4RXh0ZW50
KSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgY3Vyck9mZnNldCA9IGxhc3RPZmZzZXQ7CiAgICAg
ICAgICAgICAgICAgc2l6ZV90IHNyY1N0b3BPcmRpbmFsID0gMDsKQEAgLTU3Myw3ICs1NDUsNyBA
QCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVTdG9w
cyhHcmFkaWVudEFkYXB0ZXImIGdyYWRpZQogICAgICAgICAgICAgICAgICAgICBpZiAoY3Vyck9m
ZnNldCA+IG1heEV4dGVudCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoc3JjU3RvcE9yZGluYWwgPCBvcmlnaW5hbE51bVN0b3BzIC0gMSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJPZmZzZXQgKz0gc3RvcHNbc3JjU3RvcEluZGV4
ICsgMV0ub2Zmc2V0IC0gc3RvcHNbc3JjU3RvcEluZGV4XS5vZmZzZXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyT2Zmc2V0ICs9ICpzdG9wc1tzcmNTdG9wSW5kZXggKyAxXS5vZmZzZXQg
LSAqc3RvcHNbc3JjU3RvcEluZGV4XS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIHNyY1N0
b3BPcmRpbmFsID0gKHNyY1N0b3BPcmRpbmFsICsgMSkgJSBvcmlnaW5hbE51bVN0b3BzOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTU4MSw0NyArNTUzLDQ3IEBAIEdyYWRp
ZW50OjpDb2xvclN0b3BWZWN0b3IgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZVN0b3BzKEdyYWRp
ZW50QWRhcHRlciYgZ3JhZGllCiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGdyYWRpZW50IGdvZXMg
b3V0c2lkZSB0aGUgMC0xIHJhbmdlLCBub3JtYWxpemUgaXQgYnkgbW92aW5nIHRoZSBlbmRwb2lu
dHMsIGFuZCBhZGp1c3RpbmcgdGhlIHN0b3BzLgotICAgIGlmIChzdG9wcy5zaXplKCkgPiAxICYm
IChzdG9wcy5maXJzdCgpLm9mZnNldCA8IDAgfHwgc3RvcHMubGFzdCgpLm9mZnNldCA+IDEpKQor
ICAgIGlmIChzdG9wcy5zaXplKCkgPiAxICYmICgqc3RvcHMuZmlyc3QoKS5vZmZzZXQgPCAwIHx8
ICpzdG9wcy5sYXN0KCkub2Zmc2V0ID4gMSkpCiAgICAgICAgIGdyYWRpZW50QWRhcHRlci5ub3Jt
YWxpemVTdG9wc0FuZEVuZHBvaW50c091dHNpZGVSYW5nZShzdG9wcyk7CiAgICAgCiAgICAgR3Jh
ZGllbnQ6OkNvbG9yU3RvcFZlY3RvciByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc3RvcHMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcykKLSAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCh7IHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9yIH0p
OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHsgKnN0b3Aub2Zmc2V0LCBzdG9wLmNv
bG9yIH0pOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGZsb2F0IHBvc2l0aW9u
RnJvbVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Ym9vbCBpc0hvcml6b250YWwpCiB7Ci0gICAgaW50IG9yaWdpbiA9IDA7Ci0gICAgaW50IHNpZ24g
PSAxOwotICAgIGludCBlZGdlRGlzdGFuY2UgPSBpc0hvcml6b250YWwgPyBzaXplLndpZHRoKCkg
OiBzaXplLmhlaWdodCgpOwotICAgIAorICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAw
OworCisgICAgZmxvYXQgb3JpZ2luID0gMDsKKyAgICBmbG9hdCBzaWduID0gMTsKKyAgICBmbG9h
dCBlZGdlRGlzdGFuY2UgPSBpc0hvcml6b250YWwgPyBzaXplLndpZHRoKCkgOiBzaXplLmhlaWdo
dCgpOworCiAgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBjZW50ZXIgb2YgdGhlIGdyYWRpZW50IGlz
IGdpdmVuIHJlbGF0aXZlIHRvIGFuIGVkZ2UgaW4gdGhlCiAgICAgLy8gZm9ybSBvZjogWyB0b3Ag
fCBib3R0b20gfCByaWdodCB8IGxlZnQgXSBbIDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IF0uCiAg
ICAgaWYgKHZhbHVlLT5pc1BhaXIoKSkgewogICAgICAgICBDU1NWYWx1ZUlEIG9yaWdpbklEID0g
dmFsdWUtPnBhaXJWYWx1ZSgpLT5maXJzdCgpLT52YWx1ZUlEKCk7Ci0gICAgICAgIHZhbHVlID0g
dmFsdWUtPnBhaXJWYWx1ZSgpLT5zZWNvbmQoKTsKLSAgICAgICAgCiAgICAgICAgIGlmIChvcmln
aW5JRCA9PSBDU1NWYWx1ZVJpZ2h0IHx8IG9yaWdpbklEID09IENTU1ZhbHVlQm90dG9tKSB7CiAg
ICAgICAgICAgICAvLyBGb3IgcmlnaHQvYm90dG9tLCB0aGUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRv
IHRoZSBmYXIgZWRnZS4KICAgICAgICAgICAgIG9yaWdpbiA9IGVkZ2VEaXN0YW5jZTsKICAgICAg
ICAgICAgIHNpZ24gPSAtMTsKICAgICAgICAgfQorICAgICAgICB2YWx1ZSA9IHZhbHVlLT5wYWly
VmFsdWUoKS0+c2Vjb25kKCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHZhbHVlLT5pc051bWJl
cigpKQogICAgICAgICByZXR1cm4gb3JpZ2luICsgc2lnbiAqIHZhbHVlLT5mbG9hdFZhbHVlKCkg
KiBjb252ZXJzaW9uRGF0YS56b29tKCk7Ci0gICAgCisKICAgICBpZiAodmFsdWUtPmlzUGVyY2Vu
dGFnZSgpKQotICAgICAgICByZXR1cm4gb3JpZ2luICsgc2lnbiAqIHZhbHVlLT5mbG9hdFZhbHVl
KCkgLyAxMDAuZiAqIGVkZ2VEaXN0YW5jZTsKKyAgICAgICAgcmV0dXJuIG9yaWdpbiArIHNpZ24g
KiB2YWx1ZS0+ZmxvYXRWYWx1ZSgpIC8gMTAwICogZWRnZURpc3RhbmNlOworCisgICAgaWYgKHZh
bHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQorICAgICAgICByZXR1cm4g
b3JpZ2luICsgc2lnbiAqIHZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25W
YWx1ZShjb252ZXJzaW9uRGF0YSktPmV2YWx1YXRlKGVkZ2VEaXN0YW5jZSk7CiAKLSAgICBpZiAo
dmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsKLSAgICAgICAgUmVm
PENhbGN1bGF0aW9uVmFsdWU+IGNhbGN1bGF0aW9uVmFsdWUgeyB2YWx1ZS0+Y3NzQ2FsY1ZhbHVl
KCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29udmVyc2lvbkRhdGEpIH07Ci0gICAgICAgIHJl
dHVybiBvcmlnaW4gKyBzaWduICogY2FsY3VsYXRpb25WYWx1ZS0+ZXZhbHVhdGUoZWRnZURpc3Rh
bmNlKTsKLSAgICB9Ci0gICAgCiAgICAgc3dpdGNoICh2YWx1ZS0+dmFsdWVJRCgpKSB7CiAgICAg
Y2FzZSBDU1NWYWx1ZVRvcDoKICAgICAgICAgQVNTRVJUKCFpc0hvcml6b250YWwpOwpAQCAtNjMx
LDEwICs2MDMsMTAgQEAgc3RhdGljIGZsb2F0IHBvc2l0aW9uRnJvbVZhbHVlKGNvbnN0IENTU1By
aW1pdGl2ZVZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGgKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgY2FzZSBDU1NWYWx1ZUJvdHRvbToKICAgICAgICAgQVNTRVJUKCFpc0hvcml6b250YWwp
OwotICAgICAgICByZXR1cm4gc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIGVkZ2VEaXN0
YW5jZTsKICAgICBjYXNlIENTU1ZhbHVlUmlnaHQ6CiAgICAgICAgIEFTU0VSVChpc0hvcml6b250
YWwpOwotICAgICAgICByZXR1cm4gc2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gZWRnZURp
c3RhbmNlOwogICAgIGNhc2UgQ1NTVmFsdWVDZW50ZXI6CiAgICAgICAgIHJldHVybiBvcmlnaW4g
KyBzaWduICogLjVmICogZWRnZURpc3RhbmNlOwogICAgIGRlZmF1bHQ6CkBAIC02NDQsMTA3ICs2
MTYsOTggQEAgc3RhdGljIGZsb2F0IHBvc2l0aW9uRnJvbVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2
ZVZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGgKICAgICByZXR1cm4gb3JpZ2luICsgc2ln
biAqIHZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihjb252ZXJzaW9uRGF0YSk7CiB9CiAKLUZs
b2F0UG9pbnQgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZUVuZFBvaW50KENTU1ByaW1pdGl2ZVZh
bHVlKiBob3Jpem9udGFsLCBDU1NQcmltaXRpdmVWYWx1ZSogdmVydGljYWwsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBjb25zdCBGbG9hdFNpemUmIHNp
emUpCisvLyBSZXNvbHZlIHBvaW50cy9yYWRpaSB0byBmcm9udCBlbmQgdmFsdWVzLgorc3RhdGlj
IEZsb2F0UG9pbnQgY29tcHV0ZUVuZFBvaW50KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiBob3Jp
em9udGFsLCBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogdmVydGljYWwsIGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBjb25zdCBGbG9hdFNpemUmIHNpemUp
CiB7Ci0gICAgRmxvYXRQb2ludCByZXN1bHQ7Ci0KLSAgICBpZiAoaG9yaXpvbnRhbCkKLSAgICAg
ICAgcmVzdWx0LnNldFgocG9zaXRpb25Gcm9tVmFsdWUoaG9yaXpvbnRhbCwgY29udmVyc2lvbkRh
dGEsIHNpemUsIHRydWUpKTsKLQotICAgIGlmICh2ZXJ0aWNhbCkKLSAgICAgICAgcmVzdWx0LnNl
dFkocG9zaXRpb25Gcm9tVmFsdWUodmVydGljYWwsIGNvbnZlcnNpb25EYXRhLCBzaXplLCBmYWxz
ZSkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4geyBwb3NpdGlvbkZyb21WYWx1
ZShob3Jpem9udGFsLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSwgdHJ1ZSksIHBvc2l0aW9uRnJvbVZh
bHVlKHZlcnRpY2FsLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSwgZmFsc2UpIH07CiB9CiAKIGJvb2wg
Q1NTR3JhZGllbnRWYWx1ZTo6aXNDYWNoZWFibGUoKSBjb25zdAogeworICAgIGlmIChoYXNDb2xv
ckRlcml2ZWRGcm9tRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChh
dXRvJiBzdG9wIDogbV9zdG9wcykgewotICAgICAgICBpZiAoc3RvcC5tX2NvbG9ySXNEZXJpdmVk
RnJvbUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFz
dG9wLm1fcG9zaXRpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoc3Rv
cC5tX3Bvc2l0aW9uLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKQorICAgICAgICBpZiAoc3RvcC5w
b3NpdGlvbiAmJiBzdG9wLnBvc2l0aW9uLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQogICAgIHJldHVybiB0cnVlOwogfQogCiBib29s
IENTU0dyYWRpZW50VmFsdWU6Omtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlcikgY29uc3QKIHsKICAgICBib29sIGhhc0NvbG9yRmlsdGVyID0gcmVuZGVyZXIuc3R5
bGUoKS5oYXNBcHBsZUNvbG9yRmlsdGVyKCk7Ci0KICAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0
b3BzKSB7Ci0gICAgICAgIGlmIChoYXNDb2xvckZpbHRlcikgewotICAgICAgICAgICAgQ29sb3Ig
c3RvcENvbG9yID0gc3RvcC5tX3Jlc29sdmVkQ29sb3I7Ci0gICAgICAgICAgICByZW5kZXJlci5z
dHlsZSgpLmFwcGxlQ29sb3JGaWx0ZXIoKS50cmFuc2Zvcm1Db2xvcihzdG9wQ29sb3IpOwotICAg
ICAgICAgICAgaWYgKCFzdG9wQ29sb3IuaXNPcGFxdWUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0b3AubV9yZXNvbHZlZENvbG9y
LmlzT3BhcXVlKCkpCisgICAgICAgIENvbG9yIGNvbG9yID0gc3RvcC5yZXNvbHZlZENvbG9yOwor
ICAgICAgICBpZiAoaGFzQ29sb3JGaWx0ZXIpCisgICAgICAgICAgICByZW5kZXJlci5zdHlsZSgp
LmFwcGxlQ29sb3JGaWx0ZXIoKS50cmFuc2Zvcm1Db2xvcihjb2xvcik7CisgICAgICAgIGlmICgh
Y29sb3IuaXNPcGFxdWUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKGNvbnN0IENT
U0dyYWRpZW50VmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBjb21wYXJlQ1NTVmFs
dWVQdHIobV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFs
dWVQdHIobV9maXJzdFksIG90aGVyLm1fZmlyc3RZKQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFs
dWVQdHIobV9zZWNvbmRYLCBvdGhlci5tX3NlY29uZFgpCisgICAgICAgICYmIGNvbXBhcmVDU1NW
YWx1ZVB0cihtX3NlY29uZFksIG90aGVyLm1fc2Vjb25kWSkKKyAgICAgICAgJiYgbV9zdG9wcyA9
PSBvdGhlci5tX3N0b3BzCisgICAgICAgICYmIG1fZ3JhZGllbnRUeXBlID09IG90aGVyLm1fZ3Jh
ZGllbnRUeXBlCisgICAgICAgICYmIG1fcmVwZWF0aW5nID09IG90aGVyLm1fcmVwZWF0aW5nOwor
fQorCiBzdGF0aWMgdm9pZCBhcHBlbmRHcmFkaWVudFN0b3BzKFN0cmluZ0J1aWxkZXImIGJ1aWxk
ZXIsIGNvbnN0IFZlY3RvcjxDU1NHcmFkaWVudENvbG9yU3RvcCwgMj4mIHN0b3BzKQogewogICAg
IGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKSB7Ci0gICAgICAgIGRvdWJsZSBwb3NpdGlvbiA9IHN0
b3AubV9wb3NpdGlvbi0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAg
ICAgICBkb3VibGUgcG9zaXRpb24gPSBzdG9wLnBvc2l0aW9uLT5kb3VibGVWYWx1ZShDU1NVbml0
VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGlmICghcG9zaXRpb24pCi0gICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiLCBmcm9tKCIsIHN0b3AubV9jb2xvci0+Y3NzVGV4dCgpLCAnKScpOwor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgZnJvbSgiLCBzdG9wLmNvbG9yLT5jc3NUZXh0
KCksICcpJyk7CiAgICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uID09IDEpCi0gICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiLCB0bygiLCBzdG9wLm1fY29sb3ItPmNzc1RleHQoKSwgJyknKTsKKyAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIHRvKCIsIHN0b3AuY29sb3ItPmNzc1RleHQoKSwg
JyknKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgY29sb3It
c3RvcCgiLCBwb3NpdGlvbiwgIiwgIiwgc3RvcC5tX2NvbG9yLT5jc3NUZXh0KCksICcpJyk7Cisg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBjb2xvci1zdG9wKCIsIHBvc2l0aW9uLCAiLCAi
LCBzdG9wLmNvbG9yLT5jc3NUZXh0KCksICcpJyk7CiAgICAgfQogfQogCi12b2lkIENTU0dyYWRp
ZW50VmFsdWU6OndyaXRlQ29sb3JTdG9wKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IENT
U0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gc3RhdGljIHZvaWQgYXBwZW5kU3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0clRl
eHQoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgVCYgYSwgY29uc3QgVSYgYikKIHsKLSAg
ICBpZiAoIXN0b3AuaXNNaWRwb2ludCAmJiBzdG9wLm1fY29sb3IpCi0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHN0b3AubV9jb2xvci0+Y3NzVGV4dCgpKTsKKyAgICBpZiAoYSAmJiBiKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZChhLT5jc3NUZXh0KCksICcgJywgYi0+Y3NzVGV4dCgpKTsKKyAgICBl
bHNlIGlmIChhKQorICAgICAgICBidWlsZGVyLmFwcGVuZChhLT5jc3NUZXh0KCkpOworICAgIGVs
c2UgaWYgKGIpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGItPmNzc1RleHQoKSk7Cit9CiAKLSAg
ICBpZiAoc3RvcC5tX3Bvc2l0aW9uKSB7Ci0gICAgICAgIGlmICghc3RvcC5pc01pZHBvaW50KQot
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
c3RvcC5tX3Bvc2l0aW9uLT5jc3NUZXh0KCkpOwotICAgIH0KK3N0YXRpYyB2b2lkIHdyaXRlQ29s
b3JTdG9wKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9w
JiBzdG9wKQoreworICAgIGFwcGVuZFNwYWNlU2VwYXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KGJ1
aWxkZXIsIHN0b3AuY29sb3IsIHN0b3AucG9zaXRpb24pOwogfQogCiBTdHJpbmcgQ1NTTGluZWFy
R3JhZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7Ci0gICAgaWYgKG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0ZWRMaW5lYXJH
cmFkaWVudCkgewotICAgICAgICByZXN1bHQuYXBwZW5kKCItd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwgIiwgbV9maXJzdFgtPmNzc1RleHQoKSwgJyAnLCBtX2ZpcnN0WS0+Y3NzVGV4dCgpLCAiLCAi
LCBtX3NlY29uZFgtPmNzc1RleHQoKSwgJyAnLCBtX3NlY29uZFktPmNzc1RleHQoKSk7Ci0gICAg
ICAgIGFwcGVuZEdyYWRpZW50U3RvcHMocmVzdWx0LCBtX3N0b3BzKTsKLSAgICB9IGVsc2UgaWYg
KG1fZ3JhZGllbnRUeXBlID09IENTU1ByZWZpeGVkTGluZWFyR3JhZGllbnQpIHsKLSAgICAgICAg
aWYgKG1fcmVwZWF0aW5nKQorICAgIGlmIChncmFkaWVudFR5cGUoKSA9PSBDU1NEZXByZWNhdGVk
TGluZWFyR3JhZGllbnQpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiLXdlYmtpdC1ncmFkaWVu
dChsaW5lYXIsICIsIGZpcnN0WCgpLT5jc3NUZXh0KCksICcgJywgZmlyc3RZKCktPmNzc1RleHQo
KSwgIiwgIiwgc2Vjb25kWCgpLT5jc3NUZXh0KCksICcgJywgc2Vjb25kWSgpLT5jc3NUZXh0KCkp
OworICAgICAgICBhcHBlbmRHcmFkaWVudFN0b3BzKHJlc3VsdCwgc3RvcHMoKSk7CisgICAgfSBl
bHNlIGlmIChncmFkaWVudFR5cGUoKSA9PSBDU1NQcmVmaXhlZExpbmVhckdyYWRpZW50KSB7Cisg
ICAgICAgIGlmIChpc1JlcGVhdGluZygpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoIi13ZWJraXQtcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgiKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIi13ZWJraXQtbGluZWFyLWdyYWRpZW50
KCIpOwogCiAgICAgICAgIGlmIChtX2FuZ2xlKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCht
X2FuZ2xlLT5jc3NUZXh0KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX2Zp
cnN0WCAmJiBtX2ZpcnN0WSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RY
LT5jc3NUZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChtX2ZpcnN0WCkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RYLT5j
c3NUZXh0KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9maXJzdFkpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WS0+Y3NzVGV4dCgpKTsKLSAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4
dChyZXN1bHQsIGZpcnN0WCgpLCBmaXJzdFkoKSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBzdG9w
IDogbV9zdG9wcykgeworICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7CiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKICAgICAgICAgICAgIHdyaXRlQ29s
b3JTdG9wKHJlc3VsdCwgc3RvcCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBp
ZiAobV9yZXBlYXRpbmcpCisgICAgICAgIGlmIChpc1JlcGVhdGluZygpKQogICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZExpdGVyYWwoInJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoIik7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJsaW5lYXItZ3JhZGll
bnQoIik7CkBAIC03NTQsMjUgKzcxNywxNiBAQCBTdHJpbmcgQ1NTTGluZWFyR3JhZGllbnRWYWx1
ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgICAgIGlmIChtX2FuZ2xlICYmIG1fYW5nbGUt
PmNvbXB1dGVEZWdyZWVzKCkgIT0gMTgwKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1f
YW5nbGUtPmNzc1RleHQoKSk7CiAgICAgICAgICAgICB3cm90ZVNvbWV0aGluZyA9IHRydWU7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoKG1fZmlyc3RYIHx8IG1fZmlyc3RZKSAmJiAhKCFtX2ZpcnN0WCAm
JiBtX2ZpcnN0WSAmJiBtX2ZpcnN0WS0+dmFsdWVJRCgpID09IENTU1ZhbHVlQm90dG9tKSkgewor
ICAgICAgICB9IGVsc2UgaWYgKChmaXJzdFgoKSB8fCBmaXJzdFkoKSkgJiYgISghZmlyc3RYKCkg
JiYgZmlyc3RZKCkgJiYgZmlyc3RZKCktPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJvdHRvbSkpIHsK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJ0byAiKTsKLSAgICAgICAgICAgIGlm
IChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1f
Zmlyc3RYLT5jc3NUZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtX2ZpcnN0WCkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmly
c3RYLT5jc3NUZXh0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobV9maXJzdFktPmNzc1RleHQoKSk7CisgICAgICAgICAgICBhcHBlbmRTcGFjZVNl
cGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dChyZXN1bHQsIGZpcnN0WCgpLCBmaXJzdFkoKSk7CiAg
ICAgICAgICAgICB3cm90ZVNvbWV0aGluZyA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAod3JvdGVTb21ldGhpbmcpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLCAi
KTsKLQotICAgICAgICBib29sIHdyb3RlRmlyc3RTdG9wID0gZmFsc2U7Ci0gICAgICAgIGZvciAo
YXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgICAgIGlmICh3cm90ZUZpcnN0U3RvcCkK
KyAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkgeworICAgICAgICAgICAgaWYgKHdy
b3RlU29tZXRoaW5nKQogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIp
OwotICAgICAgICAgICAgd3JvdGVGaXJzdFN0b3AgPSB0cnVlOworICAgICAgICAgICAgd3JvdGVT
b21ldGhpbmcgPSB0cnVlOwogICAgICAgICAgICAgd3JpdGVDb2xvclN0b3AocmVzdWx0LCBzdG9w
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTg1OSw0NCArODEzLDQ0IEBAIFJlZjxHcmFkaWVudD4g
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvCiAgICAgRmxvYXRQb2ludCBzZWNvbmRQb2ludDsKICAgICBpZiAobV9hbmdsZSkg
ewogICAgICAgICBmbG9hdCBhbmdsZSA9IG1fYW5nbGUtPmZsb2F0VmFsdWUoQ1NTVW5pdFR5cGU6
OkNTU19ERUcpOwotICAgICAgICBlbmRQb2ludHNGcm9tQW5nbGUoYW5nbGUsIHNpemUsIGZpcnN0
UG9pbnQsIHNlY29uZFBvaW50LCBtX2dyYWRpZW50VHlwZSk7CisgICAgICAgIGVuZFBvaW50c0Zy
b21BbmdsZShhbmdsZSwgc2l6ZSwgZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQsIGdyYWRpZW50VHlw
ZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKG1fZ3JhZGllbnRUeXBlKSB7Cisg
ICAgICAgIHN3aXRjaCAoZ3JhZGllbnRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBDU1NEZXByZWNh
dGVkTGluZWFyR3JhZGllbnQ6Ci0gICAgICAgICAgICBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBv
aW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgY29udmVyc2lvbkRhdGEsIHNpemUp
OwotICAgICAgICAgICAgaWYgKG1fc2Vjb25kWCB8fCBtX3NlY29uZFkpCi0gICAgICAgICAgICAg
ICAgc2Vjb25kUG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9zZWNvbmRYLmdldCgpLCBtX3NlY29u
ZFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKKyAgICAgICAgICAgIGZpcnN0UG9pbnQg
PSBjb21wdXRlRW5kUG9pbnQoZmlyc3RYKCksIGZpcnN0WSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6
ZSk7CisgICAgICAgICAgICBpZiAoc2Vjb25kWCgpIHx8IHNlY29uZFkoKSkKKyAgICAgICAgICAg
ICAgICBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQb2ludChzZWNvbmRYKCksIHNlY29uZFkoKSwg
Y29udmVyc2lvbkRhdGEsIHNpemUpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fZmlyc3RYKQorICAgICAgICAgICAgICAgIGlmIChmaXJzdFgoKSkKICAgICAgICAg
ICAgICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WChzaXplLndpZHRoKCkgLSBmaXJzdFBvaW50Lngo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZmlyc3RZKQorICAgICAgICAgICAgICAgIGlmIChm
aXJzdFkoKSkKICAgICAgICAgICAgICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WShzaXplLmhlaWdo
dCgpIC0gZmlyc3RQb2ludC55KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudDoKLSAgICAgICAgICAgIGZp
cnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCksIG1fZmlyc3RZLmdldCgp
LCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7Ci0gICAgICAgICAgICBpZiAobV9maXJzdFgpCisgICAg
ICAgICAgICBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KGZpcnN0WCgpLCBmaXJzdFkoKSwg
Y29udmVyc2lvbkRhdGEsIHNpemUpOworICAgICAgICAgICAgaWYgKGZpcnN0WCgpKQogICAgICAg
ICAgICAgICAgIHNlY29uZFBvaW50LnNldFgoc2l6ZS53aWR0aCgpIC0gZmlyc3RQb2ludC54KCkp
OwotICAgICAgICAgICAgaWYgKG1fZmlyc3RZKQorICAgICAgICAgICAgaWYgKGZpcnN0WSgpKQog
ICAgICAgICAgICAgICAgIHNlY29uZFBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAtIGZpcnN0UG9p
bnQueSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU0xpbmVhckdyYWRp
ZW50OgotICAgICAgICAgICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZKSB7CisgICAgICAgICAg
ICBpZiAoZmlyc3RYKCkgJiYgZmlyc3RZKCkpIHsKICAgICAgICAgICAgICAgICAvLyAiTWFnaWMi
IGNvcm5lcnMsIHNvIHRoZSA1MCUgbGluZSB0b3VjaGVzIHR3byBjb3JuZXJzLgogICAgICAgICAg
ICAgICAgIGZsb2F0IHJpc2UgPSBzaXplLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgZmxvYXQg
cnVuID0gc2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9maXJzdFggJiYgbV9m
aXJzdFgtPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUxlZnQpCisgICAgICAgICAgICAgICAgaWYgKGZp
cnN0WCgpICYmIGZpcnN0WCgpLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVMZWZ0KQogICAgICAgICAg
ICAgICAgICAgICBydW4gKj0gLTE7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZmlyc3RZICYmIG1f
Zmlyc3RZLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3R0b20pCisgICAgICAgICAgICAgICAgaWYg
KGZpcnN0WSgpICYmIGZpcnN0WSgpLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3R0b20pCiAgICAg
ICAgICAgICAgICAgICAgIHJpc2UgKj0gLTE7CiAgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBh
bmdsZSwgYW5kIGZsaXAgaXQgYmFjayB0byAiYmVhcmluZyBhbmdsZSIgZGVncmVlcy4KICAgICAg
ICAgICAgICAgICBmbG9hdCBhbmdsZSA9IDkwIC0gcmFkMmRlZyhhdGFuMihyaXNlLCBydW4pKTsK
LSAgICAgICAgICAgICAgICBlbmRQb2ludHNGcm9tQW5nbGUoYW5nbGUsIHNpemUsIGZpcnN0UG9p
bnQsIHNlY29uZFBvaW50LCBtX2dyYWRpZW50VHlwZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KG1fZmlyc3RYIHx8IG1fZmlyc3RZKSB7IAotICAgICAgICAgICAgICAgIHNlY29uZFBvaW50ID0g
Y29tcHV0ZUVuZFBvaW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgY29udmVyc2lv
bkRhdGEsIHNpemUpOwotICAgICAgICAgICAgICAgIGlmIChtX2ZpcnN0WCkKKyAgICAgICAgICAg
ICAgICBlbmRQb2ludHNGcm9tQW5nbGUoYW5nbGUsIHNpemUsIGZpcnN0UG9pbnQsIHNlY29uZFBv
aW50LCBncmFkaWVudFR5cGUoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0WCgpIHx8
IGZpcnN0WSgpKSB7CisgICAgICAgICAgICAgICAgc2Vjb25kUG9pbnQgPSBjb21wdXRlRW5kUG9p
bnQoZmlyc3RYKCksIGZpcnN0WSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CisgICAgICAgICAg
ICAgICAgaWYgKGZpcnN0WCgpKQogICAgICAgICAgICAgICAgICAgICBmaXJzdFBvaW50LnNldFgo
c2l6ZS53aWR0aCgpIC0gc2Vjb25kUG9pbnQueCgpKTsKLSAgICAgICAgICAgICAgICBpZiAobV9m
aXJzdFkpCisgICAgICAgICAgICAgICAgaWYgKGZpcnN0WSgpKQogICAgICAgICAgICAgICAgICAg
ICBmaXJzdFBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAtIHNlY29uZFBvaW50LnkoKSk7CiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBzZWNvbmRQb2ludC5zZXRZKHNpemUuaGVp
Z2h0KCkpOwpAQCAtOTE3LDU5ICs4NzEsMjUgQEAgUmVmPEdyYWRpZW50PiBDU1NMaW5lYXJHcmFk
aWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY28KIAog
Ym9vbCBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjplcXVhbHMoY29uc3QgQ1NTTGluZWFyR3JhZGll
bnRWYWx1ZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZ3JhZGllbnRUeXBlID09IENTU0Rl
cHJlY2F0ZWRMaW5lYXJHcmFkaWVudCkKLSAgICAgICAgcmV0dXJuIG90aGVyLm1fZ3JhZGllbnRU
eXBlID09IG1fZ3JhZGllbnRUeXBlCi0gICAgICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIo
bV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVl
UHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0WSkKLSAgICAgICAgICAgICYmIGNvbXBhcmVDU1NW
YWx1ZVB0cihtX3NlY29uZFgsIG90aGVyLm1fc2Vjb25kWCkKLSAgICAgICAgICAgICYmIGNvbXBh
cmVDU1NWYWx1ZVB0cihtX3NlY29uZFksIG90aGVyLm1fc2Vjb25kWSkKLSAgICAgICAgICAgICYm
IG1fc3RvcHMgPT0gb3RoZXIubV9zdG9wczsKLQotICAgIGlmIChtX2dyYWRpZW50VHlwZSAhPSBv
dGhlci5tX2dyYWRpZW50VHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1f
cmVwZWF0aW5nICE9IG90aGVyLm1fcmVwZWF0aW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAobV9hbmdsZSkKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2Fu
Z2xlLCBvdGhlci5tX2FuZ2xlKSAmJiBtX3N0b3BzID09IG90aGVyLm1fc3RvcHM7Ci0KLSAgICBp
ZiAob3RoZXIubV9hbmdsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBlcXVh
bFhhbmRZID0gZmFsc2U7Ci0gICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZKQotICAgICAgICBl
cXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5tX2ZpcnN0WCkg
JiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0WSk7Ci0gICAgZWxz
ZSBpZiAobV9maXJzdFgpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NTVmFsdWVQdHIo
bV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKSAmJiAhb3RoZXIubV9maXJzdFk7Ci0gICAgZWxzZSBp
ZiAobV9maXJzdFkpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NTVmFsdWVQdHIobV9m
aXJzdFksIG90aGVyLm1fZmlyc3RZKSAmJiAhb3RoZXIubV9maXJzdFg7Ci0gICAgZWxzZQotICAg
ICAgICBlcXVhbFhhbmRZID0gIW90aGVyLm1fZmlyc3RYICYmICFvdGhlci5tX2ZpcnN0WTsKLQot
ICAgIHJldHVybiBlcXVhbFhhbmRZICYmIG1fc3RvcHMgPT0gb3RoZXIubV9zdG9wczsKKyAgICBy
ZXR1cm4gQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKG90aGVyKSAmJiBjb21wYXJlQ1NTVmFsdWVQ
dHIobV9hbmdsZSwgb3RoZXIubV9hbmdsZSk7CiB9CiAKIFN0cmluZyBDU1NSYWRpYWxHcmFkaWVu
dFZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3Vs
dDsKIAotICAgIGlmIChtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFsR3JhZGll
bnQpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLXdlYmtpdC1ncmFkaWVudChyYWRpYWwsICIs
IG1fZmlyc3RYLT5jc3NUZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSwgIiwgIiwgbV9m
aXJzdFJhZGl1cy0+Y3NzVGV4dCgpLAotICAgICAgICAgICAgIiwgIiwgbV9zZWNvbmRYLT5jc3NU
ZXh0KCksICcgJywgbV9zZWNvbmRZLT5jc3NUZXh0KCksICIsICIsIG1fc2Vjb25kUmFkaXVzLT5j
c3NUZXh0KCkpOwotICAgICAgICBhcHBlbmRHcmFkaWVudFN0b3BzKHJlc3VsdCwgbV9zdG9wcyk7
Ci0gICAgfSBlbHNlIGlmIChtX2dyYWRpZW50VHlwZSA9PSBDU1NQcmVmaXhlZFJhZGlhbEdyYWRp
ZW50KSB7Ci0gICAgICAgIGlmIChtX3JlcGVhdGluZykKKyAgICBpZiAoZ3JhZGllbnRUeXBlKCkg
PT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQo
Ii13ZWJraXQtZ3JhZGllbnQocmFkaWFsLCAiLCBmaXJzdFgoKS0+Y3NzVGV4dCgpLCAnICcsIGZp
cnN0WSgpLT5jc3NUZXh0KCksICIsICIsIG1fZmlyc3RSYWRpdXMtPmNzc1RleHQoKSwKKyAgICAg
ICAgICAgICIsICIsIHNlY29uZFgoKS0+Y3NzVGV4dCgpLCAnICcsIHNlY29uZFkoKS0+Y3NzVGV4
dCgpLCAiLCAiLCBtX3NlY29uZFJhZGl1cy0+Y3NzVGV4dCgpKTsKKyAgICAgICAgYXBwZW5kR3Jh
ZGllbnRTdG9wcyhyZXN1bHQsIHN0b3BzKCkpOworICAgIH0gZWxzZSBpZiAoZ3JhZGllbnRUeXBl
KCkgPT0gQ1NTUHJlZml4ZWRSYWRpYWxHcmFkaWVudCkgeworICAgICAgICBpZiAoaXNSZXBlYXRp
bmcoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCItd2Via2l0LXJlcGVhdGlu
Zy1yYWRpYWwtZ3JhZGllbnQoIik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCItd2Via2l0LXJhZGlhbC1ncmFkaWVudCgiKTsKIAotICAgICAgICBpZiAo
bV9maXJzdFggJiYgbV9maXJzdFkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fZmlyc3RY
LT5jc3NUZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSk7Ci0gICAgICAgIGVsc2UgaWYg
KG1fZmlyc3RYKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX2ZpcnN0WC0+Y3NzVGV4dCgp
KTsKLSAgICAgICAgZWxzZSBpZiAobV9maXJzdFkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KG1fZmlyc3RZLT5jc3NUZXh0KCkpOworICAgICAgICBpZiAoZmlyc3RYKCkgfHwgZmlyc3RZKCkp
CisgICAgICAgICAgICBhcHBlbmRTcGFjZVNlcGFyYXRlZE9wdGlvbmFsQ1NTUHRyVGV4dChyZXN1
bHQsIGZpcnN0WCgpLCBmaXJzdFkoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmRMaXRlcmFsKCJjZW50ZXIiKTsKIApAQCAtOTg2LDEyICs5MDYsMTIgQEAgU3RyaW5n
IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAogICAgICAgICB9
IGVsc2UgaWYgKG1fZW5kSG9yaXpvbnRhbFNpemUgJiYgbV9lbmRWZXJ0aWNhbFNpemUpCiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCIsICIsIG1fZW5kSG9yaXpvbnRhbFNpemUtPmNzc1RleHQo
KSwgJyAnLCBtX2VuZFZlcnRpY2FsU2l6ZS0+Y3NzVGV4dCgpKTsKIAotICAgICAgICBmb3IgKGF1
dG8mIHN0b3AgOiBtX3N0b3BzKSB7CisgICAgICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKCkp
IHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwogICAgICAgICAgICAg
d3JpdGVDb2xvclN0b3AocmVzdWx0LCBzdG9wKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChtX3JlcGVhdGluZykKKyAgICAgICAgaWYgKGlzUmVwZWF0aW5nKCkpCiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgicmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCgi
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoInJhZGlh
bC1ncmFkaWVudCgiKTsKQEAgLTEwMTksMTYgKzkzOSwxMSBAQCBTdHJpbmcgQ1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICB3cm90ZVNvbWV0
aGluZyA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9maXJzdFggfHwgbV9maXJz
dFkpIHsKKyAgICAgICAgaWYgKGZpcnN0WCgpIHx8IGZpcnN0WSgpKSB7CiAgICAgICAgICAgICBp
ZiAod3JvdGVTb21ldGhpbmcpCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImF0ICIpOwotICAgICAgICAgICAgaWYg
KG1fZmlyc3RYICYmIG1fZmlyc3RZKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9m
aXJzdFgtPmNzc1RleHQoKSwgJyAnLCBtX2ZpcnN0WS0+Y3NzVGV4dCgpKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKG1fZmlyc3RYKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9maXJz
dFgtPmNzc1RleHQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChtX2ZpcnN0WS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIGFwcGVuZFNwYWNlU2Vw
YXJhdGVkT3B0aW9uYWxDU1NQdHJUZXh0KHJlc3VsdCwgZmlyc3RYKCksIGZpcnN0WSgpKTsKICAg
ICAgICAgICAgIHdyb3RlU29tZXRoaW5nID0gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xMDM2LDcg
Kzk1MSw3IEBAIFN0cmluZyBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0KCkg
Y29uc3QKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIsICIpOwogCiAgICAgICAg
IGJvb2wgd3JvdGVGaXJzdFN0b3AgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiBzdG9wIDog
bV9zdG9wcykgeworICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7CiAgICAgICAg
ICAgICBpZiAod3JvdGVGaXJzdFN0b3ApCiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoIiwgIik7CiAgICAgICAgICAgICB3cm90ZUZpcnN0U3RvcCA9IHRydWU7CkBAIC0xMTQz
LDE2ICsxMDU4LDE2IEBAIFJlZjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3Jl
YXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvCiAKICAgICBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKCZyZW5kZXJlci5zdHlsZSgpLCByZW5kZXJl
ci5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpLCAmcmVuZGVyZXIu
dmlldygpKTsKIAotICAgIEZsb2F0UG9pbnQgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2ludCht
X2ZpcnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKLSAg
ICBpZiAoIW1fZmlyc3RYKQorICAgIEZsb2F0UG9pbnQgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQ
b2ludChmaXJzdFgoKSwgZmlyc3RZKCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKKyAgICBpZiAo
IWZpcnN0WCgpKQogICAgICAgICBmaXJzdFBvaW50LnNldFgoc2l6ZS53aWR0aCgpIC8gMik7Ci0g
ICAgaWYgKCFtX2ZpcnN0WSkKKyAgICBpZiAoIWZpcnN0WSgpKQogICAgICAgICBmaXJzdFBvaW50
LnNldFkoc2l6ZS5oZWlnaHQoKSAvIDIpOwogCi0gICAgRmxvYXRQb2ludCBzZWNvbmRQb2ludCA9
IGNvbXB1dGVFbmRQb2ludChtX3NlY29uZFguZ2V0KCksIG1fc2Vjb25kWS5nZXQoKSwgY29udmVy
c2lvbkRhdGEsIHNpemUpOwotICAgIGlmICghbV9zZWNvbmRYKQorICAgIEZsb2F0UG9pbnQgc2Vj
b25kUG9pbnQgPSBjb21wdXRlRW5kUG9pbnQoc2Vjb25kWCgpLCBzZWNvbmRZKCksIGNvbnZlcnNp
b25EYXRhLCBzaXplKTsKKyAgICBpZiAoIXNlY29uZFgoKSkKICAgICAgICAgc2Vjb25kUG9pbnQu
c2V0WChzaXplLndpZHRoKCkgLyAyKTsKLSAgICBpZiAoIW1fc2Vjb25kWSkKKyAgICBpZiAoIXNl
Y29uZFkoKSkKICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WShzaXplLmhlaWdodCgpIC8gMik7CiAK
ICAgICBmbG9hdCBmaXJzdFJhZGl1cyA9IDA7CkBAIC0xMjY2LDcgKzExODEsNyBAQCBSZWY8R3Jh
ZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjbwogCiAgICAgLy8gY29tcHV0ZVN0b3BzKCkgb25seSB1c2VzIG1heEV4
dGVudCBmb3IgcmVwZWF0aW5nIGdyYWRpZW50cy4KICAgICBmbG9hdCBtYXhFeHRlbnQgPSAwOwot
ICAgIGlmIChtX3JlcGVhdGluZykgeworICAgIGlmIChpc1JlcGVhdGluZygpKSB7CiAgICAgICAg
IEZsb2F0UG9pbnQgY29ybmVyOwogICAgICAgICBtYXhFeHRlbnQgPSBkaXN0YW5jZVRvRmFydGhl
c3RDb3JuZXIoc2Vjb25kUG9pbnQsIHNpemUsIGNvcm5lcik7CiAgICAgfQpAQCAtMTI4Miw1OSAr
MTE5NywxOCBAQCBSZWY8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdy
YWRpZW50KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjbwogCiBib29sIENTU1JhZGlhbEdyYWRp
ZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlJiBvdGhlcikgY29u
c3QKIHsKLSAgICBpZiAobV9ncmFkaWVudFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRp
ZW50KQotICAgICAgICByZXR1cm4gb3RoZXIubV9ncmFkaWVudFR5cGUgPT0gbV9ncmFkaWVudFR5
cGUKLSAgICAgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WCwgb3RoZXIubV9m
aXJzdFgpCi0gICAgICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9maXJzdFksIG90aGVy
Lm1fZmlyc3RZKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vjb25kWCwg
b3RoZXIubV9zZWNvbmRYKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fc2Vj
b25kWSwgb3RoZXIubV9zZWNvbmRZKQotICAgICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRy
KG1fZmlyc3RSYWRpdXMsIG90aGVyLm1fZmlyc3RSYWRpdXMpCi0gICAgICAgICAgICAmJiBjb21w
YXJlQ1NTVmFsdWVQdHIobV9zZWNvbmRSYWRpdXMsIG90aGVyLm1fc2Vjb25kUmFkaXVzKQotICAg
ICAgICAgICAgJiYgbV9zdG9wcyA9PSBvdGhlci5tX3N0b3BzOwotCi0gICAgaWYgKG1fZ3JhZGll
bnRUeXBlICE9IG90aGVyLm1fZ3JhZGllbnRUeXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAobV9yZXBlYXRpbmcgIT0gb3RoZXIubV9yZXBlYXRpbmcpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGJvb2wgZXF1YWxYYW5kWSA9IGZhbHNlOwotICAgIGlmIChtX2ZpcnN0
WCAmJiBtX2ZpcnN0WSkKLSAgICAgICAgZXF1YWxYYW5kWSA9IGNvbXBhcmVDU1NWYWx1ZVB0ciht
X2ZpcnN0WCwgb3RoZXIubV9maXJzdFgpICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2ZpcnN0WSwg
b3RoZXIubV9maXJzdFkpOwotICAgIGVsc2UgaWYgKG1fZmlyc3RYKQotICAgICAgICBlcXVhbFhh
bmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhlci5tX2ZpcnN0WCkgJiYgIW90
aGVyLm1fZmlyc3RZOwotICAgIGVsc2UgaWYgKG1fZmlyc3RZKQotICAgICAgICBlcXVhbFhhbmRZ
ID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0WSkgJiYgIW90aGVy
Lm1fZmlyc3RYOwotICAgIGVsc2UKLSAgICAgICAgZXF1YWxYYW5kWSA9ICFvdGhlci5tX2ZpcnN0
WCAmJiAhb3RoZXIubV9maXJzdFk7Ci0KLSAgICBpZiAoIWVxdWFsWGFuZFkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGJvb2wgZXF1YWxTaGFwZSA9IHRydWU7Ci0gICAgYm9vbCBlcXVh
bFNpemluZ0JlaGF2aW9yID0gdHJ1ZTsKLSAgICBib29sIGVxdWFsSG9yaXpvbnRhbEFuZFZlcnRp
Y2FsU2l6ZSA9IHRydWU7Ci0KLSAgICBpZiAobV9zaGFwZSkKLSAgICAgICAgZXF1YWxTaGFwZSA9
IGNvbXBhcmVDU1NWYWx1ZVB0cihtX3NoYXBlLCBvdGhlci5tX3NoYXBlKTsKLSAgICBlbHNlIGlm
IChtX3NpemluZ0JlaGF2aW9yKQotICAgICAgICBlcXVhbFNpemluZ0JlaGF2aW9yID0gY29tcGFy
ZUNTU1ZhbHVlUHRyKG1fc2l6aW5nQmVoYXZpb3IsIG90aGVyLm1fc2l6aW5nQmVoYXZpb3IpOwot
ICAgIGVsc2UgaWYgKG1fZW5kSG9yaXpvbnRhbFNpemUgJiYgbV9lbmRWZXJ0aWNhbFNpemUpCi0g
ICAgICAgIGVxdWFsSG9yaXpvbnRhbEFuZFZlcnRpY2FsU2l6ZSA9IGNvbXBhcmVDU1NWYWx1ZVB0
cihtX2VuZEhvcml6b250YWxTaXplLCBvdGhlci5tX2VuZEhvcml6b250YWxTaXplKSAmJiBjb21w
YXJlQ1NTVmFsdWVQdHIobV9lbmRWZXJ0aWNhbFNpemUsIG90aGVyLm1fZW5kVmVydGljYWxTaXpl
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgZXF1YWxTaGFwZSA9ICFvdGhlci5tX3NoYXBlOwotICAg
ICAgICBlcXVhbFNpemluZ0JlaGF2aW9yID0gIW90aGVyLm1fc2l6aW5nQmVoYXZpb3I7Ci0gICAg
ICAgIGVxdWFsSG9yaXpvbnRhbEFuZFZlcnRpY2FsU2l6ZSA9ICFvdGhlci5tX2VuZEhvcml6b250
YWxTaXplICYmICFvdGhlci5tX2VuZFZlcnRpY2FsU2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGVx
dWFsU2hhcGUgJiYgZXF1YWxTaXppbmdCZWhhdmlvciAmJiBlcXVhbEhvcml6b250YWxBbmRWZXJ0
aWNhbFNpemUgJiYgbV9zdG9wcyA9PSBvdGhlci5tX3N0b3BzOworICAgIHJldHVybiBDU1NHcmFk
aWVudFZhbHVlOjplcXVhbHMob3RoZXIpCisgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0ciht
X3NoYXBlLCBvdGhlci5tX3NoYXBlKQorICAgICAgICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9z
aXppbmdCZWhhdmlvciwgb3RoZXIubV9zaXppbmdCZWhhdmlvcikKKyAgICAgICAgJiYgY29tcGFy
ZUNTU1ZhbHVlUHRyKG1fZW5kSG9yaXpvbnRhbFNpemUsIG90aGVyLm1fZW5kSG9yaXpvbnRhbFNp
emUpCisgICAgICAgICYmIGNvbXBhcmVDU1NWYWx1ZVB0cihtX2VuZFZlcnRpY2FsU2l6ZSwgb3Ro
ZXIubV9lbmRWZXJ0aWNhbFNpemUpOwogfQogCi0KIFN0cmluZyBDU1NDb25pY0dyYWRpZW50VmFs
dWU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0Owog
Ci0gICAgaWYgKG1fcmVwZWF0aW5nKQorICAgIGlmIChpc1JlcGVhdGluZygpKQogICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgicmVwZWF0aW5nLWNvbmljLWdyYWRpZW50KCIpOwogICAgIGVs
c2UKICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImNvbmljLWdyYWRpZW50KCIpOwpAQCAt
MTM0NiwxMCArMTIyMCwxMSBAQCBTdHJpbmcgQ1NTQ29uaWNHcmFkaWVudFZhbHVlOjpjdXN0b21D
U1NUZXh0KCkgY29uc3QKICAgICAgICAgd3JvdGVTb21ldGhpbmcgPSB0cnVlOwogICAgIH0KIAot
ICAgIGlmIChtX2ZpcnN0WCAmJiBtX2ZpcnN0WSkgeworICAgIGlmIChmaXJzdFgoKSAmJiBmaXJz
dFkoKSkgewogICAgICAgICBpZiAod3JvdGVTb21ldGhpbmcpCiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgJyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoImF0ICIsIG1fZmlyc3RYLT5jc3NU
ZXh0KCksICcgJywgbV9maXJzdFktPmNzc1RleHQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmRM
aXRlcmFsKCJhdCAiKTsKKyAgICAgICAgYXBwZW5kU3BhY2VTZXBhcmF0ZWRPcHRpb25hbENTU1B0
clRleHQocmVzdWx0LCBmaXJzdFgoKSwgZmlyc3RZKCkpOwogICAgICAgICB3cm90ZVNvbWV0aGlu
ZyA9IHRydWU7CiAgICAgfQogCkBAIC0xMzU3LDcgKzEyMzIsNyBAQCBTdHJpbmcgQ1NTQ29uaWNH
cmFkaWVudFZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAgICAgICAgcmVzdWx0LmFwcGVu
ZExpdGVyYWwoIiwgIik7CiAKICAgICBib29sIHdyb3RlRmlyc3RTdG9wID0gZmFsc2U7Ci0gICAg
Zm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykgeworICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3Bz
KCkpIHsKICAgICAgICAgaWYgKHdyb3RlRmlyc3RTdG9wKQogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZExpdGVyYWwoIiwgIik7CiAgICAgICAgIHdyb3RlRmlyc3RTdG9wID0gdHJ1ZTsKQEAgLTEz
NzQsMTAgKzEyNDksMTAgQEAgUmVmPEdyYWRpZW50PiBDU1NDb25pY0dyYWRpZW50VmFsdWU6OmNy
ZWF0ZUdyYWRpZW50KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb24KIAogICAgIENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEoJnJlbmRlcmVyLnN0eWxlKCksIHJlbmRl
cmVyLmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCksICZyZW5kZXJl
ci52aWV3KCkpOwogCi0gICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludCA9IGNvbXB1dGVFbmRQb2lu
dChtX2ZpcnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsK
LSAgICBpZiAoIW1fZmlyc3RYKQorICAgIEZsb2F0UG9pbnQgY2VudGVyUG9pbnQgPSBjb21wdXRl
RW5kUG9pbnQoZmlyc3RYKCksIGZpcnN0WSgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CisgICAg
aWYgKCFmaXJzdFgoKSkKICAgICAgICAgY2VudGVyUG9pbnQuc2V0WChzaXplLndpZHRoKCkgLyAy
KTsKLSAgICBpZiAoIW1fZmlyc3RZKQorICAgIGlmICghZmlyc3RZKCkpCiAgICAgICAgIGNlbnRl
clBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAvIDIpOwogCiAgICAgZmxvYXQgYW5nbGVSYWRpYW5z
ID0gMDsKQEAgLTEzOTUsMjMgKzEyNzAsNyBAQCBSZWY8R3JhZGllbnQ+IENTU0NvbmljR3JhZGll
bnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbgogCiBi
b29sIENTU0NvbmljR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0NvbmljR3JhZGllbnRW
YWx1ZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmVwZWF0aW5nICE9IG90aGVyLm1fcmVw
ZWF0aW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNvbXBhcmVDU1NWYWx1
ZVB0cihtX2FuZ2xlLCBvdGhlci5tX2FuZ2xlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYm9vbCBlcXVhbFhhbmRZID0gZmFsc2U7Ci0gICAgaWYgKG1fZmlyc3RYICYmIG1fZmlyc3RZ
KQotICAgICAgICBlcXVhbFhhbmRZID0gY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RYLCBvdGhl
ci5tX2ZpcnN0WCkgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fZmlyc3RZLCBvdGhlci5tX2ZpcnN0
WSk7Ci0gICAgZWxzZSBpZiAobV9maXJzdFgpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJl
Q1NTVmFsdWVQdHIobV9maXJzdFgsIG90aGVyLm1fZmlyc3RYKSAmJiAhb3RoZXIubV9maXJzdFk7
Ci0gICAgZWxzZSBpZiAobV9maXJzdFkpCi0gICAgICAgIGVxdWFsWGFuZFkgPSBjb21wYXJlQ1NT
VmFsdWVQdHIobV9maXJzdFksIG90aGVyLm1fZmlyc3RZKSAmJiAhb3RoZXIubV9maXJzdFg7Ci0g
ICAgZWxzZQotICAgICAgICBlcXVhbFhhbmRZID0gIW90aGVyLm1fZmlyc3RYICYmICFvdGhlci5t
X2ZpcnN0WTsKLQotICAgIHJldHVybiBlcXVhbFhhbmRZICYmIG1fc3RvcHMgPT0gb3RoZXIubV9z
dG9wczsKKyAgICByZXR1cm4gQ1NTR3JhZGllbnRWYWx1ZTo6ZXF1YWxzKG90aGVyKSAmJiBjb21w
YXJlQ1NTVmFsdWVQdHIobV9hbmdsZSwgb3RoZXIubV9hbmdsZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCmluZGV4IGQ3NTQ0
MmUwYTJiOWRlODUwNGU5MWI1OWU5ZTAyNDM1NjM2NTQ3MDAuLjQwNjk3OTg0NjdkZThhODJlZDM0
NTJmNDJkZTY0YzAzMmNhZTFhMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFkaWVudFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUu
aApAQCAtMjgsMTMgKzI4LDkgQEAKICNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBG
bG9hdFBvaW50OwotY2xhc3MgU3R5bGVSZXNvbHZlcjsKLQogbmFtZXNwYWNlIFN0eWxlIHsKIGNs
YXNzIEJ1aWxkZXJTdGF0ZTsKIH0KQEAgLTUxLDQ3ICs0NywzOCBAQCBlbnVtIENTU0dyYWRpZW50
VHlwZSB7CiBlbnVtIENTU0dyYWRpZW50UmVwZWF0IHsgTm9uUmVwZWF0aW5nLCBSZXBlYXRpbmcg
fTsKIAogc3RydWN0IENTU0dyYWRpZW50Q29sb3JTdG9wIHsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IG1fcG9zaXRpb247IC8vIHBlcmNlbnRhZ2Ugb3IgbGVuZ3RoCi0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBtX2NvbG9yOwotICAgIENvbG9yIG1fcmVzb2x2ZWRDb2xvcjsK
LSAgICBib29sIG1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IGZhbHNlOwotICAgIGJvb2wg
aXNNaWRwb2ludCA9IGZhbHNlOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NHcmFkaWVu
dENvbG9yU3RvcCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gY29tcGFyZUNT
U1ZhbHVlUHRyKG1fY29sb3IsIG90aGVyLm1fY29sb3IpCi0gICAgICAgICAgICAmJiBjb21wYXJl
Q1NTVmFsdWVQdHIobV9wb3NpdGlvbiwgb3RoZXIubV9wb3NpdGlvbik7Ci0gICAgfQorICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3I7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBwb3NpdGlvbjsgLy8gcGVyY2VudGFnZSBvciBsZW5ndGgKKyAgICBDb2xvciByZXNvbHZl
ZENvbG9yOwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NHcmFkaWVudENv
bG9yU3RvcCYgYSwgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIGIpCit7CisgICAgcmV0dXJu
IGNvbXBhcmVDU1NWYWx1ZVB0cihhLmNvbG9yLCBiLmNvbG9yKSAmJiBjb21wYXJlQ1NTVmFsdWVQ
dHIoYS5wb3NpdGlvbiwgYi5wb3NpdGlvbik7Cit9CisKIGNsYXNzIENTU0dyYWRpZW50VmFsdWUg
OiBwdWJsaWMgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgUmVmUHRyPElt
YWdlPiBpbWFnZShSZW5kZXJFbGVtZW50JiwgY29uc3QgRmxvYXRTaXplJik7Ci0KLSAgICB2b2lk
IHNldEZpcnN0WChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fZmlyc3RYID0g
V1RGTW92ZSh2YWwpOyB9Ci0gICAgdm9pZCBzZXRGaXJzdFkoUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiYmIHZhbCkgeyBtX2ZpcnN0WSA9IFdURk1vdmUodmFsKTsgfQotICAgIHZvaWQgc2V0U2Vj
b25kWChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fc2Vjb25kWCA9IFdURk1v
dmUodmFsKTsgfQotICAgIHZvaWQgc2V0U2Vjb25kWShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
JiYgdmFsKSB7IG1fc2Vjb25kWSA9IFdURk1vdmUodmFsKTsgfQotCi0gICAgdm9pZCBhZGRTdG9w
KGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdG9wKSB7IG1fc3RvcHMuYXBwZW5kKHN0b3Ap
OyB9CisgICAgdm9pZCBzZXRGaXJzdFgoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVl
KSB7IG1fZmlyc3RYID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldEZpcnN0WShSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpIHsgbV9maXJzdFkgPSBXVEZNb3ZlKHZhbHVl
KTsgfQorICAgIHZvaWQgc2V0U2Vjb25kWChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFs
dWUpIHsgbV9zZWNvbmRYID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFNlY29uZFko
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fc2Vjb25kWSA9IFdURk1vdmUo
dmFsdWUpOyB9CisgICAgdm9pZCBhZGRTdG9wKENTU0dyYWRpZW50Q29sb3JTdG9wJiYgc3RvcCkg
eyBtX3N0b3BzLmFwcGVuZChXVEZNb3ZlKHN0b3ApKTsgfQogICAgIHZvaWQgZG9uZUFkZGluZ1N0
b3BzKCkgeyBtX3N0b3BzLnNocmlua1RvRml0KCk7IH0KLQotICAgIHVuc2lnbmVkIHN0b3BDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHMuc2l6ZSgpOyB9Ci0KLSAgICB2b2lkIHNvcnRTdG9w
c0lmTmVlZGVkKCk7Ci0KLSAgICBib29sIGlzUmVwZWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXBlYXRpbmc7IH0KKyAgICBib29sIGhhc0F0TGVhc3RUd29TdG9wcygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RvcHMuc2l6ZSgpID49IDI7IH0KKyAgICB2b2lkIHJlc29sdmVSR0JDb2xvcnMoKTsKIAog
ICAgIENTU0dyYWRpZW50VHlwZSBncmFkaWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2dyYWRp
ZW50VHlwZTsgfQogCi0gICAgYm9vbCBpc0ZpeGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgRmxvYXRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50JikgY29uc3Qg
eyByZXR1cm4gRmxvYXRTaXplKCk7IH0KLQotICAgIGJvb2wgaXNQZW5kaW5nKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBGbG9hdFNpemUmKTsKICAgICBib29sIGtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJF
bGVtZW50JikgY29uc3Q7CiAKLSAgICB2b2lkIGxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VM
b2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSB7IH0KKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNGaXhlZFNpemUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBG
bG9hdFNpemUgZml4ZWRTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQmKSB7IHJldHVybiBGbG9hdFNp
emUoKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc1BlbmRpbmcoKSB7IHJldHVybiBm
YWxzZTsgfQorICAgIHN0YXRpYyB2b2lkIGxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSB7IH0KKwogICAgIFJlZjxDU1NHcmFk
aWVudFZhbHVlPiBncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZTo6QnVpbGRlclN0YXRl
Jik7Ci0gICAgdm9pZCByZXNvbHZlUkdCQ29sb3JzKCk7CiAKIHByb3RlY3RlZDoKICAgICBDU1NH
cmFkaWVudFZhbHVlKENsYXNzVHlwZSBjbGFzc1R5cGUsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVh
dCwgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSkKQEAgLTEwMSw0MSArODgsNDMgQEAgcHJv
dGVjdGVkOgogICAgIHsKICAgICB9CiAKLSAgICBDU1NHcmFkaWVudFZhbHVlKGNvbnN0IENTU0dy
YWRpZW50VmFsdWUmIG90aGVyLCBDbGFzc1R5cGUgY2xhc3NUeXBlLCBDU1NHcmFkaWVudFR5cGUg
Z3JhZGllbnRUeXBlKQorICAgIENTU0dyYWRpZW50VmFsdWUoY29uc3QgQ1NTR3JhZGllbnRWYWx1
ZSYgb3RoZXIsIENsYXNzVHlwZSBjbGFzc1R5cGUpCiAgICAgICAgIDogQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZShjbGFzc1R5cGUpCiAgICAgICAgICwgbV9maXJzdFgob3RoZXIubV9maXJzdFgpCiAg
ICAgICAgICwgbV9maXJzdFkob3RoZXIubV9maXJzdFkpCiAgICAgICAgICwgbV9zZWNvbmRYKG90
aGVyLm1fc2Vjb25kWCkKICAgICAgICAgLCBtX3NlY29uZFkob3RoZXIubV9zZWNvbmRZKQogICAg
ICAgICAsIG1fc3RvcHMob3RoZXIubV9zdG9wcykKLSAgICAgICAgLCBtX3N0b3BzU29ydGVkKG90
aGVyLm1fc3RvcHNTb3J0ZWQpCi0gICAgICAgICwgbV9ncmFkaWVudFR5cGUoZ3JhZGllbnRUeXBl
KQorICAgICAgICAsIG1fZ3JhZGllbnRUeXBlKG90aGVyLm1fZ3JhZGllbnRUeXBlKQogICAgICAg
ICAsIG1fcmVwZWF0aW5nKG90aGVyLm1fcmVwZWF0aW5nKQorICAgICAgICAsIG1faGFzQ29sb3JE
ZXJpdmVkRnJvbUVsZW1lbnQob3RoZXIubV9oYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCkKICAg
ICB7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhZGllbnRBZGFwdGVyPgotICAg
IEdyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgY29tcHV0ZVN0b3BzKEdyYWRpZW50QWRhcHRlciYs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGZs
b2F0IG1heExlbmd0aEZvclJlcGVhdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhZGllbnRB
ZGFwdGVyPiBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIGNvbXB1dGVTdG9wcyhHcmFkaWVudEFk
YXB0ZXImLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgY29uc3QgUmVuZGVyU3R5
bGUmLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBlYXQpOwogCi0gICAgLy8gUmVzb2x2ZSBwb2ludHMv
cmFkaWkgdG8gZnJvbnQgZW5kIHZhbHVlcy4KLSAgICBGbG9hdFBvaW50IGNvbXB1dGVFbmRQb2lu
dChDU1NQcmltaXRpdmVWYWx1ZSosIENTU1ByaW1pdGl2ZVZhbHVlKiwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYsIGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIGF1dG8gZmlyc3RYKCkg
Y29uc3QgeyByZXR1cm4gbV9maXJzdFguZ2V0KCk7IH0KKyAgICBhdXRvIGZpcnN0WSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlyc3RZLmdldCgpOyB9CisgICAgYXV0byBzZWNvbmRYKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWNvbmRYLmdldCgpOyB9CisgICAgYXV0byBzZWNvbmRZKCkgY29uc3QgeyByZXR1
cm4gbV9zZWNvbmRZLmdldCgpOyB9CisgICAgYXV0byYgc3RvcHMoKSBjb25zdCB7IHJldHVybiBt
X3N0b3BzOyB9CisgICAgYm9vbCBpc1JlcGVhdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwZWF0
aW5nOyB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NHcmFkaWVudFZhbHVlJikgY29uc3Q7
CiAKK3ByaXZhdGU6CisgICAgYm9vbCBoYXNDb2xvckRlcml2ZWRGcm9tRWxlbWVudCgpIGNvbnN0
OwogICAgIGJvb2wgaXNDYWNoZWFibGUoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHdyaXRlQ29s
b3JTdG9wKFN0cmluZ0J1aWxkZXImLCBjb25zdCBDU1NHcmFkaWVudENvbG9yU3RvcCYpIGNvbnN0
OwogCi0gICAgLy8gUG9pbnRzLiBTb21lIG9mIHRoZXNlIG1heSBiZSBudWxsLgogICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdFg7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX2ZpcnN0WTsKLQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9zZWNvbmRY
OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9zZWNvbmRZOwotCi0gICAgLy8gU3Rv
cHMKICAgICBWZWN0b3I8Q1NTR3JhZGllbnRDb2xvclN0b3AsIDI+IG1fc3RvcHM7Ci0gICAgYm9v
bCBtX3N0b3BzU29ydGVkIHsgZmFsc2UgfTsKICAgICBDU1NHcmFkaWVudFR5cGUgbV9ncmFkaWVu
dFR5cGU7CiAgICAgYm9vbCBtX3JlcGVhdGluZyB7IGZhbHNlIH07CisKKyAgICBtdXRhYmxlIE9w
dGlvbmFsPGJvb2w+IG1faGFzQ29sb3JEZXJpdmVkRnJvbUVsZW1lbnQ7CiB9OwogCiBjbGFzcyBD
U1NMaW5lYXJHcmFkaWVudFZhbHVlIGZpbmFsIDogcHVibGljIENTU0dyYWRpZW50VmFsdWUgewpA
QCAtMTQ1LDcgKzEzNCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZShyZXBlYXQsIGdyYWRpZW50VHlwZSkpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0QW5nbGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX2FuZ2xl
ID0gV1RGTW92ZSh2YWwpOyB9CisgICAgdm9pZCBzZXRBbmdsZShSZWY8Q1NTUHJpbWl0aXZlVmFs
dWU+JiYgdmFsdWUpIHsgbV9hbmdsZSA9IFdURk1vdmUodmFsdWUpOyB9CiAKICAgICBTdHJpbmcg
Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCkBAIC0xNjYsNyArMTU1LDcgQEAgcHJpdmF0ZToKICAg
ICB9CiAKICAgICBDU1NMaW5lYXJHcmFkaWVudFZhbHVlKGNvbnN0IENTU0xpbmVhckdyYWRpZW50
VmFsdWUmIG90aGVyKQotICAgICAgICA6IENTU0dyYWRpZW50VmFsdWUob3RoZXIsIExpbmVhckdy
YWRpZW50Q2xhc3MsIG90aGVyLmdyYWRpZW50VHlwZSgpKQorICAgICAgICA6IENTU0dyYWRpZW50
VmFsdWUob3RoZXIsIExpbmVhckdyYWRpZW50Q2xhc3MpCiAgICAgICAgICwgbV9hbmdsZShvdGhl
ci5tX2FuZ2xlKQogICAgIHsKICAgICB9CkBAIC0xODgsMTQgKzE3NywxNCBAQCBwdWJsaWM6CiAK
ICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRGaXJzdFJh
ZGl1cyhSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fZmlyc3RSYWRpdXMgPSBX
VEZNb3ZlKHZhbCk7IH0KLSAgICB2b2lkIHNldFNlY29uZFJhZGl1cyhSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+JiYgdmFsKSB7IG1fc2Vjb25kUmFkaXVzID0gV1RGTW92ZSh2YWwpOyB9CisgICAg
dm9pZCBzZXRGaXJzdFJhZGl1cyhSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpIHsg
bV9maXJzdFJhZGl1cyA9IFdURk1vdmUodmFsdWUpOyB9CisgICAgdm9pZCBzZXRTZWNvbmRSYWRp
dXMoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fc2Vjb25kUmFkaXVzID0g
V1RGTW92ZSh2YWx1ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hhcGUoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiYmIHZhbCkgeyBtX3NoYXBlID0gV1RGTW92ZSh2YWwpOyB9Ci0gICAgdm9pZCBzZXRT
aXppbmdCZWhhdmlvcihSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fc2l6aW5n
QmVoYXZpb3IgPSBXVEZNb3ZlKHZhbCk7IH0KKyAgICB2b2lkIHNldFNoYXBlKFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkgeyBtX3NoYXBlID0gV1RGTW92ZSh2YWx1ZSk7IH0KKyAg
ICB2b2lkIHNldFNpemluZ0JlaGF2aW9yKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1
ZSkgeyBtX3NpemluZ0JlaGF2aW9yID0gV1RGTW92ZSh2YWx1ZSk7IH0KIAotICAgIHZvaWQgc2V0
RW5kSG9yaXpvbnRhbFNpemUoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX2Vu
ZEhvcml6b250YWxTaXplID0gV1RGTW92ZSh2YWwpOyB9Ci0gICAgdm9pZCBzZXRFbmRWZXJ0aWNh
bFNpemUoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkgeyBtX2VuZFZlcnRpY2FsU2l6
ZSA9IFdURk1vdmUodmFsKTsgfQorICAgIHZvaWQgc2V0RW5kSG9yaXpvbnRhbFNpemUoUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKSB7IG1fZW5kSG9yaXpvbnRhbFNpemUgPSBXVEZN
b3ZlKHZhbHVlKTsgfQorICAgIHZvaWQgc2V0RW5kVmVydGljYWxTaXplKFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4mJiB2YWx1ZSkgeyBtX2VuZFZlcnRpY2FsU2l6ZSA9IFdURk1vdmUodmFsdWUp
OyB9CiAKICAgICAvLyBDcmVhdGUgdGhlIGdyYWRpZW50IGZvciBhIGdpdmVuIHNpemUuCiAgICAg
UmVmPEdyYWRpZW50PiBjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50JiwgY29uc3QgRmxvYXRT
aXplJik7CkBAIC0yMDksNyArMTk4LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBDU1NSYWRp
YWxHcmFkaWVudFZhbHVlKGNvbnN0IENTU1JhZGlhbEdyYWRpZW50VmFsdWUmIG90aGVyKQotICAg
ICAgICA6IENTU0dyYWRpZW50VmFsdWUob3RoZXIsIFJhZGlhbEdyYWRpZW50Q2xhc3MsIG90aGVy
LmdyYWRpZW50VHlwZSgpKQorICAgICAgICA6IENTU0dyYWRpZW50VmFsdWUob3RoZXIsIFJhZGlh
bEdyYWRpZW50Q2xhc3MpCiAgICAgICAgICwgbV9maXJzdFJhZGl1cyhvdGhlci5tX2ZpcnN0UmFk
aXVzKQogICAgICAgICAsIG1fc2Vjb25kUmFkaXVzKG90aGVyLm1fc2Vjb25kUmFkaXVzKQogICAg
ICAgICAsIG1fc2hhcGUob3RoZXIubV9zaGFwZSkKQEAgLTI0OCw3ICsyMzcsNyBAQCBwdWJsaWM6
CiAKICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRBbmds
ZShSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7IG1fYW5nbGUgPSBXVEZNb3ZlKHZh
bCk7IH0KKyAgICB2b2lkIHNldEFuZ2xlKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1
ZSkgeyBtX2FuZ2xlID0gV1RGTW92ZSh2YWx1ZSk7IH0KIAogICAgIC8vIENyZWF0ZSB0aGUgZ3Jh
ZGllbnQgZm9yIGEgZ2l2ZW4gc2l6ZS4KICAgICBSZWY8R3JhZGllbnQ+IGNyZWF0ZUdyYWRpZW50
KFJlbmRlckVsZW1lbnQmLCBjb25zdCBGbG9hdFNpemUmKTsKQEAgLTI1NiwxMyArMjQ1LDEzIEBA
IHB1YmxpYzoKICAgICBib29sIGVxdWFscyhjb25zdCBDU1NDb25pY0dyYWRpZW50VmFsdWUmKSBj
b25zdDsKIAogcHJpdmF0ZToKLSAgICBDU1NDb25pY0dyYWRpZW50VmFsdWUoQ1NTR3JhZGllbnRS
ZXBlYXQgcmVwZWF0KQorICAgIGV4cGxpY2l0IENTU0NvbmljR3JhZGllbnRWYWx1ZShDU1NHcmFk
aWVudFJlcGVhdCByZXBlYXQpCiAgICAgICAgIDogQ1NTR3JhZGllbnRWYWx1ZShDb25pY0dyYWRp
ZW50Q2xhc3MsIHJlcGVhdCwgQ1NTQ29uaWNHcmFkaWVudCkKICAgICB7CiAgICAgfQogCiAgICAg
Q1NTQ29uaWNHcmFkaWVudFZhbHVlKGNvbnN0IENTU0NvbmljR3JhZGllbnRWYWx1ZSYgb3RoZXIp
Ci0gICAgICAgIDogQ1NTR3JhZGllbnRWYWx1ZShvdGhlciwgQ29uaWNHcmFkaWVudENsYXNzLCBv
dGhlci5ncmFkaWVudFR5cGUoKSkKKyAgICAgICAgOiBDU1NHcmFkaWVudFZhbHVlKG90aGVyLCBD
b25pY0dyYWRpZW50Q2xhc3MpCiAgICAgICAgICwgbV9hbmdsZShvdGhlci5tX2FuZ2xlKQogICAg
IHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5jcHAKaW5kZXggMjgxYmNjZTkyOGJlNjA5MGRlZjdkOWY2MTYyNDhk
OGI5ZDQ1ZmI0MS4uZmIwNDJjNzgzOWFjYmY1N2UzMGI3OTNhYzVhZmFhZmE0YzRiMDg3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmNwcApAQCAtMTAyMSw5ICsxMDIxLDkgQEAgc3RhdGljIGJvb2wgY29uc3VtZURlcHJl
Y2F0ZWRHcmFkaWVudENvbG9yU3RvcChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTR3IK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdG9wLm1fcG9zaXRpb24g
PSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBvc2l0aW9uLCBDU1NVbml0
VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgc3RvcC5tX2NvbG9yID0gY29uc3VtZURlcHJlY2F0ZWRH
cmFkaWVudFN0b3BDb2xvcihhcmdzLCBjc3NQYXJzZXJNb2RlKTsKLSAgICByZXR1cm4gc3RvcC5t
X2NvbG9yICYmIGFyZ3MuYXRFbmQoKTsKKyAgICBzdG9wLnBvc2l0aW9uID0gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwb3NpdGlvbiwgQ1NTVW5pdFR5cGU6OkNTU19OVU1C
RVIpOworICAgIHN0b3AuY29sb3IgPSBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50U3RvcENvbG9y
KGFyZ3MsIGNzc1BhcnNlck1vZGUpOworICAgIHJldHVybiBzdG9wLmNvbG9yICYmIGFyZ3MuYXRF
bmQoKTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZURlcHJlY2F0ZWRHcmFk
aWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1v
ZGUpCkBAIC0xMDQxLDExICsxMDQxLDExIEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1
bWVEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTCiAgICAg
YXV0byBwb2ludCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRQb2ludChhcmdzLCB0cnVlKTsK
ICAgICBpZiAoIXBvaW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXN1bHQtPnNl
dEZpcnN0WChwb2ludC5jb3B5UmVmKCkpOworICAgIHJlc3VsdC0+c2V0Rmlyc3RYKFdURk1vdmUo
cG9pbnQpKTsKICAgICBwb2ludCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRQb2ludChhcmdz
LCBmYWxzZSk7CiAgICAgaWYgKCFwb2ludCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmVzdWx0LT5zZXRGaXJzdFkocG9pbnQuY29weVJlZigpKTsKKyAgICByZXN1bHQtPnNldEZpcnN0
WShXVEZNb3ZlKHBvaW50KSk7CiAKICAgICBpZiAoIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRl
c3BhY2UoYXJncykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTA1NSwxNyArMTA1NSwx
NyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTUwogICAgICAgICBhdXRvIHJhZGl1cyA9IGNvbnN1
bWVOdW1iZXIoYXJncywgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsKICAgICAgICAgaWYgKCFyYWRp
dXMgfHwgIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1
ZT4ocmVzdWx0LmdldCgpKS0+c2V0Rmlyc3RSYWRpdXMocmFkaXVzLmNvcHlSZWYoKSk7CisgICAg
ICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KHJlc3VsdC5nZXQoKSktPnNldEZp
cnN0UmFkaXVzKFdURk1vdmUocmFkaXVzKSk7CiAgICAgfQogCiAgICAgcG9pbnQgPSBjb25zdW1l
RGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYXJncywgdHJ1ZSk7CiAgICAgaWYgKCFwb2ludCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRYKHBvaW50LmNvcHlS
ZWYoKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRYKFdURk1vdmUocG9pbnQpKTsKICAgICBwb2lu
dCA9IGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRQb2ludChhcmdzLCBmYWxzZSk7CiAgICAgaWYg
KCFwb2ludCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRZ
KHBvaW50LmNvcHlSZWYoKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRZKFdURk1vdmUocG9pbnQp
KTsKIAogICAgIC8vIEZvciByYWRpYWwgZ3JhZGllbnRzIG9ubHksIHdlIG5vdyBleHBlY3QgdGhl
IHNlY29uZCByYWRpdXMuCiAgICAgaWYgKGlzRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KSB7CkBA
IC0xMDc0LDk0ICsxMDc0LDc4IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXBy
ZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTCiAgICAgICAgIGF1
dG8gcmFkaXVzID0gY29uc3VtZU51bWJlcihhcmdzLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpOwog
ICAgICAgICBpZiAoIXJhZGl1cykKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPihyZXN1bHQuZ2V0KCkpLT5zZXRTZWNv
bmRSYWRpdXMocmFkaXVzLmNvcHlSZWYoKSk7CisgICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdy
YWRpZW50VmFsdWU+KHJlc3VsdC5nZXQoKSktPnNldFNlY29uZFJhZGl1cyhXVEZNb3ZlKHJhZGl1
cykpOwogICAgIH0KIAogICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIHN0b3A7CiAgICAgd2hpbGUg
KGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpIHsKICAgICAgICAgaWYgKCFj
b25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKGFyZ3MsIHN0b3AsIGNzc1BhcnNlck1v
ZGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJlc3VsdC0+YWRkU3Rv
cChzdG9wKTsKKyAgICAgICAgcmVzdWx0LT5hZGRTdG9wKFdURk1vdmUoc3RvcCkpOwogICAgIH0K
IAogICAgIHJlc3VsdC0+ZG9uZUFkZGluZ1N0b3BzKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotc3RhdGljIGJvb2wgY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBDU1NHcmFkaWVudFZhbHVl
JiBncmFkaWVudCkKK3N0YXRpYyBib29sIGNvbnN1bWVHcmFkaWVudENvbG9yU3RvcHMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgbW9kZSwgQ1NTR3JhZGllbnRWYWx1
ZSYgZ3JhZGllbnQpCiB7CiAgICAgYm9vbCBzdXBwb3J0c0NvbG9ySGludHMgPSBncmFkaWVudC5n
cmFkaWVudFR5cGUoKSA9PSBDU1NMaW5lYXJHcmFkaWVudCB8fCBncmFkaWVudC5ncmFkaWVudFR5
cGUoKSA9PSBDU1NSYWRpYWxHcmFkaWVudCB8fCBncmFkaWVudC5ncmFkaWVudFR5cGUoKSA9PSBD
U1NDb25pY0dyYWRpZW50OwogICAgIAotICAgIGJvb2wgaXNDb25pY0dyYWRpZW50ID0gZ3JhZGll
bnQuZ3JhZGllbnRUeXBlKCkgPT0gQ1NTQ29uaWNHcmFkaWVudDsKKyAgICBhdXRvIGNvbnN1bWVT
dG9wUG9zaXRpb24gPSBbJl0geworICAgICAgICByZXR1cm4gZ3JhZGllbnQuZ3JhZGllbnRUeXBl
KCkgPT0gQ1NTQ29uaWNHcmFkaWVudAorICAgICAgICAgICAgPyBjb25zdW1lQW5nbGVPclBlcmNl
bnQocmFuZ2UsIG1vZGUsIFZhbHVlUmFuZ2VBbGwsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCkKKyAg
ICAgICAgICAgIDogY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgbW9kZSwgVmFsdWVSYW5n
ZUFsbCk7CisgICAgfTsKIAogICAgIC8vIFRoZSBmaXJzdCBjb2xvciBzdG9wIGNhbm5vdCBiZSBh
IGNvbG9yIGhpbnQuCiAgICAgYm9vbCBwcmV2aW91c1N0b3BXYXNDb2xvckhpbnQgPSB0cnVlOwog
ICAgIGRvIHsKLSAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcDsKLSAgICAgICAgc3Rv
cC5tX2NvbG9yID0gY29uc3VtZUNvbG9yKHJhbmdlLCBjc3NQYXJzZXJNb2RlKTsKLSAgICAgICAg
Ly8gVHdvIGhpbnRzIGluIGEgcm93IGFyZSBub3QgYWxsb3dlZC4KLSAgICAgICAgaWYgKCFzdG9w
Lm1fY29sb3IgJiYgKCFzdXBwb3J0c0NvbG9ySGludHMgfHwgcHJldmlvdXNTdG9wV2FzQ29sb3JI
aW50KSkKKyAgICAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3Agc3RvcCB7IGNvbnN1bWVDb2xvcihy
YW5nZSwgbW9kZSksIGNvbnN1bWVTdG9wUG9zaXRpb24oKSwgeyB9IH07CisgICAgICAgIGlmICgh
c3RvcC5jb2xvciAmJiAhc3RvcC5wb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCi0gICAgICAgIHByZXZpb3VzU3RvcFdhc0NvbG9ySGludCA9ICFzdG9wLm1fY29s
b3I7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFRoaXMgYm9vbGVhbiBj
b3VsZCBiZSByZW1vdmVkLiBOdWxsIGNoZWNraW5nIGNvbG9yIHdvdWxkIGJlIHN1ZmZpY2llbnQu
Ci0gICAgICAgIHN0b3AuaXNNaWRwb2ludCA9ICFzdG9wLm1fY29sb3I7CiAKLSAgICAgICAgaWYg
KGlzQ29uaWNHcmFkaWVudCkKLSAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNvbnN1bWVB
bmdsZU9yUGVyY2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCwgVW5pdGxl
c3NRdWlyazo6Rm9yYmlkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RvcC5tX3Bvc2l0
aW9uID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVS
YW5nZUFsbCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXN0b3AubV9jb2xvciAmJiAhc3RvcC5t
X3Bvc2l0aW9uKQorICAgICAgICAvLyBUd28gY29sb3IgaGludHMgaW4gYSByb3cgYXJlIG5vdCBh
bGxvd2VkLgorICAgICAgICBpZiAoIXN0b3AuY29sb3IgJiYgKCFzdXBwb3J0c0NvbG9ySGludHMg
fHwgcHJldmlvdXNTdG9wV2FzQ29sb3JIaW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcHJldmlvdXNTdG9wV2FzQ29sb3JIaW50ID0gIXN0b3AuY29sb3I7CiAKLSAgICAg
ICAgZ3JhZGllbnQuYWRkU3RvcChzdG9wKTsKLQotICAgICAgICBpZiAoIXN0b3AubV9jb2xvciB8
fCAhc3RvcC5tX3Bvc2l0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ1NT
R3JhZGllbnRDb2xvclN0b3Agc2Vjb25kU3RvcDsKLSAgICAgICAgaWYgKGlzQ29uaWNHcmFkaWVu
dCkKLSAgICAgICAgICAgIHNlY29uZFN0b3AubV9wb3NpdGlvbiA9IGNvbnN1bWVBbmdsZU9yUGVy
Y2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCwgVW5pdGxlc3NRdWlyazo6
Rm9yYmlkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2Vjb25kU3RvcC5tX3Bvc2l0aW9u
ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZUFsbCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc2Vjb25kU3RvcC5tX3Bvc2l0aW9uKQotICAg
ICAgICAgICAgZ3JhZGllbnQuYWRkU3RvcChzZWNvbmRTdG9wKTsKLSAgICAgICAgCisgICAgICAg
IC8vIFN0b3BzIHdpdGggYm90aCBhIGNvbG9yIGFuZCBhIHBvc2l0aW9uIGNhbiBoYXZlIGEgc2Vj
b25kIHBvc2l0aW9uLCB3aGljaCBzaGFyZXMgdGhlIHNhbWUgY29sb3IuCisgICAgICAgIGlmIChz
dG9wLmNvbG9yICYmIHN0b3AucG9zaXRpb24pIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHNlY29u
ZFBvc2l0aW9uID0gY29uc3VtZVN0b3BQb3NpdGlvbigpKSB7CisgICAgICAgICAgICAgICAgZ3Jh
ZGllbnQuYWRkU3RvcChDU1NHcmFkaWVudENvbG9yU3RvcCB7IHN0b3AgfSk7CisgICAgICAgICAg
ICAgICAgc3RvcC5wb3NpdGlvbiA9IFdURk1vdmUoc2Vjb25kUG9zaXRpb24pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGdyYWRpZW50LmFkZFN0b3AoV1RGTW92ZShzdG9wKSk7
CiAgICAgfSB3aGlsZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOwog
Ci0gICAgZ3JhZGllbnQuZG9uZUFkZGluZ1N0b3BzKCk7Ci0KICAgICAvLyBUaGUgbGFzdCBjb2xv
ciBzdG9wIGNhbm5vdCBiZSBhIGNvbG9yIGhpbnQuCiAgICAgaWYgKHByZXZpb3VzU3RvcFdhc0Nv
bG9ySGludCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gTXVzdCBoYXZlIDIgb3Ig
bW9yZSBzdG9wcyB0byBiZSB2YWxpZC4KLSAgICByZXR1cm4gZ3JhZGllbnQuc3RvcENvdW50KCkg
Pj0gMjsKKyAgICAvLyBNdXN0IGhhdmUgdHdvIG9yIG1vcmUgc3RvcHMgdG8gYmUgdmFsaWQuCisg
ICAgaWYgKCFncmFkaWVudC5oYXNBdExlYXN0VHdvU3RvcHMoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZ3JhZGllbnQuZG9uZUFkZGluZ1N0b3BzKCk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNhdGVkUmFkaWFsR3Jh
ZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCiB7Ci0gICAgUmVmUHRyPENTU1JhZGlh
bEdyYWRpZW50VmFsdWU+IHJlc3VsdCA9IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZShy
ZXBlYXRpbmcsIENTU1ByZWZpeGVkUmFkaWFsR3JhZGllbnQpOworICAgIGF1dG8gcmVzdWx0ID0g
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlKHJlcGVhdGluZywgQ1NTUHJlZml4ZWRSYWRp
YWxHcmFkaWVudCk7CisKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclg7CiAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjZW50ZXJZOwogICAgIGNvbnN1bWVPbmVPclR3
b1ZhbHVlZFBvc2l0aW9uKGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJp
ZCwgY2VudGVyWCwgY2VudGVyWSk7CiAgICAgaWYgKChjZW50ZXJYIHx8IGNlbnRlclkpICYmICFj
b25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIHJlc3VsdC0+c2V0Rmlyc3RYKGNlbnRlclguY29weVJlZigpKTsKLSAgICBy
ZXN1bHQtPnNldEZpcnN0WShjZW50ZXJZLmNvcHlSZWYoKSk7Ci0gICAgcmVzdWx0LT5zZXRTZWNv
bmRYKGNlbnRlclguY29weVJlZigpKTsKLSAgICByZXN1bHQtPnNldFNlY29uZFkoY2VudGVyWS5j
b3B5UmVmKCkpOwotCiAgICAgYXV0byBzaGFwZSA9IGNvbnN1bWVJZGVudDxDU1NWYWx1ZUNpcmNs
ZSwgQ1NTVmFsdWVFbGxpcHNlPihhcmdzKTsKICAgICBhdXRvIHNpemVLZXl3b3JkID0gY29uc3Vt
ZUlkZW50PENTU1ZhbHVlQ2xvc2VzdFNpZGUsIENTU1ZhbHVlQ2xvc2VzdENvcm5lciwgQ1NTVmFs
dWVGYXJ0aGVzdFNpZGUsIENTU1ZhbHVlRmFydGhlc3RDb3JuZXIsIENTU1ZhbHVlQ29udGFpbiwg
Q1NTVmFsdWVDb3Zlcj4oYXJncyk7CiAgICAgaWYgKCFzaGFwZSkKICAgICAgICAgc2hhcGUgPSBj
b25zdW1lSWRlbnQ8Q1NTVmFsdWVDaXJjbGUsIENTU1ZhbHVlRWxsaXBzZT4oYXJncyk7Ci0gICAg
cmVzdWx0LT5zZXRTaGFwZShzaGFwZS5jb3B5UmVmKCkpOwotICAgIHJlc3VsdC0+c2V0U2l6aW5n
QmVoYXZpb3Ioc2l6ZUtleXdvcmQuY29weVJlZigpKTsKIAogICAgIC8vIE9yLCB0d28gbGVuZ3Ro
cyBvciBwZXJjZW50YWdlcwogICAgIGlmICghc2hhcGUgJiYgIXNpemVLZXl3b3JkKSB7CkBAIC0x
MTcyLDE2ICsxMTU2LDI0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVEZXByZWNh
dGVkUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJnCiAgICAgICAgICAgICBp
ZiAoIXZlcnRpY2FsU2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgICAgIGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7Ci0gICAgICAgICAg
ICByZXN1bHQtPnNldEVuZEhvcml6b250YWxTaXplKGhvcml6b250YWxTaXplLmNvcHlSZWYoKSk7
Ci0gICAgICAgICAgICByZXN1bHQtPnNldEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29w
eVJlZigpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RW5kSG9yaXpvbnRhbFNpemUoV1RGTW92
ZShob3Jpem9udGFsU2l6ZSkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRFbmRWZXJ0aWNhbFNp
emUoV1RGTW92ZSh2ZXJ0aWNhbFNpemUpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncyk7CiAgICAgfQotICAgIGlm
ICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCAqcmVzdWx0
KSkKKworICAgIGlmICghY29uc3VtZUdyYWRpZW50Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJN
b2RlLCByZXN1bHQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmVzdWx0LT5zZXRGaXJzdFgoY2VudGVyWC5jb3B5UmVmKCkpOworICAgIHJlc3Vs
dC0+c2V0Rmlyc3RZKGNlbnRlclkuY29weVJlZigpKTsKKyAgICByZXN1bHQtPnNldFNlY29uZFgo
V1RGTW92ZShjZW50ZXJYKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRZKFdURk1vdmUoY2VudGVy
WSkpOworICAgIHJlc3VsdC0+c2V0U2hhcGUoV1RGTW92ZShzaGFwZSkpOworICAgIHJlc3VsdC0+
c2V0U2l6aW5nQmVoYXZpb3IoV1RGTW92ZShzaXplS2V5d29yZCkpOworCisgICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0KTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVJhZGlh
bEdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIENTU1BhcnNlck1vZGUgY3NzUGFy
c2VyTW9kZSwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQpAQCAtMTI0MiwxMSArMTIzNCw2
IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVSYWRpYWxHcmFkaWVudChDU1NQYXJz
ZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJzCiAgICAgICAgIHx8ICh2ZXJ0aWNhbFNpemUgJiYg
dmVydGljYWxTaXplLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXN1bHQtPnNldFNoYXBlKHNoYXBlLmNvcHlSZWYo
KSk7Ci0gICAgcmVzdWx0LT5zZXRTaXppbmdCZWhhdmlvcihzaXplS2V5d29yZC5jb3B5UmVmKCkp
OwotICAgIHJlc3VsdC0+c2V0RW5kSG9yaXpvbnRhbFNpemUoaG9yaXpvbnRhbFNpemUuY29weVJl
ZigpKTsKLSAgICByZXN1bHQtPnNldEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUuY29weVJl
ZigpKTsKLQogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY2VudGVyWDsKICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNlbnRlclk7CiAgICAgaWYgKGFyZ3MucGVlaygpLmlkKCkg
PT0gQ1NTVmFsdWVBdCkgewpAQCAtMTI2Nyw2ICsxMjU0LDEyIEBAIHN0YXRpYyBSZWZQdHI8Q1NT
VmFsdWU+IGNvbnN1bWVSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBD
U1NQYXJzCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghY29uc3VtZUdyYWRpZW50
Q29sb3JTdG9wcyhhcmdzLCBjc3NQYXJzZXJNb2RlLCAqcmVzdWx0KSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXN1bHQtPnNldFNoYXBlKFdURk1vdmUoc2hhcGUpKTsKKyAgICBy
ZXN1bHQtPnNldFNpemluZ0JlaGF2aW9yKFdURk1vdmUoc2l6ZUtleXdvcmQpKTsKKyAgICByZXN1
bHQtPnNldEVuZEhvcml6b250YWxTaXplKFdURk1vdmUoaG9yaXpvbnRhbFNpemUpKTsKKyAgICBy
ZXN1bHQtPnNldEVuZFZlcnRpY2FsU2l6ZShXVEZNb3ZlKHZlcnRpY2FsU2l6ZSkpOworCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTI5MCw4ICsxMjgzLDggQEAgc3RhdGljIFJlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3Ms
IENTU1BhcnMKICAgICAgICAgICAgIGVuZFggPSBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVMZWZ0LCBD
U1NWYWx1ZVJpZ2h0PihhcmdzKTsKICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdC0+c2V0Rmly
c3RYKGVuZFguY29weVJlZigpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkoZW5kWS5jb3B5
UmVmKCkpOworICAgICAgICByZXN1bHQtPnNldEZpcnN0WChXVEZNb3ZlKGVuZFgpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRGaXJzdFkoV1RGTW92ZShlbmRZKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgZXhwZWN0Q29tbWEgPSBmYWxzZTsKICAgICB9CkBAIC0xMzE0LDI0ICsxMzA3LDI0IEBAIHN0
YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDb25pY0dyYWRpZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIGFyZ3MsIENTU1BhcnNlCiAgICAgICAgICAgICBhdXRvIGFuZ2xlID0gY29uc3VtZUFu
Z2xlKGFyZ3MsIGNvbnRleHQubW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKICAgICAgICAg
ICAgIGlmICghYW5nbGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
ICAgICByZXN1bHQtPnNldEFuZ2xlKGFuZ2xlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAg
ICAgcmVzdWx0LT5zZXRBbmdsZShXVEZNb3ZlKGFuZ2xlKSk7CiAgICAgICAgICAgICBleHBlY3RD
b21tYSA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGNvbnN1bWVJ
ZGVudDxDU1NWYWx1ZUF0PihhcmdzKSkgewogICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjZW50ZXJYOwogICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
ZW50ZXJZOwogICAgICAgICAgICAgY29uc3VtZVBvc2l0aW9uKGFyZ3MsIGNvbnRleHQubW9kZSwg
VW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBQb3NpdGlvblN5bnRheDo6UG9zaXRpb24sIGNlbnRlclgs
IGNlbnRlclkpOwogICAgICAgICAgICAgaWYgKCEoY2VudGVyWCAmJiBjZW50ZXJZKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBy
ZXN1bHQtPnNldEZpcnN0WChjZW50ZXJYLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICByZXN1bHQt
PnNldEZpcnN0WShjZW50ZXJZLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAg
ICAgLy8gUmlnaHQgbm93LCBjb25pYyBncmFkaWVudHMgaGF2ZSB0aGUgc2FtZSBzdGFydCBhbmQg
ZW5kIGNlbnRlcnMuCi0gICAgICAgICAgICByZXN1bHQtPnNldFNlY29uZFgoY2VudGVyWC5jb3B5
UmVmKCkpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRTZWNvbmRZKGNlbnRlclkuY29weVJlZigp
KTsKLSAgICAKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U2Vjb25kWChXVEZNb3ZlKGNlbnRlclgp
KTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U2Vjb25kWShXVEZNb3ZlKGNlbnRlclkpKTsKKwog
ICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggNWQwOGU5ZTQ5NDVlMmQ5M2Nk
YjhkY2EyMDVmYzAzMzFjYmVmZjhmMS4uZjhjNGRjYzQxNGEyN2IxODEwY2FhNDhkMWZhZTU1OWZh
MTc0NTdjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0y
MDU1LDE5ICsyMDU1LDE5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dFNlbGVjdGlvblJhbmdlRm9yQmluZGluZ3MoaW50IHN0YXJ0LCBpbnQKIHN0YXRpYyBSZWY8Q1NT
TGluZWFyR3JhZGllbnRWYWx1ZT4gYXV0b0ZpbGxTdHJvbmdQYXNzd29yZE1hc2tJbWFnZSgpCiB7
CiAgICAgQ1NTR3JhZGllbnRDb2xvclN0b3AgZmlyc3RTdG9wOwotICAgIGZpcnN0U3RvcC5tX2Nv
bG9yID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVDb2xvclZhbHVlKENvbG9yOjpi
bGFjayk7Ci0gICAgZmlyc3RTdG9wLm1fcG9zaXRpb24gPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZVZhbHVlKDUwLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIGZp
cnN0U3RvcC5jb2xvciA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1
ZShDb2xvcjo6YmxhY2spOworICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoNTAsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7
CiAKICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzZWNvbmRTdG9wOwotICAgIHNlY29uZFN0b3Au
bV9jb2xvciA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlQ29sb3JWYWx1ZShDb2xv
cjo6dHJhbnNwYXJlbnQpOwotICAgIHNlY29uZFN0b3AubV9wb3NpdGlvbiA9IENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoMTAwLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRB
R0UpOworICAgIHNlY29uZFN0b3AuY29sb3IgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUNvbG9yVmFsdWUoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBzZWNvbmRTdG9wLnBvc2l0
aW9uID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgxMDAsIENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRSk7CiAKICAgICBhdXRvIGdyYWRpZW50ID0gQ1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZTo6Y3JlYXRlKENTU0dyYWRpZW50UmVwZWF0OjpOb25SZXBlYXRpbmcsIENTU0dy
YWRpZW50VHlwZTo6Q1NTTGluZWFyR3JhZGllbnQpOwogICAgIGdyYWRpZW50LT5zZXRBbmdsZShD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKDkwLCBDU1NVbml0VHlwZTo6Q1NT
X0RFRykpOwotICAgIGdyYWRpZW50LT5hZGRTdG9wKGZpcnN0U3RvcCk7Ci0gICAgZ3JhZGllbnQt
PmFkZFN0b3Aoc2Vjb25kU3RvcCk7CisgICAgZ3JhZGllbnQtPmFkZFN0b3AoV1RGTW92ZShmaXJz
dFN0b3ApKTsKKyAgICBncmFkaWVudC0+YWRkU3RvcChXVEZNb3ZlKHNlY29uZFN0b3ApKTsKKyAg
ICBncmFkaWVudC0+ZG9uZUFkZGluZ1N0b3BzKCk7CiAgICAgZ3JhZGllbnQtPnJlc29sdmVSR0JD
b2xvcnMoKTsKLQogICAgIHJldHVybiBncmFkaWVudDsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>