<?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>199289</bug_id>
          
          <creation_ts>2019-06-27 14:47:33 -0700</creation_ts>
          <short_desc>[WHLSL] &apos;uint y = x ? 1 : 2&apos; fails to typecheck</short_desc>
          <delta_ts>2022-02-10 16:50:05 -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>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>rmorisset</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1548622</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-27 14:47:33 -0700</bug_when>
    <thetext>Right now we will unifyAndConmit both of the ResolvableTypes together, which IIRC will say “hey let’s just resolve these to their preferred type” which is int but the function needs to return uchar so fail!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548624</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-27 14:59:36 -0700</bug_when>
    <thetext>```
float foo() {
    return true ? 1 : 2
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550055</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-03 15:43:42 -0700</bug_when>
    <thetext>This patch should add the following text into the &quot;operator cast&quot; section of the standard library:

operator uchar(bool x) {
    return x ? 1 : 0;
}
operator ushort(bool x) {
    return x ? 1 : 0;
}
operator uint(bool x) {
    return x ? 1 : 0;
}
operator char(bool x) {
    return x ? 1 : 0;
}
operator short(bool x) {
    return x ? 1 : 0;
}
operator half(bool x) {
    return x ? 1 : 0;
}
operator float(bool x) {
    return x ? 1 : 0;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550161</commentid>
    <comment_count>3</comment_count>
      <attachid>373448</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-03 19:21:06 -0700</bug_when>
    <thetext>Created attachment 373448
WIP

Trying to fix some final bugs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550164</commentid>
    <comment_count>4</comment_count>
      <attachid>373449</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-03 19:31:22 -0700</bug_when>
    <thetext>Created attachment 373449
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550191</commentid>
    <comment_count>5</comment_count>
      <attachid>373457</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-04 01:32:39 -0700</bug_when>
    <thetext>Created attachment 373457
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550192</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-04 01:33:31 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #2)
&gt; This patch should add the following text into the &quot;operator cast&quot; section of
&gt; the standard library:
&gt; 
&gt; operator uchar(bool x) {
&gt;     return x ? 1 : 0;
&gt; }
&gt; operator ushort(bool x) {
&gt;     return x ? 1 : 0;
&gt; }
&gt; operator uint(bool x) {
&gt;     return x ? 1 : 0;
&gt; }
&gt; operator char(bool x) {
&gt;     return x ? 1 : 0;
&gt; }
&gt; operator short(bool x) {
&gt;     return x ? 1 : 0;
&gt; }
&gt; operator half(bool x) {
&gt;     return x ? 1 : 0;
&gt; }
&gt; operator float(bool x) {
&gt;     return x ? 1 : 0;
&gt; }

I need to rebase and do this, but the patch won&apos;t change. So it&apos;s still valuable to review in its current form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550193</commentid>
    <comment_count>7</comment_count>
      <attachid>373458</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-04 01:37:09 -0700</bug_when>
    <thetext>Created attachment 373458
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550596</commentid>
    <comment_count>8</comment_count>
      <attachid>373458</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-05 18:12:00 -0700</bug_when>
    <thetext>Comment on attachment 373458
patch

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

I don&apos;t currently understand this code well enough to give it an r+

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:-368
&gt; -    }

Why change this?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.cpp:63
&gt; +static constexpr bool dumpASTAtEnd = true;

Please remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550694</commentid>
    <comment_count>9</comment_count>
      <attachid>373458</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-07 00:35:48 -0700</bug_when>
    <thetext>Comment on attachment 373458
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:-368
&gt;&gt; -    }
&gt; 
&gt; Why change this?

This is not intentional. Will revert</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649060</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-05-05 00:42:38 -0700</bug_when>
    <thetext>WHLSL is no longer relevant.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373448</attachid>
            <date>2019-07-03 19:21:06 -0700</date>
            <delta_ts>2019-07-03 19:31:22 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>27014</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ3MDg2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiAr
NjMsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAorI2luY2x1ZGUgIldITFNMQVNURHVtcGVyLmgiCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKQEAgLTE3Nyw3ICsxNzksMTEgQEAgc3RhdGljIE9w
dGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQogICAgICAgICBib29sIHNlY29uZEFyZ3Vt
ZW50SXNVaW50ID0gdHlwZXNbMV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CiAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsK
ICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZlKGludHJpbnNpY3MudWlu
dFR5cGUoKSk7CisgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc29s
dmFibGVUeXBlUmVmZXJlbmNlLT5mb3JFYWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2YWJsZVR5cGUm
IHR5cGUpIHsKKyAgICAgICAgICAgICAgICBvayAmPSB0eXBlLmNhblJlc29sdmUoaW50cmluc2lj
cy51aW50VHlwZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIG9rOwog
ICAgICAgICB9KSk7CiAgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50QXJyYXlSZWYgJiYgc2Vjb25k
QXJndW1lbnRJc1VpbnQpCiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVyYXRvckFu
ZGVySW5kZXhlcihvcmlnaW4sICpmaXJzdEFyZ3VtZW50QXJyYXlSZWYsIGludHJpbnNpY3MpOwpA
QCAtMTk2LDcgKzIwMiwxMSBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhCiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFjY2Vw
dGFiaWxpdHkgewogICAgICAgICAgICAgICAgIHJldHVybiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+
KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpID8gQWNjZXB0YWJp
bGl0eTo6WWVzIDogQWNjZXB0YWJpbGl0eTo6Tm87CiAgICAgICAgICAgICB9LCBbXShSZWZQdHI8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gQWNj
ZXB0YWJpbGl0eSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlzPEFTVDo6TnVsbExpdGVyYWxU
eXBlPihyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSkgPyBBY2NlcHRh
YmlsaXR5OjpNYXliZSA6IEFjY2VwdGFiaWxpdHk6Ok5vOworICAgICAgICAgICAgICAgIGJvb2wg
aXNBY2NlcHRhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZS0+Zm9yRWFjaFR5cGUoWyZdIChBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlzQWNjZXB0YWJsZSAmPSBpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4o
dHlwZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzQWNj
ZXB0YWJsZSA/IEFjY2VwdGFiaWxpdHk6Ok1heWJlIDogQWNjZXB0YWJpbGl0eTo6Tm87CiAgICAg
ICAgICAgICB9KSk7CiAgICAgICAgIH07CiAgICAgICAgIGF1dG8gbGVmdEFjY2VwdGFiaWxpdHkg
PSBhY2NlcHRhYmlsaXR5KHR5cGVzWzBdLmdldCgpKTsKQEAgLTQ2OSw4ICs0NzksOSBAQCBwcml2
YXRlOgogICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYs
IGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PiByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uJik7CiAgICAgYm9vbCByZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKEFT
VDo6RXhwcmVzc2lvbiYpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7Ci0gICAg
dm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFT
VDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmLCBBU1Q6OlR5cGVB
bm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpOworICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6
OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIEFTVDo6VHlw
ZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFT
VDo6RXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5cGUsIEFTVDo6VHlwZUFubm90YXRpb24gPSBBU1Q6
OlJpZ2h0VmFsdWUoKSk7CiAgICAgdm9pZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBS
ZXNvbHZpbmdUeXBlJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CiAKICAgICB2b2lkIHZpc2l0KEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CkBAIC01MzQsNiArNTQ1LDYzIEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKICAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKVtpXSk7CiB9CiAKK3N0
YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChBU1Q6OkV4
cHJlc3Npb24mIGV4cHIsIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlKQoreworICAgIGRhdGFMb2dMbigiLS0tLS0tLS0tLS0tLS0tIik7Cisg
ICAgZGF0YUxvZ0xuKEV4cHJlc3Npb25EdW1wZXIoZXhwcikpOworICAgIGF1dG8mIHJvb3QgPSBy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cm9vdCgpOworICAgIGRhdGFMb2dMbigiUm9vdDogIiwg
UmF3UG9pbnRlcigmcm9vdCkpOworCisgICAgQVNUOjpSZXNvbHZhYmxlVHlwZSogcHJlZmVycmVk
TGl0ZXJhbFR5cGUgPSBudWxscHRyOworCisgICAgYm9vbCBzYXdOdWxsTGl0ZXJhbFR5cGUgPSBm
YWxzZTsKKyAgICByb290LmZvckVhY2hUeXBlKFsmXSAoQVNUOjpSZXNvbHZhYmxlVHlwZSYgdHlw
ZSkgeworICAgICAgICBzYXdOdWxsTGl0ZXJhbFR5cGUgfD0gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5
cGU+KHR5cGUpOworCisgICAgICAgIGlmICghcHJlZmVycmVkTGl0ZXJhbFR5cGUpIHsKKyAgICAg
ICAgICAgIHByZWZlcnJlZExpdGVyYWxUeXBlID0gJnR5cGU7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpczxBU1Q6OkZsb2F0TGl0ZXJhbFR5
cGU+KHR5cGUpKSB7CisgICAgICAgICAgICBwcmVmZXJyZWRMaXRlcmFsVHlwZSA9ICZ0eXBlOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzPEFTVDo6VW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KCpwcmVmZXJyZWRMaXRlcmFsVHlwZSkgJiYgaXM8QVNU
OjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHR5cGUpKQorICAgICAgICAgICAgcHJlZmVycmVkTGl0ZXJh
bFR5cGUgPSAmdHlwZTsKKyAgICB9KTsKKworICAgIGlmIChzYXdOdWxsTGl0ZXJhbFR5cGUpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiBwcmVm
ZXJyZWRUeXBlOworICAgIGlmIChpczxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KCpwcmVmZXJyZWRM
aXRlcmFsVHlwZSkpIHsKKyAgICAgICAgcHJlZmVycmVkVHlwZSA9ICZkb3duY2FzdDxBU1Q6OkZs
b2F0TGl0ZXJhbFR5cGU+KCpwcmVmZXJyZWRMaXRlcmFsVHlwZSkucHJlZmVycmVkVHlwZSgpOwor
ICAgICAgICBkYXRhTG9nTG4oIlByZWZlcnJlZCB0eXBlIGlzIGZsb2F0ISIpOworICAgIH0gZWxz
ZSBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4oKnByZWZlcnJlZExpdGVy
YWxUeXBlKSkgeworICAgICAgICBwcmVmZXJyZWRUeXBlID0gJmRvd25jYXN0PEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KCpwcmVmZXJyZWRMaXRlcmFsVHlwZSkucHJlZmVycmVkVHlw
ZSgpOworICAgICAgICBkYXRhTG9nTG4oIlByZWZlcnJlZCB0eXBlIGlzIHVuc2lnbmVkISIpOwor
ICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KCpwcmVmZXJyZWRMaXRl
cmFsVHlwZSkpIHsKKyAgICAgICAgcHJlZmVycmVkVHlwZSA9ICZkb3duY2FzdDxBU1Q6OkludGVn
ZXJMaXRlcmFsVHlwZT4oKnByZWZlcnJlZExpdGVyYWxUeXBlKS5wcmVmZXJyZWRUeXBlKCk7Cisg
ICAgICAgIGRhdGFMb2dMbigiUHJlZmVycmVkIHR5cGUgaXMgaW50ZWdlcjogIiwgUmF3UG9pbnRl
cigmcHJlZmVycmVkVHlwZS0+dW5pZnlOb2RlKCkpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIGJvb2wgb2sgPSB0cnVlOworICAgIHJv
b3QuZm9yRWFjaFR5cGUoWyZdIChBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7CisgICAgICAg
IGlmICh0eXBlLm1heWJlUmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAgICAgIGlmICghbWF0Y2hl
cygqcHJlZmVycmVkVHlwZSwgKnR5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIk5vdCBtYXRjaGVzISEiKTsKKyAgICAgICAgICAgICAgICBvayA9
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFtYXRjaEFuZENvbW1p
dCgqcHJlZmVycmVkVHlwZSwgdHlwZSkpCisgICAgICAgICAgICBvayA9IGZhbHNlOworICAgIH0p
OworCisgICAgcmV0dXJuIG9rID8gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PihwcmVmZXJyZWRUeXBlLT5jbG9uZSgpKSA6IFdURjo6bnVsbG9wdDsKK30KKwogYm9vbCBDaGVj
a2VyOjphc3NpZ25UeXBlcygpCiB7CiAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX3R5
cGVNYXApIHsKQEAgLTU0MSwxMSArNjA5LDEwIEBAIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMo
KQogICAgICAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0VHlwZSh1bm5hbWVkVHlwZS0+Y2xv
bmUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29s
IHsKLSAgICAgICAgICAgIGlmICghcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVU
eXBlKCkubWF5YmVSZXNvbHZlZFR5cGUoKSkgewotICAgICAgICAgICAgICAgIGlmICghc3RhdGlj
X2Nhc3Q8Ym9vbD4oY29tbWl0KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlw
ZSgpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldFR5cGUocmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAg
ICAgICBhdXRvIHJlc29sdmVkVHlwZSA9IGNvbW1pdCgqa2V5VmFsdWVQYWlyLmtleSwgcmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UpOworICAgICAgICAgICAgaWYgKCFyZXNvbHZlZFR5cGUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+
c2V0VHlwZShXVEZNb3ZlKHJlc29sdmVkVHlwZS52YWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfSkpOwogICAgICAgICBpZiAoIXN1Y2Nlc3MpCkBAIC01OTQsMjEg
KzY2MSw0MCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0CiAgICAg
VmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKIH0KIAotc3RhdGljIE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5nVHlw
ZSYgbGVmdCwgUmVzb2x2aW5nVHlwZSYgcmlnaHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4K
K3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29t
bWl0KFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJl
bmNlLCBUeXBlJiBtYXRjaGluZ1R5cGUpCiB7Ci0gICAgcmV0dXJuIGxlZnQudmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBPcHRp
b25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgcmV0dXJuIHJpZ2h0
LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYg
cmlnaHQpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPFR5cGUsIEFTVDo6TmFtZWRUeXBlPjo6dmFsdWUgfHwg
c3RkOjppc19zYW1lPFR5cGUsIEFTVDo6VW5uYW1lZFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIE9w
dGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gcmVzdWx0OworICAgIGJvb2wgb2sg
PSB0cnVlOworICAgIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5mb3JFYWNoVHlwZShbJl0gKEFT
VDo6UmVzb2x2YWJsZVR5cGUmIHR5cGUpIHsKKyAgICAgICAgcmVzdWx0ID0gbWF0Y2hBbmRDb21t
aXQobWF0Y2hpbmdUeXBlLCB0eXBlKTsKKyAgICAgICAgb2sgJj0gISFyZXN1bHQ7CisgICAgfSk7
CisgICAgcmV0dXJuIG9rID8gV1RGTW92ZShyZXN1bHQpIDogV1RGOjpudWxsb3B0OworfQorc3Rh
dGljIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IG1hdGNoQW5kQ29tbWl0KFJlc29sdmluZ1R5cGUm
IGxlZnQsIFJlc29sdmluZ1R5cGUmIHJpZ2h0KQoreworICAgIHJldHVybiBsZWZ0LnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4g
T3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4geworICAgICAgICByZXR1cm4gcmlnaHQudmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdodCkgLT4g
T3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gewogICAgICAgICAgICAgaWYgKG1hdGNoZXMobGVmdCwg
cmlnaHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5jbG9uZSgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBSZXNvbHZpbmdUeXBlKGxlZnQtPmNsb25lKCkpOworICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAgICAg
ICAgICBpZiAoYXV0byByZXN1bHQgPSBtYXRjaEFuZENvbW1pdChyaWdodCwgbGVmdC5nZXQoKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc29sdmluZ1R5cGUoV1RGTW92ZShyZXN1bHQudmFs
dWUoKSkpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgfSwgWyZd
KFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENv
bW1pdChsZWZ0LCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7CiAgICAgICAgIH0pKTsKLSAgICB9
LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkgLT4gT3B0aW9uYWw8
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7Ci0gICAgICAgIHJldHVybiByaWdodC52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJpZ2h0
KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgICAg
IHJldHVybiBtYXRjaEFuZENvbW1pdChyaWdodCwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSk7Ci0g
ICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4g
T3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7Ci0gICAgICAgICAgICByZXR1
cm4gbWF0Y2hBbmRDb21taXQobGVmdC0+cmVzb2x2YWJsZVR5cGUoKSwgcmlnaHQtPnJlc29sdmFi
bGVUeXBlKCkpOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBs
ZWZ0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAgICAgIHJldHVybiByaWdodC52
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJp
Z2h0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAgICAgICAgICBpZiAoYXV0byBy
ZXN1bHQgPSBtYXRjaEFuZENvbW1pdChsZWZ0LCByaWdodC5nZXQoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFJlc29sdmluZ1R5cGUoV1RGTW92ZShyZXN1bHQudmFsdWUoKSkpOworICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7Cisg
ICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UobGVm
dCwgcmlnaHQpOworICAgICAgICAgICAgbGVmdC0+c2V0UGFyZW50KCpyZXN1bHQpOworICAgICAg
ICAgICAgcmlnaHQtPnNldFBhcmVudCgqcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBSZXNv
bHZpbmdUeXBlKGFkb3B0UmVmKHJlc3VsdCkpOwogICAgICAgICB9KSk7CiAgICAgfSkpOwogfQpA
QCAtNjE5LDggKzcwNSw4IEBAIHN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHkKICAgICAgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsIHJlc29sdmluZ1R5cGUpKQogICAg
ICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLmNsb25lKCk7CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJl
c29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewot
ICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQodW5uYW1lZFR5cGUsIHJlc29sdmluZ1R5cGUt
PnJlc29sdmFibGVUeXBlKCkpOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChyZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZSwgdW5uYW1lZFR5cGUpOwogICAgIH0pKTsKIH0KIApAQCAtNjMwLDE5
ICs3MTYsMTcgQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQogICAg
ICAgICBpZiAobWF0Y2hlcyhyZXNvbHZpbmdUeXBlLCBuYW1lZFR5cGUpKQogICAgICAgICAgICAg
cmV0dXJuIHJlc29sdmluZ1R5cGUtPmNsb25lKCk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmlu
Z1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAg
ICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRUeXBlLCByZXNvbHZpbmdUeXBlLT5yZXNvbHZh
YmxlVHlwZSgpKTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYg
cmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4geworICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQocmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2UsIG5hbWVkVHlwZSk7CiAgICAgfSkpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8VW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBjb21taXQoUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5n
VHlwZSkKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1p
dChBU1Q6OkV4cHJlc3Npb24mIGV4cHIsIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUpCiB7
CiAgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CiAgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xv
bmUoKTsKICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4gewotICAgICAgICBpZiAoIXJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlw
ZSgpLm1heWJlUmVzb2x2ZWRUeXBlKCkpCi0gICAgICAgICAgICByZXR1cm4gY29tbWl0KHJlc29s
dmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKTsKLSAgICAgICAgcmV0dXJuIHJl
c29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpLmNs
b25lKCk7CisgICAgICAgIHJldHVybiBjb21taXQoZXhwciwgcmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UpOwogICAgIH0pKTsKIH0KIApAQCAtODAwLDcgKzg4NCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpWYXJpYWJsZURlY2xhcmEKICAgICB9CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWdu
VHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0g
QVNUOjpSaWdodFZhbHVlKCkpCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNz
aW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlw
ZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbikKIHsKICAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8UmVzb2x2
aW5nVHlwZT4oV1RGTW92ZSh1bm5hbWVkVHlwZSkpKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZFJl
c3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtODA4LDcgKzg5Miw3IEBAIHZvaWQgQ2hl
Y2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24KICAgICBBU1NFUlRfVU5VU0VEKHR5cGVB
bm5vdGF0aW9uQWRkUmVzdWx0LCB0eXBlQW5ub3RhdGlvbkFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
IH0KIAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lv
biwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFibGVUeXBlUmVmZXJl
bmNlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVl
KCkpCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9u
LCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24pCiB7CiAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPFJlc29s
dmluZ1R5cGU+KFdURk1vdmUocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpKSk7CiAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKQEAgLTgxNiw2ICs5MDAs
MTUgQEAgdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbgogICAgIEFTU0VS
VF9VTlVTRUQodHlwZUFubm90YXRpb25BZGRSZXN1bHQsIHR5cGVBbm5vdGF0aW9uQWRkUmVzdWx0
LmlzTmV3RW50cnkpOwogfQogCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNz
aW9uJiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlIHJlc29sdmluZ1R5cGUsIEFTVDo6VHlwZUFu
bm90YXRpb24gdHlwZUFubm90YXRpb24pCit7CisgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0
KSB7CisgICAgICAgIGFzc2lnblR5cGUoZXhwcmVzc2lvbiwgV1RGTW92ZShsZWZ0KSwgdHlwZUFu
bm90YXRpb24pOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBs
ZWZ0KSB7CisgICAgICAgIGFzc2lnblR5cGUoZXhwcmVzc2lvbiwgV1RGTW92ZShsZWZ0KSwgdHlw
ZUFubm90YXRpb24pOworICAgIH0pKTsKK30KKwogdm9pZCBDaGVja2VyOjpmb3J3YXJkVHlwZShB
U1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUs
IEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkK
IHsKICAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7CkBAIC04NDQsNyArOTM3LDcgQEAgdm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZQogICAgIGlmICghcmlnaHRJbmZvKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJlc3VsdFR5cGUgPSBtYXRjaEFuZENvbW1pdChs
ZWZ0SW5mby0+cmVzb2x2aW5nVHlwZSwgcmlnaHRJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBh
dXRvIHJlc3VsdFR5cGUgPSBtYXRjaEFuZENvbW1pdChyaWdodEluZm8tPnJlc29sdmluZ1R5cGUs
ICpsZWZ0SW5mby0+cmVzb2x2aW5nVHlwZS5nZXRVbm5hbWVkVHlwZSgpKTsKICAgICBpZiAoIXJl
c3VsdFR5cGUpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODY1
LDcgKzk1OCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGUKICAg
ICBpZiAoIW5ld1ZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hlZFR5cGUgPSBtYXRjaEFuZENvbW1p
dChsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmluZ1R5
cGUpKQorICAgIGlmIChPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNo
ZWRUeXBlID0gbWF0Y2hBbmRDb21taXQobmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCAqbGVm
dFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZS5nZXRVbm5hbWVkVHlwZSgpKSkKICAgICAgICAgcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpLnNldFR5cGUoV1RGTW92ZShtYXRjaGVk
VHlwZS52YWx1ZSgpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHNldEVycm9yKCk7CkBAIC04ODMs
OSArOTc2LDIzIEBAIHN0YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBnZXRVbm5hbWVkVHlwZSgKIHsK
ICAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewogICAg
ICAgICByZXR1cm4gJnR5cGU7Ci0gICAgfSwgW10oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgIH0sIFtdKFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBBU1Q6OlVu
bmFtZWRUeXBlKiB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgdHlwZSBpc24ndCBjb21taXR0
ZWQsIHNob3VsZCB3ZSBqdXN0IGNvbW1pdCgpIGl0IG5vdz8KLSAgICAgICAgcmV0dXJuIHR5cGUt
PnJlc29sdmFibGVUeXBlKCkubWF5YmVSZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgQVNUOjpVbm5h
bWVkVHlwZSogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAg
ICAgIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5mb3JFYWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2
YWJsZVR5cGUmIHR5cGUpIHsKKyAgICAgICAgICAgIGlmICghdHlwZS5tYXliZVJlc29sdmVkVHlw
ZSgpKQorICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW9rKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWF0Y2hlcygq
cmVzdWx0LCAqdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgICAgICBvayA9
IGZhbHNlOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIG9rID8gcmVzdWx0IDogbnVsbHB0
cjsKICAgICB9KSk7CiB9CiAKQEAgLTEwMDksNyArMTExNiw3IEBAIHZvaWQgQ2hlY2tlcjo6Zmlu
aXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICBhdXRvIGJhc2VJbmZvID0gcmVjdXJzZUFuZEdl
dEluZm8ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKSk7CiAgICAgaWYgKCFiYXNlSW5m
bykKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gYmFzZVVubmFtZWRUeXBlID0gY29tbWl0KGJh
c2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBhdXRvIGJhc2VVbm5hbWVkVHlwZSA9IGNvbW1p
dChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKICAg
ICBpZiAoIWJhc2VVbm5hbWVkVHlwZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjAxLDggKzEz
MDgsOCBAQCBib29sIENoZWNrZXI6OmlzQm9vbFR5cGUoUmVzb2x2aW5nVHlwZSYgCiB7CiAgICAg
cmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBib29sIHsKICAgICAgICAgcmV0dXJuIG1hdGNo
ZXMobGVmdCwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpOwotICAgIH0sIFsmXShSZWZQdHI8UmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBib29sIHsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KG1faW50cmluc2ljcy5ib29sVHlwZSgpLCBs
ZWZ0LT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlLCBzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSY+KG1faW50cmluc2ljcy5ib29sVHlw
ZSgpKSkpOwogICAgIH0pKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCShyZXZpc2lvbiAyNDcw
ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlw
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDExIEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBpbmZlclR5cGVzRm9yQ2FsbEltcGwKICAgICAgICAgYXV0byBzdWNjZXNzID0gYXJndW1l
bnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKICAgICAgICAgICAgIHJldHVy
biBtYXRjaGVzKCpwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLCB1bm5h
bWVkVHlwZSk7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+
JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4g
cmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY2FuUmVzb2x2ZShwb3Nz
aWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKSk7CisgICAg
ICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc29sdmFibGVUeXBlUmVmZXJl
bmNlLT5mb3JFYWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2YWJsZVR5cGUmIHR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBvayAmPSB0eXBlLmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0
ZXJzKClbaV0tPnR5cGUoKS0+dW5pZnlOb2RlKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICByZXR1cm4gb2s7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAkocmV2aXNpb24gMjQ3MDg2KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjQsOCArMzY0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlQ29uc3RhbnRF
eHByZXNzaW9uKCkgLQogICAgICAgICBhdXRvIHZhbHVlID0gZmxvYXRMaXRlcmFsVG9GbG9hdCh0
eXBlLT5zdHJpbmdWaWV3KTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIHt7IEFT
VDo6RmxvYXRMaXRlcmFsKFdURk1vdmUoKnR5cGUpLCAqdmFsdWUpIH19OwotICAgIH0KKyAgICAg
ICAgcmV0dXJuIHt7IEFTVDo6RmxvYXRMaXRlcmFsKFdURk1vdmUoKnR5cGUpLCAqdmFsdWUpIH19
OyB9CiAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6Ok51bGw6CiAgICAgICAgIHJldHVybiB7
IEFTVDo6TnVsbExpdGVyYWwoV1RGTW92ZSgqdHlwZSkpIH07CiAgICAgY2FzZSBMZXhlcjo6VG9r
ZW46OlR5cGU6OlRydWU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByZXBhcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHJldmlzaW9uIDI0NzA4NikKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogc3RhdGljIGNvbnN0
ZXhwciBib29sIGR1bXBBU1RCZWZvcmVFYWNoUGFzcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhw
ciBib29sIGR1bXBBU1RBZnRlclBhcnNpbmcgPSBmYWxzZTsKLXN0YXRpYyBjb25zdGV4cHIgYm9v
bCBkdW1wQVNUQXRFbmQgPSBmYWxzZTsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQXRF
bmQgPSB0cnVlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGFsd2F5c0R1bXBQYXNzRmFpbHVyZXMg
PSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wUGFzc0ZhaWx1cmUgPSBkdW1wQVNU
QmVmb3JlRWFjaFBhc3MgfHwgZHVtcEFTVEFmdGVyUGFyc2luZyB8fCBkdW1wQVNUQXRFbmQgfHwg
YWx3YXlzRHVtcFBhc3NGYWlsdXJlczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZElt
cGwuY3BwCShyZXZpc2lvbiAyNDcwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCwxMiBAQCBzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpGdW5jCiAg
ICAgICAgIGNvbnZlcnNpb25Db3N0ICs9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JikgLT4gdW5zaWdu
ZWQgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gdW5zaWduZWQg
ewotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxl
VHlwZSgpLmNvbnZlcnNpb25Db3N0KCpjYW5kaWRhdGUucGFyYW1ldGVycygpW2ldLT50eXBlKCkp
OworICAgICAgICAgICAgdW5zaWduZWQgY29zdCA9IDA7CisgICAgICAgICAgICByZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZS0+Zm9yRWFjaFR5cGUoWyZdIChBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBl
KSB7CisgICAgICAgICAgICAgICAgLy8gT09QUy4gV2Ugc2hvdWxkIGZpbmQgb3V0IHdoYXQgaXMg
c3BlY2lmaWVkIGhlcmUhCisgICAgICAgICAgICAgICAgY29zdCA9IHN0ZDo6bWF4KGNvc3QsIHR5
cGUuY29udmVyc2lvbkNvc3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSkpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gY29zdDsKICAgICAgICAgfSkpOwog
ICAgIH0KICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgY2FuIG5ldmVyIGJlIGEgbGl0ZXJhbCB0eXBl
LCBzbyBpdHMgY29udmVyc2lvbiBjb3N0IGlzIGFsd2F5cyAwLgpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBl
LmgJKHJldmlzaW9uIDI0NzA4NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNSArNTksNTAg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShS
ZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+IGxlZnQsIFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4gcmlnaHQpCisgICAgICAgIDogbV9sZWZ0KFdURk1vdmUobGVmdCkpCisgICAg
ICAgICwgbV9yaWdodChXVEZNb3ZlKHJpZ2h0KSkKKyAgICB7CisgICAgfQorCiAgICAgUmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UoY29uc3QgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0
ZTsKICAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYm
KSA9IGRlbGV0ZTsKICAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0
IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CiAgICAgUmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2UmIG9wZXJhdG9yPShSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYmKSA9IGRlbGV0ZTsK
IAotICAgIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKCkgeyByZXR1cm4gKm1f
cmVzb2x2YWJsZVR5cGU7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAg
dm9pZCBmb3JFYWNoVHlwZShGdW5jdGlvbiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIGlmICht
X3Jlc29sdmFibGVUeXBlKQorICAgICAgICAgICAgZnVuY3Rpb24oKm1fcmVzb2x2YWJsZVR5cGUp
OworCisgICAgICAgIGlmIChtX2xlZnQpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3JpZ2h0KTsK
KyAgICAgICAgICAgIG1fbGVmdC0+Zm9yRWFjaFR5cGUoZnVuY3Rpb24pOworICAgICAgICAgICAg
bV9yaWdodC0+Zm9yRWFjaFR5cGUoZnVuY3Rpb24pOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIEFTU0VSVCghbV9yaWdodCk7CisgICAgfQorCisgICAgdm9pZCBzZXRQYXJlbnQoUmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UmIHBhcmVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9wYXJl
bnQpOworICAgICAgICBtX3BhcmVudCA9ICZwYXJlbnQ7CisgICAgfQorCisgICAgUmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2UmIHJvb3QoKQorICAgIHsKKyAgICAgICAgUmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UqIHJlc3VsdCA9IHRoaXM7CisgICAgICAgIHdoaWxlIChyZXN1bHQtPm1fcGFyZW50KQor
ICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5tX3BhcmVudDsKKyAgICAgICAgcmV0dXJuICpy
ZXN1bHQ7CisgICAgfQogCiBwcml2YXRlOgotICAgIEFTVDo6UmVzb2x2YWJsZVR5cGUqIG1fcmVz
b2x2YWJsZVR5cGU7CisgICAgQVNUOjpSZXNvbHZhYmxlVHlwZSogbV9yZXNvbHZhYmxlVHlwZSB7
IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+IG1fbGVmdDsK
KyAgICBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+IG1fcmlnaHQ7CisgICAgUmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UqIG1fcGFyZW50IHsgbnVsbHB0ciB9OwogfTsKIAogLy8gVGhpcyBp
cyBhIHRoaW4gd3JhcHBlciBhcm91bmQgYSBWYXJpYW50LgpAQCAtOTEsMTcgKzEyNiwxMCBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgUmVzb2x2aW5nVHlwZShjb25zdCBSZXNvbHZpbmdUeXBlJikg
PSBkZWxldGU7Ci0gICAgUmVzb2x2aW5nVHlwZShSZXNvbHZpbmdUeXBlJiYgb3RoZXIpCi0gICAg
ICAgIDogbV9pbm5lcihXVEZNb3ZlKG90aGVyLm1faW5uZXIpKQotICAgIHsKLSAgICB9CisgICAg
UmVzb2x2aW5nVHlwZShSZXNvbHZpbmdUeXBlJiYpID0gZGVmYXVsdDsKIAogICAgIFJlc29sdmlu
Z1R5cGUmIG9wZXJhdG9yPShjb25zdCBSZXNvbHZpbmdUeXBlJikgPSBkZWxldGU7Ci0gICAgUmVz
b2x2aW5nVHlwZSYgb3BlcmF0b3I9KFJlc29sdmluZ1R5cGUmJiBvdGhlcikKLSAgICB7Ci0gICAg
ICAgIG1faW5uZXIgPSBXVEZNb3ZlKG90aGVyLm1faW5uZXIpOwotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgfQorICAgIFJlc29sdmluZ1R5cGUmIG9wZXJhdG9yPShSZXNvbHZpbmdUeXBlJiYg
b3RoZXIpID0gZGVmYXVsdDsKIAogICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFVubmFtZWRUeXBl
KCkKICAgICB7CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLXJlc29sdmFi
bGUtdHlwZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVz
dGVkLXJlc29sdmFibGUtdHlwZXMuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbmVzdGVkLXJlc29sdmFibGUtdHlwZXMuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2b2lkIGZvbyh1aW50IHgpCit7Cit9CisK
K3ZvaWQgYmFyKGludCB4KQoreworfQorCit2b2lkIGJheihmbG9hdCB4KQoreworfQorCitbbnVt
dGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRb
XSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhy
ZWFkSUQpIHsKKyAgICBib29sIGIgPSB0cnVlOworCisgICAgLy8oYiA/IChiID8gMTAgOiAyMCkg
OiAoYiA/IDEwIDogKGIgPyA0MCA6IDIwKSkpOworICAgIC8vKGIgPyAoYiA/IDEwIDogMjApIDog
KGIgPyAxMCA6IChiID8gNDAgOiAyMCkpKTsKKyAgICAvLyhiID8gKGIgPyAxMCA6IDIwKSA6IChi
ID8gMTAgOiAoYiA/IDQwIDogMjApKSk7CisgICAgLy8oYiA/IChiID8gMTAgOiAyMCkgOiAoYiA/
IDEwIDogKGIgPyA0MCA6IDIwKSkpOworICAgIC8vKGIgPyAoYiA/IDEwIDogMjApIDogKGIgPyAx
MCA6IChiID8gNDAgOiAyMCkpKTsKKyAgICAvLyhiID8gKGIgPyAxMCA6IDIwKSA6IChiID8gMTAg
OiAoYiA/IDQwIDogMjApKSk7CisgICAgLy8oYiA/IChiID8gMTAgOiAyMCkgOiAoYiA/IDEwIDog
KGIgPyA0MCA6IDIwKSkpOworICAgIC8vKGIgPyAoYiA/IDEwIDogMjApIDogKGIgPyAxMCA6IChi
ID8gNDAgOiAyMCkpKTsKKyAgICAvLyhiID8gKGIgPyAxMCA6IDIwKSA6IChiID8gMTAgOiAoYiA/
IDQwIDogMjApKSk7CisgICAgLy8oYiA/IChiID8gMTAgOiAoYiA/IDIwIDogMzApKSA6IChiID8g
MTAgOiAoYiA/IDQwIDogMjApKSk7CisgICAgLy8oYiA/IDEwLjAgOiAyMCk7CisgICAgLy8oYiA/
IDIwIDogMTAuMCk7CisKKyAgICAvL3VpbnQgeCA9IGIgPyAxMCA6IDIwOworICAgIC8vdWludCB4
MiA9IGIgPyAyMTQ3NDgzNjQ3IDogMjQ7CisgICAgLy9mb28oYiA/IDEwIDogMjApOworICAgIC8v
Zm9vKGIgPyAoYiA/IDIxNDc0ODM2NDcgOiAxMCkgOiAyMCk7CisgICAgLy9mb28oYiA/IChiID8g
MjE0NzQ4MzY0NyA6IDEwKSA6IChiID8gMjAgOiAoYiA/IDQ1IDogNTUpKSk7CisKKyAgICAvL2Jh
cihiID8gKGIgPyAyMTQ3NDgzNjQ3IDogMTApIDogKGIgPyAyMCA6IChiID8gNDUgOiA1NSkpKTsK
KyAgICAvL2JheihiID8gKGIgPyAyMTQ3NDgzNjQ3IDogMTApIDogKGIgPyAyMCA6IChiID8gNDUg
OiA1NSkpKTsKKworICAgIC8vYmF6KGIgPyAoYiA/IDIxNDc0ODM2NDcgOiAxMC41KSA6IChiID8g
MjAgOiAoYiA/IDQ1IDogNTUpKSk7CisKKyAgICAvL2ludCB4MiA9IGIgPyAxMC4wIDogMjA7Cisg
ICAgLy9pbnQgeDIgPSAxMC4wOworCisgICAgLy9mbG9hdCB5ID0gYiA/IDEwLjUgOiAyMDsKKyAg
ICAvL2Zsb2F0IHkyID0gYiA/IChiID8gMjAgOiAxMC41KSA6IDIwOworICAgIC8vdGhyZWFkIGlu
dCogcHRyID0gYiA/IG51bGwgOiBudWxsOworICAgIAorICAgIGJ1ZmZlclswXSA9IDE7Cit9Citg
OworYXN5bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxl
ID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0
eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRl
dmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFti
aW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVh
dGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3Qg
Y29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxp
bmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21w
dXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXpl
ID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7CisKKyAgICBjb25zdCBidWZmZXJE
ZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVC
dWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIg
PSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0
c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0Ug
fCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07
CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1
ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJl
c3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGlu
ZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2Ny
aXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmlu
ZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmlu
ZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5j
cmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZm
ZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0
IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsK
KyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAg
ICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29t
cHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rl
ci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZp
bmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwor
CisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBS
ZWFkQXN5bmMoKTsKKyAgICBsZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShy
ZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkK
KyAgICAgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIi
KTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3Rh
cnQoZGV2aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7
CisgICAgZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373449</attachid>
            <date>2019-07-03 19:31:22 -0700</date>
            <delta_ts>2019-07-04 01:32:39 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>27455</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ3MDg2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiAr
NjMsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAorI2luY2x1ZGUgIldITFNMQVNURHVtcGVyLmgiCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKQEAgLTE3Nyw3ICsxNzksMTEgQEAgc3RhdGljIE9w
dGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQogICAgICAgICBib29sIHNlY29uZEFyZ3Vt
ZW50SXNVaW50ID0gdHlwZXNbMV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CiAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsK
ICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZlKGludHJpbnNpY3MudWlu
dFR5cGUoKSk7CisgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc29s
dmFibGVUeXBlUmVmZXJlbmNlLT5mb3JFYWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2YWJsZVR5cGUm
IHR5cGUpIHsKKyAgICAgICAgICAgICAgICBvayAmPSB0eXBlLmNhblJlc29sdmUoaW50cmluc2lj
cy51aW50VHlwZSgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIG9rOwog
ICAgICAgICB9KSk7CiAgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50QXJyYXlSZWYgJiYgc2Vjb25k
QXJndW1lbnRJc1VpbnQpCiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVyYXRvckFu
ZGVySW5kZXhlcihvcmlnaW4sICpmaXJzdEFyZ3VtZW50QXJyYXlSZWYsIGludHJpbnNpY3MpOwpA
QCAtMTk2LDcgKzIwMiwxMSBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhCiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFjY2Vw
dGFiaWxpdHkgewogICAgICAgICAgICAgICAgIHJldHVybiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+
KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpID8gQWNjZXB0YWJp
bGl0eTo6WWVzIDogQWNjZXB0YWJpbGl0eTo6Tm87CiAgICAgICAgICAgICB9LCBbXShSZWZQdHI8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gQWNj
ZXB0YWJpbGl0eSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlzPEFTVDo6TnVsbExpdGVyYWxU
eXBlPihyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSkgPyBBY2NlcHRh
YmlsaXR5OjpNYXliZSA6IEFjY2VwdGFiaWxpdHk6Ok5vOworICAgICAgICAgICAgICAgIGJvb2wg
aXNBY2NlcHRhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZS0+Zm9yRWFjaFR5cGUoWyZdIChBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlzQWNjZXB0YWJsZSAmPSBpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4o
dHlwZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzQWNj
ZXB0YWJsZSA/IEFjY2VwdGFiaWxpdHk6Ok1heWJlIDogQWNjZXB0YWJpbGl0eTo6Tm87CiAgICAg
ICAgICAgICB9KSk7CiAgICAgICAgIH07CiAgICAgICAgIGF1dG8gbGVmdEFjY2VwdGFiaWxpdHkg
PSBhY2NlcHRhYmlsaXR5KHR5cGVzWzBdLmdldCgpKTsKQEAgLTQ2OSw4ICs0NzksOSBAQCBwcml2
YXRlOgogICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYs
IGJvb2wgcmVxdWlyZXNMZWZ0VmFsdWUgPSBmYWxzZSk7CiAgICAgT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PiByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uJik7CiAgICAgYm9vbCByZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKEFT
VDo6RXhwcmVzc2lvbiYpOwotICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7Ci0gICAg
dm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFT
VDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmLCBBU1Q6OlR5cGVB
bm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpOworICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6
OkV4cHJlc3Npb24mLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYsIEFTVDo6VHlw
ZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFT
VDo6RXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5cGUsIEFTVDo6VHlwZUFubm90YXRpb24gPSBBU1Q6
OlJpZ2h0VmFsdWUoKSk7CiAgICAgdm9pZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBS
ZXNvbHZpbmdUeXBlJiwgQVNUOjpUeXBlQW5ub3RhdGlvbik7CiAKICAgICB2b2lkIHZpc2l0KEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CkBAIC01MzQsMTggKzU0NSw4NCBAQCB2
b2lkIENoZWNrZXI6OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCiAgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKClbaV0pOwogfQogCitz
dGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBjb21taXQoQVNUOjpF
eHByZXNzaW9uJiBleHByLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZSkKK3sKKyAgICBkYXRhTG9nTG4oIi0tLS0tLS0tLS0tLS0tLSIpOwor
ICAgIGRhdGFMb2dMbihFeHByZXNzaW9uRHVtcGVyKGV4cHIpKTsKKyAgICBhdXRvJiByb290ID0g
cmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJvb3QoKTsKKyAgICBkYXRhTG9nTG4oIlJvb3Q6ICIs
IFJhd1BvaW50ZXIoJnJvb3QpKTsKKworICAgIEFTVDo6UmVzb2x2YWJsZVR5cGUqIHByZWZlcnJl
ZExpdGVyYWxUeXBlID0gbnVsbHB0cjsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiByZXNvbHZlZFR5
cGUgPSBudWxscHRyOworCisgICAgYm9vbCBzYXdOdWxsTGl0ZXJhbFR5cGUgPSBmYWxzZTsKKyAg
ICByb290LmZvckVhY2hUeXBlKFsmXSAoQVNUOjpSZXNvbHZhYmxlVHlwZSYgdHlwZSkgeworICAg
ICAgICBpZiAodHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKQorICAgICAgICAgICAgcmVzb2x2ZWRU
eXBlID0gdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpOworICAgICAgICBzYXdOdWxsTGl0ZXJhbFR5
cGUgfD0gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHR5cGUpOworCisgICAgICAgIGlmICghcHJl
ZmVycmVkTGl0ZXJhbFR5cGUpIHsKKyAgICAgICAgICAgIHByZWZlcnJlZExpdGVyYWxUeXBlID0g
JnR5cGU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChpczxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHR5cGUpKSB7CisgICAgICAgICAgICBwcmVm
ZXJyZWRMaXRlcmFsVHlwZSA9ICZ0eXBlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KCpwcmVm
ZXJyZWRMaXRlcmFsVHlwZSkgJiYgaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHR5cGUpKQor
ICAgICAgICAgICAgcHJlZmVycmVkTGl0ZXJhbFR5cGUgPSAmdHlwZTsKKyAgICB9KTsKKworICAg
IGlmIChzYXdOdWxsTGl0ZXJhbFR5cGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBBU1Q6OlVubmFtZWRUeXBlKiBwcmVmZXJyZWRUeXBlOworICAgIGlmIChpczxBU1Q6OkZs
b2F0TGl0ZXJhbFR5cGU+KCpwcmVmZXJyZWRMaXRlcmFsVHlwZSkpIHsKKyAgICAgICAgcHJlZmVy
cmVkVHlwZSA9ICZkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KCpwcmVmZXJyZWRMaXRl
cmFsVHlwZSkucHJlZmVycmVkVHlwZSgpOworICAgICAgICBkYXRhTG9nTG4oIlByZWZlcnJlZCB0
eXBlIGlzIGZsb2F0ISIpOworICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZT4oKnByZWZlcnJlZExpdGVyYWxUeXBlKSkgeworICAgICAgICBwcmVmZXJyZWRU
eXBlID0gJmRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KCpwcmVmZXJy
ZWRMaXRlcmFsVHlwZSkucHJlZmVycmVkVHlwZSgpOworICAgICAgICBkYXRhTG9nTG4oIlByZWZl
cnJlZCB0eXBlIGlzIHVuc2lnbmVkISIpOworICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpJbnRlZ2Vy
TGl0ZXJhbFR5cGU+KCpwcmVmZXJyZWRMaXRlcmFsVHlwZSkpIHsKKyAgICAgICAgcHJlZmVycmVk
VHlwZSA9ICZkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4oKnByZWZlcnJlZExpdGVy
YWxUeXBlKS5wcmVmZXJyZWRUeXBlKCk7CisgICAgICAgIGRhdGFMb2dMbigiUHJlZmVycmVkIHR5
cGUgaXMgaW50ZWdlcjogIiwgUmF3UG9pbnRlcigmcHJlZmVycmVkVHlwZS0+dW5pZnlOb2RlKCkp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwor
ICAgIGlmIChyZXNvbHZlZFR5cGUpCisgICAgICAgIHByZWZlcnJlZFR5cGUgPSByZXNvbHZlZFR5
cGU7CisKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICByb290LmZvckVhY2hUeXBlKFsmXSAoQVNU
OjpSZXNvbHZhYmxlVHlwZSYgdHlwZSkgeworICAgICAgICBpZiAodHlwZS5tYXliZVJlc29sdmVk
VHlwZSgpKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKnByZWZlcnJlZFR5cGUsICp0eXBl
Lm1heWJlUmVzb2x2ZWRUeXBlKCkpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJOb3Qg
bWF0Y2hlcyEhIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJyZXNvbHZlZCB0eXBlOiAi
LCBUeXBlRHVtcGVyKCp0eXBlLm1heWJlUmVzb2x2ZWRUeXBlKCkpICk7CisgICAgICAgICAgICAg
ICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJNYXRjaGVzISIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFt
YXRjaEFuZENvbW1pdCgqcHJlZmVycmVkVHlwZSwgdHlwZSkpCisgICAgICAgICAgICBvayA9IGZh
bHNlOworICAgIH0pOworCisgICAgcmV0dXJuIG9rID8gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PihwcmVmZXJyZWRUeXBlLT5jbG9uZSgpKSA6IFdURjo6bnVsbG9wdDsKK30K
KwogYm9vbCBDaGVja2VyOjphc3NpZ25UeXBlcygpCiB7CisgICAgZGF0YUxvZ0xuKCJBU1NJR04g
VFlQRVMiKTsKICAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG1fdHlwZU1hcCkgewogICAg
ICAgICBhdXRvIHN1Y2Nlc3MgPSBrZXlWYWx1ZVBhaXIudmFsdWUtPnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJv
b2wgewogICAgICAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0VHlwZSh1bm5hbWVkVHlwZS0+
Y2xvbmUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSwgWyZdKFJlZlB0
cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBi
b29sIHsKLSAgICAgICAgICAgIGlmICghcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFi
bGVUeXBlKCkubWF5YmVSZXNvbHZlZFR5cGUoKSkgewotICAgICAgICAgICAgICAgIGlmICghc3Rh
dGljX2Nhc3Q8Ym9vbD4oY29tbWl0KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxl
VHlwZSgpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldFR5cGUocmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAg
ICAgICAgICBhdXRvIHJlc29sdmVkVHlwZSA9IGNvbW1pdCgqa2V5VmFsdWVQYWlyLmtleSwgcmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UpOworICAgICAgICAgICAgaWYgKCFyZXNvbHZlZFR5cGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAga2V5VmFsdWVQYWlyLmtl
eS0+c2V0VHlwZShXVEZNb3ZlKHJlc29sdmVkVHlwZS52YWx1ZSgpKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfSkpOwogICAgICAgICBpZiAoIXN1Y2Nlc3MpCkBAIC01OTQs
MjEgKzY3MSw0MCBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0CiAg
ICAgVmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKIH0KIAotc3RhdGljIE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5n
VHlwZSYgbGVmdCwgUmVzb2x2aW5nVHlwZSYgcmlnaHQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlw
ZT4KK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5k
Q29tbWl0KFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlLCBUeXBlJiBtYXRjaGluZ1R5cGUpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8VHlwZSwgQVNUOjpOYW1lZFR5cGU+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VHlwZSwg
QVNUOjpVbm5hbWVkVHlwZT46OnZhbHVlLCAiIik7CisgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+PiByZXN1bHQ7CisgICAgYm9vbCBvayA9IHRydWU7CisgICAgcmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UtPmZvckVhY2hUeXBlKFsmXSAoQVNUOjpSZXNvbHZhYmxlVHlwZSYg
dHlwZSkgeworICAgICAgICByZXN1bHQgPSBtYXRjaEFuZENvbW1pdChtYXRjaGluZ1R5cGUsIHR5
cGUpOworICAgICAgICBvayAmPSAhIXJlc3VsdDsKKyAgICB9KTsKKyAgICByZXR1cm4gb2sgPyBX
VEZNb3ZlKHJlc3VsdCkgOiBXVEY6Om51bGxvcHQ7Cit9CitzdGF0aWMgT3B0aW9uYWw8UmVzb2x2
aW5nVHlwZT4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5nVHlwZSYgbGVmdCwgUmVzb2x2aW5nVHlw
ZSYgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIGxlZnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgcmV0dXJuIHJpZ2h0LnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgIHJldHVybiBsZWZ0LnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkg
LT4gT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4geworICAgICAgICByZXR1cm4gcmlnaHQudmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdodCkg
LT4gT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gewogICAgICAgICAgICAgaWYgKG1hdGNoZXMobGVm
dCwgcmlnaHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5jbG9uZSgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBSZXNvbHZpbmdUeXBlKGxlZnQtPmNsb25lKCkpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAg
ICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBtYXRjaEFuZENvbW1pdChyaWdodCwgbGVmdC5nZXQo
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc29sdmluZ1R5cGUoV1RGTW92ZShyZXN1bHQu
dmFsdWUoKSkpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgfSwg
WyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaEFu
ZENvbW1pdChsZWZ0LCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7CiAgICAgICAgIH0pKTsKLSAg
ICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkgLT4gT3B0aW9u
YWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7Ci0gICAgICAgIHJldHVybiByaWdodC52
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJp
Z2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAg
ICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChyaWdodCwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSk7
Ci0gICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkg
LT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbWF0Y2hBbmRDb21taXQobGVmdC0+cmVzb2x2YWJsZVR5cGUoKSwgcmlnaHQtPnJlc29s
dmFibGVUeXBlKCkpOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+
JiBsZWZ0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAgICAgIHJldHVybiByaWdo
dC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
IHJpZ2h0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAgICAgICAgICBpZiAoYXV0
byByZXN1bHQgPSBtYXRjaEFuZENvbW1pdChsZWZ0LCByaWdodC5nZXQoKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFJlc29sdmluZ1R5cGUoV1RGTW92ZShyZXN1bHQudmFsdWUoKSkpOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7
CisgICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBuZXcgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Uo
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbGVmdC0+c2V0UGFyZW50KCpyZXN1bHQpOworICAg
ICAgICAgICAgcmlnaHQtPnNldFBhcmVudCgqcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBS
ZXNvbHZpbmdUeXBlKGFkb3B0UmVmKHJlc3VsdCkpOwogICAgICAgICB9KSk7CiAgICAgfSkpOwog
fQpAQCAtNjE5LDggKzcxNSw4IEBAIHN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHkKICAgICAgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsIHJlc29sdmluZ1R5cGUpKQog
ICAgICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLmNsb25lKCk7CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
IHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4g
ewotICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQodW5uYW1lZFR5cGUsIHJlc29sdmluZ1R5
cGUtPnJlc29sdmFibGVUeXBlKCkpOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChyZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZSwgdW5uYW1lZFR5cGUpOwogICAgIH0pKTsKIH0KIApAQCAtNjMw
LDE5ICs3MjYsMTcgQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQog
ICAgICAgICBpZiAobWF0Y2hlcyhyZXNvbHZpbmdUeXBlLCBuYW1lZFR5cGUpKQogICAgICAgICAg
ICAgcmV0dXJuIHJlc29sdmluZ1R5cGUtPmNsb25lKCk7CiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29s
dmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAg
ICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRUeXBlLCByZXNvbHZpbmdUeXBlLT5yZXNv
bHZhYmxlVHlwZSgpKTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPj4geworICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQocmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UsIG5hbWVkVHlwZSk7CiAgICAgfSkpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBjb21taXQoUmVzb2x2aW5nVHlwZSYgcmVzb2x2
aW5nVHlwZSkKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNv
bW1pdChBU1Q6OkV4cHJlc3Npb24mIGV4cHIsIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUp
CiB7CiAgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8VW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CiAgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+
Y2xvbmUoKTsKICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPj4gewotICAgICAgICBpZiAoIXJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxl
VHlwZSgpLm1heWJlUmVzb2x2ZWRUeXBlKCkpCi0gICAgICAgICAgICByZXR1cm4gY29tbWl0KHJl
c29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKTsKLSAgICAgICAgcmV0dXJu
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgp
LmNsb25lKCk7CisgICAgICAgIHJldHVybiBjb21taXQoZXhwciwgcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UpOwogICAgIH0pKTsKIH0KIApAQCAtODAwLDcgKzg5NCw3IEBAIHZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmEKICAgICB9CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNz
aWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9u
ID0gQVNUOjpSaWdodFZhbHVlKCkpCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHBy
ZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVk
VHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbikKIHsKICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8UmVz
b2x2aW5nVHlwZT4oV1RGTW92ZSh1bm5hbWVkVHlwZSkpKTsKICAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtODA4LDcgKzkwMiw3IEBAIHZvaWQg
Q2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24KICAgICBBU1NFUlRfVU5VU0VEKHR5
cGVBbm5vdGF0aW9uQWRkUmVzdWx0LCB0eXBlQW5ub3RhdGlvbkFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKIH0KIAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVz
c2lvbiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZh
bHVlKCkpCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNz
aW9uLCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24pCiB7CiAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPFJl
c29sdmluZ1R5cGU+KFdURk1vdmUocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpKSk7CiAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKQEAgLTgxNiw2ICs5
MTAsMTUgQEAgdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbgogICAgIEFT
U0VSVF9VTlVTRUQodHlwZUFubm90YXRpb25BZGRSZXN1bHQsIHR5cGVBbm5vdGF0aW9uQWRkUmVz
dWx0LmlzTmV3RW50cnkpOwogfQogCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHBy
ZXNzaW9uJiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlIHJlc29sdmluZ1R5cGUsIEFTVDo6VHlw
ZUFubm90YXRpb24gdHlwZUFubm90YXRpb24pCit7CisgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUu
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBs
ZWZ0KSB7CisgICAgICAgIGFzc2lnblR5cGUoZXhwcmVzc2lvbiwgV1RGTW92ZShsZWZ0KSwgdHlw
ZUFubm90YXRpb24pOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+
JiBsZWZ0KSB7CisgICAgICAgIGFzc2lnblR5cGUoZXhwcmVzc2lvbiwgV1RGTW92ZShsZWZ0KSwg
dHlwZUFubm90YXRpb24pOworICAgIH0pKTsKK30KKwogdm9pZCBDaGVja2VyOjpmb3J3YXJkVHlw
ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5
cGUsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUo
KSkKIHsKICAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7CkBAIC04NDQsNyArOTQ3LDcgQEAgdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZQogICAgIGlmICghcmlnaHRJbmZv
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJlc3VsdFR5cGUgPSBtYXRjaEFuZENvbW1p
dChsZWZ0SW5mby0+cmVzb2x2aW5nVHlwZSwgcmlnaHRJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAg
ICBhdXRvIHJlc3VsdFR5cGUgPSBtYXRjaEFuZENvbW1pdChyaWdodEluZm8tPnJlc29sdmluZ1R5
cGUsICpsZWZ0SW5mby0+cmVzb2x2aW5nVHlwZS5nZXRVbm5hbWVkVHlwZSgpKTsKICAgICBpZiAo
IXJlc3VsdFR5cGUpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
ODY1LDcgKzk2OCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGUK
ICAgICBpZiAoIW5ld1ZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hlZFR5cGUgPSBtYXRjaEFuZENv
bW1pdChsZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmlu
Z1R5cGUpKQorICAgIGlmIChPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1h
dGNoZWRUeXBlID0gbWF0Y2hBbmRDb21taXQobmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCAq
bGVmdFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZS5nZXRVbm5hbWVkVHlwZSgpKSkKICAgICAgICAg
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpLnNldFR5cGUoV1RGTW92ZShtYXRj
aGVkVHlwZS52YWx1ZSgpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHNldEVycm9yKCk7CkBAIC04
ODMsOSArOTg2LDIzIEBAIHN0YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBnZXRVbm5hbWVkVHlwZSgK
IHsKICAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewog
ICAgICAgICByZXR1cm4gJnR5cGU7Ci0gICAgfSwgW10oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgIH0sIFtdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBBU1Q6
OlVubmFtZWRUeXBlKiB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgdHlwZSBpc24ndCBjb21t
aXR0ZWQsIHNob3VsZCB3ZSBqdXN0IGNvbW1pdCgpIGl0IG5vdz8KLSAgICAgICAgcmV0dXJuIHR5
cGUtPnJlc29sdmFibGVUeXBlKCkubWF5YmVSZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgQVNUOjpV
bm5hbWVkVHlwZSogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgYm9vbCBvayA9IHRydWU7Cisg
ICAgICAgIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5mb3JFYWNoVHlwZShbJl0gKEFTVDo6UmVz
b2x2YWJsZVR5cGUmIHR5cGUpIHsKKyAgICAgICAgICAgIGlmICghdHlwZS5tYXliZVJlc29sdmVk
VHlwZSgpKQorICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW9r
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWF0Y2hl
cygqcmVzdWx0LCAqdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgICAgICBv
ayA9IGZhbHNlOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIG9rID8gcmVzdWx0IDogbnVs
bHB0cjsKICAgICB9KSk7CiB9CiAKQEAgLTEwMDksNyArMTEyNiw3IEBAIHZvaWQgQ2hlY2tlcjo6
ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICBhdXRvIGJhc2VJbmZvID0gcmVjdXJzZUFu
ZEdldEluZm8ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKSk7CiAgICAgaWYgKCFiYXNl
SW5mbykKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gYmFzZVVubmFtZWRUeXBlID0gY29tbWl0
KGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBhdXRvIGJhc2VVbm5hbWVkVHlwZSA9IGNv
bW1pdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsK
ICAgICBpZiAoIWJhc2VVbm5hbWVkVHlwZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjAxLDgg
KzEzMTgsOCBAQCBib29sIENoZWNrZXI6OmlzQm9vbFR5cGUoUmVzb2x2aW5nVHlwZSYgCiB7CiAg
ICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBib29sIHsKICAgICAgICAgcmV0dXJuIG1h
dGNoZXMobGVmdCwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpOwotICAgIH0sIFsmXShSZWZQdHI8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBib29sIHsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KG1faW50cmluc2ljcy5ib29sVHlwZSgp
LCBsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHJlc29sdmFibGVUeXBl
UmVmZXJlbmNlLCBzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSY+KG1faW50cmluc2ljcy5ib29s
VHlwZSgpKSkpOwogICAgIH0pKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCShyZXZpc2lvbiAy
NDcwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVy
VHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDExIEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBpbmZlclR5cGVzRm9yQ2FsbEltcGwKICAgICAgICAgYXV0byBzdWNjZXNzID0gYXJn
dW1lbnRUeXBlc1tpXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKICAgICAgICAgICAgIHJl
dHVybiBtYXRjaGVzKCpwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLCB1
bm5hbWVkVHlwZSk7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1
cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY2FuUmVzb2x2ZShw
b3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpLT51bmlmeU5vZGUoKSk7Cisg
ICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlLT5mb3JFYWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2YWJsZVR5cGUmIHR5cGUpIHsKKyAg
ICAgICAgICAgICAgICBvayAmPSB0eXBlLmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJh
bWV0ZXJzKClbaV0tPnR5cGUoKS0+dW5pZnlOb2RlKCkpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICByZXR1cm4gb2s7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAkocmV2aXNpb24gMjQ3MDg2KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjQsOCArMzY0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlQ29uc3Rh
bnRFeHByZXNzaW9uKCkgLQogICAgICAgICBhdXRvIHZhbHVlID0gZmxvYXRMaXRlcmFsVG9GbG9h
dCh0eXBlLT5zdHJpbmdWaWV3KTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIHt7
IEFTVDo6RmxvYXRMaXRlcmFsKFdURk1vdmUoKnR5cGUpLCAqdmFsdWUpIH19OwotICAgIH0KKyAg
ICAgICAgcmV0dXJuIHt7IEFTVDo6RmxvYXRMaXRlcmFsKFdURk1vdmUoKnR5cGUpLCAqdmFsdWUp
IH19OyB9CiAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6Ok51bGw6CiAgICAgICAgIHJldHVy
biB7IEFTVDo6TnVsbExpdGVyYWwoV1RGTW92ZSgqdHlwZSkpIH07CiAgICAgY2FzZSBMZXhlcjo6
VG9rZW46OlR5cGU6OlRydWU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByZXBhcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHJldmlzaW9uIDI0NzA4NikKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogc3RhdGljIGNv
bnN0ZXhwciBib29sIGR1bXBBU1RCZWZvcmVFYWNoUGFzcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0
ZXhwciBib29sIGR1bXBBU1RBZnRlclBhcnNpbmcgPSBmYWxzZTsKLXN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBkdW1wQVNUQXRFbmQgPSBmYWxzZTsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNU
QXRFbmQgPSB0cnVlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGFsd2F5c0R1bXBQYXNzRmFpbHVy
ZXMgPSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wUGFzc0ZhaWx1cmUgPSBkdW1w
QVNUQmVmb3JlRWFjaFBhc3MgfHwgZHVtcEFTVEFmdGVyUGFyc2luZyB8fCBkdW1wQVNUQXRFbmQg
fHwgYWx3YXlzRHVtcFBhc3NGYWlsdXJlczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9h
ZEltcGwuY3BwCShyZXZpc2lvbiAyNDcwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw3ICs0NCwxMiBAQCBzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpGdW5j
CiAgICAgICAgIGNvbnZlcnNpb25Db3N0ICs9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JikgLT4gdW5z
aWduZWQgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gdW5zaWdu
ZWQgewotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZh
YmxlVHlwZSgpLmNvbnZlcnNpb25Db3N0KCpjYW5kaWRhdGUucGFyYW1ldGVycygpW2ldLT50eXBl
KCkpOworICAgICAgICAgICAgdW5zaWduZWQgY29zdCA9IDA7CisgICAgICAgICAgICByZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZS0+Zm9yRWFjaFR5cGUoWyZdIChBU1Q6OlJlc29sdmFibGVUeXBlJiB0
eXBlKSB7CisgICAgICAgICAgICAgICAgLy8gT09QUy4gV2Ugc2hvdWxkIGZpbmQgb3V0IHdoYXQg
aXMgc3BlY2lmaWVkIGhlcmUhCisgICAgICAgICAgICAgICAgY29zdCA9IHN0ZDo6bWF4KGNvc3Qs
IHR5cGUuY29udmVyc2lvbkNvc3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSkp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gY29zdDsKICAgICAgICAgfSkp
OwogICAgIH0KICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgY2FuIG5ldmVyIGJlIGEgbGl0ZXJhbCB0
eXBlLCBzbyBpdHMgY29udmVyc2lvbiBjb3N0IGlzIGFsd2F5cyAwLgpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdU
eXBlLmgJKHJldmlzaW9uIDI0NzA4NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNSArNTks
NTAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+IGxlZnQsIFJlZlB0cjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4gcmlnaHQpCisgICAgICAgIDogbV9sZWZ0KFdURk1vdmUobGVmdCkpCisg
ICAgICAgICwgbV9yaWdodChXVEZNb3ZlKHJpZ2h0KSkKKyAgICB7CisgICAgfQorCiAgICAgUmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UoY29uc3QgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmKSA9IGRl
bGV0ZTsKICAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZSYmKSA9IGRlbGV0ZTsKICAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYgb3BlcmF0b3I9KGNv
bnN0IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CiAgICAgUmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UmIG9wZXJhdG9yPShSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYmKSA9IGRlbGV0
ZTsKIAotICAgIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKCkgeyByZXR1cm4g
Km1fcmVzb2x2YWJsZVR5cGU7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Cisg
ICAgdm9pZCBmb3JFYWNoVHlwZShGdW5jdGlvbiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIGlm
IChtX3Jlc29sdmFibGVUeXBlKQorICAgICAgICAgICAgZnVuY3Rpb24oKm1fcmVzb2x2YWJsZVR5
cGUpOworCisgICAgICAgIGlmIChtX2xlZnQpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3JpZ2h0
KTsKKyAgICAgICAgICAgIG1fbGVmdC0+Zm9yRWFjaFR5cGUoZnVuY3Rpb24pOworICAgICAgICAg
ICAgbV9yaWdodC0+Zm9yRWFjaFR5cGUoZnVuY3Rpb24pOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9yaWdodCk7CisgICAgfQorCisgICAgdm9pZCBzZXRQYXJlbnQoUmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UmIHBhcmVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9w
YXJlbnQpOworICAgICAgICBtX3BhcmVudCA9ICZwYXJlbnQ7CisgICAgfQorCisgICAgUmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UmIHJvb3QoKQorICAgIHsKKyAgICAgICAgUmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2UqIHJlc3VsdCA9IHRoaXM7CisgICAgICAgIHdoaWxlIChyZXN1bHQtPm1fcGFyZW50
KQorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5tX3BhcmVudDsKKyAgICAgICAgcmV0dXJu
ICpyZXN1bHQ7CisgICAgfQogCiBwcml2YXRlOgotICAgIEFTVDo6UmVzb2x2YWJsZVR5cGUqIG1f
cmVzb2x2YWJsZVR5cGU7CisgICAgQVNUOjpSZXNvbHZhYmxlVHlwZSogbV9yZXNvbHZhYmxlVHlw
ZSB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+IG1fbGVm
dDsKKyAgICBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+IG1fcmlnaHQ7CisgICAgUmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UqIG1fcGFyZW50IHsgbnVsbHB0ciB9OwogfTsKIAogLy8gVGhp
cyBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQgYSBWYXJpYW50LgpAQCAtOTEsMTcgKzEyNiwxMCBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgUmVzb2x2aW5nVHlwZShjb25zdCBSZXNvbHZpbmdUeXBl
JikgPSBkZWxldGU7Ci0gICAgUmVzb2x2aW5nVHlwZShSZXNvbHZpbmdUeXBlJiYgb3RoZXIpCi0g
ICAgICAgIDogbV9pbm5lcihXVEZNb3ZlKG90aGVyLm1faW5uZXIpKQotICAgIHsKLSAgICB9Cisg
ICAgUmVzb2x2aW5nVHlwZShSZXNvbHZpbmdUeXBlJiYpID0gZGVmYXVsdDsKIAogICAgIFJlc29s
dmluZ1R5cGUmIG9wZXJhdG9yPShjb25zdCBSZXNvbHZpbmdUeXBlJikgPSBkZWxldGU7Ci0gICAg
UmVzb2x2aW5nVHlwZSYgb3BlcmF0b3I9KFJlc29sdmluZ1R5cGUmJiBvdGhlcikKLSAgICB7Ci0g
ICAgICAgIG1faW5uZXIgPSBXVEZNb3ZlKG90aGVyLm1faW5uZXIpOwotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQorICAgIFJlc29sdmluZ1R5cGUmIG9wZXJhdG9yPShSZXNvbHZpbmdUeXBl
JiYgb3RoZXIpID0gZGVmYXVsdDsKIAogICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFVubmFtZWRU
eXBlKCkKICAgICB7CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLXJlc29s
dmFibGUtdHlwZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
bmVzdGVkLXJlc29sdmFibGUtdHlwZXMuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbmVzdGVkLXJlc29sdmFibGUtdHlwZXMuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2b2lkIGZvbyh1aW50IHgpCit7Cit9
CisKK3ZvaWQgYmFyKGludCB4KQoreworfQorCit2b2lkIGJheihmbG9hdCB4KQoreworfQorCitb
bnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBp
bnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNo
VGhyZWFkSUQpIHsKKyAgICBib29sIGIgPSB0cnVlOworCisgICAgLy8oYiA/IChiID8gMTAgOiAy
MCkgOiAoYiA/IDEwIDogKGIgPyA0MCA6IDIwKSkpOworICAgIC8vKGIgPyAoYiA/IDEwIDogMjAp
IDogKGIgPyAxMCA6IChiID8gNDAgOiAyMCkpKTsKKyAgICAvLyhiID8gKGIgPyAxMCA6IDIwKSA6
IChiID8gMTAgOiAoYiA/IDQwIDogMjApKSk7CisgICAgLy8oYiA/IChiID8gMTAgOiAyMCkgOiAo
YiA/IDEwIDogKGIgPyA0MCA6IDIwKSkpOworICAgIC8vKGIgPyAoYiA/IDEwIDogMjApIDogKGIg
PyAxMCA6IChiID8gNDAgOiAyMCkpKTsKKyAgICAvLyhiID8gKGIgPyAxMCA6IDIwKSA6IChiID8g
MTAgOiAoYiA/IDQwIDogMjApKSk7CisgICAgLy8oYiA/IChiID8gMTAgOiAyMCkgOiAoYiA/IDEw
IDogKGIgPyA0MCA6IDIwKSkpOworICAgIC8vKGIgPyAoYiA/IDEwIDogMjApIDogKGIgPyAxMCA6
IChiID8gNDAgOiAyMCkpKTsKKyAgICAvLyhiID8gKGIgPyAxMCA6IDIwKSA6IChiID8gMTAgOiAo
YiA/IDQwIDogMjApKSk7CisgICAgLy8oYiA/IChiID8gMTAgOiAoYiA/IDIwIDogMzApKSA6IChi
ID8gMTAgOiAoYiA/IDQwIDogMjApKSk7CisKKyAgICAoYiA/IDEwLjAgOiAyMCk7CisgICAgKGIg
PyAyMCA6IDEwLjApOworCisgICAgdWludCB4ID0gYiA/IDEwIDogMjA7CisgICAgdWludCB4MiA9
IGIgPyAyMTQ3NDgzNjQ3IDogMjQ7CisgICAgZm9vKGIgPyAxMCA6IDIwKTsKKyAgICBmb28oYiA/
IChiID8gMjE0NzQ4MzY0NyA6IDEwKSA6IDIwKTsKKyAgICBmb28oYiA/IChiID8gMjE0NzQ4MzY0
NyA6IDEwKSA6IChiID8gMjAgOiAoYiA/IDQ1IDogNTUpKSk7CisKKyAgICBiYXIoYiA/IChiID8g
MjE0NzQ4MzY0NyA6IDEwKSA6IChiID8gMjAgOiAoYiA/IDQ1IDogNTUpKSk7CisgICAgYmF6KGIg
PyAoYiA/IDIxNDc0ODM2NDcgOiAxMCkgOiAoYiA/IDIwIDogKGIgPyA0NSA6IDU1KSkpOworCisg
ICAgYmF6KGIgPyAoYiA/IDIxNDc0ODM2NDcgOiAxMC41KSA6IChiID8gMjAgOiAoYiA/IDQ1IDog
NTUpKSk7CisKKyAgICAvL2ludCB4MiA9IGIgPyAxMC4wIDogMjA7CisgICAgLy9pbnQgeDIgPSAx
MC4wOworCisgICAgLy9mbG9hdCB5ID0gYiA/IDEwLjUgOiAyMDsKKyAgICAvL2Zsb2F0IHkyID0g
YiA/IChiID8gMjAgOiAxMC41KSA6IDIwOworICAgIC8vdGhyZWFkIGludCogcHRyID0gYiA/IG51
bGwgOiBudWxsOworICAgIAorICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgOworYXN5bmMgZnVuY3Rp
b24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
Y29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1i
dWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5k
R3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRd
fTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDE7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3Np
emUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFO
U0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVy
RGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIu
bWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQz
MkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAw
OworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVz
dWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNp
emV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6
IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0
OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNv
bnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5j
b2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZm
ZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVy
LmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Cisg
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVz
dWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAg
ICBsZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZm
ZXIpOworICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKKyAgICAgICAgdGVzdFBh
c3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1bHRz
QnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRCYXNp
Y0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50aGVu
KGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
IH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNU
ZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373457</attachid>
            <date>2019-07-04 01:32:39 -0700</date>
            <delta_ts>2019-07-04 01:37:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>39330</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE5LTA3LTA0ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gJ3VpbnQgeSA9IHgg
PyAxIDogMicgZmFpbHMgdG8gdHlwZWNoZWNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkyODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGUgbWFpbiBpc3N1ZSB3aXRoIHRoZSBwcmlvciBjb2RlIGlz
IHRoYXQgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Ugd2FzCisgICAgICAgIG9ubHkgb25lIGxldmVs
IGRlZXAuIFNvIGlmIHdlIGV2ZXIgbWVyZ2VkIHR3byBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZXMs
CisgICAgICAgIHdlIHdvdWxkIGp1c3QgY29tbWl0IHRoZW0gdG8gdGhlaXIgZGVmYXVsdCB2YWx1
ZXMuIFNvIHdoZW4gd2UgaGFkIGNvZGUKKyAgICAgICAgbGlrZSAiKGIgPyAxIDogMikiLCB0aGUg
dGVybmFyeSBleHByZXNzaW9ucyB0eXBlIHdvdWxkIGdldCBjb21taXR0ZWQgCisgICAgICAgIHRv
IGludCBiZWZvcmUgd2UgaGFkIGEgY2hhbmNlIHRvIGFsbG93IGl0IHRvIG1hdGNoIGFub3RoZXIg
dHlwZS4gU28gdGhpcworICAgICAgICBwcm9ncmFtIHdvdWxkIGluY29ycmVjdGx5IGZhaWwgdG8g
dHlwZSBjaGVjazoKKyAgICAgICAgImZsb2F0IGYgPSBiID8gMSA6IDI7IgorICAgICAgICAKKyAg
ICAgICAgVGhlIHNvbHV0aW9uIGlzIHRvIGRlZmVyIGNvbW1pdHRpbmcgdG8gYSBjb25jcmV0ZSB0
eXBlIHVudGlsIGFzIGxhdGUgYXMKKyAgICAgICAgcG9zc2libGUuIEFzIGxhdGUgYXMgcG9zc2li
bGUgdXN1YWxseSBtZWFucyBvbmNlIHdlIGFyZSBhc2tlZCB0byBtYXRjaCBhCisgICAgICAgIHNw
ZWNpZmljIHR5cGUuIEZvciBleGFtcGxlLCBpbiB2YXJpYWJsZSBhc3NpZ25tZW50LgorICAgICAg
ICAKKyAgICAgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Ugbm93IGZvcm1zIGEgdHJlZSBkYXRh
IHN0cnVjdHVyZSwgd2hlcmUgd2UgdXNlIHRoZSB0cmVlCisgICAgICAgIHRvIGJ1aWxkIHVwIHRo
ZXNlIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlcy4gT25jZSBhc2tlZCB0byBjb21taXQgYSBSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZQorICAgICAgICB0byBhIHNwZWNpZmljIHR5cGUsIHdlIGNvbW1p
dCB0aGUgZW50aXJlIHRyZWUgaW4gb25lIGdvIChvciBmYWlsIHRvIGRvIHNvKS4KKyAgICAgICAg
CisgICAgICAgIEhvd2V2ZXIsIHNvbWUgc3RhdGVtZW50cyBpbiB0aGUgbGFuZ3VhZ2Ugd2lsbCBu
ZXZlciBjYXVzZSB1cyB0byBjb21taXQKKyAgICAgICAgdG8gYSBzcGVjaWZpYyB0eXBlLiBGb3Ig
ZXhhbXBsZToKKyAgICAgICAgIihiID8gMjAuMCA6IDMwKTsiCisgICAgICAgIAorICAgICAgICBJ
biBzdWNoIGEgc2NlbmFyaW8sIHRoZSBDaGVja2VyIG11c3QgY2hvb3NlIGFuIGFwcHJvcHJpYXRl
IHR5cGUgZm9yCisgICAgICAgIHRoZSBlbnRpcmUgdHJlZS4gSWYgYW55dGhpbmcgaW4gdGhlIHRy
ZWUgaXMgY29tcG9zZWQgb2YgbnVsbCwgd2UgZmFpbAorICAgICAgICB0byB0eXBlIGNoZWNrLiBP
dGhlcndpc2UsIHRoZSBwcmVjZWRlbmNlIHdlIGNob29zZSBpczoKKyAgICAgICAgMS4gZmxvYXQK
KyAgICAgICAgMi4gaW50CisgICAgICAgIDMuIHVpbnQKKyAgICAgICAgCisgICAgICAgIFdoZW4g
d2UgYXNzaWduVHlwZXMoKSBhdCB0aGUgZW5kIG9mIHR5cGUgY2hlY2tpbmcsIHdlIHdpbGwgZW5j
b3VudGVyIHNvbWUKKyAgICAgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UgdHJlZXMgd2l0aCBu
byBjb21taXR0ZWQgdHlwZS4gV2hlbiB3ZSBlbmNvdW50ZXIKKyAgICAgICAgYW55IHN1Y2ggdHJl
ZSwgd2UgYWx3YXlzIHN0YXJ0IHdpdGggdGhlIHJvb3Qgb2YgdGhlIHRyZWUgd2hlbiBjaG9vc2lu
ZyB0aGUKKyAgICAgICAgdHlwZSBnaXZlbiB0aGUgYWJvdmUgcHJlY2VkZW5jZSBydWxlcy4gVGhp
cyBpcyBiZWNhdXNlIHRoZSByb290IG9mIHRoZQorICAgICAgICB0cmVlIGlzIHRoZSBvbmx5IG5v
ZGUgaW4gdGhlIHRyZWUgdGhhdCBpcyBhYmxlIHRvIGFuYWx5emUgZWFjaCBsZWFmIGFuZAorICAg
ICAgICBldmFsdWF0ZSB0aGUgYWJvdmUgcHJlY2VkZW5jZS4gSWYgd2UgZGlkbid0IGRvIHRoaXMs
IHdlJ2QgYmUgYmVob2xkZW4gdG8KKyAgICAgICAgY29tbWl0dGluZyB0byB0eXBlcyBvZiB2YXJp
b3VzIHN1YnRyZWVzIGluIHRoZSBvcmRlciB3ZSBoYXBwZW4gdG8gd2FsaworICAgICAgICBhIHBv
aW50ZXIgYmFzZWQgaGFzaCB0YWJsZSAod2hpY2ggaXMgZXNzZW50aWFsbHkgcmFuZG9tIGZvciBl
YWNoIHByb2dyYW0KKyAgICAgICAgaW52b2NhdGlvbikuIFVuZm9ydHVuYXRlbHksIGEgbG90IG9m
IHRoZSBjb21wbGV4aXR5IGluIHRoaXMgcGF0Y2ggY29tZXMKKyAgICAgICAgZnJvbSBzdXBwb3J0
aW5nIHRoaXMgYmVoYXZpb3IgaW4gYSB3ZWxsIGRlZmluZWQgbWFubmVyLCB3aGljaCB1bHRpbWF0
ZWx5CisgICAgICAgIG9ubHkgc2VydmVzIHRoZSBwdXJwb3NlIG9mIHN1cHBvcnRpbmcgYW5vbnlt
b3VzIHRlcm5hcnkgZXhwcmVzc2lvbnMgb3ZlcgorICAgICAgICBhIHRyZWUgb2YgbGl0ZXJhbHMu
CisKKyAgICAgICAgVGVzdHM6IHdlYmdwdS93aGxzbC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy5o
dG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wtcmVzb2x2YWJsZS10eXBlcy1zaG91bGQt
ZmFpbC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVCeUluc3RhbnRpYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1hdGNoQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpjb21taXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hl
Y2tlcjo6YXNzaWduVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6YXNzaWduVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OmdldFVubmFtZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjppc0Jv
b2xUeXBlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluZmVyVHlwZXNGb3JDYWxsSW1wbCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VDb25zdGFudEV4cHJlc3Npb24pOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHA6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpjb252ZXJzaW9uQ29zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U6OlJlc29sdmFibGVUeXBlUmVmZXJlbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZTo6Zm9yRWFjaFR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJlc29sdmFibGVUeXBlUmVmZXJlbmNlOjpzZXRQ
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJlc29sdmFibGVUeXBlUmVmZXJlbmNl
Ojpyb290KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZTo6cmVzb2x2YWJsZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJl
c29sdmluZ1R5cGU6Om9wZXJhdG9yPSk6IERlbGV0ZWQuCisKIDIwMTktMDctMDMgIEVyaWMgQ2Fy
bHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01TRV0gQWRkIG1vcmUg
ZGVidWcgYW5kIGVycm9yIGxvZ2dpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ3MDg2KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3NywxMSBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhCiAgICAgICAgIGJvb2wgc2Vjb25kQXJndW1lbnRJc1VpbnQgPSB0
eXBlc1sxXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKICAgICAgICAgICAgIHJldHVybiBt
YXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOwogICAgICAgICB9LCBb
Jl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUoaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAg
ICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAgICAgcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UtPmZvckVhY2hUeXBlKFsmXSAoQVNUOjpSZXNvbHZhYmxlVHlwZSYgdHlwZSkgeworICAg
ICAgICAgICAgICAgIG9rICY9IHR5cGUuY2FuUmVzb2x2ZShpbnRyaW5zaWNzLnVpbnRUeXBlKCkp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gb2s7CiAgICAgICAgIH0pKTsK
ICAgICAgICAgaWYgKGZpcnN0QXJndW1lbnRBcnJheVJlZiAmJiBzZWNvbmRBcmd1bWVudElzVWlu
dCkKICAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKG9y
aWdpbiwgKmZpcnN0QXJndW1lbnRBcnJheVJlZiwgaW50cmluc2ljcyk7CkBAIC0xOTYsNyArMjAw
LDExIEBAIHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGEKICAgICAgICAg
ICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQWNjZXB0YWJpbGl0eSB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8
QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSkgPyBBY2NlcHRhYmlsaXR5OjpZZXMgOiBB
Y2NlcHRhYmlsaXR5OjpObzsKICAgICAgICAgICAgIH0sIFtdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBBY2NlcHRhYmlsaXR5IHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKSA/IEFjY2VwdGFiaWxpdHk6Ok1heWJl
IDogQWNjZXB0YWJpbGl0eTo6Tm87CisgICAgICAgICAgICAgICAgYm9vbCBhbGxBcmVOdWxsID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+Zm9yRWFjaFR5
cGUoWyZdIChBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7CisgICAgICAgICAgICAgICAgICAg
IGFsbEFyZU51bGwgJj0gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHR5cGUpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiBhbGxBcmVOdWxsID8gQWNjZXB0YWJp
bGl0eTo6TWF5YmUgOiBBY2NlcHRhYmlsaXR5OjpObzsKICAgICAgICAgICAgIH0pKTsKICAgICAg
ICAgfTsKICAgICAgICAgYXV0byBsZWZ0QWNjZXB0YWJpbGl0eSA9IGFjY2VwdGFiaWxpdHkodHlw
ZXNbMF0uZ2V0KCkpOwpAQCAtNDY5LDggKzQ3Nyw5IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8
UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xlZnRW
YWx1ZSA9IGZhbHNlKTsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+
IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsK
ICAgICBib29sIHJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoQVNUOjpFeHByZXNzaW9uJik7Ci0g
ICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKLSAgICB2b2lkIGFzc2lnblR5cGUoQVNU
OjpFeHByZXNzaW9uJiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBBU1Q6OlR5
cGVBbm5vdGF0aW9uKTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYsIEFTVDo6VHlwZUFubm90YXRpb24gPSBBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZlB0
cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiwgQVNUOjpUeXBlQW5ub3RhdGlvbiA9IEFTVDo6
UmlnaHRWYWx1ZSgpKTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVz
b2x2aW5nVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKTsKICAg
ICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5cGUmLCBBU1Q6
OlR5cGVBbm5vdGF0aW9uKTsKIAogICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mKSBvdmVycmlkZTsKQEAgLTUzNCw2ICs1NDMsOTEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChQ
cm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbS5uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpW2ldKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIFR5
cGU+CitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFu
ZENvbW1pdChjb25zdCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZSwgVHlwZSYgbWF0Y2hpbmdUeXBlKQoreworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPFR5cGUsIEFTVDo6TmFtZWRUeXBlPjo6dmFsdWUgfHwgc3RkOjppc19zYW1l
PFR5cGUsIEFTVDo6VW5uYW1lZFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIE9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gcmVzdWx0OworICAgIGJvb2wgb2sgPSB0cnVlOworICAg
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5mb3JFYWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2YWJs
ZVR5cGUmIHR5cGUpIHsKKyAgICAgICAgcmVzdWx0ID0gbWF0Y2hBbmRDb21taXQobWF0Y2hpbmdU
eXBlLCB0eXBlKTsKKyAgICAgICAgb2sgJj0gISFyZXN1bHQ7CisgICAgfSk7CisgICAgcmV0dXJu
IG9rID8gV1RGTW92ZShyZXN1bHQpIDogV1RGOjpudWxsb3B0OworfQorCitzdGF0aWMgT3B0aW9u
YWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBjb21taXRJZk5lZWRlZChjb25zdCBSZWZQ
dHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkKK3sK
KyAgICBhdXRvJiByb290ID0gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJvb3QoKTsKKworICAg
IEFTVDo6UmVzb2x2YWJsZVR5cGUqIHByZWZlcnJlZExpdGVyYWxUeXBlID0gbnVsbHB0cjsKKyAg
ICBBU1Q6OlVubmFtZWRUeXBlKiByZXNvbHZlZFR5cGUgPSBudWxscHRyOworCisgICAgYm9vbCBm
aXJzdCA9IHRydWU7CisgICAgYm9vbCBzYXdOdWxsVHlwZSA9IGZhbHNlOworICAgIHJvb3QuZm9y
RWFjaFR5cGUoWyZdIChBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7CisgICAgICAgIGlmIChy
ZXNvbHZlZFR5cGUpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlLm1heWJlUmVzb2x2ZWRUeXBl
KCkpOworICAgICAgICAgICAgQVNTRVJUKG1hdGNoZXMoKnJlc29sdmVkVHlwZSwgKnR5cGUubWF5
YmVSZXNvbHZlZFR5cGUoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHR5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkgeworICAgICAgICAgICAgQVNTRVJU
KGZpcnN0KTsKKyAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IHR5cGUubWF5YmVSZXNvbHZlZFR5
cGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0ID0g
ZmFsc2U7CisKKyAgICAgICAgc2F3TnVsbFR5cGUgfD0gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+
KHR5cGUpOworCisgICAgICAgIC8vIFRoZSB0eXBlIHByZWZlcmVuY2UgaXMgb3JkZXJlZCBsaWtl
IHNvOgorICAgICAgICAvLyB7ZmxvYXR9ID0+IGZsb2F0CisgICAgICAgIC8vIHtpbnR9ID0+IGlu
dAorICAgICAgICAvLyB7dWludH0gPT4gdWludAorICAgICAgICAvLyB7aW50LCB1aW50fSA9PiBp
bnQKKyAgICAgICAgLy8ge2Zsb2F0LCB1aW50fSA9PiBmbG9hdAorICAgICAgICAvLyB7ZmxvYXQs
IGludH0gPT4gZmxvYXQKKyAgICAgICAgLy8ge2Zsb2F0LCBpbnQsIHVpbnR9ID0+IGZsb2F0Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiB3ZSBk
b24ndCBoYXZlIG90aGVyIHR5cGUgZmVlZGJhY2suIEN1cnJlbnRseSwgdGhpcworICAgICAgICAv
LyBvbmx5IGhhcHBlbnMgZm9yIGFub255bW91cyB0ZXJuYXJ5IGV4cHJlc3Npb25zLCBsaWtlOgor
ICAgICAgICAvLyAiKGIgPyAxMC4wIDogMjApOyIKKworICAgICAgICBpZiAoIXByZWZlcnJlZExp
dGVyYWxUeXBlKSB7CisgICAgICAgICAgICBwcmVmZXJyZWRMaXRlcmFsVHlwZSA9ICZ0eXBlOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXM8
QVNUOjpGbG9hdExpdGVyYWxUeXBlPih0eXBlKSkgeworICAgICAgICAgICAgcHJlZmVycmVkTGl0
ZXJhbFR5cGUgPSAmdHlwZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPigqcHJlZmVycmVkTGl0
ZXJhbFR5cGUpICYmIGlzPEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPih0eXBlKSkKKyAgICAgICAg
ICAgIHByZWZlcnJlZExpdGVyYWxUeXBlID0gJnR5cGU7CisgICAgfSk7CisKKyAgICBpZiAocmVz
b2x2ZWRUeXBlKQorICAgICAgICByZXR1cm4gcmVzb2x2ZWRUeXBlLT5jbG9uZSgpOworCisgICAg
aWYgKHNhd051bGxUeXBlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgQVNU
OjpVbm5hbWVkVHlwZSogcHJlZmVycmVkVHlwZTsKKyAgICBpZiAoaXM8QVNUOjpGbG9hdExpdGVy
YWxUeXBlPigqcHJlZmVycmVkTGl0ZXJhbFR5cGUpKQorICAgICAgICBwcmVmZXJyZWRUeXBlID0g
JmRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4oKnByZWZlcnJlZExpdGVyYWxUeXBlKS5w
cmVmZXJyZWRUeXBlKCk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZT4oKnByZWZlcnJlZExpdGVyYWxUeXBlKSkKKyAgICAgICAgcHJlZmVycmVkVHlwZSA9
ICZkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPigqcHJlZmVycmVkTGl0
ZXJhbFR5cGUpLnByZWZlcnJlZFR5cGUoKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkludGVnZXJM
aXRlcmFsVHlwZT4oKnByZWZlcnJlZExpdGVyYWxUeXBlKSkKKyAgICAgICAgcHJlZmVycmVkVHlw
ZSA9ICZkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4oKnByZWZlcnJlZExpdGVyYWxU
eXBlKS5wcmVmZXJyZWRUeXBlKCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KCZyb290LCAqcHJlZmVy
cmVkVHlwZSk7Cit9CisKIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMoKQogewogICAgIGZvciAo
YXV0byYga2V5VmFsdWVQYWlyIDogbV90eXBlTWFwKSB7CkBAIC01NDEsMTEgKzYzNSwxMCBAQCBi
b29sIENoZWNrZXI6OmFzc2lnblR5cGVzKCkKICAgICAgICAgICAgIGtleVZhbHVlUGFpci5rZXkt
PnNldFR5cGUodW5uYW1lZFR5cGUtPmNsb25lKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBpZiAoIXJlc29sdmFibGVU
eXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLm1heWJlUmVzb2x2ZWRUeXBlKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGNvbW1pdChyZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5z
ZXRUeXBlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVk
VHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgYXV0byByZXNvbHZlZFR5cGUgPSBjb21taXRJ
Zk5lZWRlZChyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSk7CisgICAgICAgICAgICBpZiAoIXJlc29s
dmVkVHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBrZXlW
YWx1ZVBhaXIua2V5LT5zZXRUeXBlKFdURk1vdmUocmVzb2x2ZWRUeXBlLnZhbHVlKCkpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmICghc3VjY2Vz
cykKQEAgLTU5NCwyMSArNjg3LDI4IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpGdW5jdGlv
bkRlZmluaXQKICAgICBWaXNpdG9yOjp2aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwogfQogCi1z
dGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1p
dChSZXNvbHZpbmdUeXBlJiBsZWZ0LCBSZXNvbHZpbmdUeXBlJiByaWdodCkKK3N0YXRpYyBPcHRp
b25hbDxSZXNvbHZpbmdUeXBlPiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiBsZWZ0LCBS
ZXNvbHZpbmdUeXBlJiByaWdodCkKIHsKLSAgICByZXR1cm4gbGVmdC52aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICByZXR1cm4gcmlnaHQudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdo
dCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgcmV0dXJu
IGxlZnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiBsZWZ0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAgICAgIHJldHVybiBy
aWdodC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CiAgICAgICAgICAgICBpZiAo
bWF0Y2hlcyhsZWZ0LCByaWdodCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQtPmNsb25l
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc29sdmluZ1R5cGUobGVmdC0+Y2xvbmUoKSk7
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9LCBbJl0oUmVmUHRy
PFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFJlc29sdmluZ1R5
cGU+IHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IG1hdGNoQW5kQ29tbWl0KHJpZ2h0
LCBsZWZ0LmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzb2x2aW5nVHlwZShXVEZN
b3ZlKHJlc3VsdC52YWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+
IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICAgICAgcmV0
dXJuIG1hdGNoQW5kQ29tbWl0KGxlZnQsIHJpZ2h0LT5yZXNvbHZhYmxlVHlwZSgpKTsKICAgICAg
ICAgfSkpOwotICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0
KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgcmV0
dXJuIHJpZ2h0LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4g
ewotICAgICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHJpZ2h0LCBsZWZ0LT5yZXNvbHZh
YmxlVHlwZSgpKTsKLSAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAg
ICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLCBy
aWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIGxlZnQpIC0+IE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHsKKyAgICAgICAg
cmV0dXJuIHJpZ2h0LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHsKKyAgICAgICAg
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG1hdGNoQW5kQ29tbWl0KGxlZnQsIHJpZ2h0LmdldCgpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gUmVzb2x2aW5nVHlwZShXVEZNb3ZlKHJlc3VsdC52YWx1
ZSgpKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9LCBbJl0o
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFJlc29s
dmluZ1R5cGU+IHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IG5ldyBSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZShsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBsZWZ0LT5zZXRQYXJlbnQoKnJl
c3VsdCk7CisgICAgICAgICAgICByaWdodC0+c2V0UGFyZW50KCpyZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIFJlc29sdmluZ1R5cGUoYWRvcHRSZWYocmVzdWx0KSk7CiAgICAgICAgIH0pKTsK
ICAgICB9KSk7CiB9CkBAIC02MTksOCArNzE5LDggQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeQogICAgICAgICBpZiAobWF0Y2hlcyh1bm5hbWVkVHlwZSwgcmVzb2x2
aW5nVHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUuY2xvbmUoKTsKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYgcmVzb2x2aW5nVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+PiB7Ci0gICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCh1bm5hbWVkVHlwZSwg
cmVzb2x2aW5nVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgcmV0dXJuIG1hdGNoQW5k
Q29tbWl0KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLCB1bm5hbWVkVHlwZSk7CiAgICAgfSkpOwog
fQogCkBAIC02MzAsOCArNzMwLDggQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeQogICAgICAgICBpZiAobWF0Y2hlcyhyZXNvbHZpbmdUeXBlLCBuYW1lZFR5cGUpKQog
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUtPmNsb25lKCk7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4gewotICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRUeXBlLCByZXNvbHZpbmdU
eXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQocmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UsIG5hbWVkVHlwZSk7CiAgICAgfSkpOwogfQogCkBAIC02NDAs
OSArNzQwLDcgQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQogICAg
IHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPj4gewogICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7
CiAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVU
eXBlUmVmZXJlbmNlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsK
LSAgICAgICAgaWYgKCFyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5t
YXliZVJlc29sdmVkVHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuIGNvbW1pdChyZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSk7Ci0gICAgICAgIHJldHVybiByZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgp
OworICAgICAgICByZXR1cm4gY29tbWl0SWZOZWVkZWQocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Up
OwogICAgIH0pKTsKIH0KIApAQCAtODAwLDcgKzg5OCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpWYXJpYWJsZURlY2xhcmEKICAgICB9CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlw
ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNU
OjpSaWdodFZhbHVlKCkpCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9u
JiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwg
QVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbikKIHsKICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8UmVzb2x2aW5n
VHlwZT4oV1RGTW92ZSh1bm5hbWVkVHlwZSkpKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtODA4LDcgKzkwNiw3IEBAIHZvaWQgQ2hlY2tl
cjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24KICAgICBBU1NFUlRfVU5VU0VEKHR5cGVBbm5v
dGF0aW9uQWRkUmVzdWx0LCB0eXBlQW5ub3RhdGlvbkFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0K
IAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwg
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkp
Cit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBS
ZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Us
IEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24pCiB7CiAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPFJlc29sdmlu
Z1R5cGU+KFdURk1vdmUocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpKSk7CiAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKQEAgLTgxNiw2ICs5MTQsMTUg
QEAgdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbgogICAgIEFTU0VSVF9V
TlVTRUQodHlwZUFubm90YXRpb25BZGRSZXN1bHQsIHR5cGVBbm5vdGF0aW9uQWRkUmVzdWx0Lmlz
TmV3RW50cnkpOwogfQogCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9u
JiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlIHJlc29sdmluZ1R5cGUsIEFTVDo6VHlwZUFubm90
YXRpb24gdHlwZUFubm90YXRpb24pCit7CisgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSB7
CisgICAgICAgIGFzc2lnblR5cGUoZXhwcmVzc2lvbiwgV1RGTW92ZShsZWZ0KSwgdHlwZUFubm90
YXRpb24pOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0
KSB7CisgICAgICAgIGFzc2lnblR5cGUoZXhwcmVzc2lvbiwgV1RGTW92ZShsZWZ0KSwgdHlwZUFu
bm90YXRpb24pOworICAgIH0pKTsKK30KKwogdm9pZCBDaGVja2VyOjpmb3J3YXJkVHlwZShBU1Q6
OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFT
VDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsK
ICAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7CkBAIC04NDQsNyArOTUxLDcgQEAgdm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZQogICAgIGlmICghcmlnaHRJbmZvKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJlc3VsdFR5cGUgPSBtYXRjaEFuZENvbW1pdChsZWZ0
SW5mby0+cmVzb2x2aW5nVHlwZSwgcmlnaHRJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBhdXRv
IHJlc3VsdFR5cGUgPSBtYXRjaEFuZENvbW1pdChyaWdodEluZm8tPnJlc29sdmluZ1R5cGUsICps
ZWZ0SW5mby0+cmVzb2x2aW5nVHlwZS5nZXRVbm5hbWVkVHlwZSgpKTsKICAgICBpZiAoIXJlc3Vs
dFR5cGUpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODY1LDcg
Kzk3Miw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGUKICAgICBp
ZiAoIW5ld1ZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hlZFR5cGUgPSBtYXRjaEFuZENvbW1pdChs
ZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUp
KQorICAgIGlmIChPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoZWRU
eXBlID0gbWF0Y2hBbmRDb21taXQobmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCAqbGVmdFZh
bHVlSW5mby0+cmVzb2x2aW5nVHlwZS5nZXRVbm5hbWVkVHlwZSgpKSkKICAgICAgICAgcmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpLnNldFR5cGUoV1RGTW92ZShtYXRjaGVkVHlw
ZS52YWx1ZSgpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHNldEVycm9yKCk7CkBAIC04ODMsOSAr
OTkwLDI2IEBAIHN0YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBnZXRVbm5hbWVkVHlwZSgKIHsKICAg
ICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewogICAgICAg
ICByZXR1cm4gJnR5cGU7Ci0gICAgfSwgW10oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgIH0sIFtdKFJlZlB0cjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBBU1Q6OlVubmFt
ZWRUeXBlKiB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgdHlwZSBpc24ndCBjb21taXR0ZWQs
IHNob3VsZCB3ZSBqdXN0IGNvbW1pdCgpIGl0IG5vdz8KLSAgICAgICAgcmV0dXJuIHR5cGUtPnJl
c29sdmFibGVUeXBlKCkubWF5YmVSZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgQVNUOjpVbm5hbWVk
VHlwZSogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAg
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5mb3JFYWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2YWJs
ZVR5cGUmIHR5cGUpIHsKKyAgICAgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoIXR5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0eXBlLm1heWJlUmVzb2x2ZWRUeXBl
KCkpIHsKKyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpOworCisgICAgICAgICAgICBB
U1NFUlQobWF0Y2hlcygqcmVzdWx0LCAqdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKSk7CisgICAg
ICAgIH0pOworICAgICAgICByZXR1cm4gb2sgPyByZXN1bHQgOiBudWxscHRyOwogICAgIH0pKTsK
IH0KIApAQCAtMTIwMSw4ICsxMzI1LDggQEAgYm9vbCBDaGVja2VyOjppc0Jvb2xUeXBlKFJlc29s
dmluZ1R5cGUmIAogewogICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4gYm9vbCB7CiAg
ICAgICAgIHJldHVybiBtYXRjaGVzKGxlZnQsIG1faW50cmluc2ljcy5ib29sVHlwZSgpKTsKLSAg
ICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkgLT4gYm9vbCB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChtX2ludHJp
bnNpY3MuYm9vbFR5cGUoKSwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgIH0sIFsmXShS
ZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkg
LT4gYm9vbCB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1p
dChyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgc3RhdGljX2Nhc3Q8QVNUOjpOYW1lZFR5cGUmPiht
X2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpKTsKICAgICB9KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVz
LmNwcAkocmV2aXNpb24gMjQ3MDg2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCwx
MiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaW5mZXJUeXBlc0ZvckNhbGxJbXBsCiAgICAgICAgIGF1
dG8gc3VjY2VzcyA9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7
CiAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJz
KClbaV0tPnR5cGUoKSwgdW5uYW1lZFR5cGUpOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgewot
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlw
ZSgpLmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKS0+
dW5pZnlOb2RlKCkpOworICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAgICBh
dXRvJiB1bmlmeU5vZGUgPSBwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgp
LT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5mb3JF
YWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2YWJsZVR5cGUmIHR5cGUpIHsKKyAgICAgICAgICAgICAg
ICBvayAmPSB0eXBlLmNhblJlc29sdmUodW5pZnlOb2RlKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgcmV0dXJuIG9rOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmICghc3VjY2VzcykK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAJKHJldmlzaW9uIDI0NzA4NikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY0LDggKzM2NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUNvbnN0
YW50RXhwcmVzc2lvbigpIC0KICAgICAgICAgYXV0byB2YWx1ZSA9IGZsb2F0TGl0ZXJhbFRvRmxv
YXQodHlwZS0+c3RyaW5nVmlldyk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiB7
eyBBU1Q6OkZsb2F0TGl0ZXJhbChXVEZNb3ZlKCp0eXBlKSwgKnZhbHVlKSB9fTsKLSAgICB9Cisg
ICAgICAgIHJldHVybiB7eyBBU1Q6OkZsb2F0TGl0ZXJhbChXVEZNb3ZlKCp0eXBlKSwgKnZhbHVl
KSB9fTsgfQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpOdWxsOgogICAgICAgICByZXR1
cm4geyBBU1Q6Ok51bGxMaXRlcmFsKFdURk1vdmUoKnR5cGUpKSB9OwogICAgIGNhc2UgTGV4ZXI6
OlRva2VuOjpUeXBlOjpUcnVlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQcmVwYXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCShyZXZpc2lvbiAyNDcwODYpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBkdW1wQVNUQmVmb3JlRWFjaFBhc3MgPSBmYWxzZTsKIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBkdW1wQVNUQWZ0ZXJQYXJzaW5nID0gZmFsc2U7Ci1zdGF0aWMgY29uc3RleHBy
IGJvb2wgZHVtcEFTVEF0RW5kID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFT
VEF0RW5kID0gdHJ1ZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBhbHdheXNEdW1wUGFzc0ZhaWx1
cmVzID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcFBhc3NGYWlsdXJlID0gZHVt
cEFTVEJlZm9yZUVhY2hQYXNzIHx8IGR1bXBBU1RBZnRlclBhcnNpbmcgfHwgZHVtcEFTVEF0RW5k
IHx8IGFsd2F5c0R1bXBQYXNzRmFpbHVyZXM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3Zlcmxv
YWRJbXBsLmNwcAkocmV2aXNpb24gMjQ3MDg2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KEFTVDo6RnVu
YwogICAgICAgICBjb252ZXJzaW9uQ29zdCArPSBhcmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IHVu
c2lnbmVkIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IHVuc2ln
bmVkIHsKLSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2
YWJsZVR5cGUoKS5jb252ZXJzaW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS0+dHlw
ZSgpKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvc3QgPSAwOworICAgICAgICAgICAgcmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UtPmZvckVhY2hUeXBlKFsmXSAoQVNUOjpSZXNvbHZhYmxlVHlwZSYg
dHlwZSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgd2FudCBtYXgg
aGVyZT8gV2Ugc2hvdWxkIHNwZWNpZnkgd2hhdCB0byBkby4KKyAgICAgICAgICAgICAgICBjb3N0
ID0gc3RkOjptYXgoY29zdCwgdHlwZS5jb252ZXJzaW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRl
cnMoKVtpXS0+dHlwZSgpKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBj
b3N0OwogICAgICAgICB9KSk7CiAgICAgfQogICAgIC8vIFRoZSByZXR1cm4gdHlwZSBjYW4gbmV2
ZXIgYmUgYSBsaXRlcmFsIHR5cGUsIHNvIGl0cyBjb252ZXJzaW9uIGNvc3QgaXMgYWx3YXlzIDAu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmlu
Z1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlc29sdmluZ1R5cGUuaAkocmV2aXNpb24gMjQ3MDg2KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDE1ICs1OSw1MCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4gbGVmdCwg
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiByaWdodCkKKyAgICAgICAgOiBtX2xlZnQo
V1RGTW92ZShsZWZ0KSkKKyAgICAgICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQorICAgIHsK
KyAgICB9CisKICAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShjb25zdCBSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZSYpID0gZGVsZXRlOwogICAgIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlJiYpID0gZGVsZXRlOwogICAgIFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlJiBvcGVyYXRvcj0oY29uc3QgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0ZTsK
ICAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYgb3BlcmF0b3I9KFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlJiYpID0gZGVsZXRlOwogCi0gICAgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJs
ZVR5cGUoKSB7IHJldHVybiAqbV9yZXNvbHZhYmxlVHlwZTsgfQorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hUeXBlKEZ1bmN0aW9uIGZ1bmN0aW9uKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fcmVzb2x2YWJsZVR5cGUpCisgICAgICAgICAgICBmdW5jdGlv
bigqbV9yZXNvbHZhYmxlVHlwZSk7CisKKyAgICAgICAgaWYgKG1fbGVmdCkgeworICAgICAgICAg
ICAgQVNTRVJUKG1fcmlnaHQpOworICAgICAgICAgICAgbV9sZWZ0LT5mb3JFYWNoVHlwZShmdW5j
dGlvbik7CisgICAgICAgICAgICBtX3JpZ2h0LT5mb3JFYWNoVHlwZShmdW5jdGlvbik7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKCFtX3JpZ2h0KTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFBhcmVudChSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYgcGFyZW50KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgICAgIG1fcGFyZW50ID0gJnBhcmVudDsKKyAg
ICB9CisKKyAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYgcm9vdCgpCisgICAgeworICAgICAg
ICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSogcmVzdWx0ID0gdGhpczsKKyAgICAgICAgd2hpbGUg
KHJlc3VsdC0+bV9wYXJlbnQpCisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPm1fcGFyZW50
OworICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgQVNUOjpS
ZXNvbHZhYmxlVHlwZSogbV9yZXNvbHZhYmxlVHlwZTsKKyAgICBBU1Q6OlJlc29sdmFibGVUeXBl
KiBtX3Jlc29sdmFibGVUeXBlIHsgbnVsbHB0ciB9OworICAgIFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlKiBtX3BhcmVudCB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+IG1fbGVmdDsKKyAgICBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+IG1fcmln
aHQ7CiB9OwogCiAvLyBUaGlzIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhIFZhcmlhbnQuCkBA
IC05MSwxNyArMTI2LDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBSZXNvbHZpbmdUeXBlKGNv
bnN0IFJlc29sdmluZ1R5cGUmKSA9IGRlbGV0ZTsKLSAgICBSZXNvbHZpbmdUeXBlKFJlc29sdmlu
Z1R5cGUmJiBvdGhlcikKLSAgICAgICAgOiBtX2lubmVyKFdURk1vdmUob3RoZXIubV9pbm5lcikp
Ci0gICAgewotICAgIH0KKyAgICBSZXNvbHZpbmdUeXBlKFJlc29sdmluZ1R5cGUmJikgPSBkZWZh
dWx0OwogCiAgICAgUmVzb2x2aW5nVHlwZSYgb3BlcmF0b3I9KGNvbnN0IFJlc29sdmluZ1R5cGUm
KSA9IGRlbGV0ZTsKLSAgICBSZXNvbHZpbmdUeXBlJiBvcGVyYXRvcj0oUmVzb2x2aW5nVHlwZSYm
IG90aGVyKQotICAgIHsKLSAgICAgICAgbV9pbm5lciA9IFdURk1vdmUob3RoZXIubV9pbm5lcik7
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9CisgICAgUmVzb2x2aW5nVHlwZSYgb3BlcmF0
b3I9KFJlc29sdmluZ1R5cGUmJiBvdGhlcikgPSBkZWZhdWx0OwogCiAgICAgQVNUOjpVbm5hbWVk
VHlwZSogZ2V0VW5uYW1lZFR5cGUoKQogICAgIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzA4NikK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE5LTA3LTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFtXSExTTF0gJ3VpbnQgeSA9IHggPyAxIDogMicgZmFpbHMgdG8gdHlwZWNoZWNrCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkyODkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmdwdS93aGxzbC1u
ZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wtcmVzb2x2YWJsZS10eXBlcy1zaG91bGQtZmFpbC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1yZXNvbHZhYmxlLXR5cGVzLXNob3VsZC1m
YWlsLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA3LTAyICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3Jp
LkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIGltcG9ydGVkL2JsaW5rL2FuaW1hdGlvbnMvZGlz
cGxheS1pbmxpbmUtc3R5bGUtYWRqdXN0Lmh0bWwgaXNuJ3QgYSB2YWxpZCByZWYgdGVzdApJbmRl
eDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1yZXNvbHZhYmxlLXR5cGVzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLXJl
c29sdmFibGUtdHlwZXMtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy5odG1sCShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZvaWQgZG9V
aW50KHVpbnQgeCkKK3sKK30KKwordm9pZCBkb0ludChpbnQgeCkKK3sKK30KKwordm9pZCBkb0Zs
b2F0KGZsb2F0IHgpCit7Cit9CisKK3ZvaWQgamF6KGZsb2F0IHgpCit7Cit9CisKK3ZvaWQgZG9Q
dHIodGhyZWFkIGZsb2F0KiB4KQoreworfQorCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1
dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCks
IGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBib29sIGIgPSB0
cnVlOworCisgICAgKGIgPyAxMC4wIDogMjApOworICAgIChiID8gMjAgOiAxMC4wKTsKKyAgICAo
YiA/IChiID8gMTAgOiAoYiA/IDIwIDogMzApKSA6IChiID8gMTAgOiAoYiA/IDQwIDogMjApKSk7
CisgICAgKGIgPyAoYiA/IDEwIDogKGIgPyAyMC41IDogMzApKSA6IChiID8gMTAgOiAoYiA/IDQw
IDogMjApKSk7CisgICAgKGIgPyAoYiA/IDEwIDogKGIgPyAyMC41IDogMzApKSA6IChiID8gMTAu
NSA6IChiID8gNDAuNSA6IDIwKSkpOworCisgICAgdWludCB4ID0gYiA/IDEwIDogMjA7CisgICAg
dWludCB4MiA9IGIgPyAyMTQ3NDgzNjQ3IDogMjQ7CisgICAgZG9VaW50KGIgPyAxMCA6IDIwKTsK
KyAgICBkb1VpbnQoYiA/IChiID8gMjE0NzQ4MzY0NyA6IDEwKSA6IDIwKTsKKyAgICBkb1VpbnQo
YiA/IChiID8gMjE0NzQ4MzY0NyA6IDEwKSA6IChiID8gMjAgOiAoYiA/IDQ1IDogNTUpKSk7CisK
KyAgICBpbnQgeDMgPSBiID8gNDUwIDogNDI7CisgICAgZG9JbnQoYiA/IDEwIDogMjApOworICAg
IGRvSW50KGIgPyAoYiA/IDIxNDc0ODM2NDcgOiAxMCkgOiAoYiA/IDIwIDogKGIgPyA0NSA6IDU1
KSkpOworCisgICAgZmxvYXQgeSA9IGIgPyAxMC41IDogMjA7CisgICAgZmxvYXQgeTIgPSBiID8g
KGIgPyAyMCA6IDEwLjUpIDogMjA7CisgICAgZG9GbG9hdChiID8gKGIgPyAyMTQ3NDgzNjQ3IDog
MTApIDogKGIgPyAyMCA6IChiID8gNDUgOiA1NSkpKTsKKyAgICBkb0Zsb2F0KGIgPyAoYiA/IDIx
NDc0ODM2NDcgOiAxMC41KSA6IChiID8gMjAgOiAoYiA/IDQ1IDogNTUpKSk7CisKKyAgICB0aHJl
YWQgaW50KiBwdHIgPSBiID8gbnVsbCA6IG51bGw7CisgICAgZG9QdHIoYiA/IG51bGwgOiBudWxs
KTsKKyAgICBkb1B0cihiID8gKGIgPyBudWxsIDogbnVsbCkgOiBudWxsKTsKKyAgICBkb1B0cihi
ID8gKGIgPyBudWxsIDogbnVsbCkgOiAoYiA/IG51bGwgOiBudWxsKSk7CisKKyAgICBpbnRbNDJd
IGFycmF5OworICAgIGlmIChhcnJheVtiID8gKGIgPyAxMCA6IDIwKSA6IChiID8gNSA6IDYpXSAh
PSAwKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgeworICAgICAgICB0aHJlYWQgaW50KiB4
OworICAgICAgICBpZiAoeCAhPSAoYiA/IChiID8gbnVsbCA6IG51bGwpIDogbnVsbCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgeworICAgICAgICBpbnQgdmFsdWUgPSA0MjsK
KyAgICAgICAgdGhyZWFkIGludCogcHRyID0gJnZhbHVlOworICAgICAgICBpbnQgcmVzdWx0ID0g
KGIgPyAqcHRyIDogMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gNDIpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgOworYXN5bmMgZnVu
Y3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Cisg
ICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFn
ZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlv
dXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVs
aW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUo
Y29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gSW50MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0g
e3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5U
UkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVm
ZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZm
ZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJ
bnQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJV
c2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3Qg
cmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIs
IHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3Vy
Y2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5
b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAg
IGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihi
dWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRl
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNv
ZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3Qg
cmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsK
KyAgICBsZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlC
dWZmZXIpOworICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKKyAgICAgICAgdGVz
dFBhc3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICByZXN1
bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitnZXRC
YXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2aWNlKS50
aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlv
bigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOwor
ICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNo
SlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLXJlc29sdmFibGUtdHlwZXMtc2hvdWxkLWZhaWwtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXNvbHZhYmxlLXR5cGVz
LXNob3VsZC1mYWlsLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtcmVzb2x2YWJsZS10eXBlcy1zaG91bGQtZmFpbC1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93
aGxzbC1yZXNvbHZhYmxlLXR5cGVzLXNob3VsZC1mYWlsLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlc29sdmFibGUtdHlwZXMtc2hvdWxkLWZhaWwuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVzb2x2YWJsZS10eXBl
cy1zaG91bGQtZmFpbC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAyIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKworYXN5bmMgZnVuY3Rp
b24gc2hvdWxkRmFpbChzb3VyY2UsIGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNvdXJjZSwgaXNXSExTTDogdHJ1ZX0p
OworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQ
b2ludDogImNvbXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2Ny
aXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0
b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3Vw
TGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxp
bmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVs
aW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IEludDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAxOworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRv
ciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNh
Z2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
YnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBidWZmZXJJbnQzMkFycmF5ID0gbmV3
IEludDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlckludDMyQXJyYXlbMF0g
PSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJV
c2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3Qg
cmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0
b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIs
IHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3Vy
Y2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5
b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAg
IGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihi
dWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRl
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNv
ZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3Qg
cmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsK
KyAgICBsZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlC
dWZmZXIpOworICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSAhPT0gMCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgcmVzdWx0c0ludDMyQXJyYXlbMF0pCisgICAg
cmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQorCitsZXQgdGVzdHMgPSBbCitgCitbbnVtdGhyZWFk
cygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZm
ZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQp
IHsKKyAgICBib29sIGIgPSB0cnVlOworICAgIChiID8gbnVsbCA6IG51bGwpOworICAgIGJ1ZmZl
clswXSA9IDE7Cit9CitgLAorYAorW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQg
Y29tcHV0ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMg
dGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAg
ICBpbnQgeCA9IDEwLjU7CisgICAgYnVmZmVyWzBdID0gMTsKK30KK2AsCitgCitbbnVtdGhyZWFk
cygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZm
ZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQp
IHsKKyAgICBib29sIGIgPSB0cnVlOworICAgIGludCB4ID0gMTAuMDsKKyAgICBidWZmZXJbMF0g
PSAxOworfQorYCwKK2AKK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1
dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVh
ZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGJvb2wgYiA9IHRydWU7CisgICAgdWlu
dCB4ID0gMTAuMDsKKyAgICBidWZmZXJbMF0gPSAxOworfQorYCwKK2AKK3ZvaWQgZm9vKHVpbnQg
eCkgeyB9CitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVy
KGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNW
X0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBib29sIGIgPSB0cnVlOworICAgIGZvbygxMC4wKTsK
KyAgICBidWZmZXJbMF0gPSAxOworfQorYCwKK2AKK3ZvaWQgZm9vKHVpbnQgeCkgeyB9CitbbnVt
dGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRb
XSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhy
ZWFkSUQpIHsKKyAgICBib29sIGIgPSB0cnVlOworICAgIGZvbyhiID8gMTAgOiAxLjApOworICAg
IGJ1ZmZlclswXSA9IDE7Cit9CitgLAorYAordm9pZCBmb28oaW50IHgpIHsgfQorW251bXRocmVh
ZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgaW50W10gYnVm
ZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElE
KSB7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBmb28oYiA/IDEwIDogMS4wKTsKKyAgICBidWZm
ZXJbMF0gPSAxOworfQorYCwKK2AKK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lk
IGNvbXB1dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQz
IHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGJvb2wgYiA9IHRydWU7Cisg
ICAgdWludCB4ID0gLTEwOworICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgLAorYAordm9pZCBmb28o
dWludCB4KSB7IH0KK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVT
aGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElE
IDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGJvb2wgYiA9IHRydWU7CisgICAgZm9vKGIg
PyAoYiA/IDEwIDogMjApIDogKGIgPyAoYiA/IC0xMCA6IDIwKSA6IDU0KSk7CisgICAgYnVmZmVy
WzBdID0gMTsKK30KK2AsCitgCit2b2lkIGZvbyhpbnQgeCkgeyB9CitbbnVtdGhyZWFkcygxLCAx
LCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiBy
ZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAg
ICBib29sIGIgPSB0cnVlOworICAgIGZvbyhiID8gKGIgPyAxMCA6IDIwKSA6IChiID8gKGIgPyAx
MC4wIDogMjApIDogNTQpKTsKKyAgICBidWZmZXJbMF0gPSAxOworfQorYCwKK2AKK1tudW10aHJl
YWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1
ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJ
RCkgeworICAgIGJvb2wgYiA9IHRydWU7CisgICAgaW50IHggPSBiID8gKGIgPyAxMCA6IDIwKSA6
IChiID8gKGIgPyAxMC4wIDogMjApIDogNTQpOworICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgLAor
YAorW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZp
Y2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNw
YXRjaFRocmVhZElEKSB7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICB1aW50IHggPSBiID8gKGIg
PyAxMCA6IDIwKSA6IChiID8gKGIgPyAxMC4wIDogMjApIDogNTQpOworICAgIGJ1ZmZlclswXSA9
IDE7Cit9CitgLAorYAorW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0
ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFk
SUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpbnQg
eCA9ICooYiA/IG51bGwgOiBudWxsKTsKKyAgICBidWZmZXJbMF0gPSAxOworfQorYCwKK2AKK1tu
dW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGlu
dFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hU
aHJlYWRJRCkgeworICAgIGJvb2wgYiA9IHRydWU7CisgICAgKGIgPyBudWxsIDogMTApOworICAg
IGJ1ZmZlclswXSA9IDE7Cit9CitgLAorYAorW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRl
IHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBm
bG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYm9vbCBiID0gdHJ1
ZTsKKyAgICAoYiA/IChiID8gMjAgOiAzMCkgOiAoYiA/IG51bGwgOiBudWxsKSk7CisgICAgYnVm
ZmVyWzBdID0gMTsKK30KK2AKK107CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dl
dEJhc2ljRGV2aWNlKCkudGhlbihhc3luYyBmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBmb3IgKGxl
dCB0ZXN0IG9mIHRlc3RzKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhd2FpdCBzaG91
bGRGYWlsKHRlc3QsIGRldmljZSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoIiIgKyBlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0ZXN0UGFzc2VkKCIi
KTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQo
IiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373458</attachid>
            <date>2019-07-04 01:37:09 -0700</date>
            <delta_ts>2022-02-10 16:50:05 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>39577</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzEzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE5LTA3LTA0ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gJ3VpbnQgeSA9IHgg
PyAxIDogMicgZmFpbHMgdG8gdHlwZWNoZWNrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkyODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGUgbWFpbiBpc3N1ZSB3aXRoIHRoZSBwcmlvciBjb2RlIGlz
IHRoYXQgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Ugd2FzCisgICAgICAgIG9ubHkgb25lIGxldmVs
IGRlZXAuIFNvIGlmIHdlIGV2ZXIgbWVyZ2VkIHR3byBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZXMs
CisgICAgICAgIHdlIHdvdWxkIGp1c3QgY29tbWl0IHRoZW0gdG8gdGhlaXIgZGVmYXVsdCB2YWx1
ZXMuIFNvIHdoZW4gd2UgaGFkIGNvZGUKKyAgICAgICAgbGlrZSAiKGIgPyAxIDogMikiLCB0aGUg
dGVybmFyeSBleHByZXNzaW9ucyB0eXBlIHdvdWxkIGdldCBjb21taXR0ZWQgCisgICAgICAgIHRv
IGludCBiZWZvcmUgd2UgaGFkIGEgY2hhbmNlIHRvIGFsbG93IGl0IHRvIG1hdGNoIGFub3RoZXIg
dHlwZS4gU28gdGhpcworICAgICAgICBwcm9ncmFtIHdvdWxkIGluY29ycmVjdGx5IGZhaWwgdG8g
dHlwZSBjaGVjazoKKyAgICAgICAgImZsb2F0IGYgPSBiID8gMSA6IDI7IgorICAgICAgICAKKyAg
ICAgICAgVGhlIHNvbHV0aW9uIGlzIHRvIGRlZmVyIGNvbW1pdHRpbmcgdG8gYSBjb25jcmV0ZSB0
eXBlIHVudGlsIGFzIGxhdGUgYXMKKyAgICAgICAgcG9zc2libGUuIEFzIGxhdGUgYXMgcG9zc2li
bGUgdXN1YWxseSBtZWFucyBvbmNlIHdlIGFyZSBhc2tlZCB0byBtYXRjaCBhCisgICAgICAgIHNw
ZWNpZmljIHR5cGUuIEZvciBleGFtcGxlLCBpbiB2YXJpYWJsZSBhc3NpZ25tZW50LgorICAgICAg
ICAKKyAgICAgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Ugbm93IGZvcm1zIGEgdHJlZSBkYXRh
IHN0cnVjdHVyZSwgd2hlcmUgd2UgdXNlIHRoZSB0cmVlCisgICAgICAgIHRvIGJ1aWxkIHVwIHRo
ZXNlIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlcy4gT25jZSBhc2tlZCB0byBjb21taXQgYSBSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZQorICAgICAgICB0byBhIHNwZWNpZmljIHR5cGUsIHdlIGNvbW1p
dCB0aGUgZW50aXJlIHRyZWUgaW4gb25lIGdvIChvciBmYWlsIHRvIGRvIHNvKS4KKyAgICAgICAg
CisgICAgICAgIEhvd2V2ZXIsIHNvbWUgc3RhdGVtZW50cyBpbiB0aGUgbGFuZ3VhZ2Ugd2lsbCBu
ZXZlciBjYXVzZSB1cyB0byBjb21taXQKKyAgICAgICAgdG8gYSBzcGVjaWZpYyB0eXBlLiBGb3Ig
ZXhhbXBsZToKKyAgICAgICAgIihiID8gMjAuMCA6IDMwKTsiCisgICAgICAgIAorICAgICAgICBJ
biBzdWNoIGEgc2NlbmFyaW8sIHRoZSBDaGVja2VyIG11c3QgY2hvb3NlIGFuIGFwcHJvcHJpYXRl
IHR5cGUgZm9yCisgICAgICAgIHRoZSBlbnRpcmUgdHJlZS4gSWYgYW55dGhpbmcgaW4gdGhlIHRy
ZWUgaXMgY29tcG9zZWQgb2YgbnVsbCwgd2UgZmFpbAorICAgICAgICB0byB0eXBlIGNoZWNrLiBP
dGhlcndpc2UsIHRoZSBwcmVjZWRlbmNlIHdlIGNob29zZSBpczoKKyAgICAgICAgMS4gZmxvYXQK
KyAgICAgICAgMi4gaW50CisgICAgICAgIDMuIHVpbnQKKyAgICAgICAgCisgICAgICAgIFdoZW4g
d2UgYXNzaWduVHlwZXMoKSBhdCB0aGUgZW5kIG9mIHR5cGUgY2hlY2tpbmcsIHdlIHdpbGwgZW5j
b3VudGVyIHNvbWUKKyAgICAgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UgdHJlZXMgd2l0aCBu
byBjb21taXR0ZWQgdHlwZS4gV2hlbiB3ZSBlbmNvdW50ZXIKKyAgICAgICAgYW55IHN1Y2ggdHJl
ZSwgd2UgYWx3YXlzIHN0YXJ0IHdpdGggdGhlIHJvb3Qgb2YgdGhlIHRyZWUgd2hlbiBjaG9vc2lu
ZyB0aGUKKyAgICAgICAgdHlwZSBnaXZlbiB0aGUgYWJvdmUgcHJlY2VkZW5jZSBydWxlcy4gVGhp
cyBpcyBiZWNhdXNlIHRoZSByb290IG9mIHRoZQorICAgICAgICB0cmVlIGlzIHRoZSBvbmx5IG5v
ZGUgaW4gdGhlIHRyZWUgdGhhdCBpcyBhYmxlIHRvIGFuYWx5emUgZWFjaCBsZWFmIGFuZAorICAg
ICAgICBldmFsdWF0ZSB0aGUgYWJvdmUgcHJlY2VkZW5jZS4gSWYgd2UgZGlkbid0IGRvIHRoaXMs
IHdlJ2QgYmUgYmVob2xkZW4gdG8KKyAgICAgICAgY29tbWl0dGluZyB0byB0eXBlcyBvZiB2YXJp
b3VzIHN1YnRyZWVzIGluIHRoZSBvcmRlciB3ZSBoYXBwZW4gdG8gd2FsaworICAgICAgICBhIHBv
aW50ZXIgYmFzZWQgaGFzaCB0YWJsZSAod2hpY2ggaXMgZXNzZW50aWFsbHkgcmFuZG9tIGZvciBl
YWNoIHByb2dyYW0KKyAgICAgICAgaW52b2NhdGlvbikuIFVuZm9ydHVuYXRlbHksIGEgbG90IG9m
IHRoZSBjb21wbGV4aXR5IGluIHRoaXMgcGF0Y2ggY29tZXMKKyAgICAgICAgZnJvbSBzdXBwb3J0
aW5nIHRoaXMgYmVoYXZpb3IgaW4gYSB3ZWxsIGRlZmluZWQgbWFubmVyLCB3aGljaCB1bHRpbWF0
ZWx5CisgICAgICAgIG9ubHkgc2VydmVzIHRoZSBwdXJwb3NlIG9mIHN1cHBvcnRpbmcgYW5vbnlt
b3VzIHRlcm5hcnkgZXhwcmVzc2lvbnMgb3ZlcgorICAgICAgICBhIHRyZWUgb2YgbGl0ZXJhbHMu
CisKKyAgICAgICAgVGVzdHM6IHdlYmdwdS93aGxzbC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy5o
dG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wtcmVzb2x2YWJsZS10eXBlcy1zaG91bGQt
ZmFpbC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVCeUluc3RhbnRpYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1hdGNoQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpjb21taXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hl
Y2tlcjo6YXNzaWduVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6YXNzaWduVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OmdldFVubmFtZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjppc0Jv
b2xUeXBlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmluZmVyVHlwZXNGb3JDYWxsSW1wbCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VDb25zdGFudEV4cHJlc3Npb24pOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHA6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpjb252ZXJzaW9uQ29zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U6OlJlc29sdmFibGVUeXBlUmVmZXJlbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZTo6Zm9yRWFjaFR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJlc29sdmFibGVUeXBlUmVmZXJlbmNlOjpzZXRQ
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJlc29sdmFibGVUeXBlUmVmZXJlbmNl
Ojpyb290KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZTo6cmVzb2x2YWJsZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlJl
c29sdmluZ1R5cGU6Om9wZXJhdG9yPSk6IERlbGV0ZWQuCisKIDIwMTktMDctMDMgIEVyaWMgQ2Fy
bHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01TRV0gQWRkIG1vcmUg
ZGVidWcgYW5kIGVycm9yIGxvZ2dpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ3MDg2KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3NywxMSBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhCiAgICAgICAgIGJvb2wgc2Vjb25kQXJndW1lbnRJc1VpbnQgPSB0
eXBlc1sxXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKICAgICAgICAgICAgIHJldHVybiBt
YXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOwogICAgICAgICB9LCBb
Jl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUoaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAg
ICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAgICAgcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UtPmZvckVhY2hUeXBlKFsmXSAoQVNUOjpSZXNvbHZhYmxlVHlwZSYgdHlwZSkgeworICAg
ICAgICAgICAgICAgIG9rICY9IHR5cGUuY2FuUmVzb2x2ZShpbnRyaW5zaWNzLnVpbnRUeXBlKCkp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gb2s7CiAgICAgICAgIH0pKTsK
ICAgICAgICAgaWYgKGZpcnN0QXJndW1lbnRBcnJheVJlZiAmJiBzZWNvbmRBcmd1bWVudElzVWlu
dCkKICAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKG9y
aWdpbiwgKmZpcnN0QXJndW1lbnRBcnJheVJlZiwgaW50cmluc2ljcyk7CkBAIC0xOTYsNyArMjAw
LDExIEBAIHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGEKICAgICAgICAg
ICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQWNjZXB0YWJpbGl0eSB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8
QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSkgPyBBY2NlcHRhYmlsaXR5OjpZZXMgOiBB
Y2NlcHRhYmlsaXR5OjpObzsKICAgICAgICAgICAgIH0sIFtdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBBY2NlcHRhYmlsaXR5IHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKSA/IEFjY2VwdGFiaWxpdHk6Ok1heWJl
IDogQWNjZXB0YWJpbGl0eTo6Tm87CisgICAgICAgICAgICAgICAgYm9vbCBhbGxBcmVOdWxsID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+Zm9yRWFjaFR5
cGUoWyZdIChBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7CisgICAgICAgICAgICAgICAgICAg
IGFsbEFyZU51bGwgJj0gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHR5cGUpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJldHVybiBhbGxBcmVOdWxsID8gQWNjZXB0YWJp
bGl0eTo6TWF5YmUgOiBBY2NlcHRhYmlsaXR5OjpObzsKICAgICAgICAgICAgIH0pKTsKICAgICAg
ICAgfTsKICAgICAgICAgYXV0byBsZWZ0QWNjZXB0YWJpbGl0eSA9IGFjY2VwdGFiaWxpdHkodHlw
ZXNbMF0uZ2V0KCkpOwpAQCAtNDY5LDggKzQ3Nyw5IEBAIHByaXZhdGU6CiAgICAgT3B0aW9uYWw8
UmVjdXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xlZnRW
YWx1ZSA9IGZhbHNlKTsKICAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+
IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsK
ICAgICBib29sIHJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoQVNUOjpFeHByZXNzaW9uJik7Ci0g
ICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYmLCBBU1Q6OlR5cGVBbm5vdGF0aW9uKTsKLSAgICB2b2lkIGFzc2lnblR5cGUoQVNU
OjpFeHByZXNzaW9uJiwgUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBBU1Q6OlR5
cGVBbm5vdGF0aW9uKTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYsIEFTVDo6VHlwZUFubm90YXRpb24gPSBBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlZlB0
cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiwgQVNUOjpUeXBlQW5ub3RhdGlvbiA9IEFTVDo6
UmlnaHRWYWx1ZSgpKTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVz
b2x2aW5nVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKTsKICAg
ICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5cGUmLCBBU1Q6
OlR5cGVBbm5vdGF0aW9uKTsKIAogICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mKSBvdmVycmlkZTsKQEAgLTUzNCw2ICs1NDMsOTEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChQ
cm9ncmFtJiBwcm9ncmFtKQogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbS5uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpW2ldKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIFR5
cGU+CitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFu
ZENvbW1pdChjb25zdCBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZSwgVHlwZSYgbWF0Y2hpbmdUeXBlKQoreworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPFR5cGUsIEFTVDo6TmFtZWRUeXBlPjo6dmFsdWUgfHwgc3RkOjppc19zYW1l
PFR5cGUsIEFTVDo6VW5uYW1lZFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIE9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gcmVzdWx0OworICAgIGJvb2wgb2sgPSB0cnVlOworICAg
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5mb3JFYWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2YWJs
ZVR5cGUmIHR5cGUpIHsKKyAgICAgICAgcmVzdWx0ID0gbWF0Y2hBbmRDb21taXQobWF0Y2hpbmdU
eXBlLCB0eXBlKTsKKyAgICAgICAgb2sgJj0gISFyZXN1bHQ7CisgICAgfSk7CisgICAgcmV0dXJu
IG9rID8gV1RGTW92ZShyZXN1bHQpIDogV1RGOjpudWxsb3B0OworfQorCitzdGF0aWMgT3B0aW9u
YWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBjb21taXRJZk5lZWRlZChjb25zdCBSZWZQ
dHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkKK3sK
KyAgICBhdXRvJiByb290ID0gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJvb3QoKTsKKworICAg
IEFTVDo6UmVzb2x2YWJsZVR5cGUqIHByZWZlcnJlZExpdGVyYWxUeXBlID0gbnVsbHB0cjsKKyAg
ICBBU1Q6OlVubmFtZWRUeXBlKiByZXNvbHZlZFR5cGUgPSBudWxscHRyOworCisgICAgYm9vbCBm
aXJzdCA9IHRydWU7CisgICAgYm9vbCBzYXdOdWxsVHlwZSA9IGZhbHNlOworICAgIHJvb3QuZm9y
RWFjaFR5cGUoWyZdIChBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7CisgICAgICAgIGlmIChy
ZXNvbHZlZFR5cGUpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlLm1heWJlUmVzb2x2ZWRUeXBl
KCkpOworICAgICAgICAgICAgQVNTRVJUKG1hdGNoZXMoKnJlc29sdmVkVHlwZSwgKnR5cGUubWF5
YmVSZXNvbHZlZFR5cGUoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHR5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSkgeworICAgICAgICAgICAgQVNTRVJU
KGZpcnN0KTsKKyAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IHR5cGUubWF5YmVSZXNvbHZlZFR5
cGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0ID0g
ZmFsc2U7CisKKyAgICAgICAgc2F3TnVsbFR5cGUgfD0gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+
KHR5cGUpOworCisgICAgICAgIC8vIFRoZSB0eXBlIHByZWZlcmVuY2UgaXMgb3JkZXJlZCBsaWtl
IHNvOgorICAgICAgICAvLyB7ZmxvYXR9ID0+IGZsb2F0CisgICAgICAgIC8vIHtpbnR9ID0+IGlu
dAorICAgICAgICAvLyB7dWludH0gPT4gdWludAorICAgICAgICAvLyB7aW50LCB1aW50fSA9PiBp
bnQKKyAgICAgICAgLy8ge2Zsb2F0LCB1aW50fSA9PiBmbG9hdAorICAgICAgICAvLyB7ZmxvYXQs
IGludH0gPT4gZmxvYXQKKyAgICAgICAgLy8ge2Zsb2F0LCBpbnQsIHVpbnR9ID0+IGZsb2F0Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiB3ZSBk
b24ndCBoYXZlIG90aGVyIHR5cGUgZmVlZGJhY2suIEN1cnJlbnRseSwgdGhpcworICAgICAgICAv
LyBvbmx5IGhhcHBlbnMgZm9yIGFub255bW91cyB0ZXJuYXJ5IGV4cHJlc3Npb25zLCBsaWtlOgor
ICAgICAgICAvLyAiKGIgPyAxMC4wIDogMjApOyIKKworICAgICAgICBpZiAoIXByZWZlcnJlZExp
dGVyYWxUeXBlKSB7CisgICAgICAgICAgICBwcmVmZXJyZWRMaXRlcmFsVHlwZSA9ICZ0eXBlOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXM8
QVNUOjpGbG9hdExpdGVyYWxUeXBlPih0eXBlKSkgeworICAgICAgICAgICAgcHJlZmVycmVkTGl0
ZXJhbFR5cGUgPSAmdHlwZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPigqcHJlZmVycmVkTGl0
ZXJhbFR5cGUpICYmIGlzPEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPih0eXBlKSkKKyAgICAgICAg
ICAgIHByZWZlcnJlZExpdGVyYWxUeXBlID0gJnR5cGU7CisgICAgfSk7CisKKyAgICBpZiAocmVz
b2x2ZWRUeXBlKQorICAgICAgICByZXR1cm4gcmVzb2x2ZWRUeXBlLT5jbG9uZSgpOworCisgICAg
aWYgKHNhd051bGxUeXBlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgQVNU
OjpVbm5hbWVkVHlwZSogcHJlZmVycmVkVHlwZTsKKyAgICBpZiAoaXM8QVNUOjpGbG9hdExpdGVy
YWxUeXBlPigqcHJlZmVycmVkTGl0ZXJhbFR5cGUpKQorICAgICAgICBwcmVmZXJyZWRUeXBlID0g
JmRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4oKnByZWZlcnJlZExpdGVyYWxUeXBlKS5w
cmVmZXJyZWRUeXBlKCk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZT4oKnByZWZlcnJlZExpdGVyYWxUeXBlKSkKKyAgICAgICAgcHJlZmVycmVkVHlwZSA9
ICZkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPigqcHJlZmVycmVkTGl0
ZXJhbFR5cGUpLnByZWZlcnJlZFR5cGUoKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkludGVnZXJM
aXRlcmFsVHlwZT4oKnByZWZlcnJlZExpdGVyYWxUeXBlKSkKKyAgICAgICAgcHJlZmVycmVkVHlw
ZSA9ICZkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4oKnByZWZlcnJlZExpdGVyYWxU
eXBlKS5wcmVmZXJyZWRUeXBlKCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KCZyb290LCAqcHJlZmVy
cmVkVHlwZSk7Cit9CisKIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMoKQogewogICAgIGZvciAo
YXV0byYga2V5VmFsdWVQYWlyIDogbV90eXBlTWFwKSB7CkBAIC01NDEsMTEgKzYzNSwxMCBAQCBi
b29sIENoZWNrZXI6OmFzc2lnblR5cGVzKCkKICAgICAgICAgICAgIGtleVZhbHVlUGFpci5rZXkt
PnNldFR5cGUodW5uYW1lZFR5cGUtPmNsb25lKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBpZiAoIXJlc29sdmFibGVU
eXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLm1heWJlUmVzb2x2ZWRUeXBlKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGNvbW1pdChyZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5z
ZXRUeXBlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVk
VHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgYXV0byByZXNvbHZlZFR5cGUgPSBjb21taXRJ
Zk5lZWRlZChyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSk7CisgICAgICAgICAgICBpZiAoIXJlc29s
dmVkVHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBrZXlW
YWx1ZVBhaXIua2V5LT5zZXRUeXBlKFdURk1vdmUocmVzb2x2ZWRUeXBlLnZhbHVlKCkpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmICghc3VjY2Vz
cykKQEAgLTU5NCwyMSArNjg3LDI4IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpGdW5jdGlv
bkRlZmluaXQKICAgICBWaXNpdG9yOjp2aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwogfQogCi1z
dGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1p
dChSZXNvbHZpbmdUeXBlJiBsZWZ0LCBSZXNvbHZpbmdUeXBlJiByaWdodCkKK3N0YXRpYyBPcHRp
b25hbDxSZXNvbHZpbmdUeXBlPiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiBsZWZ0LCBS
ZXNvbHZpbmdUeXBlJiByaWdodCkKIHsKLSAgICByZXR1cm4gbGVmdC52aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICByZXR1cm4gcmlnaHQudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdo
dCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgcmV0dXJu
IGxlZnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiBsZWZ0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAgICAgIHJldHVybiBy
aWdodC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CiAgICAgICAgICAgICBpZiAo
bWF0Y2hlcyhsZWZ0LCByaWdodCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQtPmNsb25l
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc29sdmluZ1R5cGUobGVmdC0+Y2xvbmUoKSk7
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9LCBbJl0oUmVmUHRy
PFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFJlc29sdmluZ1R5
cGU+IHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IG1hdGNoQW5kQ29tbWl0KHJpZ2h0
LCBsZWZ0LmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzb2x2aW5nVHlwZShXVEZN
b3ZlKHJlc3VsdC52YWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+
IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICAgICAgcmV0
dXJuIG1hdGNoQW5kQ29tbWl0KGxlZnQsIHJpZ2h0LT5yZXNvbHZhYmxlVHlwZSgpKTsKICAgICAg
ICAgfSkpOwotICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0
KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAgICAgICAgcmV0
dXJuIHJpZ2h0LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4g
ewotICAgICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHJpZ2h0LCBsZWZ0LT5yZXNvbHZh
YmxlVHlwZSgpKTsKLSAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKLSAg
ICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLCBy
aWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIGxlZnQpIC0+IE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHsKKyAgICAgICAg
cmV0dXJuIHJpZ2h0LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHsKKyAgICAgICAg
ICAgIGlmIChhdXRvIHJlc3VsdCA9IG1hdGNoQW5kQ29tbWl0KGxlZnQsIHJpZ2h0LmdldCgpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gUmVzb2x2aW5nVHlwZShXVEZNb3ZlKHJlc3VsdC52YWx1
ZSgpKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9LCBbJl0o
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFJlc29s
dmluZ1R5cGU+IHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IG5ldyBSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZShsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBsZWZ0LT5zZXRQYXJlbnQoKnJl
c3VsdCk7CisgICAgICAgICAgICByaWdodC0+c2V0UGFyZW50KCpyZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIFJlc29sdmluZ1R5cGUoYWRvcHRSZWYocmVzdWx0KSk7CiAgICAgICAgIH0pKTsK
ICAgICB9KSk7CiB9CkBAIC02MTksOCArNzE5LDggQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeQogICAgICAgICBpZiAobWF0Y2hlcyh1bm5hbWVkVHlwZSwgcmVzb2x2
aW5nVHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUuY2xvbmUoKTsKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYgcmVzb2x2aW5nVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+PiB7Ci0gICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCh1bm5hbWVkVHlwZSwg
cmVzb2x2aW5nVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgfSwgWyZdKFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgcmV0dXJuIG1hdGNoQW5k
Q29tbWl0KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLCB1bm5hbWVkVHlwZSk7CiAgICAgfSkpOwog
fQogCkBAIC02MzAsOCArNzMwLDggQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeQogICAgICAgICBpZiAobWF0Y2hlcyhyZXNvbHZpbmdUeXBlLCBuYW1lZFR5cGUpKQog
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUtPmNsb25lKCk7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4gewotICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRUeXBlLCByZXNvbHZpbmdU
eXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IE9wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQocmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UsIG5hbWVkVHlwZSk7CiAgICAgfSkpOwogfQogCkBAIC02NDAs
OSArNzQwLDcgQEAgc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQogICAg
IHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPj4gewogICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7
CiAgICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVU
eXBlUmVmZXJlbmNlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsK
LSAgICAgICAgaWYgKCFyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5t
YXliZVJlc29sdmVkVHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuIGNvbW1pdChyZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSk7Ci0gICAgICAgIHJldHVybiByZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgp
OworICAgICAgICByZXR1cm4gY29tbWl0SWZOZWVkZWQocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Up
OwogICAgIH0pKTsKIH0KIApAQCAtODAwLDcgKzg5OCw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpWYXJpYWJsZURlY2xhcmEKICAgICB9CiB9CiAKLXZvaWQgQ2hlY2tlcjo6YXNzaWduVHlw
ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNU
OjpSaWdodFZhbHVlKCkpCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9u
JiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwg
QVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbikKIHsKICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8UmVzb2x2aW5n
VHlwZT4oV1RGTW92ZSh1bm5hbWVkVHlwZSkpKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtODA4LDcgKzkwNiw3IEBAIHZvaWQgQ2hlY2tl
cjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24KICAgICBBU1NFUlRfVU5VU0VEKHR5cGVBbm5v
dGF0aW9uQWRkUmVzdWx0LCB0eXBlQW5ub3RhdGlvbkFkZFJlc3VsdC5pc05ld0VudHJ5KTsKIH0K
IAotdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwg
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
LCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkp
Cit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBS
ZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Us
IEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24pCiB7CiAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPFJlc29sdmlu
Z1R5cGU+KFdURk1vdmUocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpKSk7CiAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKQEAgLTgxNiw2ICs5MTQsMTUg
QEAgdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbgogICAgIEFTU0VSVF9V
TlVTRUQodHlwZUFubm90YXRpb25BZGRSZXN1bHQsIHR5cGVBbm5vdGF0aW9uQWRkUmVzdWx0Lmlz
TmV3RW50cnkpOwogfQogCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9u
JiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlIHJlc29sdmluZ1R5cGUsIEFTVDo6VHlwZUFubm90
YXRpb24gdHlwZUFubm90YXRpb24pCit7CisgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUudmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSB7
CisgICAgICAgIGFzc2lnblR5cGUoZXhwcmVzc2lvbiwgV1RGTW92ZShsZWZ0KSwgdHlwZUFubm90
YXRpb24pOworICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0
KSB7CisgICAgICAgIGFzc2lnblR5cGUoZXhwcmVzc2lvbiwgV1RGTW92ZShsZWZ0KSwgdHlwZUFu
bm90YXRpb24pOworICAgIH0pKTsKK30KKwogdm9pZCBDaGVja2VyOjpmb3J3YXJkVHlwZShBU1Q6
OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFT
VDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsK
ICAgICByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7CkBAIC04NDQsNyArOTUxLDcgQEAgdm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZQogICAgIGlmICghcmlnaHRJbmZvKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJlc3VsdFR5cGUgPSBtYXRjaEFuZENvbW1pdChsZWZ0
SW5mby0+cmVzb2x2aW5nVHlwZSwgcmlnaHRJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBhdXRv
IHJlc3VsdFR5cGUgPSBtYXRjaEFuZENvbW1pdChyaWdodEluZm8tPnJlc29sdmluZ1R5cGUsICps
ZWZ0SW5mby0+cmVzb2x2aW5nVHlwZS5nZXRVbm5hbWVkVHlwZSgpKTsKICAgICBpZiAoIXJlc3Vs
dFR5cGUpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODY1LDcg
Kzk3Miw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGUKICAgICBp
ZiAoIW5ld1ZhbHVlSW5mbykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hlZFR5cGUgPSBtYXRjaEFuZENvbW1pdChs
ZWZ0VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUp
KQorICAgIGlmIChPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoZWRU
eXBlID0gbWF0Y2hBbmRDb21taXQobmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCAqbGVmdFZh
bHVlSW5mby0+cmVzb2x2aW5nVHlwZS5nZXRVbm5hbWVkVHlwZSgpKSkKICAgICAgICAgcmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpLnNldFR5cGUoV1RGTW92ZShtYXRjaGVkVHlw
ZS52YWx1ZSgpKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHNldEVycm9yKCk7CkBAIC04ODMsOSAr
OTkwLDI2IEBAIHN0YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBnZXRVbm5hbWVkVHlwZSgKIHsKICAg
ICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewogICAgICAg
ICByZXR1cm4gJnR5cGU7Ci0gICAgfSwgW10oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgIH0sIFtdKFJlZlB0cjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBBU1Q6OlVubmFt
ZWRUeXBlKiB7CiAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGUgdHlwZSBpc24ndCBjb21taXR0ZWQs
IHNob3VsZCB3ZSBqdXN0IGNvbW1pdCgpIGl0IG5vdz8KLSAgICAgICAgcmV0dXJuIHR5cGUtPnJl
c29sdmFibGVUeXBlKCkubWF5YmVSZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgQVNUOjpVbm5hbWVk
VHlwZSogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAg
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5mb3JFYWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2YWJs
ZVR5cGUmIHR5cGUpIHsKKyAgICAgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoIXR5cGUubWF5YmVSZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0eXBlLm1heWJlUmVzb2x2ZWRUeXBl
KCkpIHsKKyAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpOworCisgICAgICAgICAgICBB
U1NFUlQobWF0Y2hlcygqcmVzdWx0LCAqdHlwZS5tYXliZVJlc29sdmVkVHlwZSgpKSk7CisgICAg
ICAgIH0pOworICAgICAgICByZXR1cm4gb2sgPyByZXN1bHQgOiBudWxscHRyOwogICAgIH0pKTsK
IH0KIApAQCAtMTIwMSw4ICsxMzI1LDggQEAgYm9vbCBDaGVja2VyOjppc0Jvb2xUeXBlKFJlc29s
dmluZ1R5cGUmIAogewogICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4gYm9vbCB7CiAg
ICAgICAgIHJldHVybiBtYXRjaGVzKGxlZnQsIG1faW50cmluc2ljcy5ib29sVHlwZSgpKTsKLSAg
ICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkgLT4gYm9vbCB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChtX2ludHJp
bnNpY3MuYm9vbFR5cGUoKSwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgIH0sIFsmXShS
ZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkg
LT4gYm9vbCB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1p
dChyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgc3RhdGljX2Nhc3Q8QVNUOjpOYW1lZFR5cGUmPiht
X2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpKTsKICAgICB9KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVz
LmNwcAkocmV2aXNpb24gMjQ3MDg2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCwx
MiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaW5mZXJUeXBlc0ZvckNhbGxJbXBsCiAgICAgICAgIGF1
dG8gc3VjY2VzcyA9IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7
CiAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqcG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJz
KClbaV0tPnR5cGUoKSwgdW5uYW1lZFR5cGUpOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgewot
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlw
ZSgpLmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKS0+
dW5pZnlOb2RlKCkpOworICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAgICBh
dXRvJiB1bmlmeU5vZGUgPSBwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgp
LT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5mb3JF
YWNoVHlwZShbJl0gKEFTVDo6UmVzb2x2YWJsZVR5cGUmIHR5cGUpIHsKKyAgICAgICAgICAgICAg
ICBvayAmPSB0eXBlLmNhblJlc29sdmUodW5pZnlOb2RlKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgcmV0dXJuIG9rOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmICghc3VjY2VzcykK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAJKHJldmlzaW9uIDI0NzA4NikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY0LDggKzM2NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUNvbnN0
YW50RXhwcmVzc2lvbigpIC0KICAgICAgICAgYXV0byB2YWx1ZSA9IGZsb2F0TGl0ZXJhbFRvRmxv
YXQodHlwZS0+c3RyaW5nVmlldyk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiB7
eyBBU1Q6OkZsb2F0TGl0ZXJhbChXVEZNb3ZlKCp0eXBlKSwgKnZhbHVlKSB9fTsKLSAgICB9Cisg
ICAgICAgIHJldHVybiB7eyBBU1Q6OkZsb2F0TGl0ZXJhbChXVEZNb3ZlKCp0eXBlKSwgKnZhbHVl
KSB9fTsgfQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpOdWxsOgogICAgICAgICByZXR1
cm4geyBBU1Q6Ok51bGxMaXRlcmFsKFdURk1vdmUoKnR5cGUpKSB9OwogICAgIGNhc2UgTGV4ZXI6
OlRva2VuOjpUeXBlOjpUcnVlOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQcmVwYXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCShyZXZpc2lvbiAyNDcwODYpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBkdW1wQVNUQmVmb3JlRWFjaFBhc3MgPSBmYWxzZTsKIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBkdW1wQVNUQWZ0ZXJQYXJzaW5nID0gZmFsc2U7Ci1zdGF0aWMgY29uc3RleHBy
IGJvb2wgZHVtcEFTVEF0RW5kID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFT
VEF0RW5kID0gdHJ1ZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBhbHdheXNEdW1wUGFzc0ZhaWx1
cmVzID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcFBhc3NGYWlsdXJlID0gZHVt
cEFTVEJlZm9yZUVhY2hQYXNzIHx8IGR1bXBBU1RBZnRlclBhcnNpbmcgfHwgZHVtcEFTVEF0RW5k
IHx8IGFsd2F5c0R1bXBQYXNzRmFpbHVyZXM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3Zlcmxv
YWRJbXBsLmNwcAkocmV2aXNpb24gMjQ3MDg2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsMTIgQEAgc3RhdGljIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KEFTVDo6RnVu
YwogICAgICAgICBjb252ZXJzaW9uQ29zdCArPSBhcmd1bWVudFR5cGVzW2ldLmdldCgpLnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IHVu
c2lnbmVkIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IHVuc2ln
bmVkIHsKLSAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2
YWJsZVR5cGUoKS5jb252ZXJzaW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS0+dHlw
ZSgpKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvc3QgPSAwOworICAgICAgICAgICAgcmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UtPmZvckVhY2hUeXBlKFsmXSAoQVNUOjpSZXNvbHZhYmxlVHlwZSYg
dHlwZSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgd2FudCBtYXgg
aGVyZT8gV2Ugc2hvdWxkIHNwZWNpZnkgd2hhdCB0byBkby4KKyAgICAgICAgICAgICAgICBjb3N0
ID0gc3RkOjptYXgoY29zdCwgdHlwZS5jb252ZXJzaW9uQ29zdCgqY2FuZGlkYXRlLnBhcmFtZXRl
cnMoKVtpXS0+dHlwZSgpKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBj
b3N0OwogICAgICAgICB9KSk7CiAgICAgfQogICAgIC8vIFRoZSByZXR1cm4gdHlwZSBjYW4gbmV2
ZXIgYmUgYSBsaXRlcmFsIHR5cGUsIHNvIGl0cyBjb252ZXJzaW9uIGNvc3QgaXMgYWx3YXlzIDAu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmlu
Z1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlc29sdmluZ1R5cGUuaAkocmV2aXNpb24gMjQ3MDg2KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDE1ICs1OSw1MCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4gbGVmdCwg
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiByaWdodCkKKyAgICAgICAgOiBtX2xlZnQo
V1RGTW92ZShsZWZ0KSkKKyAgICAgICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQorICAgIHsK
KyAgICB9CisKICAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShjb25zdCBSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZSYpID0gZGVsZXRlOwogICAgIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlJiYpID0gZGVsZXRlOwogICAgIFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlJiBvcGVyYXRvcj0oY29uc3QgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0ZTsK
ICAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYgb3BlcmF0b3I9KFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlJiYpID0gZGVsZXRlOwogCi0gICAgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJs
ZVR5cGUoKSB7IHJldHVybiAqbV9yZXNvbHZhYmxlVHlwZTsgfQorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hUeXBlKEZ1bmN0aW9uIGZ1bmN0aW9uKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fcmVzb2x2YWJsZVR5cGUpCisgICAgICAgICAgICBmdW5jdGlv
bigqbV9yZXNvbHZhYmxlVHlwZSk7CisKKyAgICAgICAgaWYgKG1fbGVmdCkgeworICAgICAgICAg
ICAgQVNTRVJUKG1fcmlnaHQpOworICAgICAgICAgICAgbV9sZWZ0LT5mb3JFYWNoVHlwZShmdW5j
dGlvbik7CisgICAgICAgICAgICBtX3JpZ2h0LT5mb3JFYWNoVHlwZShmdW5jdGlvbik7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUKCFtX3JpZ2h0KTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFBhcmVudChSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYgcGFyZW50KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgICAgIG1fcGFyZW50ID0gJnBhcmVudDsKKyAg
ICB9CisKKyAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYgcm9vdCgpCisgICAgeworICAgICAg
ICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSogcmVzdWx0ID0gdGhpczsKKyAgICAgICAgd2hpbGUg
KHJlc3VsdC0+bV9wYXJlbnQpCisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPm1fcGFyZW50
OworICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgQVNUOjpS
ZXNvbHZhYmxlVHlwZSogbV9yZXNvbHZhYmxlVHlwZTsKKyAgICBBU1Q6OlJlc29sdmFibGVUeXBl
KiBtX3Jlc29sdmFibGVUeXBlIHsgbnVsbHB0ciB9OworICAgIFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlKiBtX3BhcmVudCB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+IG1fbGVmdDsKKyAgICBSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+IG1fcmln
aHQ7CiB9OwogCiAvLyBUaGlzIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhIFZhcmlhbnQuCkBA
IC05MSwxNyArMTI2LDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBSZXNvbHZpbmdUeXBlKGNv
bnN0IFJlc29sdmluZ1R5cGUmKSA9IGRlbGV0ZTsKLSAgICBSZXNvbHZpbmdUeXBlKFJlc29sdmlu
Z1R5cGUmJiBvdGhlcikKLSAgICAgICAgOiBtX2lubmVyKFdURk1vdmUob3RoZXIubV9pbm5lcikp
Ci0gICAgewotICAgIH0KKyAgICBSZXNvbHZpbmdUeXBlKFJlc29sdmluZ1R5cGUmJikgPSBkZWZh
dWx0OwogCiAgICAgUmVzb2x2aW5nVHlwZSYgb3BlcmF0b3I9KGNvbnN0IFJlc29sdmluZ1R5cGUm
KSA9IGRlbGV0ZTsKLSAgICBSZXNvbHZpbmdUeXBlJiBvcGVyYXRvcj0oUmVzb2x2aW5nVHlwZSYm
IG90aGVyKQotICAgIHsKLSAgICAgICAgbV9pbm5lciA9IFdURk1vdmUob3RoZXIubV9pbm5lcik7
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9CisgICAgUmVzb2x2aW5nVHlwZSYgb3BlcmF0
b3I9KFJlc29sdmluZ1R5cGUmJiBvdGhlcikgPSBkZWZhdWx0OwogCiAgICAgQVNUOjpVbm5hbWVk
VHlwZSogZ2V0VW5uYW1lZFR5cGUoKQogICAgIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzA4NikK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE5LTA3LTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFtXSExTTF0gJ3VpbnQgeSA9IHggPyAxIDogMicgZmFpbHMgdG8gdHlwZWNoZWNrCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkyODkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmdwdS93aGxzbC1u
ZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdl
YmdwdS93aGxzbC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wtcmVzb2x2YWJsZS10eXBlcy1zaG91bGQtZmFpbC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1yZXNvbHZhYmxlLXR5cGVzLXNob3VsZC1m
YWlsLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA3LTAyICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3Jp
LkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIGltcG9ydGVkL2JsaW5rL2FuaW1hdGlvbnMvZGlz
cGxheS1pbmxpbmUtc3R5bGUtYWRqdXN0Lmh0bWwgaXNuJ3QgYSB2YWxpZCByZWYgdGVzdApJbmRl
eDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW5lc3RlZC1yZXNvbHZhYmxlLXR5cGVzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbmVzdGVkLXJl
c29sdmFibGUtdHlwZXMtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy5odG1sCShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1uZXN0ZWQtcmVzb2x2YWJsZS10eXBlcy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZvaWQgZG9V
aW50KHVpbnQgeCkKK3sKK30KKwordm9pZCBkb0ludChpbnQgeCkKK3sKK30KKwordm9pZCBkb0Zs
b2F0KGZsb2F0IHgpCit7Cit9CisKK3ZvaWQgamF6KGZsb2F0IHgpCit7Cit9CisKK3ZvaWQgZG9Q
dHIodGhyZWFkIGZsb2F0KiB4KQoreworfQorCitmbG9hdCB0ZXN0UmV0KGJvb2wgYikKK3sKKyAg
ICByZXR1cm4gYiA/IChiID8gNDIgOiA0MykgOiAoYiA/IDIwIDogMzApOworfQorCit1aW50IHRl
c3RSZXQyKGJvb2wgYikKK3sKKyAgICByZXR1cm4gYiA/IChiID8gNDIgOiA0MykgOiAoYiA/IDIw
IDogMzApOworfQorCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRl
U2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJ
RCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBib29sIGIgPSB0cnVlOworCisgICAgKGIg
PyAxMC4wIDogMjApOworICAgIChiID8gMjAgOiAxMC4wKTsKKyAgICAoYiA/IChiID8gMTAgOiAo
YiA/IDIwIDogMzApKSA6IChiID8gMTAgOiAoYiA/IDQwIDogMjApKSk7CisgICAgKGIgPyAoYiA/
IDEwIDogKGIgPyAyMC41IDogMzApKSA6IChiID8gMTAgOiAoYiA/IDQwIDogMjApKSk7CisgICAg
KGIgPyAoYiA/IDEwIDogKGIgPyAyMC41IDogMzApKSA6IChiID8gMTAuNSA6IChiID8gNDAuNSA6
IDIwKSkpOworCisgICAgdWludCB4ID0gYiA/IDEwIDogMjA7CisgICAgdWludCB4MiA9IGIgPyAy
MTQ3NDgzNjQ3IDogMjQ7CisgICAgZG9VaW50KGIgPyAxMCA6IDIwKTsKKyAgICBkb1VpbnQoYiA/
IChiID8gMjE0NzQ4MzY0NyA6IDEwKSA6IDIwKTsKKyAgICBkb1VpbnQoYiA/IChiID8gMjE0NzQ4
MzY0NyA6IDEwKSA6IChiID8gMjAgOiAoYiA/IDQ1IDogNTUpKSk7CisKKyAgICBpbnQgeDMgPSBi
ID8gNDUwIDogNDI7CisgICAgZG9JbnQoYiA/IDEwIDogMjApOworICAgIGRvSW50KGIgPyAoYiA/
IDIxNDc0ODM2NDcgOiAxMCkgOiAoYiA/IDIwIDogKGIgPyA0NSA6IDU1KSkpOworCisgICAgZmxv
YXQgeSA9IGIgPyAxMC41IDogMjA7CisgICAgZmxvYXQgeTIgPSBiID8gKGIgPyAyMCA6IDEwLjUp
IDogMjA7CisgICAgZG9GbG9hdChiID8gKGIgPyAyMTQ3NDgzNjQ3IDogMTApIDogKGIgPyAyMCA6
IChiID8gNDUgOiA1NSkpKTsKKyAgICBkb0Zsb2F0KGIgPyAoYiA/IDIxNDc0ODM2NDcgOiAxMC41
KSA6IChiID8gMjAgOiAoYiA/IDQ1IDogNTUpKSk7CisKKyAgICB0aHJlYWQgaW50KiBwdHIgPSBi
ID8gbnVsbCA6IG51bGw7CisgICAgZG9QdHIoYiA/IG51bGwgOiBudWxsKTsKKyAgICBkb1B0cihi
ID8gKGIgPyBudWxsIDogbnVsbCkgOiBudWxsKTsKKyAgICBkb1B0cihiID8gKGIgPyBudWxsIDog
bnVsbCkgOiAoYiA/IG51bGwgOiBudWxsKSk7CisKKyAgICBpbnRbNDJdIGFycmF5OworICAgIGlm
IChhcnJheVtiID8gKGIgPyAxMCA6IDIwKSA6IChiID8gNSA6IDYpXSAhPSAwKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgeworICAgICAgICB0aHJlYWQgaW50KiB4OworICAgICAgICBpZiAo
eCAhPSAoYiA/IChiID8gbnVsbCA6IG51bGwpIDogbnVsbCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgeworICAgICAgICBpbnQgdmFsdWUgPSA0MjsKKyAgICAgICAgdGhyZWFk
IGludCogcHRyID0gJnZhbHVlOworICAgICAgICBpbnQgcmVzdWx0ID0gKGIgPyAqcHRyIDogMCk7
CisgICAgICAgIGlmIChyZXN1bHQgIT0gNDIpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHRlc3RSZXQoYikgIT0gNDIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAodGVz
dFJldDIoYikgIT0gNDIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWZmZXJbMF0gPSAx
OworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0
eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlv
dXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0
b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlv
dXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZp
Y2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6
IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29u
c3Qgc2l6ZSA9IEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAxOworCisgICAgY29uc3Qg
YnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
IHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZlckFycmF5
QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBidWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0
IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5T
VE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJl
c3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0g
e2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3Jv
dXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRH
cm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBk
ZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5j
b3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAg
ICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQ
YXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGlu
ZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwor
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZm
ZXIubWFwUmVhZEFzeW5jKCk7CisgICAgbGV0IHJlc3VsdHNJbnQzMkFycmF5ID0gbmV3IEludDMy
QXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0ludDMyQXJyYXlbMF0g
PT09IDEpCisgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZh
aWxlZCgiIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQord2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgewor
ICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNz
ZWQoIiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXNvbHZhYmxlLXR5cGVzLXNob3Vs
ZC1mYWlsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtcmVzb2x2YWJsZS10eXBlcy1zaG91bGQtZmFpbC1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXJlc29sdmFibGUtdHlwZXMtc2hvdWxkLWZh
aWwtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtcmVzb2x2YWJsZS10eXBlcy1zaG91bGQtZmFpbC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1yZXNvbHZhYmxlLXR5cGVz
LXNob3VsZC1mYWlsLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLXJlc29sdmFibGUtdHlwZXMtc2hvdWxkLWZhaWwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIwMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
anMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQ+CisKK2FzeW5jIGZ1bmN0aW9uIHNob3VsZEZhaWwoc291cmNlLCBkZXZpY2UpIHsKKyAgICBj
b25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2li
aWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5
b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNl
LmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IHNpemUgPSBJbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMTsKKworICAgIGNv
bnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9X
UklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJB
cnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVm
ZmVySW50MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBi
dWZmZXJJbnQzMkFycmF5WzBdID0gMDsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0
IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5T
VE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJl
c3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVm
ZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0g
e2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3Jv
dXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRH
cm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBk
ZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5j
b3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAg
ICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQ
YXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGlu
ZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOwor
ICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZm
ZXIubWFwUmVhZEFzeW5jKCk7CisgICAgbGV0IHJlc3VsdHNJbnQzMkFycmF5ID0gbmV3IEludDMy
QXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0ludDMyQXJyYXlbMF0g
IT09IDApCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJlc3VsdHNJ
bnQzMkFycmF5WzBdKQorICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KKworbGV0IHRlc3Rz
ID0gWworYAorW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRl
cihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBT
Vl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICAoYiA/IG51bGwg
OiBudWxsKTsKKyAgICBidWZmZXJbMF0gPSAxOworfQorYCwKK2AKK1tudW10aHJlYWRzKDEsIDEs
IDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJl
Z2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAg
IGJvb2wgYiA9IHRydWU7CisgICAgaW50IHggPSAxMC41OworICAgIGJ1ZmZlclswXSA9IDE7Cit9
CitgLAorYAorW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRl
cihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBT
Vl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBpbnQgeCA9IDEw
LjA7CisgICAgYnVmZmVyWzBdID0gMTsKK30KK2AsCitgCitbbnVtdGhyZWFkcygxLCAxLCAxKV0K
K2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rl
cih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBib29s
IGIgPSB0cnVlOworICAgIHVpbnQgeCA9IDEwLjA7CisgICAgYnVmZmVyWzBdID0gMTsKK30KK2As
CitgCit2b2lkIGZvbyh1aW50IHgpIHsgfQorW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRl
IHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBm
bG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYm9vbCBiID0gdHJ1
ZTsKKyAgICBmb28oMTAuMCk7CisgICAgYnVmZmVyWzBdID0gMTsKK30KK2AsCitgCit2b2lkIGZv
byh1aW50IHgpIHsgfQorW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0
ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFk
SUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBmb28o
YiA/IDEwIDogMS4wKTsKKyAgICBidWZmZXJbMF0gPSAxOworfQorYCwKK2AKK3ZvaWQgZm9vKGlu
dCB4KSB7IH0KK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFk
ZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDog
U1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGJvb2wgYiA9IHRydWU7CisgICAgZm9vKGIgPyAx
MCA6IDEuMCk7CisgICAgYnVmZmVyWzBdID0gMTsKK30KK2AsCitgCitbbnVtdGhyZWFkcygxLCAx
LCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiBy
ZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAg
ICBib29sIGIgPSB0cnVlOworICAgIHVpbnQgeCA9IC0xMDsKKyAgICBidWZmZXJbMF0gPSAxOwor
fQorYCwKK2AKK3ZvaWQgZm9vKHVpbnQgeCkgeyB9CitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2Nv
bXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1
MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBib29sIGIg
PSB0cnVlOworICAgIGZvbyhiID8gKGIgPyAxMCA6IDIwKSA6IChiID8gKGIgPyAtMTAgOiAyMCkg
OiA1NCkpOworICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgLAorYAordm9pZCBmb28oaW50IHgpIHsg
fQorW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZp
Y2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNw
YXRjaFRocmVhZElEKSB7CisgICAgYm9vbCBiID0gdHJ1ZTsKKyAgICBmb28oYiA/IChiID8gMTAg
OiAyMCkgOiAoYiA/IChiID8gMTAuMCA6IDIwKSA6IDU0KSk7CisgICAgYnVmZmVyWzBdID0gMTsK
K30KK2AsCitgCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hh
ZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6
IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBib29sIGIgPSB0cnVlOworICAgIGludCB4ID0g
YiA/IChiID8gMTAgOiAyMCkgOiAoYiA/IChiID8gMTAuMCA6IDIwKSA6IDU0KTsKKyAgICBidWZm
ZXJbMF0gPSAxOworfQorYCwKK2AKK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lk
IGNvbXB1dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQz
IHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGJvb2wgYiA9IHRydWU7Cisg
ICAgdWludCB4ID0gYiA/IChiID8gMTAgOiAyMCkgOiAoYiA/IChiID8gMTAuMCA6IDIwKSA6IDU0
KTsKKyAgICBidWZmZXJbMF0gPSAxOworfQorYCwKK2AKK1tudW10aHJlYWRzKDEsIDEsIDEpXQor
Y29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVy
KHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGJvb2wg
YiA9IHRydWU7CisgICAgaW50IHggPSAqKGIgPyBudWxsIDogbnVsbCk7CisgICAgYnVmZmVyWzBd
ID0gMTsKK30KK2AsCitgCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21w
dXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJl
YWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBib29sIGIgPSB0cnVlOworICAgIChi
ID8gbnVsbCA6IDEwKTsKKyAgICBidWZmZXJbMF0gPSAxOworfQorYCwKK2AKK1tudW10aHJlYWRz
KDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZl
ciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkg
eworICAgIGJvb2wgYiA9IHRydWU7CisgICAgKGIgPyAoYiA/IDIwIDogMzApIDogKGIgPyBudWxs
IDogbnVsbCkpOworICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgCitdOworCit3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CitnZXRCYXNpY0RldmljZSgpLnRoZW4oYXN5bmMgZnVuY3Rpb24oZGV2
aWNlKSB7CisgICAgZm9yIChsZXQgdGVzdCBvZiB0ZXN0cykgeworICAgICAgICB0cnkgeworICAg
ICAgICAgICAgYXdhaXQgc2hvdWxkRmFpbCh0ZXN0LCBkZXZpY2UpOworICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCIiICsgZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>