<?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>232129</bug_id>
          
          <creation_ts>2021-10-21 20:21:24 -0700</creation_ts>
          <short_desc>[WTF] Replace current LLVM flang&apos;s Int128 with abseil-cpp&apos;s Int128</short_desc>
          <delta_ts>2021-10-23 14:36:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>philip.chimento</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1807504</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-21 20:21:24 -0700</bug_when>
    <thetext>[WTF] Replace current LLVM flang&apos;s Int128 with abseil-cpp&apos;s Int128</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807509</commentid>
    <comment_count>1</comment_count>
      <attachid>442107</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-21 20:24:45 -0700</bug_when>
    <thetext>Created attachment 442107
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807511</commentid>
    <comment_count>2</comment_count>
      <attachid>442109</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-21 20:42:24 -0700</bug_when>
    <thetext>Created attachment 442109
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807512</commentid>
    <comment_count>3</comment_count>
      <attachid>442110</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-21 20:44:03 -0700</bug_when>
    <thetext>Created attachment 442110
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807513</commentid>
    <comment_count>4</comment_count>
      <attachid>442111</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-21 20:46:24 -0700</bug_when>
    <thetext>Created attachment 442111
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807523</commentid>
    <comment_count>5</comment_count>
      <attachid>442116</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-21 21:08:36 -0700</bug_when>
    <thetext>Created attachment 442116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1807965</commentid>
    <comment_count>6</comment_count>
      <attachid>442116</attachid>
    <who name="Philip Chimento">philip.chimento</who>
    <bug_when>2021-10-22 16:56:24 -0700</bug_when>
    <thetext>Comment on attachment 442116
Patch

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

Thanks for doing this so quickly! This int128 implementation looks more comprehensive than the Flang one anyway.

I would suggest removing WTF/LeadingZeroBitCount.{h,cpp} as well, because this implementation uses the clz() from WTF/MathExtras.h (which I didn&apos;t realize existed!) for counting leading zeros, and WTF::LeadingZeroBitCount was only added because the Flang int128 pulled it in.

(I don&apos;t have reviewer privileges, so I can&apos;t mark this r+, but otherwise LGTM)

&gt; Source/WTF/wtf/Int128.h:81
&gt; +// Additionally, if your compiler supports `__int128`, `UInt128Impl` is

If this functionality was removed when copying from Abseil, it&apos;s probably good to remove the comment as well, to avoid confusion.

&gt; Source/WTF/wtf/Int128.h:100
&gt; +//     float y = absl::UInt128Max();  // Error. UInt128Impl cannot be implicitly

Probably good to remove `absl::` here and in line 103 as well

&gt; Source/WTF/wtf/Int128.h:292
&gt; +// Additionally, if your compiler supports `__int128`, `Int128Impl` is

Same as earlier comment.

&gt; Source/WTF/wtf/Int128.h:830
&gt; +#else   // ABSL_HAVE_INTRINSIC128

This is a bit confusing. Although looking in the original source I see the code is actually correct when you remove the ABSL_HAVE_INTRINSIC128 case, because the MSVC&amp;&amp;x86_64 case was originally an #elif. So no need to change, but maybe consider just removing the comment.

&gt; Tools/TestWebKitAPI/Tests/WTF/Int128.cpp:-79
&gt; -static void TestVsNative(__uint128_t x, __uint128_t y)

I would suggest keeping the VsNative tests, and actually adding similar ones for the signed int128. These are probably the best indicator if something is wrong in the implementation. That&apos;s what originally alerted me to the Flang implementation&apos;s signed int128 operator&gt;&gt; not extending the sign.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808044</commentid>
    <comment_count>7</comment_count>
      <attachid>442116</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-23 00:29:00 -0700</bug_when>
    <thetext>Comment on attachment 442116
Patch

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

&gt;&gt; Source/WTF/wtf/Int128.h:81
&gt;&gt; +// Additionally, if your compiler supports `__int128`, `UInt128Impl` is
&gt; 
&gt; If this functionality was removed when copying from Abseil, it&apos;s probably good to remove the comment as well, to avoid confusion.

Done.

&gt;&gt; Source/WTF/wtf/Int128.h:100
&gt;&gt; +//     float y = absl::UInt128Max();  // Error. UInt128Impl cannot be implicitly
&gt; 
&gt; Probably good to remove `absl::` here and in line 103 as well

Done.

&gt;&gt; Source/WTF/wtf/Int128.h:292
&gt;&gt; +// Additionally, if your compiler supports `__int128`, `Int128Impl` is
&gt; 
&gt; Same as earlier comment.

Done.

&gt;&gt; Source/WTF/wtf/Int128.h:830
&gt;&gt; +#else   // ABSL_HAVE_INTRINSIC128
&gt; 
&gt; This is a bit confusing. Although looking in the original source I see the code is actually correct when you remove the ABSL_HAVE_INTRINSIC128 case, because the MSVC&amp;&amp;x86_64 case was originally an #elif. So no need to change, but maybe consider just removing the comment.

Removed.

&gt;&gt; Tools/TestWebKitAPI/Tests/WTF/Int128.cpp:-79
&gt;&gt; -static void TestVsNative(__uint128_t x, __uint128_t y)
&gt; 
&gt; I would suggest keeping the VsNative tests, and actually adding similar ones for the signed int128. These are probably the best indicator if something is wrong in the implementation. That&apos;s what originally alerted me to the Flang implementation&apos;s signed int128 operator&gt;&gt; not extending the sign.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808045</commentid>
    <comment_count>8</comment_count>
      <attachid>442255</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-23 00:29:52 -0700</bug_when>
    <thetext>Created attachment 442255
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808123</commentid>
    <comment_count>9</comment_count>
      <attachid>442255</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-10-23 14:15:37 -0700</bug_when>
    <thetext>Comment on attachment 442255
Patch

Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808124</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-23 14:35:34 -0700</bug_when>
    <thetext>Committed r284748 (243457@main): &lt;https://commits.webkit.org/243457@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 442255.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808125</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-23 14:36:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/84582748&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442107</attachid>
            <date>2021-10-21 20:24:45 -0700</date>
            <delta_ts>2021-10-21 20:48:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232129-20211021202444.patch</filename>
            <type>text/plain</type>
            <size>135996</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYzMmI5ODlkM2IzZmVlZDQ5ZTA1MjMx
Yzk4MjIyNDk0ZjU2NDcyMjEuLmMxZTVlNjM3YjIzZTc2Yzk1ZWNlYzhjN2M4NTU2M2ZkMmQ5MmFj
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTY3IEBACisyMDIxLTEwLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gUmVwbGFjZSBjdXJyZW50IExMVk0gZmxh
bmcncyBJbnQxMjggd2l0aCBhYnNlaWwtY3BwJ3MgSW50MTI4CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIxMjkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBmb3VuZCB0aGF0IGZsYW5nJ3Mgc2lnbmVk
IEludDEyOCBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdGVzdGVkLAorICAgICAgICBhbmQgaXQgaGFz
IHNldmVyYWwgaXNzdWVzIGFib3V0IHNpZ24gZXh0ZW5zaW9uIGFuZCBkaXZpc2lvbi4KKworICAg
ICAgICBJbnN0ZWFkLCB3ZSBpbXBvcnQgYWJzZWlsLWNwcFsxXSdzIGludDEyOCBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgYWJzZWlsLWNwcCBpcyBtb3JlIGJhdHRsZS10ZXN0ZWQsIGFuZCBhYnNl
aWwgaXMgYWxyZWFkeSB1c2VkCisgICAgICAgIGluIFdlYktpdCB0b28gKEFOR0xFIGFuZCBsaWJ3
ZWJydGMgdXNlIGFic2VpbC1jcHAgYXMgdGhlaXIgdXRpbGl0eQorICAgICAgICBsaWJyYXJ5KS4K
KworICAgICAgICBGb3IgQXBwbGUgcmVhZGVycywgYWJzZWlsLWNwcCBmb3IgV2ViS2l0IGlzIGFw
cHJvdmVkIGluIE9TUy0zNTEuCisKKyAgICAgICAgWzFdOiBodHRwczovL2dpdGh1Yi5jb20vYWJz
ZWlsL2Fic2VpbC1jcHAKKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvSW50MTI4LmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbCk6CisgICAg
ICAgIChXVEY6Om9wZXJhdG9yLyk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yJSk6CisgICAgICAg
IChXVEY6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KToKKyAgICAgICAgKiB3dGYvSW50MTI4Lmg6CisgICAgICAgIChXVEY6OlVJbnQxMjhNYXgpOgor
ICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluKToKKyAg
ICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omxvd2VzdCk6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXgpOgorICAg
ICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6ZXBzaWxvbik6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpyb3VuZF9lcnJv
cik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjppbmZp
bml0eSk6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpx
dWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBs
Pjo6c2lnbmFsaW5nX05hTik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjpkZW5vcm1fbWluKToKKyAgICAgICAgKFdURjo6SW50MTI4TWF4KToKKyAgICAg
ICAgKFdURjo6SW50MTI4TWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6bWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bG93ZXN0KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bWF4KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJ
bXBsPjo6ZXBzaWxvbik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4
SW1wbD46OnJvdW5kX2Vycm9yKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6aW5maW5pdHkpOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjpxdWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+OjpzaWduYWxpbmdfTmFOKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGVub3JtX21pbik6CisgICAgICAgIChXVEY6Ok1ha2VV
SW50MTI4KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcjw8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcis9
KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RG
OjpVSW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvci89KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yJT0pOgorICAg
ICAgICAoV1RGOjpVSW50MTI4TG93NjQpOgorICAgICAgICAoV1RGOjpVSW50MTI4SGlnaDY0KToK
KyAgICAgICAgKFdURjo6VUludDEyOEltcGw6OlVJbnQxMjhJbXBsKToKKyAgICAgICAgKFdURjo6
VUludDEyOEltcGw6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4
SW1wbDo6b3BlcmF0b3IgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBjaGFyIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6
Om9wZXJhdG9yIGNoYXIxNl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9w
ZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvciBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBs
OjpvcGVyYXRvciBpbnQgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0
b3IgdW5zaWduZWQgaW50IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBs
b25nIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGZsb2F0IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6b3Bl
cmF0b3I+KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciEpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcn4p
OgorICAgICAgICAoV1RGOjpvcGVyYXRvcnwpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciYpOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcl4pOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3Bl
cmF0b3J8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciY9KToKKyAgICAg
ICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yXj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXVEY6OmludDEyOF9p
bnRlcm5hbDo6QWRkUmVzdWx0KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTdWJz
dHJ1Y3RSZXN1bHQpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpV
SW50MTI4SW1wbDo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVy
YXRvci0tKToKKyAgICAgICAgKFdURjo6TWFrZUludDEyOCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKz0p
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yLz0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciU9KToKKyAgICAgICAg
KFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6
Om9wZXJhdG9yJj0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl49KToKKyAg
ICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I8PD0pOgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6Qml0
Q2FzdFRvU2lnbmVkKToKKyAgICAgICAgKFdURjo6SW50MTI4TG93NjQpOgorICAgICAgICAoV1RG
OjpJbnQxMjhIaWdoNjQpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKToK
KyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6Oklu
dDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMTZfdCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1w
bDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3Igc2hvcnQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJ
bXBsOjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIHVuc2lnbmVkIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciB1
bnNpZ25lZCBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3Ig
bG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0
b3IgZmxvYXQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBkb3Vi
bGUgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJs
ZSBjb25zdCk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6U2lnbmVkQWRkUmVzdWx0
KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTaWduZWRTdWJzdHJ1Y3RSZXN1bHQp
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3ItLSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yKyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9y
fiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yISBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIHN0ZDo6dWlu
dDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRv
ciBzdGQ6OmludDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBs
OjpoaWdoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6bG93IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3ImIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgfCAgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl4gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcjw8IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I+PiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yJSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPD0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6SW50MTI4SW1wbDo6b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OkludDEyOEltcGw6Om9wZXJhdG9yPj0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvcj4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpsZWFkaW5nWmVyb2VzIGNvbnN0KTogRGVsZXRlZC4KKwogMjAyMS0xMC0yMSAgQWRp
dHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBFbmFi
bGUgYWNjZW50LWNvbG9yIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDNlYzAzOTFmN2M3MzdhM2FmMTYyNDczNmJiODUxMmE1MmQ3YjFlNjUu
LmU4MTAwMGRkMGViMWQxMzg4YjdiZmMwZWEyYmQyZGVjYzU3MDk0OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc5LDYgKzE3OSw3IEBACiAJCUUzMTQ5
QTM4MjI4QkI0MkMwMEJGQTZDNyAvKiBSZWZDb3VudGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTAyMENDNjFFQjAwQTAzRENE
IC8qIFJlZkNvdW50ZWRBcnJheS5jcHAgKi87IH07CiAJCUUzMTQ5QTM5MjI4QkI0MzUwMEJGQTZD
NyAvKiBWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5NUI2MzQyMENCNTNDMTAwNDc5NjM1IC8qIFZlY3Rvci5jcHAgKi87IH07CiAJCUUz
MTQ5QTNCMjI4QkRDQUMwMEJGQTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMTQ5QTNBMjI4QkRDQUIwMEJG
QTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAqLzsgfTsKKwkJRTMzNjY3NEEyNzIyNTUxMTAw
MjU5MTIyIC8qIEludDEyOC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzM2Njc0OTI3MjI1NTA5MDAyNTkxMjIgLyogSW50MTI4LmNwcCAqLzsgfTsK
IAkJRTM3RTk2NTQyNzAyQUQwQjAwRTFDMzZBIC8qIEFwcHJveGltYXRlVGltZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzdFOTY1MjI3MDJBRDA3
MDBFMUMzNkEgLyogQXBwcm94aW1hdGVUaW1lLmNwcCAqLzsgfTsKIAkJRTM4ODg4NkYyMEM5MDk1
MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM4ODg4NkQyMEM5MDk1MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wu
Y3BwICovOyB9OwogCQlFMzhDNDEyODFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzhDNDEyNjFFQjRF
MDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi87IH07CkBAIC03NTQsNiArNzU1LDcgQEAKIAkJ
RTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RI
YXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAyRDAwMzRBMDkyIC8qIE5ha2VkUmVmLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ha2VkUmVmLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW50MTI4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJsZUxhbWJkYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNENEMEQwMjI4MTBBMDIwMDIwRDI5OSAvKiBQYWNrZWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTI1LDYgKzExMjcsNyBAQAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxp
bmVBU00uaCAqLywKIAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmgg
Ki8sCiAJCQkJNTE4MkMyMkMxRjJCQzdFNjAwNTlCQTdDIC8qIEluc3RhbmNlQ291bnRlZC5oICov
LAorCQkJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3BwICovLAogCQkJCUY2
RDY3RDMyMjZGOTAxNDIwMDZFMDM0OSAvKiBJbnQxMjguaCAqLywKIAkJCQkzM0ZENDgxMTI2NUNC
MzgwMDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLywKIAkJCQkwRjdFQjg1QjFGQThG
RjQxMDBGMUFCQ0IgLyogSXNvTWFsbG9jLmggKi8sCkBAIC0xNzczLDYgKzE3NzYsNyBAQAogCQkJ
CUE4QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTNCNUI0NEUyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51bWJlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFM0JFMDlBNzI0QTU4NTREMDA5REYyQjQgLyogSUNVSGVscGVycy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlFMzM2Njc0QTI3MjI1NTExMDAyNTkxMjIgLyogSW50MTI4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdBMDUwOTNGMUZCOURDQzUwMEIzM0ZCOCAvKiBKU09OVmFsdWVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzQTMyQkM0MUZDODMwRTIwMDdEN0U3NiAvKiBKU1Zh
bHVlTWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQkNGQzQwMUY2MUQxMzAwMEM5MjIy
QyAvKiBMYW5ndWFnZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NGUzOGFhYTkzMGQ0MTA3MjdlZDM3NDliMmM3NDEyMjM4ZDZhY2FiNS4uYjRmNDczODlkODYwMGI0
ODFkNjQ1Y2UzMWI2N2E3MTQ3YzY3MDI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTQyNSw2
ICs0MjUsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBHcmVnb3JpYW5EYXRlVGltZS5jcHAKICAg
ICBIYXNoVGFibGUuY3BwCiAgICAgSGV4TnVtYmVyLmNwcAorICAgIEludDEyOC5oCiAgICAgSlNP
TlZhbHVlcy5jcHAKICAgICBKU1ZhbHVlTWFsbG9jLmNwcAogICAgIExhbmd1YWdlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW50MTI4LmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ludDEy
OC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjA5Yjg1OWU3ZTljZTlmMzhhN2YyMGE5MWQ0ODRjYjA2YTliZWVl
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ludDEyOC5jcHAKQEAgLTAsMCAr
MSwzNzIgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBBYnNlaWwgQXV0aG9ycy4KKy8vCisvLyBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorLy8KKy8vICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
Ky8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0ludDEyOC5oPgorCisjaW5jbHVkZSA8c3Rk
ZGVmLmg+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxpb21hbmlwPgorI2luY2x1ZGUg
PG9zdHJlYW0+ICAvLyBOT0xJTlQocmVhZGFiaWxpdHkvc3RyZWFtcykKKyNpbmNsdWRlIDxzc3Ry
ZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIHsKKwor
Ly8gUmV0dXJucyB0aGUgMC1iYXNlZCBwb3NpdGlvbiBvZiB0aGUgbGFzdCBzZXQgYml0IChpLmUu
LCBtb3N0IHNpZ25pZmljYW50IGJpdCkKKy8vIGluIHRoZSBnaXZlbiBVSW50MTI4SW1wbC4gVGhl
IGFyZ3VtZW50IGlzIG5vdCAwLgorLy8KKy8vIEZvciBleGFtcGxlOgorLy8gICBHaXZlbjogNSAo
ZGVjaW1hbCkgPT0gMTAxIChiaW5hcnkpCisvLyAgIFJldHVybnM6IDIKK0FMV0FZU19JTkxJTkUg
aW50IEZsczEyOChVSW50MTI4SW1wbCBuKSB7CisgIGlmICh1aW50NjRfdCBoaSA9IFVJbnQxMjhI
aWdoNjQobikpIHsKKyAgICBBU1NFUlQoaGkgIT0gMCk7CisgICAgcmV0dXJuIDEyNyAtIGNseiho
aSk7CisgIH0KKyAgY29uc3QgdWludDY0X3QgbG93ID0gVUludDEyOExvdzY0KG4pOworICBBU1NF
UlQobG93ICE9IDApOworICByZXR1cm4gNjMgLSBjbHoobG93KTsKK30KKworLy8gTG9uZyBkaXZp
c2lvbi9tb2R1bG8gZm9yIFVJbnQxMjhJbXBsIGltcGxlbWVudGVkIHVzaW5nIHRoZSBzaGlmdC1z
dWJ0cmFjdAorLy8gZGl2aXNpb24gYWxnb3JpdGhtIGFkYXB0ZWQgZnJvbToKKy8vIGh0dHBzOi8v
c3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUzODYzNzcvZGl2aXNpb24td2l0aG91dC11c2lu
ZworaW5saW5lIHZvaWQgRGl2TW9kSW1wbChVSW50MTI4SW1wbCBkaXZpZGVuZCwgVUludDEyOElt
cGwgZGl2aXNvciwgVUludDEyOEltcGwqIHF1b3RpZW50X3JldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgVUludDEyOEltcGwqIHJlbWFpbmRlcl9yZXQpIHsKKyAgYXNzZXJ0KGRpdmlzb3IgIT0g
MCk7CisKKyAgaWYgKGRpdmlzb3IgPiBkaXZpZGVuZCkgeworICAgICpxdW90aWVudF9yZXQgPSAw
OworICAgICpyZW1haW5kZXJfcmV0ID0gZGl2aWRlbmQ7CisgICAgcmV0dXJuOworICB9CisKKyAg
aWYgKGRpdmlzb3IgPT0gZGl2aWRlbmQpIHsKKyAgICAqcXVvdGllbnRfcmV0ID0gMTsKKyAgICAq
cmVtYWluZGVyX3JldCA9IDA7CisgICAgcmV0dXJuOworICB9CisKKyAgVUludDEyOEltcGwgZGVu
b21pbmF0b3IgPSBkaXZpc29yOworICBVSW50MTI4SW1wbCBxdW90aWVudCA9IDA7CisKKyAgLy8g
TGVmdCBhbGlnbnMgdGhlIE1TQiBvZiB0aGUgZGVub21pbmF0b3IgYW5kIHRoZSBkaXZpZGVuZC4K
KyAgY29uc3QgaW50IHNoaWZ0ID0gRmxzMTI4KGRpdmlkZW5kKSAtIEZsczEyOChkZW5vbWluYXRv
cik7CisgIGRlbm9taW5hdG9yIDw8PSBzaGlmdDsKKworICAvLyBVc2VzIHNoaWZ0LXN1YnRyYWN0
IGFsZ29yaXRobSB0byBkaXZpZGUgZGl2aWRlbmQgYnkgZGVub21pbmF0b3IuIFRoZQorICAvLyBy
ZW1haW5kZXIgd2lsbCBiZSBsZWZ0IGluIGRpdmlkZW5kLgorICBmb3IgKGludCBpID0gMDsgaSA8
PSBzaGlmdDsgKytpKSB7CisgICAgcXVvdGllbnQgPDw9IDE7CisgICAgaWYgKGRpdmlkZW5kID49
IGRlbm9taW5hdG9yKSB7CisgICAgICBkaXZpZGVuZCAtPSBkZW5vbWluYXRvcjsKKyAgICAgIHF1
b3RpZW50IHw9IDE7CisgICAgfQorICAgIGRlbm9taW5hdG9yID4+PSAxOworICB9CisKKyAgKnF1
b3RpZW50X3JldCA9IHF1b3RpZW50OworICAqcmVtYWluZGVyX3JldCA9IGRpdmlkZW5kOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1VJbnQxMjhJbXBsIE1ha2VVSW50MTI4RnJvbUZsb2F0
KFQgdikgeworICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVl
LCAiIik7CisKKyAgLy8gUm91bmRpbmcgYmVoYXZpb3IgaXMgdG93YXJkcyB6ZXJvLCBzYW1lIGFz
IGZvciBidWlsdC1pbiB0eXBlcy4KKworICAvLyBVbmRlZmluZWQgYmVoYXZpb3IgaWYgdiBpcyBO
YU4gb3IgY2Fubm90IGZpdCBpbnRvIFVJbnQxMjhJbXBsLgorICBhc3NlcnQoc3RkOjppc2Zpbml0
ZSh2KSAmJiB2ID4gLTEgJiYKKyAgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXhf
ZXhwb25lbnQgPD0gMTI4IHx8CisgICAgICAgICAgdiA8IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8
VD4oMSksIDEyOCkpKTsKKworICBpZiAodiA+PSBzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KDEp
LCA2NCkpIHsKKyAgICB1aW50NjRfdCBoaSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Omxk
ZXhwKHYsIC02NCkpOworICAgIHVpbnQ2NF90IGxvID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYg
LSBzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KGhpKSwgNjQpKTsKKyAgICByZXR1cm4gTWFrZVVJ
bnQxMjgoaGksIGxvKTsKKyAgfQorCisgIHJldHVybiBNYWtlVUludDEyOCgwLCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odikpOworfQorCisjaWYgZGVmaW5lZChfX2NsYW5nX18pICYmICFkZWZpbmVk
KF9fU1NFM19fKQorLy8gV29ya2Fyb3VuZCBmb3IgY2xhbmcgYnVnOiBodHRwczovL2J1Z3MubGx2
bS5vcmcvc2hvd19idWcuY2dpP2lkPTM4Mjg5CisvLyBDYXN0aW5nIGZyb20gbG9uZyBkb3VibGUg
dG8gdWludDY0X3QgaXMgbWlzY29tcGlsZWQgYW5kIGRyb3BzIGJpdHMuCisvLyBJdCBpcyBtb3Jl
IHdvcmssIHNvIG9ubHkgdXNlIHdoZW4gd2UgbmVlZCB0aGUgd29ya2Fyb3VuZC4KK1VJbnQxMjhJ
bXBsIE1ha2VVSW50MTI4RnJvbUZsb2F0KGxvbmcgZG91YmxlIHYpIHsKKyAgLy8gR28gNTAgYml0
cyBhdCBhIHRpbWUsIHRoYXQgZml0cyBpbiBhIGRvdWJsZQorICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZGlnaXRzID49IDUwLCAiIik7CisgIHN0YXRpY19hc3Nl
cnQoc3RkOjpudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46OmRpZ2l0cyA8PSAxNTAsICIiKTsK
KyAgLy8gVW5kZWZpbmVkIGJlaGF2aW9yIGlmIHYgaXMgbm90IGZpbml0ZSBvciBjYW5ub3QgZml0
IGludG8gVUludDEyOEltcGwuCisgIGFzc2VydChzdGQ6OmlzZmluaXRlKHYpICYmIHYgPiAtMSAm
JiB2IDwgc3RkOjpsZGV4cCgxLjBMLCAxMjgpKTsKKworICB2ID0gc3RkOjpsZGV4cCh2LCAtMTAw
KTsKKyAgdWludDY0X3QgdzAgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6OnRydW5jKHYpKSk7CisgIHYgPSBzdGQ6OmxkZXhwKHYgLSBzdGF0aWNfY2FzdDxk
b3VibGU+KHcwKSwgNTApOworICB1aW50NjRfdCB3MSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihz
dGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6dHJ1bmModikpKTsKKyAgdiA9IHN0ZDo6bGRleHAodiAt
IHN0YXRpY19jYXN0PGRvdWJsZT4odzEpLCA1MCk7CisgIHVpbnQ2NF90IHcyID0gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjp0cnVuYyh2KSkpOworICByZXR1
cm4gKHN0YXRpY19jYXN0PFVJbnQxMjhJbXBsPih3MCkgPDwgMTAwKSB8IChzdGF0aWNfY2FzdDxV
SW50MTI4SW1wbD4odzEpIDw8IDUwKSB8CisgICAgICAgICBzdGF0aWNfY2FzdDxVSW50MTI4SW1w
bD4odzIpOworfQorI2VuZGlmICAvLyBfX2NsYW5nX18gJiYgIV9fU1NFM19fCit9ICAvLyBuYW1l
c3BhY2UKKworVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKGZsb2F0IHYpIDogVUludDEyOEltcGwo
TWFrZVVJbnQxMjhGcm9tRmxvYXQodikpIHt9CitVSW50MTI4SW1wbDo6VUludDEyOEltcGwoZG91
YmxlIHYpIDogVUludDEyOEltcGwoTWFrZVVJbnQxMjhGcm9tRmxvYXQodikpIHt9CitVSW50MTI4
SW1wbDo6VUludDEyOEltcGwobG9uZyBkb3VibGUgdikgOiBVSW50MTI4SW1wbChNYWtlVUludDEy
OEZyb21GbG9hdCh2KSkge30KKworVUludDEyOEltcGwgb3BlcmF0b3IvKFVJbnQxMjhJbXBsIGxo
cywgVUludDEyOEltcGwgcmhzKSB7CisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKyAgVUlu
dDEyOEltcGwgcmVtYWluZGVyID0gMDsKKyAgRGl2TW9kSW1wbChsaHMsIHJocywgJnF1b3RpZW50
LCAmcmVtYWluZGVyKTsKKyAgcmV0dXJuIHF1b3RpZW50OworfQorCitVSW50MTI4SW1wbCBvcGVy
YXRvciUoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpIHsKKyAgVUludDEyOEltcGwg
cXVvdGllbnQgPSAwOworICBVSW50MTI4SW1wbCByZW1haW5kZXIgPSAwOworICBEaXZNb2RJbXBs
KGxocywgcmhzLCAmcXVvdGllbnQsICZyZW1haW5kZXIpOworICByZXR1cm4gcmVtYWluZGVyOwor
fQorCituYW1lc3BhY2UgeworCitzdGQ6OnN0cmluZyBVSW50MTI4VG9Gb3JtYXR0ZWRTdHJpbmco
VUludDEyOEltcGwgdiwgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgZmxhZ3MpIHsKKyAgLy8gU2Vs
ZWN0IGEgZGl2aXNvciB3aGljaCBpcyB0aGUgbGFyZ2VzdCBwb3dlciBvZiB0aGUgYmFzZSA8IDJe
NjQuCisgIFVJbnQxMjhJbXBsIGRpdjsKKyAgaW50IGRpdl9iYXNlX2xvZzsKKyAgc3dpdGNoIChm
bGFncyAmIHN0ZDo6aW9zOjpiYXNlZmllbGQpIHsKKyAgICBjYXNlIHN0ZDo6aW9zOjpoZXg6Cisg
ICAgICBkaXYgPSAweDEwMDAwMDAwMDAwMDAwMDA7ICAvLyAxNl4xNQorICAgICAgZGl2X2Jhc2Vf
bG9nID0gMTU7CisgICAgICBicmVhazsKKyAgICBjYXNlIHN0ZDo6aW9zOjpvY3Q6CisgICAgICBk
aXYgPSAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDsgIC8vIDheMjEKKyAgICAgIGRpdl9iYXNlX2xv
ZyA9IDIxOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogIC8vIHN0ZDo6aW9zOjpkZWMKKyAg
ICAgIGRpdiA9IDEwMDAwMDAwMDAwMDAwMDAwMDAwdTsgIC8vIDEwXjE5CisgICAgICBkaXZfYmFz
ZV9sb2cgPSAxOTsKKyAgICAgIGJyZWFrOworICB9CisKKyAgLy8gTm93IHBpZWNlIHRvZ2V0aGVy
IHRoZSBVSW50MTI4SW1wbCByZXByZXNlbnRhdGlvbiBmcm9tIHRocmVlIGNodW5rcyBvZiB0aGUK
KyAgLy8gb3JpZ2luYWwgdmFsdWUsIGVhY2ggbGVzcyB0aGFuICJkaXYiIGFuZCB0aGVyZWZvcmUg
cmVwcmVzZW50YWJsZSBhcyBhCisgIC8vIHVpbnQ2NF90LgorICBzdGQ6Om9zdHJpbmdzdHJlYW0g
b3M7CisgIHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzIGNvcHlfbWFzayA9CisgICAgICBzdGQ6Omlv
czo6YmFzZWZpZWxkIHwgc3RkOjppb3M6OnNob3diYXNlIHwgc3RkOjppb3M6OnVwcGVyY2FzZTsK
KyAgb3Muc2V0ZihmbGFncyAmIGNvcHlfbWFzaywgY29weV9tYXNrKTsKKyAgVUludDEyOEltcGwg
aGlnaCA9IHY7CisgIFVJbnQxMjhJbXBsIGxvdzsKKyAgRGl2TW9kSW1wbChoaWdoLCBkaXYsICZo
aWdoLCAmbG93KTsKKyAgVUludDEyOEltcGwgbWlkOworICBEaXZNb2RJbXBsKGhpZ2gsIGRpdiwg
JmhpZ2gsICZtaWQpOworICBpZiAoVUludDEyOExvdzY0KGhpZ2gpICE9IDApIHsKKyAgICBvcyA8
PCBVSW50MTI4TG93NjQoaGlnaCk7CisgICAgb3MgPDwgc3RkOjpub3Nob3diYXNlIDw8IHN0ZDo6
c2V0ZmlsbCgnMCcpIDw8IHN0ZDo6c2V0dyhkaXZfYmFzZV9sb2cpOworICAgIG9zIDw8IFVJbnQx
MjhMb3c2NChtaWQpOworICAgIG9zIDw8IHN0ZDo6c2V0dyhkaXZfYmFzZV9sb2cpOworICB9IGVs
c2UgaWYgKFVJbnQxMjhMb3c2NChtaWQpICE9IDApIHsKKyAgICBvcyA8PCBVSW50MTI4TG93NjQo
bWlkKTsKKyAgICBvcyA8PCBzdGQ6Om5vc2hvd2Jhc2UgPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwg
c3RkOjpzZXR3KGRpdl9iYXNlX2xvZyk7CisgIH0KKyAgb3MgPDwgVUludDEyOExvdzY0KGxvdyk7
CisgIHJldHVybiBvcy5zdHIoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK3N0ZDo6b3N0cmVh
bSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBVSW50MTI4SW1wbCB2KSB7CisgIHN0ZDo6
aW9zX2Jhc2U6OmZtdGZsYWdzIGZsYWdzID0gb3MuZmxhZ3MoKTsKKyAgc3RkOjpzdHJpbmcgcmVw
ID0gVUludDEyOFRvRm9ybWF0dGVkU3RyaW5nKHYsIGZsYWdzKTsKKworICAvLyBBZGQgdGhlIHJl
cXVpc2l0ZSBwYWRkaW5nLgorICBzdGQ6OnN0cmVhbXNpemUgd2lkdGggPSBvcy53aWR0aCgwKTsK
KyAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpID4gcmVwLnNpemUoKSkgeworICAgIHN0
ZDo6aW9zOjpmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZsYWdzICYgc3RkOjppb3M6OmFkanVzdGZp
ZWxkOworICAgIGlmIChhZGp1c3RmaWVsZCA9PSBzdGQ6Omlvczo6bGVmdCkgeworICAgICAgcmVw
LmFwcGVuZCh3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7CisgICAgfSBlbHNlIGlmIChh
ZGp1c3RmaWVsZCA9PSBzdGQ6Omlvczo6aW50ZXJuYWwgJiYKKyAgICAgICAgICAgICAgIChmbGFn
cyAmIHN0ZDo6aW9zOjpzaG93YmFzZSkgJiYKKyAgICAgICAgICAgICAgIChmbGFncyAmIHN0ZDo6
aW9zOjpiYXNlZmllbGQpID09IHN0ZDo6aW9zOjpoZXggJiYgdiAhPSAwKSB7CisgICAgICByZXAu
aW5zZXJ0KDIsIHdpZHRoIC0gcmVwLnNpemUoKSwgb3MuZmlsbCgpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgcmVwLmluc2VydCgwLCB3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7CisgICAg
fQorICB9CisKKyAgcmV0dXJuIG9zIDw8IHJlcDsKK30KKworbmFtZXNwYWNlIHsKKworVUludDEy
OEltcGwgVW5zaWduZWRBYnNvbHV0ZVZhbHVlKEludDEyOEltcGwgdikgeworICAvLyBDYXN0IHRv
IFVJbnQxMjhJbXBsIGJlZm9yZSBwb3NzaWJseSBuZWdhdGluZyBiZWNhdXNlIC1JbnQxMjhNaW4o
KSBpcyB1bmRlZmluZWQuCisgIHJldHVybiBJbnQxMjhIaWdoNjQodikgPCAwID8gLVVJbnQxMjhJ
bXBsKHYpIDogVUludDEyOEltcGwodik7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCituYW1lc3Bh
Y2UgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0ludDEyOEltcGwgTWFrZUludDEyOEZyb21G
bG9hdChUIHYpIHsKKyAgLy8gQ29udmVyc2lvbiB3aGVuIHYgaXMgTmFOIG9yIGNhbm5vdCBmaXQg
aW50byBJbnQxMjhJbXBsIHdvdWxkIGJlIHVuZGVmaW5lZAorICAvLyBiZWhhdmlvciBpZiB1c2lu
ZyBhbiBpbnRyaW5zaWMgMTI4LWJpdCBpbnRlZ2VyLgorICBhc3NlcnQoc3RkOjppc2Zpbml0ZSh2
KSAmJiAoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4X2V4cG9uZW50IDw9IDEyNyB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYgPj0gLXN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8
VD4oMSksIDEyNykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2IDwgc3RkOjps
ZGV4cChzdGF0aWNfY2FzdDxUPigxKSwgMTI3KSkpKTsKKworICAvLyBXZSBtdXN0IGNvbnZlcnQg
dGhlIGFic29sdXRlIHZhbHVlIGFuZCB0aGVuIG5lZ2F0ZSBhcyBuZWVkZWQsIGJlY2F1c2UKKyAg
Ly8gZmxvYXRpbmcgcG9pbnQgdHlwZXMgYXJlIHR5cGljYWxseSBzaWduLW1hZ25pdHVkZS4gT3Ro
ZXJ3aXNlLCB0aGUKKyAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBoaWdoIGFuZCBsb3cgNjQg
Yml0cyB3aGVuIGludGVycHJldGVkIGFzIHR3bydzCisgIC8vIGNvbXBsZW1lbnQgb3ZlcndoZWxt
cyB0aGUgcHJlY2lzaW9uIG9mIHRoZSBtYW50aXNzYS4KKyAgVUludDEyOEltcGwgcmVzdWx0ID0g
diA8IDAgPyAtTWFrZVVJbnQxMjhGcm9tRmxvYXQoLXYpIDogTWFrZVVJbnQxMjhGcm9tRmxvYXQo
dik7CisgIHJldHVybiBNYWtlSW50MTI4KGludDEyOF9pbnRlcm5hbDo6Qml0Q2FzdFRvU2lnbmVk
KFVJbnQxMjhIaWdoNjQocmVzdWx0KSksCisgICAgICAgICAgICAgICAgICAgIFVJbnQxMjhMb3c2
NChyZXN1bHQpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK0ludDEyOEltcGw6OkludDEyOElt
cGwoZmxvYXQgdikgOiBJbnQxMjhJbXBsKE1ha2VJbnQxMjhGcm9tRmxvYXQodikpIHt9CitJbnQx
MjhJbXBsOjpJbnQxMjhJbXBsKGRvdWJsZSB2KSA6IEludDEyOEltcGwoTWFrZUludDEyOEZyb21G
bG9hdCh2KSkge30KK0ludDEyOEltcGw6OkludDEyOEltcGwobG9uZyBkb3VibGUgdikgOiBJbnQx
MjhJbXBsKE1ha2VJbnQxMjhGcm9tRmxvYXQodikpIHt9CisKK0ludDEyOEltcGwgb3BlcmF0b3Iv
KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICBhc3NlcnQobGhzICE9IEludDEy
OE1pbigpIHx8IHJocyAhPSAtMSk7ICAvLyBVQiBvbiB0d28ncyBjb21wbGVtZW50LgorCisgIFVJ
bnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKyAgVUludDEyOEltcGwgcmVtYWluZGVyID0gMDsKKyAg
RGl2TW9kSW1wbChVbnNpZ25lZEFic29sdXRlVmFsdWUobGhzKSwgVW5zaWduZWRBYnNvbHV0ZVZh
bHVlKHJocyksCisgICAgICAgICAgICAgJnF1b3RpZW50LCAmcmVtYWluZGVyKTsKKyAgaWYgKChJ
bnQxMjhIaWdoNjQobGhzKSA8IDApICE9IChJbnQxMjhIaWdoNjQocmhzKSA8IDApKSBxdW90aWVu
dCA9IC1xdW90aWVudDsKKyAgcmV0dXJuIE1ha2VJbnQxMjgoaW50MTI4X2ludGVybmFsOjpCaXRD
YXN0VG9TaWduZWQoVUludDEyOEhpZ2g2NChxdW90aWVudCkpLAorICAgICAgICAgICAgICAgICAg
ICBVSW50MTI4TG93NjQocXVvdGllbnQpKTsKK30KKworSW50MTI4SW1wbCBvcGVyYXRvciUoSW50
MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIGFzc2VydChsaHMgIT0gSW50MTI4TWlu
KCkgfHwgcmhzICE9IC0xKTsgIC8vIFVCIG9uIHR3bydzIGNvbXBsZW1lbnQuCisKKyAgVUludDEy
OEltcGwgcXVvdGllbnQgPSAwOworICBVSW50MTI4SW1wbCByZW1haW5kZXIgPSAwOworICBEaXZN
b2RJbXBsKFVuc2lnbmVkQWJzb2x1dGVWYWx1ZShsaHMpLCBVbnNpZ25lZEFic29sdXRlVmFsdWUo
cmhzKSwKKyAgICAgICAgICAgICAmcXVvdGllbnQsICZyZW1haW5kZXIpOworICBpZiAoSW50MTI4
SGlnaDY0KGxocykgPCAwKSByZW1haW5kZXIgPSAtcmVtYWluZGVyOworICByZXR1cm4gTWFrZUlu
dDEyOChpbnQxMjhfaW50ZXJuYWw6OkJpdENhc3RUb1NpZ25lZChVSW50MTI4SGlnaDY0KHJlbWFp
bmRlcikpLAorICAgICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQocmVtYWluZGVyKSk7Cit9
CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBJbnQxMjhJbXBs
IHYpIHsKKyAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgZmxhZ3MgPSBvcy5mbGFncygpOworICBz
dGQ6OnN0cmluZyByZXA7CisKKyAgLy8gQWRkIHRoZSBzaWduIGlmIG5lZWRlZC4KKyAgYm9vbCBw
cmludF9hc19kZWNpbWFsID0KKyAgICAgIChmbGFncyAmIHN0ZDo6aW9zOjpiYXNlZmllbGQpID09
IHN0ZDo6aW9zOjpkZWMgfHwKKyAgICAgIChmbGFncyAmIHN0ZDo6aW9zOjpiYXNlZmllbGQpID09
IHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzKCk7CisgIGlmIChwcmludF9hc19kZWNpbWFsKSB7Cisg
ICAgaWYgKEludDEyOEhpZ2g2NCh2KSA8IDApIHsKKyAgICAgIHJlcCA9ICItIjsKKyAgICB9IGVs
c2UgaWYgKGZsYWdzICYgc3RkOjppb3M6OnNob3dwb3MpIHsKKyAgICAgIHJlcCA9ICIrIjsKKyAg
ICB9CisgIH0KKworICByZXAuYXBwZW5kKFVJbnQxMjhUb0Zvcm1hdHRlZFN0cmluZygKKyAgICAg
IHByaW50X2FzX2RlY2ltYWwgPyBVbnNpZ25lZEFic29sdXRlVmFsdWUodikgOiBVSW50MTI4SW1w
bCh2KSwgb3MuZmxhZ3MoKSkpOworCisgIC8vIEFkZCB0aGUgcmVxdWlzaXRlIHBhZGRpbmcuCisg
IHN0ZDo6c3RyZWFtc2l6ZSB3aWR0aCA9IG9zLndpZHRoKDApOworICBpZiAoc3RhdGljX2Nhc3Q8
c2l6ZV90Pih3aWR0aCkgPiByZXAuc2l6ZSgpKSB7CisgICAgc3dpdGNoIChmbGFncyAmIHN0ZDo6
aW9zOjphZGp1c3RmaWVsZCkgeworICAgICAgY2FzZSBzdGQ6Omlvczo6bGVmdDoKKyAgICAgICAg
cmVwLmFwcGVuZCh3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBzdGQ6Omlvczo6aW50ZXJuYWw6CisgICAgICAgIGlmIChwcmludF9hc19k
ZWNpbWFsICYmIChyZXBbMF0gPT0gJysnIHx8IHJlcFswXSA9PSAnLScpKSB7CisgICAgICAgICAg
cmVwLmluc2VydCgxLCB3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoKGZsYWdzICYgc3RkOjppb3M6OmJhc2VmaWVsZCkgPT0gc3RkOjppb3M6OmhleCAm
JgorICAgICAgICAgICAgICAgICAgIChmbGFncyAmIHN0ZDo6aW9zOjpzaG93YmFzZSkgJiYgdiAh
PSAwKSB7CisgICAgICAgICAgcmVwLmluc2VydCgyLCB3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZp
bGwoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmVwLmluc2VydCgwLCB3aWR0aCAt
IHJlcC5zaXplKCksIG9zLmZpbGwoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OiAgLy8gc3RkOjppb3M6OnJpZ2h0CisgICAgICAgIHJlcC5pbnNlcnQoMCwgd2lk
dGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0K
KworICByZXR1cm4gb3MgPDwgcmVwOworfQorCit9ICAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVz
cGFjZSBzdGQgeworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1w
bD46OmlzX3NwZWNpYWxpemVkOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpV
SW50MTI4SW1wbD46OmlzX3NpZ25lZDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdU
Rjo6VUludDEyOEltcGw+Ojppc19pbnRlZ2VyOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1p
dHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX2V4YWN0OworY29uc3RleHByIGJvb2wgbnVtZXJpY19s
aW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omhhc19pbmZpbml0eTsKK2NvbnN0ZXhwciBib29sIG51
bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjpoYXNfcXVpZXRfTmFOOworY29uc3RleHBy
IGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omhhc19zaWduYWxpbmdfTmFO
OworY29uc3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQx
MjhJbXBsPjo6aGFzX2Rlbm9ybTsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6
VUludDEyOEltcGw+OjpoYXNfZGVub3JtX2xvc3M7Citjb25zdGV4cHIgZmxvYXRfcm91bmRfc3R5
bGUgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OnJvdW5kX3N0eWxlOworY29uc3Rl
eHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX2llYzU1OTsKK2Nv
bnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19ib3VuZGVk
OworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX21v
ZHVsbzsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmRp
Z2l0czsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmRp
Z2l0czEwOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6
bWF4X2RpZ2l0czEwOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJ
bXBsPjo6cmFkaXg7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOElt
cGw+OjptaW5fZXhwb25lbnQ7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjptaW5fZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8
V1RGOjpVSW50MTI4SW1wbD46Om1heF9leHBvbmVudDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19s
aW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heF9leHBvbmVudDEwOworY29uc3RleHByIGJvb2wg
bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OnRyYXBzOworY29uc3RleHByIGJvb2wg
bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OnRpbnluZXNzX2JlZm9yZTsKKworY29u
c3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfc3BlY2lhbGl6
ZWQ7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojppc19z
aWduZWQ7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojpp
c19pbnRlZ2VyOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBs
Pjo6aXNfZXhhY3Q7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOElt
cGw+OjpoYXNfaW5maW5pdHk7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6Oklu
dDEyOEltcGw+OjpoYXNfcXVpZXRfTmFOOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8
V1RGOjpJbnQxMjhJbXBsPjo6aGFzX3NpZ25hbGluZ19OYU47Citjb25zdGV4cHIgZmxvYXRfZGVu
b3JtX3N0eWxlIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Omhhc19kZW5vcm07Citj
b25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjpoYXNfZGVub3Jt
X2xvc3M7Citjb25zdGV4cHIgZmxvYXRfcm91bmRfc3R5bGUgbnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6cm91bmRfc3R5bGU7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+Ojppc19pZWM1NTk7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0
czxXVEY6OkludDEyOEltcGw+Ojppc19ib3VuZGVkOworY29uc3RleHByIGJvb2wgbnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfbW9kdWxvOworY29uc3RleHByIGludCBudW1lcmlj
X2xpbWl0czxXVEY6OkludDEyOEltcGw+OjpkaWdpdHM7Citjb25zdGV4cHIgaW50IG51bWVyaWNf
bGltaXRzPFdURjo6SW50MTI4SW1wbD46OmRpZ2l0czEwOworY29uc3RleHByIGludCBudW1lcmlj
X2xpbWl0czxXVEY6OkludDEyOEltcGw+OjptYXhfZGlnaXRzMTA7Citjb25zdGV4cHIgaW50IG51
bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OnJhZGl4OworY29uc3RleHByIGludCBudW1l
cmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjptaW5fZXhwb25lbnQ7Citjb25zdGV4cHIgaW50
IG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Om1pbl9leHBvbmVudDEwOworY29uc3Rl
eHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjptYXhfZXhwb25lbnQ7Citj
b25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Om1heF9leHBvbmVu
dDEwOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6dHJh
cHM7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojp0aW55
bmVzc19iZWZvcmU7Cit9ICAvLyBuYW1lc3BhY2Ugc3RkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9JbnQxMjguaCBiL1NvdXJjZS9XVEYvd3RmL0ludDEyOC5oCmluZGV4IDNiZGIwYTQ1ZWY1
YzQ5YWZlZTJiOWRkZmQzMGE4YWMyNTIwZDYzZmEuLjMyYjRlNDc1OTRmZWFmOGJkNjVhNzY2MGY3
YTI2NzIzYTAzN2EzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ludDEyOC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0ludDEyOC5oCkBAIC0xLDI5MSArMSwxMjg2IEBACi0vLyBUYWtlbiBm
cm9tIExMVk0gUHJvamVjdCwgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAgd2l0aCBMTFZN
IEV4Y2VwdGlvbnMuCi0vLyBTZWUgU291cmNlL1dURi9MSUNFTlNFLUxMVk0udHh0IGZvciBsaWNl
bnNlIGluZm9ybWF0aW9uLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAg
V0lUSCBMTFZNLWV4Y2VwdGlvbgorLy8KKy8vIENvcHlyaWdodCAyMDE3IFRoZSBBYnNlaWwgQXV0
aG9ycy4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g
Mi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLgorLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGaWxlOiBJbnQxMjhJbXBs
LmgKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhpcyBoZWFkZXIgZmlsZSBkZWZp
bmVzIDEyOC1iaXQgaW50ZWdlciB0eXBlcywgYHVpbnQxMjhgIGFuZCBgSW50MTI4SW1wbGAuCisv
LworLy8gVE9ETyhhYnNsLXRlYW0pOiBUaGlzIG1vZHVsZSBpcyBpbmNvbnNpc3RlbnQgYXMgbWFu
eSBpbmxpbmUgYHVpbnQxMjhgIG1ldGhvZHMKKy8vIGFyZSBkZWZpbmVkIGluIHRoaXMgZmlsZSwg
d2hpbGUgbWFueSBpbmxpbmUgYEludDEyOEltcGxgIG1ldGhvZHMgYXJlIGRlZmluZWQgaW4KKy8v
IHRoZSBgaW50MTI4XypfaW50cmluc2ljLmluY2AgZmlsZXMuCisvLwogCi0vLyBQb3J0YWJsZSAx
MjgtYml0IHVuc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYyBmb3IgdXNlIGluIGltcG92ZXJpc2hl
ZAotLy8gQysrIGltcGxlbWVudGF0aW9ucyBsYWNraW5nIF9fdWludDEyOF90LgotCi0vLyBCYXNl
ZCBvbjoKLS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sbHZtL2xsdm0tcHJvamVjdC9ibG9iL2Q0ODBm
OTY4L2ZsYW5nL2luY2x1ZGUvZmxhbmcvQ29tbW9uL3VpbnQxMjguaAorLy8gSW50MTI4LmggYW5k
IEludDEyOC5jcHAgYXJlIGRlcml2ZWQgZnJvbSBhYnNlaWwtY3BwIChodHRwczovL2dpdGh1Yi5j
b20vYWJzZWlsL2Fic2VpbC1jcHApCisvLyBJbXBvcnRlZCByZXZpc2lvbiBpcyBkZGI4NDJmNTgz
ZTU2MGJiZGU0OTdiYzk2Y2ZlYmUyNWY5MDg5ZTExLgorLy8gV2UgYXBwbHkgdGhlIGZvbGxvd2lu
ZyBjaGFuZ2VzLgorLy8gMS4gVXNlIFdURiBtYWNyb3MgaW5zdGVhZCBvZiBBQlNMIG1hY3Jvcy4K
Ky8vIDIuIFJlbW92ZSBhYnNlaWwgSGFzaFRhYmxlIGhhbmRsaW5nCisvLyAzLiBSZW1vdmUgX19p
bnQxMjhfdCBoYW5kbGluZwogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGNhc3NlcnQ+Cisj
aW5jbHVkZSA8Y21hdGg+CiAjaW5jbHVkZSA8Y3N0ZGludD4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0
cz4KLSNpbmNsdWRlIDx3dGYvTGVhZGluZ1plcm9CaXRDb3VudC5oPgorI2luY2x1ZGUgPGNzdHJp
bmc+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1dGls
aXR5PgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgQ09NUElMRVIoTVNWQykKKy8v
IEluIHZlcnkgb2xkIHZlcnNpb25zIG9mIE1TVkMgYW5kIHdoZW4gdGhlIC9aYzp3Y2hhcl90IGZs
YWcgaXMgb2ZmLCB3Y2hhcl90IGlzCisvLyBhIHR5cGVkZWYgZm9yIHVuc2lnbmVkIHNob3J0LiAg
T3RoZXJ3aXNlIHdjaGFyX3QgaXMgbWFwcGVkIHRvIHRoZSBfX3djaGFyX3QKKy8vIGJ1aWx0aW4g
dHlwZS4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIG5vdCB0byBkZWZpbmUgb3BlcmF0b3Igd2NoYXJf
dCgpCisvLyBhbG9uZ3NpZGUgb3BlcmF0b3IgdW5zaWduZWQgc2hvcnQoKSBpbiB0aGVzZSBpbnN0
YW5jZXMuCisjZGVmaW5lIEFCU0xfSU5URVJOQUxfV0NIQVJfVCBfX3djaGFyX3QKKyNpZiBDUFUo
WDg2XzY0KQorI2luY2x1ZGUgPGludHJpbi5oPgorI3ByYWdtYSBpbnRyaW5zaWMoX3VtdWwxMjgp
CisjZW5kaWYgIC8vIGRlZmluZWQoX01fWDY0KQorI2Vsc2UgICAvLyBkZWZpbmVkKF9NU0NfVkVS
KQorI2RlZmluZSBBQlNMX0lOVEVSTkFMX1dDSEFSX1Qgd2NoYXJfdAorI2VuZGlmICAvLyBkZWZp
bmVkKF9NU0NfVkVSKQogCiBuYW1lc3BhY2UgV1RGIHsKIAotdGVtcGxhdGUgPGJvb2wgSVNfU0lH
TkVEID0gZmFsc2U+IGNsYXNzIEludDEyOEltcGwgewotcHVibGljOgotICAgIGNvbnN0ZXhwciBJ
bnQxMjhJbXBsKCkgeyB9Ci0gICAgLy8gVGhpcyBtZWFucyBvZiBkZWZpbml0aW9uIHByb3ZpZGVz
IHNvbWUgcG9ydGFiaWxpdHkgZm9yCi0gICAgLy8gInNpemVfdCIgb3BlcmFuZHMuCi0gICAgY29u
c3RleHByIEludDEyOEltcGwodW5zaWduZWQgbikgOiBsb3dfIHtufSB7IH0KLSAgICBjb25zdGV4
cHIgSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIG4pIDogbG93XyB7bn0geyB9Ci0gICAgY29uc3Rl
eHByIEludDEyOEltcGwodW5zaWduZWQgbG9uZyBsb25nIG4pIDogbG93XyB7bn0geyB9Ci0gICAg
Y29uc3RleHByIEludDEyOEltcGwoaW50IG4pCi0gICAgICAgIDogbG93XyB7c3RhdGljX2Nhc3Q8
c3RkOjp1aW50NjRfdD4obil9Ci0gICAgICAgICwgaGlnaF8gey1zdGF0aWNfY2FzdDxzdGQ6OnVp
bnQ2NF90PihuIDwgMCl9Ci0gICAgeyB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwobG9uZyBu
KQotICAgICAgICA6IGxvd18ge3N0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pfQotICAgICAg
ICAsIGhpZ2hfIHstc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obiA8IDApfQotICAgIHsgfQot
ICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGxvbmcgbG9uZyBuKQotICAgICAgICA6IGxvd18ge3N0
YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pfQotICAgICAgICAsIGhpZ2hfIHstc3RhdGljX2Nh
c3Q8c3RkOjp1aW50NjRfdD4obiA8IDApfQotICAgIHsgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJ
bXBsKGNvbnN0IEludDEyOEltcGwgJikgPSBkZWZhdWx0OwotICAgIGNvbnN0ZXhwciBJbnQxMjhJ
bXBsKEludDEyOEltcGwgJiYpID0gZGVmYXVsdDsKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAm
b3BlcmF0b3I9KGNvbnN0IEludDEyOEltcGwgJikgPSBkZWZhdWx0OwotICAgIGNvbnN0ZXhwciBJ
bnQxMjhJbXBsICZvcGVyYXRvcj0oSW50MTI4SW1wbCAmJikgPSBkZWZhdWx0OwotCi0gICAgY29u
c3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KLSAg
ICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcn4oKSBjb25zdCB7IHJldHVybiB7fmhpZ2hf
LCB+bG93X307IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvci0oKSBjb25zdCB7
IHJldHVybiB+KnRoaXMgKyAxOyB9Ci0gICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWxvd18gJiYgIWhpZ2hfOyB9Ci0gICAgY29uc3RleHByIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBsb3dfIHx8IGhpZ2hfOyB9Ci0gICAgY29uc3Rl
eHByIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6dWludDY0X3QoKSBjb25zdCB7IHJldHVybiBsb3df
OyB9Ci0gICAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6aW50NjRfdCgpIGNvbnN0
IHsgcmV0dXJuIGxvd187IH0KLSAgICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgaW50KCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb3dfKTsgfQotCi0gICAgY29uc3RleHBy
IHN0ZDo6dWludDY0X3QgaGlnaCgpIGNvbnN0IHsgcmV0dXJuIGhpZ2hfOyB9Ci0gICAgY29uc3Rl
eHByIHN0ZDo6dWludDY0X3QgbG93KCkgY29uc3QgeyByZXR1cm4gbG93XzsgfQotCi0gICAgY29u
c3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKygvKnByZWZpeCovKQotICAgIHsKLSAgICAgICAg
KnRoaXMgKz0gMTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIg
SW50MTI4SW1wbCBvcGVyYXRvcisrKGludCAvKnBvc3RmaXgqLykKLSAgICB7Ci0gICAgICAgIElu
dDEyOEltcGwgcmVzdWx0IHsqdGhpc307Ci0gICAgICAgICp0aGlzICs9IDE7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yLS0o
LypwcmVmaXgqLykKLSAgICB7Ci0gICAgICAgICp0aGlzIC09IDE7Ci0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3ItLShpbnQgLypw
b3N0Zml4Ki8pCi0gICAgewotICAgICAgICBJbnQxMjhJbXBsIHJlc3VsdCB7KnRoaXN9OwotICAg
ICAgICAqdGhpcyAtPSAxOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGNv
bnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yJihJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4ge2hpZ2hfICYgdGhhdC5oaWdoXywgbG93XyAmIHRoYXQubG93X307
Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yIHwgKEludDEyOEltcGwg
dGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7aGlnaF8gfCB0aGF0LmhpZ2hfLCBs
b3dfIHwgdGhhdC5sb3dffTsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3JeKEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7aGlnaF8g
XiB0aGF0LmhpZ2hfLCBsb3dfIF4gdGhhdC5sb3dffTsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIg
SW50MTI4SW1wbCBvcGVyYXRvcjw8KEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGF0ID49IDEyOCkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGlm
ICghdGhhdCkKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgc3RkOjp1aW50NjRf
dCBuIHt0aGF0Lmxvd199OwotICAgICAgICBpZiAobiA+PSA2NCkKLSAgICAgICAgICAgIHJldHVy
biB7bG93XyA8PCAobiAtIDY0KSwgMH07Ci0gICAgICAgIHJldHVybiB7KGhpZ2hfIDw8IG4pIHwg
KGxvd18gPj4gKDY0IC0gbikpLCBsb3dfIDw8IG59OwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50
MTI4SW1wbCBvcGVyYXRvcj4+KEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmICh0aGF0ID49IDEyOCkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGlmICgh
dGhhdCkKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgc3RkOjp1aW50NjRfdCBu
IHt0aGF0Lmxvd199OwotICAgICAgICBpZiAobiA+PSA2NCkKLSAgICAgICAgICAgIHJldHVybiB7
MCwgaGlnaF8gPj4gKG4gLSA2NCl9OwotICAgICAgICByZXR1cm4ge2hpZ2hfID4+IG4sIChoaWdo
XyA8PCAoNjQgLSBuKSkgfCAobG93XyA+PiBuKX07Ci0gICAgfQotCi0gICAgY29uc3RleHByIElu
dDEyOEltcGwgb3BlcmF0b3IrKEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHN0ZDo6dWludDY0X3QgbG93ZXIgeyhsb3dfICYgfnRvcEJpdCkgKyAodGhhdC5sb3dfICYgfnRv
cEJpdCl9OwotICAgICAgICBib29sIGNhcnJ5IHsoKGxvd2VyID4+IDYzKSArIChsb3dfID4+IDYz
KSArICh0aGF0Lmxvd18gPj4gNjMpKSA+IDF9OwotICAgICAgICByZXR1cm4ge2hpZ2hfICsgdGhh
dC5oaWdoXyArIGNhcnJ5LCBsb3dfICsgdGhhdC5sb3dffTsKLSAgICB9Ci0gICAgY29uc3RleHBy
IEludDEyOEltcGwgb3BlcmF0b3ItKEludDEyOEltcGwgdGhhdCkgY29uc3QgeyByZXR1cm4gKnRo
aXMgKyAtdGhhdDsgfQotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IqKEludDEy
OEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0ZDo6dWludDY0X3QgbWFzazMyIHsw
eGZmZmZmZmZmfTsKLSAgICAgICAgaWYgKCFoaWdoXyAmJiAhdGhhdC5oaWdoXykgewotICAgICAg
ICAgICAgc3RkOjp1aW50NjRfdCB4MCB7bG93XyAmIG1hc2szMn0sIHgxIHtsb3dfID4+IDMyfTsK
LSAgICAgICAgICAgIHN0ZDo6dWludDY0X3QgeTAge3RoYXQubG93XyAmIG1hc2szMn0sIHkxIHt0
aGF0Lmxvd18gPj4gMzJ9OwotICAgICAgICAgICAgSW50MTI4SW1wbCB4MHkwIHt4MCAqIHkwfSwg
eDB5MSB7eDAgKiB5MX07Ci0gICAgICAgICAgICBJbnQxMjhJbXBsIHgxeTAge3gxICogeTB9LCB4
MXkxIHt4MSAqIHkxfTsKLSAgICAgICAgICAgIHJldHVybiB4MHkwICsgKCh4MHkxICsgeDF5MCkg
PDwgMzIpICsgKHgxeTEgPDwgNjQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1aW50NjRf
dCB4MCB7bG93XyAmIG1hc2szMn0sIHgxIHtsb3dfID4+IDMyfSwgeDIge2hpZ2hfICYgbWFzazMy
fSwKLSAgICAgICAgICAgIHgzIHtoaWdoXyA+PiAzMn07Ci0gICAgICAgIHN0ZDo6dWludDY0X3Qg
eTAge3RoYXQubG93XyAmIG1hc2szMn0sIHkxIHt0aGF0Lmxvd18gPj4gMzJ9LAotICAgICAgICAg
ICAgeTIge3RoYXQuaGlnaF8gJiBtYXNrMzJ9LCB5MyB7dGhhdC5oaWdoXyA+PiAzMn07Ci0gICAg
ICAgIEludDEyOEltcGwgeDB5MCB7eDAgKiB5MH0sIHgweTEge3gwICogeTF9LCB4MHkyIHt4MCAq
IHkyfSwgeDB5MyB7eDAgKiB5M307Ci0gICAgICAgIEludDEyOEltcGwgeDF5MCB7eDEgKiB5MH0s
IHgxeTEge3gxICogeTF9LCB4MXkyIHt4MSAqIHkyfTsKLSAgICAgICAgSW50MTI4SW1wbCB4Mnkw
IHt4MiAqIHkwfSwgeDJ5MSB7eDIgKiB5MX07Ci0gICAgICAgIEludDEyOEltcGwgeDN5MCB7eDMg
KiB5MH07Ci0gICAgICAgIHJldHVybiB4MHkwICsgKCh4MHkxICsgeDF5MCkgPDwgMzIpICsgKCh4
MHkyICsgeDF5MSArIHgyeTApIDw8IDY0KSArCi0gICAgICAgICAgICAoKHgweTMgKyB4MXkyICsg
eDJ5MSArIHgzeTApIDw8IDk2KTsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBv
cGVyYXRvci8oSW50MTI4SW1wbCB0aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAgaW50IGoge2xl
YWRpbmdaZXJvZXMoKX07Ci0gICAgICAgIEludDEyOEltcGwgYml0cyB7KnRoaXN9OwotICAgICAg
ICBiaXRzIDw8PSBqOwotICAgICAgICBJbnQxMjhJbXBsIG51bWVyYXRvciB7IH07Ci0gICAgICAg
IEludDEyOEltcGwgcXVvdGllbnQgeyB9OwotICAgICAgICBmb3IgKDsgaiA8IDEyODsgKytqKSB7
Ci0gICAgICAgICAgICBudW1lcmF0b3IgPDw9IDE7Ci0gICAgICAgICAgICBpZiAoYml0cy5oaWdo
XyAmIHRvcEJpdCkKLSAgICAgICAgICAgICAgICBudW1lcmF0b3IubG93XyB8PSAxOwotICAgICAg
ICAgICAgYml0cyA8PD0gMTsKLSAgICAgICAgICAgIHF1b3RpZW50IDw8PSAxOwotICAgICAgICAg
ICAgaWYgKG51bWVyYXRvciA+PSB0aGF0KSB7Ci0gICAgICAgICAgICAgICAgKytxdW90aWVudDsK
LSAgICAgICAgICAgICAgICBudW1lcmF0b3IgLT0gdGhhdDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gcXVvdGllbnQ7Ci0gICAgfQotCi0gICAgY29uc3RleHByIElu
dDEyOEltcGwgb3BlcmF0b3IlKEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IGludCBqIHtsZWFkaW5nWmVyb2VzKCl9OwotICAgICAgICBJbnQxMjhJbXBsIGJpdHMgeyp0aGlz
fTsKLSAgICAgICAgYml0cyA8PD0gajsKLSAgICAgICAgSW50MTI4SW1wbCByZW1haW5kZXIgeyB9
OwotICAgICAgICBmb3IgKDsgaiA8IDEyODsgKytqKSB7Ci0gICAgICAgICAgICByZW1haW5kZXIg
PDw9IDE7Ci0gICAgICAgICAgICBpZiAoYml0cy5oaWdoXyAmIHRvcEJpdCkKLSAgICAgICAgICAg
ICAgICByZW1haW5kZXIubG93XyB8PSAxOwotICAgICAgICAgICAgYml0cyA8PD0gMTsKLSAgICAg
ICAgICAgIGlmIChyZW1haW5kZXIgPj0gdGhhdCkKLSAgICAgICAgICAgICAgICByZW1haW5kZXIg
LT0gdGhhdDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVtYWluZGVyOwotICAgIH0KLQot
ICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAoSVNfU0lHTkVEICYmIChoaWdoXyBeIHRoYXQuaGlnaF8pICYgdG9wQml0
KQotICAgICAgICAgICAgcmV0dXJuICEhKGhpZ2hfICYgdG9wQml0KTsKLQotICAgICAgICByZXR1
cm4gaGlnaF8gPCB0aGF0LmhpZ2hfIHx8IChoaWdoXyA9PSB0aGF0LmhpZ2hfICYmIGxvd18gPCB0
aGF0Lmxvd18pOwotICAgIH0KLSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KEludDEyOElt
cGwgdGhhdCkgY29uc3QgeyByZXR1cm4gISgqdGhpcyA+IHRoYXQpOyB9Ci0gICAgY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I9PShJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbG93XyA9PSB0aGF0Lmxvd18gJiYgaGlnaF8gPT0gdGhhdC5oaWdoXzsKLSAgICB9Ci0g
ICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShJbnQxMjhJbXBsIHRoYXQpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gdGhhdCk7IH0KLSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KElu
dDEyOEltcGwgdGhhdCkgY29uc3QgeyByZXR1cm4gdGhhdCA8PSAqdGhpczsgfQotICAgIGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPihJbnQxMjhJbXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJuIHRoYXQg
PCAqdGhpczsgfQotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yJj0oY29uc3Qg
SW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gKnRoaXMgJiB0aGF0Owot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZv
cGVyYXRvcnw9KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9
ICp0aGlzIHwgdGhhdDsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4
cHIgSW50MTI4SW1wbCAmb3BlcmF0b3JePShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsK
LSAgICAgICAgKnRoaXMgPSAqdGhpcyBeIHRoYXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yPDw9KGNvbnN0IEludDEyOElt
cGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzIDw8IHRoYXQ7Ci0gICAgICAg
IHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9y
Pj49KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlz
ID4+IHRoYXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIElu
dDEyOEltcGwgJm9wZXJhdG9yKz0oY29uc3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0gICAg
ICAgICp0aGlzID0gKnRoaXMgKyB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
ICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvci09KGNvbnN0IEludDEyOEltcGwgJnRo
YXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzIC0gdGhhdDsKLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3IqPShjb25z
dCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyAqIHRoYXQ7
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwg
Jm9wZXJhdG9yLz0oY29uc3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0gICAgICAgICp0aGlz
ID0gKnRoaXMgLyB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0
ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvciU9KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAg
ewotICAgICAgICAqdGhpcyA9ICp0aGlzICUgdGhhdDsKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChzdGQ6OnVpbnQ2NF90
IGhpLCBzdGQ6OnVpbnQ2NF90IGxvKSA6IGxvd18ge2xvfSwgaGlnaF8ge2hpfSB7IH0KLSAgICBj
b25zdGV4cHIgaW50IGxlYWRpbmdaZXJvZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFo
aWdoXykKLSAgICAgICAgICAgIHJldHVybiA2NCArIGxlYWRpbmdaZXJvQml0Q291bnQobG93Xyk7
Ci0gICAgICAgIHJldHVybiBsZWFkaW5nWmVyb0JpdENvdW50KGhpZ2hfKTsKLSAgICB9Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBzdGQ6OnVpbnQ2NF90IHRvcEJpdCB7c3RkOjp1aW50NjRfdCB7MX0g
PDwgNjN9OwotICAgIHN0ZDo6dWludDY0X3QgbG93XyB7MH0sIGhpZ2hfIHswfTsKK2NsYXNzIElu
dDEyOEltcGw7CisKKy8vIFVJbnQxMjhJbXBsCisvLworLy8gQW4gdW5zaWduZWQgMTI4LWJpdCBp
bnRlZ2VyIHR5cGUuIFRoZSBBUEkgaXMgbWVhbnQgdG8gbWltaWMgYW4gaW50cmluc2ljIHR5cGUK
Ky8vIGFzIGNsb3NlbHkgYXMgaXMgcHJhY3RpY2FsLCBpbmNsdWRpbmcgZXhoaWJpdGluZyB1bmRl
ZmluZWQgYmVoYXZpb3IgaW4KKy8vIGFuYWxvZ291cyBjYXNlcyAoZS5nLiBkaXZpc2lvbiBieSB6
ZXJvKS4gVGhpcyB0eXBlIGlzIGludGVuZGVkIHRvIGJlIGEKKy8vIGRyb3AtaW4gcmVwbGFjZW1l
bnQgb25jZSBDKysgc3VwcG9ydHMgYW4gaW50cmluc2ljIGB1aW50MTI4X3RgIHR5cGU7IHdoZW4K
Ky8vIHRoYXQgb2NjdXJzLCBleGlzdGluZyB3ZWxsLWJlaGF2ZWQgdXNlcyBvZiBgVUludDEyOElt
cGxgIHdpbGwgY29udGludWUgdG8gd29yaworLy8gdXNpbmcgdGhhdCBuZXcgdHlwZS4KKy8vCisv
LyBOb3RlOiBjb2RlIHdyaXR0ZW4gd2l0aCB0aGlzIHR5cGUgd2lsbCBjb250aW51ZSB0byBjb21w
aWxlIG9uY2UgYHVpbnQxMjhfdGAKKy8vIGlzIGludHJvZHVjZWQsIHByb3ZpZGVkIHRoZSByZXBs
YWNlbWVudCBoZWxwZXIgZnVuY3Rpb25zCisvLyBgVUludDEyOEltcGwoTG93fEhpZ2gpNjQoKWAg
YW5kIGBNYWtlVUludDEyOCgpYCBhcmUgbWFkZS4KKy8vCisvLyBBIGBVSW50MTI4SW1wbGAgc3Vw
cG9ydHMgdGhlIGZvbGxvd2luZzoKKy8vCisvLyAgICogSW1wbGljaXQgY29uc3RydWN0aW9uIGZy
b20gaW50ZWdyYWwgdHlwZXMKKy8vICAgKiBFeHBsaWNpdCBjb252ZXJzaW9uIHRvIGludGVncmFs
IHR5cGVzCisvLworLy8gQWRkaXRpb25hbGx5LCBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGBf
X2ludDEyOGAsIGBVSW50MTI4SW1wbGAgaXMKKy8vIGludGVyb3BlcmFibGUgd2l0aCB0aGF0IHR5
cGUuIChBYnNlaWwgY2hlY2tzIGZvciB0aGlzIGNvbXBhdGliaWxpdHkgdGhyb3VnaAorLy8gdGhl
IGBBQlNMX0hBVkVfSU5UUklOU0lDX0lOVDEyOGAgbWFjcm8uKQorLy8KKy8vIEhvd2V2ZXIsIGEg
YFVJbnQxMjhJbXBsYCBkaWZmZXJzIGZyb20gaW50cmluc2ljIGludGVncmFsIHR5cGVzIGluIHRo
ZSBmb2xsb3dpbmcKKy8vIHdheXM6CisvLworLy8gICAqIEVycm9ycyBvbiBpbXBsaWNpdCBjb252
ZXJzaW9ucyB0aGF0IGRvIG5vdCBwcmVzZXJ2ZSB2YWx1ZSAoc3VjaCBhcworLy8gICAgIGxvc3Mg
b2YgcHJlY2lzaW9uIHdoZW4gY29udmVydGluZyB0byBmbG9hdCB2YWx1ZXMpLgorLy8gICAqIFJl
cXVpcmVzIGV4cGxpY2l0IGNvbnN0cnVjdGlvbiBmcm9tIGFuZCBjb252ZXJzaW9uIHRvIGZsb2F0
aW5nIHBvaW50CisvLyAgICAgdHlwZXMuCisvLyAgICogQ29udmVyc2lvbiB0byBpbnRlZ3JhbCB0
eXBlcyByZXF1aXJlcyBhbiBleHBsaWNpdCBzdGF0aWNfY2FzdCgpIHRvCisvLyAgICAgbWltaWMg
dXNlIG9mIHRoZSBgLVduYXJyb3dpbmdgIGNvbXBpbGVyIGZsYWcuCisvLyAgICogVGhlIGFsaWdu
bWVudCByZXF1aXJlbWVudCBvZiBgVUludDEyOEltcGxgIG1heSBkaWZmZXIgZnJvbSB0aGF0IG9m
IGFuCisvLyAgICAgaW50cmluc2ljIDEyOC1iaXQgaW50ZWdlciB0eXBlIGRlcGVuZGluZyBvbiBw
bGF0Zm9ybSBhbmQgYnVpbGQKKy8vICAgICBjb25maWd1cmF0aW9uLgorLy8KKy8vIEV4YW1wbGU6
CisvLworLy8gICAgIGZsb2F0IHkgPSBhYnNsOjpVSW50MTI4TWF4KCk7ICAvLyBFcnJvci4gVUlu
dDEyOEltcGwgY2Fubm90IGJlIGltcGxpY2l0bHkKKy8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY29udmVydGVkIHRvIGZsb2F0LgorLy8KKy8vICAgICBhYnNsOjpVSW50
MTI4SW1wbCB2OworLy8gICAgIHVpbnQ2NF90IGkgPSB2OyAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBFcnJvcgorLy8gICAgIHVpbnQ2NF90IGkgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odik7
ICAvLyBPSworLy8KK2NsYXNzIGFsaWduYXMoMTYpIFVJbnQxMjhJbXBsIHsKKyBwdWJsaWM6Cisg
IFVJbnQxMjhJbXBsKCkgPSBkZWZhdWx0OworCisgIC8vIENvbnN0cnVjdG9ycyBmcm9tIGFyaXRo
bWV0aWMgdHlwZXMKKyAgY29uc3RleHByIFVJbnQxMjhJbXBsKGludCB2KTsgICAgICAgICAgICAg
ICAgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQorICBjb25zdGV4cHIgVUludDEyOEltcGwo
dW5zaWduZWQgaW50IHYpOyAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvZXhwbGljaXQpCisgIGNv
bnN0ZXhwciBVSW50MTI4SW1wbChsb25nIHYpOyAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVu
dGltZS9pbnQpCisgIGNvbnN0ZXhwciBVSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpOyAgICAg
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBVSW50MTI4SW1wbChsb25nIGxv
bmcgdik7ICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBVSW50
MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxvbmcgdik7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisg
IGNvbnN0ZXhwciBVSW50MTI4SW1wbChJbnQxMjhJbXBsIHYpOyAgLy8gTk9MSU5UKHJ1bnRpbWUv
ZXhwbGljaXQpCisgIGV4cGxpY2l0IFVJbnQxMjhJbXBsKGZsb2F0IHYpOworICBleHBsaWNpdCBV
SW50MTI4SW1wbChkb3VibGUgdik7CisgIGV4cGxpY2l0IFVJbnQxMjhJbXBsKGxvbmcgZG91Ymxl
IHYpOworCisgIC8vIEFzc2lnbm1lbnQgb3BlcmF0b3JzIGZyb20gYXJpdGhtZXRpYyB0eXBlcwor
ICBVSW50MTI4SW1wbCYgb3BlcmF0b3I9KGludCB2KTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9y
PSh1bnNpZ25lZCBpbnQgdik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj0obG9uZyB2KTsgICAg
ICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBVSW50MTI4SW1wbCYgb3BlcmF0
b3I9KHVuc2lnbmVkIGxvbmcgdik7ICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgVUlu
dDEyOEltcGwmIG9wZXJhdG9yPShsb25nIGxvbmcgdik7ICAgICAgICAgICAvLyBOT0xJTlQocnVu
dGltZS9pbnQpCisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj0odW5zaWduZWQgbG9uZyBsb25nIHYp
OyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBVSW50MTI4SW1wbCYgb3BlcmF0b3I9KEludDEy
OEltcGwgdik7CisKKyAgLy8gQ29udmVyc2lvbiBvcGVyYXRvcnMgdG8gb3RoZXIgYXJpdGhtZXRp
YyB0eXBlcworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OworICBj
b25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgY2hhcigpIGNvbnN0OworICBjb25zdGV4cHIgZXhw
bGljaXQgb3BlcmF0b3Igc2lnbmVkIGNoYXIoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0
IG9wZXJhdG9yIHVuc2lnbmVkIGNoYXIoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9w
ZXJhdG9yIGNoYXIxNl90KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBj
aGFyMzJfdCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgQUJTTF9JTlRF
Uk5BTF9XQ0hBUl9UKCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzaG9y
dCgpIGNvbnN0OyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBOT0xJTlRORVhUTElORShy
dW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIHNob3J0
KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBpbnQoKSBjb25zdDsKKyAg
Y29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIGludCgpIGNvbnN0OworICBjb25z
dGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgbG9uZygpIGNvbnN0OyAgLy8gTk9MSU5UKHJ1bnRpbWUv
aW50KQorICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4cGxp
Y2l0IG9wZXJhdG9yIHVuc2lnbmVkIGxvbmcoKSBjb25zdDsKKyAgLy8gTk9MSU5UTkVYVExJTkUo
cnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBsb25nIGxvbmcoKSBj
b25zdDsKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBs
aWNpdCBvcGVyYXRvciB1bnNpZ25lZCBsb25nIGxvbmcoKSBjb25zdDsKKyAgZXhwbGljaXQgb3Bl
cmF0b3IgZmxvYXQoKSBjb25zdDsKKyAgZXhwbGljaXQgb3BlcmF0b3IgZG91YmxlKCkgY29uc3Q7
CisgIGV4cGxpY2l0IG9wZXJhdG9yIGxvbmcgZG91YmxlKCkgY29uc3Q7CisKKyAgLy8gVHJpdmlh
bCBjb3B5IGNvbnN0cnVjdG9yLCBhc3NpZ25tZW50IG9wZXJhdG9yIGFuZCBkZXN0cnVjdG9yLgor
CisgIC8vIEFyaXRobWV0aWMgb3BlcmF0b3JzLgorICBVSW50MTI4SW1wbCYgb3BlcmF0b3IrPShV
SW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvci09KFVJbnQxMjhJbXBs
IG90aGVyKTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yKj0oVUludDEyOEltcGwgb3RoZXIpOwor
ICAvLyBMb25nIGRpdmlzaW9uL21vZHVsbyBmb3IgVUludDEyOEltcGwuCisgIFVJbnQxMjhJbXBs
JiBvcGVyYXRvci89KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9y
JT0oVUludDEyOEltcGwgb3RoZXIpOworICBVSW50MTI4SW1wbCBvcGVyYXRvcisrKGludCk7Cisg
IFVJbnQxMjhJbXBsIG9wZXJhdG9yLS0oaW50KTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPDw9
KGludCk7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj4+PShpbnQpOworICBVSW50MTI4SW1wbCYg
b3BlcmF0b3ImPShVSW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcnw9
KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yXj0oVUludDEyOElt
cGwgb3RoZXIpOworICBVSW50MTI4SW1wbCYgb3BlcmF0b3IrKygpOworICBVSW50MTI4SW1wbCYg
b3BlcmF0b3ItLSgpOworCisgIC8vIFVJbnQxMjhMb3c2NCgpCisgIC8vCisgIC8vIFJldHVybnMg
dGhlIGxvd2VyIDY0LWJpdCB2YWx1ZSBvZiBhIGBVSW50MTI4SW1wbGAgdmFsdWUuCisgIGZyaWVu
ZCBjb25zdGV4cHIgdWludDY0X3QgVUludDEyOExvdzY0KFVJbnQxMjhJbXBsIHYpOworCisgIC8v
IFVJbnQxMjhIaWdoNjQoKQorICAvLworICAvLyBSZXR1cm5zIHRoZSBoaWdoZXIgNjQtYml0IHZh
bHVlIG9mIGEgYFVJbnQxMjhJbXBsYCB2YWx1ZS4KKyAgZnJpZW5kIGNvbnN0ZXhwciB1aW50NjRf
dCBVSW50MTI4SGlnaDY0KFVJbnQxMjhJbXBsIHYpOworCisgIC8vIE1ha2VVSW50MTI4KCkKKyAg
Ly8KKyAgLy8gQ29uc3RydWN0cyBhIGBVSW50MTI4SW1wbGAgbnVtZXJpYyB2YWx1ZSBmcm9tIHR3
byA2NC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuCisgIC8vIE5vdGUgdGhhdCB0aGlzIGZhY3Rvcnkg
ZnVuY3Rpb24gaXMgdGhlIG9ubHkgd2F5IHRvIGNvbnN0cnVjdCBhIGBVSW50MTI4SW1wbGAKKyAg
Ly8gZnJvbSBpbnRlZ2VyIHZhbHVlcyBncmVhdGVyIHRoYW4gMl42NC4KKyAgLy8KKyAgLy8gRXhh
bXBsZToKKyAgLy8KKyAgLy8gICBVSW50MTI4SW1wbCBiaWcgPSBNYWtlVUludDEyOCgxLCAwKTsK
KyAgZnJpZW5kIGNvbnN0ZXhwciBVSW50MTI4SW1wbCBNYWtlVUludDEyOCh1aW50NjRfdCBoaWdo
LCB1aW50NjRfdCBsb3cpOworCisgIC8vIFVJbnQxMjhNYXgoKQorICAvLworICAvLyBSZXR1cm5z
IHRoZSBoaWdoZXN0IHZhbHVlIGZvciBhIDEyOC1iaXQgdW5zaWduZWQgaW50ZWdlci4KKyAgZnJp
ZW5kIGNvbnN0ZXhwciBVSW50MTI4SW1wbCBVSW50MTI4TWF4KCk7CisKKyBwcml2YXRlOgorICBj
b25zdGV4cHIgVUludDEyOEltcGwodWludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KTsKKworICAv
LyBUT0RPKHN0cmVsKSBVcGRhdGUgaW1wbGVtZW50YXRpb24gdG8gdXNlIF9faW50MTI4IG9uY2Ug
YWxsIHVzZXJzIG9mCisgIC8vIFVJbnQxMjhJbXBsIGFyZSBmaXhlZCB0byBub3QgZGVwZW5kIG9u
IGFsaWdub2YoVUludDEyOEltcGwpID09IDguIEFsc28gYWRkCisgIC8vIGFsaWduYXMoMTYpIHRv
IGNsYXNzIGRlZmluaXRpb24gdG8ga2VlcCBhbGlnbm1lbnQgY29uc2lzdGVudCBhY3Jvc3MKKyAg
Ly8gcGxhdGZvcm1zLgorI2lmIENQVShMSVRUTEVfRU5ESUFOKQorICB1aW50NjRfdCBsb187Cisg
IHVpbnQ2NF90IGhpXzsKKyNlbGlmIENQVShCSUdfRU5ESUFOKQorICB1aW50NjRfdCBoaV87Cisg
IHVpbnQ2NF90IGxvXzsKKyNlbHNlICAvLyBieXRlIG9yZGVyCisjZXJyb3IgIlVuc3VwcG9ydGVk
IGJ5dGUgb3JkZXI6IG11c3QgYmUgbGl0dGxlLWVuZGlhbiBvciBiaWctZW5kaWFuLiIKKyNlbmRp
ZiAgLy8gYnl0ZSBvcmRlcgorfTsKKworLy8gYWxsb3cgVUludDEyOEltcGwgdG8gYmUgbG9nZ2Vk
CitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgVUludDEyOEltcGwg
dik7CisKKy8vIFRPRE8oc3RyZWwpIGFkZCBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYsIFVJbnQx
MjhJbXBsKQorCitjb25zdGV4cHIgVUludDEyOEltcGwgVUludDEyOE1heCgpIHsKKyAgcmV0dXJu
IFVJbnQxMjhJbXBsKChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpLAorICAg
ICAgICAgICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSk7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBXVEYKKworLy8gU3BlY2lhbGl6ZWQgbnVtZXJpY19saW1pdHMg
Zm9yIFVJbnQxMjhJbXBsLgorbmFtZXNwYWNlIHN0ZCB7Cit0ZW1wbGF0ZSA8PgorY2xhc3MgbnVt
ZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD4geworIHB1YmxpYzoKKyAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzX3NpZ25lZCA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfaW50ZWdlciA9
IHRydWU7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19leGFjdCA9IHRydWU7CisgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OworICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXRfcm91
bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKKyAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzX2llYzU1OSA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNf
Ym91bmRlZCA9IHRydWU7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19tb2R1bG8gPSB0cnVl
OworICBzdGF0aWMgY29uc3RleHByIGludCBkaWdpdHMgPSAxMjg7CisgIHN0YXRpYyBjb25zdGV4
cHIgaW50IGRpZ2l0czEwID0gMzg7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9kaWdpdHMx
MCA9IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IHJhZGl4ID0gMjsKKyAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgbWluX2V4cG9uZW50ID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluX2V4
cG9uZW50MTAgPSAwOworICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZXhwb25lbnQgPSAwOwor
ICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB0cmFwcyA9IG51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6dHJhcHM7CisgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKworICBzdGF0aWMg
Y29uc3RleHByIFdURjo6VUludDEyOEltcGwgKG1pbikoKSB7IHJldHVybiAwOyB9CisgIHN0YXRp
YyBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCBsb3dlc3QoKSB7IHJldHVybiAwOyB9CisgIHN0
YXRpYyBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCAobWF4KSgpIHsgcmV0dXJuIFdURjo6VUlu
dDEyOE1heCgpOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCBlcHNpbG9u
KCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6VUludDEyOEltcGwgcm91
bmRfZXJyb3IoKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpVSW50MTI4
SW1wbCBpbmZpbml0eSgpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OlVJ
bnQxMjhJbXBsIHF1aWV0X05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBX
VEY6OlVJbnQxMjhJbXBsIHNpZ25hbGluZ19OYU4oKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBj
b25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCBkZW5vcm1fbWluKCkgeyByZXR1cm4gMDsgfQorfTsK
K30gIC8vIG5hbWVzcGFjZSBzdGQKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEludDEyOEltcGwK
Ky8vCisvLyBBIHNpZ25lZCAxMjgtYml0IGludGVnZXIgdHlwZS4gVGhlIEFQSSBpcyBtZWFudCB0
byBtaW1pYyBhbiBpbnRyaW5zaWMKKy8vIGludGVncmFsIHR5cGUgYXMgY2xvc2VseSBhcyBpcyBw
cmFjdGljYWwsIGluY2x1ZGluZyBleGhpYml0aW5nIHVuZGVmaW5lZAorLy8gYmVoYXZpb3IgaW4g
YW5hbG9nb3VzIGNhc2VzIChlLmcuIGRpdmlzaW9uIGJ5IHplcm8pLgorLy8KKy8vIEFuIGBJbnQx
MjhJbXBsYCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nOgorLy8KKy8vICAgKiBJbXBsaWNpdCBjb25z
dHJ1Y3Rpb24gZnJvbSBpbnRlZ3JhbCB0eXBlcworLy8gICAqIEV4cGxpY2l0IGNvbnZlcnNpb24g
dG8gaW50ZWdyYWwgdHlwZXMKKy8vCisvLyBIb3dldmVyLCBhbiBgSW50MTI4SW1wbGAgZGlmZmVy
cyBmcm9tIGludHJpbnNpYyBpbnRlZ3JhbCB0eXBlcyBpbiB0aGUgZm9sbG93aW5nCisvLyB3YXlz
OgorLy8KKy8vICAgKiBJdCBpcyBub3QgaW1wbGljaXRseSBjb252ZXJ0aWJsZSB0byBvdGhlciBp
bnRlZ3JhbCB0eXBlcy4KKy8vICAgKiBSZXF1aXJlcyBleHBsaWNpdCBjb25zdHJ1Y3Rpb24gZnJv
bSBhbmQgY29udmVyc2lvbiB0byBmbG9hdGluZyBwb2ludAorLy8gICAgIHR5cGVzLgorCisvLyBB
ZGRpdGlvbmFsbHksIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgYF9faW50MTI4YCwgYEludDEy
OEltcGxgIGlzCisvLyBpbnRlcm9wZXJhYmxlIHdpdGggdGhhdCB0eXBlLiAoQWJzZWlsIGNoZWNr
cyBmb3IgdGhpcyBjb21wYXRpYmlsaXR5IHRocm91Z2gKKy8vIHRoZSBgQUJTTF9IQVZFX0lOVFJJ
TlNJQ19JTlQxMjhgIG1hY3JvLikKKy8vCisvLyBUaGUgZGVzaWduIGdvYWwgZm9yIGBJbnQxMjhJ
bXBsYCBpcyB0aGF0IGl0IHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIGEgZnV0dXJlCisvLyBgaW50
MTI4X3RgLCBpZiB0aGF0IHR5cGUgYmVjb21lcyBhIHBhcnQgb2YgdGhlIHN0YW5kYXJkLgorLy8K
Ky8vIEV4YW1wbGU6CisvLworLy8gICAgIGZsb2F0IHkgPSBJbnQxMjhJbXBsKDE3KTsgIC8vIEVy
cm9yLiBJbnQxMjhJbXBsIGNhbm5vdCBiZSBpbXBsaWNpdGx5CisvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0ZWQgdG8gZmxvYXQuCisvLworLy8gICAgIEludDEy
OEltcGwgdjsKKy8vICAgICBpbnQ2NF90IGkgPSB2OyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEVycm9yCisvLyAgICAgaW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4odik7ICAvLyBP
SworLy8KK2NsYXNzIGFsaWduYXMoMTYpIEludDEyOEltcGwgeworIHB1YmxpYzoKKyAgSW50MTI4
SW1wbCgpID0gZGVmYXVsdDsKKworICAvLyBDb25zdHJ1Y3RvcnMgZnJvbSBhcml0aG1ldGljIHR5
cGVzCisgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGludCB2KTsgICAgICAgICAgICAgICAgIC8vIE5P
TElOVChydW50aW1lL2V4cGxpY2l0KQorICBjb25zdGV4cHIgSW50MTI4SW1wbCh1bnNpZ25lZCBp
bnQgdik7ICAgICAgICAvLyBOT0xJTlQocnVudGltZS9leHBsaWNpdCkKKyAgY29uc3RleHByIElu
dDEyOEltcGwobG9uZyB2KTsgICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQor
ICBjb25zdGV4cHIgSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpOyAgICAgICAvLyBOT0xJTlQo
cnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGxvbmcgbG9uZyB2KTsgICAgICAg
ICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgY29uc3RleHByIEludDEyOEltcGwodW5zaWdu
ZWQgbG9uZyBsb25nIHYpOyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhw
bGljaXQgSW50MTI4SW1wbChVSW50MTI4SW1wbCB2KTsKKyAgZXhwbGljaXQgSW50MTI4SW1wbChm
bG9hdCB2KTsKKyAgZXhwbGljaXQgSW50MTI4SW1wbChkb3VibGUgdik7CisgIGV4cGxpY2l0IElu
dDEyOEltcGwobG9uZyBkb3VibGUgdik7CisKKyAgLy8gQXNzaWdubWVudCBvcGVyYXRvcnMgZnJv
bSBhcml0aG1ldGljIHR5cGVzCisgIEludDEyOEltcGwmIG9wZXJhdG9yPShpbnQgdik7CisgIElu
dDEyOEltcGwmIG9wZXJhdG9yPSh1bnNpZ25lZCBpbnQgdik7CisgIEludDEyOEltcGwmIG9wZXJh
dG9yPShsb25nIHYpOyAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIElu
dDEyOEltcGwmIG9wZXJhdG9yPSh1bnNpZ25lZCBsb25nIHYpOyAgICAgICAvLyBOT0xJTlQocnVu
dGltZS9pbnQpCisgIEludDEyOEltcGwmIG9wZXJhdG9yPShsb25nIGxvbmcgdik7ICAgICAgICAg
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIEludDEyOEltcGwmIG9wZXJhdG9yPSh1bnNpZ25l
ZCBsb25nIGxvbmcgdik7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisKKyAgLy8gQ29udmVyc2lv
biBvcGVyYXRvcnMgdG8gb3RoZXIgYXJpdGhtZXRpYyB0eXBlcworICBjb25zdGV4cHIgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3Ig
Y2hhcigpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3Igc2lnbmVkIGNoYXIo
KSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIGNoYXIoKSBj
b25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGNoYXIxNl90KCkgY29uc3Q7Cisg
IGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyMzJfdCgpIGNvbnN0OworICBjb25zdGV4
cHIgZXhwbGljaXQgb3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UKCkgY29uc3Q7CisgIGNv
bnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzaG9ydCgpIGNvbnN0OyAgLy8gTk9MSU5UKHJ1bnRp
bWUvaW50KQorICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4
cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIHNob3J0KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBs
aWNpdCBvcGVyYXRvciBpbnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9y
IHVuc2lnbmVkIGludCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgbG9u
ZygpIGNvbnN0OyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBOT0xJTlRORVhUTElORShy
dW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIGxvbmco
KSBjb25zdDsKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBl
eHBsaWNpdCBvcGVyYXRvciBsb25nIGxvbmcoKSBjb25zdDsKKyAgLy8gTk9MSU5UTkVYVExJTkUo
cnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCBsb25n
IGxvbmcoKSBjb25zdDsKKyAgZXhwbGljaXQgb3BlcmF0b3IgZmxvYXQoKSBjb25zdDsKKyAgZXhw
bGljaXQgb3BlcmF0b3IgZG91YmxlKCkgY29uc3Q7CisgIGV4cGxpY2l0IG9wZXJhdG9yIGxvbmcg
ZG91YmxlKCkgY29uc3Q7CisKKyAgLy8gVHJpdmlhbCBjb3B5IGNvbnN0cnVjdG9yLCBhc3NpZ25t
ZW50IG9wZXJhdG9yIGFuZCBkZXN0cnVjdG9yLgorCisgIC8vIEFyaXRobWV0aWMgb3BlcmF0b3Jz
CisgIEludDEyOEltcGwmIG9wZXJhdG9yKz0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOElt
cGwmIG9wZXJhdG9yLT0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9y
Kj0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9yLz0oSW50MTI4SW1w
bCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9yJT0oSW50MTI4SW1wbCBvdGhlcik7Cisg
IEludDEyOEltcGwgb3BlcmF0b3IrKyhpbnQpOyAgLy8gcG9zdGZpeCBpbmNyZW1lbnQ6IGkrKwor
ICBJbnQxMjhJbXBsIG9wZXJhdG9yLS0oaW50KTsgIC8vIHBvc3RmaXggZGVjcmVtZW50OiBpLS0K
KyAgSW50MTI4SW1wbCYgb3BlcmF0b3IrKygpOyAgICAvLyBwcmVmaXggaW5jcmVtZW50OiAgKytp
CisgIEludDEyOEltcGwmIG9wZXJhdG9yLS0oKTsgICAgLy8gcHJlZml4IGRlY3JlbWVudDogIC0t
aQorICBJbnQxMjhJbXBsJiBvcGVyYXRvciY9KEludDEyOEltcGwgb3RoZXIpOworICBJbnQxMjhJ
bXBsJiBvcGVyYXRvcnw9KEludDEyOEltcGwgb3RoZXIpOworICBJbnQxMjhJbXBsJiBvcGVyYXRv
cl49KEludDEyOEltcGwgb3RoZXIpOworICBJbnQxMjhJbXBsJiBvcGVyYXRvcjw8PShpbnQgYW1v
dW50KTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I+Pj0oaW50IGFtb3VudCk7CisKKyAgLy8gSW50
MTI4TG93NjQoKQorICAvLworICAvLyBSZXR1cm5zIHRoZSBsb3dlciA2NC1iaXQgdmFsdWUgb2Yg
YSBgSW50MTI4SW1wbGAgdmFsdWUuCisgIGZyaWVuZCBjb25zdGV4cHIgdWludDY0X3QgSW50MTI4
TG93NjQoSW50MTI4SW1wbCB2KTsKKworICAvLyBJbnQxMjhIaWdoNjQoKQorICAvLworICAvLyBS
ZXR1cm5zIHRoZSBoaWdoZXIgNjQtYml0IHZhbHVlIG9mIGEgYEludDEyOEltcGxgIHZhbHVlLgor
ICBmcmllbmQgY29uc3RleHByIGludDY0X3QgSW50MTI4SGlnaDY0KEludDEyOEltcGwgdik7CisK
KyAgLy8gTWFrZUludDEyOCgpCisgIC8vCisgIC8vIENvbnN0cnVjdHMgYSBgSW50MTI4SW1wbGAg
bnVtZXJpYyB2YWx1ZSBmcm9tIHR3byA2NC1iaXQgaW50ZWdlcnMuIE5vdGUgdGhhdAorICAvLyBz
aWduZWRuZXNzIGlzIGNvbnZleWVkIGluIHRoZSB1cHBlciBgaGlnaGAgdmFsdWUuCisgIC8vCisg
IC8vICAgKEludDEyOEltcGwoMSkgPDwgNjQpICogaGlnaCArIGxvdworICAvLworICAvLyBOb3Rl
IHRoYXQgdGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGlzIHRoZSBvbmx5IHdheSB0byBjb25zdHJ1Y3Qg
YSBgSW50MTI4SW1wbGAKKyAgLy8gZnJvbSBpbnRlZ2VyIHZhbHVlcyBncmVhdGVyIHRoYW4gMl42
NCBvciBsZXNzIHRoYW4gLTJeNjQuCisgIC8vCisgIC8vIEV4YW1wbGU6CisgIC8vCisgIC8vICAg
SW50MTI4SW1wbCBiaWcgPSBNYWtlSW50MTI4KDEsIDApOworICAvLyAgIEludDEyOEltcGwgYmln
X24gPSBNYWtlSW50MTI4KC0xLCAwKTsKKyAgZnJpZW5kIGNvbnN0ZXhwciBJbnQxMjhJbXBsIE1h
a2VJbnQxMjgoaW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpOworCisgIC8vIEludDEyOE1heCgp
CisgIC8vCisgIC8vIFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUgZm9yIGEgMTI4LWJpdCBzaWdu
ZWQgaW50ZWdlci4KKyAgZnJpZW5kIGNvbnN0ZXhwciBJbnQxMjhJbXBsIEludDEyOE1heCgpOwor
CisgIC8vIEludDEyOE1pbigpCisgIC8vCisgIC8vIFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUg
Zm9yIGEgMTI4LWJpdCBzaWduZWQgaW50ZWdlci4KKyAgZnJpZW5kIGNvbnN0ZXhwciBJbnQxMjhJ
bXBsIEludDEyOE1pbigpOworCisgcHJpdmF0ZToKKyAgY29uc3RleHByIEludDEyOEltcGwoaW50
NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpOworCisjaWYgQ1BVKExJVFRMRV9FTkRJQU4pCisgIHVp
bnQ2NF90IGxvXzsKKyAgaW50NjRfdCBoaV87CisjZWxpZiBDUFUoQklHX0VORElBTikKKyAgaW50
NjRfdCBoaV87CisgIHVpbnQ2NF90IGxvXzsKKyNlbHNlICAvLyBieXRlIG9yZGVyCisjZXJyb3Ig
IlVuc3VwcG9ydGVkIGJ5dGUgb3JkZXI6IG11c3QgYmUgbGl0dGxlLWVuZGlhbiBvciBiaWctZW5k
aWFuLiIKKyNlbmRpZiAgLy8gYnl0ZSBvcmRlcgogfTsKIAorc3RkOjpvc3RyZWFtJiBvcGVyYXRv
cjw8KHN0ZDo6b3N0cmVhbSYgb3MsIEludDEyOEltcGwgdik7CisKKy8vIFRPRE8oYWJzbC10ZWFt
KSBhZGQgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0mLCBJbnQxMjhJbXBsKQorCitjb25zdGV4cHIg
SW50MTI4SW1wbCBJbnQxMjhNYXgoKSB7CisgIHJldHVybiBJbnQxMjhJbXBsKChzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgpKCksCisgICAgICAgICAgICAgICAgKHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDY0X3Q+OjptYXgpKCkpOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbCBJ
bnQxMjhNaW4oKSB7CisgIHJldHVybiBJbnQxMjhJbXBsKChzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDY0X3Q+OjptaW4pKCksIDApOworfQorCit9ICAvLyBuYW1lc3BhY2UgV1RGCisKKy8vIFNwZWNp
YWxpemVkIG51bWVyaWNfbGltaXRzIGZvciBJbnQxMjhJbXBsLgorbmFtZXNwYWNlIHN0ZCB7Cit0
ZW1wbGF0ZSA8PgorY2xhc3MgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPiB7CisgcHVi
bGljOgorICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfZXhh
Y3QgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CisgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICBzdGF0aWMgY29u
c3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKKyAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOworICBzdGF0aWMg
Y29uc3RleHByIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl
cm87CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNfbW9kdWxvID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IGRpZ2l0cyA9IDEy
NzsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGlnaXRzMTAgPSAzODsKKyAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgcmFkaXgg
PSAyOworICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQgPSAwOworICBzdGF0aWMg
Y29uc3RleHByIGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50
IG1heF9leHBvbmVudCA9IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9leHBvbmVudDEw
ID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYXBzID0gbnVtZXJpY19saW1pdHM8dWlu
dDY0X3Q+Ojp0cmFwczsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOworCisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIChtaW4pKCkgeyBy
ZXR1cm4gV1RGOjpJbnQxMjhNaW4oKTsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4
SW1wbCBsb3dlc3QoKSB7IHJldHVybiBXVEY6OkludDEyOE1pbigpOyB9CisgIHN0YXRpYyBjb25z
dGV4cHIgV1RGOjpJbnQxMjhJbXBsIChtYXgpKCkgeyByZXR1cm4gV1RGOjpJbnQxMjhNYXgoKTsg
fQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBlcHNpbG9uKCkgeyByZXR1cm4g
MDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCByb3VuZF9lcnJvcigpIHsg
cmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwgaW5maW5pdHko
KSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIHF1aWV0
X05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwg
c2lnbmFsaW5nX05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6Oklu
dDEyOEltcGwgZGVub3JtX21pbigpIHsgcmV0dXJuIDA7IH0KK307Cit9ICAvLyBuYW1lc3BhY2Ug
c3RkCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAgICAgICBJbXBs
ZW1lbnRhdGlvbiBkZXRhaWxzIGZvbGxvdworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK25hbWVzcGFj
ZSBXVEYgeworCitjb25zdGV4cHIgVUludDEyOEltcGwgTWFrZVVJbnQxMjgodWludDY0X3QgaGln
aCwgdWludDY0X3QgbG93KSB7CisgIHJldHVybiBVSW50MTI4SW1wbChoaWdoLCBsb3cpOworfQor
CisvLyBBc3NpZ25tZW50IGZyb20gaW50ZWdlciB0eXBlcy4KKworaW5saW5lIFVJbnQxMjhJbXBs
JiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KGludCB2KSB7IHJldHVybiAqdGhpcyA9IFVJbnQxMjhJ
bXBsKHYpOyB9CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yPSh1
bnNpZ25lZCBpbnQgdikgeworICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2KTsKK30KKwor
aW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KGxvbmcgdikgeyAgLy8g
Tk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2KTsKK30K
KworLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgVUludDEyOEltcGwmIFVJ
bnQxMjhJbXBsOjpvcGVyYXRvcj0odW5zaWduZWQgbG9uZyB2KSB7CisgIHJldHVybiAqdGhpcyA9
IFVJbnQxMjhJbXBsKHYpOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2lu
bGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yPShsb25nIGxvbmcgdikgewor
ICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUo
cnVudGltZS9pbnQpCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcj0o
dW5zaWduZWQgbG9uZyBsb25nIHYpIHsKKyAgcmV0dXJuICp0aGlzID0gVUludDEyOEltcGwodik7
Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yPShJbnQxMjhJ
bXBsIHYpIHsKKyAgcmV0dXJuICp0aGlzID0gVUludDEyOEltcGwodik7Cit9CisKKy8vIEFyaXRo
bWV0aWMgb3BlcmF0b3JzLgorCitjb25zdGV4cHIgVUludDEyOEltcGwgb3BlcmF0b3I8PChVSW50
MTI4SW1wbCBsaHMsIGludCBhbW91bnQpOworY29uc3RleHByIFVJbnQxMjhJbXBsIG9wZXJhdG9y
Pj4oVUludDEyOEltcGwgbGhzLCBpbnQgYW1vdW50KTsKK2NvbnN0ZXhwciBVSW50MTI4SW1wbCBv
cGVyYXRvcisoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpOworY29uc3RleHByIFVJ
bnQxMjhJbXBsIG9wZXJhdG9yLShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocyk7CitV
SW50MTI4SW1wbCBvcGVyYXRvciooVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpOwor
VUludDEyOEltcGwgb3BlcmF0b3IvKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKTsK
K1VJbnQxMjhJbXBsIG9wZXJhdG9yJShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocyk7
CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yPDw9KGludCBhbW91
bnQpIHsKKyAgKnRoaXMgPSAqdGhpcyA8PCBhbW91bnQ7CisgIHJldHVybiAqdGhpczsKK30KKwor
aW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I+Pj0oaW50IGFtb3VudCkg
eworICAqdGhpcyA9ICp0aGlzID4+IGFtb3VudDsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxp
bmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcis9KFVJbnQxMjhJbXBsIG90aGVy
KSB7CisgICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxp
bmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvci09KFVJbnQxMjhJbXBsIG90aGVy
KSB7CisgICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxp
bmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcio9KFVJbnQxMjhJbXBsIG90aGVy
KSB7CisgICp0aGlzID0gKnRoaXMgKiBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxp
bmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvci89KFVJbnQxMjhJbXBsIG90aGVy
KSB7CisgICp0aGlzID0gKnRoaXMgLyBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxp
bmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvciU9KFVJbnQxMjhJbXBsIG90aGVy
KSB7CisgICp0aGlzID0gKnRoaXMgJSBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitjb25z
dGV4cHIgdWludDY0X3QgVUludDEyOExvdzY0KFVJbnQxMjhJbXBsIHYpIHsgcmV0dXJuIHYubG9f
OyB9CisKK2NvbnN0ZXhwciB1aW50NjRfdCBVSW50MTI4SGlnaDY0KFVJbnQxMjhJbXBsIHYpIHsg
cmV0dXJuIHYuaGlfOyB9CisKKy8vIENvbnN0cnVjdG9ycyBmcm9tIGludGVnZXIgdHlwZXMuCisK
KyNpZiBDUFUoTElUVExFX0VORElBTikKKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4
SW1wbCh1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpCisgICAgOiBsb197bG93fSwgaGlfe2hp
Z2h9IHt9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwoaW50IHYpCisgICAg
OiBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwKKyAgICAgIGhpX3t2IDwgMCA/IChzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpIDogMH0ge30KK2NvbnN0ZXhwciBVSW50
MTI4SW1wbDo6VUludDEyOEltcGwobG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAg
IDogbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0sCisgICAgICBoaV97diA8IDAgPyAoc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSA6IDB9IHt9Citjb25zdGV4cHIgVUlu
dDEyOEltcGw6OlVJbnQxMjhJbXBsKGxvbmcgbG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50
KQorICAgIDogbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0sCisgICAgICBoaV97diA8IDAg
PyAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSA6IDB9IHt9CisKK2NvbnN0
ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwodW5zaWduZWQgaW50IHYpIDogbG9fe3Z9LCBo
aV97MH0ge30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQx
MjhJbXBsOjpVSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpIDogbG9fe3Z9LCBoaV97MH0ge30K
Ky8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpV
SW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxvbmcgdikgOiBsb197dn0sIGhpX3swfSB7fQorCitj
b25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKEludDEyOEltcGwgdikKKyAgICA6IGxv
X3tJbnQxMjhMb3c2NCh2KX0sIGhpX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4SGlnaDY0
KHYpKX0ge30KKworI2VsaWYgQ1BVKEJJR19FTkRJQU4pCisKK2NvbnN0ZXhwciBVSW50MTI4SW1w
bDo6VUludDEyOEltcGwodWludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KQorICAgIDogaGlfe2hp
Z2h9LCBsb197bG93fSB7fQorCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKGlu
dCB2KQorICAgIDogaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+Ojpt
YXgpKCkgOiAwfSwKKyAgICAgIGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9IHt9Citjb25z
dGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKGxvbmcgdikgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgICA6IGhpX3t2IDwgMCA/IChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6
bWF4KSgpIDogMH0sCisgICAgICBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSB7fQorY29u
c3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChsb25nIGxvbmcgdikgIC8vIE5PTElOVChy
dW50aW1lL2ludCkKKyAgICA6IGhpX3t2IDwgMCA/IChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2
NF90Pjo6bWF4KSgpIDogMH0sCisgICAgICBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSB7
fQorCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKHVuc2lnbmVkIGludCB2KSA6
IGhpX3swfSwgbG9fe3Z9IHt9CisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0
ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwodW5zaWduZWQgbG9uZyB2KSA6IGhpX3swfSwg
bG9fe3Z9IHt9CisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0ZXhwciBVSW50
MTI4SW1wbDo6VUludDEyOEltcGwodW5zaWduZWQgbG9uZyBsb25nIHYpIDogaGlfezB9LCBsb197
dn0ge30KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChJbnQxMjhJbXBsIHYp
CisgICAgOiBoaV97c3RhdGljX2Nhc3Q8dWludDY0X3Q+KEludDEyOEhpZ2g2NCh2KSl9LCBsb197
SW50MTI4TG93NjQodil9IHt9CisKKyNlbHNlICAvLyBieXRlIG9yZGVyCisjZXJyb3IgIlVuc3Vw
cG9ydGVkIGJ5dGUgb3JkZXI6IG11c3QgYmUgbGl0dGxlLWVuZGlhbiBvciBiaWctZW5kaWFuLiIK
KyNlbmRpZiAgLy8gYnl0ZSBvcmRlcgorCisvLyBDb252ZXJzaW9uIG9wZXJhdG9ycyB0byBpbnRl
Z2VyIHR5cGVzLgorCitjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBsb18gfHwgaGlfOyB9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0
b3IgY2hhcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KGxvXyk7IH0KKworY29u
c3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBzaWduZWQgY2hhcigpIGNvbnN0IHsKKyAgcmV0
dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPihsb18pOworfQorCitjb25zdGV4cHIgVUludDEy
OEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGNoYXIoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihsb18pOworfQorCitjb25zdGV4cHIgVUludDEyOEltcGw6Om9w
ZXJhdG9yIGNoYXIxNl90KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcjE2X3Q+
KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgY2hhcjMyX3QoKSBj
b25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyMzJfdD4obG9fKTsKK30KKworY29uc3Rl
eHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBBQlNMX0lOVEVSTkFMX1dDSEFSX1QoKSBjb25zdCB7
CisgIHJldHVybiBzdGF0aWNfY2FzdDxBQlNMX0lOVEVSTkFMX1dDSEFSX1Q+KGxvXyk7Cit9CisK
Ky8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpv
cGVyYXRvciBzaG9ydCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0Pihsb18pOyB9
CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5zaWduZWQgc2hvcnQoKSBjb25z
dCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4obG9fKTsgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9CisKK2Nv
bnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgaW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50Pihsb18pOyB9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgaW50KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihs
b18pOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0ZXhwciBVSW50
MTI4SW1wbDo6b3BlcmF0b3IgbG9uZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+
KGxvXyk7IH0KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBsb25n
KCkgY29uc3QgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZz4obG9fKTsgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9
CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3QgeyAg
Ly8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihs
b18pOyAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKK30KKworY29uc3RleHByIFVJ
bnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBsb25nIGxvbmcoKSBjb25zdCB7ICAvLyBOT0xJ
TlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KGxvXyk7ICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorfQorCisvLyBDb252ZXJz
aW9uIG9wZXJhdG9ycyB0byBmbG9hdGluZyBwb2ludCB0eXBlcy4KKworaW5saW5lIFVJbnQxMjhJ
bXBsOjpvcGVyYXRvciBmbG9hdCgpIGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
Pihsb18pICsgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxmbG9hdD4oaGlfKSwgNjQpOworfQorCitp
bmxpbmUgVUludDEyOEltcGw6Om9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0IHsKKyAgcmV0dXJuIHN0
YXRpY19jYXN0PGRvdWJsZT4obG9fKSArIHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPiho
aV8pLCA2NCk7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbDo6b3BlcmF0b3IgbG9uZyBkb3VibGUo
KSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4obG9fKSArCisgICAg
ICAgICBzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPihoaV8pLCA2NCk7Cit9CisK
Ky8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KFVJ
bnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiAoVUludDEyOExvdzY0
KGxocykgPT0gVUludDEyOExvdzY0KHJocykgJiYKKyAgICAgICAgICBVSW50MTI4SGlnaDY0KGxo
cykgPT0gVUludDEyOEhpZ2g2NChyaHMpKTsKK30KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3Ih
PShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeyByZXR1cm4gIShsaHMgPT0gcmhz
KTsgfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoVUludDEyOEltcGwgbGhzLCBVSW50MTI4
SW1wbCByaHMpIHsKKyAgcmV0dXJuIChVSW50MTI4SGlnaDY0KGxocykgPT0gVUludDEyOEhpZ2g2
NChyaHMpKQorICAgICAgICAgICAgID8gKFVJbnQxMjhMb3c2NChsaHMpIDwgVUludDEyOExvdzY0
KHJocykpCisgICAgICAgICAgICAgOiAoVUludDEyOEhpZ2g2NChsaHMpIDwgVUludDEyOEhpZ2g2
NChyaHMpKTsKK30KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KFVJbnQxMjhJbXBsIGxocywg
VUludDEyOEltcGwgcmhzKSB7IHJldHVybiByaHMgPCBsaHM7IH0KKworY29uc3RleHByIGJvb2wg
b3BlcmF0b3I8PShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeyByZXR1cm4gIShy
aHMgPCBsaHMpOyB9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oVUludDEyOEltcGwgbGhz
LCBVSW50MTI4SW1wbCByaHMpIHsgcmV0dXJuICEobGhzIDwgcmhzKTsgfQorCisvLyBVbmFyeSBv
cGVyYXRvcnMuCisKK2NvbnN0ZXhwciBpbmxpbmUgVUludDEyOEltcGwgb3BlcmF0b3IrKFVJbnQx
MjhJbXBsIHZhbCkgeworICByZXR1cm4gdmFsOworfQorCitjb25zdGV4cHIgaW5saW5lIEludDEy
OEltcGwgb3BlcmF0b3IrKEludDEyOEltcGwgdmFsKSB7CisgIHJldHVybiB2YWw7Cit9CisKK2Nv
bnN0ZXhwciBVSW50MTI4SW1wbCBvcGVyYXRvci0oVUludDEyOEltcGwgdmFsKSB7CisgIHJldHVy
biBNYWtlVUludDEyOCgKKyAgICAgIH5VSW50MTI4SGlnaDY0KHZhbCkgKyBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihVSW50MTI4TG93NjQodmFsKSA9PSAwKSwKKyAgICAgIH5VSW50MTI4TG93
NjQodmFsKSArIDEpOworfQorCitjb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3IhKFVJbnQx
MjhJbXBsIHZhbCkgeworICByZXR1cm4gIVVJbnQxMjhIaWdoNjQodmFsKSAmJiAhVUludDEyOExv
dzY0KHZhbCk7Cit9CisKKy8vIExvZ2ljYWwgb3BlcmF0b3JzLgorCitjb25zdGV4cHIgaW5saW5l
IFVJbnQxMjhJbXBsIG9wZXJhdG9yfihVSW50MTI4SW1wbCB2YWwpIHsKKyAgcmV0dXJuIE1ha2VV
SW50MTI4KH5VSW50MTI4SGlnaDY0KHZhbCksIH5VSW50MTI4TG93NjQodmFsKSk7Cit9CisKK2Nv
bnN0ZXhwciBpbmxpbmUgVUludDEyOEltcGwgb3BlcmF0b3J8KFVJbnQxMjhJbXBsIGxocywgVUlu
dDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtlVUludDEyOChVSW50MTI4SGlnaDY0KGxocykg
fCBVSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQo
bGhzKSB8IFVJbnQxMjhMb3c2NChyaHMpKTsKK30KKworY29uc3RleHByIGlubGluZSBVSW50MTI4
SW1wbCBvcGVyYXRvciYoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0
dXJuIE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQobGhzKSAmIFVJbnQxMjhIaWdoNjQocmhzKSwK
KyAgICAgICAgICAgICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpICYgVUludDEyOExvdzY0KHJo
cykpOworfQorCitjb25zdGV4cHIgaW5saW5lIFVJbnQxMjhJbXBsIG9wZXJhdG9yXihVSW50MTI4
SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gTWFrZVVJbnQxMjgoVUludDEy
OEhpZ2g2NChsaHMpIF4gVUludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAgICAgICAgICAgICAg
VUludDEyOExvdzY0KGxocykgXiBVSW50MTI4TG93NjQocmhzKSk7Cit9CisKK2lubGluZSBVSW50
MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yfD0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAg
KnRoaXMgPSAqdGhpcyB8IG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50
MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yJj0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAg
KnRoaXMgPSAqdGhpcyAmIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50
MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yXj0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAg
KnRoaXMgPSAqdGhpcyBeIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKKy8vIEFyaXRobWV0
aWMgb3BlcmF0b3JzLgorCitjb25zdGV4cHIgVUludDEyOEltcGwgb3BlcmF0b3I8PChVSW50MTI4
SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAgLy8gdWludDY0X3Qgc2hpZnRzIG9mID49IDY0IGFy
ZSB1bmRlZmluZWQsIHNvIHdlIHdpbGwgbmVlZCBzb21lCisgIC8vIHNwZWNpYWwtY2FzaW5nLgor
ICByZXR1cm4gYW1vdW50ID49IDY0ID8gTWFrZVVJbnQxMjgoVUludDEyOExvdzY0KGxocykgPDwg
KGFtb3VudCAtIDY0KSwgMCkKKyAgICAgICAgIDogYW1vdW50ID09IDAgPyBsaHMKKyAgICAgICAg
ICAgICAgICAgICAgICAgOiBNYWtlVUludDEyOCgoVUludDEyOEhpZ2g2NChsaHMpIDw8IGFtb3Vu
dCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUludDEyOExv
dzY0KGxocykgPj4gKDY0IC0gYW1vdW50KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVUludDEyOExvdzY0KGxocykgPDwgYW1vdW50KTsKK30KKworY29uc3RleHByIFVJ
bnQxMjhJbXBsIG9wZXJhdG9yPj4oVUludDEyOEltcGwgbGhzLCBpbnQgYW1vdW50KSB7CisgIC8v
IHVpbnQ2NF90IHNoaWZ0cyBvZiA+PSA2NCBhcmUgdW5kZWZpbmVkLCBzbyB3ZSB3aWxsIG5lZWQg
c29tZQorICAvLyBzcGVjaWFsLWNhc2luZy4KKyAgcmV0dXJuIGFtb3VudCA+PSA2NCA/IE1ha2VV
SW50MTI4KDAsIFVJbnQxMjhIaWdoNjQobGhzKSA+PiAoYW1vdW50IC0gNjQpKQorICAgICAgICAg
OiBhbW91bnQgPT0gMCA/IGxocworICAgICAgICAgICAgICAgICAgICAgICA6IE1ha2VVSW50MTI4
KFVJbnQxMjhIaWdoNjQobGhzKSA+PiBhbW91bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKFVJbnQxMjhMb3c2NChsaHMpID4+IGFtb3VudCkgfAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUludDEyOEhpZ2g2NChsaHMpIDw8ICg2NCAt
IGFtb3VudCkpKTsKK30KKworbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7Citjb25zdGV4cHIg
VUludDEyOEltcGwgQWRkUmVzdWx0KFVJbnQxMjhJbXBsIHJlc3VsdCwgVUludDEyOEltcGwgbGhz
KSB7CisgIC8vIGNoZWNrIGZvciBjYXJyeQorICByZXR1cm4gKFVJbnQxMjhMb3c2NChyZXN1bHQp
IDwgVUludDEyOExvdzY0KGxocykpCisgICAgICAgICAgICAgPyBNYWtlVUludDEyOChVSW50MTI4
SGlnaDY0KHJlc3VsdCkgKyAxLCBVSW50MTI4TG93NjQocmVzdWx0KSkKKyAgICAgICAgICAgICA6
IHJlc3VsdDsKK30KK30gIC8vIG5hbWVzcGFjZSBpbnQxMjhfaW50ZXJuYWwKKworY29uc3RleHBy
IFVJbnQxMjhJbXBsIG9wZXJhdG9yKyhVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykg
eworICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpBZGRSZXN1bHQoCisgICAgICBNYWtlVUludDEy
OChVSW50MTI4SGlnaDY0KGxocykgKyBVSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAg
ICAgICBVSW50MTI4TG93NjQobGhzKSArIFVJbnQxMjhMb3c2NChyaHMpKSwKKyAgICAgIGxocyk7
Cit9CisKK25hbWVzcGFjZSBpbnQxMjhfaW50ZXJuYWwgeworY29uc3RleHByIFVJbnQxMjhJbXBs
IFN1YnN0cnVjdFJlc3VsdChVSW50MTI4SW1wbCByZXN1bHQsIFVJbnQxMjhJbXBsIGxocywgVUlu
dDEyOEltcGwgcmhzKSB7CisgIC8vIGNoZWNrIGZvciBjYXJyeQorICByZXR1cm4gKFVJbnQxMjhM
b3c2NChsaHMpIDwgVUludDEyOExvdzY0KHJocykpCisgICAgICAgICAgICAgPyBNYWtlVUludDEy
OChVSW50MTI4SGlnaDY0KHJlc3VsdCkgLSAxLCBVSW50MTI4TG93NjQocmVzdWx0KSkKKyAgICAg
ICAgICAgICA6IHJlc3VsdDsKK30KK30gIC8vIG5hbWVzcGFjZSBpbnQxMjhfaW50ZXJuYWwKKwor
Y29uc3RleHByIFVJbnQxMjhJbXBsIG9wZXJhdG9yLShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJ
bXBsIHJocykgeworICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpTdWJzdHJ1Y3RSZXN1bHQoCisg
ICAgICBNYWtlVUludDEyOChVSW50MTI4SGlnaDY0KGxocykgLSBVSW50MTI4SGlnaDY0KHJocyks
CisgICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQobGhzKSAtIFVJbnQxMjhMb3c2NChyaHMp
KSwKKyAgICAgIGxocywgcmhzKTsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsIG9wZXJhdG9yKihV
SW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworI2lmIENPTVBJTEVSKE1TVkMpICYm
IENQVShYODZfNjQpCisgIHVpbnQ2NF90IGNhcnJ5OworICB1aW50NjRfdCBsb3cgPSBfdW11bDEy
OChVSW50MTI4TG93NjQobGhzKSwgVUludDEyOExvdzY0KHJocyksICZjYXJyeSk7CisgIHJldHVy
biBNYWtlVUludDEyOChVSW50MTI4TG93NjQobGhzKSAqIFVJbnQxMjhIaWdoNjQocmhzKSArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgVUludDEyOEhpZ2g2NChsaHMpICogVUludDEyOExvdzY0
KHJocykgKyBjYXJyeSwKKyAgICAgICAgICAgICAgICAgICAgIGxvdyk7CisjZWxzZSAgIC8vIEFC
U0xfSEFWRV9JTlRSSU5TSUMxMjgKKyAgdWludDY0X3QgYTMyID0gVUludDEyOExvdzY0KGxocykg
Pj4gMzI7CisgIHVpbnQ2NF90IGEwMCA9IFVJbnQxMjhMb3c2NChsaHMpICYgMHhmZmZmZmZmZjsK
KyAgdWludDY0X3QgYjMyID0gVUludDEyOExvdzY0KHJocykgPj4gMzI7CisgIHVpbnQ2NF90IGIw
MCA9IFVJbnQxMjhMb3c2NChyaHMpICYgMHhmZmZmZmZmZjsKKyAgVUludDEyOEltcGwgcmVzdWx0
ID0KKyAgICAgIE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQobGhzKSAqIFVJbnQxMjhMb3c2NChy
aHMpICsKKyAgICAgICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQobGhzKSAqIFVJbnQxMjhI
aWdoNjQocmhzKSArIGEzMiAqIGIzMiwKKyAgICAgICAgICAgICAgICAgIGEwMCAqIGIwMCk7Cisg
IHJlc3VsdCArPSBVSW50MTI4SW1wbChhMzIgKiBiMDApIDw8IDMyOworICByZXN1bHQgKz0gVUlu
dDEyOEltcGwoYTAwICogYjMyKSA8PCAzMjsKKyAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorfQor
CisvLyBJbmNyZW1lbnQvZGVjcmVtZW50IG9wZXJhdG9ycy4KKworaW5saW5lIFVJbnQxMjhJbXBs
IFVJbnQxMjhJbXBsOjpvcGVyYXRvcisrKGludCkgeworICBVSW50MTI4SW1wbCB0bXAoKnRoaXMp
OworICAqdGhpcyArPSAxOworICByZXR1cm4gdG1wOworfQorCitpbmxpbmUgVUludDEyOEltcGwg
VUludDEyOEltcGw6Om9wZXJhdG9yLS0oaW50KSB7CisgIFVJbnQxMjhJbXBsIHRtcCgqdGhpcyk7
CisgICp0aGlzIC09IDE7CisgIHJldHVybiB0bXA7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCYg
VUludDEyOEltcGw6Om9wZXJhdG9yKysoKSB7CisgICp0aGlzICs9IDE7CisgIHJldHVybiAqdGhp
czsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3ItLSgpIHsK
KyAgKnRoaXMgLT0gMTsKKyAgcmV0dXJuICp0aGlzOworfQorCitjb25zdGV4cHIgSW50MTI4SW1w
bCBNYWtlSW50MTI4KGludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KSB7CisgIHJldHVybiBJbnQx
MjhJbXBsKGhpZ2gsIGxvdyk7Cit9CisKKy8vIEFzc2lnbm1lbnQgZnJvbSBpbnRlZ2VyIHR5cGVz
LgoraW5saW5lIEludDEyOEltcGwmIEludDEyOEltcGw6Om9wZXJhdG9yPShpbnQgdikgeworICBy
ZXR1cm4gKnRoaXMgPSBJbnQxMjhJbXBsKHYpOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50
MTI4SW1wbDo6b3BlcmF0b3I9KHVuc2lnbmVkIGludCB2KSB7CisgIHJldHVybiAqdGhpcyA9IElu
dDEyOEltcGwodik7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRv
cj0obG9uZyB2KSB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiAqdGhpcyA9IElu
dDEyOEltcGwodik7Cit9CisKKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQoraW5saW5l
IEludDEyOEltcGwmIEludDEyOEltcGw6Om9wZXJhdG9yPSh1bnNpZ25lZCBsb25nIHYpIHsKKyAg
cmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUocnVu
dGltZS9pbnQpCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KGxvbmcg
bG9uZyB2KSB7CisgIHJldHVybiAqdGhpcyA9IEludDEyOEltcGwodik7Cit9CisKKy8vIE5PTElO
VE5FWFRMSU5FKHJ1bnRpbWUvaW50KQoraW5saW5lIEludDEyOEltcGwmIEludDEyOEltcGw6Om9w
ZXJhdG9yPSh1bnNpZ25lZCBsb25nIGxvbmcgdikgeworICByZXR1cm4gKnRoaXMgPSBJbnQxMjhJ
bXBsKHYpOworfQorCisvLyBBcml0aG1ldGljIG9wZXJhdG9ycy4KK2NvbnN0ZXhwciBJbnQxMjhJ
bXBsIG9wZXJhdG9yLShJbnQxMjhJbXBsIHYpOworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3IrKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocyk7Citjb25zdGV4cHIgSW50MTI4SW1w
bCBvcGVyYXRvci0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsKK0ludDEyOEltcGwg
b3BlcmF0b3IqKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocyk7CitJbnQxMjhJbXBsIG9w
ZXJhdG9yLyhJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworSW50MTI4SW1wbCBvcGVy
YXRvciUoSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJ
bXBsIG9wZXJhdG9yfChJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworY29uc3RleHBy
IEludDEyOEltcGwgb3BlcmF0b3ImKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocyk7Citj
b25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcl4oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwg
cmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yPDwoSW50MTI4SW1wbCBsaHMsIGlu
dCBhbW91bnQpOworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3I+PihJbnQxMjhJbXBsIGxo
cywgaW50IGFtb3VudCk7CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRv
cis9KEludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyArIG90aGVyOworICByZXR1
cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvci09
KEludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyAtIG90aGVyOworICByZXR1cm4g
KnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcio9KElu
dDEyOEltcGwgb3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyAqIG90aGVyOworICByZXR1cm4gKnRo
aXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvci89KEludDEy
OEltcGwgb3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyAvIG90aGVyOworICByZXR1cm4gKnRoaXM7
Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvciU9KEludDEyOElt
cGwgb3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyAlIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9
CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcnw9KEludDEyOEltcGwg
b3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyB8IG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisK
K2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvciY9KEludDEyOEltcGwgb3Ro
ZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyAmIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lu
bGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcl49KEludDEyOEltcGwgb3RoZXIp
IHsKKyAgKnRoaXMgPSAqdGhpcyBeIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGlu
ZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcjw8PShpbnQgYW1vdW50KSB7CisgICp0
aGlzID0gKnRoaXMgPDwgYW1vdW50OworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQx
MjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcj4+PShpbnQgYW1vdW50KSB7CisgICp0aGlzID0g
KnRoaXMgPj4gYW1vdW50OworICByZXR1cm4gKnRoaXM7Cit9CisKKy8vIEZvcndhcmQgZGVjbGFy
YXRpb24gZm9yIGNvbXBhcmlzb24gb3BlcmF0b3JzLgorY29uc3RleHByIGJvb2wgb3BlcmF0b3Ih
PShJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworCituYW1lc3BhY2UgaW50MTI4X2lu
dGVybmFsIHsKKworLy8gQ2FzdHMgZnJvbSB1bnNpZ25lZCB0byBzaWduZWQgd2hpbGUgcHJlc2Vy
dmluZyB0aGUgdW5kZXJseWluZyBiaW5hcnkKKy8vIHJlcHJlc2VudGF0aW9uLgorY29uc3RleHBy
IGludDY0X3QgQml0Q2FzdFRvU2lnbmVkKHVpbnQ2NF90IHYpIHsKKyAgLy8gQ2FzdGluZyBhbiB1
bnNpZ25lZCBpbnRlZ2VyIHRvIGEgc2lnbmVkIGludGVnZXIgb2YgdGhlIHNhbWUKKyAgLy8gd2lk
dGggaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBiZWhhdmlvciBpZiB0aGUgc291cmNlIHZhbHVl
IHdvdWxkIG5vdCBmaXQKKyAgLy8gaW4gdGhlIGRlc3RpbmF0aW9uIHR5cGUuIFdlIHN0ZXAgYXJv
dW5kIGl0IHdpdGggYSByb3VuZHRyaXAgYml0d2lzZSBub3QKKyAgLy8gb3BlcmF0aW9uIHRvIG1h
a2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIHJlbWFpbnMgY29uc3RleHByLiBDbGFuZywgR0NDLCBhbmQK
KyAgLy8gTVNWQyBvcHRpbWl6ZSB0aGlzIHRvIGEgbm8tb3Agb24geDg2LTY0LgorICByZXR1cm4g
diAmICh1aW50NjRfdHsxfSA8PCA2MykgPyB+c3RhdGljX2Nhc3Q8aW50NjRfdD4ofnYpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHYpOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgaW50MTI4X2ludGVybmFsCisKKy8vICNpbmNsdWRlICJhYnNs
L251bWVyaWMvaW50MTI4X25vX2ludHJpbnNpYy5pbmMiICAvLyBJV1lVIHByYWdtYTogZXhwb3J0
CisKK2NvbnN0ZXhwciB1aW50NjRfdCBJbnQxMjhMb3c2NChJbnQxMjhJbXBsIHYpIHsgcmV0dXJu
IHYubG9fOyB9CisKK2NvbnN0ZXhwciBpbnQ2NF90IEludDEyOEhpZ2g2NChJbnQxMjhJbXBsIHYp
IHsgcmV0dXJuIHYuaGlfOyB9CisKKyNpZiBDUFUoTElUVExFX0VORElBTikKKworY29uc3RleHBy
IEludDEyOEltcGw6OkludDEyOEltcGwoaW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpIDoKKyAg
ICBsb18obG93KSwgaGlfKGhpZ2gpIHt9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJ
bXBsKGludCB2KQorICAgIDogbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0sIGhpX3t2IDwg
MCA/IH5pbnQ2NF90ezB9IDogMH0ge30KK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KGxvbmcgdikgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgICA6IGxvX3tzdGF0aWNfY2FzdDx1
aW50NjRfdD4odil9LCBoaV97diA8IDAgPyB+aW50NjRfdHswfSA6IDB9IHt9Citjb25zdGV4cHIg
SW50MTI4SW1wbDo6SW50MTI4SW1wbChsb25nIGxvbmcgdikgIC8vIE5PTElOVChydW50aW1lL2lu
dCkKKyAgICA6IGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9LCBoaV97diA8IDAgPyB+aW50
NjRfdHswfSA6IDB9IHt9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKHVuc2ln
bmVkIGludCB2KSA6IGxvX3t2fSwgaGlfezB9IHt9CisvLyBOT0xJTlRORVhUTElORShydW50aW1l
L2ludCkKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgdikg
OiBsb197dn0sIGhpX3swfSB7fQorLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25z
dGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxvbmcgdikgOiBsb197
dn0sIGhpX3swfSB7fQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChVSW50MTI4
SW1wbCB2KQorICAgIDogbG9fe1VJbnQxMjhMb3c2NCh2KX0sIGhpX3tzdGF0aWNfY2FzdDxpbnQ2
NF90PihVSW50MTI4SGlnaDY0KHYpKX0ge30KKworI2VsaWYgQ1BVKEJJR19FTkRJQU4pCisKK2Nv
bnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGludDY0X3QgaGlnaCwgdWludDY0X3QgbG93
KSA6CisgICAgaGlfe2hpZ2h9LCBsb197bG93fSB7fQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6
SW50MTI4SW1wbChpbnQgdikKKyAgICA6IGhpX3t2IDwgMCA/IH5pbnQ2NF90ezB9IDogMH0sIGxv
X3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9IHt9Citjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50
MTI4SW1wbChsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBoaV97diA8IDAg
PyB+aW50NjRfdHswfSA6IDB9LCBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSB7fQorY29u
c3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwobG9uZyBsb25nIHYpICAvLyBOT0xJTlQocnVu
dGltZS9pbnQpCisgICAgOiBoaV97diA8IDAgPyB+aW50NjRfdHswfSA6IDB9LCBsb197c3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHYpfSB7fQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1w
bCh1bnNpZ25lZCBpbnQgdikgOiBoaV97MH0sIGxvX3t2fSB7fQorLy8gTk9MSU5UTkVYVExJTkUo
cnVudGltZS9pbnQpCitjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbCh1bnNpZ25lZCBs
b25nIHYpIDogaGlfezB9LCBsb197dn0ge30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50
KQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwodW5zaWduZWQgbG9uZyBsb25nIHYp
IDogaGlfezB9LCBsb197dn0ge30KKworY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwo
VUludDEyOEltcGwgdikKKyAgICA6IGhpX3tzdGF0aWNfY2FzdDxpbnQ2NF90PihVSW50MTI4SGln
aDY0KHYpKX0sIGxvX3tVSW50MTI4TG93NjQodil9IHt9CisKKyNlbHNlICAvLyBieXRlIG9yZGVy
CisjZXJyb3IgIlVuc3VwcG9ydGVkIGJ5dGUgb3JkZXI6IG11c3QgYmUgbGl0dGxlLWVuZGlhbiBv
ciBiaWctZW5kaWFuLiIKKyNlbmRpZiAgLy8gYnl0ZSBvcmRlcgorCitjb25zdGV4cHIgSW50MTI4
SW1wbDo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGxvXyB8fCBoaV87IH0KKworY29u
c3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIGNoYXIoKSBjb25zdCB7CisgIC8vIE5PTElOVE5F
WFRMSU5FKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPigqdGhpcykpOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0
b3Igc2lnbmVkIGNoYXIoKSBjb25zdCB7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50
KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KHN0YXRpY19jYXN0PGxvbmcgbG9u
Zz4oKnRoaXMpKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVk
IGNoYXIoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihsb18p
OworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgY2hhcjE2X3QoKSBjb25zdCB7
CisgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyMTZfdD4obG9fKTsKK30KKworY29uc3RleHByIElu
dDEyOEltcGw6Om9wZXJhdG9yIGNoYXIzMl90KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y2hhcjMyX3Q+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBB
QlNMX0lOVEVSTkFMX1dDSEFSX1QoKSBjb25zdCB7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRp
bWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8QUJTTF9JTlRFUk5BTF9XQ0hBUl9UPihzdGF0
aWNfY2FzdDxsb25nIGxvbmc+KCp0aGlzKSk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpv
cGVyYXRvciBzaG9ydCgpIGNvbnN0IHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgLy8gTk9M
SU5UTkVYVExJTkUocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPigqdGhpcykpOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6
b3BlcmF0b3IgdW5zaWduZWQgc2hvcnQoKSBjb25zdCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQp
CisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4obG9fKTsgICAgICAgICAgIC8v
IE5PTElOVChydW50aW1lL2ludCkKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9y
IGludCgpIGNvbnN0IHsKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCisgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsKK30KKwor
Y29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGludCgpIGNvbnN0IHsKKyAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4obG9fKTsKK30KKworY29uc3RleHByIElu
dDEyOEltcGw6Om9wZXJhdG9yIGxvbmcoKSBjb25zdCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQp
CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8
bG9uZz4oc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigqdGhpcykpOworfQorCitjb25zdGV4cHIgSW50
MTI4SW1wbDo6b3BlcmF0b3IgdW5zaWduZWQgbG9uZygpIGNvbnN0IHsgIC8vIE5PTElOVChydW50
aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGxvXyk7ICAgICAg
ICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpv
cGVyYXRvciBsb25nIGxvbmcoKSBjb25zdCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIC8v
IFdlIGRvbid0IGJvdGhlciBjaGVja2luZyB0aGUgdmFsdWUgb2YgaGlfLiBJZiAqdGhpcyA8IDAs
IGxvXydzIGhpZ2ggYml0CisgIC8vIG11c3QgYmUgc2V0IGluIG9yZGVyIGZvciB0aGUgdmFsdWUg
dG8gZml0IGludG8gYSBsb25nIGxvbmcuIENvbnZlcnNlbHksIGlmCisgIC8vIGxvXydzIGhpZ2gg
Yml0IGlzIHNldCwgKnRoaXMgbXVzdCBiZSA8IDAgZm9yIHRoZSB2YWx1ZSB0byBmaXQuCisgIHJl
dHVybiBpbnQxMjhfaW50ZXJuYWw6OkJpdENhc3RUb1NpZ25lZChsb18pOworfQorCitjb25zdGV4
cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5zaWduZWQgbG9uZyBsb25nKCkgY29uc3QgeyAgLy8g
Tk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBs
b25nPihsb18pOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorfQorCitpbmxpbmUg
SW50MTI4SW1wbDo6b3BlcmF0b3IgZmxvYXQoKSBjb25zdCB7CisgIC8vIFdlIG11c3QgY29udmVy
dCB0aGUgYWJzb2x1dGUgdmFsdWUgYW5kIHRoZW4gbmVnYXRlIGFzIG5lZWRlZCwgYmVjYXVzZQor
ICAvLyBmbG9hdGluZyBwb2ludCB0eXBlcyBhcmUgdHlwaWNhbGx5IHNpZ24tbWFnbml0dWRlLiBP
dGhlcndpc2UsIHRoZQorICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGhpZ2ggYW5kIGxvdyA2
NCBiaXRzIHdoZW4gaW50ZXJwcmV0ZWQgYXMgdHdvJ3MKKyAgLy8gY29tcGxlbWVudCBvdmVyd2hl
bG1zIHRoZSBwcmVjaXNpb24gb2YgdGhlIG1hbnRpc3NhLgorICAvLworICAvLyBBbHNvIGNoZWNr
IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBuZWdhdGUgSW50MTI4TWluKCkKKyAgcmV0dXJuIGhpXyA8
IDAgJiYgKnRoaXMgIT0gSW50MTI4TWluKCkKKyAgICAgICAgICAgICA/IC1zdGF0aWNfY2FzdDxm
bG9hdD4oLSp0aGlzKQorICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvXykgKwor
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhpXyksIDY0
KTsKK30KKworaW5saW5lIEludDEyOEltcGw6Om9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0IHsKKyAg
Ly8gU2VlIGNvbW1lbnQgaW4gSW50MTI4SW1wbDo6b3BlcmF0b3IgZmxvYXQoKSBhYm92ZS4KKyAg
cmV0dXJuIGhpXyA8IDAgJiYgKnRoaXMgIT0gSW50MTI4TWluKCkKKyAgICAgICAgICAgICA/IC1z
dGF0aWNfY2FzdDxkb3VibGU+KC0qdGhpcykKKyAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PGRv
dWJsZT4obG9fKSArCisgICAgICAgICAgICAgICAgICAgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxk
b3VibGU+KGhpXyksIDY0KTsKK30KKworaW5saW5lIEludDEyOEltcGw6Om9wZXJhdG9yIGxvbmcg
ZG91YmxlKCkgY29uc3QgeworICAvLyBTZWUgY29tbWVudCBpbiBJbnQxMjhJbXBsOjpvcGVyYXRv
ciBmbG9hdCgpIGFib3ZlLgorICByZXR1cm4gaGlfIDwgMCAmJiAqdGhpcyAhPSBJbnQxMjhNaW4o
KQorICAgICAgICAgICAgID8gLXN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigtKnRoaXMpCisgICAg
ICAgICAgICAgOiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4obG9fKSArCisgICAgICAgICAgICAg
ICAgICAgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oaGlfKSwgNjQpOworfQor
CisvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShJ
bnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIChJbnQxMjhMb3c2NChs
aHMpID09IEludDEyOExvdzY0KHJocykgJiYKKyAgICAgICAgICBJbnQxMjhIaWdoNjQobGhzKSA9
PSBJbnQxMjhIaWdoNjQocmhzKSk7Cit9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oSW50
MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7IHJldHVybiAhKGxocyA9PSByaHMpOyB9CisK
K2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPChJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMp
IHsKKyAgcmV0dXJuIChJbnQxMjhIaWdoNjQobGhzKSA9PSBJbnQxMjhIaWdoNjQocmhzKSkKKyAg
ICAgICAgICAgICA/IChJbnQxMjhMb3c2NChsaHMpIDwgSW50MTI4TG93NjQocmhzKSkKKyAgICAg
ICAgICAgICA6IChJbnQxMjhIaWdoNjQobGhzKSA8IEludDEyOEhpZ2g2NChyaHMpKTsKK30KKwor
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eworICByZXR1cm4gKEludDEyOEhpZ2g2NChsaHMpID09IEludDEyOEhpZ2g2NChyaHMpKQorICAg
ICAgICAgICAgID8gKEludDEyOExvdzY0KGxocykgPiBJbnQxMjhMb3c2NChyaHMpKQorICAgICAg
ICAgICAgIDogKEludDEyOEhpZ2g2NChsaHMpID4gSW50MTI4SGlnaDY0KHJocykpOworfQorCitj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eyByZXR1cm4gIShsaHMgPiByaHMpOyB9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oSW50
MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7IHJldHVybiAhKGxocyA8IHJocyk7IH0KKwor
Ly8gVW5hcnkgb3BlcmF0b3JzLgorCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvci0oSW50
MTI4SW1wbCB2KSB7CisgIHJldHVybiBNYWtlSW50MTI4KH5JbnQxMjhIaWdoNjQodikgKyAoSW50
MTI4TG93NjQodikgPT0gMCksCisgICAgICAgICAgICAgICAgICAgIH5JbnQxMjhMb3c2NCh2KSAr
IDEpOworfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvciEoSW50MTI4SW1wbCB2KSB7CisgIHJl
dHVybiAhSW50MTI4TG93NjQodikgJiYgIUludDEyOEhpZ2g2NCh2KTsKK30KKworY29uc3RleHBy
IEludDEyOEltcGwgb3BlcmF0b3J+KEludDEyOEltcGwgdmFsKSB7CisgIHJldHVybiBNYWtlSW50
MTI4KH5JbnQxMjhIaWdoNjQodmFsKSwgfkludDEyOExvdzY0KHZhbCkpOworfQorCisvLyBBcml0
aG1ldGljIG9wZXJhdG9ycy4KKworbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7Citjb25zdGV4
cHIgSW50MTI4SW1wbCBTaWduZWRBZGRSZXN1bHQoSW50MTI4SW1wbCByZXN1bHQsIEludDEyOElt
cGwgbGhzKSB7CisgIC8vIGNoZWNrIGZvciBjYXJyeQorICByZXR1cm4gKEludDEyOExvdzY0KHJl
c3VsdCkgPCBJbnQxMjhMb3c2NChsaHMpKQorICAgICAgICAgICAgID8gTWFrZUludDEyOChJbnQx
MjhIaWdoNjQocmVzdWx0KSArIDEsIEludDEyOExvdzY0KHJlc3VsdCkpCisgICAgICAgICAgICAg
OiByZXN1bHQ7Cit9Cit9ICAvLyBuYW1lc3BhY2UgaW50MTI4X2ludGVybmFsCitjb25zdGV4cHIg
SW50MTI4SW1wbCBvcGVyYXRvcisoSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7Cisg
IHJldHVybiBpbnQxMjhfaW50ZXJuYWw6OlNpZ25lZEFkZFJlc3VsdCgKKyAgICAgIE1ha2VJbnQx
MjgoSW50MTI4SGlnaDY0KGxocykgKyBJbnQxMjhIaWdoNjQocmhzKSwKKyAgICAgICAgICAgICAg
ICAgSW50MTI4TG93NjQobGhzKSArIEludDEyOExvdzY0KHJocykpLAorICAgICAgbGhzKTsKK30K
KworbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7Citjb25zdGV4cHIgSW50MTI4SW1wbCBTaWdu
ZWRTdWJzdHJ1Y3RSZXN1bHQoSW50MTI4SW1wbCByZXN1bHQsIEludDEyOEltcGwgbGhzLCBJbnQx
MjhJbXBsIHJocykgeworICAvLyBjaGVjayBmb3IgY2FycnkKKyAgcmV0dXJuIChJbnQxMjhMb3c2
NChsaHMpIDwgSW50MTI4TG93NjQocmhzKSkKKyAgICAgICAgICAgICA/IE1ha2VJbnQxMjgoSW50
MTI4SGlnaDY0KHJlc3VsdCkgLSAxLCBJbnQxMjhMb3c2NChyZXN1bHQpKQorICAgICAgICAgICAg
IDogcmVzdWx0OworfQorfSAgLy8gbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbAorY29uc3RleHBy
IEludDEyOEltcGwgb3BlcmF0b3ItKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgewor
ICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpTaWduZWRTdWJzdHJ1Y3RSZXN1bHQoCisgICAgICBN
YWtlSW50MTI4KEludDEyOEhpZ2g2NChsaHMpIC0gSW50MTI4SGlnaDY0KHJocyksCisgICAgICAg
ICAgICAgICAgIEludDEyOExvdzY0KGxocykgLSBJbnQxMjhMb3c2NChyaHMpKSwKKyAgICAgIGxo
cywgcmhzKTsKK30KKworaW5saW5lIEludDEyOEltcGwgb3BlcmF0b3IqKEludDEyOEltcGwgbGhz
LCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gTWFrZUludDEyOCgKKyAgICAgIGludDEyOF9p
bnRlcm5hbDo6Qml0Q2FzdFRvU2lnbmVkKFVJbnQxMjhIaWdoNjQoVUludDEyOEltcGwobGhzKSAq
IHJocykpLAorICAgICAgVUludDEyOExvdzY0KFVJbnQxMjhJbXBsKGxocykgKiByaHMpKTsKK30K
KworaW5saW5lIEludDEyOEltcGwgSW50MTI4SW1wbDo6b3BlcmF0b3IrKyhpbnQpIHsKKyAgSW50
MTI4SW1wbCB0bXAoKnRoaXMpOworICAqdGhpcyArPSAxOworICByZXR1cm4gdG1wOworfQorCitp
bmxpbmUgSW50MTI4SW1wbCBJbnQxMjhJbXBsOjpvcGVyYXRvci0tKGludCkgeworICBJbnQxMjhJ
bXBsIHRtcCgqdGhpcyk7CisgICp0aGlzIC09IDE7CisgIHJldHVybiB0bXA7Cit9CisKK2lubGlu
ZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcisrKCkgeworICAqdGhpcyArPSAxOwor
ICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVy
YXRvci0tKCkgeworICAqdGhpcyAtPSAxOworICByZXR1cm4gKnRoaXM7Cit9CisKK2NvbnN0ZXhw
ciBJbnQxMjhJbXBsIG9wZXJhdG9yfChJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsK
KyAgcmV0dXJuIE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KGxocykgfCBJbnQxMjhIaWdoNjQocmhz
KSwKKyAgICAgICAgICAgICAgICAgICAgSW50MTI4TG93NjQobGhzKSB8IEludDEyOExvdzY0KHJo
cykpOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvciYoSW50MTI4SW1wbCBsaHMs
IEludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChsaHMp
ICYgSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICAgIEludDEyOExvdzY0KGxo
cykgJiBJbnQxMjhMb3c2NChyaHMpKTsKK30KKworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3JeKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gTWFrZUludDEy
OChJbnQxMjhIaWdoNjQobGhzKSBeIEludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAgICAgICAg
ICAgICBJbnQxMjhMb3c2NChsaHMpIF4gSW50MTI4TG93NjQocmhzKSk7Cit9CisKK2NvbnN0ZXhw
ciBJbnQxMjhJbXBsIG9wZXJhdG9yPDwoSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAg
Ly8gaW50NjRfdCBzaGlmdHMgb2YgPj0gNjQgYXJlIHVuZGVmaW5lZCwgc28gd2UgbmVlZCBzb21l
IHNwZWNpYWwtY2FzaW5nLgorICByZXR1cm4gYW1vdW50ID49IDY0CisgICAgICAgICAgICAgPyBN
YWtlSW50MTI4KAorICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDY0X3Q+KEludDEy
OExvdzY0KGxocykgPDwgKGFtb3VudCAtIDY0KSksIDApCisgICAgICAgICA6IGFtb3VudCA9PSAw
CisgICAgICAgICAgICAgPyBsaHMKKyAgICAgICAgICAgICA6IE1ha2VJbnQxMjgoCisgICAgICAg
ICAgICAgICAgICAgKEludDEyOEhpZ2g2NChsaHMpIDw8IGFtb3VudCkgfAorICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihJbnQxMjhMb3c2NChsaHMpID4+ICg2NCAt
IGFtb3VudCkpLAorICAgICAgICAgICAgICAgICAgIEludDEyOExvdzY0KGxocykgPDwgYW1vdW50
KTsKK30KKworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3I+PihJbnQxMjhJbXBsIGxocywg
aW50IGFtb3VudCkgeworICAvLyBpbnQ2NF90IHNoaWZ0cyBvZiA+PSA2NCBhcmUgdW5kZWZpbmVk
LCBzbyB3ZSBuZWVkIHNvbWUgc3BlY2lhbC1jYXNpbmcuCisgIC8vIFRoZSAoSW50MTI4SGlnaDY0
KGxocykgPj4gMzIpID4+IDMyICJ0cmljayIgY2F1c2VzIHRoZSB0aGUgbW9zdCBzaWduaWZpY2Fu
dAorICAvLyBpbnQ2NCB0byBiZSBpbml0aXRpYWxpemVkIHdpdGggYWxsIHplcm9zIG9yIGFsbCBv
bmVzIGNvcnJlY3RseS4gSXQgdGFrZXMKKyAgLy8gaW50byBhY2NvdW50IHdoZXRoZXIgdGhlIG51
bWJlciBpcyBuZWdhdGl2ZSBvciBwb3NpdGl2ZSwgYW5kIHdoZXRoZXIgdGhlCisgIC8vIGN1cnJl
bnQgYXJjaGl0ZWN0dXJlIGRvZXMgYXJpdGhtZXRpYyBvciBsb2dpY2FsIHJpZ2h0IHNoaWZ0cyBm
b3IgbmVnYXRpdmUKKyAgLy8gbnVtYmVycy4KKyAgcmV0dXJuIGFtb3VudCA+PSA2NAorICAgICAg
ICAgICAgID8gTWFrZUludDEyOCgKKyAgICAgICAgICAgICAgICAgICAoSW50MTI4SGlnaDY0KGxo
cykgPj4gMzIpID4+IDMyLAorICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90
PihJbnQxMjhIaWdoNjQobGhzKSA+PiAoYW1vdW50IC0gNjQpKSkKKyAgICAgICAgIDogYW1vdW50
ID09IDAKKyAgICAgICAgICAgICA/IGxocworICAgICAgICAgICAgIDogTWFrZUludDEyOChJbnQx
MjhIaWdoNjQobGhzKSA+PiBhbW91bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnQx
MjhMb3c2NChsaHMpID4+IGFtb3VudCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihJbnQxMjhIaWdoNjQobGhzKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8PCAoNjQgLSBhbW91bnQpKSk7Cit9CisKICNpZiBIQVZFKElOVDEy
OF9UKQogdXNpbmcgVUludDEyOCA9IF9fdWludDEyOF90OwogdXNpbmcgSW50MTI4ID0gX19pbnQx
MjhfdDsKICNlbHNlCi11c2luZyBVSW50MTI4ID0gSW50MTI4SW1wbDxmYWxzZT47Ci11c2luZyBJ
bnQxMjggPSBJbnQxMjhJbXBsPHRydWU+OwordXNpbmcgVUludDEyOCA9IEludDEyOEltcGw7Cit1
c2luZyBJbnQxMjggPSBVSW50MTI4SW1wbDsKICNlbmRpZgogCi10ZW1wbGF0ZSA8aW50IEJJVFM+
IHN0cnVjdCBIb3N0VW5zaWduZWRJbnRUeXBlSGVscGVyIHsKLSAgICB1c2luZyB0eXBlID0gc3Rk
Ojpjb25kaXRpb25hbF90PChCSVRTIDw9IDgpLCBzdGQ6OnVpbnQ4X3QsCi0gICAgICAgIHN0ZDo6
Y29uZGl0aW9uYWxfdDwoQklUUyA8PSAxNiksIHN0ZDo6dWludDE2X3QsCi0gICAgICAgIHN0ZDo6
Y29uZGl0aW9uYWxfdDwoQklUUyA8PSAzMiksIHN0ZDo6dWludDMyX3QsCi0gICAgICAgIHN0ZDo6
Y29uZGl0aW9uYWxfdDwoQklUUyA8PSA2NCksIHN0ZDo6dWludDY0X3QsIFVJbnQxMjg+Pj4+Owot
fTsKLXRlbXBsYXRlIDxpbnQgQklUUz4gc3RydWN0IEhvc3RTaWduZWRJbnRUeXBlSGVscGVyIHsK
LSAgICB1c2luZyB0eXBlID0gc3RkOjpjb25kaXRpb25hbF90PChCSVRTIDw9IDgpLCBzdGQ6Omlu
dDhfdCwKLSAgICAgICAgc3RkOjpjb25kaXRpb25hbF90PChCSVRTIDw9IDE2KSwgc3RkOjppbnQx
Nl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gMzIpLCBzdGQ6OmludDMy
X3QsCi0gICAgICAgIHN0ZDo6Y29uZGl0aW9uYWxfdDwoQklUUyA8PSA2NCksIHN0ZDo6aW50NjRf
dCwgSW50MTI4Pj4+PjsKLX07Ci10ZW1wbGF0ZSA8aW50IEJJVFM+Ci11c2luZyBIb3N0VW5zaWdu
ZWRJbnRUeXBlID0gdHlwZW5hbWUgSG9zdFVuc2lnbmVkSW50VHlwZUhlbHBlcjxCSVRTPjo6dHlw
ZTsKLXRlbXBsYXRlIDxpbnQgQklUUz4KLXVzaW5nIEhvc3RTaWduZWRJbnRUeXBlID0gdHlwZW5h
bWUgSG9zdFNpZ25lZEludFR5cGVIZWxwZXI8QklUUz46OnR5cGU7Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotCi11c2luZyBXVEY6OkludDEyODsKLXVzaW5nIFdURjo6VUludDEyODsKK30gIC8vIG5h
bWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBjY2Q5MTRjYjNkNGVkYWNhOGRmNTJkYzY0ZjRjYjI2ODFjMzQzNmQ4Li4zODhlMGZh
MGEwZTQwOGU4YTVmYTY4YTU2ZjU1YjkxNWU4NWE2MzIxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMTAtMjEg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBSZXBs
YWNlIGN1cnJlbnQgTExWTSBmbGFuZydzIEludDEyOCB3aXRoIGFic2VpbC1jcHAncyBJbnQxMjgK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjEyOQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvSW50MTI4LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRZ
UEVEX1RFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpUZXN0VW5hcnkpOiBEZWxldGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VGVzdEJpbmFyeSk6IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUb05hdGl2ZSk6
IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpGcm9tTmF0aXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RWc05hdGl2ZSk6IERlbGV0ZWQuCisKIDIwMjEt
MTAtMjEgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
R0wgYm90IHNob3VsZCBydW4gdGVzdHMgd2l0aCBHUFUgUHJvY2VzcyBlbmFibGVkCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9JbnQxMjguY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvSW50MTI4LmNwcAppbmRleCA3NzViZjcxMTk0MGRkNDIyZmY0
NzIxYjRjZGJjNWU3ZmE3NjNmNDJjLi4zZTJlM2M3ZDg1ODE1NzA5MmIyZTU4MjZmODgwODk4NGJi
NTYxMGZlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9JbnQxMjgu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ludDEyOC5jcHAKQEAgLTEs
MTQ1ICsxLDExOTUgQEAKLS8vIFRha2VuIGZyb20gTExWTSBQcm9qZWN0LCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UgdjIuMCB3aXRoIExMVk0gRXhjZXB0aW9ucy4KLS8vIFNlZSBTb3VyY2UvV1RG
L0xJQ0VOU0UtTExWTS50eHQgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uCi0vLyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCBXSVRIIExMVk0tZXhjZXB0aW9uCi0KLS8vIEJhc2Vk
IG9uOgotLy8gaHR0cHM6Ly9naXRodWIuY29tL2xsdm0vbGx2bS1wcm9qZWN0L2Jsb2IvZDQ4MGY5
NjgvZmxhbmcvdW5pdHRlc3RzL0V2YWx1YXRlL3VpbnQxMjguY3BwCisvLyBDb3B5cmlnaHQgMjAx
NyBUaGUgQWJzZWlsIEF1dGhvcnMuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHBzOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisv
LyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
PHd0Zi9JbnQxMjguaD4KIAotI2luY2x1ZGUgPGNpbnR0eXBlcz4KKyNpbmNsdWRlIDxhbGdvcml0
aG0+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHJhbmRvbT4KKyNpbmNsdWRlIDx0eXBl
X3RyYWl0cz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgewogCi11c2luZyBOb25OYXRpdmVJbnQxMjggPSBXVEY6OkludDEy
OEltcGw8dHJ1ZT47Ci11c2luZyBOb25OYXRpdmVVSW50MTI4ID0gV1RGOjpJbnQxMjhJbXBsPGZh
bHNlPjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV1RGX1VJbnQxMjhJbnRlZ2VyVHJh
aXRzVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworfTsKK3R5cGVkZWYgOjp0ZXN0aW5n
OjpUeXBlczxib29sLCBjaGFyLCBzaWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwgY2hhcjE2X3Qs
CisgICAgY2hhcjMyX3QsIHdjaGFyX3QsCisgICAgc2hvcnQsIC8vIE5PTElOVChydW50aW1lL2lu
dCkKKyAgICB1bnNpZ25lZCBzaG9ydCwgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIGludCwg
dW5zaWduZWQgaW50LAorICAgIGxvbmcsIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgICB1bnNp
Z25lZCBsb25nLCAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgbG9uZyBsb25nLCAvLyBOT0xJ
TlQocnVudGltZS9pbnQpCisgICAgdW5zaWduZWQgbG9uZyBsb25nPiAvLyBOT0xJTlQocnVudGlt
ZS9pbnQpCisgICAgSW50ZWdlclR5cGVzOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNz
IFdURl9VSW50MTI4RmxvYXRUcmFpdHNUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9
OwordHlwZWRlZiA6OnRlc3Rpbmc6OlR5cGVzPGZsb2F0LCBkb3VibGUsIGxvbmcgZG91YmxlPiBG
bG9hdGluZ1BvaW50VHlwZXM7CisKK1RZUEVEX1RFU1RfU1VJVEUoV1RGX1VJbnQxMjhJbnRlZ2Vy
VHJhaXRzVGVzdCwgSW50ZWdlclR5cGVzKTsKKworVFlQRURfVEVTVChXVEZfVUludDEyOEludGVn
ZXJUcmFpdHNUZXN0LCBDb25zdHJ1Y3RBc3NpZ25UZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19jb25zdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGwsIFR5cGVQYXJhbT46OnZhbHVl
LAorICAgICAgICAiV1RGOjpVSW50MTI4SW1wbCBtdXN0IGJlIGNvbnN0cnVjdGlibGUgZnJvbSBU
eXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXNzaWduYWJsZTxXVEY6OlVJ
bnQxMjhJbXBsJiwgVHlwZVBhcmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6OlVJbnQxMjhJbXBs
IG11c3QgYmUgYXNzaWduYWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3NlcnQo
IXN0ZDo6aXNfYXNzaWduYWJsZTxUeXBlUGFyYW0mLCBXVEY6OlVJbnQxMjhJbXBsPjo6dmFsdWUs
CisgICAgICAgICJUeXBlUGFyYW0gbXVzdCBub3QgYmUgYXNzaWduYWJsZSBmcm9tIFdURjo6VUlu
dDEyOEltcGwiKTsKK30KKworVFlQRURfVEVTVF9TVUlURShXVEZfVUludDEyOEZsb2F0VHJhaXRz
VGVzdCwgRmxvYXRpbmdQb2ludFR5cGVzKTsKKworVFlQRURfVEVTVChXVEZfVUludDEyOEZsb2F0
VHJhaXRzVGVzdCwgQ29uc3RydWN0QXNzaWduVGVzdCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfY29uc3RydWN0aWJsZTxXVEY6OlVJbnQxMjhJbXBsLCBUeXBlUGFyYW0+Ojp2YWx1ZSwK
KyAgICAgICAgIldURjo6VUludDEyOEltcGwgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gVHlw
ZVBhcmFtIik7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19hc3NpZ25hYmxlPFdURjo6VUlu
dDEyOEltcGwmLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6VUludDEyOEltcGwg
bXVzdCBub3QgYmUgYXNzaWduYWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3Nl
cnQoIXN0ZDo6aXNfYXNzaWduYWJsZTxUeXBlUGFyYW0mLCBXVEY6OlVJbnQxMjhJbXBsPjo6dmFs
dWUsCisgICAgICAgICJUeXBlUGFyYW0gbXVzdCBub3QgYmUgYXNzaWduYWJsZSBmcm9tIFdURjo6
VUludDEyOEltcGwiKTsKK30KKworVEVTVChXVEZfVUludDEyOCwgVHJpdmlhbFRyYWl0c1Rlc3Qp
Cit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZWZhdWx0X2NvbnN0cnVj
dGlibGU8V1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAiIik7CisgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGU8V1RGOjpVSW50MTI4
SW1wbD46OnZhbHVlLAorICAgICAgICAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9jb3B5X2Fzc2lnbmFibGU8V1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLCAiIik7Cisg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8V1RGOjpVSW50
MTI4SW1wbD46OnZhbHVlLCAiIik7Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIEFsbFRlc3RzKQor
eworICAgIFdURjo6VUludDEyOEltcGwgemVybyA9IDA7CisgICAgV1RGOjpVSW50MTI4SW1wbCBv
bmUgPSAxOworICAgIFdURjo6VUludDEyOEltcGwgb25lXzJhcmcgPSBXVEY6Ok1ha2VVSW50MTI4
KDAsIDEpOworICAgIFdURjo6VUludDEyOEltcGwgdHdvID0gMjsKKyAgICBXVEY6OlVJbnQxMjhJ
bXBsIHRocmVlID0gMzsKKyAgICBXVEY6OlVJbnQxMjhJbXBsIGJpZyA9IFdURjo6TWFrZVVJbnQx
MjgoMjAwMCwgMik7CisgICAgV1RGOjpVSW50MTI4SW1wbCBiaWdfbWludXNfb25lID0gV1RGOjpN
YWtlVUludDEyOCgyMDAwLCAxKTsKKyAgICBXVEY6OlVJbnQxMjhJbXBsIGJpZ2dlciA9IFdURjo6
TWFrZVVJbnQxMjgoMjAwMSwgMSk7CisgICAgV1RGOjpVSW50MTI4SW1wbCBiaWdnZXN0ID0gV1RG
OjpVSW50MTI4TWF4KCk7CisgICAgV1RGOjpVSW50MTI4SW1wbCBoaWdoX2xvdyA9IFdURjo6TWFr
ZVVJbnQxMjgoMSwgMCk7CisgICAgV1RGOjpVSW50MTI4SW1wbCBsb3dfaGlnaCA9IFdURjo6TWFr
ZVVJbnQxMjgoMCwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKTsKKyAgICBF
WFBFQ1RfTFQob25lLCB0d28pOworICAgIEVYUEVDVF9HVCh0d28sIG9uZSk7CisgICAgRVhQRUNU
X0xUKG9uZSwgYmlnKTsKKyAgICBFWFBFQ1RfTFQob25lLCBiaWcpOworICAgIEVYUEVDVF9FUShv
bmUsIG9uZV8yYXJnKTsKKyAgICBFWFBFQ1RfTkUob25lLCB0d28pOworICAgIEVYUEVDVF9HVChi
aWcsIG9uZSk7CisgICAgRVhQRUNUX0dFKGJpZywgdHdvKTsKKyAgICBFWFBFQ1RfR0UoYmlnLCBi
aWdfbWludXNfb25lKTsKKyAgICBFWFBFQ1RfR1QoYmlnLCBiaWdfbWludXNfb25lKTsKKyAgICBF
WFBFQ1RfTFQoYmlnX21pbnVzX29uZSwgYmlnKTsKKyAgICBFWFBFQ1RfTEUoYmlnX21pbnVzX29u
ZSwgYmlnKTsKKyAgICBFWFBFQ1RfTkUoYmlnX21pbnVzX29uZSwgYmlnKTsKKyAgICBFWFBFQ1Rf
TFQoYmlnLCBiaWdnZXN0KTsKKyAgICBFWFBFQ1RfTEUoYmlnLCBiaWdnZXN0KTsKKyAgICBFWFBF
Q1RfR1QoYmlnZ2VzdCwgYmlnKTsKKyAgICBFWFBFQ1RfR0UoYmlnZ2VzdCwgYmlnKTsKKyAgICBF
WFBFQ1RfRVEoYmlnLCB+fmJpZyk7CisgICAgRVhQRUNUX0VRKG9uZSwgb25lIHwgb25lKTsKKyAg
ICBFWFBFQ1RfRVEoYmlnLCBiaWcgfCBiaWcpOworICAgIEVYUEVDVF9FUShvbmUsIG9uZSB8IHpl
cm8pOworICAgIEVYUEVDVF9FUShvbmUsIG9uZSAmIG9uZSk7CisgICAgRVhQRUNUX0VRKGJpZywg
YmlnICYgYmlnKTsKKyAgICBFWFBFQ1RfRVEoemVybywgb25lICYgemVybyk7CisgICAgRVhQRUNU
X0VRKHplcm8sIGJpZyAmIH5iaWcpOworICAgIEVYUEVDVF9FUSh6ZXJvLCBvbmUgXiBvbmUpOwor
ICAgIEVYUEVDVF9FUSh6ZXJvLCBiaWcgXiBiaWcpOworICAgIEVYUEVDVF9FUShvbmUsIG9uZSBe
IHplcm8pOworCisgICAgLy8gU2hpZnQgb3BlcmF0b3JzLgorICAgIEVYUEVDVF9FUShiaWcsIGJp
ZyA8PCAwKTsKKyAgICBFWFBFQ1RfRVEoYmlnLCBiaWcgPj4gMCk7CisgICAgRVhQRUNUX0dUKGJp
ZyA8PCAxLCBiaWcpOworICAgIEVYUEVDVF9MVChiaWcgPj4gMSwgYmlnKTsKKyAgICBFWFBFQ1Rf
RVEoYmlnLCAoYmlnIDw8IDEwKSA+PiAxMCk7CisgICAgRVhQRUNUX0VRKGJpZywgKGJpZyA+PiAx
KSA8PCAxKTsKKyAgICBFWFBFQ1RfRVEob25lLCAob25lIDw8IDgwKSA+PiA4MCk7CisgICAgRVhQ
RUNUX0VRKHplcm8sIChvbmUgPj4gODApIDw8IDgwKTsKKworICAgIC8vIFNoaWZ0IGFzc2lnbm1l
bnRzLgorICAgIFdURjo6VUludDEyOEltcGwgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VR
KGJpZyA8PCAwLCBiaWdfY29weSA8PD0gMCk7CisgICAgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQ
RUNUX0VRKGJpZyA+PiAwLCBiaWdfY29weSA+Pj0gMCk7CisgICAgYmlnX2NvcHkgPSBiaWc7Cisg
ICAgRVhQRUNUX0VRKGJpZyA8PCAxLCBiaWdfY29weSA8PD0gMSk7CisgICAgYmlnX2NvcHkgPSBi
aWc7CisgICAgRVhQRUNUX0VRKGJpZyA+PiAxLCBiaWdfY29weSA+Pj0gMSk7CisgICAgYmlnX2Nv
cHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA8PCAxMCwgYmlnX2NvcHkgPDw9IDEwKTsKKyAg
ICBiaWdfY29weSA9IGJpZzsKKyAgICBFWFBFQ1RfRVEoYmlnID4+IDEwLCBiaWdfY29weSA+Pj0g
MTApOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPDwgNjQsIGJpZ19j
b3B5IDw8PSA2NCk7CisgICAgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA+PiA2
NCwgYmlnX2NvcHkgPj49IDY0KTsKKyAgICBiaWdfY29weSA9IGJpZzsKKyAgICBFWFBFQ1RfRVEo
YmlnIDw8IDczLCBiaWdfY29weSA8PD0gNzMpOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVY
UEVDVF9FUShiaWcgPj4gNzMsIGJpZ19jb3B5ID4+PSA3Myk7CisKKyAgICBFWFBFQ1RfRVEoV1RG
OjpVSW50MTI4SGlnaDY0KGJpZ2dlc3QpLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6
bWF4KCkpOworICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhMb3c2NChiaWdnZXN0KSwgc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKTsKKyAgICBFWFBFQ1RfRVEoemVybyArIG9u
ZSwgb25lKTsKKyAgICBFWFBFQ1RfRVEob25lICsgb25lLCB0d28pOworICAgIEVYUEVDVF9FUShi
aWdfbWludXNfb25lICsgb25lLCBiaWcpOworICAgIEVYUEVDVF9FUShvbmUgLSBvbmUsIHplcm8p
OworICAgIEVYUEVDVF9FUShvbmUgLSB6ZXJvLCBvbmUpOworICAgIEVYUEVDVF9FUSh6ZXJvIC0g
b25lLCBiaWdnZXN0KTsKKyAgICBFWFBFQ1RfRVEoYmlnIC0gYmlnLCB6ZXJvKTsKKyAgICBFWFBF
Q1RfRVEoYmlnIC0gb25lLCBiaWdfbWludXNfb25lKTsKKyAgICBFWFBFQ1RfRVEoYmlnICsgc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpLCBiaWdnZXIpOworICAgIEVYUEVDVF9F
UShiaWdnZXN0ICsgMSwgemVybyk7CisgICAgRVhQRUNUX0VRKHplcm8gLSAxLCBiaWdnZXN0KTsK
KyAgICBFWFBFQ1RfRVEoaGlnaF9sb3cgLSBvbmUsIGxvd19oaWdoKTsKKyAgICBFWFBFQ1RfRVEo
bG93X2hpZ2ggKyBvbmUsIGhpZ2hfbG93KTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4SGln
aDY0KChXVEY6OlVJbnQxMjhJbXBsKDEpIDw8IDY0KSAtIDEpLCAwVSk7CisgICAgRVhQRUNUX0VR
KFdURjo6VUludDEyOExvdzY0KChXVEY6OlVJbnQxMjhJbXBsKDEpIDw8IDY0KSAtIDEpLAorICAg
ICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpOworICAgIEVYUEVDVF9U
UlVFKCEhb25lKTsKKyAgICBFWFBFQ1RfVFJVRSghIWhpZ2hfbG93KTsKKyAgICBFWFBFQ1RfRkFM
U0UoISF6ZXJvKTsKKyAgICBFWFBFQ1RfRkFMU0UoIW9uZSk7CisgICAgRVhQRUNUX0ZBTFNFKCFo
aWdoX2xvdyk7CisgICAgRVhQRUNUX1RSVUUoIXplcm8pOworICAgIEVYUEVDVF9UUlVFKHplcm8g
PT0gMCk7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICBFWFBFQ1RfRkFMU0UoemVy
byAhPSAwKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgIEVYUEVDVF9GQUxTRShv
bmUgPT0gMCk7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICBFWFBFQ1RfVFJVRShv
bmUgIT0gMCk7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICBFWFBFQ1RfRkFMU0Uo
aGlnaF9sb3cgPT0gMCk7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICBFWFBFQ1Rf
VFJVRShoaWdoX2xvdyAhPSAwKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorCisgICAg
V1RGOjpVSW50MTI4SW1wbCB0ZXN0ID0gemVybzsKKyAgICBFWFBFQ1RfRVEoKyt0ZXN0LCBvbmUp
OworICAgIEVYUEVDVF9FUSh0ZXN0LCBvbmUpOworICAgIEVYUEVDVF9FUSh0ZXN0KyssIG9uZSk7
CisgICAgRVhQRUNUX0VRKHRlc3QsIHR3byk7CisgICAgRVhQRUNUX0VRKHRlc3QgLT0gMiwgemVy
byk7CisgICAgRVhQRUNUX0VRKHRlc3QsIHplcm8pOworICAgIEVYUEVDVF9FUSh0ZXN0ICs9IDIs
IHR3byk7CisgICAgRVhQRUNUX0VRKHRlc3QsIHR3byk7CisgICAgRVhQRUNUX0VRKC0tdGVzdCwg
b25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdC0tLCBv
bmUpOworICAgIEVYUEVDVF9FUSh0ZXN0LCB6ZXJvKTsKKyAgICBFWFBFQ1RfRVEodGVzdCB8PSB0
aHJlZSwgdGhyZWUpOworICAgIEVYUEVDVF9FUSh0ZXN0ICY9IG9uZSwgb25lKTsKKyAgICBFWFBF
Q1RfRVEodGVzdCBePSB0aHJlZSwgdHdvKTsKKyAgICBFWFBFQ1RfRVEodGVzdCA+Pj0gMSwgb25l
KTsKKyAgICBFWFBFQ1RfRVEodGVzdCA8PD0gMSwgdHdvKTsKKworICAgIEVYUEVDVF9FUShiaWcs
ICtiaWcpOworICAgIEVYUEVDVF9FUSh0d28sICt0d28pOworICAgIEVYUEVDVF9FUShXVEY6OlVJ
bnQxMjhNYXgoKSwgK1dURjo6VUludDEyOE1heCgpKTsKKyAgICBFWFBFQ1RfRVEoemVybywgK3pl
cm8pOworCisgICAgRVhQRUNUX0VRKGJpZywgLSgtYmlnKSk7CisgICAgRVhQRUNUX0VRKHR3bywg
LSgoLW9uZSkgLSAxKSk7CisgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOE1heCgpLCAtb25lKTsK
KyAgICBFWFBFQ1RfRVEoemVybywgLXplcm8pOworfQorCitURVNUKFdURl9JbnQxMjgsIFJpZ2h0
U2hpZnRPZk5lZ2F0aXZlTnVtYmVycykKK3sKKyAgICBXVEY6OkludDEyOEltcGwgbWludXNfc2l4
ID0gLTY7CisgICAgV1RGOjpJbnQxMjhJbXBsIG1pbnVzX3RocmVlID0gLTM7CisgICAgV1RGOjpJ
bnQxMjhJbXBsIG1pbnVzX3R3byA9IC0yOworICAgIFdURjo6SW50MTI4SW1wbCBtaW51c19vbmUg
PSAtMTsKKyAgICBpZiAoKC02ID4+IDEpID09IC0zKSB7CisgICAgICAgIC8vIFJpZ2h0IHNoaWZ0
IGlzIGFyaXRobWV0aWMgKHNpZ24gcHJvcGFnYXRlcykKKyAgICAgICAgRVhQRUNUX0VRKG1pbnVz
X3NpeCA+PiAxLCBtaW51c190aHJlZSk7CisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4g
MiwgbWludXNfdHdvKTsKKyAgICAgICAgRVhQRUNUX0VRKG1pbnVzX3NpeCA+PiA2NSwgbWludXNf
b25lKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBSaWdodCBzaGlmdCBpcyBsb2dpY2FsICh6
ZXJvcyBzaGlmdGVkIGluIGF0IE1TQikKKyAgICAgICAgRVhQRUNUX0VRKG1pbnVzX3NpeCA+PiAx
LCBXVEY6OkludDEyOEltcGwoV1RGOjpVSW50MTI4SW1wbChtaW51c19zaXgpID4+IDEpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKG1pbnVzX3NpeCA+PiAyLCBXVEY6OkludDEyOEltcGwoV1RGOjpVSW50
MTI4SW1wbChtaW51c19zaXgpID4+IDIpKTsKKyAgICAgICAgRVhQRUNUX0VRKG1pbnVzX3NpeCA+
PiA2NSwgV1RGOjpJbnQxMjhJbXBsKFdURjo6VUludDEyOEltcGwobWludXNfc2l4KSA+PiA2NSkp
OworICAgIH0KK30KKworVEVTVChXVEZfVUludDEyOCwgQ29udmVyc2lvblRlc3RzKQoreworICAg
IEVYUEVDVF9UUlVFKFdURjo6TWFrZVVJbnQxMjgoMSwgMCkpOworCisgICAgLy8gdmVyaWZ5IHRo
YXQgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMioqNjQgdGhhdCBjYW4gYmUgc3RvcmVkIHByZWNp
c2VseQorICAgIC8vIGluc2lkZSBhIGRvdWJsZSBpcyBjb252ZXJ0ZWQgdG8gYSBXVEY6OlVJbnQx
MjhJbXBsIHdpdGhvdXQgbG9zcyBvZgorICAgIC8vIGluZm9ybWF0aW9uLgorICAgIGRvdWJsZSBw
cmVjaXNlX2RvdWJsZSA9IDB4NTMwZSAqIHN0ZDo6cG93KDIuMCwgNjQuMCkgKyAweGRhNzQwMDAw
MDAwMDAwMDA7CisgICAgV1RGOjpVSW50MTI4SW1wbCBmcm9tX3ByZWNpc2VfZG91YmxlKHByZWNp
c2VfZG91YmxlKTsKKyAgICBXVEY6OlVJbnQxMjhJbXBsIGZyb21fcHJlY2lzZV9pbnRzID0gV1RG
OjpNYWtlVUludDEyOCgweDUzMGUsIDB4ZGE3NDAwMDAwMDAwMDAwMCk7CisgICAgRVhQRUNUX0VR
KGZyb21fcHJlY2lzZV9kb3VibGUsIGZyb21fcHJlY2lzZV9pbnRzKTsKKyAgICBFWFBFQ1RfRE9V
QkxFX0VRKHN0YXRpY19jYXN0PGRvdWJsZT4oZnJvbV9wcmVjaXNlX2ludHMpLCBwcmVjaXNlX2Rv
dWJsZSk7CisKKyAgICBkb3VibGUgYXBwcm94X2RvdWJsZSA9IDB4ZmZmZmVlZWVkZGRkY2NjYyAq
IHN0ZDo6cG93KDIuMCwgNjQuMCkgKyAweGJiYmJhYWFhOTk5OTg4ODg7CisgICAgV1RGOjpVSW50
MTI4SW1wbCBmcm9tX2FwcHJveF9kb3VibGUoYXBwcm94X2RvdWJsZSk7CisgICAgRVhQRUNUX0RP
VUJMRV9FUShzdGF0aWNfY2FzdDxkb3VibGU+KGZyb21fYXBwcm94X2RvdWJsZSksIGFwcHJveF9k
b3VibGUpOworCisgICAgZG91YmxlIHJvdW5kX3RvX3plcm8gPSAwLjc7CisgICAgZG91YmxlIHJv
dW5kX3RvX2ZpdmUgPSA1Ljg7CisgICAgZG91YmxlIHJvdW5kX3RvX25pbmUgPSA5LjM7CisgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PFdURjo6VUludDEyOEltcGw+KHJvdW5kX3RvX3plcm8pLCAw
KTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4ocm91bmRfdG9f
Zml2ZSksIDUpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxXVEY6OlVJbnQxMjhJbXBsPihy
b3VuZF90b19uaW5lKSwgOSk7CisKKyAgICBXVEY6OlVJbnQxMjhJbXBsIGhpZ2hlc3RfcHJlY2lz
aW9uX2luX2xvbmdfZG91YmxlID0gfldURjo6VUludDEyOEltcGwge30gPj4gKDEyOCAtIHN0ZDo6
bnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMpOworICAgIEVYUEVDVF9FUShoaWdo
ZXN0X3ByZWNpc2lvbl9pbl9sb25nX2RvdWJsZSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8V1RGOjpV
SW50MTI4SW1wbD4oCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oaGlnaGVz
dF9wcmVjaXNpb25faW5fbG9uZ19kb3VibGUpKSk7CisgICAgLy8gQXBwbHkgYSBtYXNrIGp1c3Qg
dG8gbWFrZSBzdXJlIGFsbCB0aGUgYml0cyBhcmUgdGhlIHJpZ2h0IHBsYWNlLgorICAgIGNvbnN0
IFdURjo6VUludDEyOEltcGwgYXJiaXRyYXJ5X21hc2sgPSBXVEY6Ok1ha2VVSW50MTI4KDB4YTI5
ZjYyMjY3N2RlZDc1MSwgMHhmOGNhNjZhZGQwNzZmNDY4KTsKKyAgICBFWFBFQ1RfRVEoaGlnaGVz
dF9wcmVjaXNpb25faW5fbG9uZ19kb3VibGUgJiBhcmJpdHJhcnlfbWFzaywKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4oc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KAorICAg
ICAgICAgICAgaGlnaGVzdF9wcmVjaXNpb25faW5fbG9uZ19kb3VibGUgJiBhcmJpdHJhcnlfbWFz
aykpKTsKKworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxXVEY6OlVJbnQxMjhJbXBsPigtMC4x
TCksIDApOworfQorCitURVNUKFdURl9VSW50MTI4LCBPcGVyYXRvckFzc2lnblJldHVyblJlZikK
K3sKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHYoMSk7CisgICAgKHYgKz0gNCkgLT0gMzsKKyAgICBF
WFBFQ1RfRVEoMiwgdik7Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIE11bHRpcGx5KQoreworICAg
IFdURjo6VUludDEyOEltcGwgYSwgYiwgYzsKKworICAgIC8vIFplcm8gdGVzdC4KKyAgICBhID0g
MDsKKyAgICBiID0gMDsKKyAgICBjID0gYSAqIGI7CisgICAgRVhQRUNUX0VRKDAsIGMpOworCisg
ICAgLy8gTWF4IGNhcnJpZXMuCisgICAgYSA9IFdURjo6VUludDEyOEltcGwoMCkgLSAxOworICAg
IGIgPSBXVEY6OlVJbnQxMjhJbXBsKDApIC0gMTsKKyAgICBjID0gYSAqIGI7CisgICAgRVhQRUNU
X0VRKDEsIGMpOworCisgICAgLy8gU2VsZi1vcGVyYXRpb24gd2l0aCBtYXggY2Fycmllcy4KKyAg
ICBjID0gV1RGOjpVSW50MTI4SW1wbCgwKSAtIDE7CisgICAgYyAqPSBjOworICAgIEVYUEVDVF9F
USgxLCBjKTsKKworICAgIC8vIDEtYml0IHggMS1iaXQuCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA2NDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNjQ7ICsraikgeworICAg
ICAgICAgICAgYSA9IFdURjo6VUludDEyOEltcGwoMSkgPDwgaTsKKyAgICAgICAgICAgIGIgPSBX
VEY6OlVJbnQxMjhJbXBsKDEpIDw8IGo7CisgICAgICAgICAgICBjID0gYSAqIGI7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4SW1wbCgxKSA8PCAoaSArIGopLCBjKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIFZlcmlmaWVkIHdpdGggZGMuCisgICAgYSA9IFdURjo6TWFr
ZVVJbnQxMjgoMHhmZmZmZWVlZWRkZGRjY2NjLCAweGJiYmJhYWFhOTk5OTg4ODgpOworICAgIGIg
PSBXVEY6Ok1ha2VVSW50MTI4KDB4Nzc3NzY2NjY1NTU1NDQ0NCwgMHgzMzMzMjIyMjExMTEwMDAw
KTsKKyAgICBjID0gYSAqIGI7CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZVVJbnQxMjgoMHg1MzBF
REE3NDFDNzFENEMzLCAweEJGMjU5NzUzMTkwODAwMDApLCBjKTsKKyAgICBFWFBFQ1RfRVEoMCwg
YyAtIGIgKiBhKTsKKyAgICBFWFBFQ1RfRVEoYSAqIGEgLSBiICogYiwgKGEgKyBiKSAqIChhIC0g
YikpOworCisgICAgLy8gVmVyaWZpZWQgd2l0aCBkYy4KKyAgICBhID0gV1RGOjpNYWtlVUludDEy
OCgweDAxMjM0NTY3ODlhYmNkZWYsIDB4ZmVkY2JhOTg3NjU0MzIxMCk7CisgICAgYiA9IFdURjo6
TWFrZVVJbnQxMjgoMHgwMjQ2OGFjZTEzNTc5YmRmLCAweGZkYjk3NTMxZWNhODY0MjApOworICAg
IGMgPSBhICogYjsKKyAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlVUludDEyOCgweDk3YTg3ZjRmMjYx
YmEzZjIsIDB4MzQyZDBiYmY0ODk0ODIwMCksIGMpOworICAgIEVYUEVDVF9FUSgwLCBjIC0gYiAq
IGEpOworICAgIEVYUEVDVF9FUShhICogYSAtIGIgKiBiLCAoYSArIGIpICogKGEgLSBiKSk7Cit9
CisKK1RFU1QoV1RGX1VJbnQxMjgsIEFsaWFzVGVzdHMpCit7CisgICAgV1RGOjpVSW50MTI4SW1w
bCB4MSA9IFdURjo6TWFrZVVJbnQxMjgoMSwgMik7CisgICAgV1RGOjpVSW50MTI4SW1wbCB4MiA9
IFdURjo6TWFrZVVJbnQxMjgoMiwgNCk7CisgICAgeDEgKz0geDE7CisgICAgRVhQRUNUX0VRKHgy
LCB4MSk7CisKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHgzID0gV1RGOjpNYWtlVUludDEyOCgxLCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgNjMpOworICAgIFdURjo6VUludDEyOEltcGwgeDQg
PSBXVEY6Ok1ha2VVSW50MTI4KDMsIDApOworICAgIHgzICs9IHgzOworICAgIEVYUEVDVF9FUSh4
NCwgeDMpOworfQorCitURVNUKFdURl9VSW50MTI4LCBEaXZpZGVBbmRNb2QpCit7CisgICAgdXNp
bmcgc3RkOjpzd2FwOworCisgICAgLy8gYSA6PSBxICogYiArIHIKKyAgICBXVEY6OlVJbnQxMjhJ
bXBsIGEsIGIsIHEsIHI7CisKKyAgICAvLyBaZXJvIHRlc3QuCisgICAgYSA9IDA7CisgICAgYiA9
IDEyMzsKKyAgICBxID0gYSAvIGI7CisgICAgciA9IGEgJSBiOworICAgIEVYUEVDVF9FUSgwLCBx
KTsKKyAgICBFWFBFQ1RfRVEoMCwgcik7CisKKyAgICBhID0gV1RGOjpNYWtlVUludDEyOCgweDUz
MGVkYTc0MWM3MWQ0YzMsIDB4YmYyNTk3NTMxOTA4MDAwMCk7CisgICAgcSA9IFdURjo6TWFrZVVJ
bnQxMjgoMHg0ZGUyY2FiMDgxLCAweDE0YzM0YWI0Njc2ZTRiYWIpOworICAgIGIgPSBXVEY6OlVJ
bnQxMjhJbXBsKDB4MTExMDAwMSk7CisgICAgciA9IFdURjo6VUludDEyOEltcGwoMHgzZWI0NTUp
OworICAgIEFTU0VSVF9FUShhLCBxICogYiArIHIpOyAvLyBTYW5pdHktY2hlY2suCisKKyAgICBX
VEY6OlVJbnQxMjhJbXBsIHJlc3VsdF9xLCByZXN1bHRfcjsKKyAgICByZXN1bHRfcSA9IGEgLyBi
OworICAgIHJlc3VsdF9yID0gYSAlIGI7CisgICAgRVhQRUNUX0VRKHEsIHJlc3VsdF9xKTsKKyAg
ICBFWFBFQ1RfRVEociwgcmVzdWx0X3IpOworCisgICAgLy8gVHJ5IHRoZSBvdGhlciB3YXkgYXJv
dW5kLgorICAgIHN3YXAocSwgYik7CisgICAgcmVzdWx0X3EgPSBhIC8gYjsKKyAgICByZXN1bHRf
ciA9IGEgJSBiOworICAgIEVYUEVDVF9FUShxLCByZXN1bHRfcSk7CisgICAgRVhQRUNUX0VRKHIs
IHJlc3VsdF9yKTsKKyAgICAvLyBSZXN0b3JlLgorICAgIHN3YXAoYiwgcSk7CiAKLXN0YXRpYyB2
b2lkIFRlc3RVbmFyeShzdGQ6OnVpbnQ2NF90IHgpCisgICAgLy8gRGl2aWRlbmQgPCBkaXZpc29y
OyByZXN1bHQgc2hvdWxkIGJlIHE6MCByOjxkaXZpZGVuZD4uCisgICAgc3dhcChhLCBiKTsKKyAg
ICByZXN1bHRfcSA9IGEgLyBiOworICAgIHJlc3VsdF9yID0gYSAlIGI7CisgICAgRVhQRUNUX0VR
KDAsIHJlc3VsdF9xKTsKKyAgICBFWFBFQ1RfRVEoYSwgcmVzdWx0X3IpOworICAgIC8vIFRyeSB0
aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgICBzd2FwKGEsIHEpOworICAgIHJlc3VsdF9xID0gYSAv
IGI7CisgICAgcmVzdWx0X3IgPSBhICUgYjsKKyAgICBFWFBFQ1RfRVEoMCwgcmVzdWx0X3EpOwor
ICAgIEVYUEVDVF9FUShhLCByZXN1bHRfcik7CisgICAgLy8gUmVzdG9yZS4KKyAgICBzd2FwKHEs
IGEpOworICAgIHN3YXAoYiwgYSk7CisKKyAgICAvLyBUcnkgYSBsYXJnZSByZW1haW5kZXIuCisg
ICAgYiA9IGEgLyAyICsgMTsKKyAgICBXVEY6OlVJbnQxMjhJbXBsIGV4cGVjdGVkX3IgPSBXVEY6
Ok1ha2VVSW50MTI4KDB4Mjk4NzZkM2EwZTM4ZWE2MSwgMHhkZjkyY2JhOThjODNmZmZmKTsKKyAg
ICAvLyBTYW5pdHkgY2hlY2tzLgorICAgIEFTU0VSVF9FUShhIC8gMiAtIDEsIGV4cGVjdGVkX3Ip
OworICAgIEFTU0VSVF9FUShhLCBiICsgZXhwZWN0ZWRfcik7CisgICAgcmVzdWx0X3EgPSBhIC8g
YjsKKyAgICByZXN1bHRfciA9IGEgJSBiOworICAgIEVYUEVDVF9FUSgxLCByZXN1bHRfcSk7Cisg
ICAgRVhQRUNUX0VRKGV4cGVjdGVkX3IsIHJlc3VsdF9yKTsKK30KKworVEVTVChXVEZfVUludDEy
OCwgRGl2aWRlQW5kTW9kUmFuZG9tSW5wdXRzKQogewotICAgIE5vbk5hdGl2ZVVJbnQxMjggbiB7
IHggfTsKLSAgICBFWFBFQ1RfRVEoeCwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obikpOwot
ICAgIEVYUEVDVF9FUSh+eCwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4ofm4pKTsKLSAgICBF
WFBFQ1RfRVEoLXgsIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KC1uKSk7Ci0gICAgRVhQRUNU
X0VRKCF4LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PighbikpOwotICAgIEVYUEVDVF9UUlVF
KG4gPT0gbik7Ci0gICAgRVhQRUNUX1RSVUUobiArIG4gPT0gbiAqIHN0YXRpY19jYXN0PE5vbk5h
dGl2ZVVJbnQxMjg+KDIpKTsKLSAgICBFWFBFQ1RfVFJVRShuIC0gbiA9PSBzdGF0aWNfY2FzdDxO
b25OYXRpdmVVSW50MTI4PigwKSk7Ci0gICAgRVhQRUNUX1RSVUUobiArIG4gPT0gbiA8PCBzdGF0
aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PigxKSk7Ci0gICAgRVhQRUNUX1RSVUUobiArIG4gPT0g
biA8PCBzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PigxKSk7Ci0gICAgRVhQRUNUX1RSVUUo
KG4gKyBuKSAtIG4gPT0gbik7Ci0gICAgRVhQRUNUX1RSVUUoKChuICsgbikgPj4gc3RhdGljX2Nh
c3Q8Tm9uTmF0aXZlVUludDEyOD4oMSkpID09IG4pOwotICAgIGlmICh4KSB7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDApIC8gbiA9PSBzdGF0aWNf
Y2FzdDxOb25OYXRpdmVVSW50MTI4PigwKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHN0YXRpY19j
YXN0PE5vbk5hdGl2ZVVJbnQxMjg+KG4gLSAxKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZl
VUludDEyOD4oMCkpOwotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRpdmVV
SW50MTI4PihuKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMSkpOwotICAg
ICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PihuICsgbiAtIDEp
IC8gbiA9PSBzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PigxKSk7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KG4gKyBuKSAvIG4gPT0gc3RhdGlj
X2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMikpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgVGVz
dEJpbmFyeShzdGQ6OnVpbnQ2NF90IHgsIHN0ZDo6dWludDY0X3QgeSkKLXsKLSAgICBOb25OYXRp
dmVVSW50MTI4IG0geyB4IH0sIG4geyB5IH07Ci0gICAgRVhQRUNUX0VRKHgsIHN0YXRpY19jYXN0
PHN0ZDo6dWludDY0X3Q+KG0pKTsKLSAgICBFWFBFQ1RfRVEoeSwgc3RhdGljX2Nhc3Q8c3RkOjp1
aW50NjRfdD4obikpOwotICAgIEVYUEVDVF9FUSh4ICYgeSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50
NjRfdD4obSAmIG4pKTsKLSAgICBFWFBFQ1RfRVEoeCB8IHksIHN0YXRpY19jYXN0PHN0ZDo6dWlu
dDY0X3Q+KG0gfCBuKSk7Ci0gICAgRVhQRUNUX0VRKHggXiB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVp
bnQ2NF90PihtIF4gbikpOwotICAgIEVYUEVDVF9FUSh4ICsgeSwgc3RhdGljX2Nhc3Q8c3RkOjp1
aW50NjRfdD4obSArIG4pKTsKLSAgICBFWFBFQ1RfRVEoeCAtIHksIHN0YXRpY19jYXN0PHN0ZDo6
dWludDY0X3Q+KG0gLSBuKSk7Ci0gICAgRVhQRUNUX0VRKHggKiB5LCBzdGF0aWNfY2FzdDxzdGQ6
OnVpbnQ2NF90PihtICogbikpOwotICAgIGlmIChuKQotICAgICAgICBFWFBFQ1RfRVEoeCAvIHks
IHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG0gLyBuKSk7Ci19Ci0KLVRFU1QoV1RGX0ludDEy
OCwgQmFzaWMpCi17Ci0gICAgZm9yIChzdGQ6OnVpbnQ2NF90IGogezB9OyBqIDwgNjQ7ICsraikg
ewotICAgICAgICBUZXN0VW5hcnkoaik7Ci0gICAgICAgIFRlc3RVbmFyeSh+aik7Ci0gICAgICAg
IFRlc3RVbmFyeShzdGQ6OnVpbnQ2NF90KDEpIDw8IGopOwotICAgICAgICBmb3IgKHN0ZDo6dWlu
dDY0X3QgayB7MH07IGsgPCA2NDsgKytrKQotICAgICAgICAgICAgVGVzdEJpbmFyeShqLCBrKTsK
LSAgICB9Ci19Ci0KLSNpZiBIQVZFKElOVDEyOF9UKQotc3RhdGljIF9fdWludDEyOF90IFRvTmF0
aXZlKE5vbk5hdGl2ZVVJbnQxMjggbikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X191aW50
MTI4X3Q+KHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4gPj4gNjQpKSA8PCA2NCB8Ci0gICAg
ICAgIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pOwotfQotCi1zdGF0aWMgTm9uTmF0aXZl
VUludDEyOCBGcm9tTmF0aXZlKF9fdWludDEyOF90IG4pCi17Ci0gICAgcmV0dXJuIE5vbk5hdGl2
ZVVJbnQxMjggeyBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihuID4+IDY0KX0gPDwgNjQgfCBO
b25OYXRpdmVVSW50MTI4IHsgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obikgfTsKLX0KLQot
c3RhdGljIHZvaWQgVGVzdFZzTmF0aXZlKF9fdWludDEyOF90IHgsIF9fdWludDEyOF90IHkpCi17
Ci0gICAgTm9uTmF0aXZlVUludDEyOCBtIHsgRnJvbU5hdGl2ZSh4KSB9LCBuIHsgRnJvbU5hdGl2
ZSh5KSB9OwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0pID09IHgpOwotICAgIEVYUEVDVF9U
UlVFKFRvTmF0aXZlKG4pID09IHkpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKH5tKSA9PSB+
eCk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUoLW0pID09IC14KTsKLSAgICBFWFBFQ1RfVFJV
RShUb05hdGl2ZSghbSkgPT0gIXgpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gPCBuKSA9
PSAoeCA8IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtIDw9IG4pID09ICh4IDw9IHkp
KTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtID09IG4pID09ICh4ID09IHkpKTsKLSAgICBF
WFBFQ1RfVFJVRShUb05hdGl2ZShtICE9IG4pID09ICh4ICE9IHkpKTsKLSAgICBFWFBFQ1RfVFJV
RShUb05hdGl2ZShtID49IG4pID09ICh4ID49IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2
ZShtID4gbikgPT0gKHggPiB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAmIG4pID09
ICh4ICYgeSkpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gfCBuKSA9PSAoeCB8IHkpKTsK
LSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtIF4gbikgPT0gKHggXiB5KSk7Ci0gICAgaWYgKHkg
PCAxMjgpIHsKLSAgICAgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSA8PCBuKSA9PSAoeCA8PCB5
KSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gPj4gbikgPT0gKHggPj4geSkpOwot
ICAgIH0KLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtICsgbikgPT0gKHggKyB5KSk7Ci0gICAg
RVhQRUNUX1RSVUUoVG9OYXRpdmUobSAtIG4pID09ICh4IC0geSkpOwotICAgIEVYUEVDVF9UUlVF
KFRvTmF0aXZlKG0gKiBuKSA9PSAoeCAqIHkpKTsKLSAgICBpZiAoeSA+IDApIHsKLSAgICAgICAg
RVhQRUNUX1RSVUUoVG9OYXRpdmUobSAvIG4pID09ICh4IC8geSkpOwotICAgICAgICBFWFBFQ1Rf
VFJVRShUb05hdGl2ZShtICUgbikgPT0gKHggJSB5KSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFRv
TmF0aXZlKG0gLSBuICogKG0gLyBuKSkgPT0gKHggJSB5KSk7Ci0gICAgfQotfQotCi1URVNUKFdU
Rl9JbnQxMjgsIFZzTmF0aXZlKQotewotICAgIEdURVNUX0xPR18oSU5GTykgPDwgIkVudmlyb25t
ZW50IGhhcyBuYXRpdmUgX191aW50MTI4X3QiOwotCi0gICAgZm9yIChpbnQgaiB7MH07IGogPCAx
Mjg7ICsraikgewotICAgICAgICBmb3IgKGludCBrIHswfTsgayA8IDEyODsgKytrKSB7Ci0gICAg
ICAgICAgICBfX3VpbnQxMjhfdCBtIHsgMSB9LCBuIHsgMSB9OwotICAgICAgICAgICAgbSA8PD0g
ajsKLSAgICAgICAgICAgIG4gPDw9IGs7Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUobSwgbik7
Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUofm0sIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0
aXZlKG0sIH5uKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZSh+bSwgfm4pOwotICAgICAgICAg
ICAgVGVzdFZzTmF0aXZlKG0gXiBuLCBuKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtLCBt
IF4gbik7Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUobSBeIH5uLCBuKTsKLSAgICAgICAgICAg
IFRlc3RWc05hdGl2ZShtLCB+bSBeIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0aXZlKG0gXiB+
biwgbSBeIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0aXZlKG0gXiBuLCB+bSBeIG4pOwotICAg
ICAgICAgICAgVGVzdFZzTmF0aXZlKG0gXiB+biwgfm0gXiBuKTsKLSAgICAgICAgICAgIFRlc3RC
aW5hcnkobSwgMTAwMDAwMDAwMDAwMDAwMDApOyAvLyBpbXBvcnRhbnQgY2FzZSBmb3IgZGVjaW1h
bCBjb252ZXJzaW9uCi0gICAgICAgICAgICBUZXN0QmluYXJ5KH5tLCAxMDAwMDAwMDAwMDAwMDAw
MCk7CisgICAgY29uc3QgaW50IGtOdW1JdGVycyA9IDEgPDwgMTg7CisgICAgc3RkOjptaW5zdGRf
cmFuZCByYW5kb20odGVzdGluZzo6VW5pdFRlc3Q6OkdldEluc3RhbmNlKCktPnJhbmRvbV9zZWVk
KCkpOworICAgIHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPHVpbnQ2NF90PiB1bmlmb3Jt
X3VpbnQ2NDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1JdGVyczsgKytpKSB7CisgICAg
ICAgIGNvbnN0IFdURjo6VUludDEyOEltcGwgYSA9IFdURjo6TWFrZVVJbnQxMjgodW5pZm9ybV91
aW50NjQocmFuZG9tKSwgdW5pZm9ybV91aW50NjQocmFuZG9tKSk7CisgICAgICAgIGNvbnN0IFdU
Rjo6VUludDEyOEltcGwgYiA9IFdURjo6TWFrZVVJbnQxMjgodW5pZm9ybV91aW50NjQocmFuZG9t
KSwgdW5pZm9ybV91aW50NjQocmFuZG9tKSk7CisgICAgICAgIGlmIChiID09IDApIHsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOyAvLyBBdm9pZCBhIGRpdi1ieS16ZXJvLgogICAgICAgICB9CisgICAg
ICAgIGNvbnN0IFdURjo6VUludDEyOEltcGwgcSA9IGEgLyBiOworICAgICAgICBjb25zdCBXVEY6
OlVJbnQxMjhJbXBsIHIgPSBhICUgYjsKKyAgICAgICAgQVNTRVJUX0VRKGEsIGIgKiBxICsgcik7
CisgICAgfQorfQorCitURVNUKFdURl9VSW50MTI4LCBDb25zdGV4cHJUZXN0KQoreworICAgIGNv
bnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIHplcm8gPSBXVEY6OlVJbnQxMjhJbXBsKCk7CisgICAg
Y29uc3RleHByIFdURjo6VUludDEyOEltcGwgb25lID0gMTsKKyAgICBjb25zdGV4cHIgV1RGOjpV
SW50MTI4SW1wbCBtaW51c190d28gPSAtMjsKKyAgICBFWFBFQ1RfRVEoemVybywgV1RGOjpVSW50
MTI4SW1wbCgwKSk7CisgICAgRVhQRUNUX0VRKG9uZSwgV1RGOjpVSW50MTI4SW1wbCgxKSk7Cisg
ICAgRVhQRUNUX0VRKG1pbnVzX3R3bywgV1RGOjpNYWtlVUludDEyOCgtMSwgLTIpKTsKK30KKwor
VEVTVChXVEZfVUludDEyOCwgTnVtZXJpY0xpbWl0c1Rlc3QpCit7CisgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zcGVjaWFsaXplZCwg
IiIpOworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4
SW1wbD46OmlzX3NpZ25lZCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xp
bWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6aXNfaW50ZWdlciwgIiIpOworICAgIEVYUEVDVF9FUShz
dGF0aWNfY2FzdDxpbnQ+KDEyOCAqIHN0ZDo6bG9nMTAoMikpLAorICAgICAgICBzdGQ6Om51bWVy
aWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjpkaWdpdHMxMCk7CisgICAgRVhQRUNUX0VRKDAs
IHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1pbigpKTsKKyAgICBFWFBF
Q1RfRVEoMCwgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bG93ZXN0KCkp
OworICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhNYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czxX
VEY6OlVJbnQxMjhJbXBsPjo6bWF4KCkpOworfQorCitURVNUKFdURl9JbnQxMjhVSW50MTI4LCBD
b252ZXJzaW9uVGVzdCkKK3sKKyAgICBXVEY6OkludDEyOEltcGwgbm9ubmVnYXRpdmVfc2lnbmVk
X3ZhbHVlc1tdID0geworICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAweGZmZWVkZGNj
YmJhYTk5ODgsCisgICAgICAgIFdURjo6TWFrZUludDEyOCgweDc3NjY1NTQ0MzMyMjExMDAsIDAp
LAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHgxMjM0NTY3ODkwYWJjZGVmLCAweGZlZGNiYTA5
ODc2NTQzMjEpLAorICAgICAgICBXVEY6OkludDEyOE1heCgpCisgICAgfTsKKyAgICBmb3IgKFdU
Rjo6SW50MTI4SW1wbCB2YWx1ZSA6IG5vbm5lZ2F0aXZlX3NpZ25lZF92YWx1ZXMpIHsKKyAgICAg
ICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwoV1RGOjpVSW50MTI4SW1wbCh2YWx1
ZSkpKTsKKworICAgICAgICBXVEY6OlVJbnQxMjhJbXBsIGFzc2lnbmVkX3ZhbHVlOworICAgICAg
ICBhc3NpZ25lZF92YWx1ZSA9IHZhbHVlOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIFdURjo6
SW50MTI4SW1wbChhc3NpZ25lZF92YWx1ZSkpOworICAgIH0KKworICAgIFdURjo6SW50MTI4SW1w
bCBuZWdhdGl2ZV92YWx1ZXNbXSA9IHsKKyAgICAgICAgLTEsIC0weDEyMzQ1Njc4OTBhYmNkZWYs
CisgICAgICAgIFdURjo6TWFrZUludDEyOCgtMHg1NTQ0MzMyMjExZmZlZWRkLCAwKSwKKyAgICAg
ICAgLVdURjo6TWFrZUludDEyOCgweDc2NTQzMjEwZmVkY2JhOTgsIDB4YWJjZGVmMDEyMzQ1Njc4
OSkKKyAgICB9OworICAgIGZvciAoV1RGOjpJbnQxMjhJbXBsIHZhbHVlIDogbmVnYXRpdmVfdmFs
dWVzKSB7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhJbXBsKC12YWx1ZSksIC1XVEY6
OlVJbnQxMjhJbXBsKHZhbHVlKSk7CisKKyAgICAgICAgV1RGOjpVSW50MTI4SW1wbCBhc3NpZ25l
ZF92YWx1ZTsKKyAgICAgICAgYXNzaWduZWRfdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgRVhQRUNU
X0VRKFdURjo6VUludDEyOEltcGwoLXZhbHVlKSwgLWFzc2lnbmVkX3ZhbHVlKTsKICAgICB9CiB9
CiAKLSNlbHNlIC8vICFIQVZFKElOVDEyOF9UKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFz
cyBXVEZfSW50MTI4SW50ZWdlclRyYWl0c1Rlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsK
K307CisKK1RZUEVEX1RFU1RfU1VJVEUoV1RGX0ludDEyOEludGVnZXJUcmFpdHNUZXN0LCBJbnRl
Z2VyVHlwZXMpOworCitUWVBFRF9URVNUKFdURl9JbnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCwgQ29u
c3RydWN0QXNzaWduVGVzdCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0
aWJsZTxXVEY6OkludDEyOEltcGwsIFR5cGVQYXJhbT46OnZhbHVlLAorICAgICAgICAiV1RGOjpJ
bnQxMjhJbXBsIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19hc3NpZ25hYmxlPFdURjo6SW50MTI4SW1wbCYsIFR5cGVQYXJh
bT46OnZhbHVlLAorICAgICAgICAiV1RGOjpJbnQxMjhJbXBsIG11c3QgYmUgYXNzaWduYWJsZSBm
cm9tIFR5cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYXNzaWduYWJsZTxU
eXBlUGFyYW0mLCBXVEY6OkludDEyOEltcGw+Ojp2YWx1ZSwKKyAgICAgICAgIlR5cGVQYXJhbSBt
dXN0IG5vdCBiZSBhc3NpZ25hYmxlIGZyb20gV1RGOjpJbnQxMjhJbXBsIik7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV1RGX0ludDEyOEZsb2F0VHJhaXRzVGVzdCA6IHB1Ymxp
YyA6OnRlc3Rpbmc6OlRlc3QgeworfTsKKworVFlQRURfVEVTVF9TVUlURShXVEZfSW50MTI4Rmxv
YXRUcmFpdHNUZXN0LCBGbG9hdGluZ1BvaW50VHlwZXMpOwogCi1URVNUKFdURl9JbnQxMjgsIFZz
TmF0aXZlKQorVFlQRURfVEVTVChXVEZfSW50MTI4RmxvYXRUcmFpdHNUZXN0LCBDb25zdHJ1Y3RB
c3NpZ25UZXN0KQogewotICAgIEdURVNUX0xPR18oSU5GTykgPDwgIkVudmlyb25tZW50IGxhY2tz
IG5hdGl2ZSBfX3VpbnQxMjhfdCI7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVj
dGlibGU8V1RGOjpJbnQxMjhJbXBsLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6
SW50MTI4SW1wbCBtdXN0IGJlIGNvbnN0cnVjdGlibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8V1RGOjpJbnQxMjhJbXBsJiwgVHlwZVBh
cmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6OkludDEyOEltcGwgbXVzdCBub3QgYmUgYXNzaWdu
YWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYXNzaWdu
YWJsZTxUeXBlUGFyYW0mLCBXVEY6OkludDEyOEltcGw+Ojp2YWx1ZSwKKyAgICAgICAgIlR5cGVQ
YXJhbSBtdXN0IG5vdCBiZSBhc3NpZ25hYmxlIGZyb20gV1RGOjpJbnQxMjhJbXBsIik7CiB9CiAK
LSNlbmRpZiAvLyAhSEFWRShJTlQxMjhfVCkKK1RFU1QoV1RGX0ludDEyOCwgVHJpdmlhbFRyYWl0
c1Rlc3QpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZWZhdWx0X2Nv
bnN0cnVjdGlibGU8V1RGOjpJbnQxMjhJbXBsPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlfY29uc3RydWN0aWJsZTxXVEY6OkludDEyOEltcGw+
Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weV9h
c3NpZ25hYmxlPFdURjo6SW50MTI4SW1wbD46OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8V1RGOjpJbnQxMjhJbXBsPjo6dmFsdWUs
ICIiKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBCb29sQ29udmVyc2lvblRlc3QpCit7CisgICAg
RVhQRUNUX0ZBTFNFKFdURjo6SW50MTI4SW1wbCgwKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA2NDsgKytpKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKFdURjo6TWFrZUludDEyOCgwLCB1aW50
NjRfdCB7IDEgfSA8PCBpKSk7CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjM7ICsr
aSkgeworICAgICAgICBFWFBFQ1RfVFJVRShXVEY6Ok1ha2VJbnQxMjgoaW50NjRfdCB7IDEgfSA8
PCBpLCAwKSk7CisgICAgfQorICAgIEVYUEVDVF9UUlVFKFdURjo6SW50MTI4TWluKCkpOworCisg
ICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbCgxKSwgV1RGOjpJbnQxMjhJbXBsKHRydWUpKTsK
KyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKDApLCBXVEY6OkludDEyOEltcGwoZmFsc2Up
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBXVEZfSW50MTI4SW50ZWdlckNv
bnZlcnNpb25UZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9OworCitUWVBFRF9URVNU
X1NVSVRFKFdURl9JbnQxMjhJbnRlZ2VyQ29udmVyc2lvblRlc3QsIEludGVnZXJUeXBlcyk7CisK
K1RZUEVEX1RFU1QoV1RGX0ludDEyOEludGVnZXJDb252ZXJzaW9uVGVzdCwgUm91bmRUcmlwVGVz
dCkKK3sKKyAgICBFWFBFQ1RfRVEoVHlwZVBhcmFtIHsgMCB9LCBzdGF0aWNfY2FzdDxUeXBlUGFy
YW0+KFdURjo6SW50MTI4SW1wbCgwKSkpOworICAgIEVYUEVDVF9FUShzdGQ6Om51bWVyaWNfbGlt
aXRzPFR5cGVQYXJhbT46Om1pbigpLAorICAgICAgICBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KAor
ICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZVBhcmFt
Pjo6bWluKCkpKSk7CisgICAgRVhQRUNUX0VRKHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZVBhcmFt
Pjo6bWF4KCksCisgICAgICAgIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oCisgICAgICAgICAgICBX
VEY6OkludDEyOEltcGwoc3RkOjpudW1lcmljX2xpbWl0czxUeXBlUGFyYW0+OjptYXgoKSkpKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBXVEZfSW50MTI4RmxvYXRDb252ZXJz
aW9uVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworfTsKKworVFlQRURfVEVTVF9TVUlU
RShXVEZfSW50MTI4RmxvYXRDb252ZXJzaW9uVGVzdCwgRmxvYXRpbmdQb2ludFR5cGVzKTsKKwor
VFlQRURfVEVTVChXVEZfSW50MTI4RmxvYXRDb252ZXJzaW9uVGVzdCwgQ29uc3RydWN0QW5kQ2Fz
dFRlc3QpCit7CisgICAgLy8gQ29udmVyc2lvbnMgd2hlcmUgdGhlIGZsb2F0aW5nIHBvaW50IHZh
bHVlcyBzaG91bGQgYmUgZXhhY3RseSB0aGUgc2FtZS4KKyAgICAvLyAweDlmNWIgaXMgYSByYW5k
b21seSBjaG9zZW4gc21hbGwgdmFsdWUuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMTA7ICsr
aSkgeyAvLyAxMTAgPSAxMjYgLSAjYml0cyBpbiAweDlmNWIKKyAgICAgICAgU0NPUEVEX1RSQUNF
KDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpKTsKKworICAgICAgICBUeXBlUGFy
YW0gZmxvYXRfdmFsdWUgPSBzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oMHg5ZjVi
KSwgaSk7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBpbnRfdmFsdWUgPSBXVEY6OkludDEyOElt
cGwoMHg5ZjViKSA8PCBpOworCisgICAgICAgIEVYUEVDVF9FUShmbG9hdF92YWx1ZSwgc3RhdGlj
X2Nhc3Q8VHlwZVBhcmFtPihpbnRfdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKC1mbG9hdF92
YWx1ZSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigtaW50X3ZhbHVlKSk7CisgICAgICAgIEVYUEVD
VF9FUShpbnRfdmFsdWUsIFdURjo6SW50MTI4SW1wbChmbG9hdF92YWx1ZSkpOworICAgICAgICBF
WFBFQ1RfRVEoLWludF92YWx1ZSwgV1RGOjpJbnQxMjhJbXBsKC1mbG9hdF92YWx1ZSkpOworICAg
IH0KKworICAgIC8vIFJvdW5kIHRyaXAgY29udmVyc2lvbnMgd2l0aCBhIHNtYWxsIHNhbXBsZSBv
ZiByYW5kb21seSBnZW5lcmF0ZWQgdWludDY0X3QKKyAgICAvLyB2YWx1ZXMgKGxlc3MgdGhhbiBp
bnQ2NF90IG1heCBzbyB0aGF0IHZhbHVlICogMl42NCBmaXRzIGludG8gaW50MTI4KS4KKyAgICB1
aW50NjRfdCB2YWx1ZXNbXSA9IHsgMHg2ZDQ0OTJjMjRmYjg2MTk5LCAweDI2ZWFkNjVlNGNiMzU5
YjUsCisgICAgICAgIDB4MmM0MzQwNzQzM2JhM2ZkMSwgMHgzYjU3NGVjNjY4ZGY2YjU1LAorICAg
ICAgICAweDFjNzUwZTU1YTI5ZjRmMGYgfTsKKyAgICBmb3IgKHVpbnQ2NF90IHZhbHVlIDogdmFs
dWVzKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDY0OyArK2kpIHsKKyAgICAgICAg
ICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAgICAgICAgIDw8
ICJ2YWx1ZSA9ICIgPDwgdmFsdWUgPDwgIjsgaSA9ICIgPDwgaSk7CisKKyAgICAgICAgICAgIFR5
cGVQYXJhbSBmdmFsdWUgPSBzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFR5cGVQYXJhbT4odmFsdWUp
LCBpKTsKKyAgICAgICAgICAgIEVYUEVDVF9ET1VCTEVfRVEoZnZhbHVlLCBzdGF0aWNfY2FzdDxU
eXBlUGFyYW0+KFdURjo6SW50MTI4SW1wbChmdmFsdWUpKSk7CisgICAgICAgICAgICBFWFBFQ1Rf
RE9VQkxFX0VRKC1mdmFsdWUsIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oLVdURjo6SW50MTI4SW1w
bChmdmFsdWUpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRE9VQkxFX0VRKC1mdmFsdWUsIHN0YXRp
Y19jYXN0PFR5cGVQYXJhbT4oV1RGOjpJbnQxMjhJbXBsKC1mdmFsdWUpKSk7CisgICAgICAgICAg
ICBFWFBFQ1RfRE9VQkxFX0VRKGZ2YWx1ZSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigtV1RGOjpJ
bnQxMjhJbXBsKC1mdmFsdWUpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSb3VuZCB0
cmlwIGNvbnZlcnNpb25zIHdpdGggYSBzbWFsbCBzYW1wbGUgb2YgcmFuZG9tIGxhcmdlIHBvc2l0
aXZlIHZhbHVlcy4KKyAgICBXVEY6OkludDEyOEltcGwgbGFyZ2VfdmFsdWVzW10gPSB7CisgICAg
ICAgIFdURjo6TWFrZUludDEyOCgweDViMDY0MGQ5NmM3YjNkOWYsIDB4YjdhNzE4OWU1MWQxODYy
MiksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgweDM0YmVkMDQyYzZmNjUyNzAsIDB4NzNiMjM2
NTcwNjY5YTA4OSksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgweDQzZGViYTllNmRhMTI3MjQs
IDB4ZjdmMGY4M2RhNjg2Nzk3ZCksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgweDcxZThkMzgz
YmU0ZTU1ODksIDB4NzVjM2Y5NmZiMDA3NTJiNikKKyAgICB9OworICAgIGZvciAoV1RGOjpJbnQx
MjhJbXBsIHZhbHVlIDogbGFyZ2VfdmFsdWVzKSB7CisgICAgICAgIC8vIE1ha2UgdmFsdWUgaGF2
ZSBhcyBtYW55IHNpZ25pZmljYW50IGJpdHMgYXMgY2FuIGJlIHJlcHJlc2VudGVkIGJ5CisgICAg
ICAgIC8vIHRoZSBtYW50aXNzYSwgYWxzbyBtYWtpbmcgc3VyZSB0aGUgaGlnaGVzdCBhbmQgbG93
ZXN0IGJpdCBpbiB0aGUgcmFuZ2UKKyAgICAgICAgLy8gYXJlIHNldC4KKyAgICAgICAgdmFsdWUg
Pj49ICgxMjcgLSBzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46OmRpZ2l0cyk7CisgICAg
ICAgIHZhbHVlIHw9IFdURjo6SW50MTI4SW1wbCgxKSA8PCAoc3RkOjpudW1lcmljX2xpbWl0czxU
eXBlUGFyYW0+OjpkaWdpdHMgLSAxKTsKKyAgICAgICAgdmFsdWUgfD0gMTsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAxMjcgLSBzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46OmRp
Z2l0czsgKytpKSB7CisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwgaW50X3ZhbHVlID0gdmFs
dWUgPDwgaTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShpbnRfdmFsdWUsCisgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8V1RGOjpJbnQxMjhJbXBsPihzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KGlu
dF92YWx1ZSkpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgtaW50X3ZhbHVlLAorICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFdURjo6SW50MTI4SW1wbD4oc3RhdGljX2Nhc3Q8VHlwZVBhcmFt
PigtaW50X3ZhbHVlKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU21hbGwgc2FtcGxl
IG9mIGNoZWNrcyB0aGF0IHJvdW5kaW5nIGlzIHRvd2FyZCB6ZXJvCisgICAgRVhQRUNUX0VRKDAs
IFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oMC4xKSkpOworICAgIEVYUEVDVF9FUSgxNywgV1RG
OjpJbnQxMjhJbXBsKFR5cGVQYXJhbSgxNy44KSkpOworICAgIEVYUEVDVF9FUSgwLCBXVEY6Oklu
dDEyOEltcGwoVHlwZVBhcmFtKC0wLjgpKSk7CisgICAgRVhQRUNUX0VRKC01MywgV1RGOjpJbnQx
MjhJbXBsKFR5cGVQYXJhbSgtNTMuMSkpKTsKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJ
bXBsKFR5cGVQYXJhbSgwLjUpKSk7CisgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbChU
eXBlUGFyYW0oLTAuNSkpKTsKKyAgICBUeXBlUGFyYW0ganVzdF9sdF9vbmUgPSBzdGQ6Om5leHR0
b3dhcmQoVHlwZVBhcmFtKDEpLCBUeXBlUGFyYW0oMCkpOworICAgIEVYUEVDVF9FUSgwLCBXVEY6
OkludDEyOEltcGwoanVzdF9sdF9vbmUpKTsKKyAgICBUeXBlUGFyYW0ganVzdF9ndF9taW51c19v
bmUgPSBzdGQ6Om5leHR0b3dhcmQoVHlwZVBhcmFtKC0xKSwgVHlwZVBhcmFtKDApKTsKKyAgICBF
WFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKGp1c3RfZ3RfbWludXNfb25lKSk7CisKKyAgICAv
LyBDaGVjayBsaW1pdHMKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKHN0ZDo6bGRleHAoc3RhdGljX2Nh
c3Q8VHlwZVBhcmFtPigxKSwgMTI3KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihX
VEY6OkludDEyOE1heCgpKSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUSgtc3RkOjpsZGV4cChzdGF0
aWNfY2FzdDxUeXBlUGFyYW0+KDEpLCAxMjcpLAorICAgICAgICBzdGF0aWNfY2FzdDxUeXBlUGFy
YW0+KFdURjo6SW50MTI4TWluKCkpKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBGYWN0b3J5VGVz
dCkKK3sKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKC0xKSwgV1RGOjpNYWtlSW50MTI4
KC0xLCAtMSkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoLTMxKSwgV1RGOjpNYWtl
SW50MTI4KC0xLCAtMzEpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KC0x
LCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkpOworICAgIEVYUEVDVF9FUShX
VEY6OkludDEyOEltcGwoMCksIFdURjo6TWFrZUludDEyOCgwLCAwKSk7CisgICAgRVhQRUNUX0VR
KFdURjo6SW50MTI4SW1wbCgxKSwgV1RGOjpNYWtlSW50MTI4KDAsIDEpKTsKKyAgICBFWFBFQ1Rf
RVEoV1RGOjpJbnQxMjhJbXBsKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSwK
KyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1heCgpKSk7Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgSGlnaExvd1Rlc3QpCit7CisgICAgc3Ry
dWN0IEhpZ2hMb3dQYWlyIHsKKyAgICAgICAgaW50NjRfdCBoaWdoOworICAgICAgICB1aW50NjRf
dCBsb3c7CisgICAgfTsKKyAgICBIaWdoTG93UGFpciB2YWx1ZXNbXSB7IHsgMCwgMCB9LCB7IDAs
IDEgfSwgeyAxLCAwIH0sIHsgMTIzLCA0NTYgfSwgeyAtNjU0LCAzMjEgfSB9OworICAgIGZvciAo
Y29uc3QgSGlnaExvd1BhaXImIHBhaXIgOiB2YWx1ZXMpIHsKKyAgICAgICAgV1RGOjpJbnQxMjhJ
bXBsIHZhbHVlID0gV1RGOjpNYWtlSW50MTI4KHBhaXIuaGlnaCwgcGFpci5sb3cpOworICAgICAg
ICBFWFBFQ1RfRVEocGFpci5sb3csIFdURjo6SW50MTI4TG93NjQodmFsdWUpKTsKKyAgICAgICAg
RVhQRUNUX0VRKHBhaXIuaGlnaCwgV1RGOjpJbnQxMjhIaWdoNjQodmFsdWUpKTsKKyAgICB9Cit9
CisKK1RFU1QoV1RGX0ludDEyOCwgTGltaXRzVGVzdCkKK3sKKyAgICBFWFBFQ1RfRVEoV1RGOjpN
YWtlSW50MTI4KDB4N2ZmZmZmZmZmZmZmZmZmZiwgMHhmZmZmZmZmZmZmZmZmZmZmKSwKKyAgICAg
ICAgV1RGOjpJbnQxMjhNYXgoKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4TWF4KCksIH5X
VEY6OkludDEyOE1pbigpKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBDb25zdGV4cHJUZXN0KQor
eworICAgIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwgemVybyA9IFdURjo6SW50MTI4SW1wbCgp
OworICAgIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwgb25lID0gMTsKKyAgICBjb25zdGV4cHIg
V1RGOjpJbnQxMjhJbXBsIG1pbnVzX3R3byA9IC0yOworICAgIGNvbnN0ZXhwciBXVEY6OkludDEy
OEltcGwgbWluID0gV1RGOjpJbnQxMjhNaW4oKTsKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJ
bXBsIG1heCA9IFdURjo6SW50MTI4TWF4KCk7CisgICAgRVhQRUNUX0VRKHplcm8sIFdURjo6SW50
MTI4SW1wbCgwKSk7CisgICAgRVhQRUNUX0VRKG9uZSwgV1RGOjpJbnQxMjhJbXBsKDEpKTsKKyAg
ICBFWFBFQ1RfRVEobWludXNfdHdvLCBXVEY6Ok1ha2VJbnQxMjgoLTEsIC0yKSk7CisgICAgRVhQ
RUNUX0dUKG1heCwgb25lKTsKKyAgICBFWFBFQ1RfTFQobWluLCBtaW51c190d28pOworfQorCitU
RVNUKFdURl9JbnQxMjgsIENvbXBhcmlzb25UZXN0KQoreworICAgIHN0cnVjdCBUZXN0Q2FzZSB7
CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBzbWFsbGVyOworICAgICAgICBXVEY6OkludDEyOElt
cGwgbGFyZ2VyOworICAgIH07CisgICAgVGVzdENhc2UgY2FzZXNbXSA9IHsKKyAgICAgICAgeyBX
VEY6OkludDEyOEltcGwoMCksIFdURjo6SW50MTI4SW1wbCgxMjMpIH0sCisgICAgICAgIHsgV1RG
OjpNYWtlSW50MTI4KC0xMiwgMzQpLCBXVEY6Ok1ha2VJbnQxMjgoMTIsIDM0KSB9LAorICAgICAg
ICB7IFdURjo6TWFrZUludDEyOCgxLCAxMDAwKSwgV1RGOjpNYWtlSW50MTI4KDEwMDAsIDEpIH0s
CisgICAgICAgIHsgV1RGOjpNYWtlSW50MTI4KC0xMDAwLCAxMDAwKSwgV1RGOjpNYWtlSW50MTI4
KC0xLCAxKSB9LAorICAgIH07CisgICAgZm9yIChjb25zdCBUZXN0Q2FzZSYgcGFpciA6IGNhc2Vz
KSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAicGFpci5z
bWFsbGVyID0gIiA8PCBwYWlyLnNtYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDw8ICI7IHBhaXIubGFyZ2VyID0gIiA8PCBwYWlyLmxhcmdlcik7CisKKyAg
ICAgICAgRVhQRUNUX1RSVUUocGFpci5zbWFsbGVyID09IHBhaXIuc21hbGxlcik7IC8vIE5PTElO
VChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX1RSVUUocGFpci5sYXJnZXIgPT0g
cGFpci5sYXJnZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVD
VF9GQUxTRShwYWlyLnNtYWxsZXIgPT0gcGFpci5sYXJnZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxp
dHkvY2hlY2spCisKKyAgICAgICAgRVhQRUNUX1RSVUUocGFpci5zbWFsbGVyICE9IHBhaXIubGFy
Z2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfRkFMU0Uo
cGFpci5zbWFsbGVyICE9IHBhaXIuc21hbGxlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVj
aykKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhaXIubGFyZ2VyICE9IHBhaXIubGFyZ2VyKTsgLy8g
Tk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21h
bGxlciA8IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAg
ICBFWFBFQ1RfRkFMU0UocGFpci5sYXJnZXIgPCBwYWlyLnNtYWxsZXIpOyAvLyBOT0xJTlQocmVh
ZGFiaWxpdHkvY2hlY2spCisKKyAgICAgICAgRVhQRUNUX1RSVUUocGFpci5sYXJnZXIgPiBwYWly
LnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9G
QUxTRShwYWlyLnNtYWxsZXIgPiBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9j
aGVjaykKKworICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLnNtYWxsZXIgPD0gcGFpci5sYXJnZXIp
OyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9GQUxTRShwYWly
LmxhcmdlciA8PSBwYWlyLnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisg
ICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21hbGxlciA8PSBwYWlyLnNtYWxsZXIpOyAvLyBOT0xJ
TlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIubGFyZ2VyIDw9
IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorCisgICAgICAgIEVY
UEVDVF9UUlVFKHBhaXIubGFyZ2VyID49IHBhaXIuc21hbGxlcik7IC8vIE5PTElOVChyZWFkYWJp
bGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhaXIuc21hbGxlciA+PSBwYWlyLmxh
cmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX1RSVUUo
cGFpci5zbWFsbGVyID49IHBhaXIuc21hbGxlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVj
aykKKyAgICAgICAgRVhQRUNUX1RSVUUocGFpci5sYXJnZXIgPj0gcGFpci5sYXJnZXIpOyAvLyBO
T0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgfQorfQorCitURVNUKFdURl9JbnQxMjgsIFVu
YXJ5UGx1c1Rlc3QpCit7CisgICAgaW50NjRfdCB2YWx1ZXM2NFtdID0geyAwLCAxLCAxMjM0NSwg
MHg0MDAwMDAwMDAwMDAwMDAwLAorICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+
OjptYXgoKSB9OworICAgIGZvciAoaW50NjRfdCB2YWx1ZSA6IHZhbHVlczY0KSB7CisgICAgICAg
IFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAidmFsdWUgPSAiIDw8IHZhbHVl
KTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHZhbHVlKSwgK1dURjo6SW50
MTI4SW1wbCh2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKC12YWx1
ZSksICtXVEY6OkludDEyOEltcGwoLXZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6Ok1h
a2VJbnQxMjgodmFsdWUsIDApLCArV1RGOjpNYWtlSW50MTI4KHZhbHVlLCAwKSk7CisgICAgICAg
IEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgoLXZhbHVlLCAwKSwgK1dURjo6TWFrZUludDEyOCgt
dmFsdWUsIDApKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgVW5hcnlOZWdhdGlvblRl
c3QpCit7CisgICAgaW50NjRfdCB2YWx1ZXM2NFtdID0geyAwLCAxLCAxMjM0NSwgMHg0MDAwMDAw
MDAwMDAwMDAwLAorICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSB9
OworICAgIGZvciAoaW50NjRfdCB2YWx1ZSA6IHZhbHVlczY0KSB7CisgICAgICAgIFNDT1BFRF9U
UkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAidmFsdWUgPSAiIDw8IHZhbHVlKTsKKworICAg
ICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKC12YWx1ZSksIC1XVEY6OkludDEyOEltcGwo
dmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbCh2YWx1ZSksIC1XVEY6
OkludDEyOEltcGwoLXZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgo
LXZhbHVlLCAwKSwgLVdURjo6TWFrZUludDEyOCh2YWx1ZSwgMCkpOworICAgICAgICBFWFBFQ1Rf
RVEoV1RGOjpNYWtlSW50MTI4KHZhbHVlLCAwKSwgLVdURjo6TWFrZUludDEyOCgtdmFsdWUsIDAp
KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgTG9naWNhbE5vdFRlc3QpCit7CisgICAg
RVhQRUNUX1RSVUUoIVdURjo6SW50MTI4SW1wbCgwKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA2NDsgKytpKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRSghV1RGOjpNYWtlSW50MTI4KDAsIHVp
bnQ2NF90IHsgMSB9IDw8IGkpKTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2Mzsg
KytpKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRSghV1RGOjpNYWtlSW50MTI4KGludDY0X3QgeyAx
IH0gPDwgaSwgMCkpOworICAgIH0KK30KKworVEVTVChXVEZfSW50MTI4LCBBZGRpdGlvblN1YnRy
YWN0aW9uVGVzdCkKK3sKKyAgICAvLyA2NCBiaXQgcGFpcnMgdGhhdCB3aWxsIG5vdCBjYXVzZSBv
dmVyZmxvdyAvIHVuZGVyZmxvdy4gVGhlc2UgdGVzdCBuZWdhdGl2ZQorICAgIC8vIGNhcnJ5OyBw
b3NpdGl2ZSBjYXJyeSBtdXN0IGJlIGNoZWNrZWQgc2VwYXJhdGVseS4KKyAgICBzdGQ6OnBhaXI8
aW50NjRfdCwgaW50NjRfdD4gY2FzZXNbXSB7CisgICAgICAgIHsgMCwgMCB9LCAvLyAwLCAwCisg
ICAgICAgIHsgMCwgMjk0NTc4MTI5MDgzNCB9LCAvLyAwLCArCisgICAgICAgIHsgMTkwODM1NzYx
OTIzNCwgMCB9LCAvLyArLCAwCisgICAgICAgIHsgMCwgLTEyMDQ4OTU5MTgyNDUgfSwgLy8gMCwg
LQorICAgICAgICB7IC0yOTU3OTI4NTIzNTYwLCAwIH0sIC8vIC0sIDAKKyAgICAgICAgeyA4OTAy
Mzk4MjMxMjQ2MSwgOTgzNDYwMTI1NjcxMzQgfSwgLy8gKywgKworICAgICAgICB7IC02MzQ1NDIz
NDU2ODIzOSwgLTIzNDU2MjM1MjMwNzczIH0sIC8vIC0sIC0KKyAgICAgICAgeyA5ODI2MzQ1NzI2
MzUwMiwgLTIxNDI4NTYxOTM1OTI1IH0sIC8vICssIC0KKyAgICAgICAgeyAtODgyMzUyMzc0Mzg0
NjcsIDE1OTIzNjU5MjM0NTczIH0sIC8vIC0sICsKKyAgICB9OworICAgIGZvciAoY29uc3QgYXV0
byYgcGFpciA6IGNhc2VzKSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3Nh
Z2UoKQorICAgICAgICAgICAgPDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwg
cGFpci5zZWNvbmQgPDwgJ30nKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBs
KHBhaXIuZmlyc3QgKyBwYWlyLnNlY29uZCksCisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwo
cGFpci5maXJzdCkgKyBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCArIHBhaXIuZmlyc3QpLAorICAgICAg
ICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSArPSBXVEY6OkludDEyOEltcGwocGFp
ci5maXJzdCkpOworCisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJz
dCAtIHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0
KSAtIFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kIC0gcGFpci5maXJzdCksCisgICAgICAgICAgICBXVEY6
OkludDEyOEltcGwocGFpci5zZWNvbmQpIC09IFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0KSk7
CisKKyAgICAgICAgRVhQRUNUX0VRKAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIu
c2Vjb25kICsgcGFpci5maXJzdCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFp
ci5zZWNvbmQsIDApICsgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApKTsKKyAgICAgICAg
RVhQRUNUX0VRKAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QgKyBwYWly
LnNlY29uZCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCwgMCkg
Kz0gV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisKKyAgICAgICAgRVhQRUNUX0VR
KAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kIC0gcGFpci5maXJzdCwg
MCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5zZWNvbmQsIDApIC0gV1RGOjpN
YWtlSW50MTI4KHBhaXIuZmlyc3QsIDApKTsKKyAgICAgICAgRVhQRUNUX0VRKAorICAgICAgICAg
ICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QgLSBwYWlyLnNlY29uZCwgMCksCisgICAgICAg
ICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCwgMCkgLT0gV1RGOjpNYWtlSW50MTI4KHBh
aXIuc2Vjb25kLCAwKSk7CisgICAgfQorCisgICAgLy8gY2hlY2sgcG9zaXRpdmUgY2FycnkKKyAg
ICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KDMxLCAwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50
MTI4KDIwLCAxKSArIFdURjo6TWFrZUludDEyOCgxMCwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpKSk7Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgSW5jcmVtZW50RGVjcmVtZW50
VGVzdCkKK3sKKyAgICBXVEY6OkludDEyOEltcGwgdmFsdWUgPSAwOworICAgIEVYUEVDVF9FUSgw
LCB2YWx1ZSsrKTsKKyAgICBFWFBFQ1RfRVEoMSwgdmFsdWUpOworICAgIEVYUEVDVF9FUSgxLCB2
YWx1ZS0tKTsKKyAgICBFWFBFQ1RfRVEoMCwgdmFsdWUpOworICAgIEVYUEVDVF9FUSgtMSwgLS12
YWx1ZSk7CisgICAgRVhQRUNUX0VRKC0xLCB2YWx1ZSk7CisgICAgRVhQRUNUX0VRKDAsICsrdmFs
dWUpOworICAgIEVYUEVDVF9FUSgwLCB2YWx1ZSk7Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgTXVs
dGlwbGljYXRpb25UZXN0KQoreworICAgIC8vIDEgYml0IHggMSBiaXQsIGFuZCBuZWdhdGl2ZSBj
b21iaW5hdGlvbnMKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCAxMjcgLSBpOyArK2opIHsKKyAgICAgICAgICAgIFNDT1BFRF9U
UkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBq
KTsKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbCBhID0gV1RGOjpJbnQxMjhJbXBsKDEpIDw8
IGk7CisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwgYiA9IFdURjo6SW50MTI4SW1wbCgxKSA8
PCBqOworICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGMgPSBXVEY6OkludDEyOEltcGwoMSkg
PDwgKGkgKyBqKTsKKworICAgICAgICAgICAgRVhQRUNUX0VRKGMsIGEgKiBiKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUSgtYywgLWEgKiBiKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgtYywgYSAq
IC1iKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjLCAtYSAqIC1iKTsKKworICAgICAgICAgICAg
RVhQRUNUX0VRKGMsIFdURjo6SW50MTI4SW1wbChhKSAqPSBiKTsKKyAgICAgICAgICAgIEVYUEVD
VF9FUSgtYywgV1RGOjpJbnQxMjhJbXBsKC1hKSAqPSBiKTsKKyAgICAgICAgICAgIEVYUEVDVF9F
USgtYywgV1RGOjpJbnQxMjhJbXBsKGEpICo9IC1iKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShj
LCBXVEY6OkludDEyOEltcGwoLWEpICo9IC1iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFBhaXJzIG9mIHJhbmRvbSB2YWx1ZXMgdGhhdCB3aWxsIG5vdCBvdmVyZmxvdyBzaWduZWQgNjQt
Yml0IG11bHRpcGxpY2F0aW9uCisgICAgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+IHNtYWxs
X3ZhbHVlc1tdID0geworICAgICAgICB7IDB4NWU2MSwgMHhmMjlmNzljYTE0YjQgfSwgLy8gKywg
KworICAgICAgICB7IDB4M2UwMzNiLCAtMHg2MTJjMGVlNTQ5IH0sIC8vICssIC0KKyAgICAgICAg
eyAtMHgwNTJjZTdlOCwgMHg3YzcyOGYwZiB9LCAvLyAtLCArCisgICAgICAgIHsgLTB4M2FmNzA1
NDYyNiwgLTB4ZmIxZTFkIH0sIC8vIC0sIC0KKyAgICB9OworICAgIGZvciAoY29uc3Qgc3RkOjpw
YWlyPGludDY0X3QsIGludDY0X3Q+JiBwYWlyIDogc21hbGxfdmFsdWVzKSB7CisgICAgICAgIFND
T1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAgICAgPDwgInBhaXIgPSB7
IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5zZWNvbmQgPDwgJ30nKTsKKworICAgICAg
ICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgKiBwYWlyLnNlY29uZCksCisg
ICAgICAgICAgICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgKiBXVEY6OkludDEyOEltcGwo
cGFpci5zZWNvbmQpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZp
cnN0ICogcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmly
c3QpICo9IFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworCisgICAgICAgIEVYUEVDVF9F
UShXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCAqIHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAg
ICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSAqIFdURjo6SW50MTI4SW1wbChwYWly
LnNlY29uZCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3Qg
KiBwYWlyLnNlY29uZCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJz
dCwgMCkgKj0gV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSk7CisgICAgfQorCisgICAgLy8g
UGFpcnMgb2YgcG9zaXRpdmUgcmFuZG9tIHZhbHVlcyB0aGF0IHdpbGwgbm90IG92ZXJmbG93IDY0
LWJpdAorICAgIC8vIG11bHRpcGxpY2F0aW9uIGFuZCBjYW4gYmUgbGVmdCBzaGlmdGVkIGJ5IDMy
IHdpdGhvdXQgb3ZlcmZsb3cKKyAgICBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gc21hbGxf
dmFsdWVzMltdID0geworICAgICAgICB7IDB4MWJiMGExMTAsIDB4MzE0ODc2NzEgfSwKKyAgICAg
ICAgeyAweDQ3OTI3ODRlLCAweDI4YWRkN2Q3IH0sCisgICAgICAgIHsgMHg3YjY2NTUzYSwgMHgx
MWRmZjhlZiB9LAorICAgIH07CisgICAgZm9yIChjb25zdCBzdGQ6OnBhaXI8aW50NjRfdCwgaW50
NjRfdD4mIHBhaXIgOiBzbWFsbF92YWx1ZXMyKSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRl
c3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAgICAgPDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0
IDw8ICIsICIgPDwgcGFpci5zZWNvbmQgPDwgJ30nKTsKKworICAgICAgICBXVEY6OkludDEyOElt
cGwgYSA9IFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0IDw8IDMyKTsKKyAgICAgICAgV1RGOjpJ
bnQxMjhJbXBsIGIgPSBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQgPDwgMzIpOworICAgICAg
ICBXVEY6OkludDEyOEltcGwgYyA9IFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0ICogcGFpci5z
ZWNvbmQsIDApOworCisgICAgICAgIEVYUEVDVF9FUShjLCBhICogYik7CisgICAgICAgIEVYUEVD
VF9FUSgtYywgLWEgKiBiKTsKKyAgICAgICAgRVhQRUNUX0VRKC1jLCBhICogLWIpOworICAgICAg
ICBFWFBFQ1RfRVEoYywgLWEgKiAtYik7CisKKyAgICAgICAgRVhQRUNUX0VRKGMsIFdURjo6SW50
MTI4SW1wbChhKSAqPSBiKTsKKyAgICAgICAgRVhQRUNUX0VRKC1jLCBXVEY6OkludDEyOEltcGwo
LWEpICo9IGIpOworICAgICAgICBFWFBFQ1RfRVEoLWMsIFdURjo6SW50MTI4SW1wbChhKSAqPSAt
Yik7CisgICAgICAgIEVYUEVDVF9FUShjLCBXVEY6OkludDEyOEltcGwoLWEpICo9IC1iKTsKKyAg
ICB9CisKKyAgICAvLyBjaGVjayAwLCAxLCBhbmQgLTEgYmVoYXZpb3Igd2l0aCBsYXJnZSB2YWx1
ZXMKKyAgICBXVEY6OkludDEyOEltcGwgbGFyZ2VfdmFsdWVzW10gPSB7CisgICAgICAgIHsgV1RG
OjpNYWtlSW50MTI4KDB4ZDY2ZjA2MWFmMDJkMDQwOCwgMHg3MjdkMjg0NmNiNDc1YjUzKSB9LAor
ICAgICAgICB7IFdURjo6TWFrZUludDEyOCgweDI3YjhkNWVkNjEwNDQ1MmQsIDB4MDNmOGEzM2Iw
ZWUxZGY0ZikgfSwKKyAgICAgICAgeyAtV1RGOjpNYWtlSW50MTI4KDB4NjIxYjY2MjZiOWU4ZDA0
MiwgMHgyNzMxMWFjOTlkZjAwOTM4KSB9LAorICAgICAgICB7IC1XVEY6Ok1ha2VJbnQxMjgoMHgz
NGUwNjU2ZjFlOTVmYjYwLCAweDQyODFjZmQ3MzEyNTdhNDcpIH0sCisgICAgfTsKKyAgICBmb3Ig
KFdURjo6SW50MTI4SW1wbCB2YWx1ZSA6IGxhcmdlX3ZhbHVlcykgeworICAgICAgICBFWFBFQ1Rf
RVEoMCwgMCAqIHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHZhbHVlICogMCk7CisgICAg
ICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoMCkgKj0gdmFsdWUpOworICAgICAgICBF
WFBFQ1RfRVEoMCwgdmFsdWUgKj0gMCk7CisKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCAxICog
dmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIHZhbHVlICogMSk7CisgICAgICAgIEVY
UEVDVF9FUSh2YWx1ZSwgV1RGOjpJbnQxMjhJbXBsKDEpICo9IHZhbHVlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKHZhbHVlLCB2YWx1ZSAqPSAxKTsKKworICAgICAgICBFWFBFQ1RfRVEoLXZhbHVlLCAt
MSAqIHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgdmFsdWUgKiAtMSk7CisgICAg
ICAgIEVYUEVDVF9FUSgtdmFsdWUsIFdURjo6SW50MTI4SW1wbCgtMSkgKj0gdmFsdWUpOworICAg
ICAgICBFWFBFQ1RfRVEoLXZhbHVlLCB2YWx1ZSAqPSAtMSk7CisgICAgfQorCisgICAgLy8gTWFu
dWFsbHkgY2FsY3VsYXRlZCByYW5kb20gbGFyZ2UgdmFsdWUgY2FzZXMKKyAgICBFWFBFQ1RfRVEo
V1RGOjpNYWtlSW50MTI4KDB4Y2QwZWZkMzQ0MjIxOWJiLCAweGRlNDdjMDViY2Q5ZGY2ZTEpLAor
ICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHg3YzY0NDgsIDB4M2JjNDI4NWM0N2E5ZDI1MykgKiAw
eDFhNjAzNzUzN2IpOworICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtlSW50MTI4KDB4MWY4ZjE0OTg1
MGIxZTVlNiwgMHgxZTUwZDZiNTJkMjcyYzNlKSwKKyAgICAgICAgLVdURjo6TWFrZUludDEyOCgw
eDIzLCAweDJlNjhhNTEzY2ExYjg4NTkpICogMHhlNWE0MzRjZDE0ODY2ZSk7CisgICAgRVhQRUNU
X0VRKC1XVEY6Ok1ha2VJbnQxMjgoMHg1NWNhZTczMjAyOWQxZmNlLCAweGNhNjQ3NGI2NDIzMjYz
ZTQpLAorICAgICAgICAweGE5Yjk4YThkZGY2NmJjICogLVdURjo6TWFrZUludDEyOCgweDgxLCAw
eDY3MmU1ODIzMWUyNDY5ZDcpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KDB4MTlj
OGI3NjIwYjUwN2RjNCwgMHhmZWMwNDJiNzFhNWYyOWE0KSwKKyAgICAgICAgLTB4M2UzOTM0MTE0
NyAqIC1XVEY6Ok1ha2VJbnQxMjgoMHg2YTE0YjIsIDB4NWVkMzRjY2E0MjMyN2IzYykpOworCisg
ICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgweGNkMGVmZDM0NDIyMTliYiwgMHhkZTQ3YzA1
YmNkOWRmNmUxKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4N2M2NDQ4LCAweDNiYzQyODVj
NDdhOWQyNTMpICo9IDB4MWE2MDM3NTM3Yik7CisgICAgRVhQRUNUX0VRKC1XVEY6Ok1ha2VJbnQx
MjgoMHgxZjhmMTQ5ODUwYjFlNWU2LCAweDFlNTBkNmI1MmQyNzJjM2UpLAorICAgICAgICAtV1RG
OjpNYWtlSW50MTI4KDB4MjMsIDB4MmU2OGE1MTNjYTFiODg1OSkgKj0gMHhlNWE0MzRjZDE0ODY2
ZSk7CisgICAgRVhQRUNUX0VRKC1XVEY6Ok1ha2VJbnQxMjgoMHg1NWNhZTczMjAyOWQxZmNlLCAw
eGNhNjQ3NGI2NDIzMjYzZTQpLAorICAgICAgICBXVEY6OkludDEyOEltcGwoMHhhOWI5OGE4ZGRm
NjZiYykgKj0gLVdURjo6TWFrZUludDEyOCgweDgxLCAweDY3MmU1ODIzMWUyNDY5ZDcpKTsKKyAg
ICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KDB4MTljOGI3NjIwYjUwN2RjNCwgMHhmZWMwNDJi
NzFhNWYyOWE0KSwKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsKC0weDNlMzkzNDExNDcpICo9IC1X
VEY6Ok1ha2VJbnQxMjgoMHg2YTE0YjIsIDB4NWVkMzRjY2E0MjMyN2IzYykpOworfQorCitURVNU
KFdURl9JbnQxMjgsIERpdmlzaW9uQW5kTW9kdWxvVGVzdCkKK3sKKyAgICAvLyBDaGVjayBhZ2Fp
bnN0IDY0IGJpdCBkaXZpc2lvbiBhbmQgbW9kdWxvIG9wZXJhdG9ycyB3aXRoIGEgc2FtcGxlIG9m
CisgICAgLy8gcmFuZG9tbHkgZ2VuZXJhdGVkIHBhaXJzLgorICAgIHN0ZDo6cGFpcjxpbnQ2NF90
LCBpbnQ2NF90PiBzbWFsbF9wYWlyc1tdID0geworICAgICAgICB7IDB4MTVmMmE2NDEzOCwgMHg2
N2RhMDUgfSwKKyAgICAgICAgeyAweDVlNTZkMTk0YWY0MzA0NWYsIDB4Y2YxNTQzZmI5OSB9LAor
ICAgICAgICB7IDB4MTVlNjFlZDA1MjAzNmEsIC0weGM4ZTYgfSwKKyAgICAgICAgeyAweDg4MTI1
YTM0MWU4NSwgLTB4ZDIzZmI3NzY4MyB9LAorICAgICAgICB7IC0weGMwNmUyMCwgMHg1YSB9LAor
ICAgICAgICB7IC0weDRmMTAwMjE5YWVhM2U4NWQsIDB4ZGNjNTZjYjRlZmU5OTMgfSwKKyAgICAg
ICAgeyAtMHgxNjhkNjI5MTA1LCAtMHhhNyB9LAorICAgICAgICB7IC0weDdiNDRlOTJmMDNhYjIz
NzUsIC0weDY1MTYgfSwKKyAgICB9OworICAgIGZvciAoY29uc3Qgc3RkOjpwYWlyPGludDY0X3Qs
IGludDY0X3Q+JiBwYWlyIDogc21hbGxfcGFpcnMpIHsKKyAgICAgICAgU0NPUEVEX1RSQUNFKDo6
dGVzdGluZzo6TWVzc2FnZSgpCisgICAgICAgICAgICA8PCAicGFpciA9IHsiIDw8IHBhaXIuZmly
c3QgPDwgIiwgIiA8PCBwYWlyLnNlY29uZCA8PCAnfScpOworCisgICAgICAgIFdURjo6SW50MTI4
SW1wbCBkaXZpZGVuZCA9IHBhaXIuZmlyc3Q7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBkaXZp
c29yID0gcGFpci5zZWNvbmQ7CisgICAgICAgIGludDY0X3QgcXVvdGllbnQgPSBwYWlyLmZpcnN0
IC8gcGFpci5zZWNvbmQ7CisgICAgICAgIGludDY0X3QgcmVtYWluZGVyID0gcGFpci5maXJzdCAl
IHBhaXIuc2Vjb25kOworCisgICAgICAgIEVYUEVDVF9FUShxdW90aWVudCwgZGl2aWRlbmQgLyBk
aXZpc29yKTsKKyAgICAgICAgRVhQRUNUX0VRKHF1b3RpZW50LCBXVEY6OkludDEyOEltcGwoZGl2
aWRlbmQpIC89IGRpdmlzb3IpOworICAgICAgICBFWFBFQ1RfRVEocmVtYWluZGVyLCBkaXZpZGVu
ZCAlIGRpdmlzb3IpOworICAgICAgICBFWFBFQ1RfRVEocmVtYWluZGVyLCBXVEY6OkludDEyOElt
cGwoZGl2aWRlbmQpICU9IGRpdmlzb3IpOworICAgIH0KKworICAgIC8vIFRlc3QgYmVoYXZpb3Ig
d2l0aCAwLCAxLCBhbmQgLTEgd2l0aCBhIHNhbXBsZSBvZiByYW5kb21seSBnZW5lcmF0ZWQgbGFy
Z2UKKyAgICAvLyB2YWx1ZXMuCisgICAgV1RGOjpJbnQxMjhJbXBsIHZhbHVlc1tdID0geworICAg
ICAgICBXVEY6Ok1ha2VJbnQxMjgoMHg2M2QyNmVlNjg4YTk2MmIyLCAweDllMTQxMWFiZGE1YzFk
NzApLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHgxNTJmMzg1MTU5ZDZmOTg2LCAweGJmOGQ0
OGVmNjNkYTM5NWQpLAorICAgICAgICAtV1RGOjpNYWtlSW50MTI4KDB4MzA5OGQ3NTY3MDMwMDM4
YywgMHgxNGU3YThhMDk4ZGMyMTY0KSwKKyAgICAgICAgLVdURjo6TWFrZUludDEyOCgweDQ5YTAz
N2FjYTM1YzgwOWYsIDB4YTZhODc1MjU0ODBlZjMzMCksCisgICAgfTsKKyAgICBmb3IgKFdURjo6
SW50MTI4SW1wbCB2YWx1ZSA6IHZhbHVlcykgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0
aW5nOjpNZXNzYWdlKCkgPDwgInZhbHVlID0gIiA8PCB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNU
X0VRKDAsIDAgLyB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwo
MCkgLz0gdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMCwgMCAlIHZhbHVlKTsKKyAgICAgICAg
RVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbCgwKSAlPSB2YWx1ZSk7CisKKyAgICAgICAgRVhQ
RUNUX0VRKHZhbHVlLCB2YWx1ZSAvIDEpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIFdURjo6
SW50MTI4SW1wbCh2YWx1ZSkgLz0gMSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB2YWx1ZSAlIDEp
OworICAgICAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKHZhbHVlKSAlPSAxKTsKKwor
ICAgICAgICBFWFBFQ1RfRVEoLXZhbHVlLCB2YWx1ZSAvIC0xKTsKKyAgICAgICAgRVhQRUNUX0VR
KC12YWx1ZSwgV1RGOjpJbnQxMjhJbXBsKHZhbHVlKSAvPSAtMSk7CisgICAgICAgIEVYUEVDVF9F
USgwLCB2YWx1ZSAlIC0xKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbCh2
YWx1ZSkgJT0gLTEpOworICAgIH0KKworICAgIC8vIE1pbiBhbmQgbWF4IHZhbHVlcworICAgIEVY
UEVDVF9FUSgwLCBXVEY6OkludDEyOE1heCgpIC8gV1RGOjpJbnQxMjhNaW4oKSk7CisgICAgRVhQ
RUNUX0VRKFdURjo6SW50MTI4TWF4KCksIFdURjo6SW50MTI4TWF4KCkgJSBXVEY6OkludDEyOE1p
bigpKTsKKyAgICBFWFBFQ1RfRVEoLTEsIFdURjo6SW50MTI4TWluKCkgLyBXVEY6OkludDEyOE1h
eCgpKTsKKyAgICBFWFBFQ1RfRVEoLTEsIFdURjo6SW50MTI4TWluKCkgJSBXVEY6OkludDEyOE1h
eCgpKTsKKworICAgIC8vIFBvd2VyIG9mIHR3byBkaXZpc2lvbiBhbmQgbW9kdWxvIG9mIHJhbmRv
bSBsYXJnZSBkaXZpZGVuZHMKKyAgICBXVEY6OkludDEyOEltcGwgcG9zaXRpdmVfdmFsdWVzW10g
PSB7CisgICAgICAgIFdURjo6TWFrZUludDEyOCgweDIxZTFhMWNjNjk1NzQ2MjAsIDB4ZTdhYzQ0
N2ZhYjJmYzg2OSksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgweDMyYzJmZjNhYjg5ZTY2ZTgs
IDB4MDMzNzlhNjEzZmQxY2U3NCksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgweDZmMzJjYTc4
NjE4NGRjYWYsIDB4MDQ2ZjljOWVjYjNhOWNlMSksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgw
eDFhZWI0NjlkZDk5MGUwZWUsIDB4ZGEyNzQwZjI0M2NkMzdlYiksCisgICAgfTsKKyAgICBmb3Ig
KFdURjo6SW50MTI4SW1wbCB2YWx1ZSA6IHBvc2l0aXZlX3ZhbHVlcykgeworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDEyNzsgKytpKSB7CisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0
ZXN0aW5nOjpNZXNzYWdlKCkKKyAgICAgICAgICAgICAgICA8PCAidmFsdWUgPSAiIDw8IHZhbHVl
IDw8ICI7IGkgPSAiIDw8IGkpOworICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsIHBvd2VyX29m
X3R3byA9IFdURjo6SW50MTI4SW1wbCgxKSA8PCBpOworCisgICAgICAgICAgICBFWFBFQ1RfRVEo
dmFsdWUgPj4gaSwgdmFsdWUgLyBwb3dlcl9vZl90d28pOworICAgICAgICAgICAgRVhQRUNUX0VR
KHZhbHVlID4+IGksIFdURjo6SW50MTI4SW1wbCh2YWx1ZSkgLz0gcG93ZXJfb2ZfdHdvKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSAmIChwb3dlcl9vZl90d28gLSAxKSwgdmFsdWUgJSBw
b3dlcl9vZl90d28pOworICAgICAgICAgICAgRVhQRUNUX0VRKHZhbHVlICYgKHBvd2VyX29mX3R3
byAtIDEpLAorICAgICAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbCh2YWx1ZSkgJT0gcG93ZXJf
b2ZfdHdvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0ZWQg
Y2FzZXMgd2l0aCByYW5kb20gbGFyZ2UgZGl2aWRlbmRzCisgICAgc3RydWN0IERpdmlzaW9uTW9k
Q2FzZSB7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBkaXZpZGVuZDsKKyAgICAgICAgV1RGOjpJ
bnQxMjhJbXBsIGRpdmlzb3I7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBxdW90aWVudDsKKyAg
ICAgICAgV1RGOjpJbnQxMjhJbXBsIHJlbWFpbmRlcjsKKyAgICB9OworICAgIERpdmlzaW9uTW9k
Q2FzZSBtYW51YWxfY2FzZXNbXSA9IHsKKyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgoMHg2YWRh
NDhkNDg5MDA3OTY2LCAweDNjOWM1Yzk4MTUwZDVkNjkpLAorICAgICAgICAgICAgV1RGOjpNYWtl
SW50MTI4KDB4OGJjMzA4ZmIsIDB4OGNiOWNjOWEzYjgwMzM0NCksIDB4YzNiODdlMDgsCisgICAg
ICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHgxYjdkYjVlMSwgMHhkOWVjYTM0YjdhZjA0YjQ5KSB9
LAorICAgICAgICB7IFdURjo6TWFrZUludDEyOCgweGQ2OTQ2NTExYjViLCAweDQ4ODZjNWM5NjU0
NmJmNWYpLAorICAgICAgICAgICAgLVdURjo6TWFrZUludDEyOCgweDI2M2IsIDB4ZmQ1MTYyNzll
ZmNmZTJkYyksIC0weDU5Y2JhYmYwLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4NjIy
LCAweGY0NjI5MDkxNTU2NTFkMWYpIH0sCisgICAgICAgIHsgLVdURjo6TWFrZUludDEyOCgweDMz
ZGI3MzRmOWU4ZDEzOTksIDB4ODQ0N2FjOTI0ODJiY2E0ZCksIDB4Mzc0OTUwNzgyNDAsCisgICAg
ICAgICAgICAtV1RGOjpNYWtlSW50MTI4KDB4ZjAxZjEsIDB4YmMwMzY4YmY5YTc3ZWFlOCksIC0w
eDIxYTUwOGY0MDRkIH0sCisgICAgICAgIHsgLVdURjo6TWFrZUludDEyOCgweDEzZjgzN2I0MDlh
MDdlN2QsIDB4N2ZjOGUyNDhhN2Q3MzU2MCksIC0weDFiOWYsCisgICAgICAgICAgICBXVEY6Ok1h
a2VJbnQxMjgoMHhiOTE1NzU1NmQ3MjQsIDB4YjE0ZjYzNTcxNGQ3NTYzZSksIC0weDFhZGUgfSwK
KyAgICB9OworICAgIGZvciAoY29uc3QgRGl2aXNpb25Nb2RDYXNlIHRlc3RfY2FzZSA6IG1hbnVh
bF9jYXNlcykgeworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnF1b3RpZW50LCB0ZXN0X2Nh
c2UuZGl2aWRlbmQgLyB0ZXN0X2Nhc2UuZGl2aXNvcik7CisgICAgICAgIEVYUEVDVF9FUSh0ZXN0
X2Nhc2UucXVvdGllbnQsCisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwodGVzdF9jYXNlLmRp
dmlkZW5kKSAvPSB0ZXN0X2Nhc2UuZGl2aXNvcik7CisgICAgICAgIEVYUEVDVF9FUSh0ZXN0X2Nh
c2UucmVtYWluZGVyLCB0ZXN0X2Nhc2UuZGl2aWRlbmQgJSB0ZXN0X2Nhc2UuZGl2aXNvcik7Cisg
ICAgICAgIEVYUEVDVF9FUSh0ZXN0X2Nhc2UucmVtYWluZGVyLAorICAgICAgICAgICAgV1RGOjpJ
bnQxMjhJbXBsKHRlc3RfY2FzZS5kaXZpZGVuZCkgJT0gdGVzdF9jYXNlLmRpdmlzb3IpOworICAg
IH0KK30KKworVEVTVChXVEZfSW50MTI4LCBCaXR3aXNlTG9naWNUZXN0KQoreworICAgIEVYUEVD
VF9FUShXVEY6OkludDEyOEltcGwoLTEpLCB+V1RGOjpJbnQxMjhJbXBsKDApKTsKKworICAgIFdU
Rjo6SW50MTI4SW1wbCB2YWx1ZXNbXSB7CisgICAgICAgIDAsIC0xLCAweGRlNDAwYmVlMDVjM2Zm
NmIsIFdURjo6TWFrZUludDEyOCgweDdmMzIxNzhkZDgxZDYzNGEsIDApLAorICAgICAgICBXVEY6
Ok1ha2VJbnQxMjgoMHhhZjUzOTA1NzA1NTYxM2E5LCAweDdkMTA0ZDdkOTQ2YzJlNGQpCisgICAg
fTsKKyAgICBmb3IgKFdURjo6SW50MTI4SW1wbCB2YWx1ZSA6IHZhbHVlcykgeworICAgICAgICBF
WFBFQ1RfRVEodmFsdWUsIH5+dmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFs
dWUgfCB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgJiB2YWx1ZSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgwLCB2YWx1ZSBeIHZhbHVlKTsKKworICAgICAgICBFWFBFQ1RfRVEo
dmFsdWUsIFdURjo6SW50MTI4SW1wbCh2YWx1ZSkgfD0gdmFsdWUpOworICAgICAgICBFWFBFQ1Rf
RVEodmFsdWUsIFdURjo6SW50MTI4SW1wbCh2YWx1ZSkgJj0gdmFsdWUpOworICAgICAgICBFWFBF
Q1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKHZhbHVlKSBePSB2YWx1ZSk7CisKKyAgICAgICAgRVhQ
RUNUX0VRKHZhbHVlLCB2YWx1ZSB8IDApOworICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgJiAw
KTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB2YWx1ZSBeIDApOworCisgICAgICAgIEVYUEVD
VF9FUShXVEY6OkludDEyOEltcGwoLTEpLCB2YWx1ZSB8IFdURjo6SW50MTI4SW1wbCgtMSkpOwor
ICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIHZhbHVlICYgV1RGOjpJbnQxMjhJbXBsKC0xKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSh+dmFsdWUsIHZhbHVlIF4gV1RGOjpJbnQxMjhJbXBsKC0xKSk7Cisg
ICAgfQorCisgICAgLy8gc21hbGwgc2FtcGxlIG9mIHJhbmRvbWx5IGdlbmVyYXRlZCBpbnQ2NF90
J3MKKyAgICBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gcGFpcnM2NFtdIHsKKyAgICAgICAg
eyAweDdmODY3OTdmNWU5OTFhZjQsIDB4MWVlMzA0OTRmYjAwN2M5NyB9LAorICAgICAgICB7IDB4
MGIyNzgyODJiYWNmMDFhZiwgMHg1ODc4MGUwYTU3YTQ5ZTg2IH0sCisgICAgICAgIHsgMHgwNTlm
MjY2Y2NiOTNhNjY2LCAweDNkNWI3MzFiYWU5Mjg2ZjUgfSwKKyAgICAgICAgeyAweDYzYzBjNDgy
MGYxMjEwOGMsIDB4NTgxNjY3MTNjMTJlMWMzYSB9LAorICAgICAgICB7IDB4MzgxNDg4YmIyZWQy
YTY2ZSwgMHgyMjIwYTNlYjc2YTM2OThjIH0sCisgICAgICAgIHsgMHgyYTBhMGRmYjgxZTA2ZjIx
LCAweDRiNjA1ODU5MjdmNTUyM2MgfSwKKyAgICAgICAgeyAweDU1NWIxYzNhMDM2OTg1MzcsIDB4
MjU0NzhjZDE5ZDhlNTNjYiB9LAorICAgICAgICB7IDB4NDc1MGY2ZjI3ZDc3OTIyNSwgMHgxNjM5
NzU1M2M2ZmYwNWZjIH0sCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjxpbnQ2NF90
LCBpbnQ2NF90PiYgcGFpciA6IHBhaXJzNjQpIHsKKyAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVz
dGluZzo6TWVzc2FnZSgpCisgICAgICAgICAgICA8PCAicGFpciA9IHsiIDw8IHBhaXIuZmlyc3Qg
PDwgIiwgIiA8PCBwYWlyLnNlY29uZCA8PCAnfScpOworCisgICAgICAgIEVYUEVDVF9FUShXVEY6
Ok1ha2VJbnQxMjgofnBhaXIuZmlyc3QsIH5wYWlyLnNlY29uZCksCisgICAgICAgICAgICB+V1RG
OjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25kKSk7CisKKyAgICAgICAgRVhQRUNU
X0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0ICYgcGFpci5zZWNvbmQpLAorICAgICAgICAg
ICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpICYgV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vj
b25kKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJzdCB8IHBh
aXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0KSB8IFdU
Rjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQx
MjhJbXBsKHBhaXIuZmlyc3QgXiBwYWlyLnNlY29uZCksCisgICAgICAgICAgICBXVEY6OkludDEy
OEltcGwocGFpci5maXJzdCkgXiBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKworICAg
ICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgJiBwYWlyLnNlY29uZCks
CisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgJj0gV1RGOjpJbnQxMjhJ
bXBsKHBhaXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFp
ci5maXJzdCB8IHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWly
LmZpcnN0KSB8PSBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKyAgICAgICAgRVhQRUNU
X0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0IF4gcGFpci5zZWNvbmQpLAorICAgICAgICAg
ICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpIF49IFdURjo6SW50MTI4SW1wbChwYWlyLnNl
Y29uZCkpOworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEy
OChwYWlyLmZpcnN0ICYgcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50
MTI4KHBhaXIuZmlyc3QsIDApICYgV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0
IHwgcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmly
c3QsIDApIHwgV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisgICAgICAgIEVYUEVD
VF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0IF4gcGFpci5zZWNv
bmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApIF4gV1RG
OjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKAorICAg
ICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QgJiBwYWlyLnNlY29uZCwgMCksCisg
ICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCwgMCkgJj0gV1RGOjpNYWtlSW50
MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdU
Rjo6TWFrZUludDEyOChwYWlyLmZpcnN0IHwgcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAg
V1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApIHw9IFdURjo6TWFrZUludDEyOChwYWlyLnNl
Y29uZCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQx
MjgocGFpci5maXJzdCBeIHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFrZUlu
dDEyOChwYWlyLmZpcnN0LCAwKSBePSBXVEY6Ok1ha2VJbnQxMjgocGFpci5zZWNvbmQsIDApKTsK
KyAgICB9Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgQml0d2lzZVNoaWZ0VGVzdCkKK3sKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PD0gaTsgKytqKSB7CisgICAgICAgICAgICAvLyBMZWZ0IHNoaWZ0IGZyb20gai10aCBiaXQgdG8g
aS10aCBiaXQuCisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkg
PDwgImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
dWludDY0X3QgeyAxIH0gPDwgaSwgV1RGOjpJbnQxMjhJbXBsKHVpbnQ2NF90IHsgMSB9IDw8IGop
IDw8IChpIC0gaikpOworICAgICAgICAgICAgRVhQRUNUX0VRKHVpbnQ2NF90IHsgMSB9IDw8IGks
IFdURjo6SW50MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA8PD0gKGkgLSBqKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2MzsgKytpKSB7CisgICAgICAg
IGZvciAoaW50IGogPSAwOyBqIDwgNjQ7ICsraikgeworICAgICAgICAgICAgLy8gTGVmdCBzaGlm
dCBmcm9tIGotdGggYml0IHRvIChpICsgNjQpLXRoIGJpdC4KKyAgICAgICAgICAgIFNDT1BFRF9U
UkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBq
KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0g
PDwgaSwgMCksCisgICAgICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHVpbnQ2NF90IHsgMSB9
IDw8IGopIDw8IChpICsgNjQgLSBqKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtl
SW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGksIDApLAorICAgICAgICAgICAgICAgIFdURjo6SW50
MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA8PD0gKGkgKyA2NCAtIGopKTsKKyAgICAgICAg
fQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSBpOyArK2opIHsKKyAgICAgICAgICAgIC8v
IExlZnQgc2hpZnQgZnJvbSAoaiArIDY0KS10aCBiaXQgdG8gKGkgKyA2NCktdGggYml0LgorICAg
ICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBp
IDw8ICI7IGogPSAiIDw8IGopOworICAgICAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEy
OCh1aW50NjRfdCB7IDEgfSA8PCBpLCAwKSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQx
MjgodWludDY0X3QgeyAxIH0gPDwgaiwgMCkgPDwgKGkgLSBqKSk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGksIDApLAorICAgICAgICAg
ICAgICAgIFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBqLCAwKSA8PD0gKGkgLSBq
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kp
IHsKKyAgICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCA2NDsgKytqKSB7CisgICAgICAgICAgICAv
LyBSaWdodCBzaGlmdCBmcm9tIGotdGggYml0IHRvIGktdGggYml0LgorICAgICAgICAgICAgU0NP
UEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7IGogPSAi
IDw8IGopOworICAgICAgICAgICAgRVhQRUNUX0VRKHVpbnQ2NF90IHsgMSB9IDw8IGksIFdURjo6
SW50MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA+PiAoaiAtIGkpKTsKKyAgICAgICAgICAg
IEVYUEVDVF9FUSh1aW50NjRfdCB7IDEgfSA8PCBpLCBXVEY6OkludDEyOEltcGwodWludDY0X3Qg
eyAxIH0gPDwgaikgPj49IChqIC0gaSkpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgNjM7ICsraikgeworICAgICAgICAgICAgLy8gUmlnaHQgc2hpZnQgZnJvbSAoaiAr
IDY0KS10aCBiaXQgdG8gaS10aCBiaXQuCisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0
aW5nOjpNZXNzYWdlKCkgPDwgImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEodWludDY0X3QgeyAxIH0gPDwgaSwKKyAgICAgICAgICAgICAgICBXVEY6
Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwgaiwgMCkgPj4gKGogKyA2NCAtIGkpKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9FUSh1aW50NjRfdCB7IDEgfSA8PCBpLAorICAgICAgICAgICAgICAg
IFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBqLCAwKSA+Pj0gKGogKyA2NCAtIGkp
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDYzOyArK2kpIHsK
KyAgICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCA2MzsgKytqKSB7CisgICAgICAgICAgICAvLyBS
aWdodCBzaGlmdCBmcm9tIChqICsgNjQpLXRoIGJpdCB0byAoaSArIDY0KS10aCBiaXQuCisgICAg
ICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwgImkgPSAiIDw8IGkg
PDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4
KHVpbnQ2NF90IHsgMSB9IDw8IGksIDApLAorICAgICAgICAgICAgICAgIFdURjo6TWFrZUludDEy
OCh1aW50NjRfdCB7IDEgfSA8PCBqLCAwKSA+PiAoaiAtIGkpKTsKKyAgICAgICAgICAgIEVYUEVD
VF9FUShXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwgaSwgMCksCisgICAgICAgICAg
ICAgICAgV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGosIDApID4+PSAoaiAtIGkp
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworVEVTVChXVEZfSW50MTI4LCBOdW1lcmljTGltaXRz
VGVzdCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6aXNfc3BlY2lhbGl6ZWQsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6bnVt
ZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfc2lnbmVkLCAiIik7CisgICAgc3RhdGlj
X2Fzc2VydChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX2ludGVnZXIs
ICIiKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PigxMjcgKiBzdGQ6OmxvZzEwKDIp
KSwKKyAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjpkaWdpdHMx
MCk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4TWluKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8
V1RGOjpJbnQxMjhJbXBsPjo6bWluKCkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOE1pbigp
LCBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Omxvd2VzdCgpKTsKKyAgICBF
WFBFQ1RfRVEoV1RGOjpJbnQxMjhNYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OkludDEy
OEltcGw+OjptYXgoKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="commit-queue"
          id="466523"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442109</attachid>
            <date>2021-10-21 20:42:24 -0700</date>
            <delta_ts>2021-10-21 20:44:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232129-20211021204223.patch</filename>
            <type>text/plain</type>
            <size>136252</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYzMmI5ODlkM2IzZmVlZDQ5ZTA1MjMx
Yzk4MjIyNDk0ZjU2NDcyMjEuLmMxZTVlNjM3YjIzZTc2Yzk1ZWNlYzhjN2M4NTU2M2ZkMmQ5MmFj
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTY3IEBACisyMDIxLTEwLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gUmVwbGFjZSBjdXJyZW50IExMVk0gZmxh
bmcncyBJbnQxMjggd2l0aCBhYnNlaWwtY3BwJ3MgSW50MTI4CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIxMjkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBmb3VuZCB0aGF0IGZsYW5nJ3Mgc2lnbmVk
IEludDEyOCBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdGVzdGVkLAorICAgICAgICBhbmQgaXQgaGFz
IHNldmVyYWwgaXNzdWVzIGFib3V0IHNpZ24gZXh0ZW5zaW9uIGFuZCBkaXZpc2lvbi4KKworICAg
ICAgICBJbnN0ZWFkLCB3ZSBpbXBvcnQgYWJzZWlsLWNwcFsxXSdzIGludDEyOCBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgYWJzZWlsLWNwcCBpcyBtb3JlIGJhdHRsZS10ZXN0ZWQsIGFuZCBhYnNl
aWwgaXMgYWxyZWFkeSB1c2VkCisgICAgICAgIGluIFdlYktpdCB0b28gKEFOR0xFIGFuZCBsaWJ3
ZWJydGMgdXNlIGFic2VpbC1jcHAgYXMgdGhlaXIgdXRpbGl0eQorICAgICAgICBsaWJyYXJ5KS4K
KworICAgICAgICBGb3IgQXBwbGUgcmVhZGVycywgYWJzZWlsLWNwcCBmb3IgV2ViS2l0IGlzIGFw
cHJvdmVkIGluIE9TUy0zNTEuCisKKyAgICAgICAgWzFdOiBodHRwczovL2dpdGh1Yi5jb20vYWJz
ZWlsL2Fic2VpbC1jcHAKKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvSW50MTI4LmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbCk6CisgICAg
ICAgIChXVEY6Om9wZXJhdG9yLyk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yJSk6CisgICAgICAg
IChXVEY6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KToKKyAgICAgICAgKiB3dGYvSW50MTI4Lmg6CisgICAgICAgIChXVEY6OlVJbnQxMjhNYXgpOgor
ICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluKToKKyAg
ICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omxvd2VzdCk6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXgpOgorICAg
ICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6ZXBzaWxvbik6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpyb3VuZF9lcnJv
cik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjppbmZp
bml0eSk6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpx
dWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBs
Pjo6c2lnbmFsaW5nX05hTik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjpkZW5vcm1fbWluKToKKyAgICAgICAgKFdURjo6SW50MTI4TWF4KToKKyAgICAg
ICAgKFdURjo6SW50MTI4TWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6bWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bG93ZXN0KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bWF4KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJ
bXBsPjo6ZXBzaWxvbik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4
SW1wbD46OnJvdW5kX2Vycm9yKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6aW5maW5pdHkpOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjpxdWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+OjpzaWduYWxpbmdfTmFOKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGVub3JtX21pbik6CisgICAgICAgIChXVEY6Ok1ha2VV
SW50MTI4KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcjw8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcis9
KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RG
OjpVSW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvci89KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yJT0pOgorICAg
ICAgICAoV1RGOjpVSW50MTI4TG93NjQpOgorICAgICAgICAoV1RGOjpVSW50MTI4SGlnaDY0KToK
KyAgICAgICAgKFdURjo6VUludDEyOEltcGw6OlVJbnQxMjhJbXBsKToKKyAgICAgICAgKFdURjo6
VUludDEyOEltcGw6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4
SW1wbDo6b3BlcmF0b3IgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBjaGFyIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6
Om9wZXJhdG9yIGNoYXIxNl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9w
ZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvciBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBs
OjpvcGVyYXRvciBpbnQgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0
b3IgdW5zaWduZWQgaW50IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBs
b25nIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGZsb2F0IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6b3Bl
cmF0b3I+KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciEpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcn4p
OgorICAgICAgICAoV1RGOjpvcGVyYXRvcnwpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciYpOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcl4pOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3Bl
cmF0b3J8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciY9KToKKyAgICAg
ICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yXj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXVEY6OmludDEyOF9p
bnRlcm5hbDo6QWRkUmVzdWx0KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTdWJz
dHJ1Y3RSZXN1bHQpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpV
SW50MTI4SW1wbDo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVy
YXRvci0tKToKKyAgICAgICAgKFdURjo6TWFrZUludDEyOCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKz0p
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yLz0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciU9KToKKyAgICAgICAg
KFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6
Om9wZXJhdG9yJj0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl49KToKKyAg
ICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I8PD0pOgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6Qml0
Q2FzdFRvU2lnbmVkKToKKyAgICAgICAgKFdURjo6SW50MTI4TG93NjQpOgorICAgICAgICAoV1RG
OjpJbnQxMjhIaWdoNjQpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKToK
KyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6Oklu
dDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMTZfdCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1w
bDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3Igc2hvcnQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJ
bXBsOjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIHVuc2lnbmVkIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciB1
bnNpZ25lZCBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3Ig
bG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0
b3IgZmxvYXQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBkb3Vi
bGUgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJs
ZSBjb25zdCk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6U2lnbmVkQWRkUmVzdWx0
KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTaWduZWRTdWJzdHJ1Y3RSZXN1bHQp
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3ItLSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yKyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9y
fiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yISBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIHN0ZDo6dWlu
dDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRv
ciBzdGQ6OmludDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBs
OjpoaWdoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6bG93IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3ImIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgfCAgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl4gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcjw8IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I+PiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yJSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPD0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6SW50MTI4SW1wbDo6b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OkludDEyOEltcGw6Om9wZXJhdG9yPj0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvcj4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpsZWFkaW5nWmVyb2VzIGNvbnN0KTogRGVsZXRlZC4KKwogMjAyMS0xMC0yMSAgQWRp
dHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBFbmFi
bGUgYWNjZW50LWNvbG9yIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDNlYzAzOTFmN2M3MzdhM2FmMTYyNDczNmJiODUxMmE1MmQ3YjFlNjUu
LmU4MTAwMGRkMGViMWQxMzg4YjdiZmMwZWEyYmQyZGVjYzU3MDk0OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc5LDYgKzE3OSw3IEBACiAJCUUzMTQ5
QTM4MjI4QkI0MkMwMEJGQTZDNyAvKiBSZWZDb3VudGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTAyMENDNjFFQjAwQTAzRENE
IC8qIFJlZkNvdW50ZWRBcnJheS5jcHAgKi87IH07CiAJCUUzMTQ5QTM5MjI4QkI0MzUwMEJGQTZD
NyAvKiBWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5NUI2MzQyMENCNTNDMTAwNDc5NjM1IC8qIFZlY3Rvci5jcHAgKi87IH07CiAJCUUz
MTQ5QTNCMjI4QkRDQUMwMEJGQTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMTQ5QTNBMjI4QkRDQUIwMEJG
QTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAqLzsgfTsKKwkJRTMzNjY3NEEyNzIyNTUxMTAw
MjU5MTIyIC8qIEludDEyOC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzM2Njc0OTI3MjI1NTA5MDAyNTkxMjIgLyogSW50MTI4LmNwcCAqLzsgfTsK
IAkJRTM3RTk2NTQyNzAyQUQwQjAwRTFDMzZBIC8qIEFwcHJveGltYXRlVGltZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzdFOTY1MjI3MDJBRDA3
MDBFMUMzNkEgLyogQXBwcm94aW1hdGVUaW1lLmNwcCAqLzsgfTsKIAkJRTM4ODg4NkYyMEM5MDk1
MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM4ODg4NkQyMEM5MDk1MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wu
Y3BwICovOyB9OwogCQlFMzhDNDEyODFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzhDNDEyNjFFQjRF
MDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi87IH07CkBAIC03NTQsNiArNzU1LDcgQEAKIAkJ
RTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RI
YXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAyRDAwMzRBMDkyIC8qIE5ha2VkUmVmLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ha2VkUmVmLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW50MTI4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJsZUxhbWJkYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNENEMEQwMjI4MTBBMDIwMDIwRDI5OSAvKiBQYWNrZWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTI1LDYgKzExMjcsNyBAQAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxp
bmVBU00uaCAqLywKIAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmgg
Ki8sCiAJCQkJNTE4MkMyMkMxRjJCQzdFNjAwNTlCQTdDIC8qIEluc3RhbmNlQ291bnRlZC5oICov
LAorCQkJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3BwICovLAogCQkJCUY2
RDY3RDMyMjZGOTAxNDIwMDZFMDM0OSAvKiBJbnQxMjguaCAqLywKIAkJCQkzM0ZENDgxMTI2NUNC
MzgwMDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLywKIAkJCQkwRjdFQjg1QjFGQThG
RjQxMDBGMUFCQ0IgLyogSXNvTWFsbG9jLmggKi8sCkBAIC0xNzczLDYgKzE3NzYsNyBAQAogCQkJ
CUE4QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTNCNUI0NEUyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51bWJlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFM0JFMDlBNzI0QTU4NTREMDA5REYyQjQgLyogSUNVSGVscGVycy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlFMzM2Njc0QTI3MjI1NTExMDAyNTkxMjIgLyogSW50MTI4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdBMDUwOTNGMUZCOURDQzUwMEIzM0ZCOCAvKiBKU09OVmFsdWVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzQTMyQkM0MUZDODMwRTIwMDdEN0U3NiAvKiBKU1Zh
bHVlTWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQkNGQzQwMUY2MUQxMzAwMEM5MjIy
QyAvKiBMYW5ndWFnZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NGUzOGFhYTkzMGQ0MTA3MjdlZDM3NDliMmM3NDEyMjM4ZDZhY2FiNS4uYjRmNDczODlkODYwMGI0
ODFkNjQ1Y2UzMWI2N2E3MTQ3YzY3MDI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTQyNSw2
ICs0MjUsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBHcmVnb3JpYW5EYXRlVGltZS5jcHAKICAg
ICBIYXNoVGFibGUuY3BwCiAgICAgSGV4TnVtYmVyLmNwcAorICAgIEludDEyOC5oCiAgICAgSlNP
TlZhbHVlcy5jcHAKICAgICBKU1ZhbHVlTWFsbG9jLmNwcAogICAgIExhbmd1YWdlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW50MTI4LmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ludDEy
OC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjQyOTdiOTUwMTU3MWExYzE2YTY3MWFhYzc5NjI5YzgwZmFjNjk1
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ludDEyOC5jcHAKQEAgLTAsMCAr
MSwzNzEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBBYnNlaWwgQXV0aG9ycy4KKy8vCisvLyBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorLy8KKy8vICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
Ky8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0ludDEyOC5oPgorCisjaW5jbHVkZSA8c3Rk
ZGVmLmg+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxpb21hbmlwPgorI2luY2x1ZGUg
PG9zdHJlYW0+ICAvLyBOT0xJTlQocmVhZGFiaWxpdHkvc3RyZWFtcykKKyNpbmNsdWRlIDxzc3Ry
ZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIHsKKwor
Ly8gUmV0dXJucyB0aGUgMC1iYXNlZCBwb3NpdGlvbiBvZiB0aGUgbGFzdCBzZXQgYml0IChpLmUu
LCBtb3N0IHNpZ25pZmljYW50IGJpdCkKKy8vIGluIHRoZSBnaXZlbiBVSW50MTI4SW1wbC4gVGhl
IGFyZ3VtZW50IGlzIG5vdCAwLgorLy8KKy8vIEZvciBleGFtcGxlOgorLy8gICBHaXZlbjogNSAo
ZGVjaW1hbCkgPT0gMTAxIChiaW5hcnkpCisvLyAgIFJldHVybnM6IDIKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIGludCBGbHMxMjgoVUludDEyOEltcGwgbikgeworICBpZiAodWludDY0X3QgaGkgPSBV
SW50MTI4SGlnaDY0KG4pKSB7CisgICAgQVNTRVJUKGhpICE9IDApOworICAgIHJldHVybiAxMjcg
LSBjbHooaGkpOworICB9CisgIGNvbnN0IHVpbnQ2NF90IGxvdyA9IFVJbnQxMjhMb3c2NChuKTsK
KyAgQVNTRVJUKGxvdyAhPSAwKTsKKyAgcmV0dXJuIDYzIC0gY2x6KGxvdyk7Cit9CisKKy8vIExv
bmcgZGl2aXNpb24vbW9kdWxvIGZvciBVSW50MTI4SW1wbCBpbXBsZW1lbnRlZCB1c2luZyB0aGUg
c2hpZnQtc3VidHJhY3QKKy8vIGRpdmlzaW9uIGFsZ29yaXRobSBhZGFwdGVkIGZyb206CisvLyBo
dHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81Mzg2Mzc3L2RpdmlzaW9uLXdpdGhv
dXQtdXNpbmcKK3N0YXRpYyBpbmxpbmUgdm9pZCBEaXZNb2RJbXBsKFVJbnQxMjhJbXBsIGRpdmlk
ZW5kLCBVSW50MTI4SW1wbCBkaXZpc29yLCBVSW50MTI4SW1wbCogcXVvdGllbnRfcmV0LCBVSW50
MTI4SW1wbCogcmVtYWluZGVyX3JldCkgeworICBhc3NlcnQoZGl2aXNvciAhPSAwKTsKKworICBp
ZiAoZGl2aXNvciA+IGRpdmlkZW5kKSB7CisgICAgKnF1b3RpZW50X3JldCA9IDA7CisgICAgKnJl
bWFpbmRlcl9yZXQgPSBkaXZpZGVuZDsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoZGl2aXNv
ciA9PSBkaXZpZGVuZCkgeworICAgICpxdW90aWVudF9yZXQgPSAxOworICAgICpyZW1haW5kZXJf
cmV0ID0gMDsKKyAgICByZXR1cm47CisgIH0KKworICBVSW50MTI4SW1wbCBkZW5vbWluYXRvciA9
IGRpdmlzb3I7CisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKworICAvLyBMZWZ0IGFsaWdu
cyB0aGUgTVNCIG9mIHRoZSBkZW5vbWluYXRvciBhbmQgdGhlIGRpdmlkZW5kLgorICBjb25zdCBp
bnQgc2hpZnQgPSBGbHMxMjgoZGl2aWRlbmQpIC0gRmxzMTI4KGRlbm9taW5hdG9yKTsKKyAgZGVu
b21pbmF0b3IgPDw9IHNoaWZ0OworCisgIC8vIFVzZXMgc2hpZnQtc3VidHJhY3QgYWxnb3JpdGht
IHRvIGRpdmlkZSBkaXZpZGVuZCBieSBkZW5vbWluYXRvci4gVGhlCisgIC8vIHJlbWFpbmRlciB3
aWxsIGJlIGxlZnQgaW4gZGl2aWRlbmQuCisgIGZvciAoaW50IGkgPSAwOyBpIDw9IHNoaWZ0OyAr
K2kpIHsKKyAgICBxdW90aWVudCA8PD0gMTsKKyAgICBpZiAoZGl2aWRlbmQgPj0gZGVub21pbmF0
b3IpIHsKKyAgICAgIGRpdmlkZW5kIC09IGRlbm9taW5hdG9yOworICAgICAgcXVvdGllbnQgfD0g
MTsKKyAgICB9CisgICAgZGVub21pbmF0b3IgPj49IDE7CisgIH0KKworICAqcXVvdGllbnRfcmV0
ID0gcXVvdGllbnQ7CisgICpyZW1haW5kZXJfcmV0ID0gZGl2aWRlbmQ7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorc3RhdGljIFVJbnQxMjhJbXBsIE1ha2VVSW50MTI4RnJvbUZsb2F0KFQg
dikgeworICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlLCAi
Iik7CisKKyAgLy8gUm91bmRpbmcgYmVoYXZpb3IgaXMgdG93YXJkcyB6ZXJvLCBzYW1lIGFzIGZv
ciBidWlsdC1pbiB0eXBlcy4KKworICAvLyBVbmRlZmluZWQgYmVoYXZpb3IgaWYgdiBpcyBOYU4g
b3IgY2Fubm90IGZpdCBpbnRvIFVJbnQxMjhJbXBsLgorICBhc3NlcnQoc3RkOjppc2Zpbml0ZSh2
KSAmJiB2ID4gLTEgJiYKKyAgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXhfZXhw
b25lbnQgPD0gMTI4IHx8CisgICAgICAgICAgdiA8IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VD4o
MSksIDEyOCkpKTsKKworICBpZiAodiA+PSBzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KDEpLCA2
NCkpIHsKKyAgICB1aW50NjRfdCBoaSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6OmxkZXhw
KHYsIC02NCkpOworICAgIHVpbnQ2NF90IGxvID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYgLSBz
dGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KGhpKSwgNjQpKTsKKyAgICByZXR1cm4gTWFrZVVJbnQx
MjgoaGksIGxvKTsKKyAgfQorCisgIHJldHVybiBNYWtlVUludDEyOCgwLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4odikpOworfQorCisjaWYgQ09NUElMRVIoQ0xBTkcpICYmICFkZWZpbmVkKF9fU1NF
M19fKQorLy8gV29ya2Fyb3VuZCBmb3IgY2xhbmcgYnVnOiBodHRwczovL2J1Z3MubGx2bS5vcmcv
c2hvd19idWcuY2dpP2lkPTM4Mjg5CisvLyBDYXN0aW5nIGZyb20gbG9uZyBkb3VibGUgdG8gdWlu
dDY0X3QgaXMgbWlzY29tcGlsZWQgYW5kIGRyb3BzIGJpdHMuCisvLyBJdCBpcyBtb3JlIHdvcmss
IHNvIG9ubHkgdXNlIHdoZW4gd2UgbmVlZCB0aGUgd29ya2Fyb3VuZC4KK3N0YXRpYyBVSW50MTI4
SW1wbCBNYWtlVUludDEyOEZyb21GbG9hdChsb25nIGRvdWJsZSB2KSB7CisgIC8vIEdvIDUwIGJp
dHMgYXQgYSB0aW1lLCB0aGF0IGZpdHMgaW4gYSBkb3VibGUKKyAgc3RhdGljX2Fzc2VydChzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmRpZ2l0cyA+PSA1MCwgIiIpOworICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMgPD0gMTUwLCAiIik7
CisgIC8vIFVuZGVmaW5lZCBiZWhhdmlvciBpZiB2IGlzIG5vdCBmaW5pdGUgb3IgY2Fubm90IGZp
dCBpbnRvIFVJbnQxMjhJbXBsLgorICBhc3NlcnQoc3RkOjppc2Zpbml0ZSh2KSAmJiB2ID4gLTEg
JiYgdiA8IHN0ZDo6bGRleHAoMS4wTCwgMTI4KSk7CisKKyAgdiA9IHN0ZDo6bGRleHAodiwgLTEw
MCk7CisgIHVpbnQ2NF90IHcwID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjp0cnVuYyh2KSkpOworICB2ID0gc3RkOjpsZGV4cCh2IC0gc3RhdGljX2Nhc3Q8
ZG91YmxlPih3MCksIDUwKTsKKyAgdWludDY0X3QgdzEgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6OnRydW5jKHYpKSk7CisgIHYgPSBzdGQ6OmxkZXhwKHYg
LSBzdGF0aWNfY2FzdDxkb3VibGU+KHcxKSwgNTApOworICB1aW50NjRfdCB3MiA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6dHJ1bmModikpKTsKKyAgcmV0
dXJuIChzdGF0aWNfY2FzdDxVSW50MTI4SW1wbD4odzApIDw8IDEwMCkgfCAoc3RhdGljX2Nhc3Q8
VUludDEyOEltcGw+KHcxKSA8PCA1MCkgfAorICAgICAgICAgc3RhdGljX2Nhc3Q8VUludDEyOElt
cGw+KHcyKTsKK30KKyNlbmRpZiAgLy8gQ09NUElMRVIoQ0xBTkcpICYmICFfX1NTRTNfXworfSAg
Ly8gbmFtZXNwYWNlCisKK1VJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChmbG9hdCB2KSA6IFVJbnQx
MjhJbXBsKE1ha2VVSW50MTI4RnJvbUZsb2F0KHYpKSB7fQorVUludDEyOEltcGw6OlVJbnQxMjhJ
bXBsKGRvdWJsZSB2KSA6IFVJbnQxMjhJbXBsKE1ha2VVSW50MTI4RnJvbUZsb2F0KHYpKSB7fQor
VUludDEyOEltcGw6OlVJbnQxMjhJbXBsKGxvbmcgZG91YmxlIHYpIDogVUludDEyOEltcGwoTWFr
ZVVJbnQxMjhGcm9tRmxvYXQodikpIHt9CisKK1VJbnQxMjhJbXBsIG9wZXJhdG9yLyhVSW50MTI4
SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworICBVSW50MTI4SW1wbCBxdW90aWVudCA9IDA7
CisgIFVJbnQxMjhJbXBsIHJlbWFpbmRlciA9IDA7CisgIERpdk1vZEltcGwobGhzLCByaHMsICZx
dW90aWVudCwgJnJlbWFpbmRlcik7CisgIHJldHVybiBxdW90aWVudDsKK30KKworVUludDEyOElt
cGwgb3BlcmF0b3IlKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIFVJbnQx
MjhJbXBsIHF1b3RpZW50ID0gMDsKKyAgVUludDEyOEltcGwgcmVtYWluZGVyID0gMDsKKyAgRGl2
TW9kSW1wbChsaHMsIHJocywgJnF1b3RpZW50LCAmcmVtYWluZGVyKTsKKyAgcmV0dXJuIHJlbWFp
bmRlcjsKK30KKworbmFtZXNwYWNlIHsKKworc3RhdGljIHN0ZDo6c3RyaW5nIFVJbnQxMjhUb0Zv
cm1hdHRlZFN0cmluZyhVSW50MTI4SW1wbCB2LCBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyBmbGFn
cykgeworICAvLyBTZWxlY3QgYSBkaXZpc29yIHdoaWNoIGlzIHRoZSBsYXJnZXN0IHBvd2VyIG9m
IHRoZSBiYXNlIDwgMl42NC4KKyAgVUludDEyOEltcGwgZGl2OworICBpbnQgZGl2X2Jhc2VfbG9n
OworICBzd2l0Y2ggKGZsYWdzICYgc3RkOjppb3M6OmJhc2VmaWVsZCkgeworICAgIGNhc2Ugc3Rk
Ojppb3M6OmhleDoKKyAgICAgIGRpdiA9IDB4MTAwMDAwMDAwMDAwMDAwMDsgIC8vIDE2XjE1Cisg
ICAgICBkaXZfYmFzZV9sb2cgPSAxNTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ugc3RkOjppb3M6
Om9jdDoKKyAgICAgIGRpdiA9IDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwOyAgLy8gOF4yMQorICAg
ICAgZGl2X2Jhc2VfbG9nID0gMjE7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgLy8gc3Rk
Ojppb3M6OmRlYworICAgICAgZGl2ID0gMTAwMDAwMDAwMDAwMDAwMDAwMDB1OyAgLy8gMTBeMTkK
KyAgICAgIGRpdl9iYXNlX2xvZyA9IDE5OworICAgICAgYnJlYWs7CisgIH0KKworICAvLyBOb3cg
cGllY2UgdG9nZXRoZXIgdGhlIFVJbnQxMjhJbXBsIHJlcHJlc2VudGF0aW9uIGZyb20gdGhyZWUg
Y2h1bmtzIG9mIHRoZQorICAvLyBvcmlnaW5hbCB2YWx1ZSwgZWFjaCBsZXNzIHRoYW4gImRpdiIg
YW5kIHRoZXJlZm9yZSByZXByZXNlbnRhYmxlIGFzIGEKKyAgLy8gdWludDY0X3QuCisgIHN0ZDo6
b3N0cmluZ3N0cmVhbSBvczsKKyAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgY29weV9tYXNrID0K
KyAgICAgIHN0ZDo6aW9zOjpiYXNlZmllbGQgfCBzdGQ6Omlvczo6c2hvd2Jhc2UgfCBzdGQ6Omlv
czo6dXBwZXJjYXNlOworICBvcy5zZXRmKGZsYWdzICYgY29weV9tYXNrLCBjb3B5X21hc2spOwor
ICBVSW50MTI4SW1wbCBoaWdoID0gdjsKKyAgVUludDEyOEltcGwgbG93OworICBEaXZNb2RJbXBs
KGhpZ2gsIGRpdiwgJmhpZ2gsICZsb3cpOworICBVSW50MTI4SW1wbCBtaWQ7CisgIERpdk1vZElt
cGwoaGlnaCwgZGl2LCAmaGlnaCwgJm1pZCk7CisgIGlmIChVSW50MTI4TG93NjQoaGlnaCkgIT0g
MCkgeworICAgIG9zIDw8IFVJbnQxMjhMb3c2NChoaWdoKTsKKyAgICBvcyA8PCBzdGQ6Om5vc2hv
d2Jhc2UgPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KGRpdl9iYXNlX2xvZyk7Cisg
ICAgb3MgPDwgVUludDEyOExvdzY0KG1pZCk7CisgICAgb3MgPDwgc3RkOjpzZXR3KGRpdl9iYXNl
X2xvZyk7CisgIH0gZWxzZSBpZiAoVUludDEyOExvdzY0KG1pZCkgIT0gMCkgeworICAgIG9zIDw8
IFVJbnQxMjhMb3c2NChtaWQpOworICAgIG9zIDw8IHN0ZDo6bm9zaG93YmFzZSA8PCBzdGQ6OnNl
dGZpbGwoJzAnKSA8PCBzdGQ6OnNldHcoZGl2X2Jhc2VfbG9nKTsKKyAgfQorICBvcyA8PCBVSW50
MTI4TG93NjQobG93KTsKKyAgcmV0dXJuIG9zLnN0cigpOworfQorCit9ICAvLyBuYW1lc3BhY2UK
Kworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIFVJbnQxMjhJbXBs
IHYpIHsKKyAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgZmxhZ3MgPSBvcy5mbGFncygpOworICBz
dGQ6OnN0cmluZyByZXAgPSBVSW50MTI4VG9Gb3JtYXR0ZWRTdHJpbmcodiwgZmxhZ3MpOworCisg
IC8vIEFkZCB0aGUgcmVxdWlzaXRlIHBhZGRpbmcuCisgIHN0ZDo6c3RyZWFtc2l6ZSB3aWR0aCA9
IG9zLndpZHRoKDApOworICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pih3aWR0aCkgPiByZXAuc2l6
ZSgpKSB7CisgICAgc3RkOjppb3M6OmZtdGZsYWdzIGFkanVzdGZpZWxkID0gZmxhZ3MgJiBzdGQ6
Omlvczo6YWRqdXN0ZmllbGQ7CisgICAgaWYgKGFkanVzdGZpZWxkID09IHN0ZDo6aW9zOjpsZWZ0
KSB7CisgICAgICByZXAuYXBwZW5kKHdpZHRoIC0gcmVwLnNpemUoKSwgb3MuZmlsbCgpKTsKKyAg
ICB9IGVsc2UgaWYgKGFkanVzdGZpZWxkID09IHN0ZDo6aW9zOjppbnRlcm5hbCAmJgorICAgICAg
ICAgICAgICAgKGZsYWdzICYgc3RkOjppb3M6OnNob3diYXNlKSAmJgorICAgICAgICAgICAgICAg
KGZsYWdzICYgc3RkOjppb3M6OmJhc2VmaWVsZCkgPT0gc3RkOjppb3M6OmhleCAmJiB2ICE9IDAp
IHsKKyAgICAgIHJlcC5pbnNlcnQoMiwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICByZXAuaW5zZXJ0KDAsIHdpZHRoIC0gcmVwLnNpemUoKSwgb3Mu
ZmlsbCgpKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gb3MgPDwgcmVwOworfQorCituYW1lc3Bh
Y2UgeworCitzdGF0aWMgVUludDEyOEltcGwgVW5zaWduZWRBYnNvbHV0ZVZhbHVlKEludDEyOElt
cGwgdikgeworICAvLyBDYXN0IHRvIFVJbnQxMjhJbXBsIGJlZm9yZSBwb3NzaWJseSBuZWdhdGlu
ZyBiZWNhdXNlIC1JbnQxMjhNaW4oKSBpcyB1bmRlZmluZWQuCisgIHJldHVybiBJbnQxMjhIaWdo
NjQodikgPCAwID8gLVVJbnQxMjhJbXBsKHYpIDogVUludDEyOEltcGwodik7Cit9CisKK30gIC8v
IG5hbWVzcGFjZQorCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRp
YyBJbnQxMjhJbXBsIE1ha2VJbnQxMjhGcm9tRmxvYXQoVCB2KSB7CisgIC8vIENvbnZlcnNpb24g
d2hlbiB2IGlzIE5hTiBvciBjYW5ub3QgZml0IGludG8gSW50MTI4SW1wbCB3b3VsZCBiZSB1bmRl
ZmluZWQKKyAgLy8gYmVoYXZpb3IgaWYgdXNpbmcgYW4gaW50cmluc2ljIDEyOC1iaXQgaW50ZWdl
ci4KKyAgYXNzZXJ0KHN0ZDo6aXNmaW5pdGUodikgJiYgKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1heF9leHBvbmVudCA8PSAxMjcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
ID49IC1zdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KDEpLCAxMjcpICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdiA8IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VD4oMSksIDEyNykp
KSk7CisKKyAgLy8gV2UgbXVzdCBjb252ZXJ0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBhbmQgdGhlbiBu
ZWdhdGUgYXMgbmVlZGVkLCBiZWNhdXNlCisgIC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzIGFyZSB0
eXBpY2FsbHkgc2lnbi1tYWduaXR1ZGUuIE90aGVyd2lzZSwgdGhlCisgIC8vIGRpZmZlcmVuY2Ug
YmV0d2VlbiB0aGUgaGlnaCBhbmQgbG93IDY0IGJpdHMgd2hlbiBpbnRlcnByZXRlZCBhcyB0d28n
cworICAvLyBjb21wbGVtZW50IG92ZXJ3aGVsbXMgdGhlIHByZWNpc2lvbiBvZiB0aGUgbWFudGlz
c2EuCisgIFVJbnQxMjhJbXBsIHJlc3VsdCA9IHYgPCAwID8gLU1ha2VVSW50MTI4RnJvbUZsb2F0
KC12KSA6IE1ha2VVSW50MTI4RnJvbUZsb2F0KHYpOworICByZXR1cm4gTWFrZUludDEyOChpbnQx
MjhfaW50ZXJuYWw6OkJpdENhc3RUb1NpZ25lZChVSW50MTI4SGlnaDY0KHJlc3VsdCkpLAorICAg
ICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQocmVzdWx0KSk7Cit9CisKK30gIC8vIG5hbWVz
cGFjZQorCitJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGZsb2F0IHYpIDogSW50MTI4SW1wbChNYWtl
SW50MTI4RnJvbUZsb2F0KHYpKSB7fQorSW50MTI4SW1wbDo6SW50MTI4SW1wbChkb3VibGUgdikg
OiBJbnQxMjhJbXBsKE1ha2VJbnQxMjhGcm9tRmxvYXQodikpIHt9CitJbnQxMjhJbXBsOjpJbnQx
MjhJbXBsKGxvbmcgZG91YmxlIHYpIDogSW50MTI4SW1wbChNYWtlSW50MTI4RnJvbUZsb2F0KHYp
KSB7fQorCitJbnQxMjhJbXBsIG9wZXJhdG9yLyhJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCBy
aHMpIHsKKyAgYXNzZXJ0KGxocyAhPSBJbnQxMjhNaW4oKSB8fCByaHMgIT0gLTEpOyAgLy8gVUIg
b24gdHdvJ3MgY29tcGxlbWVudC4KKworICBVSW50MTI4SW1wbCBxdW90aWVudCA9IDA7CisgIFVJ
bnQxMjhJbXBsIHJlbWFpbmRlciA9IDA7CisgIERpdk1vZEltcGwoVW5zaWduZWRBYnNvbHV0ZVZh
bHVlKGxocyksIFVuc2lnbmVkQWJzb2x1dGVWYWx1ZShyaHMpLAorICAgICAgICAgICAgICZxdW90
aWVudCwgJnJlbWFpbmRlcik7CisgIGlmICgoSW50MTI4SGlnaDY0KGxocykgPCAwKSAhPSAoSW50
MTI4SGlnaDY0KHJocykgPCAwKSkgcXVvdGllbnQgPSAtcXVvdGllbnQ7CisgIHJldHVybiBNYWtl
SW50MTI4KGludDEyOF9pbnRlcm5hbDo6Qml0Q2FzdFRvU2lnbmVkKFVJbnQxMjhIaWdoNjQocXVv
dGllbnQpKSwKKyAgICAgICAgICAgICAgICAgICAgVUludDEyOExvdzY0KHF1b3RpZW50KSk7Cit9
CisKK0ludDEyOEltcGwgb3BlcmF0b3IlKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eworICBhc3NlcnQobGhzICE9IEludDEyOE1pbigpIHx8IHJocyAhPSAtMSk7ICAvLyBVQiBvbiB0
d28ncyBjb21wbGVtZW50LgorCisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKyAgVUludDEy
OEltcGwgcmVtYWluZGVyID0gMDsKKyAgRGl2TW9kSW1wbChVbnNpZ25lZEFic29sdXRlVmFsdWUo
bGhzKSwgVW5zaWduZWRBYnNvbHV0ZVZhbHVlKHJocyksCisgICAgICAgICAgICAgJnF1b3RpZW50
LCAmcmVtYWluZGVyKTsKKyAgaWYgKEludDEyOEhpZ2g2NChsaHMpIDwgMCkgcmVtYWluZGVyID0g
LXJlbWFpbmRlcjsKKyAgcmV0dXJuIE1ha2VJbnQxMjgoaW50MTI4X2ludGVybmFsOjpCaXRDYXN0
VG9TaWduZWQoVUludDEyOEhpZ2g2NChyZW1haW5kZXIpKSwKKyAgICAgICAgICAgICAgICAgICAg
VUludDEyOExvdzY0KHJlbWFpbmRlcikpOworfQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwo
c3RkOjpvc3RyZWFtJiBvcywgSW50MTI4SW1wbCB2KSB7CisgIHN0ZDo6aW9zX2Jhc2U6OmZtdGZs
YWdzIGZsYWdzID0gb3MuZmxhZ3MoKTsKKyAgc3RkOjpzdHJpbmcgcmVwOworCisgIC8vIEFkZCB0
aGUgc2lnbiBpZiBuZWVkZWQuCisgIGJvb2wgcHJpbnRfYXNfZGVjaW1hbCA9CisgICAgICAoZmxh
Z3MgJiBzdGQ6Omlvczo6YmFzZWZpZWxkKSA9PSBzdGQ6Omlvczo6ZGVjIHx8CisgICAgICAoZmxh
Z3MgJiBzdGQ6Omlvczo6YmFzZWZpZWxkKSA9PSBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncygpOwor
ICBpZiAocHJpbnRfYXNfZGVjaW1hbCkgeworICAgIGlmIChJbnQxMjhIaWdoNjQodikgPCAwKSB7
CisgICAgICByZXAgPSAiLSI7CisgICAgfSBlbHNlIGlmIChmbGFncyAmIHN0ZDo6aW9zOjpzaG93
cG9zKSB7CisgICAgICByZXAgPSAiKyI7CisgICAgfQorICB9CisKKyAgcmVwLmFwcGVuZChVSW50
MTI4VG9Gb3JtYXR0ZWRTdHJpbmcoCisgICAgICBwcmludF9hc19kZWNpbWFsID8gVW5zaWduZWRB
YnNvbHV0ZVZhbHVlKHYpIDogVUludDEyOEltcGwodiksIG9zLmZsYWdzKCkpKTsKKworICAvLyBB
ZGQgdGhlIHJlcXVpc2l0ZSBwYWRkaW5nLgorICBzdGQ6OnN0cmVhbXNpemUgd2lkdGggPSBvcy53
aWR0aCgwKTsKKyAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpID4gcmVwLnNpemUoKSkg
eworICAgIHN3aXRjaCAoZmxhZ3MgJiBzdGQ6Omlvczo6YWRqdXN0ZmllbGQpIHsKKyAgICAgIGNh
c2Ugc3RkOjppb3M6OmxlZnQ6CisgICAgICAgIHJlcC5hcHBlbmQod2lkdGggLSByZXAuc2l6ZSgp
LCBvcy5maWxsKCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugc3RkOjppb3M6OmludGVy
bmFsOgorICAgICAgICBpZiAocHJpbnRfYXNfZGVjaW1hbCAmJiAocmVwWzBdID09ICcrJyB8fCBy
ZXBbMF0gPT0gJy0nKSkgeworICAgICAgICAgIHJlcC5pbnNlcnQoMSwgd2lkdGggLSByZXAuc2l6
ZSgpLCBvcy5maWxsKCkpOworICAgICAgICB9IGVsc2UgaWYgKChmbGFncyAmIHN0ZDo6aW9zOjpi
YXNlZmllbGQpID09IHN0ZDo6aW9zOjpoZXggJiYKKyAgICAgICAgICAgICAgICAgICAoZmxhZ3Mg
JiBzdGQ6Omlvczo6c2hvd2Jhc2UpICYmIHYgIT0gMCkgeworICAgICAgICAgIHJlcC5pbnNlcnQo
Miwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgIHJlcC5pbnNlcnQoMCwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogIC8vIHN0ZDo6aW9zOjpyaWdo
dAorICAgICAgICByZXAuaW5zZXJ0KDAsIHdpZHRoIC0gcmVwLnNpemUoKSwgb3MuZmlsbCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIG9zIDw8IHJlcDsKK30KKwor
fSAgLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2Ugc3RkIHsKK2NvbnN0ZXhwciBib29sIG51
bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zcGVjaWFsaXplZDsKK2NvbnN0ZXhw
ciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zaWduZWQ7Citjb25z
dGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6aXNfaW50ZWdlcjsK
K2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19leGFj
dDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjpoYXNf
aW5maW5pdHk7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBs
Pjo6aGFzX3F1aWV0X05hTjsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjpoYXNfc2lnbmFsaW5nX05hTjsKK2NvbnN0ZXhwciBmbG9hdF9kZW5vcm1fc3R5
bGUgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omhhc19kZW5vcm07Citjb25zdGV4
cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6aGFzX2Rlbm9ybV9sb3Nz
OworY29uc3RleHByIGZsb2F0X3JvdW5kX3N0eWxlIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEy
OEltcGw+Ojpyb3VuZF9zdHlsZTsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6
VUludDEyOEltcGw+Ojppc19pZWM1NTk7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxX
VEY6OlVJbnQxMjhJbXBsPjo6aXNfYm91bmRlZDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGlt
aXRzPFdURjo6VUludDEyOEltcGw+Ojppc19tb2R1bG87Citjb25zdGV4cHIgaW50IG51bWVyaWNf
bGltaXRzPFdURjo6VUludDEyOEltcGw+OjpkaWdpdHM7Citjb25zdGV4cHIgaW50IG51bWVyaWNf
bGltaXRzPFdURjo6VUludDEyOEltcGw+OjpkaWdpdHMxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJp
Y19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heF9kaWdpdHMxMDsKK2NvbnN0ZXhwciBpbnQg
bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OnJhZGl4OworY29uc3RleHByIGludCBu
dW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluX2V4cG9uZW50OworY29uc3RleHBy
IGludCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluX2V4cG9uZW50MTA7Citj
b25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXhfZXhwb25l
bnQ7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXhf
ZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOElt
cGw+Ojp0cmFwczsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOElt
cGw+Ojp0aW55bmVzc19iZWZvcmU7CisKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdU
Rjo6SW50MTI4SW1wbD46OmlzX3NwZWNpYWxpemVkOworY29uc3RleHByIGJvb2wgbnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfc2lnbmVkOworY29uc3RleHByIGJvb2wgbnVtZXJp
Y19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfaW50ZWdlcjsKK2NvbnN0ZXhwciBib29sIG51
bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX2V4YWN0OworY29uc3RleHByIGJvb2wg
bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aGFzX2luZmluaXR5OworY29uc3RleHBy
IGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aGFzX3F1aWV0X05hTjsKK2Nv
bnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Omhhc19zaWduYWxp
bmdfTmFOOworY29uc3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjpoYXNfZGVub3JtOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8
V1RGOjpJbnQxMjhJbXBsPjo6aGFzX2Rlbm9ybV9sb3NzOworY29uc3RleHByIGZsb2F0X3JvdW5k
X3N0eWxlIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OnJvdW5kX3N0eWxlOworY29u
c3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfaWVjNTU5Owor
Y29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfYm91bmRl
ZDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX21v
ZHVsbzsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGln
aXRzOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjpkaWdp
dHMxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6bWF4
X2RpZ2l0czEwOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+
OjpyYWRpeDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6
bWluX2V4cG9uZW50OworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOElt
cGw+OjptaW5fZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6bWF4X2V4cG9uZW50OworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+OjptYXhfZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNf
bGltaXRzPFdURjo6SW50MTI4SW1wbD46OnRyYXBzOworY29uc3RleHByIGJvb2wgbnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6dGlueW5lc3NfYmVmb3JlOworfSAgLy8gbmFtZXNwYWNl
IHN0ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW50MTI4LmggYi9Tb3VyY2UvV1RGL3d0
Zi9JbnQxMjguaAppbmRleCAzYmRiMGE0NWVmNWM0OWFmZWUyYjlkZGZkMzBhOGFjMjUyMGQ2M2Zh
Li4wZTljMDA1NDU1YTIzMmEwN2M2NTA3NGY5NThjMDBmYWEwNTQyY2I4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9JbnQxMjguaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9JbnQxMjguaApAQCAt
MSwyOTEgKzEsMTI4NiBAQAotLy8gVGFrZW4gZnJvbSBMTFZNIFByb2plY3QsIHVuZGVyIHRoZSBB
cGFjaGUgTGljZW5zZSB2Mi4wIHdpdGggTExWTSBFeGNlcHRpb25zLgotLy8gU2VlIFNvdXJjZS9X
VEYvTElDRU5TRS1MTFZNLnR4dCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4KLS8vIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIFdJVEggTExWTS1leGNlcHRpb24KKy8vCisvLyBD
b3B5cmlnaHQgMjAxNyBUaGUgQWJzZWlsIEF1dGhvcnMuCisvLworLy8gTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAg
ICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gRmlsZTogSW50MTI4SW1wbC5oCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8KKy8vIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyAxMjgtYml0IGludGVnZXIgdHlwZXMsIGB1
aW50MTI4YCBhbmQgYEludDEyOEltcGxgLgorLy8KKy8vIFRPRE8oYWJzbC10ZWFtKTogVGhpcyBt
b2R1bGUgaXMgaW5jb25zaXN0ZW50IGFzIG1hbnkgaW5saW5lIGB1aW50MTI4YCBtZXRob2RzCisv
LyBhcmUgZGVmaW5lZCBpbiB0aGlzIGZpbGUsIHdoaWxlIG1hbnkgaW5saW5lIGBJbnQxMjhJbXBs
YCBtZXRob2RzIGFyZSBkZWZpbmVkIGluCisvLyB0aGUgYGludDEyOF8qX2ludHJpbnNpYy5pbmNg
IGZpbGVzLgorLy8KIAotLy8gUG9ydGFibGUgMTI4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFyaXRo
bWV0aWMgZm9yIHVzZSBpbiBpbXBvdmVyaXNoZWQKLS8vIEMrKyBpbXBsZW1lbnRhdGlvbnMgbGFj
a2luZyBfX3VpbnQxMjhfdC4KLQotLy8gQmFzZWQgb246Ci0vLyBodHRwczovL2dpdGh1Yi5jb20v
bGx2bS9sbHZtLXByb2plY3QvYmxvYi9kNDgwZjk2OC9mbGFuZy9pbmNsdWRlL2ZsYW5nL0NvbW1v
bi91aW50MTI4LmgKKy8vIEludDEyOC5oIGFuZCBJbnQxMjguY3BwIGFyZSBkZXJpdmVkIGZyb20g
YWJzZWlsLWNwcCAoaHR0cHM6Ly9naXRodWIuY29tL2Fic2VpbC9hYnNlaWwtY3BwKQorLy8gSW1w
b3J0ZWQgcmV2aXNpb24gaXMgZGRiODQyZjU4M2U1NjBiYmRlNDk3YmM5NmNmZWJlMjVmOTA4OWUx
MS4KKy8vIFdlIGFwcGx5IHRoZSBmb2xsb3dpbmcgY2hhbmdlcy4KKy8vIDEuIFVzZSBXVEYgbWFj
cm9zIGluc3RlYWQgb2YgQUJTTCBtYWNyb3MuCisvLyAyLiBSZW1vdmUgYWJzZWlsIEhhc2hUYWJs
ZSBoYW5kbGluZworLy8gMy4gUmVtb3ZlIF9faW50MTI4X3QgaGFuZGxpbmcKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPGNz
dGRpbnQ+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8d3RmL0xlYWRpbmdaZXJv
Qml0Q291bnQuaD4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNs
dWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIENPTVBJTEVSKE1TVkMpCisvLyBJbiB2ZXJ5IG9sZCB2ZXJzaW9ucyBvZiBNU1ZD
IGFuZCB3aGVuIHRoZSAvWmM6d2NoYXJfdCBmbGFnIGlzIG9mZiwgd2NoYXJfdCBpcworLy8gYSB0
eXBlZGVmIGZvciB1bnNpZ25lZCBzaG9ydC4gIE90aGVyd2lzZSB3Y2hhcl90IGlzIG1hcHBlZCB0
byB0aGUgX193Y2hhcl90CisvLyBidWlsdGluIHR5cGUuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBu
b3QgdG8gZGVmaW5lIG9wZXJhdG9yIHdjaGFyX3QoKQorLy8gYWxvbmdzaWRlIG9wZXJhdG9yIHVu
c2lnbmVkIHNob3J0KCkgaW4gdGhlc2UgaW5zdGFuY2VzLgorI2RlZmluZSBBQlNMX0lOVEVSTkFM
X1dDSEFSX1QgX193Y2hhcl90CisjaWYgQ1BVKFg4Nl82NCkKKyNpbmNsdWRlIDxpbnRyaW4uaD4K
KyNwcmFnbWEgaW50cmluc2ljKF91bXVsMTI4KQorI2VuZGlmICAvLyBkZWZpbmVkKF9NX1g2NCkK
KyNlbHNlICAgLy8gZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgQUJTTF9JTlRFUk5BTF9XQ0hB
Ul9UIHdjaGFyX3QKKyNlbmRpZiAgLy8gZGVmaW5lZChfTVNDX1ZFUikKIAogbmFtZXNwYWNlIFdU
RiB7CiAKLXRlbXBsYXRlIDxib29sIElTX1NJR05FRCA9IGZhbHNlPiBjbGFzcyBJbnQxMjhJbXBs
IHsKLXB1YmxpYzoKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCgpIHsgfQotICAgIC8vIFRoaXMg
bWVhbnMgb2YgZGVmaW5pdGlvbiBwcm92aWRlcyBzb21lIHBvcnRhYmlsaXR5IGZvcgotICAgIC8v
ICJzaXplX3QiIG9wZXJhbmRzLgotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKHVuc2lnbmVkIG4p
IDogbG93XyB7bn0geyB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwodW5zaWduZWQgbG9uZyBu
KSA6IGxvd18ge259IHsgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcg
bG9uZyBuKSA6IGxvd18ge259IHsgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGludCBuKQot
ICAgICAgICA6IGxvd18ge3N0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pfQotICAgICAgICAs
IGhpZ2hfIHstc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obiA8IDApfQotICAgIHsgfQotICAg
IGNvbnN0ZXhwciBJbnQxMjhJbXBsKGxvbmcgbikKLSAgICAgICAgOiBsb3dfIHtzdGF0aWNfY2Fz
dDxzdGQ6OnVpbnQ2NF90PihuKX0KLSAgICAgICAgLCBoaWdoXyB7LXN0YXRpY19jYXN0PHN0ZDo6
dWludDY0X3Q+KG4gPCAwKX0KLSAgICB7IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChsb25n
IGxvbmcgbikKLSAgICAgICAgOiBsb3dfIHtzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihuKX0K
LSAgICAgICAgLCBoaWdoXyB7LXN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4gPCAwKX0KLSAg
ICB7IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChjb25zdCBJbnQxMjhJbXBsICYpID0gZGVm
YXVsdDsKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChJbnQxMjhJbXBsICYmKSA9IGRlZmF1bHQ7
Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yPShjb25zdCBJbnQxMjhJbXBsICYp
ID0gZGVmYXVsdDsKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3I9KEludDEyOElt
cGwgJiYpID0gZGVmYXVsdDsKLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yKygp
IGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3J+KCkgY29uc3QgeyByZXR1cm4ge35oaWdoXywgfmxvd199OyB9Ci0gICAgY29uc3RleHByIElu
dDEyOEltcGwgb3BlcmF0b3ItKCkgY29uc3QgeyByZXR1cm4gfip0aGlzICsgMTsgfQotICAgIGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFsb3dfICYmICFoaWdoXzsg
fQotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
bG93XyB8fCBoaWdoXzsgfQotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzdGQ6OnVp
bnQ2NF90KCkgY29uc3QgeyByZXR1cm4gbG93XzsgfQotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBv
cGVyYXRvciBzdGQ6OmludDY0X3QoKSBjb25zdCB7IHJldHVybiBsb3dfOyB9Ci0gICAgY29uc3Rl
eHByIGV4cGxpY2l0IG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4obG93Xyk7IH0KLQotICAgIGNvbnN0ZXhwciBzdGQ6OnVpbnQ2NF90IGhpZ2goKSBjb25zdCB7
IHJldHVybiBoaWdoXzsgfQotICAgIGNvbnN0ZXhwciBzdGQ6OnVpbnQ2NF90IGxvdygpIGNvbnN0
IHsgcmV0dXJuIGxvd187IH0KLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yKyso
LypwcmVmaXgqLykKLSAgICB7Ci0gICAgICAgICp0aGlzICs9IDE7Ci0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKyhpbnQgLypw
b3N0Zml4Ki8pCi0gICAgewotICAgICAgICBJbnQxMjhJbXBsIHJlc3VsdCB7KnRoaXN9OwotICAg
ICAgICAqdGhpcyArPSAxOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBjb25z
dGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvci0tKC8qcHJlZml4Ki8pCi0gICAgewotICAgICAgICAq
dGhpcyAtPSAxOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJ
bnQxMjhJbXBsIG9wZXJhdG9yLS0oaW50IC8qcG9zdGZpeCovKQotICAgIHsKLSAgICAgICAgSW50
MTI4SW1wbCByZXN1bHQgeyp0aGlzfTsKLSAgICAgICAgKnRoaXMgLT0gMTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvciYo
SW50MTI4SW1wbCB0aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHtoaWdoXyAmIHRo
YXQuaGlnaF8sIGxvd18gJiB0aGF0Lmxvd199OwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4
SW1wbCBvcGVyYXRvciB8IChJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4ge2hpZ2hfIHwgdGhhdC5oaWdoXywgbG93XyB8IHRoYXQubG93X307Ci0gICAgfQotICAg
IGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yXihJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4ge2hpZ2hfIF4gdGhhdC5oaWdoXywgbG93XyBeIHRoYXQubG93
X307Ci0gICAgfQotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3I8PChJbnQxMjhJ
bXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAodGhhdCA+PSAxMjgpCi0gICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICBpZiAoIXRoYXQpCi0gICAgICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgICAgIHN0ZDo6dWludDY0X3QgbiB7dGhhdC5sb3dffTsKLSAgICAgICAgaWYg
KG4gPj0gNjQpCi0gICAgICAgICAgICByZXR1cm4ge2xvd18gPDwgKG4gLSA2NCksIDB9OwotICAg
ICAgICByZXR1cm4geyhoaWdoXyA8PCBuKSB8IChsb3dfID4+ICg2NCAtIG4pKSwgbG93XyA8PCBu
fTsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3I+PihJbnQxMjhJbXBs
IHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAodGhhdCA+PSAxMjgpCi0gICAgICAgICAg
ICByZXR1cm4geyB9OwotICAgICAgICBpZiAoIXRoYXQpCi0gICAgICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgICAgIHN0ZDo6dWludDY0X3QgbiB7dGhhdC5sb3dffTsKLSAgICAgICAgaWYgKG4g
Pj0gNjQpCi0gICAgICAgICAgICByZXR1cm4gezAsIGhpZ2hfID4+IChuIC0gNjQpfTsKLSAgICAg
ICAgcmV0dXJuIHtoaWdoXyA+PiBuLCAoaGlnaF8gPDwgKDY0IC0gbikpIHwgKGxvd18gPj4gbil9
OwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yKyhJbnQxMjhJbXBs
IHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGQ6OnVpbnQ2NF90IGxvd2VyIHsobG93XyAm
IH50b3BCaXQpICsgKHRoYXQubG93XyAmIH50b3BCaXQpfTsKLSAgICAgICAgYm9vbCBjYXJyeSB7
KChsb3dlciA+PiA2MykgKyAobG93XyA+PiA2MykgKyAodGhhdC5sb3dfID4+IDYzKSkgPiAxfTsK
LSAgICAgICAgcmV0dXJuIHtoaWdoXyArIHRoYXQuaGlnaF8gKyBjYXJyeSwgbG93XyArIHRoYXQu
bG93X307Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yLShJbnQxMjhJ
bXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJuICp0aGlzICsgLXRoYXQ7IH0KLQotICAgIGNvbnN0ZXhw
ciBJbnQxMjhJbXBsIG9wZXJhdG9yKihJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAg
ICAgICBzdGQ6OnVpbnQ2NF90IG1hc2szMiB7MHhmZmZmZmZmZn07Ci0gICAgICAgIGlmICghaGln
aF8gJiYgIXRoYXQuaGlnaF8pIHsKLSAgICAgICAgICAgIHN0ZDo6dWludDY0X3QgeDAge2xvd18g
JiBtYXNrMzJ9LCB4MSB7bG93XyA+PiAzMn07Ci0gICAgICAgICAgICBzdGQ6OnVpbnQ2NF90IHkw
IHt0aGF0Lmxvd18gJiBtYXNrMzJ9LCB5MSB7dGhhdC5sb3dfID4+IDMyfTsKLSAgICAgICAgICAg
IEludDEyOEltcGwgeDB5MCB7eDAgKiB5MH0sIHgweTEge3gwICogeTF9OwotICAgICAgICAgICAg
SW50MTI4SW1wbCB4MXkwIHt4MSAqIHkwfSwgeDF5MSB7eDEgKiB5MX07Ci0gICAgICAgICAgICBy
ZXR1cm4geDB5MCArICgoeDB5MSArIHgxeTApIDw8IDMyKSArICh4MXkxIDw8IDY0KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0ZDo6dWludDY0X3QgeDAge2xvd18gJiBtYXNrMzJ9LCB4MSB7bG93
XyA+PiAzMn0sIHgyIHtoaWdoXyAmIG1hc2szMn0sCi0gICAgICAgICAgICB4MyB7aGlnaF8gPj4g
MzJ9OwotICAgICAgICBzdGQ6OnVpbnQ2NF90IHkwIHt0aGF0Lmxvd18gJiBtYXNrMzJ9LCB5MSB7
dGhhdC5sb3dfID4+IDMyfSwKLSAgICAgICAgICAgIHkyIHt0aGF0LmhpZ2hfICYgbWFzazMyfSwg
eTMge3RoYXQuaGlnaF8gPj4gMzJ9OwotICAgICAgICBJbnQxMjhJbXBsIHgweTAge3gwICogeTB9
LCB4MHkxIHt4MCAqIHkxfSwgeDB5MiB7eDAgKiB5Mn0sIHgweTMge3gwICogeTN9OwotICAgICAg
ICBJbnQxMjhJbXBsIHgxeTAge3gxICogeTB9LCB4MXkxIHt4MSAqIHkxfSwgeDF5MiB7eDEgKiB5
Mn07Ci0gICAgICAgIEludDEyOEltcGwgeDJ5MCB7eDIgKiB5MH0sIHgyeTEge3gyICogeTF9Owot
ICAgICAgICBJbnQxMjhJbXBsIHgzeTAge3gzICogeTB9OwotICAgICAgICByZXR1cm4geDB5MCAr
ICgoeDB5MSArIHgxeTApIDw8IDMyKSArICgoeDB5MiArIHgxeTEgKyB4MnkwKSA8PCA2NCkgKwot
ICAgICAgICAgICAgKCh4MHkzICsgeDF5MiArIHgyeTEgKyB4M3kwKSA8PCA5Nik7Ci0gICAgfQot
Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IvKEludDEyOEltcGwgdGhhdCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGludCBqIHtsZWFkaW5nWmVyb2VzKCl9OwotICAgICAgICBJbnQx
MjhJbXBsIGJpdHMgeyp0aGlzfTsKLSAgICAgICAgYml0cyA8PD0gajsKLSAgICAgICAgSW50MTI4
SW1wbCBudW1lcmF0b3IgeyB9OwotICAgICAgICBJbnQxMjhJbXBsIHF1b3RpZW50IHsgfTsKLSAg
ICAgICAgZm9yICg7IGogPCAxMjg7ICsraikgewotICAgICAgICAgICAgbnVtZXJhdG9yIDw8PSAx
OwotICAgICAgICAgICAgaWYgKGJpdHMuaGlnaF8gJiB0b3BCaXQpCi0gICAgICAgICAgICAgICAg
bnVtZXJhdG9yLmxvd18gfD0gMTsKLSAgICAgICAgICAgIGJpdHMgPDw9IDE7Ci0gICAgICAgICAg
ICBxdW90aWVudCA8PD0gMTsKLSAgICAgICAgICAgIGlmIChudW1lcmF0b3IgPj0gdGhhdCkgewot
ICAgICAgICAgICAgICAgICsrcXVvdGllbnQ7Ci0gICAgICAgICAgICAgICAgbnVtZXJhdG9yIC09
IHRoYXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHF1b3RpZW50
OwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yJShJbnQxMjhJbXBs
IHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpbnQgaiB7bGVhZGluZ1plcm9lcygpfTsKLSAg
ICAgICAgSW50MTI4SW1wbCBiaXRzIHsqdGhpc307Ci0gICAgICAgIGJpdHMgPDw9IGo7Ci0gICAg
ICAgIEludDEyOEltcGwgcmVtYWluZGVyIHsgfTsKLSAgICAgICAgZm9yICg7IGogPCAxMjg7ICsr
aikgewotICAgICAgICAgICAgcmVtYWluZGVyIDw8PSAxOwotICAgICAgICAgICAgaWYgKGJpdHMu
aGlnaF8gJiB0b3BCaXQpCi0gICAgICAgICAgICAgICAgcmVtYWluZGVyLmxvd18gfD0gMTsKLSAg
ICAgICAgICAgIGJpdHMgPDw9IDE7Ci0gICAgICAgICAgICBpZiAocmVtYWluZGVyID49IHRoYXQp
Ci0gICAgICAgICAgICAgICAgcmVtYWluZGVyIC09IHRoYXQ7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHJlbWFpbmRlcjsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
SW50MTI4SW1wbCB0aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKElTX1NJR05FRCAmJiAo
aGlnaF8gXiB0aGF0LmhpZ2hfKSAmIHRvcEJpdCkKLSAgICAgICAgICAgIHJldHVybiAhIShoaWdo
XyAmIHRvcEJpdCk7Ci0KLSAgICAgICAgcmV0dXJuIGhpZ2hfIDwgdGhhdC5oaWdoXyB8fCAoaGln
aF8gPT0gdGhhdC5oaWdoXyAmJiBsb3dfIDwgdGhhdC5sb3dfKTsKLSAgICB9Ci0gICAgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8PShJbnQxMjhJbXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPiB0aGF0KTsgfQotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oSW50MTI4SW1wbCB0
aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvd18gPT0gdGhhdC5sb3dfICYmIGhp
Z2hfID09IHRoYXQuaGlnaF87Ci0gICAgfQotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0o
SW50MTI4SW1wbCB0aGF0KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHRoYXQpOyB9Ci0gICAg
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShJbnQxMjhJbXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJu
IHRoYXQgPD0gKnRoaXM7IH0KLSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oSW50MTI4SW1w
bCB0aGF0KSBjb25zdCB7IHJldHVybiB0aGF0IDwgKnRoaXM7IH0KLQotICAgIGNvbnN0ZXhwciBJ
bnQxMjhJbXBsICZvcGVyYXRvciY9KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAg
ICAgICAqdGhpcyA9ICp0aGlzICYgdGhhdDsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0K
LSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3J8PShjb25zdCBJbnQxMjhJbXBsICZ0
aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyB8IHRoYXQ7Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yXj0oY29u
c3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gKnRoaXMgXiB0aGF0
OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBs
ICZvcGVyYXRvcjw8PShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRo
aXMgPSAqdGhpcyA8PCB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNv
bnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvcj4+PShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQot
ICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyA+PiB0aGF0OwotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvcis9KGNvbnN0IElu
dDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzICsgdGhhdDsKLSAg
ICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3Bl
cmF0b3ItPShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAq
dGhpcyAtIHRoYXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHBy
IEludDEyOEltcGwgJm9wZXJhdG9yKj0oY29uc3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0g
ICAgICAgICp0aGlzID0gKnRoaXMgKiB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg
fQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvci89KGNvbnN0IEludDEyOEltcGwg
JnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzIC8gdGhhdDsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3IlPShj
b25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyAlIHRo
YXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3Rl
eHByIEludDEyOEltcGwoc3RkOjp1aW50NjRfdCBoaSwgc3RkOjp1aW50NjRfdCBsbykgOiBsb3df
IHtsb30sIGhpZ2hfIHtoaX0geyB9Ci0gICAgY29uc3RleHByIGludCBsZWFkaW5nWmVyb2VzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaGlnaF8pCi0gICAgICAgICAgICByZXR1cm4gNjQg
KyBsZWFkaW5nWmVyb0JpdENvdW50KGxvd18pOwotICAgICAgICByZXR1cm4gbGVhZGluZ1plcm9C
aXRDb3VudChoaWdoXyk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjp1aW50NjRf
dCB0b3BCaXQge3N0ZDo6dWludDY0X3QgezF9IDw8IDYzfTsKLSAgICBzdGQ6OnVpbnQ2NF90IGxv
d18gezB9LCBoaWdoXyB7MH07CitjbGFzcyBJbnQxMjhJbXBsOworCisvLyBVSW50MTI4SW1wbAor
Ly8KKy8vIEFuIHVuc2lnbmVkIDEyOC1iaXQgaW50ZWdlciB0eXBlLiBUaGUgQVBJIGlzIG1lYW50
IHRvIG1pbWljIGFuIGludHJpbnNpYyB0eXBlCisvLyBhcyBjbG9zZWx5IGFzIGlzIHByYWN0aWNh
bCwgaW5jbHVkaW5nIGV4aGliaXRpbmcgdW5kZWZpbmVkIGJlaGF2aW9yIGluCisvLyBhbmFsb2dv
dXMgY2FzZXMgKGUuZy4gZGl2aXNpb24gYnkgemVybykuIFRoaXMgdHlwZSBpcyBpbnRlbmRlZCB0
byBiZSBhCisvLyBkcm9wLWluIHJlcGxhY2VtZW50IG9uY2UgQysrIHN1cHBvcnRzIGFuIGludHJp
bnNpYyBgdWludDEyOF90YCB0eXBlOyB3aGVuCisvLyB0aGF0IG9jY3VycywgZXhpc3Rpbmcgd2Vs
bC1iZWhhdmVkIHVzZXMgb2YgYFVJbnQxMjhJbXBsYCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsKKy8v
IHVzaW5nIHRoYXQgbmV3IHR5cGUuCisvLworLy8gTm90ZTogY29kZSB3cml0dGVuIHdpdGggdGhp
cyB0eXBlIHdpbGwgY29udGludWUgdG8gY29tcGlsZSBvbmNlIGB1aW50MTI4X3RgCisvLyBpcyBp
bnRyb2R1Y2VkLCBwcm92aWRlZCB0aGUgcmVwbGFjZW1lbnQgaGVscGVyIGZ1bmN0aW9ucworLy8g
YFVJbnQxMjhJbXBsKExvd3xIaWdoKTY0KClgIGFuZCBgTWFrZVVJbnQxMjgoKWAgYXJlIG1hZGUu
CisvLworLy8gQSBgVUludDEyOEltcGxgIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmc6CisvLworLy8g
ICAqIEltcGxpY2l0IGNvbnN0cnVjdGlvbiBmcm9tIGludGVncmFsIHR5cGVzCisvLyAgICogRXhw
bGljaXQgY29udmVyc2lvbiB0byBpbnRlZ3JhbCB0eXBlcworLy8KKy8vIEFkZGl0aW9uYWxseSwg
aWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBgX19pbnQxMjhgLCBgVUludDEyOEltcGxgIGlzCisv
LyBpbnRlcm9wZXJhYmxlIHdpdGggdGhhdCB0eXBlLiAoQWJzZWlsIGNoZWNrcyBmb3IgdGhpcyBj
b21wYXRpYmlsaXR5IHRocm91Z2gKKy8vIHRoZSBgQUJTTF9IQVZFX0lOVFJJTlNJQ19JTlQxMjhg
IG1hY3JvLikKKy8vCisvLyBIb3dldmVyLCBhIGBVSW50MTI4SW1wbGAgZGlmZmVycyBmcm9tIGlu
dHJpbnNpYyBpbnRlZ3JhbCB0eXBlcyBpbiB0aGUgZm9sbG93aW5nCisvLyB3YXlzOgorLy8KKy8v
ICAgKiBFcnJvcnMgb24gaW1wbGljaXQgY29udmVyc2lvbnMgdGhhdCBkbyBub3QgcHJlc2VydmUg
dmFsdWUgKHN1Y2ggYXMKKy8vICAgICBsb3NzIG9mIHByZWNpc2lvbiB3aGVuIGNvbnZlcnRpbmcg
dG8gZmxvYXQgdmFsdWVzKS4KKy8vICAgKiBSZXF1aXJlcyBleHBsaWNpdCBjb25zdHJ1Y3Rpb24g
ZnJvbSBhbmQgY29udmVyc2lvbiB0byBmbG9hdGluZyBwb2ludAorLy8gICAgIHR5cGVzLgorLy8g
ICAqIENvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlwZXMgcmVxdWlyZXMgYW4gZXhwbGljaXQgc3Rh
dGljX2Nhc3QoKSB0bworLy8gICAgIG1pbWljIHVzZSBvZiB0aGUgYC1XbmFycm93aW5nYCBjb21w
aWxlciBmbGFnLgorLy8gICAqIFRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2YgYFVJbnQxMjhJ
bXBsYCBtYXkgZGlmZmVyIGZyb20gdGhhdCBvZiBhbgorLy8gICAgIGludHJpbnNpYyAxMjgtYml0
IGludGVnZXIgdHlwZSBkZXBlbmRpbmcgb24gcGxhdGZvcm0gYW5kIGJ1aWxkCisvLyAgICAgY29u
ZmlndXJhdGlvbi4KKy8vCisvLyBFeGFtcGxlOgorLy8KKy8vICAgICBmbG9hdCB5ID0gYWJzbDo6
VUludDEyOE1heCgpOyAgLy8gRXJyb3IuIFVJbnQxMjhJbXBsIGNhbm5vdCBiZSBpbXBsaWNpdGx5
CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnRlZCB0byBm
bG9hdC4KKy8vCisvLyAgICAgYWJzbDo6VUludDEyOEltcGwgdjsKKy8vICAgICB1aW50NjRfdCBp
ID0gdjsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IKKy8vICAgICB1aW50NjRfdCBp
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpOyAgLy8gT0sKKy8vCitjbGFzcyBhbGlnbmFzKDE2
KSBVSW50MTI4SW1wbCB7CisgcHVibGljOgorICBVSW50MTI4SW1wbCgpID0gZGVmYXVsdDsKKwor
ICAvLyBDb25zdHJ1Y3RvcnMgZnJvbSBhcml0aG1ldGljIHR5cGVzCisgIGNvbnN0ZXhwciBVSW50
MTI4SW1wbChpbnQgdik7ICAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9leHBsaWNp
dCkKKyAgY29uc3RleHByIFVJbnQxMjhJbXBsKHVuc2lnbmVkIGludCB2KTsgICAgICAgIC8vIE5P
TElOVChydW50aW1lL2V4cGxpY2l0KQorICBjb25zdGV4cHIgVUludDEyOEltcGwobG9uZyB2KTsg
ICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgVUludDEy
OEltcGwodW5zaWduZWQgbG9uZyB2KTsgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBj
b25zdGV4cHIgVUludDEyOEltcGwobG9uZyBsb25nIHYpOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1
bnRpbWUvaW50KQorICBjb25zdGV4cHIgVUludDEyOEltcGwodW5zaWduZWQgbG9uZyBsb25nIHYp
OyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgVUludDEyOEltcGwoSW50MTI4
SW1wbCB2KTsgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQorICBXVEZfRVhQT1JUX1BSSVZB
VEUgZXhwbGljaXQgVUludDEyOEltcGwoZmxvYXQgdik7CisgIFdURl9FWFBPUlRfUFJJVkFURSBl
eHBsaWNpdCBVSW50MTI4SW1wbChkb3VibGUgdik7CisgIFdURl9FWFBPUlRfUFJJVkFURSBleHBs
aWNpdCBVSW50MTI4SW1wbChsb25nIGRvdWJsZSB2KTsKKworICAvLyBBc3NpZ25tZW50IG9wZXJh
dG9ycyBmcm9tIGFyaXRobWV0aWMgdHlwZXMKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPShpbnQg
dik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj0odW5zaWduZWQgaW50IHYpOworICBVSW50MTI4
SW1wbCYgb3BlcmF0b3I9KGxvbmcgdik7ICAgICAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPSh1bnNpZ25lZCBsb25nIHYpOyAgICAgICAv
LyBOT0xJTlQocnVudGltZS9pbnQpCisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj0obG9uZyBsb25n
IHYpOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBVSW50MTI4SW1wbCYgb3Bl
cmF0b3I9KHVuc2lnbmVkIGxvbmcgbG9uZyB2KTsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAg
VUludDEyOEltcGwmIG9wZXJhdG9yPShJbnQxMjhJbXBsIHYpOworCisgIC8vIENvbnZlcnNpb24g
b3BlcmF0b3JzIHRvIG90aGVyIGFyaXRobWV0aWMgdHlwZXMKKyAgY29uc3RleHByIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGNo
YXIoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHNpZ25lZCBjaGFyKCkg
Y29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCBjaGFyKCkgY29u
c3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyMTZfdCgpIGNvbnN0OworICBj
b25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgY2hhcjMyX3QoKSBjb25zdDsKKyAgY29uc3RleHBy
IGV4cGxpY2l0IG9wZXJhdG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCgpIGNvbnN0OworICBjb25z
dGV4cHIgZXhwbGljaXQgb3BlcmF0b3Igc2hvcnQoKSBjb25zdDsgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBs
aWNpdCBvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGlj
aXQgb3BlcmF0b3IgaW50KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1
bnNpZ25lZCBpbnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGxvbmco
KSBjb25zdDsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVu
dGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCBsb25nKCkg
Y29uc3Q7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhw
bGljaXQgb3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3Q7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1
bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgbG9uZyBs
b25nKCkgY29uc3Q7CisgIGV4cGxpY2l0IG9wZXJhdG9yIGZsb2F0KCkgY29uc3Q7CisgIGV4cGxp
Y2l0IG9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0OworICBleHBsaWNpdCBvcGVyYXRvciBsb25nIGRv
dWJsZSgpIGNvbnN0OworCisgIC8vIFRyaXZpYWwgY29weSBjb25zdHJ1Y3RvciwgYXNzaWdubWVu
dCBvcGVyYXRvciBhbmQgZGVzdHJ1Y3Rvci4KKworICAvLyBBcml0aG1ldGljIG9wZXJhdG9ycy4K
KyAgVUludDEyOEltcGwmIG9wZXJhdG9yKz0oVUludDEyOEltcGwgb3RoZXIpOworICBVSW50MTI4
SW1wbCYgb3BlcmF0b3ItPShVSW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQxMjhJbXBsJiBvcGVy
YXRvcio9KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgLy8gTG9uZyBkaXZpc2lvbi9tb2R1bG8gZm9y
IFVJbnQxMjhJbXBsLgorICBVSW50MTI4SW1wbCYgb3BlcmF0b3IvPShVSW50MTI4SW1wbCBvdGhl
cik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvciU9KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUlu
dDEyOEltcGwgb3BlcmF0b3IrKyhpbnQpOworICBVSW50MTI4SW1wbCBvcGVyYXRvci0tKGludCk7
CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcjw8PShpbnQpOworICBVSW50MTI4SW1wbCYgb3BlcmF0
b3I+Pj0oaW50KTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yJj0oVUludDEyOEltcGwgb3RoZXIp
OworICBVSW50MTI4SW1wbCYgb3BlcmF0b3J8PShVSW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQx
MjhJbXBsJiBvcGVyYXRvcl49KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUludDEyOEltcGwmIG9w
ZXJhdG9yKysoKTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yLS0oKTsKKworICAvLyBVSW50MTI4
TG93NjQoKQorICAvLworICAvLyBSZXR1cm5zIHRoZSBsb3dlciA2NC1iaXQgdmFsdWUgb2YgYSBg
VUludDEyOEltcGxgIHZhbHVlLgorICBmcmllbmQgY29uc3RleHByIHVpbnQ2NF90IFVJbnQxMjhM
b3c2NChVSW50MTI4SW1wbCB2KTsKKworICAvLyBVSW50MTI4SGlnaDY0KCkKKyAgLy8KKyAgLy8g
UmV0dXJucyB0aGUgaGlnaGVyIDY0LWJpdCB2YWx1ZSBvZiBhIGBVSW50MTI4SW1wbGAgdmFsdWUu
CisgIGZyaWVuZCBjb25zdGV4cHIgdWludDY0X3QgVUludDEyOEhpZ2g2NChVSW50MTI4SW1wbCB2
KTsKKworICAvLyBNYWtlVUludDEyOCgpCisgIC8vCisgIC8vIENvbnN0cnVjdHMgYSBgVUludDEy
OEltcGxgIG51bWVyaWMgdmFsdWUgZnJvbSB0d28gNjQtYml0IHVuc2lnbmVkIGludGVnZXJzLgor
ICAvLyBOb3RlIHRoYXQgdGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGlzIHRoZSBvbmx5IHdheSB0byBj
b25zdHJ1Y3QgYSBgVUludDEyOEltcGxgCisgIC8vIGZyb20gaW50ZWdlciB2YWx1ZXMgZ3JlYXRl
ciB0aGFuIDJeNjQuCisgIC8vCisgIC8vIEV4YW1wbGU6CisgIC8vCisgIC8vICAgVUludDEyOElt
cGwgYmlnID0gTWFrZVVJbnQxMjgoMSwgMCk7CisgIGZyaWVuZCBjb25zdGV4cHIgVUludDEyOElt
cGwgTWFrZVVJbnQxMjgodWludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KTsKKworICAvLyBVSW50
MTI4TWF4KCkKKyAgLy8KKyAgLy8gUmV0dXJucyB0aGUgaGlnaGVzdCB2YWx1ZSBmb3IgYSAxMjgt
Yml0IHVuc2lnbmVkIGludGVnZXIuCisgIGZyaWVuZCBjb25zdGV4cHIgVUludDEyOEltcGwgVUlu
dDEyOE1heCgpOworCisgcHJpdmF0ZToKKyAgY29uc3RleHByIFVJbnQxMjhJbXBsKHVpbnQ2NF90
IGhpZ2gsIHVpbnQ2NF90IGxvdyk7CisKKyAgLy8gVE9ETyhzdHJlbCkgVXBkYXRlIGltcGxlbWVu
dGF0aW9uIHRvIHVzZSBfX2ludDEyOCBvbmNlIGFsbCB1c2VycyBvZgorICAvLyBVSW50MTI4SW1w
bCBhcmUgZml4ZWQgdG8gbm90IGRlcGVuZCBvbiBhbGlnbm9mKFVJbnQxMjhJbXBsKSA9PSA4LiBB
bHNvIGFkZAorICAvLyBhbGlnbmFzKDE2KSB0byBjbGFzcyBkZWZpbml0aW9uIHRvIGtlZXAgYWxp
Z25tZW50IGNvbnNpc3RlbnQgYWNyb3NzCisgIC8vIHBsYXRmb3Jtcy4KKyNpZiBDUFUoTElUVExF
X0VORElBTikKKyAgdWludDY0X3QgbG9fOworICB1aW50NjRfdCBoaV87CisjZWxpZiBDUFUoQklH
X0VORElBTikKKyAgdWludDY0X3QgaGlfOworICB1aW50NjRfdCBsb187CisjZWxzZSAgLy8gYnl0
ZSBvcmRlcgorI2Vycm9yICJVbnN1cHBvcnRlZCBieXRlIG9yZGVyOiBtdXN0IGJlIGxpdHRsZS1l
bmRpYW4gb3IgYmlnLWVuZGlhbi4iCisjZW5kaWYgIC8vIGJ5dGUgb3JkZXIKK307CisKKy8vIGFs
bG93IFVJbnQxMjhJbXBsIHRvIGJlIGxvZ2dlZAorV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3N0
cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBVSW50MTI4SW1wbCB2KTsKKworLy8g
VE9ETyhzdHJlbCkgYWRkIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtJiwgVUludDEyOEltcGwpCisK
K2NvbnN0ZXhwciBVSW50MTI4SW1wbCBVSW50MTI4TWF4KCkgeworICByZXR1cm4gVUludDEyOElt
cGwoKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCksCisgICAgICAgICAgICAg
ICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpKTsKK30KKworfSAgLy8g
bmFtZXNwYWNlIFdURgorCisvLyBTcGVjaWFsaXplZCBudW1lcmljX2xpbWl0cyBmb3IgVUludDEy
OEltcGwuCituYW1lc3BhY2Ugc3RkIHsKK3RlbXBsYXRlIDw+CitjbGFzcyBudW1lcmljX2xpbWl0
czxXVEY6OlVJbnQxMjhJbXBsPiB7CisgcHVibGljOgorICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc2lnbmVk
ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX3NpZ25hbGlu
Z19OYU4gPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfZGVu
b3JtX2xvc3MgPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdF9yb3VuZF9zdHlsZSBy
b3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX21vZHVsbyA9IHRydWU7CisgIHN0YXRp
YyBjb25zdGV4cHIgaW50IGRpZ2l0cyA9IDEyODsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGln
aXRzMTAgPSAzODsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcmFkaXggPSAyOworICBzdGF0aWMgY29uc3RleHByIGludCBt
aW5fZXhwb25lbnQgPSAwOworICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQxMCA9
IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9leHBvbmVudCA9IDA7CisgIHN0YXRpYyBj
b25zdGV4cHIgaW50IG1heF9leHBvbmVudDEwID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHRyYXBzID0gbnVtZXJpY19saW1pdHM8dWludDY0X3Q+Ojp0cmFwczsKKyAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworCisgIHN0YXRpYyBjb25zdGV4cHIg
V1RGOjpVSW50MTI4SW1wbCAobWluKSgpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhw
ciBXVEY6OlVJbnQxMjhJbXBsIGxvd2VzdCgpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0
ZXhwciBXVEY6OlVJbnQxMjhJbXBsIChtYXgpKCkgeyByZXR1cm4gV1RGOjpVSW50MTI4TWF4KCk7
IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIGVwc2lsb24oKSB7IHJldHVy
biAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCByb3VuZF9lcnJvcigp
IHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIGluZmlu
aXR5KCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6VUludDEyOEltcGwg
cXVpZXRfTmFOKCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6VUludDEy
OEltcGwgc2lnbmFsaW5nX05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBX
VEY6OlVJbnQxMjhJbXBsIGRlbm9ybV9taW4oKSB7IHJldHVybiAwOyB9Cit9OworfSAgLy8gbmFt
ZXNwYWNlIHN0ZAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSW50MTI4SW1wbAorLy8KKy8vIEEg
c2lnbmVkIDEyOC1iaXQgaW50ZWdlciB0eXBlLiBUaGUgQVBJIGlzIG1lYW50IHRvIG1pbWljIGFu
IGludHJpbnNpYworLy8gaW50ZWdyYWwgdHlwZSBhcyBjbG9zZWx5IGFzIGlzIHByYWN0aWNhbCwg
aW5jbHVkaW5nIGV4aGliaXRpbmcgdW5kZWZpbmVkCisvLyBiZWhhdmlvciBpbiBhbmFsb2dvdXMg
Y2FzZXMgKGUuZy4gZGl2aXNpb24gYnkgemVybykuCisvLworLy8gQW4gYEludDEyOEltcGxgIHN1
cHBvcnRzIHRoZSBmb2xsb3dpbmc6CisvLworLy8gICAqIEltcGxpY2l0IGNvbnN0cnVjdGlvbiBm
cm9tIGludGVncmFsIHR5cGVzCisvLyAgICogRXhwbGljaXQgY29udmVyc2lvbiB0byBpbnRlZ3Jh
bCB0eXBlcworLy8KKy8vIEhvd2V2ZXIsIGFuIGBJbnQxMjhJbXBsYCBkaWZmZXJzIGZyb20gaW50
cmluc2ljIGludGVncmFsIHR5cGVzIGluIHRoZSBmb2xsb3dpbmcKKy8vIHdheXM6CisvLworLy8g
ICAqIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGNvbnZlcnRpYmxlIHRvIG90aGVyIGludGVncmFsIHR5
cGVzLgorLy8gICAqIFJlcXVpcmVzIGV4cGxpY2l0IGNvbnN0cnVjdGlvbiBmcm9tIGFuZCBjb252
ZXJzaW9uIHRvIGZsb2F0aW5nIHBvaW50CisvLyAgICAgdHlwZXMuCisKKy8vIEFkZGl0aW9uYWxs
eSwgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBgX19pbnQxMjhgLCBgSW50MTI4SW1wbGAgaXMK
Ky8vIGludGVyb3BlcmFibGUgd2l0aCB0aGF0IHR5cGUuIChBYnNlaWwgY2hlY2tzIGZvciB0aGlz
IGNvbXBhdGliaWxpdHkgdGhyb3VnaAorLy8gdGhlIGBBQlNMX0hBVkVfSU5UUklOU0lDX0lOVDEy
OGAgbWFjcm8uKQorLy8KKy8vIFRoZSBkZXNpZ24gZ29hbCBmb3IgYEludDEyOEltcGxgIGlzIHRo
YXQgaXQgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggYSBmdXR1cmUKKy8vIGBpbnQxMjhfdGAsIGlm
IHRoYXQgdHlwZSBiZWNvbWVzIGEgcGFydCBvZiB0aGUgc3RhbmRhcmQuCisvLworLy8gRXhhbXBs
ZToKKy8vCisvLyAgICAgZmxvYXQgeSA9IEludDEyOEltcGwoMTcpOyAgLy8gRXJyb3IuIEludDEy
OEltcGwgY2Fubm90IGJlIGltcGxpY2l0bHkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNvbnZlcnRlZCB0byBmbG9hdC4KKy8vCisvLyAgICAgSW50MTI4SW1wbCB2Owor
Ly8gICAgIGludDY0X3QgaSA9IHY7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IKKy8v
ICAgICBpbnQ2NF90IGkgPSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2KTsgIC8vIE9LCisvLworY2xh
c3MgYWxpZ25hcygxNikgSW50MTI4SW1wbCB7CisgcHVibGljOgorICBJbnQxMjhJbXBsKCkgPSBk
ZWZhdWx0OworCisgIC8vIENvbnN0cnVjdG9ycyBmcm9tIGFyaXRobWV0aWMgdHlwZXMKKyAgY29u
c3RleHByIEludDEyOEltcGwoaW50IHYpOyAgICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRp
bWUvZXhwbGljaXQpCisgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKHVuc2lnbmVkIGludCB2KTsgICAg
ICAgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQorICBjb25zdGV4cHIgSW50MTI4SW1wbChs
b25nIHYpOyAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhw
ciBJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgdik7ICAgICAgIC8vIE5PTElOVChydW50aW1lL2lu
dCkKKyAgY29uc3RleHByIEludDEyOEltcGwobG9uZyBsb25nIHYpOyAgICAgICAgICAgLy8gTk9M
SU5UKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxv
bmcgdik7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBJbnQx
MjhJbXBsKFVJbnQxMjhJbXBsIHYpOworICBXVEZfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW50
MTI4SW1wbChmbG9hdCB2KTsKKyAgV1RGX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEludDEyOElt
cGwoZG91YmxlIHYpOworICBXVEZfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW50MTI4SW1wbChs
b25nIGRvdWJsZSB2KTsKKworICAvLyBBc3NpZ25tZW50IG9wZXJhdG9ycyBmcm9tIGFyaXRobWV0
aWMgdHlwZXMKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KGludCB2KTsKKyAgSW50MTI4SW1wbCYg
b3BlcmF0b3I9KHVuc2lnbmVkIGludCB2KTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KGxvbmcg
dik7ICAgICAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgSW50MTI4SW1wbCYg
b3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgdik7ICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkK
KyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KGxvbmcgbG9uZyB2KTsgICAgICAgICAgIC8vIE5PTElO
VChydW50aW1lL2ludCkKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgbG9u
ZyB2KTsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKworICAvLyBDb252ZXJzaW9uIG9wZXJhdG9y
cyB0byBvdGhlciBhcml0aG1ldGljIHR5cGVzCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyKCkgY29u
c3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzaWduZWQgY2hhcigpIGNvbnN0Owor
ICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgY2hhcigpIGNvbnN0OworICBj
b25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgY2hhcjE2X3QoKSBjb25zdDsKKyAgY29uc3RleHBy
IGV4cGxpY2l0IG9wZXJhdG9yIGNoYXIzMl90KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNp
dCBvcGVyYXRvciBBQlNMX0lOVEVSTkFMX1dDSEFSX1QoKSBjb25zdDsKKyAgY29uc3RleHByIGV4
cGxpY2l0IG9wZXJhdG9yIHNob3J0KCkgY29uc3Q7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisg
IC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3Bl
cmF0b3IgdW5zaWduZWQgc2hvcnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJh
dG9yIGludCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQg
aW50KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBsb25nKCkgY29uc3Q7
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50
KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgbG9uZygpIGNvbnN0Owor
ICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9w
ZXJhdG9yIGxvbmcgbG9uZygpIGNvbnN0OworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2lu
dCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIGxvbmcgbG9uZygpIGNv
bnN0OworICBleHBsaWNpdCBvcGVyYXRvciBmbG9hdCgpIGNvbnN0OworICBleHBsaWNpdCBvcGVy
YXRvciBkb3VibGUoKSBjb25zdDsKKyAgZXhwbGljaXQgb3BlcmF0b3IgbG9uZyBkb3VibGUoKSBj
b25zdDsKKworICAvLyBUcml2aWFsIGNvcHkgY29uc3RydWN0b3IsIGFzc2lnbm1lbnQgb3BlcmF0
b3IgYW5kIGRlc3RydWN0b3IuCisKKyAgLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMKKyAgSW50MTI4
SW1wbCYgb3BlcmF0b3IrPShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0
b3ItPShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3IqPShJbnQxMjhJ
bXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3IvPShJbnQxMjhJbXBsIG90aGVyKTsK
KyAgSW50MTI4SW1wbCYgb3BlcmF0b3IlPShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1w
bCBvcGVyYXRvcisrKGludCk7ICAvLyBwb3N0Zml4IGluY3JlbWVudDogaSsrCisgIEludDEyOElt
cGwgb3BlcmF0b3ItLShpbnQpOyAgLy8gcG9zdGZpeCBkZWNyZW1lbnQ6IGktLQorICBJbnQxMjhJ
bXBsJiBvcGVyYXRvcisrKCk7ICAgIC8vIHByZWZpeCBpbmNyZW1lbnQ6ICArK2kKKyAgSW50MTI4
SW1wbCYgb3BlcmF0b3ItLSgpOyAgICAvLyBwcmVmaXggZGVjcmVtZW50OiAgLS1pCisgIEludDEy
OEltcGwmIG9wZXJhdG9yJj0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJh
dG9yfD0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9yXj0oSW50MTI4
SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9yPDw9KGludCBhbW91bnQpOworICBJ
bnQxMjhJbXBsJiBvcGVyYXRvcj4+PShpbnQgYW1vdW50KTsKKworICAvLyBJbnQxMjhMb3c2NCgp
CisgIC8vCisgIC8vIFJldHVybnMgdGhlIGxvd2VyIDY0LWJpdCB2YWx1ZSBvZiBhIGBJbnQxMjhJ
bXBsYCB2YWx1ZS4KKyAgZnJpZW5kIGNvbnN0ZXhwciB1aW50NjRfdCBJbnQxMjhMb3c2NChJbnQx
MjhJbXBsIHYpOworCisgIC8vIEludDEyOEhpZ2g2NCgpCisgIC8vCisgIC8vIFJldHVybnMgdGhl
IGhpZ2hlciA2NC1iaXQgdmFsdWUgb2YgYSBgSW50MTI4SW1wbGAgdmFsdWUuCisgIGZyaWVuZCBj
b25zdGV4cHIgaW50NjRfdCBJbnQxMjhIaWdoNjQoSW50MTI4SW1wbCB2KTsKKworICAvLyBNYWtl
SW50MTI4KCkKKyAgLy8KKyAgLy8gQ29uc3RydWN0cyBhIGBJbnQxMjhJbXBsYCBudW1lcmljIHZh
bHVlIGZyb20gdHdvIDY0LWJpdCBpbnRlZ2Vycy4gTm90ZSB0aGF0CisgIC8vIHNpZ25lZG5lc3Mg
aXMgY29udmV5ZWQgaW4gdGhlIHVwcGVyIGBoaWdoYCB2YWx1ZS4KKyAgLy8KKyAgLy8gICAoSW50
MTI4SW1wbCgxKSA8PCA2NCkgKiBoaWdoICsgbG93CisgIC8vCisgIC8vIE5vdGUgdGhhdCB0aGlz
IGZhY3RvcnkgZnVuY3Rpb24gaXMgdGhlIG9ubHkgd2F5IHRvIGNvbnN0cnVjdCBhIGBJbnQxMjhJ
bXBsYAorICAvLyBmcm9tIGludGVnZXIgdmFsdWVzIGdyZWF0ZXIgdGhhbiAyXjY0IG9yIGxlc3Mg
dGhhbiAtMl42NC4KKyAgLy8KKyAgLy8gRXhhbXBsZToKKyAgLy8KKyAgLy8gICBJbnQxMjhJbXBs
IGJpZyA9IE1ha2VJbnQxMjgoMSwgMCk7CisgIC8vICAgSW50MTI4SW1wbCBiaWdfbiA9IE1ha2VJ
bnQxMjgoLTEsIDApOworICBmcmllbmQgY29uc3RleHByIEludDEyOEltcGwgTWFrZUludDEyOChp
bnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdyk7CisKKyAgLy8gSW50MTI4TWF4KCkKKyAgLy8KKyAg
Ly8gUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgYSAxMjgtYml0IHNpZ25lZCBpbnRlZ2Vy
LgorICBmcmllbmQgY29uc3RleHByIEludDEyOEltcGwgSW50MTI4TWF4KCk7CisKKyAgLy8gSW50
MTI4TWluKCkKKyAgLy8KKyAgLy8gUmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZSBmb3IgYSAxMjgt
Yml0IHNpZ25lZCBpbnRlZ2VyLgorICBmcmllbmQgY29uc3RleHByIEludDEyOEltcGwgSW50MTI4
TWluKCk7CisKKyBwcml2YXRlOgorICBjb25zdGV4cHIgSW50MTI4SW1wbChpbnQ2NF90IGhpZ2gs
IHVpbnQ2NF90IGxvdyk7CisKKyNpZiBDUFUoTElUVExFX0VORElBTikKKyAgdWludDY0X3QgbG9f
OworICBpbnQ2NF90IGhpXzsKKyNlbGlmIENQVShCSUdfRU5ESUFOKQorICBpbnQ2NF90IGhpXzsK
KyAgdWludDY0X3QgbG9fOworI2Vsc2UgIC8vIGJ5dGUgb3JkZXIKKyNlcnJvciAiVW5zdXBwb3J0
ZWQgYnl0ZSBvcmRlcjogbXVzdCBiZSBsaXR0bGUtZW5kaWFuIG9yIGJpZy1lbmRpYW4uIgorI2Vu
ZGlmICAvLyBieXRlIG9yZGVyCiB9OwogCitXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvc3RyZWFt
JiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIEludDEyOEltcGwgdik7CisKKy8vIFRPRE8o
YWJzbC10ZWFtKSBhZGQgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0mLCBJbnQxMjhJbXBsKQorCitj
b25zdGV4cHIgSW50MTI4SW1wbCBJbnQxMjhNYXgoKSB7CisgIHJldHVybiBJbnQxMjhJbXBsKChz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgpKCksCisgICAgICAgICAgICAgICAgKHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCkpOworfQorCitjb25zdGV4cHIgSW50
MTI4SW1wbCBJbnQxMjhNaW4oKSB7CisgIHJldHVybiBJbnQxMjhJbXBsKChzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptaW4pKCksIDApOworfQorCit9ICAvLyBuYW1lc3BhY2UgV1RGCisK
Ky8vIFNwZWNpYWxpemVkIG51bWVyaWNfbGltaXRzIGZvciBJbnQxMjhJbXBsLgorbmFtZXNwYWNl
IHN0ZCB7Cit0ZW1wbGF0ZSA8PgorY2xhc3MgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBs
PiB7CisgcHVibGljOgorICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0
cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNfZXhhY3QgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICBz
dGF0aWMgY29uc3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi
c2VudDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwor
ICBzdGF0aWMgY29uc3RleHByIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf
dG93YXJkX3plcm87CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK
KyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IGRp
Z2l0cyA9IDEyNzsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGlnaXRzMTAgPSAzODsKKyAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgcmFkaXggPSAyOworICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQgPSAwOwor
ICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgIHN0YXRpYyBjb25z
dGV4cHIgaW50IG1heF9leHBvbmVudCA9IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9l
eHBvbmVudDEwID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYXBzID0gbnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+Ojp0cmFwczsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRpbnluZXNz
X2JlZm9yZSA9IGZhbHNlOworCisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsICht
aW4pKCkgeyByZXR1cm4gV1RGOjpJbnQxMjhNaW4oKTsgfQorICBzdGF0aWMgY29uc3RleHByIFdU
Rjo6SW50MTI4SW1wbCBsb3dlc3QoKSB7IHJldHVybiBXVEY6OkludDEyOE1pbigpOyB9CisgIHN0
YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIChtYXgpKCkgeyByZXR1cm4gV1RGOjpJbnQx
MjhNYXgoKTsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBlcHNpbG9uKCkg
eyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCByb3VuZF9l
cnJvcigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwg
aW5maW5pdHkoKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJ
bXBsIHF1aWV0X05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6Oklu
dDEyOEltcGwgc2lnbmFsaW5nX05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhw
ciBXVEY6OkludDEyOEltcGwgZGVub3JtX21pbigpIHsgcmV0dXJuIDA7IH0KK307Cit9ICAvLyBu
YW1lc3BhY2Ugc3RkCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAg
ICAgICBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvbGxvdworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
K25hbWVzcGFjZSBXVEYgeworCitjb25zdGV4cHIgVUludDEyOEltcGwgTWFrZVVJbnQxMjgodWlu
dDY0X3QgaGlnaCwgdWludDY0X3QgbG93KSB7CisgIHJldHVybiBVSW50MTI4SW1wbChoaWdoLCBs
b3cpOworfQorCisvLyBBc3NpZ25tZW50IGZyb20gaW50ZWdlciB0eXBlcy4KKworaW5saW5lIFVJ
bnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KGludCB2KSB7IHJldHVybiAqdGhpcyA9
IFVJbnQxMjhJbXBsKHYpOyB9CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9w
ZXJhdG9yPSh1bnNpZ25lZCBpbnQgdikgeworICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2
KTsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KGxvbmcg
dikgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1w
bCh2KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgVUludDEy
OEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcj0odW5zaWduZWQgbG9uZyB2KSB7CisgIHJldHVy
biAqdGhpcyA9IFVJbnQxMjhJbXBsKHYpOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1l
L2ludCkKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yPShsb25nIGxv
bmcgdikgeworICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2KTsKK30KKworLy8gTk9MSU5U
TkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpv
cGVyYXRvcj0odW5zaWduZWQgbG9uZyBsb25nIHYpIHsKKyAgcmV0dXJuICp0aGlzID0gVUludDEy
OEltcGwodik7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9y
PShJbnQxMjhJbXBsIHYpIHsKKyAgcmV0dXJuICp0aGlzID0gVUludDEyOEltcGwodik7Cit9CisK
Ky8vIEFyaXRobWV0aWMgb3BlcmF0b3JzLgorCitjb25zdGV4cHIgVUludDEyOEltcGwgb3BlcmF0
b3I8PChVSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpOworY29uc3RleHByIFVJbnQxMjhJbXBs
IG9wZXJhdG9yPj4oVUludDEyOEltcGwgbGhzLCBpbnQgYW1vdW50KTsKK2NvbnN0ZXhwciBVSW50
MTI4SW1wbCBvcGVyYXRvcisoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpOworY29u
c3RleHByIFVJbnQxMjhJbXBsIG9wZXJhdG9yLShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBs
IHJocyk7CitVSW50MTI4SW1wbCBvcGVyYXRvciooVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1w
bCByaHMpOworV1RGX0VYUE9SVF9QUklWQVRFIFVJbnQxMjhJbXBsIG9wZXJhdG9yLyhVSW50MTI4
SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVUludDEyOElt
cGwgb3BlcmF0b3IlKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKTsKKworaW5saW5l
IFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I8PD0oaW50IGFtb3VudCkgeworICAq
dGhpcyA9ICp0aGlzIDw8IGFtb3VudDsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgVUlu
dDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcj4+PShpbnQgYW1vdW50KSB7CisgICp0aGlz
ID0gKnRoaXMgPj4gYW1vdW50OworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yKz0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyArIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yLT0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAtIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yKj0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAqIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yLz0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAvIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yJT0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAlIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2NvbnN0ZXhwciB1aW50
NjRfdCBVSW50MTI4TG93NjQoVUludDEyOEltcGwgdikgeyByZXR1cm4gdi5sb187IH0KKworY29u
c3RleHByIHVpbnQ2NF90IFVJbnQxMjhIaWdoNjQoVUludDEyOEltcGwgdikgeyByZXR1cm4gdi5o
aV87IH0KKworLy8gQ29uc3RydWN0b3JzIGZyb20gaW50ZWdlciB0eXBlcy4KKworI2lmIENQVShM
SVRUTEVfRU5ESUFOKQorCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKHVpbnQ2
NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykKKyAgICA6IGxvX3tsb3d9LCBoaV97aGlnaH0ge30KKwor
Y29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChpbnQgdikKKyAgICA6IGxvX3tzdGF0
aWNfY2FzdDx1aW50NjRfdD4odil9LAorICAgICAgaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+OjptYXgpKCkgOiAwfSB7fQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpV
SW50MTI4SW1wbChsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBsb197c3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwKKyAgICAgIGhpX3t2IDwgMCA/IChzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpIDogMH0ge30KK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6
VUludDEyOEltcGwobG9uZyBsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBs
b197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwKKyAgICAgIGhpX3t2IDwgMCA/IChzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpIDogMH0ge30KKworY29uc3RleHByIFVJbnQx
MjhJbXBsOjpVSW50MTI4SW1wbCh1bnNpZ25lZCBpbnQgdikgOiBsb197dn0sIGhpX3swfSB7fQor
Ly8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJ
bnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgdikgOiBsb197dn0sIGhpX3swfSB7fQorLy8gTk9MSU5U
TkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBs
KHVuc2lnbmVkIGxvbmcgbG9uZyB2KSA6IGxvX3t2fSwgaGlfezB9IHt9CisKK2NvbnN0ZXhwciBV
SW50MTI4SW1wbDo6VUludDEyOEltcGwoSW50MTI4SW1wbCB2KQorICAgIDogbG9fe0ludDEyOExv
dzY0KHYpfSwgaGlfe3N0YXRpY19jYXN0PHVpbnQ2NF90PihJbnQxMjhIaWdoNjQodikpfSB7fQor
CisjZWxpZiBDUFUoQklHX0VORElBTikKKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4
SW1wbCh1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpCisgICAgOiBoaV97aGlnaH0sIGxvX3ts
b3d9IHt9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwoaW50IHYpCisgICAg
OiBoaV97diA8IDAgPyAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSA6IDB9
LAorICAgICAgbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0ge30KK2NvbnN0ZXhwciBVSW50
MTI4SW1wbDo6VUludDEyOEltcGwobG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAg
IDogaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCkgOiAw
fSwKKyAgICAgIGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9IHt9Citjb25zdGV4cHIgVUlu
dDEyOEltcGw6OlVJbnQxMjhJbXBsKGxvbmcgbG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50
KQorICAgIDogaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgp
KCkgOiAwfSwKKyAgICAgIGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9IHt9CisKK2NvbnN0
ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwodW5zaWduZWQgaW50IHYpIDogaGlfezB9LCBs
b197dn0ge30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQx
MjhJbXBsOjpVSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpIDogaGlfezB9LCBsb197dn0ge30K
Ky8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpV
SW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxvbmcgdikgOiBoaV97MH0sIGxvX3t2fSB7fQorCitj
b25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKEludDEyOEltcGwgdikKKyAgICA6IGhp
X3tzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4SGlnaDY0KHYpKX0sIGxvX3tJbnQxMjhMb3c2
NCh2KX0ge30KKworI2Vsc2UgIC8vIGJ5dGUgb3JkZXIKKyNlcnJvciAiVW5zdXBwb3J0ZWQgYnl0
ZSBvcmRlcjogbXVzdCBiZSBsaXR0bGUtZW5kaWFuIG9yIGJpZy1lbmRpYW4uIgorI2VuZGlmICAv
LyBieXRlIG9yZGVyCisKKy8vIENvbnZlcnNpb24gb3BlcmF0b3JzIHRvIGludGVnZXIgdHlwZXMu
CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
IGxvXyB8fCBoaV87IH0KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4obG9fKTsgfQorCitjb25zdGV4cHIgVUlu
dDEyOEltcGw6Om9wZXJhdG9yIHNpZ25lZCBjaGFyKCkgY29uc3QgeworICByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2lnbmVkIGNoYXI+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3Bl
cmF0b3IgdW5zaWduZWQgY2hhcigpIGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgY2hh
cjE2X3QoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyMTZfdD4obG9fKTsKK30K
KworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMzJfdCgpIGNvbnN0IHsKKyAg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXIzMl90Pihsb18pOworfQorCitjb25zdGV4cHIgVUludDEy
OEltcGw6Om9wZXJhdG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCgpIGNvbnN0IHsKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PEFCU0xfSU5URVJOQUxfV0NIQVJfVD4obG9fKTsKK30KKworLy8gTk9MSU5U
TkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIHNo
b3J0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KGxvXyk7IH0KKworY29uc3Rl
eHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCgpIGNvbnN0IHsgIC8vIE5P
TElOVChydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihs
b18pOyAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKK30KKworY29uc3RleHByIFVJ
bnQxMjhJbXBsOjpvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KGxvXyk7IH0KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBpbnQo
KSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGxvXyk7Cit9CisK
Ky8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpv
cGVyYXRvciBsb25nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4obG9fKTsgfQor
Citjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGxvbmcoKSBjb25zdCB7
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihsb18pOyAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKK30KKworY29uc3Rl
eHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGxvbmcoKSBjb25zdCB7ICAvLyBOT0xJTlQo
cnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGxvXyk7ICAgICAg
ICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorfQorCitjb25zdGV4cHIgVUludDEyOEltcGw6
Om9wZXJhdG9yIHVuc2lnbmVkIGxvbmcgbG9uZygpIGNvbnN0IHsgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obG9fKTsgICAg
ICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9CisKKy8vIENvbnZlcnNpb24gb3BlcmF0
b3JzIHRvIGZsb2F0aW5nIHBvaW50IHR5cGVzLgorCitpbmxpbmUgVUludDEyOEltcGw6Om9wZXJh
dG9yIGZsb2F0KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvXykgKyBz
dGQ6OmxkZXhwKHN0YXRpY19jYXN0PGZsb2F0PihoaV8pLCA2NCk7Cit9CisKK2lubGluZSBVSW50
MTI4SW1wbDo6b3BlcmF0b3IgZG91YmxlKCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihsb18pICsgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxkb3VibGU+KGhpXyksIDY0KTsK
K30KKworaW5saW5lIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJsZSgpIGNvbnN0IHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPihsb18pICsKKyAgICAgICAgIHN0ZDo6
bGRleHAoc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KGhpXyksIDY0KTsKK30KKworLy8gQ29tcGFy
aXNvbiBvcGVyYXRvcnMuCisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oVUludDEyOEltcGwg
bGhzLCBVSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIChVSW50MTI4TG93NjQobGhzKSA9PSBV
SW50MTI4TG93NjQocmhzKSAmJgorICAgICAgICAgIFVJbnQxMjhIaWdoNjQobGhzKSA9PSBVSW50
MTI4SGlnaDY0KHJocykpOworfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KFVJbnQxMjhJ
bXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7IHJldHVybiAhKGxocyA9PSByaHMpOyB9CisKK2Nv
bnN0ZXhwciBib29sIG9wZXJhdG9yPChVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykg
eworICByZXR1cm4gKFVJbnQxMjhIaWdoNjQobGhzKSA9PSBVSW50MTI4SGlnaDY0KHJocykpCisg
ICAgICAgICAgICAgPyAoVUludDEyOExvdzY0KGxocykgPCBVSW50MTI4TG93NjQocmhzKSkKKyAg
ICAgICAgICAgICA6IChVSW50MTI4SGlnaDY0KGxocykgPCBVSW50MTI4SGlnaDY0KHJocykpOwor
fQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1w
bCByaHMpIHsgcmV0dXJuIHJocyA8IGxoczsgfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9
KFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7IHJldHVybiAhKHJocyA8IGxocyk7
IH0KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJ
bXBsIHJocykgeyByZXR1cm4gIShsaHMgPCByaHMpOyB9CisKKy8vIFVuYXJ5IG9wZXJhdG9ycy4K
KworY29uc3RleHByIGlubGluZSBVSW50MTI4SW1wbCBvcGVyYXRvcisoVUludDEyOEltcGwgdmFs
KSB7CisgIHJldHVybiB2YWw7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgSW50MTI4SW1wbCBvcGVy
YXRvcisoSW50MTI4SW1wbCB2YWwpIHsKKyAgcmV0dXJuIHZhbDsKK30KKworY29uc3RleHByIFVJ
bnQxMjhJbXBsIG9wZXJhdG9yLShVSW50MTI4SW1wbCB2YWwpIHsKKyAgcmV0dXJuIE1ha2VVSW50
MTI4KAorICAgICAgflVJbnQxMjhIaWdoNjQodmFsKSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KFVJbnQxMjhMb3c2NCh2YWwpID09IDApLAorICAgICAgflVJbnQxMjhMb3c2NCh2YWwpICsg
MSk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvciEoVUludDEyOEltcGwgdmFs
KSB7CisgIHJldHVybiAhVUludDEyOEhpZ2g2NCh2YWwpICYmICFVSW50MTI4TG93NjQodmFsKTsK
K30KKworLy8gTG9naWNhbCBvcGVyYXRvcnMuCisKK2NvbnN0ZXhwciBpbmxpbmUgVUludDEyOElt
cGwgb3BlcmF0b3J+KFVJbnQxMjhJbXBsIHZhbCkgeworICByZXR1cm4gTWFrZVVJbnQxMjgoflVJ
bnQxMjhIaWdoNjQodmFsKSwgflVJbnQxMjhMb3c2NCh2YWwpKTsKK30KKworY29uc3RleHByIGlu
bGluZSBVSW50MTI4SW1wbCBvcGVyYXRvcnwoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCBy
aHMpIHsKKyAgcmV0dXJuIE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQobGhzKSB8IFVJbnQxMjhI
aWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpIHwgVUlu
dDEyOExvdzY0KHJocykpOworfQorCitjb25zdGV4cHIgaW5saW5lIFVJbnQxMjhJbXBsIG9wZXJh
dG9yJihVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gTWFrZVVJ
bnQxMjgoVUludDEyOEhpZ2g2NChsaHMpICYgVUludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAg
ICAgICAgICAgICAgVUludDEyOExvdzY0KGxocykgJiBVSW50MTI4TG93NjQocmhzKSk7Cit9CisK
K2NvbnN0ZXhwciBpbmxpbmUgVUludDEyOEltcGwgb3BlcmF0b3JeKFVJbnQxMjhJbXBsIGxocywg
VUludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtlVUludDEyOChVSW50MTI4SGlnaDY0KGxo
cykgXiBVSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICAgICBVSW50MTI4TG93
NjQobGhzKSBeIFVJbnQxMjhMb3c2NChyaHMpKTsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBV
SW50MTI4SW1wbDo6b3BlcmF0b3J8PShVSW50MTI4SW1wbCBvdGhlcikgeworICAqdGhpcyA9ICp0
aGlzIHwgb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBV
SW50MTI4SW1wbDo6b3BlcmF0b3ImPShVSW50MTI4SW1wbCBvdGhlcikgeworICAqdGhpcyA9ICp0
aGlzICYgb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBV
SW50MTI4SW1wbDo6b3BlcmF0b3JePShVSW50MTI4SW1wbCBvdGhlcikgeworICAqdGhpcyA9ICp0
aGlzIF4gb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworLy8gQXJpdGhtZXRpYyBvcGVyYXRv
cnMuCisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbCBvcGVyYXRvcjw8KFVJbnQxMjhJbXBsIGxocywg
aW50IGFtb3VudCkgeworICAvLyB1aW50NjRfdCBzaGlmdHMgb2YgPj0gNjQgYXJlIHVuZGVmaW5l
ZCwgc28gd2Ugd2lsbCBuZWVkIHNvbWUKKyAgLy8gc3BlY2lhbC1jYXNpbmcuCisgIHJldHVybiBh
bW91bnQgPj0gNjQgPyBNYWtlVUludDEyOChVSW50MTI4TG93NjQobGhzKSA8PCAoYW1vdW50IC0g
NjQpLCAwKQorICAgICAgICAgOiBhbW91bnQgPT0gMCA/IGxocworICAgICAgICAgICAgICAgICAg
ICAgICA6IE1ha2VVSW50MTI4KChVSW50MTI4SGlnaDY0KGxocykgPDwgYW1vdW50KSB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSW50MTI4TG93NjQobGhzKSA+
PiAoNjQgLSBhbW91bnQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
SW50MTI4TG93NjQobGhzKSA8PCBhbW91bnQpOworfQorCitjb25zdGV4cHIgVUludDEyOEltcGwg
b3BlcmF0b3I+PihVSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAgLy8gdWludDY0X3Qg
c2hpZnRzIG9mID49IDY0IGFyZSB1bmRlZmluZWQsIHNvIHdlIHdpbGwgbmVlZCBzb21lCisgIC8v
IHNwZWNpYWwtY2FzaW5nLgorICByZXR1cm4gYW1vdW50ID49IDY0ID8gTWFrZVVJbnQxMjgoMCwg
VUludDEyOEhpZ2g2NChsaHMpID4+IChhbW91bnQgLSA2NCkpCisgICAgICAgICA6IGFtb3VudCA9
PSAwID8gbGhzCisgICAgICAgICAgICAgICAgICAgICAgIDogTWFrZVVJbnQxMjgoVUludDEyOEhp
Z2g2NChsaHMpID4+IGFtb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoVUludDEyOExvdzY0KGxocykgPj4gYW1vdW50KSB8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChVSW50MTI4SGlnaDY0KGxocykgPDwgKDY0IC0gYW1vdW50KSkp
OworfQorCituYW1lc3BhY2UgaW50MTI4X2ludGVybmFsIHsKK2NvbnN0ZXhwciBVSW50MTI4SW1w
bCBBZGRSZXN1bHQoVUludDEyOEltcGwgcmVzdWx0LCBVSW50MTI4SW1wbCBsaHMpIHsKKyAgLy8g
Y2hlY2sgZm9yIGNhcnJ5CisgIHJldHVybiAoVUludDEyOExvdzY0KHJlc3VsdCkgPCBVSW50MTI4
TG93NjQobGhzKSkKKyAgICAgICAgICAgICA/IE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQocmVz
dWx0KSArIDEsIFVJbnQxMjhMb3c2NChyZXN1bHQpKQorICAgICAgICAgICAgIDogcmVzdWx0Owor
fQorfSAgLy8gbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbAorCitjb25zdGV4cHIgVUludDEyOElt
cGwgb3BlcmF0b3IrKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIHJldHVy
biBpbnQxMjhfaW50ZXJuYWw6OkFkZFJlc3VsdCgKKyAgICAgIE1ha2VVSW50MTI4KFVJbnQxMjhI
aWdoNjQobGhzKSArIFVJbnQxMjhIaWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgIFVJbnQx
MjhMb3c2NChsaHMpICsgVUludDEyOExvdzY0KHJocykpLAorICAgICAgbGhzKTsKK30KKworbmFt
ZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7Citjb25zdGV4cHIgVUludDEyOEltcGwgU3Vic3RydWN0
UmVzdWx0KFVJbnQxMjhJbXBsIHJlc3VsdCwgVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCBy
aHMpIHsKKyAgLy8gY2hlY2sgZm9yIGNhcnJ5CisgIHJldHVybiAoVUludDEyOExvdzY0KGxocykg
PCBVSW50MTI4TG93NjQocmhzKSkKKyAgICAgICAgICAgICA/IE1ha2VVSW50MTI4KFVJbnQxMjhI
aWdoNjQocmVzdWx0KSAtIDEsIFVJbnQxMjhMb3c2NChyZXN1bHQpKQorICAgICAgICAgICAgIDog
cmVzdWx0OworfQorfSAgLy8gbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbAorCitjb25zdGV4cHIg
VUludDEyOEltcGwgb3BlcmF0b3ItKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7
CisgIHJldHVybiBpbnQxMjhfaW50ZXJuYWw6OlN1YnN0cnVjdFJlc3VsdCgKKyAgICAgIE1ha2VV
SW50MTI4KFVJbnQxMjhIaWdoNjQobGhzKSAtIFVJbnQxMjhIaWdoNjQocmhzKSwKKyAgICAgICAg
ICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpIC0gVUludDEyOExvdzY0KHJocykpLAorICAgICAg
bGhzLCByaHMpOworfQorCitpbmxpbmUgVUludDEyOEltcGwgb3BlcmF0b3IqKFVJbnQxMjhJbXBs
IGxocywgVUludDEyOEltcGwgcmhzKSB7CisjaWYgQ09NUElMRVIoTVNWQykgJiYgQ1BVKFg4Nl82
NCkKKyAgdWludDY0X3QgY2Fycnk7CisgIHVpbnQ2NF90IGxvdyA9IF91bXVsMTI4KFVJbnQxMjhM
b3c2NChsaHMpLCBVSW50MTI4TG93NjQocmhzKSwgJmNhcnJ5KTsKKyAgcmV0dXJuIE1ha2VVSW50
MTI4KFVJbnQxMjhMb3c2NChsaHMpICogVUludDEyOEhpZ2g2NChyaHMpICsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBVSW50MTI4SGlnaDY0KGxocykgKiBVSW50MTI4TG93NjQocmhzKSArIGNh
cnJ5LAorICAgICAgICAgICAgICAgICAgICAgbG93KTsKKyNlbHNlICAgLy8gQUJTTF9IQVZFX0lO
VFJJTlNJQzEyOAorICB1aW50NjRfdCBhMzIgPSBVSW50MTI4TG93NjQobGhzKSA+PiAzMjsKKyAg
dWludDY0X3QgYTAwID0gVUludDEyOExvdzY0KGxocykgJiAweGZmZmZmZmZmOworICB1aW50NjRf
dCBiMzIgPSBVSW50MTI4TG93NjQocmhzKSA+PiAzMjsKKyAgdWludDY0X3QgYjAwID0gVUludDEy
OExvdzY0KHJocykgJiAweGZmZmZmZmZmOworICBVSW50MTI4SW1wbCByZXN1bHQgPQorICAgICAg
TWFrZVVJbnQxMjgoVUludDEyOEhpZ2g2NChsaHMpICogVUludDEyOExvdzY0KHJocykgKworICAg
ICAgICAgICAgICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpICogVUludDEyOEhpZ2g2NChyaHMp
ICsgYTMyICogYjMyLAorICAgICAgICAgICAgICAgICAgYTAwICogYjAwKTsKKyAgcmVzdWx0ICs9
IFVJbnQxMjhJbXBsKGEzMiAqIGIwMCkgPDwgMzI7CisgIHJlc3VsdCArPSBVSW50MTI4SW1wbChh
MDAgKiBiMzIpIDw8IDMyOworICByZXR1cm4gcmVzdWx0OworI2VuZGlmCit9CisKKy8vIEluY3Jl
bWVudC9kZWNyZW1lbnQgb3BlcmF0b3JzLgorCitpbmxpbmUgVUludDEyOEltcGwgVUludDEyOElt
cGw6Om9wZXJhdG9yKysoaW50KSB7CisgIFVJbnQxMjhJbXBsIHRtcCgqdGhpcyk7CisgICp0aGlz
ICs9IDE7CisgIHJldHVybiB0bXA7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCBVSW50MTI4SW1w
bDo6b3BlcmF0b3ItLShpbnQpIHsKKyAgVUludDEyOEltcGwgdG1wKCp0aGlzKTsKKyAgKnRoaXMg
LT0gMTsKKyAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1w
bDo6b3BlcmF0b3IrKygpIHsKKyAgKnRoaXMgKz0gMTsKKyAgcmV0dXJuICp0aGlzOworfQorCitp
bmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvci0tKCkgeworICAqdGhpcyAt
PSAxOworICByZXR1cm4gKnRoaXM7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIE1ha2VJbnQx
MjgoaW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpIHsKKyAgcmV0dXJuIEludDEyOEltcGwoaGln
aCwgbG93KTsKK30KKworLy8gQXNzaWdubWVudCBmcm9tIGludGVnZXIgdHlwZXMuCitpbmxpbmUg
SW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KGludCB2KSB7CisgIHJldHVybiAqdGhp
cyA9IEludDEyOEltcGwodik7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpv
cGVyYXRvcj0odW5zaWduZWQgaW50IHYpIHsKKyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2
KTsKK30KKworaW5saW5lIEludDEyOEltcGwmIEludDEyOEltcGw6Om9wZXJhdG9yPShsb25nIHYp
IHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2
KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgSW50MTI4SW1w
bCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgdikgeworICByZXR1cm4gKnRo
aXMgPSBJbnQxMjhJbXBsKHYpOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkK
K2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcj0obG9uZyBsb25nIHYpIHsK
KyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUo
cnVudGltZS9pbnQpCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KHVu
c2lnbmVkIGxvbmcgbG9uZyB2KSB7CisgIHJldHVybiAqdGhpcyA9IEludDEyOEltcGwodik7Cit9
CisKKy8vIEFyaXRobWV0aWMgb3BlcmF0b3JzLgorY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3ItKEludDEyOEltcGwgdik7Citjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcisoSW50MTI4
SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9y
LShJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworSW50MTI4SW1wbCBvcGVyYXRvcioo
SW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsKK1dURl9FWFBPUlRfUFJJVkFURSBJbnQx
MjhJbXBsIG9wZXJhdG9yLyhJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworV1RGX0VY
UE9SVF9QUklWQVRFIEludDEyOEltcGwgb3BlcmF0b3IlKEludDEyOEltcGwgbGhzLCBJbnQxMjhJ
bXBsIHJocyk7Citjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcnwoSW50MTI4SW1wbCBsaHMs
IEludDEyOEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yJihJbnQxMjhJ
bXBsIGxocywgSW50MTI4SW1wbCByaHMpOworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3Je
KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocyk7Citjb25zdGV4cHIgSW50MTI4SW1wbCBv
cGVyYXRvcjw8KEludDEyOEltcGwgbGhzLCBpbnQgYW1vdW50KTsKK2NvbnN0ZXhwciBJbnQxMjhJ
bXBsIG9wZXJhdG9yPj4oSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpOworCitpbmxpbmUgSW50
MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3IrPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0
aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4
SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3ItPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlz
ID0gKnRoaXMgLSBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1w
bCYgSW50MTI4SW1wbDo6b3BlcmF0b3IqPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0g
KnRoaXMgKiBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYg
SW50MTI4SW1wbDo6b3BlcmF0b3IvPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRo
aXMgLyBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50
MTI4SW1wbDo6b3BlcmF0b3IlPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMg
JSBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4
SW1wbDo6b3BlcmF0b3J8PShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgfCBv
dGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1w
bDo6b3BlcmF0b3ImPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgJiBvdGhl
cjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6
b3BlcmF0b3JePShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgXiBvdGhlcjsK
KyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3Bl
cmF0b3I8PD0oaW50IGFtb3VudCkgeworICAqdGhpcyA9ICp0aGlzIDw8IGFtb3VudDsKKyAgcmV0
dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I+
Pj0oaW50IGFtb3VudCkgeworICAqdGhpcyA9ICp0aGlzID4+IGFtb3VudDsKKyAgcmV0dXJuICp0
aGlzOworfQorCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIGZvciBjb21wYXJpc29uIG9wZXJhdG9y
cy4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwg
cmhzKTsKKworbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7CisKKy8vIENhc3RzIGZyb20gdW5z
aWduZWQgdG8gc2lnbmVkIHdoaWxlIHByZXNlcnZpbmcgdGhlIHVuZGVybHlpbmcgYmluYXJ5Cisv
LyByZXByZXNlbnRhdGlvbi4KK2NvbnN0ZXhwciBpbnQ2NF90IEJpdENhc3RUb1NpZ25lZCh1aW50
NjRfdCB2KSB7CisgIC8vIENhc3RpbmcgYW4gdW5zaWduZWQgaW50ZWdlciB0byBhIHNpZ25lZCBp
bnRlZ2VyIG9mIHRoZSBzYW1lCisgIC8vIHdpZHRoIGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQg
YmVoYXZpb3IgaWYgdGhlIHNvdXJjZSB2YWx1ZSB3b3VsZCBub3QgZml0CisgIC8vIGluIHRoZSBk
ZXN0aW5hdGlvbiB0eXBlLiBXZSBzdGVwIGFyb3VuZCBpdCB3aXRoIGEgcm91bmR0cmlwIGJpdHdp
c2Ugbm90CisgIC8vIG9wZXJhdGlvbiB0byBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiByZW1haW5z
IGNvbnN0ZXhwci4gQ2xhbmcsIEdDQywgYW5kCisgIC8vIE1TVkMgb3B0aW1pemUgdGhpcyB0byBh
IG5vLW9wIG9uIHg4Ni02NC4KKyAgcmV0dXJuIHYgJiAodWludDY0X3R7MX0gPDwgNjMpID8gfnN0
YXRpY19jYXN0PGludDY0X3Q+KH52KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGludDEyOF9p
bnRlcm5hbAorCisvLyAjaW5jbHVkZSAiYWJzbC9udW1lcmljL2ludDEyOF9ub19pbnRyaW5zaWMu
aW5jIiAgLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCitjb25zdGV4cHIgdWludDY0X3QgSW50MTI4
TG93NjQoSW50MTI4SW1wbCB2KSB7IHJldHVybiB2LmxvXzsgfQorCitjb25zdGV4cHIgaW50NjRf
dCBJbnQxMjhIaWdoNjQoSW50MTI4SW1wbCB2KSB7IHJldHVybiB2LmhpXzsgfQorCisjaWYgQ1BV
KExJVFRMRV9FTkRJQU4pCisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGludDY0
X3QgaGlnaCwgdWludDY0X3QgbG93KSA6CisgICAgbG9fKGxvdyksIGhpXyhoaWdoKSB7fQorCitj
b25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChpbnQgdikKKyAgICA6IGxvX3tzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odil9LCBoaV97diA8IDAgPyB+aW50NjRfdHswfSA6IDB9IHt9Citjb25z
dGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9p
bnQpCisgICAgOiBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwgaGlfe3YgPCAwID8gfmlu
dDY0X3R7MH0gOiAwfSB7fQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwobG9uZyBs
b25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBsb197c3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHYpfSwgaGlfe3YgPCAwID8gfmludDY0X3R7MH0gOiAwfSB7fQorCitjb25zdGV4cHIg
SW50MTI4SW1wbDo6SW50MTI4SW1wbCh1bnNpZ25lZCBpbnQgdikgOiBsb197dn0sIGhpX3swfSB7
fQorLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgSW50MTI4SW1wbDo6
SW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpIDogbG9fe3Z9LCBoaV97MH0ge30KKy8vIE5PTElO
VE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwo
dW5zaWduZWQgbG9uZyBsb25nIHYpIDogbG9fe3Z9LCBoaV97MH0ge30KKworY29uc3RleHByIElu
dDEyOEltcGw6OkludDEyOEltcGwoVUludDEyOEltcGwgdikKKyAgICA6IGxvX3tVSW50MTI4TG93
NjQodil9LCBoaV97c3RhdGljX2Nhc3Q8aW50NjRfdD4oVUludDEyOEhpZ2g2NCh2KSl9IHt9CisK
KyNlbGlmIENQVShCSUdfRU5ESUFOKQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1w
bChpbnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykgOgorICAgIGhpX3toaWdofSwgbG9fe2xvd30g
e30KKworY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwoaW50IHYpCisgICAgOiBoaV97
diA8IDAgPyB+aW50NjRfdHswfSA6IDB9LCBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSB7
fQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwobG9uZyB2KSAgLy8gTk9MSU5UKHJ1
bnRpbWUvaW50KQorICAgIDogaGlfe3YgPCAwID8gfmludDY0X3R7MH0gOiAwfSwgbG9fe3N0YXRp
Y19jYXN0PHVpbnQ2NF90Pih2KX0ge30KK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KGxvbmcgbG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIDogaGlfe3YgPCAwID8g
fmludDY0X3R7MH0gOiAwfSwgbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0ge30KKworY29u
c3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwodW5zaWduZWQgaW50IHYpIDogaGlfezB9LCBs
b197dn0ge30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIEludDEy
OEltcGw6OkludDEyOEltcGwodW5zaWduZWQgbG9uZyB2KSA6IGhpX3swfSwgbG9fe3Z9IHt9Cisv
LyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQx
MjhJbXBsKHVuc2lnbmVkIGxvbmcgbG9uZyB2KSA6IGhpX3swfSwgbG9fe3Z9IHt9CisKK2NvbnN0
ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKFVJbnQxMjhJbXBsIHYpCisgICAgOiBoaV97c3Rh
dGljX2Nhc3Q8aW50NjRfdD4oVUludDEyOEhpZ2g2NCh2KSl9LCBsb197VUludDEyOExvdzY0KHYp
fSB7fQorCisjZWxzZSAgLy8gYnl0ZSBvcmRlcgorI2Vycm9yICJVbnN1cHBvcnRlZCBieXRlIG9y
ZGVyOiBtdXN0IGJlIGxpdHRsZS1lbmRpYW4gb3IgYmlnLWVuZGlhbi4iCisjZW5kaWYgIC8vIGJ5
dGUgb3JkZXIKKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBsb18gfHwgaGlfOyB9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBj
aGFyKCkgY29uc3QgeworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PGNoYXI+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsKK30KKwor
Y29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHNpZ25lZCBjaGFyKCkgY29uc3QgeworICAv
LyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25l
ZCBjaGFyPihzdGF0aWNfY2FzdDxsb25nIGxvbmc+KCp0aGlzKSk7Cit9CisKK2NvbnN0ZXhwciBJ
bnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBjaGFyKCkgY29uc3QgeworICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obG9fKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6
Om9wZXJhdG9yIGNoYXIxNl90KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcjE2
X3Q+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMzJfdCgp
IGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIzMl90Pihsb18pOworfQorCitjb25z
dGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UKCkgY29uc3Qg
eworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0
PEFCU0xfSU5URVJOQUxfV0NIQVJfVD4oc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigqdGhpcykpOwor
fQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3Igc2hvcnQoKSBjb25zdCB7ICAvLyBO
T0xJTlQocnVudGltZS9pbnQpCisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsK
K30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIHNob3J0KCkgY29u
c3QgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQ+KGxvXyk7ICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9CisKK2Nv
bnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBpbnQoKSBjb25zdCB7CisgIC8vIE5PTElOVE5F
WFRMSU5FKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KCp0aGlzKSk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRv
ciB1bnNpZ25lZCBpbnQoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBp
bnQ+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nKCkgY29u
c3QgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBOT0xJTlRORVhUTElORShydW50aW1l
L2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4o
KnRoaXMpKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGxv
bmcoKSBjb25zdCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihsb18pOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQor
fQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3QgeyAg
Ly8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBXZSBkb24ndCBib3RoZXIgY2hlY2tpbmcgdGhl
IHZhbHVlIG9mIGhpXy4gSWYgKnRoaXMgPCAwLCBsb18ncyBoaWdoIGJpdAorICAvLyBtdXN0IGJl
IHNldCBpbiBvcmRlciBmb3IgdGhlIHZhbHVlIHRvIGZpdCBpbnRvIGEgbG9uZyBsb25nLiBDb252
ZXJzZWx5LCBpZgorICAvLyBsb18ncyBoaWdoIGJpdCBpcyBzZXQsICp0aGlzIG11c3QgYmUgPCAw
IGZvciB0aGUgdmFsdWUgdG8gZml0LgorICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpCaXRDYXN0
VG9TaWduZWQobG9fKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2ln
bmVkIGxvbmcgbG9uZygpIGNvbnN0IHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obG9fKTsgICAgICAgICAgIC8vIE5PTElO
VChydW50aW1lL2ludCkKK30KKworaW5saW5lIEludDEyOEltcGw6Om9wZXJhdG9yIGZsb2F0KCkg
Y29uc3QgeworICAvLyBXZSBtdXN0IGNvbnZlcnQgdGhlIGFic29sdXRlIHZhbHVlIGFuZCB0aGVu
IG5lZ2F0ZSBhcyBuZWVkZWQsIGJlY2F1c2UKKyAgLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXMgYXJl
IHR5cGljYWxseSBzaWduLW1hZ25pdHVkZS4gT3RoZXJ3aXNlLCB0aGUKKyAgLy8gZGlmZmVyZW5j
ZSBiZXR3ZWVuIHRoZSBoaWdoIGFuZCBsb3cgNjQgYml0cyB3aGVuIGludGVycHJldGVkIGFzIHR3
bydzCisgIC8vIGNvbXBsZW1lbnQgb3ZlcndoZWxtcyB0aGUgcHJlY2lzaW9uIG9mIHRoZSBtYW50
aXNzYS4KKyAgLy8KKyAgLy8gQWxzbyBjaGVjayB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbmVnYXRl
IEludDEyOE1pbigpCisgIHJldHVybiBoaV8gPCAwICYmICp0aGlzICE9IEludDEyOE1pbigpCisg
ICAgICAgICAgICAgPyAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0qdGhpcykKKyAgICAgICAgICAgICA6
IHN0YXRpY19jYXN0PGZsb2F0Pihsb18pICsKKyAgICAgICAgICAgICAgICAgICBzdGQ6OmxkZXhw
KHN0YXRpY19jYXN0PGZsb2F0PihoaV8pLCA2NCk7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsOjpv
cGVyYXRvciBkb3VibGUoKSBjb25zdCB7CisgIC8vIFNlZSBjb21tZW50IGluIEludDEyOEltcGw6
Om9wZXJhdG9yIGZsb2F0KCkgYWJvdmUuCisgIHJldHVybiBoaV8gPCAwICYmICp0aGlzICE9IElu
dDEyOE1pbigpCisgICAgICAgICAgICAgPyAtc3RhdGljX2Nhc3Q8ZG91YmxlPigtKnRoaXMpCisg
ICAgICAgICAgICAgOiBzdGF0aWNfY2FzdDxkb3VibGU+KGxvXykgKworICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihoaV8pLCA2NCk7Cit9CisKK2lubGlu
ZSBJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJsZSgpIGNvbnN0IHsKKyAgLy8gU2VlIGNv
bW1lbnQgaW4gSW50MTI4SW1wbDo6b3BlcmF0b3IgZmxvYXQoKSBhYm92ZS4KKyAgcmV0dXJuIGhp
XyA8IDAgJiYgKnRoaXMgIT0gSW50MTI4TWluKCkKKyAgICAgICAgICAgICA/IC1zdGF0aWNfY2Fz
dDxsb25nIGRvdWJsZT4oLSp0aGlzKQorICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8bG9uZyBk
b3VibGU+KGxvXykgKworICAgICAgICAgICAgICAgICAgIHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8
bG9uZyBkb3VibGU+KGhpXyksIDY0KTsKK30KKworLy8gQ29tcGFyaXNvbiBvcGVyYXRvcnMuCisK
K2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhz
KSB7CisgIHJldHVybiAoSW50MTI4TG93NjQobGhzKSA9PSBJbnQxMjhMb3c2NChyaHMpICYmCisg
ICAgICAgICAgSW50MTI4SGlnaDY0KGxocykgPT0gSW50MTI4SGlnaDY0KHJocykpOworfQorCitj
b25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eyByZXR1cm4gIShsaHMgPT0gcmhzKTsgfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoSW50
MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiAoSW50MTI4SGlnaDY0KGxo
cykgPT0gSW50MTI4SGlnaDY0KHJocykpCisgICAgICAgICAgICAgPyAoSW50MTI4TG93NjQobGhz
KSA8IEludDEyOExvdzY0KHJocykpCisgICAgICAgICAgICAgOiAoSW50MTI4SGlnaDY0KGxocykg
PCBJbnQxMjhIaWdoNjQocmhzKSk7Cit9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPihJbnQx
MjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIChJbnQxMjhIaWdoNjQobGhz
KSA9PSBJbnQxMjhIaWdoNjQocmhzKSkKKyAgICAgICAgICAgICA/IChJbnQxMjhMb3c2NChsaHMp
ID4gSW50MTI4TG93NjQocmhzKSkKKyAgICAgICAgICAgICA6IChJbnQxMjhIaWdoNjQobGhzKSA+
IEludDEyOEhpZ2g2NChyaHMpKTsKK30KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShJbnQx
MjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsgcmV0dXJuICEobGhzID4gcmhzKTsgfQorCitj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eyByZXR1cm4gIShsaHMgPCByaHMpOyB9CisKKy8vIFVuYXJ5IG9wZXJhdG9ycy4KKworY29uc3Rl
eHByIEludDEyOEltcGwgb3BlcmF0b3ItKEludDEyOEltcGwgdikgeworICByZXR1cm4gTWFrZUlu
dDEyOCh+SW50MTI4SGlnaDY0KHYpICsgKEludDEyOExvdzY0KHYpID09IDApLAorICAgICAgICAg
ICAgICAgICAgICB+SW50MTI4TG93NjQodikgKyAxKTsKK30KKworY29uc3RleHByIGJvb2wgb3Bl
cmF0b3IhKEludDEyOEltcGwgdikgeworICByZXR1cm4gIUludDEyOExvdzY0KHYpICYmICFJbnQx
MjhIaWdoNjQodik7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yfihJbnQxMjhJ
bXBsIHZhbCkgeworICByZXR1cm4gTWFrZUludDEyOCh+SW50MTI4SGlnaDY0KHZhbCksIH5JbnQx
MjhMb3c2NCh2YWwpKTsKK30KKworLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMuCisKK25hbWVzcGFj
ZSBpbnQxMjhfaW50ZXJuYWwgeworY29uc3RleHByIEludDEyOEltcGwgU2lnbmVkQWRkUmVzdWx0
KEludDEyOEltcGwgcmVzdWx0LCBJbnQxMjhJbXBsIGxocykgeworICAvLyBjaGVjayBmb3IgY2Fy
cnkKKyAgcmV0dXJuIChJbnQxMjhMb3c2NChyZXN1bHQpIDwgSW50MTI4TG93NjQobGhzKSkKKyAg
ICAgICAgICAgICA/IE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KHJlc3VsdCkgKyAxLCBJbnQxMjhM
b3c2NChyZXN1bHQpKQorICAgICAgICAgICAgIDogcmVzdWx0OworfQorfSAgLy8gbmFtZXNwYWNl
IGludDEyOF9pbnRlcm5hbAorY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKEludDEyOElt
cGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpTaWdu
ZWRBZGRSZXN1bHQoCisgICAgICBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChsaHMpICsgSW50MTI4
SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgIEludDEyOExvdzY0KGxocykgKyBJbnQxMjhM
b3c2NChyaHMpKSwKKyAgICAgIGxocyk7Cit9CisKK25hbWVzcGFjZSBpbnQxMjhfaW50ZXJuYWwg
eworY29uc3RleHByIEludDEyOEltcGwgU2lnbmVkU3Vic3RydWN0UmVzdWx0KEludDEyOEltcGwg
cmVzdWx0LCBJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgLy8gY2hlY2sgZm9y
IGNhcnJ5CisgIHJldHVybiAoSW50MTI4TG93NjQobGhzKSA8IEludDEyOExvdzY0KHJocykpCisg
ICAgICAgICAgICAgPyBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChyZXN1bHQpIC0gMSwgSW50MTI4
TG93NjQocmVzdWx0KSkKKyAgICAgICAgICAgICA6IHJlc3VsdDsKK30KK30gIC8vIG5hbWVzcGFj
ZSBpbnQxMjhfaW50ZXJuYWwKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yLShJbnQxMjhJ
bXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIGludDEyOF9pbnRlcm5hbDo6U2ln
bmVkU3Vic3RydWN0UmVzdWx0KAorICAgICAgTWFrZUludDEyOChJbnQxMjhIaWdoNjQobGhzKSAt
IEludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAgICAgICAgICBJbnQxMjhMb3c2NChsaHMpIC0g
SW50MTI4TG93NjQocmhzKSksCisgICAgICBsaHMsIHJocyk7Cit9CisKK2lubGluZSBJbnQxMjhJ
bXBsIG9wZXJhdG9yKihJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJu
IE1ha2VJbnQxMjgoCisgICAgICBpbnQxMjhfaW50ZXJuYWw6OkJpdENhc3RUb1NpZ25lZChVSW50
MTI4SGlnaDY0KFVJbnQxMjhJbXBsKGxocykgKiByaHMpKSwKKyAgICAgIFVJbnQxMjhMb3c2NChV
SW50MTI4SW1wbChsaHMpICogcmhzKSk7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsIEludDEyOElt
cGw6Om9wZXJhdG9yKysoaW50KSB7CisgIEludDEyOEltcGwgdG1wKCp0aGlzKTsKKyAgKnRoaXMg
Kz0gMTsKKyAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIEludDEyOEltcGwgSW50MTI4SW1wbDo6
b3BlcmF0b3ItLShpbnQpIHsKKyAgSW50MTI4SW1wbCB0bXAoKnRoaXMpOworICAqdGhpcyAtPSAx
OworICByZXR1cm4gdG1wOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3Bl
cmF0b3IrKygpIHsKKyAgKnRoaXMgKz0gMTsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUg
SW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3ItLSgpIHsKKyAgKnRoaXMgLT0gMTsKKyAg
cmV0dXJuICp0aGlzOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcnwoSW50MTI4
SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtlSW50MTI4KEludDEyOEhp
Z2g2NChsaHMpIHwgSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICAgIEludDEy
OExvdzY0KGxocykgfCBJbnQxMjhMb3c2NChyaHMpKTsKK30KKworY29uc3RleHByIEludDEyOElt
cGwgb3BlcmF0b3ImKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4g
TWFrZUludDEyOChJbnQxMjhIaWdoNjQobGhzKSAmIEludDEyOEhpZ2g2NChyaHMpLAorICAgICAg
ICAgICAgICAgICAgICBJbnQxMjhMb3c2NChsaHMpICYgSW50MTI4TG93NjQocmhzKSk7Cit9CisK
K2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yXihJbnQxMjhJbXBsIGxocywgSW50MTI4SW1w
bCByaHMpIHsKKyAgcmV0dXJuIE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KGxocykgXiBJbnQxMjhI
aWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgICAgSW50MTI4TG93NjQobGhzKSBeIEludDEy
OExvdzY0KHJocykpOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcjw8KEludDEy
OEltcGwgbGhzLCBpbnQgYW1vdW50KSB7CisgIC8vIGludDY0X3Qgc2hpZnRzIG9mID49IDY0IGFy
ZSB1bmRlZmluZWQsIHNvIHdlIG5lZWQgc29tZSBzcGVjaWFsLWNhc2luZy4KKyAgcmV0dXJuIGFt
b3VudCA+PSA2NAorICAgICAgICAgICAgID8gTWFrZUludDEyOCgKKyAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ2NF90PihJbnQxMjhMb3c2NChsaHMpIDw8IChhbW91bnQgLSA2NCkp
LCAwKQorICAgICAgICAgOiBhbW91bnQgPT0gMAorICAgICAgICAgICAgID8gbGhzCisgICAgICAg
ICAgICAgOiBNYWtlSW50MTI4KAorICAgICAgICAgICAgICAgICAgIChJbnQxMjhIaWdoNjQobGhz
KSA8PCBhbW91bnQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50NjRf
dD4oSW50MTI4TG93NjQobGhzKSA+PiAoNjQgLSBhbW91bnQpKSwKKyAgICAgICAgICAgICAgICAg
ICBJbnQxMjhMb3c2NChsaHMpIDw8IGFtb3VudCk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBs
IG9wZXJhdG9yPj4oSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAgLy8gaW50NjRfdCBz
aGlmdHMgb2YgPj0gNjQgYXJlIHVuZGVmaW5lZCwgc28gd2UgbmVlZCBzb21lIHNwZWNpYWwtY2Fz
aW5nLgorICAvLyBUaGUgKEludDEyOEhpZ2g2NChsaHMpID4+IDMyKSA+PiAzMiAidHJpY2siIGNh
dXNlcyB0aGUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQKKyAgLy8gaW50NjQgdG8gYmUgaW5pdGl0aWFs
aXplZCB3aXRoIGFsbCB6ZXJvcyBvciBhbGwgb25lcyBjb3JyZWN0bHkuIEl0IHRha2VzCisgIC8v
IGludG8gYWNjb3VudCB3aGV0aGVyIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUgb3IgcG9zaXRpdmUs
IGFuZCB3aGV0aGVyIHRoZQorICAvLyBjdXJyZW50IGFyY2hpdGVjdHVyZSBkb2VzIGFyaXRobWV0
aWMgb3IgbG9naWNhbCByaWdodCBzaGlmdHMgZm9yIG5lZ2F0aXZlCisgIC8vIG51bWJlcnMuCisg
IHJldHVybiBhbW91bnQgPj0gNjQKKyAgICAgICAgICAgICA/IE1ha2VJbnQxMjgoCisgICAgICAg
ICAgICAgICAgICAgKEludDEyOEhpZ2g2NChsaHMpID4+IDMyKSA+PiAzMiwKKyAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4SGlnaDY0KGxocykgPj4gKGFtb3Vu
dCAtIDY0KSkpCisgICAgICAgICA6IGFtb3VudCA9PSAwCisgICAgICAgICAgICAgPyBsaHMKKyAg
ICAgICAgICAgICA6IE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KGxocykgPj4gYW1vdW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAoSW50MTI4TG93NjQobGhzKSA+PiBhbW91bnQpIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4
SGlnaDY0KGxocykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKDY0IC0gYW1v
dW50KSkpOworfQorCiAjaWYgSEFWRShJTlQxMjhfVCkKIHVzaW5nIFVJbnQxMjggPSBfX3VpbnQx
MjhfdDsKIHVzaW5nIEludDEyOCA9IF9faW50MTI4X3Q7CiAjZWxzZQotdXNpbmcgVUludDEyOCA9
IEludDEyOEltcGw8ZmFsc2U+OwotdXNpbmcgSW50MTI4ID0gSW50MTI4SW1wbDx0cnVlPjsKK3Vz
aW5nIFVJbnQxMjggPSBJbnQxMjhJbXBsOwordXNpbmcgSW50MTI4ID0gVUludDEyOEltcGw7CiAj
ZW5kaWYKIAotdGVtcGxhdGUgPGludCBCSVRTPiBzdHJ1Y3QgSG9zdFVuc2lnbmVkSW50VHlwZUhl
bHBlciB7Ci0gICAgdXNpbmcgdHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDwoQklUUyA8PSA4KSwg
c3RkOjp1aW50OF90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gMTYpLCBz
dGQ6OnVpbnQxNl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gMzIpLCBz
dGQ6OnVpbnQzMl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gNjQpLCBz
dGQ6OnVpbnQ2NF90LCBVSW50MTI4Pj4+PjsKLX07Ci10ZW1wbGF0ZSA8aW50IEJJVFM+IHN0cnVj
dCBIb3N0U2lnbmVkSW50VHlwZUhlbHBlciB7Ci0gICAgdXNpbmcgdHlwZSA9IHN0ZDo6Y29uZGl0
aW9uYWxfdDwoQklUUyA8PSA4KSwgc3RkOjppbnQ4X3QsCi0gICAgICAgIHN0ZDo6Y29uZGl0aW9u
YWxfdDwoQklUUyA8PSAxNiksIHN0ZDo6aW50MTZfdCwKLSAgICAgICAgc3RkOjpjb25kaXRpb25h
bF90PChCSVRTIDw9IDMyKSwgc3RkOjppbnQzMl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFs
X3Q8KEJJVFMgPD0gNjQpLCBzdGQ6OmludDY0X3QsIEludDEyOD4+Pj47Ci19OwotdGVtcGxhdGUg
PGludCBCSVRTPgotdXNpbmcgSG9zdFVuc2lnbmVkSW50VHlwZSA9IHR5cGVuYW1lIEhvc3RVbnNp
Z25lZEludFR5cGVIZWxwZXI8QklUUz46OnR5cGU7Ci10ZW1wbGF0ZSA8aW50IEJJVFM+Ci11c2lu
ZyBIb3N0U2lnbmVkSW50VHlwZSA9IHR5cGVuYW1lIEhvc3RTaWduZWRJbnRUeXBlSGVscGVyPEJJ
VFM+Ojp0eXBlOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpJbnQxMjg7Ci11
c2luZyBXVEY6OlVJbnQxMjg7Cit9ICAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggY2NkOTE0Y2IzZDRlZGFjYThkZjUy
ZGM2NGY0Y2IyNjgxYzM0MzZkOC4uMzg4ZTBmYTBhMGU0MDhlOGE1ZmE2OGE1NmY1NWI5MTVlODVh
NjMyMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDIxLTEwLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW1dURl0gUmVwbGFjZSBjdXJyZW50IExMVk0gZmxhbmcncyBJbnQx
Mjggd2l0aCBhYnNlaWwtY3BwJ3MgSW50MTI4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIxMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ludDEyOC5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUWVBFRF9URVNUKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdFVuYXJ5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RCaW5hcnkpOiBEZWxldGVkLgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VG9OYXRpdmUpOiBEZWxldGVkLgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6RnJvbU5hdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0
VnNOYXRpdmUpOiBEZWxldGVkLgorCiAyMDIxLTEwLTIxICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRk
YWRAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkdMIGJvdCBzaG91bGQgcnVuIHRlc3RzIHdpdGgg
R1BVIFByb2Nlc3MgZW5hYmxlZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSW50MTI4LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ludDEyOC5j
cHAKaW5kZXggNzc1YmY3MTE5NDBkZDQyMmZmNDcyMWI0Y2RiYzVlN2ZhNzYzZjQyYy4uM2UyZTNj
N2Q4NTgxNTcwOTJiMmU1ODI2Zjg4MDg5ODRiYjU2MTBmZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvSW50MTI4LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9JbnQxMjguY3BwCkBAIC0xLDE0NSArMSwxMTk1IEBACi0vLyBUYWtlbiBmcm9t
IExMVk0gUHJvamVjdCwgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAgd2l0aCBMTFZNIEV4
Y2VwdGlvbnMuCi0vLyBTZWUgU291cmNlL1dURi9MSUNFTlNFLUxMVk0udHh0IGZvciBsaWNlbnNl
IGluZm9ybWF0aW9uLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgV0lU
SCBMTFZNLWV4Y2VwdGlvbgotCi0vLyBCYXNlZCBvbjoKLS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9s
bHZtL2xsdm0tcHJvamVjdC9ibG9iL2Q0ODBmOTY4L2ZsYW5nL3VuaXR0ZXN0cy9FdmFsdWF0ZS91
aW50MTI4LmNwcAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIEFic2VpbCBBdXRob3JzLgorLy8KKy8v
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisvLworLy8gICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlIDx3dGYvSW50MTI4Lmg+CiAKLSNpbmNsdWRlIDxj
aW50dHlwZXM+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNs
dWRlIDxyYW5kb20+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4K
KyNpbmNsdWRlIDx2ZWN0b3I+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAotdXNpbmcg
Tm9uTmF0aXZlSW50MTI4ID0gV1RGOjpJbnQxMjhJbXBsPHRydWU+OwotdXNpbmcgTm9uTmF0aXZl
VUludDEyOCA9IFdURjo6SW50MTI4SW1wbDxmYWxzZT47Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFdURl9VSW50MTI4SW50ZWdlclRyYWl0c1Rlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpU
ZXN0IHsKK307Cit0eXBlZGVmIDo6dGVzdGluZzo6VHlwZXM8Ym9vbCwgY2hhciwgc2lnbmVkIGNo
YXIsIHVuc2lnbmVkIGNoYXIsIGNoYXIxNl90LAorICAgIGNoYXIzMl90LCB3Y2hhcl90LAorICAg
IHNob3J0LCAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgdW5zaWduZWQgc2hvcnQsIC8vIE5P
TElOVChydW50aW1lL2ludCkKKyAgICBpbnQsIHVuc2lnbmVkIGludCwKKyAgICBsb25nLCAvLyBO
T0xJTlQocnVudGltZS9pbnQpCisgICAgdW5zaWduZWQgbG9uZywgLy8gTk9MSU5UKHJ1bnRpbWUv
aW50KQorICAgIGxvbmcgbG9uZywgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIHVuc2lnbmVk
IGxvbmcgbG9uZz4gLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIEludGVnZXJUeXBlczsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBXVEZfVUludDEyOEZsb2F0VHJhaXRzVGVzdCA6
IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworfTsKK3R5cGVkZWYgOjp0ZXN0aW5nOjpUeXBlczxm
bG9hdCwgZG91YmxlLCBsb25nIGRvdWJsZT4gRmxvYXRpbmdQb2ludFR5cGVzOworCitUWVBFRF9U
RVNUX1NVSVRFKFdURl9VSW50MTI4SW50ZWdlclRyYWl0c1Rlc3QsIEludGVnZXJUeXBlcyk7CisK
K1RZUEVEX1RFU1QoV1RGX1VJbnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCwgQ29uc3RydWN0QXNzaWdu
VGVzdCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxXVEY6OlVJ
bnQxMjhJbXBsLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6VUludDEyOEltcGwg
bXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gVHlwZVBhcmFtIik7CisgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Fzc2lnbmFibGU8V1RGOjpVSW50MTI4SW1wbCYsIFR5cGVQYXJhbT46OnZhbHVl
LAorICAgICAgICAiV1RGOjpVSW50MTI4SW1wbCBtdXN0IGJlIGFzc2lnbmFibGUgZnJvbSBUeXBl
UGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBhcmFt
JiwgV1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAiVHlwZVBhcmFtIG11c3Qgbm90
IGJlIGFzc2lnbmFibGUgZnJvbSBXVEY6OlVJbnQxMjhJbXBsIik7Cit9CisKK1RZUEVEX1RFU1Rf
U1VJVEUoV1RGX1VJbnQxMjhGbG9hdFRyYWl0c1Rlc3QsIEZsb2F0aW5nUG9pbnRUeXBlcyk7CisK
K1RZUEVEX1RFU1QoV1RGX1VJbnQxMjhGbG9hdFRyYWl0c1Rlc3QsIENvbnN0cnVjdEFzc2lnblRl
c3QpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8V1RGOjpVSW50
MTI4SW1wbCwgVHlwZVBhcmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6OlVJbnQxMjhJbXBsIG11
c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3NlcnQo
IXN0ZDo6aXNfYXNzaWduYWJsZTxXVEY6OlVJbnQxMjhJbXBsJiwgVHlwZVBhcmFtPjo6dmFsdWUs
CisgICAgICAgICJXVEY6OlVJbnQxMjhJbXBsIG11c3Qgbm90IGJlIGFzc2lnbmFibGUgZnJvbSBU
eXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBh
cmFtJiwgV1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAiVHlwZVBhcmFtIG11c3Qg
bm90IGJlIGFzc2lnbmFibGUgZnJvbSBXVEY6OlVJbnQxMjhJbXBsIik7Cit9CisKK1RFU1QoV1RG
X1VJbnQxMjgsIFRyaXZpYWxUcmFpdHNUZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1
ZSwKKyAgICAgICAgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29w
eV9jb25zdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1ZSwKKyAgICAgICAgIiIpOwor
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlPFdURjo6
VUludDEyOEltcGw+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1ZSwgIiIpOworfQorCitU
RVNUKFdURl9VSW50MTI4LCBBbGxUZXN0cykKK3sKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHplcm8g
PSAwOworICAgIFdURjo6VUludDEyOEltcGwgb25lID0gMTsKKyAgICBXVEY6OlVJbnQxMjhJbXBs
IG9uZV8yYXJnID0gV1RGOjpNYWtlVUludDEyOCgwLCAxKTsKKyAgICBXVEY6OlVJbnQxMjhJbXBs
IHR3byA9IDI7CisgICAgV1RGOjpVSW50MTI4SW1wbCB0aHJlZSA9IDM7CisgICAgV1RGOjpVSW50
MTI4SW1wbCBiaWcgPSBXVEY6Ok1ha2VVSW50MTI4KDIwMDAsIDIpOworICAgIFdURjo6VUludDEy
OEltcGwgYmlnX21pbnVzX29uZSA9IFdURjo6TWFrZVVJbnQxMjgoMjAwMCwgMSk7CisgICAgV1RG
OjpVSW50MTI4SW1wbCBiaWdnZXIgPSBXVEY6Ok1ha2VVSW50MTI4KDIwMDEsIDEpOworICAgIFdU
Rjo6VUludDEyOEltcGwgYmlnZ2VzdCA9IFdURjo6VUludDEyOE1heCgpOworICAgIFdURjo6VUlu
dDEyOEltcGwgaGlnaF9sb3cgPSBXVEY6Ok1ha2VVSW50MTI4KDEsIDApOworICAgIFdURjo6VUlu
dDEyOEltcGwgbG93X2hpZ2ggPSBXVEY6Ok1ha2VVSW50MTI4KDAsIHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDY0X3Q+OjptYXgoKSk7CisgICAgRVhQRUNUX0xUKG9uZSwgdHdvKTsKKyAgICBFWFBF
Q1RfR1QodHdvLCBvbmUpOworICAgIEVYUEVDVF9MVChvbmUsIGJpZyk7CisgICAgRVhQRUNUX0xU
KG9uZSwgYmlnKTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmVfMmFyZyk7CisgICAgRVhQRUNUX05F
KG9uZSwgdHdvKTsKKyAgICBFWFBFQ1RfR1QoYmlnLCBvbmUpOworICAgIEVYUEVDVF9HRShiaWcs
IHR3byk7CisgICAgRVhQRUNUX0dFKGJpZywgYmlnX21pbnVzX29uZSk7CisgICAgRVhQRUNUX0dU
KGJpZywgYmlnX21pbnVzX29uZSk7CisgICAgRVhQRUNUX0xUKGJpZ19taW51c19vbmUsIGJpZyk7
CisgICAgRVhQRUNUX0xFKGJpZ19taW51c19vbmUsIGJpZyk7CisgICAgRVhQRUNUX05FKGJpZ19t
aW51c19vbmUsIGJpZyk7CisgICAgRVhQRUNUX0xUKGJpZywgYmlnZ2VzdCk7CisgICAgRVhQRUNU
X0xFKGJpZywgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0dUKGJpZ2dlc3QsIGJpZyk7CisgICAgRVhQ
RUNUX0dFKGJpZ2dlc3QsIGJpZyk7CisgICAgRVhQRUNUX0VRKGJpZywgfn5iaWcpOworICAgIEVY
UEVDVF9FUShvbmUsIG9uZSB8IG9uZSk7CisgICAgRVhQRUNUX0VRKGJpZywgYmlnIHwgYmlnKTsK
KyAgICBFWFBFQ1RfRVEob25lLCBvbmUgfCB6ZXJvKTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmUg
JiBvbmUpOworICAgIEVYUEVDVF9FUShiaWcsIGJpZyAmIGJpZyk7CisgICAgRVhQRUNUX0VRKHpl
cm8sIG9uZSAmIHplcm8pOworICAgIEVYUEVDVF9FUSh6ZXJvLCBiaWcgJiB+YmlnKTsKKyAgICBF
WFBFQ1RfRVEoemVybywgb25lIF4gb25lKTsKKyAgICBFWFBFQ1RfRVEoemVybywgYmlnIF4gYmln
KTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmUgXiB6ZXJvKTsKKworICAgIC8vIFNoaWZ0IG9wZXJh
dG9ycy4KKyAgICBFWFBFQ1RfRVEoYmlnLCBiaWcgPDwgMCk7CisgICAgRVhQRUNUX0VRKGJpZywg
YmlnID4+IDApOworICAgIEVYUEVDVF9HVChiaWcgPDwgMSwgYmlnKTsKKyAgICBFWFBFQ1RfTFQo
YmlnID4+IDEsIGJpZyk7CisgICAgRVhQRUNUX0VRKGJpZywgKGJpZyA8PCAxMCkgPj4gMTApOwor
ICAgIEVYUEVDVF9FUShiaWcsIChiaWcgPj4gMSkgPDwgMSk7CisgICAgRVhQRUNUX0VRKG9uZSwg
KG9uZSA8PCA4MCkgPj4gODApOworICAgIEVYUEVDVF9FUSh6ZXJvLCAob25lID4+IDgwKSA8PCA4
MCk7CisKKyAgICAvLyBTaGlmdCBhc3NpZ25tZW50cy4KKyAgICBXVEY6OlVJbnQxMjhJbXBsIGJp
Z19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPDwgMCwgYmlnX2NvcHkgPDw9IDApOwor
ICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gMCwgYmlnX2NvcHkgPj49
IDApOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPDwgMSwgYmlnX2Nv
cHkgPDw9IDEpOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gMSwg
YmlnX2NvcHkgPj49IDEpOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcg
PDwgMTAsIGJpZ19jb3B5IDw8PSAxMCk7CisgICAgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNU
X0VRKGJpZyA+PiAxMCwgYmlnX2NvcHkgPj49IDEwKTsKKyAgICBiaWdfY29weSA9IGJpZzsKKyAg
ICBFWFBFQ1RfRVEoYmlnIDw8IDY0LCBiaWdfY29weSA8PD0gNjQpOworICAgIGJpZ19jb3B5ID0g
YmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gNjQsIGJpZ19jb3B5ID4+PSA2NCk7CisgICAgYmln
X2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA8PCA3MywgYmlnX2NvcHkgPDw9IDczKTsK
KyAgICBiaWdfY29weSA9IGJpZzsKKyAgICBFWFBFQ1RfRVEoYmlnID4+IDczLCBiaWdfY29weSA+
Pj0gNzMpOworCisgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOEhpZ2g2NChiaWdnZXN0KSwgc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpV
SW50MTI4TG93NjQoYmlnZ2VzdCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgo
KSk7CisgICAgRVhQRUNUX0VRKHplcm8gKyBvbmUsIG9uZSk7CisgICAgRVhQRUNUX0VRKG9uZSAr
IG9uZSwgdHdvKTsKKyAgICBFWFBFQ1RfRVEoYmlnX21pbnVzX29uZSArIG9uZSwgYmlnKTsKKyAg
ICBFWFBFQ1RfRVEob25lIC0gb25lLCB6ZXJvKTsKKyAgICBFWFBFQ1RfRVEob25lIC0gemVybywg
b25lKTsKKyAgICBFWFBFQ1RfRVEoemVybyAtIG9uZSwgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0VR
KGJpZyAtIGJpZywgemVybyk7CisgICAgRVhQRUNUX0VRKGJpZyAtIG9uZSwgYmlnX21pbnVzX29u
ZSk7CisgICAgRVhQRUNUX0VRKGJpZyArIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+Ojpt
YXgoKSwgYmlnZ2VyKTsKKyAgICBFWFBFQ1RfRVEoYmlnZ2VzdCArIDEsIHplcm8pOworICAgIEVY
UEVDVF9FUSh6ZXJvIC0gMSwgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0VRKGhpZ2hfbG93IC0gb25l
LCBsb3dfaGlnaCk7CisgICAgRVhQRUNUX0VRKGxvd19oaWdoICsgb25lLCBoaWdoX2xvdyk7Cisg
ICAgRVhQRUNUX0VRKFdURjo6VUludDEyOEhpZ2g2NCgoV1RGOjpVSW50MTI4SW1wbCgxKSA8PCA2
NCkgLSAxKSwgMFUpOworICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhMb3c2NCgoV1RGOjpVSW50
MTI4SW1wbCgxKSA8PCA2NCkgLSAxKSwKKyAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghIW9uZSk7CisgICAgRVhQRUNUX1RSVUUo
ISFoaWdoX2xvdyk7CisgICAgRVhQRUNUX0ZBTFNFKCEhemVybyk7CisgICAgRVhQRUNUX0ZBTFNF
KCFvbmUpOworICAgIEVYUEVDVF9GQUxTRSghaGlnaF9sb3cpOworICAgIEVYUEVDVF9UUlVFKCF6
ZXJvKTsKKyAgICBFWFBFQ1RfVFJVRSh6ZXJvID09IDApOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkv
Y2hlY2spCisgICAgRVhQRUNUX0ZBTFNFKHplcm8gIT0gMCk7IC8vIE5PTElOVChyZWFkYWJpbGl0
eS9jaGVjaykKKyAgICBFWFBFQ1RfRkFMU0Uob25lID09IDApOyAvLyBOT0xJTlQocmVhZGFiaWxp
dHkvY2hlY2spCisgICAgRVhQRUNUX1RSVUUob25lICE9IDApOyAvLyBOT0xJTlQocmVhZGFiaWxp
dHkvY2hlY2spCisgICAgRVhQRUNUX0ZBTFNFKGhpZ2hfbG93ID09IDApOyAvLyBOT0xJTlQocmVh
ZGFiaWxpdHkvY2hlY2spCisgICAgRVhQRUNUX1RSVUUoaGlnaF9sb3cgIT0gMCk7IC8vIE5PTElO
VChyZWFkYWJpbGl0eS9jaGVjaykKKworICAgIFdURjo6VUludDEyOEltcGwgdGVzdCA9IHplcm87
CisgICAgRVhQRUNUX0VRKCsrdGVzdCwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCwgb25lKTsK
KyAgICBFWFBFQ1RfRVEodGVzdCsrLCBvbmUpOworICAgIEVYUEVDVF9FUSh0ZXN0LCB0d28pOwor
ICAgIEVYUEVDVF9FUSh0ZXN0IC09IDIsIHplcm8pOworICAgIEVYUEVDVF9FUSh0ZXN0LCB6ZXJv
KTsKKyAgICBFWFBFQ1RfRVEodGVzdCArPSAyLCB0d28pOworICAgIEVYUEVDVF9FUSh0ZXN0LCB0
d28pOworICAgIEVYUEVDVF9FUSgtLXRlc3QsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QsIG9u
ZSk7CisgICAgRVhQRUNUX0VRKHRlc3QtLSwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCwgemVy
byk7CisgICAgRVhQRUNUX0VRKHRlc3QgfD0gdGhyZWUsIHRocmVlKTsKKyAgICBFWFBFQ1RfRVEo
dGVzdCAmPSBvbmUsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QgXj0gdGhyZWUsIHR3byk7Cisg
ICAgRVhQRUNUX0VRKHRlc3QgPj49IDEsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QgPDw9IDEs
IHR3byk7CisKKyAgICBFWFBFQ1RfRVEoYmlnLCArYmlnKTsKKyAgICBFWFBFQ1RfRVEodHdvLCAr
dHdvKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4TWF4KCksICtXVEY6OlVJbnQxMjhNYXgo
KSk7CisgICAgRVhQRUNUX0VRKHplcm8sICt6ZXJvKTsKKworICAgIEVYUEVDVF9FUShiaWcsIC0o
LWJpZykpOworICAgIEVYUEVDVF9FUSh0d28sIC0oKC1vbmUpIC0gMSkpOworICAgIEVYUEVDVF9F
UShXVEY6OlVJbnQxMjhNYXgoKSwgLW9uZSk7CisgICAgRVhQRUNUX0VRKHplcm8sIC16ZXJvKTsK
K30KKworVEVTVChXVEZfSW50MTI4LCBSaWdodFNoaWZ0T2ZOZWdhdGl2ZU51bWJlcnMpCit7Cisg
ICAgV1RGOjpJbnQxMjhJbXBsIG1pbnVzX3NpeCA9IC02OworICAgIFdURjo6SW50MTI4SW1wbCBt
aW51c190aHJlZSA9IC0zOworICAgIFdURjo6SW50MTI4SW1wbCBtaW51c190d28gPSAtMjsKKyAg
ICBXVEY6OkludDEyOEltcGwgbWludXNfb25lID0gLTE7CisgICAgaWYgKCgtNiA+PiAxKSA9PSAt
MykgeworICAgICAgICAvLyBSaWdodCBzaGlmdCBpcyBhcml0aG1ldGljIChzaWduIHByb3BhZ2F0
ZXMpCisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gMSwgbWludXNfdGhyZWUpOworICAg
ICAgICBFWFBFQ1RfRVEobWludXNfc2l4ID4+IDIsIG1pbnVzX3R3byk7CisgICAgICAgIEVYUEVD
VF9FUShtaW51c19zaXggPj4gNjUsIG1pbnVzX29uZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gUmlnaHQgc2hpZnQgaXMgbG9naWNhbCAoemVyb3Mgc2hpZnRlZCBpbiBhdCBNU0IpCisgICAg
ICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gMSwgV1RGOjpJbnQxMjhJbXBsKFdURjo6VUludDEy
OEltcGwobWludXNfc2l4KSA+PiAxKSk7CisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4g
MiwgV1RGOjpJbnQxMjhJbXBsKFdURjo6VUludDEyOEltcGwobWludXNfc2l4KSA+PiAyKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gNjUsIFdURjo6SW50MTI4SW1wbChXVEY6OlVJ
bnQxMjhJbXBsKG1pbnVzX3NpeCkgPj4gNjUpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1VJbnQx
MjgsIENvbnZlcnNpb25UZXN0cykKK3sKKyAgICBFWFBFQ1RfVFJVRShXVEY6Ok1ha2VVSW50MTI4
KDEsIDApKTsKKworICAgIC8vIHZlcmlmeSB0aGF0IGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDIq
KjY0IHRoYXQgY2FuIGJlIHN0b3JlZCBwcmVjaXNlbHkKKyAgICAvLyBpbnNpZGUgYSBkb3VibGUg
aXMgY29udmVydGVkIHRvIGEgV1RGOjpVSW50MTI4SW1wbCB3aXRob3V0IGxvc3Mgb2YKKyAgICAv
LyBpbmZvcm1hdGlvbi4KKyAgICBkb3VibGUgcHJlY2lzZV9kb3VibGUgPSAweDUzMGUgKiBzdGQ6
OnBvdygyLjAsIDY0LjApICsgMHhkYTc0MDAwMDAwMDAwMDAwOworICAgIFdURjo6VUludDEyOElt
cGwgZnJvbV9wcmVjaXNlX2RvdWJsZShwcmVjaXNlX2RvdWJsZSk7CisgICAgV1RGOjpVSW50MTI4
SW1wbCBmcm9tX3ByZWNpc2VfaW50cyA9IFdURjo6TWFrZVVJbnQxMjgoMHg1MzBlLCAweGRhNzQw
MDAwMDAwMDAwMDApOworICAgIEVYUEVDVF9FUShmcm9tX3ByZWNpc2VfZG91YmxlLCBmcm9tX3By
ZWNpc2VfaW50cyk7CisgICAgRVhQRUNUX0RPVUJMRV9FUShzdGF0aWNfY2FzdDxkb3VibGU+KGZy
b21fcHJlY2lzZV9pbnRzKSwgcHJlY2lzZV9kb3VibGUpOworCisgICAgZG91YmxlIGFwcHJveF9k
b3VibGUgPSAweGZmZmZlZWVlZGRkZGNjY2MgKiBzdGQ6OnBvdygyLjAsIDY0LjApICsgMHhiYmJi
YWFhYTk5OTk4ODg4OworICAgIFdURjo6VUludDEyOEltcGwgZnJvbV9hcHByb3hfZG91YmxlKGFw
cHJveF9kb3VibGUpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoc3RhdGljX2Nhc3Q8ZG91YmxlPihm
cm9tX2FwcHJveF9kb3VibGUpLCBhcHByb3hfZG91YmxlKTsKKworICAgIGRvdWJsZSByb3VuZF90
b196ZXJvID0gMC43OworICAgIGRvdWJsZSByb3VuZF90b19maXZlID0gNS44OworICAgIGRvdWJs
ZSByb3VuZF90b19uaW5lID0gOS4zOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxXVEY6OlVJ
bnQxMjhJbXBsPihyb3VuZF90b196ZXJvKSwgMCk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PFdURjo6VUludDEyOEltcGw+KHJvdW5kX3RvX2ZpdmUpLCA1KTsKKyAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4ocm91bmRfdG9fbmluZSksIDkpOworCisgICAgV1RG
OjpVSW50MTI4SW1wbCBoaWdoZXN0X3ByZWNpc2lvbl9pbl9sb25nX2RvdWJsZSA9IH5XVEY6OlVJ
bnQxMjhJbXBsIHt9ID4+ICgxMjggLSBzdGQ6Om51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6
ZGlnaXRzKTsKKyAgICBFWFBFQ1RfRVEoaGlnaGVzdF9wcmVjaXNpb25faW5fbG9uZ19kb3VibGUs
CisgICAgICAgIHN0YXRpY19jYXN0PFdURjo6VUludDEyOEltcGw+KAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8bG9uZyBkb3VibGU+KGhpZ2hlc3RfcHJlY2lzaW9uX2luX2xvbmdfZG91YmxlKSkp
OworICAgIC8vIEFwcGx5IGEgbWFzayBqdXN0IHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGJpdHMgYXJl
IHRoZSByaWdodCBwbGFjZS4KKyAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIGFyYml0cmFyeV9t
YXNrID0gV1RGOjpNYWtlVUludDEyOCgweGEyOWY2MjI2NzdkZWQ3NTEsIDB4ZjhjYTY2YWRkMDc2
ZjQ2OCk7CisgICAgRVhQRUNUX0VRKGhpZ2hlc3RfcHJlY2lzaW9uX2luX2xvbmdfZG91YmxlICYg
YXJiaXRyYXJ5X21hc2ssCisgICAgICAgIHN0YXRpY19jYXN0PFdURjo6VUludDEyOEltcGw+KHN0
YXRpY19jYXN0PGxvbmcgZG91YmxlPigKKyAgICAgICAgICAgIGhpZ2hlc3RfcHJlY2lzaW9uX2lu
X2xvbmdfZG91YmxlICYgYXJiaXRyYXJ5X21hc2spKSk7CisKKyAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4oLTAuMUwpLCAwKTsKK30KKworVEVTVChXVEZfVUludDEy
OCwgT3BlcmF0b3JBc3NpZ25SZXR1cm5SZWYpCit7CisgICAgV1RGOjpVSW50MTI4SW1wbCB2KDEp
OworICAgICh2ICs9IDQpIC09IDM7CisgICAgRVhQRUNUX0VRKDIsIHYpOworfQorCitURVNUKFdU
Rl9VSW50MTI4LCBNdWx0aXBseSkKK3sKKyAgICBXVEY6OlVJbnQxMjhJbXBsIGEsIGIsIGM7CisK
KyAgICAvLyBaZXJvIHRlc3QuCisgICAgYSA9IDA7CisgICAgYiA9IDA7CisgICAgYyA9IGEgKiBi
OworICAgIEVYUEVDVF9FUSgwLCBjKTsKKworICAgIC8vIE1heCBjYXJyaWVzLgorICAgIGEgPSBX
VEY6OlVJbnQxMjhJbXBsKDApIC0gMTsKKyAgICBiID0gV1RGOjpVSW50MTI4SW1wbCgwKSAtIDE7
CisgICAgYyA9IGEgKiBiOworICAgIEVYUEVDVF9FUSgxLCBjKTsKKworICAgIC8vIFNlbGYtb3Bl
cmF0aW9uIHdpdGggbWF4IGNhcnJpZXMuCisgICAgYyA9IFdURjo6VUludDEyOEltcGwoMCkgLSAx
OworICAgIGMgKj0gYzsKKyAgICBFWFBFQ1RfRVEoMSwgYyk7CisKKyAgICAvLyAxLWJpdCB4IDEt
Yml0LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IDY0OyArK2opIHsKKyAgICAgICAgICAgIGEgPSBXVEY6OlVJbnQxMjhJbXBs
KDEpIDw8IGk7CisgICAgICAgICAgICBiID0gV1RGOjpVSW50MTI4SW1wbCgxKSA8PCBqOworICAg
ICAgICAgICAgYyA9IGEgKiBiOworICAgICAgICAgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOElt
cGwoMSkgPDwgKGkgKyBqKSwgYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBWZXJpZmll
ZCB3aXRoIGRjLgorICAgIGEgPSBXVEY6Ok1ha2VVSW50MTI4KDB4ZmZmZmVlZWVkZGRkY2NjYywg
MHhiYmJiYWFhYTk5OTk4ODg4KTsKKyAgICBiID0gV1RGOjpNYWtlVUludDEyOCgweDc3Nzc2NjY2
NTU1NTQ0NDQsIDB4MzMzMzIyMjIxMTExMDAwMCk7CisgICAgYyA9IGEgKiBiOworICAgIEVYUEVD
VF9FUShXVEY6Ok1ha2VVSW50MTI4KDB4NTMwRURBNzQxQzcxRDRDMywgMHhCRjI1OTc1MzE5MDgw
MDAwKSwgYyk7CisgICAgRVhQRUNUX0VRKDAsIGMgLSBiICogYSk7CisgICAgRVhQRUNUX0VRKGEg
KiBhIC0gYiAqIGIsIChhICsgYikgKiAoYSAtIGIpKTsKKworICAgIC8vIFZlcmlmaWVkIHdpdGgg
ZGMuCisgICAgYSA9IFdURjo6TWFrZVVJbnQxMjgoMHgwMTIzNDU2Nzg5YWJjZGVmLCAweGZlZGNi
YTk4NzY1NDMyMTApOworICAgIGIgPSBXVEY6Ok1ha2VVSW50MTI4KDB4MDI0NjhhY2UxMzU3OWJk
ZiwgMHhmZGI5NzUzMWVjYTg2NDIwKTsKKyAgICBjID0gYSAqIGI7CisgICAgRVhQRUNUX0VRKFdU
Rjo6TWFrZVVJbnQxMjgoMHg5N2E4N2Y0ZjI2MWJhM2YyLCAweDM0MmQwYmJmNDg5NDgyMDApLCBj
KTsKKyAgICBFWFBFQ1RfRVEoMCwgYyAtIGIgKiBhKTsKKyAgICBFWFBFQ1RfRVEoYSAqIGEgLSBi
ICogYiwgKGEgKyBiKSAqIChhIC0gYikpOworfQorCitURVNUKFdURl9VSW50MTI4LCBBbGlhc1Rl
c3RzKQoreworICAgIFdURjo6VUludDEyOEltcGwgeDEgPSBXVEY6Ok1ha2VVSW50MTI4KDEsIDIp
OworICAgIFdURjo6VUludDEyOEltcGwgeDIgPSBXVEY6Ok1ha2VVSW50MTI4KDIsIDQpOworICAg
IHgxICs9IHgxOworICAgIEVYUEVDVF9FUSh4MiwgeDEpOworCisgICAgV1RGOjpVSW50MTI4SW1w
bCB4MyA9IFdURjo6TWFrZVVJbnQxMjgoMSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IDYz
KTsKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHg0ID0gV1RGOjpNYWtlVUludDEyOCgzLCAwKTsKKyAg
ICB4MyArPSB4MzsKKyAgICBFWFBFQ1RfRVEoeDQsIHgzKTsKK30KKworVEVTVChXVEZfVUludDEy
OCwgRGl2aWRlQW5kTW9kKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsKKworICAgIC8vIGEgOj0g
cSAqIGIgKyByCisgICAgV1RGOjpVSW50MTI4SW1wbCBhLCBiLCBxLCByOworCisgICAgLy8gWmVy
byB0ZXN0LgorICAgIGEgPSAwOworICAgIGIgPSAxMjM7CisgICAgcSA9IGEgLyBiOworICAgIHIg
PSBhICUgYjsKKyAgICBFWFBFQ1RfRVEoMCwgcSk7CisgICAgRVhQRUNUX0VRKDAsIHIpOworCisg
ICAgYSA9IFdURjo6TWFrZVVJbnQxMjgoMHg1MzBlZGE3NDFjNzFkNGMzLCAweGJmMjU5NzUzMTkw
ODAwMDApOworICAgIHEgPSBXVEY6Ok1ha2VVSW50MTI4KDB4NGRlMmNhYjA4MSwgMHgxNGMzNGFi
NDY3NmU0YmFiKTsKKyAgICBiID0gV1RGOjpVSW50MTI4SW1wbCgweDExMTAwMDEpOworICAgIHIg
PSBXVEY6OlVJbnQxMjhJbXBsKDB4M2ViNDU1KTsKKyAgICBBU1NFUlRfRVEoYSwgcSAqIGIgKyBy
KTsgLy8gU2FuaXR5LWNoZWNrLgorCisgICAgV1RGOjpVSW50MTI4SW1wbCByZXN1bHRfcSwgcmVz
dWx0X3I7CisgICAgcmVzdWx0X3EgPSBhIC8gYjsKKyAgICByZXN1bHRfciA9IGEgJSBiOworICAg
IEVYUEVDVF9FUShxLCByZXN1bHRfcSk7CisgICAgRVhQRUNUX0VRKHIsIHJlc3VsdF9yKTsKKwor
ICAgIC8vIFRyeSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgICBzd2FwKHEsIGIpOworICAgIHJl
c3VsdF9xID0gYSAvIGI7CisgICAgcmVzdWx0X3IgPSBhICUgYjsKKyAgICBFWFBFQ1RfRVEocSwg
cmVzdWx0X3EpOworICAgIEVYUEVDVF9FUShyLCByZXN1bHRfcik7CisgICAgLy8gUmVzdG9yZS4K
KyAgICBzd2FwKGIsIHEpOwogCi1zdGF0aWMgdm9pZCBUZXN0VW5hcnkoc3RkOjp1aW50NjRfdCB4
KQorICAgIC8vIERpdmlkZW5kIDwgZGl2aXNvcjsgcmVzdWx0IHNob3VsZCBiZSBxOjAgcjo8ZGl2
aWRlbmQ+LgorICAgIHN3YXAoYSwgYik7CisgICAgcmVzdWx0X3EgPSBhIC8gYjsKKyAgICByZXN1
bHRfciA9IGEgJSBiOworICAgIEVYUEVDVF9FUSgwLCByZXN1bHRfcSk7CisgICAgRVhQRUNUX0VR
KGEsIHJlc3VsdF9yKTsKKyAgICAvLyBUcnkgdGhlIG90aGVyIHdheSBhcm91bmQuCisgICAgc3dh
cChhLCBxKTsKKyAgICByZXN1bHRfcSA9IGEgLyBiOworICAgIHJlc3VsdF9yID0gYSAlIGI7Cisg
ICAgRVhQRUNUX0VRKDAsIHJlc3VsdF9xKTsKKyAgICBFWFBFQ1RfRVEoYSwgcmVzdWx0X3IpOwor
ICAgIC8vIFJlc3RvcmUuCisgICAgc3dhcChxLCBhKTsKKyAgICBzd2FwKGIsIGEpOworCisgICAg
Ly8gVHJ5IGEgbGFyZ2UgcmVtYWluZGVyLgorICAgIGIgPSBhIC8gMiArIDE7CisgICAgV1RGOjpV
SW50MTI4SW1wbCBleHBlY3RlZF9yID0gV1RGOjpNYWtlVUludDEyOCgweDI5ODc2ZDNhMGUzOGVh
NjEsIDB4ZGY5MmNiYTk4YzgzZmZmZik7CisgICAgLy8gU2FuaXR5IGNoZWNrcy4KKyAgICBBU1NF
UlRfRVEoYSAvIDIgLSAxLCBleHBlY3RlZF9yKTsKKyAgICBBU1NFUlRfRVEoYSwgYiArIGV4cGVj
dGVkX3IpOworICAgIHJlc3VsdF9xID0gYSAvIGI7CisgICAgcmVzdWx0X3IgPSBhICUgYjsKKyAg
ICBFWFBFQ1RfRVEoMSwgcmVzdWx0X3EpOworICAgIEVYUEVDVF9FUShleHBlY3RlZF9yLCByZXN1
bHRfcik7Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIERpdmlkZUFuZE1vZFJhbmRvbUlucHV0cykK
IHsKLSAgICBOb25OYXRpdmVVSW50MTI4IG4geyB4IH07Ci0gICAgRVhQRUNUX0VRKHgsIHN0YXRp
Y19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pKTsKLSAgICBFWFBFQ1RfRVEofngsIHN0YXRpY19jYXN0
PHN0ZDo6dWludDY0X3Q+KH5uKSk7Ci0gICAgRVhQRUNUX0VRKC14LCBzdGF0aWNfY2FzdDxzdGQ6
OnVpbnQ2NF90PigtbikpOwotICAgIEVYUEVDVF9FUSgheCwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50
NjRfdD4oIW4pKTsKLSAgICBFWFBFQ1RfVFJVRShuID09IG4pOwotICAgIEVYUEVDVF9UUlVFKG4g
KyBuID09IG4gKiBzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PigyKSk7Ci0gICAgRVhQRUNU
X1RSVUUobiAtIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMCkpOwotICAgIEVY
UEVDVF9UUlVFKG4gKyBuID09IG4gPDwgc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMSkp
OwotICAgIEVYUEVDVF9UUlVFKG4gKyBuID09IG4gPDwgc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUlu
dDEyOD4oMSkpOwotICAgIEVYUEVDVF9UUlVFKChuICsgbikgLSBuID09IG4pOwotICAgIEVYUEVD
VF9UUlVFKCgobiArIG4pID4+IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDEpKSA9PSBu
KTsKLSAgICBpZiAoeCkgewotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRp
dmVVSW50MTI4PigwKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMCkpOwot
ICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PihuIC0gMSkg
LyBuID09IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDApKTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4obikgLyBuID09IHN0YXRpY19jYXN0
PE5vbk5hdGl2ZVVJbnQxMjg+KDEpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8
Tm9uTmF0aXZlVUludDEyOD4obiArIG4gLSAxKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZl
VUludDEyOD4oMSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRpdmVV
SW50MTI4PihuICsgbikgLyBuID09IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDIpKTsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIFRlc3RCaW5hcnkoc3RkOjp1aW50NjRfdCB4LCBzdGQ6
OnVpbnQ2NF90IHkpCi17Ci0gICAgTm9uTmF0aXZlVUludDEyOCBtIHsgeCB9LCBuIHsgeSB9Owot
ICAgIEVYUEVDVF9FUSh4LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtKSk7Ci0gICAgRVhQ
RUNUX0VRKHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pKTsKLSAgICBFWFBFQ1RfRVEo
eCAmIHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG0gJiBuKSk7Ci0gICAgRVhQRUNUX0VR
KHggfCB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtIHwgbikpOwotICAgIEVYUEVDVF9F
USh4IF4geSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obSBeIG4pKTsKLSAgICBFWFBFQ1Rf
RVEoeCArIHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG0gKyBuKSk7Ci0gICAgRVhQRUNU
X0VRKHggLSB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtIC0gbikpOwotICAgIEVYUEVD
VF9FUSh4ICogeSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obSAqIG4pKTsKLSAgICBpZiAo
bikKLSAgICAgICAgRVhQRUNUX0VRKHggLyB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90Piht
IC8gbikpOwotfQotCi1URVNUKFdURl9JbnQxMjgsIEJhc2ljKQotewotICAgIGZvciAoc3RkOjp1
aW50NjRfdCBqIHswfTsgaiA8IDY0OyArK2opIHsKLSAgICAgICAgVGVzdFVuYXJ5KGopOwotICAg
ICAgICBUZXN0VW5hcnkofmopOwotICAgICAgICBUZXN0VW5hcnkoc3RkOjp1aW50NjRfdCgxKSA8
PCBqKTsKLSAgICAgICAgZm9yIChzdGQ6OnVpbnQ2NF90IGsgezB9OyBrIDwgNjQ7ICsraykKLSAg
ICAgICAgICAgIFRlc3RCaW5hcnkoaiwgayk7Ci0gICAgfQotfQotCi0jaWYgSEFWRShJTlQxMjhf
VCkKLXN0YXRpYyBfX3VpbnQxMjhfdCBUb05hdGl2ZShOb25OYXRpdmVVSW50MTI4IG4pCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PF9fdWludDEyOF90PihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2
NF90PihuID4+IDY0KSkgPDwgNjQgfAotICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90
PihuKTsKLX0KLQotc3RhdGljIE5vbk5hdGl2ZVVJbnQxMjggRnJvbU5hdGl2ZShfX3VpbnQxMjhf
dCBuKQotewotICAgIHJldHVybiBOb25OYXRpdmVVSW50MTI4IHsgc3RhdGljX2Nhc3Q8c3RkOjp1
aW50NjRfdD4obiA+PiA2NCl9IDw8IDY0IHwgTm9uTmF0aXZlVUludDEyOCB7IHN0YXRpY19jYXN0
PHN0ZDo6dWludDY0X3Q+KG4pIH07Ci19Ci0KLXN0YXRpYyB2b2lkIFRlc3RWc05hdGl2ZShfX3Vp
bnQxMjhfdCB4LCBfX3VpbnQxMjhfdCB5KQotewotICAgIE5vbk5hdGl2ZVVJbnQxMjggbSB7IEZy
b21OYXRpdmUoeCkgfSwgbiB7IEZyb21OYXRpdmUoeSkgfTsKLSAgICBFWFBFQ1RfVFJVRShUb05h
dGl2ZShtKSA9PSB4KTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShuKSA9PSB5KTsKLSAgICBF
WFBFQ1RfVFJVRShUb05hdGl2ZSh+bSkgPT0gfngpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZl
KC1tKSA9PSAteCk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUoIW0pID09ICF4KTsKLSAgICBF
WFBFQ1RfVFJVRShUb05hdGl2ZShtIDwgbikgPT0gKHggPCB5KSk7Ci0gICAgRVhQRUNUX1RSVUUo
VG9OYXRpdmUobSA8PSBuKSA9PSAoeCA8PSB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUo
bSA9PSBuKSA9PSAoeCA9PSB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAhPSBuKSA9
PSAoeCAhPSB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSA+PSBuKSA9PSAoeCA+PSB5
KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSA+IG4pID09ICh4ID4geSkpOwotICAgIEVY
UEVDVF9UUlVFKFRvTmF0aXZlKG0gJiBuKSA9PSAoeCAmIHkpKTsKLSAgICBFWFBFQ1RfVFJVRShU
b05hdGl2ZShtIHwgbikgPT0gKHggfCB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSBe
IG4pID09ICh4IF4geSkpOwotICAgIGlmICh5IDwgMTI4KSB7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KFRvTmF0aXZlKG0gPDwgbikgPT0gKHggPDwgeSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShUb05h
dGl2ZShtID4+IG4pID09ICh4ID4+IHkpKTsKLSAgICB9Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRp
dmUobSArIG4pID09ICh4ICsgeSkpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gLSBuKSA9
PSAoeCAtIHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtICogbikgPT0gKHggKiB5KSk7
Ci0gICAgaWYgKHkgPiAwKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gLyBuKSA9
PSAoeCAvIHkpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAlIG4pID09ICh4ICUg
eSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtIC0gbiAqIChtIC8gbikpID09ICh4
ICUgeSkpOwotICAgIH0KLX0KLQotVEVTVChXVEZfSW50MTI4LCBWc05hdGl2ZSkKLXsKLSAgICBH
VEVTVF9MT0dfKElORk8pIDw8ICJFbnZpcm9ubWVudCBoYXMgbmF0aXZlIF9fdWludDEyOF90IjsK
LQotICAgIGZvciAoaW50IGogezB9OyBqIDwgMTI4OyArK2opIHsKLSAgICAgICAgZm9yIChpbnQg
ayB7MH07IGsgPCAxMjg7ICsraykgewotICAgICAgICAgICAgX191aW50MTI4X3QgbSB7IDEgfSwg
biB7IDEgfTsKLSAgICAgICAgICAgIG0gPDw9IGo7Ci0gICAgICAgICAgICBuIDw8PSBrOwotICAg
ICAgICAgICAgVGVzdFZzTmF0aXZlKG0sIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0aXZlKH5t
LCBuKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtLCB+bik7Ci0gICAgICAgICAgICBUZXN0
VnNOYXRpdmUofm0sIH5uKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtIF4gbiwgbik7Ci0g
ICAgICAgICAgICBUZXN0VnNOYXRpdmUobSwgbSBeIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0
aXZlKG0gXiB+biwgbik7Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUobSwgfm0gXiBuKTsKLSAg
ICAgICAgICAgIFRlc3RWc05hdGl2ZShtIF4gfm4sIG0gXiBuKTsKLSAgICAgICAgICAgIFRlc3RW
c05hdGl2ZShtIF4gbiwgfm0gXiBuKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtIF4gfm4s
IH5tIF4gbik7Ci0gICAgICAgICAgICBUZXN0QmluYXJ5KG0sIDEwMDAwMDAwMDAwMDAwMDAwKTsg
Ly8gaW1wb3J0YW50IGNhc2UgZm9yIGRlY2ltYWwgY29udmVyc2lvbgotICAgICAgICAgICAgVGVz
dEJpbmFyeSh+bSwgMTAwMDAwMDAwMDAwMDAwMDApOworICAgIGNvbnN0IGludCBrTnVtSXRlcnMg
PSAxIDw8IDE4OworICAgIHN0ZDo6bWluc3RkX3JhbmQgcmFuZG9tKHRlc3Rpbmc6OlVuaXRUZXN0
OjpHZXRJbnN0YW5jZSgpLT5yYW5kb21fc2VlZCgpKTsKKyAgICBzdGQ6OnVuaWZvcm1faW50X2Rp
c3RyaWJ1dGlvbjx1aW50NjRfdD4gdW5pZm9ybV91aW50NjQ7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBrTnVtSXRlcnM7ICsraSkgeworICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIGEg
PSBXVEY6Ok1ha2VVSW50MTI4KHVuaWZvcm1fdWludDY0KHJhbmRvbSksIHVuaWZvcm1fdWludDY0
KHJhbmRvbSkpOworICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIGIgPSBXVEY6Ok1ha2VV
SW50MTI4KHVuaWZvcm1fdWludDY0KHJhbmRvbSksIHVuaWZvcm1fdWludDY0KHJhbmRvbSkpOwor
ICAgICAgICBpZiAoYiA9PSAwKSB7CisgICAgICAgICAgICBjb250aW51ZTsgLy8gQXZvaWQgYSBk
aXYtYnktemVyby4KICAgICAgICAgfQorICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIHEg
PSBhIC8gYjsKKyAgICAgICAgY29uc3QgV1RGOjpVSW50MTI4SW1wbCByID0gYSAlIGI7CisgICAg
ICAgIEFTU0VSVF9FUShhLCBiICogcSArIHIpOworICAgIH0KK30KKworVEVTVChXVEZfVUludDEy
OCwgQ29uc3RleHByVGVzdCkKK3sKKyAgICBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCB6ZXJv
ID0gV1RGOjpVSW50MTI4SW1wbCgpOworICAgIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIG9u
ZSA9IDE7CisgICAgY29uc3RleHByIFdURjo6VUludDEyOEltcGwgbWludXNfdHdvID0gLTI7Cisg
ICAgRVhQRUNUX0VRKHplcm8sIFdURjo6VUludDEyOEltcGwoMCkpOworICAgIEVYUEVDVF9FUShv
bmUsIFdURjo6VUludDEyOEltcGwoMSkpOworICAgIEVYUEVDVF9FUShtaW51c190d28sIFdURjo6
TWFrZVVJbnQxMjgoLTEsIC0yKSk7Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIE51bWVyaWNMaW1p
dHNUZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJ
bnQxMjhJbXBsPjo6aXNfc3BlY2lhbGl6ZWQsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6
Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zaWduZWQsICIiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX2lu
dGVnZXIsICIiKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PigxMjggKiBzdGQ6Omxv
ZzEwKDIpKSwKKyAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6
ZGlnaXRzMTApOworICAgIEVYUEVDVF9FUSgwLCBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjptaW4oKSk7CisgICAgRVhQRUNUX0VRKDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8
V1RGOjpVSW50MTI4SW1wbD46Omxvd2VzdCgpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4
TWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heCgpKTsKK30K
KworVEVTVChXVEZfSW50MTI4VUludDEyOCwgQ29udmVyc2lvblRlc3QpCit7CisgICAgV1RGOjpJ
bnQxMjhJbXBsIG5vbm5lZ2F0aXZlX3NpZ25lZF92YWx1ZXNbXSA9IHsKKyAgICAgICAgMCwKKyAg
ICAgICAgMSwKKyAgICAgICAgMHhmZmVlZGRjY2JiYWE5OTg4LAorICAgICAgICBXVEY6Ok1ha2VJ
bnQxMjgoMHg3NzY2NTU0NDMzMjIxMTAwLCAwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4
MTIzNDU2Nzg5MGFiY2RlZiwgMHhmZWRjYmEwOTg3NjU0MzIxKSwKKyAgICAgICAgV1RGOjpJbnQx
MjhNYXgoKQorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiBub25uZWdh
dGl2ZV9zaWduZWRfdmFsdWVzKSB7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgV1RGOjpJbnQx
MjhJbXBsKFdURjo6VUludDEyOEltcGwodmFsdWUpKSk7CisKKyAgICAgICAgV1RGOjpVSW50MTI4
SW1wbCBhc3NpZ25lZF92YWx1ZTsKKyAgICAgICAgYXNzaWduZWRfdmFsdWUgPSB2YWx1ZTsKKyAg
ICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwoYXNzaWduZWRfdmFsdWUpKTsK
KyAgICB9CisKKyAgICBXVEY6OkludDEyOEltcGwgbmVnYXRpdmVfdmFsdWVzW10gPSB7CisgICAg
ICAgIC0xLCAtMHgxMjM0NTY3ODkwYWJjZGVmLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoLTB4
NTU0NDMzMjIxMWZmZWVkZCwgMCksCisgICAgICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHg3NjU0MzIx
MGZlZGNiYTk4LCAweGFiY2RlZjAxMjM0NTY3ODkpCisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50
MTI4SW1wbCB2YWx1ZSA6IG5lZ2F0aXZlX3ZhbHVlcykgeworICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpVSW50MTI4SW1wbCgtdmFsdWUpLCAtV1RGOjpVSW50MTI4SW1wbCh2YWx1ZSkpOworCisgICAg
ICAgIFdURjo6VUludDEyOEltcGwgYXNzaWduZWRfdmFsdWU7CisgICAgICAgIGFzc2lnbmVkX3Zh
bHVlID0gdmFsdWU7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhJbXBsKC12YWx1ZSks
IC1hc3NpZ25lZF92YWx1ZSk7CiAgICAgfQogfQogCi0jZWxzZSAvLyAhSEFWRShJTlQxMjhfVCkK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV1RGX0ludDEyOEludGVnZXJUcmFpdHNUZXN0
IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9OworCitUWVBFRF9URVNUX1NVSVRFKFdURl9J
bnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCwgSW50ZWdlclR5cGVzKTsKKworVFlQRURfVEVTVChXVEZf
SW50MTI4SW50ZWdlclRyYWl0c1Rlc3QsIENvbnN0cnVjdEFzc2lnblRlc3QpCit7CisgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8V1RGOjpJbnQxMjhJbXBsLCBUeXBlUGFy
YW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6SW50MTI4SW1wbCBtdXN0IGJlIGNvbnN0cnVjdGli
bGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXNzaWduYWJs
ZTxXVEY6OkludDEyOEltcGwmLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6SW50
MTI4SW1wbCBtdXN0IGJlIGFzc2lnbmFibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBhcmFtJiwgV1RGOjpJbnQxMjhJbXBsPjo6
dmFsdWUsCisgICAgICAgICJUeXBlUGFyYW0gbXVzdCBub3QgYmUgYXNzaWduYWJsZSBmcm9tIFdU
Rjo6SW50MTI4SW1wbCIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFdURl9J
bnQxMjhGbG9hdFRyYWl0c1Rlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK307CisKK1RZ
UEVEX1RFU1RfU1VJVEUoV1RGX0ludDEyOEZsb2F0VHJhaXRzVGVzdCwgRmxvYXRpbmdQb2ludFR5
cGVzKTsKIAotVEVTVChXVEZfSW50MTI4LCBWc05hdGl2ZSkKK1RZUEVEX1RFU1QoV1RGX0ludDEy
OEZsb2F0VHJhaXRzVGVzdCwgQ29uc3RydWN0QXNzaWduVGVzdCkKIHsKLSAgICBHVEVTVF9MT0df
KElORk8pIDw8ICJFbnZpcm9ubWVudCBsYWNrcyBuYXRpdmUgX191aW50MTI4X3QiOworICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19jb25zdHJ1Y3RpYmxlPFdURjo6SW50MTI4SW1wbCwgVHlwZVBh
cmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6OkludDEyOEltcGwgbXVzdCBiZSBjb25zdHJ1Y3Rp
YmxlIGZyb20gVHlwZVBhcmFtIik7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19hc3NpZ25h
YmxlPFdURjo6SW50MTI4SW1wbCYsIFR5cGVQYXJhbT46OnZhbHVlLAorICAgICAgICAiV1RGOjpJ
bnQxMjhJbXBsIG11c3Qgbm90IGJlIGFzc2lnbmFibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBhcmFtJiwgV1RGOjpJbnQxMjhJ
bXBsPjo6dmFsdWUsCisgICAgICAgICJUeXBlUGFyYW0gbXVzdCBub3QgYmUgYXNzaWduYWJsZSBm
cm9tIFdURjo6SW50MTI4SW1wbCIpOwogfQogCi0jZW5kaWYgLy8gIUhBVkUoSU5UMTI4X1QpCitU
RVNUKFdURl9JbnQxMjgsIFRyaXZpYWxUcmFpdHNUZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFdURjo6SW50MTI4SW1wbD46
OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2Nv
bnN0cnVjdGlibGU8V1RGOjpJbnQxMjhJbXBsPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZTxXVEY6OkludDEyOEltcGw+Ojp2
YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFdURjo6SW50MTI4SW1wbD46OnZhbHVlLCAiIik7Cit9CisKK1RFU1QoV1RGX0ludDEyOCwg
Qm9vbENvbnZlcnNpb25UZXN0KQoreworICAgIEVYUEVDVF9GQUxTRShXVEY6OkludDEyOEltcGwo
MCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICBFWFBFQ1Rf
VFJVRShXVEY6Ok1ha2VJbnQxMjgoMCwgdWludDY0X3QgeyAxIH0gPDwgaSkpOworICAgIH0KKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDYzOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoV1RG
OjpNYWtlSW50MTI4KGludDY0X3QgeyAxIH0gPDwgaSwgMCkpOworICAgIH0KKyAgICBFWFBFQ1Rf
VFJVRShXVEY6OkludDEyOE1pbigpKTsKKworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwo
MSksIFdURjo6SW50MTI4SW1wbCh0cnVlKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1w
bCgwKSwgV1RGOjpJbnQxMjhJbXBsKGZhbHNlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgV1RGX0ludDEyOEludGVnZXJDb252ZXJzaW9uVGVzdCA6IHB1YmxpYyA6OnRlc3Rp
bmc6OlRlc3QgeworfTsKKworVFlQRURfVEVTVF9TVUlURShXVEZfSW50MTI4SW50ZWdlckNvbnZl
cnNpb25UZXN0LCBJbnRlZ2VyVHlwZXMpOworCitUWVBFRF9URVNUKFdURl9JbnQxMjhJbnRlZ2Vy
Q29udmVyc2lvblRlc3QsIFJvdW5kVHJpcFRlc3QpCit7CisgICAgRVhQRUNUX0VRKFR5cGVQYXJh
bSB7IDAgfSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOEltcGwoMCkpKTsKKyAg
ICBFWFBFQ1RfRVEoc3RkOjpudW1lcmljX2xpbWl0czxUeXBlUGFyYW0+OjptaW4oKSwKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChz
dGQ6Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46Om1pbigpKSkpOworICAgIEVYUEVDVF9FUShz
dGQ6Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46Om1heCgpLAorICAgICAgICBzdGF0aWNfY2Fz
dDxUeXBlUGFyYW0+KAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHN0ZDo6bnVtZXJpY19s
aW1pdHM8VHlwZVBhcmFtPjo6bWF4KCkpKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
Y2xhc3MgV1RGX0ludDEyOEZsb2F0Q29udmVyc2lvblRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpU
ZXN0IHsKK307CisKK1RZUEVEX1RFU1RfU1VJVEUoV1RGX0ludDEyOEZsb2F0Q29udmVyc2lvblRl
c3QsIEZsb2F0aW5nUG9pbnRUeXBlcyk7CisKK1RZUEVEX1RFU1QoV1RGX0ludDEyOEZsb2F0Q29u
dmVyc2lvblRlc3QsIENvbnN0cnVjdEFuZENhc3RUZXN0KQoreworICAgIC8vIENvbnZlcnNpb25z
IHdoZXJlIHRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZXMgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNh
bWUuCisgICAgLy8gMHg5ZjViIGlzIGEgcmFuZG9tbHkgY2hvc2VuIHNtYWxsIHZhbHVlLgorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMTEwOyArK2kpIHsgLy8gMTEwID0gMTI2IC0gI2JpdHMgaW4g
MHg5ZjViCisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAiaSA9
ICIgPDwgaSk7CisKKyAgICAgICAgVHlwZVBhcmFtIGZsb2F0X3ZhbHVlID0gc3RkOjpsZGV4cChz
dGF0aWNfY2FzdDxUeXBlUGFyYW0+KDB4OWY1YiksIGkpOworICAgICAgICBXVEY6OkludDEyOElt
cGwgaW50X3ZhbHVlID0gV1RGOjpJbnQxMjhJbXBsKDB4OWY1YikgPDwgaTsKKworICAgICAgICBF
WFBFQ1RfRVEoZmxvYXRfdmFsdWUsIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oaW50X3ZhbHVlKSk7
CisgICAgICAgIEVYUEVDVF9FUSgtZmxvYXRfdmFsdWUsIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4o
LWludF92YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoaW50X3ZhbHVlLCBXVEY6OkludDEyOElt
cGwoZmxvYXRfdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKC1pbnRfdmFsdWUsIFdURjo6SW50
MTI4SW1wbCgtZmxvYXRfdmFsdWUpKTsKKyAgICB9CisKKyAgICAvLyBSb3VuZCB0cmlwIGNvbnZl
cnNpb25zIHdpdGggYSBzbWFsbCBzYW1wbGUgb2YgcmFuZG9tbHkgZ2VuZXJhdGVkIHVpbnQ2NF90
CisgICAgLy8gdmFsdWVzIChsZXNzIHRoYW4gaW50NjRfdCBtYXggc28gdGhhdCB2YWx1ZSAqIDJe
NjQgZml0cyBpbnRvIGludDEyOCkuCisgICAgdWludDY0X3QgdmFsdWVzW10gPSB7IDB4NmQ0NDky
YzI0ZmI4NjE5OSwgMHgyNmVhZDY1ZTRjYjM1OWI1LAorICAgICAgICAweDJjNDM0MDc0MzNiYTNm
ZDEsIDB4M2I1NzRlYzY2OGRmNmI1NSwKKyAgICAgICAgMHgxYzc1MGU1NWEyOWY0ZjBmIH07Cisg
ICAgZm9yICh1aW50NjRfdCB2YWx1ZSA6IHZhbHVlcykgeworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8PSA2NDsgKytpKSB7CisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpN
ZXNzYWdlKCkKKyAgICAgICAgICAgICAgICA8PCAidmFsdWUgPSAiIDw8IHZhbHVlIDw8ICI7IGkg
PSAiIDw8IGkpOworCisgICAgICAgICAgICBUeXBlUGFyYW0gZnZhbHVlID0gc3RkOjpsZGV4cChz
dGF0aWNfY2FzdDxUeXBlUGFyYW0+KHZhbHVlKSwgaSk7CisgICAgICAgICAgICBFWFBFQ1RfRE9V
QkxFX0VRKGZ2YWx1ZSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOEltcGwoZnZh
bHVlKSkpOworICAgICAgICAgICAgRVhQRUNUX0RPVUJMRV9FUSgtZnZhbHVlLCBzdGF0aWNfY2Fz
dDxUeXBlUGFyYW0+KC1XVEY6OkludDEyOEltcGwoZnZhbHVlKSkpOworICAgICAgICAgICAgRVhQ
RUNUX0RPVUJMRV9FUSgtZnZhbHVlLCBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KFdURjo6SW50MTI4
SW1wbCgtZnZhbHVlKSkpOworICAgICAgICAgICAgRVhQRUNUX0RPVUJMRV9FUShmdmFsdWUsIHN0
YXRpY19jYXN0PFR5cGVQYXJhbT4oLVdURjo6SW50MTI4SW1wbCgtZnZhbHVlKSkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gUm91bmQgdHJpcCBjb252ZXJzaW9ucyB3aXRoIGEgc21hbGwg
c2FtcGxlIG9mIHJhbmRvbSBsYXJnZSBwb3NpdGl2ZSB2YWx1ZXMuCisgICAgV1RGOjpJbnQxMjhJ
bXBsIGxhcmdlX3ZhbHVlc1tdID0geworICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHg1YjA2NDBk
OTZjN2IzZDlmLCAweGI3YTcxODllNTFkMTg2MjIpLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgo
MHgzNGJlZDA0MmM2ZjY1MjcwLCAweDczYjIzNjU3MDY2OWEwODkpLAorICAgICAgICBXVEY6Ok1h
a2VJbnQxMjgoMHg0M2RlYmE5ZTZkYTEyNzI0LCAweGY3ZjBmODNkYTY4Njc5N2QpLAorICAgICAg
ICBXVEY6Ok1ha2VJbnQxMjgoMHg3MWU4ZDM4M2JlNGU1NTg5LCAweDc1YzNmOTZmYjAwNzUyYjYp
CisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50MTI4SW1wbCB2YWx1ZSA6IGxhcmdlX3ZhbHVlcykg
eworICAgICAgICAvLyBNYWtlIHZhbHVlIGhhdmUgYXMgbWFueSBzaWduaWZpY2FudCBiaXRzIGFz
IGNhbiBiZSByZXByZXNlbnRlZCBieQorICAgICAgICAvLyB0aGUgbWFudGlzc2EsIGFsc28gbWFr
aW5nIHN1cmUgdGhlIGhpZ2hlc3QgYW5kIGxvd2VzdCBiaXQgaW4gdGhlIHJhbmdlCisgICAgICAg
IC8vIGFyZSBzZXQuCisgICAgICAgIHZhbHVlID4+PSAoMTI3IC0gc3RkOjpudW1lcmljX2xpbWl0
czxUeXBlUGFyYW0+OjpkaWdpdHMpOworICAgICAgICB2YWx1ZSB8PSBXVEY6OkludDEyOEltcGwo
MSkgPDwgKHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZVBhcmFtPjo6ZGlnaXRzIC0gMSk7CisgICAg
ICAgIHZhbHVlIHw9IDE7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTI3IC0gc3RkOjpu
dW1lcmljX2xpbWl0czxUeXBlUGFyYW0+OjpkaWdpdHM7ICsraSkgeworICAgICAgICAgICAgV1RG
OjpJbnQxMjhJbXBsIGludF92YWx1ZSA9IHZhbHVlIDw8IGk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoaW50X3ZhbHVlLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdURjo6SW50MTI4SW1w
bD4oc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihpbnRfdmFsdWUpKSk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoLWludF92YWx1ZSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXVEY6OkludDEy
OEltcGw+KHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oLWludF92YWx1ZSkpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFNtYWxsIHNhbXBsZSBvZiBjaGVja3MgdGhhdCByb3VuZGluZyBpcyB0
b3dhcmQgemVybworICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoVHlwZVBhcmFtKDAu
MSkpKTsKKyAgICBFWFBFQ1RfRVEoMTcsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oMTcuOCkp
KTsKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKFR5cGVQYXJhbSgtMC44KSkpOwor
ICAgIEVYUEVDVF9FUSgtNTMsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oLTUzLjEpKSk7Cisg
ICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oMC41KSkpOworICAgIEVY
UEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoVHlwZVBhcmFtKC0wLjUpKSk7CisgICAgVHlwZVBh
cmFtIGp1c3RfbHRfb25lID0gc3RkOjpuZXh0dG93YXJkKFR5cGVQYXJhbSgxKSwgVHlwZVBhcmFt
KDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKGp1c3RfbHRfb25lKSk7Cisg
ICAgVHlwZVBhcmFtIGp1c3RfZ3RfbWludXNfb25lID0gc3RkOjpuZXh0dG93YXJkKFR5cGVQYXJh
bSgtMSksIFR5cGVQYXJhbSgwKSk7CisgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbChq
dXN0X2d0X21pbnVzX29uZSkpOworCisgICAgLy8gQ2hlY2sgbGltaXRzCisgICAgRVhQRUNUX0RP
VUJMRV9FUShzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oMSksIDEyNyksCisgICAg
ICAgIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oV1RGOjpJbnQxMjhNYXgoKSkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoLXN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigxKSwgMTI3KSwK
KyAgICAgICAgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOE1pbigpKSk7Cit9CisK
K1RFU1QoV1RGX0ludDEyOCwgRmFjdG9yeVRlc3QpCit7CisgICAgRVhQRUNUX0VRKFdURjo6SW50
MTI4SW1wbCgtMSksIFdURjo6TWFrZUludDEyOCgtMSwgLTEpKTsKKyAgICBFWFBFQ1RfRVEoV1RG
OjpJbnQxMjhJbXBsKC0zMSksIFdURjo6TWFrZUludDEyOCgtMSwgLTMxKSk7CisgICAgRVhQRUNU
X0VRKFdURjo6SW50MTI4SW1wbChzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSks
CisgICAgICAgIFdURjo6TWFrZUludDEyOCgtMSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90
Pjo6bWluKCkpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKDApLCBXVEY6Ok1ha2VJ
bnQxMjgoMCwgMCkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoMSksIFdURjo6TWFr
ZUludDEyOCgwLCAxKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgwLCBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpOworfQorCitURVNUKFdURl9JbnQx
MjgsIEhpZ2hMb3dUZXN0KQoreworICAgIHN0cnVjdCBIaWdoTG93UGFpciB7CisgICAgICAgIGlu
dDY0X3QgaGlnaDsKKyAgICAgICAgdWludDY0X3QgbG93OworICAgIH07CisgICAgSGlnaExvd1Bh
aXIgdmFsdWVzW10geyB7IDAsIDAgfSwgeyAwLCAxIH0sIHsgMSwgMCB9LCB7IDEyMywgNDU2IH0s
IHsgLTY1NCwgMzIxIH0gfTsKKyAgICBmb3IgKGNvbnN0IEhpZ2hMb3dQYWlyJiBwYWlyIDogdmFs
dWVzKSB7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCB2YWx1ZSA9IFdURjo6TWFrZUludDEyOChw
YWlyLmhpZ2gsIHBhaXIubG93KTsKKyAgICAgICAgRVhQRUNUX0VRKHBhaXIubG93LCBXVEY6Oklu
dDEyOExvdzY0KHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShwYWlyLmhpZ2gsIFdURjo6SW50
MTI4SGlnaDY0KHZhbHVlKSk7CisgICAgfQorfQorCitURVNUKFdURl9JbnQxMjgsIExpbWl0c1Rl
c3QpCit7CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgweDdmZmZmZmZmZmZmZmZmZmYs
IDB4ZmZmZmZmZmZmZmZmZmZmZiksCisgICAgICAgIFdURjo6SW50MTI4TWF4KCkpOworICAgIEVY
UEVDVF9FUShXVEY6OkludDEyOE1heCgpLCB+V1RGOjpJbnQxMjhNaW4oKSk7Cit9CisKK1RFU1Qo
V1RGX0ludDEyOCwgQ29uc3RleHByVGVzdCkKK3sKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJ
bXBsIHplcm8gPSBXVEY6OkludDEyOEltcGwoKTsKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJ
bXBsIG9uZSA9IDE7CisgICAgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBtaW51c190d28gPSAt
MjsKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIG1pbiA9IFdURjo6SW50MTI4TWluKCk7
CisgICAgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBtYXggPSBXVEY6OkludDEyOE1heCgpOwor
ICAgIEVYUEVDVF9FUSh6ZXJvLCBXVEY6OkludDEyOEltcGwoMCkpOworICAgIEVYUEVDVF9FUShv
bmUsIFdURjo6SW50MTI4SW1wbCgxKSk7CisgICAgRVhQRUNUX0VRKG1pbnVzX3R3bywgV1RGOjpN
YWtlSW50MTI4KC0xLCAtMikpOworICAgIEVYUEVDVF9HVChtYXgsIG9uZSk7CisgICAgRVhQRUNU
X0xUKG1pbiwgbWludXNfdHdvKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBDb21wYXJpc29uVGVz
dCkKK3sKKyAgICBzdHJ1Y3QgVGVzdENhc2UgeworICAgICAgICBXVEY6OkludDEyOEltcGwgc21h
bGxlcjsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGxhcmdlcjsKKyAgICB9OworICAgIFRlc3RD
YXNlIGNhc2VzW10gPSB7CisgICAgICAgIHsgV1RGOjpJbnQxMjhJbXBsKDApLCBXVEY6OkludDEy
OEltcGwoMTIzKSB9LAorICAgICAgICB7IFdURjo6TWFrZUludDEyOCgtMTIsIDM0KSwgV1RGOjpN
YWtlSW50MTI4KDEyLCAzNCkgfSwKKyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgoMSwgMTAwMCks
IFdURjo6TWFrZUludDEyOCgxMDAwLCAxKSB9LAorICAgICAgICB7IFdURjo6TWFrZUludDEyOCgt
MTAwMCwgMTAwMCksIFdURjo6TWFrZUludDEyOCgtMSwgMSkgfSwKKyAgICB9OworICAgIGZvciAo
Y29uc3QgVGVzdENhc2UmIHBhaXIgOiBjYXNlcykgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0
ZXN0aW5nOjpNZXNzYWdlKCkgPDwgInBhaXIuc21hbGxlciA9ICIgPDwgcGFpci5zbWFsbGVyCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiOyBwYWlyLmxhcmdl
ciA9ICIgPDwgcGFpci5sYXJnZXIpOworCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21hbGxl
ciA9PSBwYWlyLnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAg
IEVYUEVDVF9UUlVFKHBhaXIubGFyZ2VyID09IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRh
YmlsaXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5zbWFsbGVyID09IHBhaXIu
bGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorCisgICAgICAgIEVYUEVDVF9U
UlVFKHBhaXIuc21hbGxlciAhPSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9j
aGVjaykKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhaXIuc21hbGxlciAhPSBwYWlyLnNtYWxsZXIp
OyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9GQUxTRShwYWly
LmxhcmdlciAhPSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKwor
ICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLnNtYWxsZXIgPCBwYWlyLmxhcmdlcik7IC8vIE5PTElO
VChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhaXIubGFyZ2VyIDwg
cGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorCisgICAgICAgIEVY
UEVDVF9UUlVFKHBhaXIubGFyZ2VyID4gcGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmls
aXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5zbWFsbGVyID4gcGFpci5sYXJn
ZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisKKyAgICAgICAgRVhQRUNUX1RSVUUo
cGFpci5zbWFsbGVyIDw9IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNr
KQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5sYXJnZXIgPD0gcGFpci5zbWFsbGVyKTsgLy8g
Tk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLnNtYWxs
ZXIgPD0gcGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAg
ICBFWFBFQ1RfVFJVRShwYWlyLmxhcmdlciA8PSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFk
YWJpbGl0eS9jaGVjaykKKworICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLmxhcmdlciA+PSBwYWly
LnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9G
QUxTRShwYWlyLnNtYWxsZXIgPj0gcGFpci5sYXJnZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkv
Y2hlY2spCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21hbGxlciA+PSBwYWlyLnNtYWxsZXIp
OyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIu
bGFyZ2VyID49IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAg
IH0KK30KKworVEVTVChXVEZfSW50MTI4LCBVbmFyeVBsdXNUZXN0KQoreworICAgIGludDY0X3Qg
dmFsdWVzNjRbXSA9IHsgMCwgMSwgMTIzNDUsIDB4NDAwMDAwMDAwMDAwMDAwMCwKKyAgICAgICAg
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkgfTsKKyAgICBmb3IgKGludDY0X3Qg
dmFsdWUgOiB2YWx1ZXM2NCkgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNz
YWdlKCkgPDwgInZhbHVlID0gIiA8PCB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6
SW50MTI4SW1wbCh2YWx1ZSksICtXVEY6OkludDEyOEltcGwodmFsdWUpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKFdURjo6SW50MTI4SW1wbCgtdmFsdWUpLCArV1RGOjpJbnQxMjhJbXBsKC12YWx1ZSkp
OworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHZhbHVlLCAwKSwgK1dURjo6TWFr
ZUludDEyOCh2YWx1ZSwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KC12
YWx1ZSwgMCksICtXVEY6Ok1ha2VJbnQxMjgoLXZhbHVlLCAwKSk7CisgICAgfQorfQorCitURVNU
KFdURl9JbnQxMjgsIFVuYXJ5TmVnYXRpb25UZXN0KQoreworICAgIGludDY0X3QgdmFsdWVzNjRb
XSA9IHsgMCwgMSwgMTIzNDUsIDB4NDAwMDAwMDAwMDAwMDAwMCwKKyAgICAgICAgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkgfTsKKyAgICBmb3IgKGludDY0X3QgdmFsdWUgOiB2
YWx1ZXM2NCkgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwg
InZhbHVlID0gIiA8PCB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1w
bCgtdmFsdWUpLCAtV1RGOjpJbnQxMjhJbXBsKHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShX
VEY6OkludDEyOEltcGwodmFsdWUpLCAtV1RGOjpJbnQxMjhJbXBsKC12YWx1ZSkpOworICAgICAg
ICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KC12YWx1ZSwgMCksIC1XVEY6Ok1ha2VJbnQxMjgo
dmFsdWUsIDApKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh2YWx1ZSwgMCks
IC1XVEY6Ok1ha2VJbnQxMjgoLXZhbHVlLCAwKSk7CisgICAgfQorfQorCitURVNUKFdURl9JbnQx
MjgsIExvZ2ljYWxOb3RUZXN0KQoreworICAgIEVYUEVDVF9UUlVFKCFXVEY6OkludDEyOEltcGwo
MCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICBFWFBFQ1Rf
RkFMU0UoIVdURjo6TWFrZUludDEyOCgwLCB1aW50NjRfdCB7IDEgfSA8PCBpKSk7CisgICAgfQor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjM7ICsraSkgeworICAgICAgICBFWFBFQ1RfRkFMU0Uo
IVdURjo6TWFrZUludDEyOChpbnQ2NF90IHsgMSB9IDw8IGksIDApKTsKKyAgICB9Cit9CisKK1RF
U1QoV1RGX0ludDEyOCwgQWRkaXRpb25TdWJ0cmFjdGlvblRlc3QpCit7CisgICAgLy8gNjQgYml0
IHBhaXJzIHRoYXQgd2lsbCBub3QgY2F1c2Ugb3ZlcmZsb3cgLyB1bmRlcmZsb3cuIFRoZXNlIHRl
c3QgbmVnYXRpdmUKKyAgICAvLyBjYXJyeTsgcG9zaXRpdmUgY2FycnkgbXVzdCBiZSBjaGVja2Vk
IHNlcGFyYXRlbHkuCisgICAgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+IGNhc2VzW10gewor
ICAgICAgICB7IDAsIDAgfSwgLy8gMCwgMAorICAgICAgICB7IDAsIDI5NDU3ODEyOTA4MzQgfSwg
Ly8gMCwgKworICAgICAgICB7IDE5MDgzNTc2MTkyMzQsIDAgfSwgLy8gKywgMAorICAgICAgICB7
IDAsIC0xMjA0ODk1OTE4MjQ1IH0sIC8vIDAsIC0KKyAgICAgICAgeyAtMjk1NzkyODUyMzU2MCwg
MCB9LCAvLyAtLCAwCisgICAgICAgIHsgODkwMjM5ODIzMTI0NjEsIDk4MzQ2MDEyNTY3MTM0IH0s
IC8vICssICsKKyAgICAgICAgeyAtNjM0NTQyMzQ1NjgyMzksIC0yMzQ1NjIzNTIzMDc3MyB9LCAv
LyAtLCAtCisgICAgICAgIHsgOTgyNjM0NTcyNjM1MDIsIC0yMTQyODU2MTkzNTkyNSB9LCAvLyAr
LCAtCisgICAgICAgIHsgLTg4MjM1MjM3NDM4NDY3LCAxNTkyMzY1OTIzNDU3MyB9LCAvLyAtLCAr
CisgICAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBjYXNlcykgeworICAgICAgICBT
Q09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkKKyAgICAgICAgICAgIDw8ICJwYWlyID0g
eyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBhaXIuc2Vjb25kIDw8ICd9Jyk7CisKKyAgICAg
ICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0ICsgcGFpci5zZWNvbmQpLAor
ICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpICsgV1RGOjpJbnQxMjhJbXBs
KHBhaXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5z
ZWNvbmQgKyBwYWlyLmZpcnN0KSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLnNl
Y29uZCkgKz0gV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpKTsKKworICAgICAgICBFWFBFQ1Rf
RVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgLSBwYWlyLnNlY29uZCksCisgICAgICAgICAg
ICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgLSBXVEY6OkludDEyOEltcGwocGFpci5zZWNv
bmQpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCAtIHBh
aXIuZmlyc3QpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSAtPSBX
VEY6OkludDEyOEltcGwocGFpci5maXJzdCkpOworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAg
ICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCArIHBhaXIuZmlyc3QsIDApLAorICAg
ICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSArIFdURjo6TWFrZUludDEy
OChwYWlyLmZpcnN0LCAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6
TWFrZUludDEyOChwYWlyLmZpcnN0ICsgcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RG
OjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApICs9IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29u
ZCwgMCkpOworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEy
OChwYWlyLnNlY29uZCAtIHBhaXIuZmlyc3QsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50
MTI4KHBhaXIuc2Vjb25kLCAwKSAtIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0
IC0gcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmly
c3QsIDApIC09IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgIH0KKworICAg
IC8vIGNoZWNrIHBvc2l0aXZlIGNhcnJ5CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgz
MSwgMCksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgyMCwgMSkgKyBXVEY6Ok1ha2VJbnQxMjgo
MTAsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpOworfQorCitURVNUKFdU
Rl9JbnQxMjgsIEluY3JlbWVudERlY3JlbWVudFRlc3QpCit7CisgICAgV1RGOjpJbnQxMjhJbXBs
IHZhbHVlID0gMDsKKyAgICBFWFBFQ1RfRVEoMCwgdmFsdWUrKyk7CisgICAgRVhQRUNUX0VRKDEs
IHZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoMSwgdmFsdWUtLSk7CisgICAgRVhQRUNUX0VRKDAsIHZh
bHVlKTsKKyAgICBFWFBFQ1RfRVEoLTEsIC0tdmFsdWUpOworICAgIEVYUEVDVF9FUSgtMSwgdmFs
dWUpOworICAgIEVYUEVDVF9FUSgwLCArK3ZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoMCwgdmFsdWUp
OworfQorCitURVNUKFdURl9JbnQxMjgsIE11bHRpcGxpY2F0aW9uVGVzdCkKK3sKKyAgICAvLyAx
IGJpdCB4IDEgYml0LCBhbmQgbmVnYXRpdmUgY29tYmluYXRpb25zCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTI3IC0gaTsg
KytqKSB7CisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwg
ImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBXVEY6OkludDEyOElt
cGwgYSA9IFdURjo6SW50MTI4SW1wbCgxKSA8PCBpOworICAgICAgICAgICAgV1RGOjpJbnQxMjhJ
bXBsIGIgPSBXVEY6OkludDEyOEltcGwoMSkgPDwgajsKKyAgICAgICAgICAgIFdURjo6SW50MTI4
SW1wbCBjID0gV1RGOjpJbnQxMjhJbXBsKDEpIDw8IChpICsgaik7CisKKyAgICAgICAgICAgIEVY
UEVDVF9FUShjLCBhICogYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIC1hICogYik7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIGEgKiAtYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
YywgLWEgKiAtYik7CisKKyAgICAgICAgICAgIEVYUEVDVF9FUShjLCBXVEY6OkludDEyOEltcGwo
YSkgKj0gYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIFdURjo6SW50MTI4SW1wbCgtYSkg
Kj0gYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIFdURjo6SW50MTI4SW1wbChhKSAqPSAt
Yik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoYywgV1RGOjpJbnQxMjhJbXBsKC1hKSAqPSAtYik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYWlycyBvZiByYW5kb20gdmFsdWVzIHRoYXQg
d2lsbCBub3Qgb3ZlcmZsb3cgc2lnbmVkIDY0LWJpdCBtdWx0aXBsaWNhdGlvbgorICAgIHN0ZDo6
cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiBzbWFsbF92YWx1ZXNbXSA9IHsKKyAgICAgICAgeyAweDVl
NjEsIDB4ZjI5Zjc5Y2ExNGI0IH0sIC8vICssICsKKyAgICAgICAgeyAweDNlMDMzYiwgLTB4NjEy
YzBlZTU0OSB9LCAvLyArLCAtCisgICAgICAgIHsgLTB4MDUyY2U3ZTgsIDB4N2M3MjhmMGYgfSwg
Ly8gLSwgKworICAgICAgICB7IC0weDNhZjcwNTQ2MjYsIC0weGZiMWUxZCB9LCAvLyAtLCAtCisg
ICAgfTsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiYgcGFpciA6
IHNtYWxsX3ZhbHVlcykgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdl
KCkKKyAgICAgICAgICAgIDw8ICJwYWlyID0geyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBh
aXIuc2Vjb25kIDw8ICd9Jyk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChw
YWlyLmZpcnN0ICogcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBh
aXIuZmlyc3QpICogV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVD
VF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJzdCAqIHBhaXIuc2Vjb25kKSwKKyAgICAgICAg
ICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0KSAqPSBXVEY6OkludDEyOEltcGwocGFpci5z
ZWNvbmQpKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3Qg
KiBwYWlyLnNlY29uZCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJz
dCwgMCkgKiBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKyAgICAgICAgRVhQRUNUX0VR
KFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0ICogcGFpci5zZWNvbmQsIDApLAorICAgICAgICAg
ICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApICo9IFdURjo6SW50MTI4SW1wbChwYWly
LnNlY29uZCkpOworICAgIH0KKworICAgIC8vIFBhaXJzIG9mIHBvc2l0aXZlIHJhbmRvbSB2YWx1
ZXMgdGhhdCB3aWxsIG5vdCBvdmVyZmxvdyA2NC1iaXQKKyAgICAvLyBtdWx0aXBsaWNhdGlvbiBh
bmQgY2FuIGJlIGxlZnQgc2hpZnRlZCBieSAzMiB3aXRob3V0IG92ZXJmbG93CisgICAgc3RkOjpw
YWlyPGludDY0X3QsIGludDY0X3Q+IHNtYWxsX3ZhbHVlczJbXSA9IHsKKyAgICAgICAgeyAweDFi
YjBhMTEwLCAweDMxNDg3NjcxIH0sCisgICAgICAgIHsgMHg0NzkyNzg0ZSwgMHgyOGFkZDdkNyB9
LAorICAgICAgICB7IDB4N2I2NjU1M2EsIDB4MTFkZmY4ZWYgfSwKKyAgICB9OworICAgIGZvciAo
Y29uc3Qgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+JiBwYWlyIDogc21hbGxfdmFsdWVzMikg
eworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkKKyAgICAgICAgICAg
IDw8ICJwYWlyID0geyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBhaXIuc2Vjb25kIDw8ICd9
Jyk7CisKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGEgPSBXVEY6OkludDEyOEltcGwocGFpci5m
aXJzdCA8PCAzMik7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBiID0gV1RGOjpJbnQxMjhJbXBs
KHBhaXIuc2Vjb25kIDw8IDMyKTsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGMgPSBXVEY6Ok1h
a2VJbnQxMjgocGFpci5maXJzdCAqIHBhaXIuc2Vjb25kLCAwKTsKKworICAgICAgICBFWFBFQ1Rf
RVEoYywgYSAqIGIpOworICAgICAgICBFWFBFQ1RfRVEoLWMsIC1hICogYik7CisgICAgICAgIEVY
UEVDVF9FUSgtYywgYSAqIC1iKTsKKyAgICAgICAgRVhQRUNUX0VRKGMsIC1hICogLWIpOworCisg
ICAgICAgIEVYUEVDVF9FUShjLCBXVEY6OkludDEyOEltcGwoYSkgKj0gYik7CisgICAgICAgIEVY
UEVDVF9FUSgtYywgV1RGOjpJbnQxMjhJbXBsKC1hKSAqPSBiKTsKKyAgICAgICAgRVhQRUNUX0VR
KC1jLCBXVEY6OkludDEyOEltcGwoYSkgKj0gLWIpOworICAgICAgICBFWFBFQ1RfRVEoYywgV1RG
OjpJbnQxMjhJbXBsKC1hKSAqPSAtYik7CisgICAgfQorCisgICAgLy8gY2hlY2sgMCwgMSwgYW5k
IC0xIGJlaGF2aW9yIHdpdGggbGFyZ2UgdmFsdWVzCisgICAgV1RGOjpJbnQxMjhJbXBsIGxhcmdl
X3ZhbHVlc1tdID0geworICAgICAgICB7IFdURjo6TWFrZUludDEyOCgweGQ2NmYwNjFhZjAyZDA0
MDgsIDB4NzI3ZDI4NDZjYjQ3NWI1MykgfSwKKyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgoMHgy
N2I4ZDVlZDYxMDQ0NTJkLCAweDAzZjhhMzNiMGVlMWRmNGYpIH0sCisgICAgICAgIHsgLVdURjo6
TWFrZUludDEyOCgweDYyMWI2NjI2YjllOGQwNDIsIDB4MjczMTFhYzk5ZGYwMDkzOCkgfSwKKyAg
ICAgICAgeyAtV1RGOjpNYWtlSW50MTI4KDB4MzRlMDY1NmYxZTk1ZmI2MCwgMHg0MjgxY2ZkNzMx
MjU3YTQ3KSB9LAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiBsYXJn
ZV92YWx1ZXMpIHsKKyAgICAgICAgRVhQRUNUX0VRKDAsIDAgKiB2YWx1ZSk7CisgICAgICAgIEVY
UEVDVF9FUSgwLCB2YWx1ZSAqIDApOworICAgICAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJ
bXBsKDApICo9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHZhbHVlICo9IDApOworCisg
ICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgMSAqIHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKHZh
bHVlLCB2YWx1ZSAqIDEpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIFdURjo6SW50MTI4SW1w
bCgxKSAqPSB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgKj0gMSk7CisK
KyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgLTEgKiB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9F
USgtdmFsdWUsIHZhbHVlICogLTEpOworICAgICAgICBFWFBFQ1RfRVEoLXZhbHVlLCBXVEY6Oklu
dDEyOEltcGwoLTEpICo9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgdmFsdWUg
Kj0gLTEpOworICAgIH0KKworICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0ZWQgcmFuZG9tIGxhcmdl
IHZhbHVlIGNhc2VzCisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgweGNkMGVmZDM0NDIy
MTliYiwgMHhkZTQ3YzA1YmNkOWRmNmUxKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4N2M2
NDQ4LCAweDNiYzQyODVjNDdhOWQyNTMpICogMHgxYTYwMzc1MzdiKTsKKyAgICBFWFBFQ1RfRVEo
LVdURjo6TWFrZUludDEyOCgweDFmOGYxNDk4NTBiMWU1ZTYsIDB4MWU1MGQ2YjUyZDI3MmMzZSks
CisgICAgICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHgyMywgMHgyZTY4YTUxM2NhMWI4ODU5KSAqIDB4
ZTVhNDM0Y2QxNDg2NmUpOworICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtlSW50MTI4KDB4NTVjYWU3
MzIwMjlkMWZjZSwgMHhjYTY0NzRiNjQyMzI2M2U0KSwKKyAgICAgICAgMHhhOWI5OGE4ZGRmNjZi
YyAqIC1XVEY6Ok1ha2VJbnQxMjgoMHg4MSwgMHg2NzJlNTgyMzFlMjQ2OWQ3KSk7CisgICAgRVhQ
RUNUX0VRKFdURjo6TWFrZUludDEyOCgweDE5YzhiNzYyMGI1MDdkYzQsIDB4ZmVjMDQyYjcxYTVm
MjlhNCksCisgICAgICAgIC0weDNlMzkzNDExNDcgKiAtV1RGOjpNYWtlSW50MTI4KDB4NmExNGIy
LCAweDVlZDM0Y2NhNDIzMjdiM2MpKTsKKworICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgo
MHhjZDBlZmQzNDQyMjE5YmIsIDB4ZGU0N2MwNWJjZDlkZjZlMSksCisgICAgICAgIFdURjo6TWFr
ZUludDEyOCgweDdjNjQ0OCwgMHgzYmM0Mjg1YzQ3YTlkMjUzKSAqPSAweDFhNjAzNzUzN2IpOwor
ICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtlSW50MTI4KDB4MWY4ZjE0OTg1MGIxZTVlNiwgMHgxZTUw
ZDZiNTJkMjcyYzNlKSwKKyAgICAgICAgLVdURjo6TWFrZUludDEyOCgweDIzLCAweDJlNjhhNTEz
Y2ExYjg4NTkpICo9IDB4ZTVhNDM0Y2QxNDg2NmUpOworICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtl
SW50MTI4KDB4NTVjYWU3MzIwMjlkMWZjZSwgMHhjYTY0NzRiNjQyMzI2M2U0KSwKKyAgICAgICAg
V1RGOjpJbnQxMjhJbXBsKDB4YTliOThhOGRkZjY2YmMpICo9IC1XVEY6Ok1ha2VJbnQxMjgoMHg4
MSwgMHg2NzJlNTgyMzFlMjQ2OWQ3KSk7CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgw
eDE5YzhiNzYyMGI1MDdkYzQsIDB4ZmVjMDQyYjcxYTVmMjlhNCksCisgICAgICAgIFdURjo6SW50
MTI4SW1wbCgtMHgzZTM5MzQxMTQ3KSAqPSAtV1RGOjpNYWtlSW50MTI4KDB4NmExNGIyLCAweDVl
ZDM0Y2NhNDIzMjdiM2MpKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBEaXZpc2lvbkFuZE1vZHVs
b1Rlc3QpCit7CisgICAgLy8gQ2hlY2sgYWdhaW5zdCA2NCBiaXQgZGl2aXNpb24gYW5kIG1vZHVs
byBvcGVyYXRvcnMgd2l0aCBhIHNhbXBsZSBvZgorICAgIC8vIHJhbmRvbWx5IGdlbmVyYXRlZCBw
YWlycy4KKyAgICBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gc21hbGxfcGFpcnNbXSA9IHsK
KyAgICAgICAgeyAweDE1ZjJhNjQxMzgsIDB4NjdkYTA1IH0sCisgICAgICAgIHsgMHg1ZTU2ZDE5
NGFmNDMwNDVmLCAweGNmMTU0M2ZiOTkgfSwKKyAgICAgICAgeyAweDE1ZTYxZWQwNTIwMzZhLCAt
MHhjOGU2IH0sCisgICAgICAgIHsgMHg4ODEyNWEzNDFlODUsIC0weGQyM2ZiNzc2ODMgfSwKKyAg
ICAgICAgeyAtMHhjMDZlMjAsIDB4NWEgfSwKKyAgICAgICAgeyAtMHg0ZjEwMDIxOWFlYTNlODVk
LCAweGRjYzU2Y2I0ZWZlOTkzIH0sCisgICAgICAgIHsgLTB4MTY4ZDYyOTEwNSwgLTB4YTcgfSwK
KyAgICAgICAgeyAtMHg3YjQ0ZTkyZjAzYWIyMzc1LCAtMHg2NTE2IH0sCisgICAgfTsKKyAgICBm
b3IgKGNvbnN0IHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiYgcGFpciA6IHNtYWxsX3BhaXJz
KSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAg
ICAgPDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5zZWNvbmQgPDwg
J30nKTsKKworICAgICAgICBXVEY6OkludDEyOEltcGwgZGl2aWRlbmQgPSBwYWlyLmZpcnN0Owor
ICAgICAgICBXVEY6OkludDEyOEltcGwgZGl2aXNvciA9IHBhaXIuc2Vjb25kOworICAgICAgICBp
bnQ2NF90IHF1b3RpZW50ID0gcGFpci5maXJzdCAvIHBhaXIuc2Vjb25kOworICAgICAgICBpbnQ2
NF90IHJlbWFpbmRlciA9IHBhaXIuZmlyc3QgJSBwYWlyLnNlY29uZDsKKworICAgICAgICBFWFBF
Q1RfRVEocXVvdGllbnQsIGRpdmlkZW5kIC8gZGl2aXNvcik7CisgICAgICAgIEVYUEVDVF9FUShx
dW90aWVudCwgV1RGOjpJbnQxMjhJbXBsKGRpdmlkZW5kKSAvPSBkaXZpc29yKTsKKyAgICAgICAg
RVhQRUNUX0VRKHJlbWFpbmRlciwgZGl2aWRlbmQgJSBkaXZpc29yKTsKKyAgICAgICAgRVhQRUNU
X0VRKHJlbWFpbmRlciwgV1RGOjpJbnQxMjhJbXBsKGRpdmlkZW5kKSAlPSBkaXZpc29yKTsKKyAg
ICB9CisKKyAgICAvLyBUZXN0IGJlaGF2aW9yIHdpdGggMCwgMSwgYW5kIC0xIHdpdGggYSBzYW1w
bGUgb2YgcmFuZG9tbHkgZ2VuZXJhdGVkIGxhcmdlCisgICAgLy8gdmFsdWVzLgorICAgIFdURjo6
SW50MTI4SW1wbCB2YWx1ZXNbXSA9IHsKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4NjNkMjZl
ZTY4OGE5NjJiMiwgMHg5ZTE0MTFhYmRhNWMxZDcwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4
KDB4MTUyZjM4NTE1OWQ2Zjk4NiwgMHhiZjhkNDhlZjYzZGEzOTVkKSwKKyAgICAgICAgLVdURjo6
TWFrZUludDEyOCgweDMwOThkNzU2NzAzMDAzOGMsIDB4MTRlN2E4YTA5OGRjMjE2NCksCisgICAg
ICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHg0OWEwMzdhY2EzNWM4MDlmLCAweGE2YTg3NTI1NDgwZWYz
MzApLAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiB2YWx1ZXMpIHsK
KyAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJ2YWx1ZSA9ICIg
PDwgdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSgwLCAwIC8gdmFsdWUpOworICAgICAgICBF
WFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKDApIC89IHZhbHVlKTsKKyAgICAgICAgRVhQRUNU
X0VRKDAsIDAgJSB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwo
MCkgJT0gdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgLyAxKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwodmFsdWUpIC89IDEpOworICAg
ICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgJSAxKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFdURjo6
SW50MTI4SW1wbCh2YWx1ZSkgJT0gMSk7CisKKyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgdmFs
dWUgLyAtMSk7CisgICAgICAgIEVYUEVDVF9FUSgtdmFsdWUsIFdURjo6SW50MTI4SW1wbCh2YWx1
ZSkgLz0gLTEpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgJSAtMSk7CisgICAgICAgIEVY
UEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwodmFsdWUpICU9IC0xKTsKKyAgICB9CisKKyAgICAv
LyBNaW4gYW5kIG1heCB2YWx1ZXMKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhNYXgoKSAv
IFdURjo6SW50MTI4TWluKCkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOE1heCgpLCBXVEY6
OkludDEyOE1heCgpICUgV1RGOjpJbnQxMjhNaW4oKSk7CisgICAgRVhQRUNUX0VRKC0xLCBXVEY6
OkludDEyOE1pbigpIC8gV1RGOjpJbnQxMjhNYXgoKSk7CisgICAgRVhQRUNUX0VRKC0xLCBXVEY6
OkludDEyOE1pbigpICUgV1RGOjpJbnQxMjhNYXgoKSk7CisKKyAgICAvLyBQb3dlciBvZiB0d28g
ZGl2aXNpb24gYW5kIG1vZHVsbyBvZiByYW5kb20gbGFyZ2UgZGl2aWRlbmRzCisgICAgV1RGOjpJ
bnQxMjhJbXBsIHBvc2l0aXZlX3ZhbHVlc1tdID0geworICAgICAgICBXVEY6Ok1ha2VJbnQxMjgo
MHgyMWUxYTFjYzY5NTc0NjIwLCAweGU3YWM0NDdmYWIyZmM4NjkpLAorICAgICAgICBXVEY6Ok1h
a2VJbnQxMjgoMHgzMmMyZmYzYWI4OWU2NmU4LCAweDAzMzc5YTYxM2ZkMWNlNzQpLAorICAgICAg
ICBXVEY6Ok1ha2VJbnQxMjgoMHg2ZjMyY2E3ODYxODRkY2FmLCAweDA0NmY5YzllY2IzYTljZTEp
LAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHgxYWViNDY5ZGQ5OTBlMGVlLCAweGRhMjc0MGYy
NDNjZDM3ZWIpLAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiBwb3Np
dGl2ZV92YWx1ZXMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMjc7ICsraSkgewor
ICAgICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpCisgICAgICAgICAg
ICAgICAgPDwgInZhbHVlID0gIiA8PCB2YWx1ZSA8PCAiOyBpID0gIiA8PCBpKTsKKyAgICAgICAg
ICAgIFdURjo6SW50MTI4SW1wbCBwb3dlcl9vZl90d28gPSBXVEY6OkludDEyOEltcGwoMSkgPDwg
aTsKKworICAgICAgICAgICAgRVhQRUNUX0VRKHZhbHVlID4+IGksIHZhbHVlIC8gcG93ZXJfb2Zf
dHdvKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSA+PiBpLCBXVEY6OkludDEyOEltcGwo
dmFsdWUpIC89IHBvd2VyX29mX3R3byk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWUgJiAo
cG93ZXJfb2ZfdHdvIC0gMSksIHZhbHVlICUgcG93ZXJfb2ZfdHdvKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSh2YWx1ZSAmIChwb3dlcl9vZl90d28gLSAxKSwKKyAgICAgICAgICAgICAgICBXVEY6
OkludDEyOEltcGwodmFsdWUpICU9IHBvd2VyX29mX3R3byk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBNYW51YWxseSBjYWxjdWxhdGVkIGNhc2VzIHdpdGggcmFuZG9tIGxhcmdlIGRpdmlk
ZW5kcworICAgIHN0cnVjdCBEaXZpc2lvbk1vZENhc2UgeworICAgICAgICBXVEY6OkludDEyOElt
cGwgZGl2aWRlbmQ7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBkaXZpc29yOworICAgICAgICBX
VEY6OkludDEyOEltcGwgcXVvdGllbnQ7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCByZW1haW5k
ZXI7CisgICAgfTsKKyAgICBEaXZpc2lvbk1vZENhc2UgbWFudWFsX2Nhc2VzW10gPSB7CisgICAg
ICAgIHsgV1RGOjpNYWtlSW50MTI4KDB4NmFkYTQ4ZDQ4OTAwNzk2NiwgMHgzYzljNWM5ODE1MGQ1
ZDY5KSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCgweDhiYzMwOGZiLCAweDhjYjljYzlh
M2I4MDMzNDQpLCAweGMzYjg3ZTA4LAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4MWI3
ZGI1ZTEsIDB4ZDllY2EzNGI3YWYwNGI0OSkgfSwKKyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgo
MHhkNjk0NjUxMWI1YiwgMHg0ODg2YzVjOTY1NDZiZjVmKSwKKyAgICAgICAgICAgIC1XVEY6Ok1h
a2VJbnQxMjgoMHgyNjNiLCAweGZkNTE2Mjc5ZWZjZmUyZGMpLCAtMHg1OWNiYWJmMCwKKyAgICAg
ICAgICAgIFdURjo6TWFrZUludDEyOCgweDYyMiwgMHhmNDYyOTA5MTU1NjUxZDFmKSB9LAorICAg
ICAgICB7IC1XVEY6Ok1ha2VJbnQxMjgoMHgzM2RiNzM0ZjllOGQxMzk5LCAweDg0NDdhYzkyNDgy
YmNhNGQpLCAweDM3NDk1MDc4MjQwLAorICAgICAgICAgICAgLVdURjo6TWFrZUludDEyOCgweGYw
MWYxLCAweGJjMDM2OGJmOWE3N2VhZTgpLCAtMHgyMWE1MDhmNDA0ZCB9LAorICAgICAgICB7IC1X
VEY6Ok1ha2VJbnQxMjgoMHgxM2Y4MzdiNDA5YTA3ZTdkLCAweDdmYzhlMjQ4YTdkNzM1NjApLCAt
MHgxYjlmLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4YjkxNTc1NTZkNzI0LCAweGIx
NGY2MzU3MTRkNzU2M2UpLCAtMHgxYWRlIH0sCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IERpdmlz
aW9uTW9kQ2FzZSB0ZXN0X2Nhc2UgOiBtYW51YWxfY2FzZXMpIHsKKyAgICAgICAgRVhQRUNUX0VR
KHRlc3RfY2FzZS5xdW90aWVudCwgdGVzdF9jYXNlLmRpdmlkZW5kIC8gdGVzdF9jYXNlLmRpdmlz
b3IpOworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnF1b3RpZW50LAorICAgICAgICAgICAg
V1RGOjpJbnQxMjhJbXBsKHRlc3RfY2FzZS5kaXZpZGVuZCkgLz0gdGVzdF9jYXNlLmRpdmlzb3Ip
OworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnJlbWFpbmRlciwgdGVzdF9jYXNlLmRpdmlk
ZW5kICUgdGVzdF9jYXNlLmRpdmlzb3IpOworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnJl
bWFpbmRlciwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbCh0ZXN0X2Nhc2UuZGl2aWRlbmQp
ICU9IHRlc3RfY2FzZS5kaXZpc29yKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgQml0
d2lzZUxvZ2ljVGVzdCkKK3sKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKC0xKSwgfldU
Rjo6SW50MTI4SW1wbCgwKSk7CisKKyAgICBXVEY6OkludDEyOEltcGwgdmFsdWVzW10geworICAg
ICAgICAwLCAtMSwgMHhkZTQwMGJlZTA1YzNmZjZiLCBXVEY6Ok1ha2VJbnQxMjgoMHg3ZjMyMTc4
ZGQ4MWQ2MzRhLCAwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4YWY1MzkwNTcwNTU2MTNh
OSwgMHg3ZDEwNGQ3ZDk0NmMyZTRkKQorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwg
dmFsdWUgOiB2YWx1ZXMpIHsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB+fnZhbHVlKTsKKwor
ICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIHZhbHVlIHwgdmFsdWUpOworICAgICAgICBFWFBFQ1Rf
RVEodmFsdWUsIHZhbHVlICYgdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgXiB2
YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwodmFsdWUp
IHw9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwodmFs
dWUpICY9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbCh2YWx1
ZSkgXj0gdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgfCAwKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDAsIHZhbHVlICYgMCk7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwg
dmFsdWUgXiAwKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKC0xKSwgdmFs
dWUgfCBXVEY6OkludDEyOEltcGwoLTEpKTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB2YWx1
ZSAmIFdURjo6SW50MTI4SW1wbCgtMSkpOworICAgICAgICBFWFBFQ1RfRVEofnZhbHVlLCB2YWx1
ZSBeIFdURjo6SW50MTI4SW1wbCgtMSkpOworICAgIH0KKworICAgIC8vIHNtYWxsIHNhbXBsZSBv
ZiByYW5kb21seSBnZW5lcmF0ZWQgaW50NjRfdCdzCisgICAgc3RkOjpwYWlyPGludDY0X3QsIGlu
dDY0X3Q+IHBhaXJzNjRbXSB7CisgICAgICAgIHsgMHg3Zjg2Nzk3ZjVlOTkxYWY0LCAweDFlZTMw
NDk0ZmIwMDdjOTcgfSwKKyAgICAgICAgeyAweDBiMjc4MjgyYmFjZjAxYWYsIDB4NTg3ODBlMGE1
N2E0OWU4NiB9LAorICAgICAgICB7IDB4MDU5ZjI2NmNjYjkzYTY2NiwgMHgzZDViNzMxYmFlOTI4
NmY1IH0sCisgICAgICAgIHsgMHg2M2MwYzQ4MjBmMTIxMDhjLCAweDU4MTY2NzEzYzEyZTFjM2Eg
fSwKKyAgICAgICAgeyAweDM4MTQ4OGJiMmVkMmE2NmUsIDB4MjIyMGEzZWI3NmEzNjk4YyB9LAor
ICAgICAgICB7IDB4MmEwYTBkZmI4MWUwNmYyMSwgMHg0YjYwNTg1OTI3ZjU1MjNjIH0sCisgICAg
ICAgIHsgMHg1NTViMWMzYTAzNjk4NTM3LCAweDI1NDc4Y2QxOWQ4ZTUzY2IgfSwKKyAgICAgICAg
eyAweDQ3NTBmNmYyN2Q3NzkyMjUsIDB4MTYzOTc1NTNjNmZmMDVmYyB9LAorICAgIH07CisgICAg
Zm9yIChjb25zdCBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4mIHBhaXIgOiBwYWlyczY0KSB7
CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAgICAg
PDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5zZWNvbmQgPDwgJ30n
KTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KH5wYWlyLmZpcnN0LCB+cGFp
ci5zZWNvbmQpLAorICAgICAgICAgICAgfldURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCBwYWly
LnNlY29uZCkpOworCisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJz
dCAmIHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0
KSAmIFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgfCBwYWlyLnNlY29uZCksCisgICAgICAgICAgICBXVEY6
OkludDEyOEltcGwocGFpci5maXJzdCkgfCBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsK
KyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0IF4gcGFpci5zZWNv
bmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpIF4gV1RGOjpJbnQx
MjhJbXBsKHBhaXIuc2Vjb25kKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1w
bChwYWlyLmZpcnN0ICYgcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBs
KHBhaXIuZmlyc3QpICY9IFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworICAgICAgICBF
WFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgfCBwYWlyLnNlY29uZCksCisgICAg
ICAgICAgICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgfD0gV1RGOjpJbnQxMjhJbXBsKHBh
aXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJz
dCBeIHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0
KSBePSBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKworICAgICAgICBFWFBFQ1RfRVEo
CisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCAmIHBhaXIuc2Vjb25kLCAw
KSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSAmIFdURjo6TWFr
ZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoCisgICAgICAgICAg
ICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCB8IHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAg
ICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSB8IFdURjo6TWFrZUludDEyOChwYWly
LnNlY29uZCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoCisgICAgICAgICAgICBXVEY6Ok1ha2VJ
bnQxMjgocGFpci5maXJzdCBeIHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFr
ZUludDEyOChwYWlyLmZpcnN0LCAwKSBeIFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkp
OworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWly
LmZpcnN0ICYgcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBh
aXIuZmlyc3QsIDApICY9IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgICAg
ICBFWFBFQ1RfRVEoCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCB8IHBh
aXIuc2Vjb25kLCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAw
KSB8PSBXVEY6Ok1ha2VJbnQxMjgocGFpci5zZWNvbmQsIDApKTsKKyAgICAgICAgRVhQRUNUX0VR
KAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QgXiBwYWlyLnNlY29uZCwg
MCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCwgMCkgXj0gV1RGOjpN
YWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisgICAgfQorfQorCitURVNUKFdURl9JbnQxMjgs
IEJpdHdpc2VTaGlmdFRlc3QpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7
CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IGk7ICsraikgeworICAgICAgICAgICAgLy8g
TGVmdCBzaGlmdCBmcm9tIGotdGggYml0IHRvIGktdGggYml0LgorICAgICAgICAgICAgU0NPUEVE
X1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7IGogPSAiIDw8
IGopOworICAgICAgICAgICAgRVhQRUNUX0VRKHVpbnQ2NF90IHsgMSB9IDw8IGksIFdURjo6SW50
MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA8PCAoaSAtIGopKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSh1aW50NjRfdCB7IDEgfSA8PCBpLCBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAx
IH0gPDwgaikgPDw9IChpIC0gaikpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgNjM7ICsraSkgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDY0OyArK2op
IHsKKyAgICAgICAgICAgIC8vIExlZnQgc2hpZnQgZnJvbSBqLXRoIGJpdCB0byAoaSArIDY0KS10
aCBiaXQuCisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwg
ImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGksIDApLAorICAgICAgICAgICAgICAgIFdU
Rjo6SW50MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA8PCAoaSArIDY0IC0gaikpOworICAg
ICAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBpLCAw
KSwKKyAgICAgICAgICAgICAgICBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAxIH0gPDwgaikg
PDw9IChpICsgNjQgLSBqKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PD0gaTsgKytqKSB7CisgICAgICAgICAgICAvLyBMZWZ0IHNoaWZ0IGZyb20gKGogKyA2NCktdGgg
Yml0IHRvIChpICsgNjQpLXRoIGJpdC4KKyAgICAgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rp
bmc6Ok1lc3NhZ2UoKSA8PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBqKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwgaSwgMCksCisg
ICAgICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGosIDApIDw8
IChpIC0gaikpOworICAgICAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRf
dCB7IDEgfSA8PCBpLCAwKSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0
X3QgeyAxIH0gPDwgaiwgMCkgPDw9IChpIC0gaikpOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSBpOyBq
IDwgNjQ7ICsraikgeworICAgICAgICAgICAgLy8gUmlnaHQgc2hpZnQgZnJvbSBqLXRoIGJpdCB0
byBpLXRoIGJpdC4KKyAgICAgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2Uo
KSA8PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBqKTsKKyAgICAgICAgICAgIEVYUEVDVF9F
USh1aW50NjRfdCB7IDEgfSA8PCBpLCBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAxIH0gPDwg
aikgPj4gKGogLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodWludDY0X3QgeyAxIH0gPDwg
aSwgV1RGOjpJbnQxMjhJbXBsKHVpbnQ2NF90IHsgMSB9IDw8IGopID4+PSAoaiAtIGkpKTsKKyAg
ICAgICAgfQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDYzOyArK2opIHsKKyAgICAgICAg
ICAgIC8vIFJpZ2h0IHNoaWZ0IGZyb20gKGogKyA2NCktdGggYml0IHRvIGktdGggYml0LgorICAg
ICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBp
IDw8ICI7IGogPSAiIDw8IGopOworICAgICAgICAgICAgRVhQRUNUX0VRKHVpbnQ2NF90IHsgMSB9
IDw8IGksCisgICAgICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8
IGosIDApID4+IChqICsgNjQgLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodWludDY0X3Qg
eyAxIH0gPDwgaSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAx
IH0gPDwgaiwgMCkgPj49IChqICsgNjQgLSBpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA2MzsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSBpOyBqIDwg
NjM7ICsraikgeworICAgICAgICAgICAgLy8gUmlnaHQgc2hpZnQgZnJvbSAoaiArIDY0KS10aCBi
aXQgdG8gKGkgKyA2NCktdGggYml0LgorICAgICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGlu
Zzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7IGogPSAiIDw8IGopOworICAgICAgICAg
ICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBpLCAwKSwKKyAg
ICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwgaiwgMCkgPj4g
KGogLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90
IHsgMSB9IDw8IGksIDApLAorICAgICAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCh1aW50NjRf
dCB7IDEgfSA8PCBqLCAwKSA+Pj0gKGogLSBpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RF
U1QoV1RGX0ludDEyOCwgTnVtZXJpY0xpbWl0c1Rlc3QpCit7CisgICAgc3RhdGljX2Fzc2VydChz
dGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX3NwZWNpYWxpemVkLCAiIik7
CisgICAgc3RhdGljX2Fzc2VydChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46
OmlzX3NpZ25lZCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+Ojppc19pbnRlZ2VyLCAiIik7CisgICAgRVhQRUNUX0VRKHN0YXRpY19j
YXN0PGludD4oMTI3ICogc3RkOjpsb2cxMCgyKSksCisgICAgICAgIHN0ZDo6bnVtZXJpY19saW1p
dHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGlnaXRzMTApOworICAgIEVYUEVDVF9FUShXVEY6OkludDEy
OE1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Om1pbigpKTsKKyAg
ICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhNaW4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6Oklu
dDEyOEltcGw+Ojpsb3dlc3QoKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4TWF4KCksIHN0
ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6bWF4KCkpOworfQogCiB9IC8vIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442110</attachid>
            <date>2021-10-21 20:44:03 -0700</date>
            <delta_ts>2021-10-21 20:46:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232129-20211021204402.patch</filename>
            <type>text/plain</type>
            <size>136252</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYzMmI5ODlkM2IzZmVlZDQ5ZTA1MjMx
Yzk4MjIyNDk0ZjU2NDcyMjEuLmMxZTVlNjM3YjIzZTc2Yzk1ZWNlYzhjN2M4NTU2M2ZkMmQ5MmFj
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTY3IEBACisyMDIxLTEwLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gUmVwbGFjZSBjdXJyZW50IExMVk0gZmxh
bmcncyBJbnQxMjggd2l0aCBhYnNlaWwtY3BwJ3MgSW50MTI4CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIxMjkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBmb3VuZCB0aGF0IGZsYW5nJ3Mgc2lnbmVk
IEludDEyOCBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdGVzdGVkLAorICAgICAgICBhbmQgaXQgaGFz
IHNldmVyYWwgaXNzdWVzIGFib3V0IHNpZ24gZXh0ZW5zaW9uIGFuZCBkaXZpc2lvbi4KKworICAg
ICAgICBJbnN0ZWFkLCB3ZSBpbXBvcnQgYWJzZWlsLWNwcFsxXSdzIGludDEyOCBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgYWJzZWlsLWNwcCBpcyBtb3JlIGJhdHRsZS10ZXN0ZWQsIGFuZCBhYnNl
aWwgaXMgYWxyZWFkeSB1c2VkCisgICAgICAgIGluIFdlYktpdCB0b28gKEFOR0xFIGFuZCBsaWJ3
ZWJydGMgdXNlIGFic2VpbC1jcHAgYXMgdGhlaXIgdXRpbGl0eQorICAgICAgICBsaWJyYXJ5KS4K
KworICAgICAgICBGb3IgQXBwbGUgcmVhZGVycywgYWJzZWlsLWNwcCBmb3IgV2ViS2l0IGlzIGFw
cHJvdmVkIGluIE9TUy0zNTEuCisKKyAgICAgICAgWzFdOiBodHRwczovL2dpdGh1Yi5jb20vYWJz
ZWlsL2Fic2VpbC1jcHAKKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvSW50MTI4LmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbCk6CisgICAg
ICAgIChXVEY6Om9wZXJhdG9yLyk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yJSk6CisgICAgICAg
IChXVEY6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KToKKyAgICAgICAgKiB3dGYvSW50MTI4Lmg6CisgICAgICAgIChXVEY6OlVJbnQxMjhNYXgpOgor
ICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluKToKKyAg
ICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omxvd2VzdCk6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXgpOgorICAg
ICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6ZXBzaWxvbik6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpyb3VuZF9lcnJv
cik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjppbmZp
bml0eSk6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpx
dWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBs
Pjo6c2lnbmFsaW5nX05hTik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjpkZW5vcm1fbWluKToKKyAgICAgICAgKFdURjo6SW50MTI4TWF4KToKKyAgICAg
ICAgKFdURjo6SW50MTI4TWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6bWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bG93ZXN0KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bWF4KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJ
bXBsPjo6ZXBzaWxvbik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4
SW1wbD46OnJvdW5kX2Vycm9yKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6aW5maW5pdHkpOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjpxdWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+OjpzaWduYWxpbmdfTmFOKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGVub3JtX21pbik6CisgICAgICAgIChXVEY6Ok1ha2VV
SW50MTI4KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcjw8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcis9
KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RG
OjpVSW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvci89KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yJT0pOgorICAg
ICAgICAoV1RGOjpVSW50MTI4TG93NjQpOgorICAgICAgICAoV1RGOjpVSW50MTI4SGlnaDY0KToK
KyAgICAgICAgKFdURjo6VUludDEyOEltcGw6OlVJbnQxMjhJbXBsKToKKyAgICAgICAgKFdURjo6
VUludDEyOEltcGw6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4
SW1wbDo6b3BlcmF0b3IgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBjaGFyIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6
Om9wZXJhdG9yIGNoYXIxNl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9w
ZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvciBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBs
OjpvcGVyYXRvciBpbnQgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0
b3IgdW5zaWduZWQgaW50IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBs
b25nIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGZsb2F0IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6b3Bl
cmF0b3I+KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciEpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcn4p
OgorICAgICAgICAoV1RGOjpvcGVyYXRvcnwpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciYpOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcl4pOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3Bl
cmF0b3J8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciY9KToKKyAgICAg
ICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yXj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXVEY6OmludDEyOF9p
bnRlcm5hbDo6QWRkUmVzdWx0KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTdWJz
dHJ1Y3RSZXN1bHQpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpV
SW50MTI4SW1wbDo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVy
YXRvci0tKToKKyAgICAgICAgKFdURjo6TWFrZUludDEyOCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKz0p
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yLz0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciU9KToKKyAgICAgICAg
KFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6
Om9wZXJhdG9yJj0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl49KToKKyAg
ICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I8PD0pOgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6Qml0
Q2FzdFRvU2lnbmVkKToKKyAgICAgICAgKFdURjo6SW50MTI4TG93NjQpOgorICAgICAgICAoV1RG
OjpJbnQxMjhIaWdoNjQpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKToK
KyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6Oklu
dDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMTZfdCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1w
bDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3Igc2hvcnQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJ
bXBsOjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIHVuc2lnbmVkIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciB1
bnNpZ25lZCBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3Ig
bG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0
b3IgZmxvYXQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBkb3Vi
bGUgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJs
ZSBjb25zdCk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6U2lnbmVkQWRkUmVzdWx0
KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTaWduZWRTdWJzdHJ1Y3RSZXN1bHQp
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3ItLSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yKyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9y
fiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yISBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIHN0ZDo6dWlu
dDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRv
ciBzdGQ6OmludDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBs
OjpoaWdoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6bG93IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3ImIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgfCAgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl4gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcjw8IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I+PiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yJSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPD0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6SW50MTI4SW1wbDo6b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OkludDEyOEltcGw6Om9wZXJhdG9yPj0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvcj4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpsZWFkaW5nWmVyb2VzIGNvbnN0KTogRGVsZXRlZC4KKwogMjAyMS0xMC0yMSAgQWRp
dHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBFbmFi
bGUgYWNjZW50LWNvbG9yIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDNlYzAzOTFmN2M3MzdhM2FmMTYyNDczNmJiODUxMmE1MmQ3YjFlNjUu
LmU4MTAwMGRkMGViMWQxMzg4YjdiZmMwZWEyYmQyZGVjYzU3MDk0OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc5LDYgKzE3OSw3IEBACiAJCUUzMTQ5
QTM4MjI4QkI0MkMwMEJGQTZDNyAvKiBSZWZDb3VudGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTAyMENDNjFFQjAwQTAzRENE
IC8qIFJlZkNvdW50ZWRBcnJheS5jcHAgKi87IH07CiAJCUUzMTQ5QTM5MjI4QkI0MzUwMEJGQTZD
NyAvKiBWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5NUI2MzQyMENCNTNDMTAwNDc5NjM1IC8qIFZlY3Rvci5jcHAgKi87IH07CiAJCUUz
MTQ5QTNCMjI4QkRDQUMwMEJGQTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMTQ5QTNBMjI4QkRDQUIwMEJG
QTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAqLzsgfTsKKwkJRTMzNjY3NEEyNzIyNTUxMTAw
MjU5MTIyIC8qIEludDEyOC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzM2Njc0OTI3MjI1NTA5MDAyNTkxMjIgLyogSW50MTI4LmNwcCAqLzsgfTsK
IAkJRTM3RTk2NTQyNzAyQUQwQjAwRTFDMzZBIC8qIEFwcHJveGltYXRlVGltZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzdFOTY1MjI3MDJBRDA3
MDBFMUMzNkEgLyogQXBwcm94aW1hdGVUaW1lLmNwcCAqLzsgfTsKIAkJRTM4ODg4NkYyMEM5MDk1
MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM4ODg4NkQyMEM5MDk1MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wu
Y3BwICovOyB9OwogCQlFMzhDNDEyODFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzhDNDEyNjFFQjRF
MDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi87IH07CkBAIC03NTQsNiArNzU1LDcgQEAKIAkJ
RTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RI
YXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAyRDAwMzRBMDkyIC8qIE5ha2VkUmVmLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ha2VkUmVmLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW50MTI4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJsZUxhbWJkYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNENEMEQwMjI4MTBBMDIwMDIwRDI5OSAvKiBQYWNrZWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTI1LDYgKzExMjcsNyBAQAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxp
bmVBU00uaCAqLywKIAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmgg
Ki8sCiAJCQkJNTE4MkMyMkMxRjJCQzdFNjAwNTlCQTdDIC8qIEluc3RhbmNlQ291bnRlZC5oICov
LAorCQkJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3BwICovLAogCQkJCUY2
RDY3RDMyMjZGOTAxNDIwMDZFMDM0OSAvKiBJbnQxMjguaCAqLywKIAkJCQkzM0ZENDgxMTI2NUNC
MzgwMDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLywKIAkJCQkwRjdFQjg1QjFGQThG
RjQxMDBGMUFCQ0IgLyogSXNvTWFsbG9jLmggKi8sCkBAIC0xNzczLDYgKzE3NzYsNyBAQAogCQkJ
CUE4QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTNCNUI0NEUyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51bWJlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFM0JFMDlBNzI0QTU4NTREMDA5REYyQjQgLyogSUNVSGVscGVycy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlFMzM2Njc0QTI3MjI1NTExMDAyNTkxMjIgLyogSW50MTI4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdBMDUwOTNGMUZCOURDQzUwMEIzM0ZCOCAvKiBKU09OVmFsdWVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzQTMyQkM0MUZDODMwRTIwMDdEN0U3NiAvKiBKU1Zh
bHVlTWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQkNGQzQwMUY2MUQxMzAwMEM5MjIy
QyAvKiBMYW5ndWFnZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NGUzOGFhYTkzMGQ0MTA3MjdlZDM3NDliMmM3NDEyMjM4ZDZhY2FiNS4uYjRmNDczODlkODYwMGI0
ODFkNjQ1Y2UzMWI2N2E3MTQ3YzY3MDI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTQyNSw2
ICs0MjUsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBHcmVnb3JpYW5EYXRlVGltZS5jcHAKICAg
ICBIYXNoVGFibGUuY3BwCiAgICAgSGV4TnVtYmVyLmNwcAorICAgIEludDEyOC5oCiAgICAgSlNP
TlZhbHVlcy5jcHAKICAgICBKU1ZhbHVlTWFsbG9jLmNwcAogICAgIExhbmd1YWdlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW50MTI4LmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ludDEy
OC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjQyOTdiOTUwMTU3MWExYzE2YTY3MWFhYzc5NjI5YzgwZmFjNjk1
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ludDEyOC5jcHAKQEAgLTAsMCAr
MSwzNzEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBBYnNlaWwgQXV0aG9ycy4KKy8vCisvLyBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorLy8KKy8vICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
Ky8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0ludDEyOC5oPgorCisjaW5jbHVkZSA8c3Rk
ZGVmLmg+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxpb21hbmlwPgorI2luY2x1ZGUg
PG9zdHJlYW0+ICAvLyBOT0xJTlQocmVhZGFiaWxpdHkvc3RyZWFtcykKKyNpbmNsdWRlIDxzc3Ry
ZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIHsKKwor
Ly8gUmV0dXJucyB0aGUgMC1iYXNlZCBwb3NpdGlvbiBvZiB0aGUgbGFzdCBzZXQgYml0IChpLmUu
LCBtb3N0IHNpZ25pZmljYW50IGJpdCkKKy8vIGluIHRoZSBnaXZlbiBVSW50MTI4SW1wbC4gVGhl
IGFyZ3VtZW50IGlzIG5vdCAwLgorLy8KKy8vIEZvciBleGFtcGxlOgorLy8gICBHaXZlbjogNSAo
ZGVjaW1hbCkgPT0gMTAxIChiaW5hcnkpCisvLyAgIFJldHVybnM6IDIKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIGludCBGbHMxMjgoVUludDEyOEltcGwgbikgeworICBpZiAodWludDY0X3QgaGkgPSBV
SW50MTI4SGlnaDY0KG4pKSB7CisgICAgQVNTRVJUKGhpICE9IDApOworICAgIHJldHVybiAxMjcg
LSBjbHooaGkpOworICB9CisgIGNvbnN0IHVpbnQ2NF90IGxvdyA9IFVJbnQxMjhMb3c2NChuKTsK
KyAgQVNTRVJUKGxvdyAhPSAwKTsKKyAgcmV0dXJuIDYzIC0gY2x6KGxvdyk7Cit9CisKKy8vIExv
bmcgZGl2aXNpb24vbW9kdWxvIGZvciBVSW50MTI4SW1wbCBpbXBsZW1lbnRlZCB1c2luZyB0aGUg
c2hpZnQtc3VidHJhY3QKKy8vIGRpdmlzaW9uIGFsZ29yaXRobSBhZGFwdGVkIGZyb206CisvLyBo
dHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81Mzg2Mzc3L2RpdmlzaW9uLXdpdGhv
dXQtdXNpbmcKK3N0YXRpYyBpbmxpbmUgdm9pZCBEaXZNb2RJbXBsKFVJbnQxMjhJbXBsIGRpdmlk
ZW5kLCBVSW50MTI4SW1wbCBkaXZpc29yLCBVSW50MTI4SW1wbCogcXVvdGllbnRfcmV0LCBVSW50
MTI4SW1wbCogcmVtYWluZGVyX3JldCkgeworICBhc3NlcnQoZGl2aXNvciAhPSAwKTsKKworICBp
ZiAoZGl2aXNvciA+IGRpdmlkZW5kKSB7CisgICAgKnF1b3RpZW50X3JldCA9IDA7CisgICAgKnJl
bWFpbmRlcl9yZXQgPSBkaXZpZGVuZDsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoZGl2aXNv
ciA9PSBkaXZpZGVuZCkgeworICAgICpxdW90aWVudF9yZXQgPSAxOworICAgICpyZW1haW5kZXJf
cmV0ID0gMDsKKyAgICByZXR1cm47CisgIH0KKworICBVSW50MTI4SW1wbCBkZW5vbWluYXRvciA9
IGRpdmlzb3I7CisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKworICAvLyBMZWZ0IGFsaWdu
cyB0aGUgTVNCIG9mIHRoZSBkZW5vbWluYXRvciBhbmQgdGhlIGRpdmlkZW5kLgorICBjb25zdCBp
bnQgc2hpZnQgPSBGbHMxMjgoZGl2aWRlbmQpIC0gRmxzMTI4KGRlbm9taW5hdG9yKTsKKyAgZGVu
b21pbmF0b3IgPDw9IHNoaWZ0OworCisgIC8vIFVzZXMgc2hpZnQtc3VidHJhY3QgYWxnb3JpdGht
IHRvIGRpdmlkZSBkaXZpZGVuZCBieSBkZW5vbWluYXRvci4gVGhlCisgIC8vIHJlbWFpbmRlciB3
aWxsIGJlIGxlZnQgaW4gZGl2aWRlbmQuCisgIGZvciAoaW50IGkgPSAwOyBpIDw9IHNoaWZ0OyAr
K2kpIHsKKyAgICBxdW90aWVudCA8PD0gMTsKKyAgICBpZiAoZGl2aWRlbmQgPj0gZGVub21pbmF0
b3IpIHsKKyAgICAgIGRpdmlkZW5kIC09IGRlbm9taW5hdG9yOworICAgICAgcXVvdGllbnQgfD0g
MTsKKyAgICB9CisgICAgZGVub21pbmF0b3IgPj49IDE7CisgIH0KKworICAqcXVvdGllbnRfcmV0
ID0gcXVvdGllbnQ7CisgICpyZW1haW5kZXJfcmV0ID0gZGl2aWRlbmQ7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorc3RhdGljIFVJbnQxMjhJbXBsIE1ha2VVSW50MTI4RnJvbUZsb2F0KFQg
dikgeworICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlLCAi
Iik7CisKKyAgLy8gUm91bmRpbmcgYmVoYXZpb3IgaXMgdG93YXJkcyB6ZXJvLCBzYW1lIGFzIGZv
ciBidWlsdC1pbiB0eXBlcy4KKworICAvLyBVbmRlZmluZWQgYmVoYXZpb3IgaWYgdiBpcyBOYU4g
b3IgY2Fubm90IGZpdCBpbnRvIFVJbnQxMjhJbXBsLgorICBhc3NlcnQoc3RkOjppc2Zpbml0ZSh2
KSAmJiB2ID4gLTEgJiYKKyAgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXhfZXhw
b25lbnQgPD0gMTI4IHx8CisgICAgICAgICAgdiA8IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VD4o
MSksIDEyOCkpKTsKKworICBpZiAodiA+PSBzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KDEpLCA2
NCkpIHsKKyAgICB1aW50NjRfdCBoaSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6OmxkZXhw
KHYsIC02NCkpOworICAgIHVpbnQ2NF90IGxvID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYgLSBz
dGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KGhpKSwgNjQpKTsKKyAgICByZXR1cm4gTWFrZVVJbnQx
MjgoaGksIGxvKTsKKyAgfQorCisgIHJldHVybiBNYWtlVUludDEyOCgwLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4odikpOworfQorCisjaWYgQ09NUElMRVIoQ0xBTkcpICYmICFkZWZpbmVkKF9fU1NF
M19fKQorLy8gV29ya2Fyb3VuZCBmb3IgY2xhbmcgYnVnOiBodHRwczovL2J1Z3MubGx2bS5vcmcv
c2hvd19idWcuY2dpP2lkPTM4Mjg5CisvLyBDYXN0aW5nIGZyb20gbG9uZyBkb3VibGUgdG8gdWlu
dDY0X3QgaXMgbWlzY29tcGlsZWQgYW5kIGRyb3BzIGJpdHMuCisvLyBJdCBpcyBtb3JlIHdvcmss
IHNvIG9ubHkgdXNlIHdoZW4gd2UgbmVlZCB0aGUgd29ya2Fyb3VuZC4KK3N0YXRpYyBVSW50MTI4
SW1wbCBNYWtlVUludDEyOEZyb21GbG9hdChsb25nIGRvdWJsZSB2KSB7CisgIC8vIEdvIDUwIGJp
dHMgYXQgYSB0aW1lLCB0aGF0IGZpdHMgaW4gYSBkb3VibGUKKyAgc3RhdGljX2Fzc2VydChzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmRpZ2l0cyA+PSA1MCwgIiIpOworICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMgPD0gMTUwLCAiIik7
CisgIC8vIFVuZGVmaW5lZCBiZWhhdmlvciBpZiB2IGlzIG5vdCBmaW5pdGUgb3IgY2Fubm90IGZp
dCBpbnRvIFVJbnQxMjhJbXBsLgorICBhc3NlcnQoc3RkOjppc2Zpbml0ZSh2KSAmJiB2ID4gLTEg
JiYgdiA8IHN0ZDo6bGRleHAoMS4wTCwgMTI4KSk7CisKKyAgdiA9IHN0ZDo6bGRleHAodiwgLTEw
MCk7CisgIHVpbnQ2NF90IHcwID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjp0cnVuYyh2KSkpOworICB2ID0gc3RkOjpsZGV4cCh2IC0gc3RhdGljX2Nhc3Q8
ZG91YmxlPih3MCksIDUwKTsKKyAgdWludDY0X3QgdzEgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6OnRydW5jKHYpKSk7CisgIHYgPSBzdGQ6OmxkZXhwKHYg
LSBzdGF0aWNfY2FzdDxkb3VibGU+KHcxKSwgNTApOworICB1aW50NjRfdCB3MiA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6dHJ1bmModikpKTsKKyAgcmV0
dXJuIChzdGF0aWNfY2FzdDxVSW50MTI4SW1wbD4odzApIDw8IDEwMCkgfCAoc3RhdGljX2Nhc3Q8
VUludDEyOEltcGw+KHcxKSA8PCA1MCkgfAorICAgICAgICAgc3RhdGljX2Nhc3Q8VUludDEyOElt
cGw+KHcyKTsKK30KKyNlbmRpZiAgLy8gQ09NUElMRVIoQ0xBTkcpICYmICFfX1NTRTNfXworfSAg
Ly8gbmFtZXNwYWNlCisKK1VJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChmbG9hdCB2KSA6IFVJbnQx
MjhJbXBsKE1ha2VVSW50MTI4RnJvbUZsb2F0KHYpKSB7fQorVUludDEyOEltcGw6OlVJbnQxMjhJ
bXBsKGRvdWJsZSB2KSA6IFVJbnQxMjhJbXBsKE1ha2VVSW50MTI4RnJvbUZsb2F0KHYpKSB7fQor
VUludDEyOEltcGw6OlVJbnQxMjhJbXBsKGxvbmcgZG91YmxlIHYpIDogVUludDEyOEltcGwoTWFr
ZVVJbnQxMjhGcm9tRmxvYXQodikpIHt9CisKK1VJbnQxMjhJbXBsIG9wZXJhdG9yLyhVSW50MTI4
SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworICBVSW50MTI4SW1wbCBxdW90aWVudCA9IDA7
CisgIFVJbnQxMjhJbXBsIHJlbWFpbmRlciA9IDA7CisgIERpdk1vZEltcGwobGhzLCByaHMsICZx
dW90aWVudCwgJnJlbWFpbmRlcik7CisgIHJldHVybiBxdW90aWVudDsKK30KKworVUludDEyOElt
cGwgb3BlcmF0b3IlKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIFVJbnQx
MjhJbXBsIHF1b3RpZW50ID0gMDsKKyAgVUludDEyOEltcGwgcmVtYWluZGVyID0gMDsKKyAgRGl2
TW9kSW1wbChsaHMsIHJocywgJnF1b3RpZW50LCAmcmVtYWluZGVyKTsKKyAgcmV0dXJuIHJlbWFp
bmRlcjsKK30KKworbmFtZXNwYWNlIHsKKworc3RhdGljIHN0ZDo6c3RyaW5nIFVJbnQxMjhUb0Zv
cm1hdHRlZFN0cmluZyhVSW50MTI4SW1wbCB2LCBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyBmbGFn
cykgeworICAvLyBTZWxlY3QgYSBkaXZpc29yIHdoaWNoIGlzIHRoZSBsYXJnZXN0IHBvd2VyIG9m
IHRoZSBiYXNlIDwgMl42NC4KKyAgVUludDEyOEltcGwgZGl2OworICBpbnQgZGl2X2Jhc2VfbG9n
OworICBzd2l0Y2ggKGZsYWdzICYgc3RkOjppb3M6OmJhc2VmaWVsZCkgeworICAgIGNhc2Ugc3Rk
Ojppb3M6OmhleDoKKyAgICAgIGRpdiA9IDB4MTAwMDAwMDAwMDAwMDAwMDsgIC8vIDE2XjE1Cisg
ICAgICBkaXZfYmFzZV9sb2cgPSAxNTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ugc3RkOjppb3M6
Om9jdDoKKyAgICAgIGRpdiA9IDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwOyAgLy8gOF4yMQorICAg
ICAgZGl2X2Jhc2VfbG9nID0gMjE7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgLy8gc3Rk
Ojppb3M6OmRlYworICAgICAgZGl2ID0gMTAwMDAwMDAwMDAwMDAwMDAwMDB1OyAgLy8gMTBeMTkK
KyAgICAgIGRpdl9iYXNlX2xvZyA9IDE5OworICAgICAgYnJlYWs7CisgIH0KKworICAvLyBOb3cg
cGllY2UgdG9nZXRoZXIgdGhlIFVJbnQxMjhJbXBsIHJlcHJlc2VudGF0aW9uIGZyb20gdGhyZWUg
Y2h1bmtzIG9mIHRoZQorICAvLyBvcmlnaW5hbCB2YWx1ZSwgZWFjaCBsZXNzIHRoYW4gImRpdiIg
YW5kIHRoZXJlZm9yZSByZXByZXNlbnRhYmxlIGFzIGEKKyAgLy8gdWludDY0X3QuCisgIHN0ZDo6
b3N0cmluZ3N0cmVhbSBvczsKKyAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgY29weV9tYXNrID0K
KyAgICAgIHN0ZDo6aW9zOjpiYXNlZmllbGQgfCBzdGQ6Omlvczo6c2hvd2Jhc2UgfCBzdGQ6Omlv
czo6dXBwZXJjYXNlOworICBvcy5zZXRmKGZsYWdzICYgY29weV9tYXNrLCBjb3B5X21hc2spOwor
ICBVSW50MTI4SW1wbCBoaWdoID0gdjsKKyAgVUludDEyOEltcGwgbG93OworICBEaXZNb2RJbXBs
KGhpZ2gsIGRpdiwgJmhpZ2gsICZsb3cpOworICBVSW50MTI4SW1wbCBtaWQ7CisgIERpdk1vZElt
cGwoaGlnaCwgZGl2LCAmaGlnaCwgJm1pZCk7CisgIGlmIChVSW50MTI4TG93NjQoaGlnaCkgIT0g
MCkgeworICAgIG9zIDw8IFVJbnQxMjhMb3c2NChoaWdoKTsKKyAgICBvcyA8PCBzdGQ6Om5vc2hv
d2Jhc2UgPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KGRpdl9iYXNlX2xvZyk7Cisg
ICAgb3MgPDwgVUludDEyOExvdzY0KG1pZCk7CisgICAgb3MgPDwgc3RkOjpzZXR3KGRpdl9iYXNl
X2xvZyk7CisgIH0gZWxzZSBpZiAoVUludDEyOExvdzY0KG1pZCkgIT0gMCkgeworICAgIG9zIDw8
IFVJbnQxMjhMb3c2NChtaWQpOworICAgIG9zIDw8IHN0ZDo6bm9zaG93YmFzZSA8PCBzdGQ6OnNl
dGZpbGwoJzAnKSA8PCBzdGQ6OnNldHcoZGl2X2Jhc2VfbG9nKTsKKyAgfQorICBvcyA8PCBVSW50
MTI4TG93NjQobG93KTsKKyAgcmV0dXJuIG9zLnN0cigpOworfQorCit9ICAvLyBuYW1lc3BhY2UK
Kworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIFVJbnQxMjhJbXBs
IHYpIHsKKyAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgZmxhZ3MgPSBvcy5mbGFncygpOworICBz
dGQ6OnN0cmluZyByZXAgPSBVSW50MTI4VG9Gb3JtYXR0ZWRTdHJpbmcodiwgZmxhZ3MpOworCisg
IC8vIEFkZCB0aGUgcmVxdWlzaXRlIHBhZGRpbmcuCisgIHN0ZDo6c3RyZWFtc2l6ZSB3aWR0aCA9
IG9zLndpZHRoKDApOworICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pih3aWR0aCkgPiByZXAuc2l6
ZSgpKSB7CisgICAgc3RkOjppb3M6OmZtdGZsYWdzIGFkanVzdGZpZWxkID0gZmxhZ3MgJiBzdGQ6
Omlvczo6YWRqdXN0ZmllbGQ7CisgICAgaWYgKGFkanVzdGZpZWxkID09IHN0ZDo6aW9zOjpsZWZ0
KSB7CisgICAgICByZXAuYXBwZW5kKHdpZHRoIC0gcmVwLnNpemUoKSwgb3MuZmlsbCgpKTsKKyAg
ICB9IGVsc2UgaWYgKGFkanVzdGZpZWxkID09IHN0ZDo6aW9zOjppbnRlcm5hbCAmJgorICAgICAg
ICAgICAgICAgKGZsYWdzICYgc3RkOjppb3M6OnNob3diYXNlKSAmJgorICAgICAgICAgICAgICAg
KGZsYWdzICYgc3RkOjppb3M6OmJhc2VmaWVsZCkgPT0gc3RkOjppb3M6OmhleCAmJiB2ICE9IDAp
IHsKKyAgICAgIHJlcC5pbnNlcnQoMiwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICByZXAuaW5zZXJ0KDAsIHdpZHRoIC0gcmVwLnNpemUoKSwgb3Mu
ZmlsbCgpKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gb3MgPDwgcmVwOworfQorCituYW1lc3Bh
Y2UgeworCitzdGF0aWMgVUludDEyOEltcGwgVW5zaWduZWRBYnNvbHV0ZVZhbHVlKEludDEyOElt
cGwgdikgeworICAvLyBDYXN0IHRvIFVJbnQxMjhJbXBsIGJlZm9yZSBwb3NzaWJseSBuZWdhdGlu
ZyBiZWNhdXNlIC1JbnQxMjhNaW4oKSBpcyB1bmRlZmluZWQuCisgIHJldHVybiBJbnQxMjhIaWdo
NjQodikgPCAwID8gLVVJbnQxMjhJbXBsKHYpIDogVUludDEyOEltcGwodik7Cit9CisKK30gIC8v
IG5hbWVzcGFjZQorCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRp
YyBJbnQxMjhJbXBsIE1ha2VJbnQxMjhGcm9tRmxvYXQoVCB2KSB7CisgIC8vIENvbnZlcnNpb24g
d2hlbiB2IGlzIE5hTiBvciBjYW5ub3QgZml0IGludG8gSW50MTI4SW1wbCB3b3VsZCBiZSB1bmRl
ZmluZWQKKyAgLy8gYmVoYXZpb3IgaWYgdXNpbmcgYW4gaW50cmluc2ljIDEyOC1iaXQgaW50ZWdl
ci4KKyAgYXNzZXJ0KHN0ZDo6aXNmaW5pdGUodikgJiYgKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1heF9leHBvbmVudCA8PSAxMjcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
ID49IC1zdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KDEpLCAxMjcpICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdiA8IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VD4oMSksIDEyNykp
KSk7CisKKyAgLy8gV2UgbXVzdCBjb252ZXJ0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBhbmQgdGhlbiBu
ZWdhdGUgYXMgbmVlZGVkLCBiZWNhdXNlCisgIC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzIGFyZSB0
eXBpY2FsbHkgc2lnbi1tYWduaXR1ZGUuIE90aGVyd2lzZSwgdGhlCisgIC8vIGRpZmZlcmVuY2Ug
YmV0d2VlbiB0aGUgaGlnaCBhbmQgbG93IDY0IGJpdHMgd2hlbiBpbnRlcnByZXRlZCBhcyB0d28n
cworICAvLyBjb21wbGVtZW50IG92ZXJ3aGVsbXMgdGhlIHByZWNpc2lvbiBvZiB0aGUgbWFudGlz
c2EuCisgIFVJbnQxMjhJbXBsIHJlc3VsdCA9IHYgPCAwID8gLU1ha2VVSW50MTI4RnJvbUZsb2F0
KC12KSA6IE1ha2VVSW50MTI4RnJvbUZsb2F0KHYpOworICByZXR1cm4gTWFrZUludDEyOChpbnQx
MjhfaW50ZXJuYWw6OkJpdENhc3RUb1NpZ25lZChVSW50MTI4SGlnaDY0KHJlc3VsdCkpLAorICAg
ICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQocmVzdWx0KSk7Cit9CisKK30gIC8vIG5hbWVz
cGFjZQorCitJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGZsb2F0IHYpIDogSW50MTI4SW1wbChNYWtl
SW50MTI4RnJvbUZsb2F0KHYpKSB7fQorSW50MTI4SW1wbDo6SW50MTI4SW1wbChkb3VibGUgdikg
OiBJbnQxMjhJbXBsKE1ha2VJbnQxMjhGcm9tRmxvYXQodikpIHt9CitJbnQxMjhJbXBsOjpJbnQx
MjhJbXBsKGxvbmcgZG91YmxlIHYpIDogSW50MTI4SW1wbChNYWtlSW50MTI4RnJvbUZsb2F0KHYp
KSB7fQorCitJbnQxMjhJbXBsIG9wZXJhdG9yLyhJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCBy
aHMpIHsKKyAgYXNzZXJ0KGxocyAhPSBJbnQxMjhNaW4oKSB8fCByaHMgIT0gLTEpOyAgLy8gVUIg
b24gdHdvJ3MgY29tcGxlbWVudC4KKworICBVSW50MTI4SW1wbCBxdW90aWVudCA9IDA7CisgIFVJ
bnQxMjhJbXBsIHJlbWFpbmRlciA9IDA7CisgIERpdk1vZEltcGwoVW5zaWduZWRBYnNvbHV0ZVZh
bHVlKGxocyksIFVuc2lnbmVkQWJzb2x1dGVWYWx1ZShyaHMpLAorICAgICAgICAgICAgICZxdW90
aWVudCwgJnJlbWFpbmRlcik7CisgIGlmICgoSW50MTI4SGlnaDY0KGxocykgPCAwKSAhPSAoSW50
MTI4SGlnaDY0KHJocykgPCAwKSkgcXVvdGllbnQgPSAtcXVvdGllbnQ7CisgIHJldHVybiBNYWtl
SW50MTI4KGludDEyOF9pbnRlcm5hbDo6Qml0Q2FzdFRvU2lnbmVkKFVJbnQxMjhIaWdoNjQocXVv
dGllbnQpKSwKKyAgICAgICAgICAgICAgICAgICAgVUludDEyOExvdzY0KHF1b3RpZW50KSk7Cit9
CisKK0ludDEyOEltcGwgb3BlcmF0b3IlKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eworICBhc3NlcnQobGhzICE9IEludDEyOE1pbigpIHx8IHJocyAhPSAtMSk7ICAvLyBVQiBvbiB0
d28ncyBjb21wbGVtZW50LgorCisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKyAgVUludDEy
OEltcGwgcmVtYWluZGVyID0gMDsKKyAgRGl2TW9kSW1wbChVbnNpZ25lZEFic29sdXRlVmFsdWUo
bGhzKSwgVW5zaWduZWRBYnNvbHV0ZVZhbHVlKHJocyksCisgICAgICAgICAgICAgJnF1b3RpZW50
LCAmcmVtYWluZGVyKTsKKyAgaWYgKEludDEyOEhpZ2g2NChsaHMpIDwgMCkgcmVtYWluZGVyID0g
LXJlbWFpbmRlcjsKKyAgcmV0dXJuIE1ha2VJbnQxMjgoaW50MTI4X2ludGVybmFsOjpCaXRDYXN0
VG9TaWduZWQoVUludDEyOEhpZ2g2NChyZW1haW5kZXIpKSwKKyAgICAgICAgICAgICAgICAgICAg
VUludDEyOExvdzY0KHJlbWFpbmRlcikpOworfQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwo
c3RkOjpvc3RyZWFtJiBvcywgSW50MTI4SW1wbCB2KSB7CisgIHN0ZDo6aW9zX2Jhc2U6OmZtdGZs
YWdzIGZsYWdzID0gb3MuZmxhZ3MoKTsKKyAgc3RkOjpzdHJpbmcgcmVwOworCisgIC8vIEFkZCB0
aGUgc2lnbiBpZiBuZWVkZWQuCisgIGJvb2wgcHJpbnRfYXNfZGVjaW1hbCA9CisgICAgICAoZmxh
Z3MgJiBzdGQ6Omlvczo6YmFzZWZpZWxkKSA9PSBzdGQ6Omlvczo6ZGVjIHx8CisgICAgICAoZmxh
Z3MgJiBzdGQ6Omlvczo6YmFzZWZpZWxkKSA9PSBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncygpOwor
ICBpZiAocHJpbnRfYXNfZGVjaW1hbCkgeworICAgIGlmIChJbnQxMjhIaWdoNjQodikgPCAwKSB7
CisgICAgICByZXAgPSAiLSI7CisgICAgfSBlbHNlIGlmIChmbGFncyAmIHN0ZDo6aW9zOjpzaG93
cG9zKSB7CisgICAgICByZXAgPSAiKyI7CisgICAgfQorICB9CisKKyAgcmVwLmFwcGVuZChVSW50
MTI4VG9Gb3JtYXR0ZWRTdHJpbmcoCisgICAgICBwcmludF9hc19kZWNpbWFsID8gVW5zaWduZWRB
YnNvbHV0ZVZhbHVlKHYpIDogVUludDEyOEltcGwodiksIG9zLmZsYWdzKCkpKTsKKworICAvLyBB
ZGQgdGhlIHJlcXVpc2l0ZSBwYWRkaW5nLgorICBzdGQ6OnN0cmVhbXNpemUgd2lkdGggPSBvcy53
aWR0aCgwKTsKKyAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpID4gcmVwLnNpemUoKSkg
eworICAgIHN3aXRjaCAoZmxhZ3MgJiBzdGQ6Omlvczo6YWRqdXN0ZmllbGQpIHsKKyAgICAgIGNh
c2Ugc3RkOjppb3M6OmxlZnQ6CisgICAgICAgIHJlcC5hcHBlbmQod2lkdGggLSByZXAuc2l6ZSgp
LCBvcy5maWxsKCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugc3RkOjppb3M6OmludGVy
bmFsOgorICAgICAgICBpZiAocHJpbnRfYXNfZGVjaW1hbCAmJiAocmVwWzBdID09ICcrJyB8fCBy
ZXBbMF0gPT0gJy0nKSkgeworICAgICAgICAgIHJlcC5pbnNlcnQoMSwgd2lkdGggLSByZXAuc2l6
ZSgpLCBvcy5maWxsKCkpOworICAgICAgICB9IGVsc2UgaWYgKChmbGFncyAmIHN0ZDo6aW9zOjpi
YXNlZmllbGQpID09IHN0ZDo6aW9zOjpoZXggJiYKKyAgICAgICAgICAgICAgICAgICAoZmxhZ3Mg
JiBzdGQ6Omlvczo6c2hvd2Jhc2UpICYmIHYgIT0gMCkgeworICAgICAgICAgIHJlcC5pbnNlcnQo
Miwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgIHJlcC5pbnNlcnQoMCwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogIC8vIHN0ZDo6aW9zOjpyaWdo
dAorICAgICAgICByZXAuaW5zZXJ0KDAsIHdpZHRoIC0gcmVwLnNpemUoKSwgb3MuZmlsbCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIG9zIDw8IHJlcDsKK30KKwor
fSAgLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2Ugc3RkIHsKK2NvbnN0ZXhwciBib29sIG51
bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zcGVjaWFsaXplZDsKK2NvbnN0ZXhw
ciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zaWduZWQ7Citjb25z
dGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6aXNfaW50ZWdlcjsK
K2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19leGFj
dDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjpoYXNf
aW5maW5pdHk7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBs
Pjo6aGFzX3F1aWV0X05hTjsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjpoYXNfc2lnbmFsaW5nX05hTjsKK2NvbnN0ZXhwciBmbG9hdF9kZW5vcm1fc3R5
bGUgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omhhc19kZW5vcm07Citjb25zdGV4
cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6aGFzX2Rlbm9ybV9sb3Nz
OworY29uc3RleHByIGZsb2F0X3JvdW5kX3N0eWxlIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEy
OEltcGw+Ojpyb3VuZF9zdHlsZTsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6
VUludDEyOEltcGw+Ojppc19pZWM1NTk7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxX
VEY6OlVJbnQxMjhJbXBsPjo6aXNfYm91bmRlZDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGlt
aXRzPFdURjo6VUludDEyOEltcGw+Ojppc19tb2R1bG87Citjb25zdGV4cHIgaW50IG51bWVyaWNf
bGltaXRzPFdURjo6VUludDEyOEltcGw+OjpkaWdpdHM7Citjb25zdGV4cHIgaW50IG51bWVyaWNf
bGltaXRzPFdURjo6VUludDEyOEltcGw+OjpkaWdpdHMxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJp
Y19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heF9kaWdpdHMxMDsKK2NvbnN0ZXhwciBpbnQg
bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OnJhZGl4OworY29uc3RleHByIGludCBu
dW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluX2V4cG9uZW50OworY29uc3RleHBy
IGludCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluX2V4cG9uZW50MTA7Citj
b25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXhfZXhwb25l
bnQ7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXhf
ZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOElt
cGw+Ojp0cmFwczsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOElt
cGw+Ojp0aW55bmVzc19iZWZvcmU7CisKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdU
Rjo6SW50MTI4SW1wbD46OmlzX3NwZWNpYWxpemVkOworY29uc3RleHByIGJvb2wgbnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfc2lnbmVkOworY29uc3RleHByIGJvb2wgbnVtZXJp
Y19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfaW50ZWdlcjsKK2NvbnN0ZXhwciBib29sIG51
bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX2V4YWN0OworY29uc3RleHByIGJvb2wg
bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aGFzX2luZmluaXR5OworY29uc3RleHBy
IGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aGFzX3F1aWV0X05hTjsKK2Nv
bnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Omhhc19zaWduYWxp
bmdfTmFOOworY29uc3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjpoYXNfZGVub3JtOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8
V1RGOjpJbnQxMjhJbXBsPjo6aGFzX2Rlbm9ybV9sb3NzOworY29uc3RleHByIGZsb2F0X3JvdW5k
X3N0eWxlIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OnJvdW5kX3N0eWxlOworY29u
c3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfaWVjNTU5Owor
Y29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfYm91bmRl
ZDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX21v
ZHVsbzsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGln
aXRzOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjpkaWdp
dHMxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6bWF4
X2RpZ2l0czEwOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+
OjpyYWRpeDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6
bWluX2V4cG9uZW50OworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOElt
cGw+OjptaW5fZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6bWF4X2V4cG9uZW50OworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+OjptYXhfZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNf
bGltaXRzPFdURjo6SW50MTI4SW1wbD46OnRyYXBzOworY29uc3RleHByIGJvb2wgbnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6dGlueW5lc3NfYmVmb3JlOworfSAgLy8gbmFtZXNwYWNl
IHN0ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW50MTI4LmggYi9Tb3VyY2UvV1RGL3d0
Zi9JbnQxMjguaAppbmRleCAzYmRiMGE0NWVmNWM0OWFmZWUyYjlkZGZkMzBhOGFjMjUyMGQ2M2Zh
Li42OGVmNzJiMmVjYjAxNGIwNzUzMTMxYzVkNmEzY2RiNTAxM2E5YjE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9JbnQxMjguaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9JbnQxMjguaApAQCAt
MSwyOTEgKzEsMTI4NiBAQAotLy8gVGFrZW4gZnJvbSBMTFZNIFByb2plY3QsIHVuZGVyIHRoZSBB
cGFjaGUgTGljZW5zZSB2Mi4wIHdpdGggTExWTSBFeGNlcHRpb25zLgotLy8gU2VlIFNvdXJjZS9X
VEYvTElDRU5TRS1MTFZNLnR4dCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4KLS8vIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIFdJVEggTExWTS1leGNlcHRpb24KKy8vCisvLyBD
b3B5cmlnaHQgMjAxNyBUaGUgQWJzZWlsIEF1dGhvcnMuCisvLworLy8gTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAg
ICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gRmlsZTogSW50MTI4SW1wbC5oCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8KKy8vIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyAxMjgtYml0IGludGVnZXIgdHlwZXMsIGB1
aW50MTI4YCBhbmQgYEludDEyOEltcGxgLgorLy8KKy8vIFRPRE8oYWJzbC10ZWFtKTogVGhpcyBt
b2R1bGUgaXMgaW5jb25zaXN0ZW50IGFzIG1hbnkgaW5saW5lIGB1aW50MTI4YCBtZXRob2RzCisv
LyBhcmUgZGVmaW5lZCBpbiB0aGlzIGZpbGUsIHdoaWxlIG1hbnkgaW5saW5lIGBJbnQxMjhJbXBs
YCBtZXRob2RzIGFyZSBkZWZpbmVkIGluCisvLyB0aGUgYGludDEyOF8qX2ludHJpbnNpYy5pbmNg
IGZpbGVzLgorLy8KIAotLy8gUG9ydGFibGUgMTI4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFyaXRo
bWV0aWMgZm9yIHVzZSBpbiBpbXBvdmVyaXNoZWQKLS8vIEMrKyBpbXBsZW1lbnRhdGlvbnMgbGFj
a2luZyBfX3VpbnQxMjhfdC4KLQotLy8gQmFzZWQgb246Ci0vLyBodHRwczovL2dpdGh1Yi5jb20v
bGx2bS9sbHZtLXByb2plY3QvYmxvYi9kNDgwZjk2OC9mbGFuZy9pbmNsdWRlL2ZsYW5nL0NvbW1v
bi91aW50MTI4LmgKKy8vIEludDEyOC5oIGFuZCBJbnQxMjguY3BwIGFyZSBkZXJpdmVkIGZyb20g
YWJzZWlsLWNwcCAoaHR0cHM6Ly9naXRodWIuY29tL2Fic2VpbC9hYnNlaWwtY3BwKQorLy8gSW1w
b3J0ZWQgcmV2aXNpb24gaXMgZGRiODQyZjU4M2U1NjBiYmRlNDk3YmM5NmNmZWJlMjVmOTA4OWUx
MS4KKy8vIFdlIGFwcGx5IHRoZSBmb2xsb3dpbmcgY2hhbmdlcy4KKy8vIDEuIFVzZSBXVEYgbWFj
cm9zIGluc3RlYWQgb2YgQUJTTCBtYWNyb3MuCisvLyAyLiBSZW1vdmUgYWJzZWlsIEhhc2hUYWJs
ZSBoYW5kbGluZworLy8gMy4gUmVtb3ZlIF9faW50MTI4X3QgaGFuZGxpbmcKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPGNz
dGRpbnQ+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8d3RmL0xlYWRpbmdaZXJv
Qml0Q291bnQuaD4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNs
dWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIENPTVBJTEVSKE1TVkMpCisvLyBJbiB2ZXJ5IG9sZCB2ZXJzaW9ucyBvZiBNU1ZD
IGFuZCB3aGVuIHRoZSAvWmM6d2NoYXJfdCBmbGFnIGlzIG9mZiwgd2NoYXJfdCBpcworLy8gYSB0
eXBlZGVmIGZvciB1bnNpZ25lZCBzaG9ydC4gIE90aGVyd2lzZSB3Y2hhcl90IGlzIG1hcHBlZCB0
byB0aGUgX193Y2hhcl90CisvLyBidWlsdGluIHR5cGUuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBu
b3QgdG8gZGVmaW5lIG9wZXJhdG9yIHdjaGFyX3QoKQorLy8gYWxvbmdzaWRlIG9wZXJhdG9yIHVu
c2lnbmVkIHNob3J0KCkgaW4gdGhlc2UgaW5zdGFuY2VzLgorI2RlZmluZSBBQlNMX0lOVEVSTkFM
X1dDSEFSX1QgX193Y2hhcl90CisjaWYgQ1BVKFg4Nl82NCkKKyNpbmNsdWRlIDxpbnRyaW4uaD4K
KyNwcmFnbWEgaW50cmluc2ljKF91bXVsMTI4KQorI2VuZGlmICAvLyBkZWZpbmVkKF9NX1g2NCkK
KyNlbHNlICAgLy8gZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgQUJTTF9JTlRFUk5BTF9XQ0hB
Ul9UIHdjaGFyX3QKKyNlbmRpZiAgLy8gZGVmaW5lZChfTVNDX1ZFUikKIAogbmFtZXNwYWNlIFdU
RiB7CiAKLXRlbXBsYXRlIDxib29sIElTX1NJR05FRCA9IGZhbHNlPiBjbGFzcyBJbnQxMjhJbXBs
IHsKLXB1YmxpYzoKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCgpIHsgfQotICAgIC8vIFRoaXMg
bWVhbnMgb2YgZGVmaW5pdGlvbiBwcm92aWRlcyBzb21lIHBvcnRhYmlsaXR5IGZvcgotICAgIC8v
ICJzaXplX3QiIG9wZXJhbmRzLgotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKHVuc2lnbmVkIG4p
IDogbG93XyB7bn0geyB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwodW5zaWduZWQgbG9uZyBu
KSA6IGxvd18ge259IHsgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcg
bG9uZyBuKSA6IGxvd18ge259IHsgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGludCBuKQot
ICAgICAgICA6IGxvd18ge3N0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pfQotICAgICAgICAs
IGhpZ2hfIHstc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obiA8IDApfQotICAgIHsgfQotICAg
IGNvbnN0ZXhwciBJbnQxMjhJbXBsKGxvbmcgbikKLSAgICAgICAgOiBsb3dfIHtzdGF0aWNfY2Fz
dDxzdGQ6OnVpbnQ2NF90PihuKX0KLSAgICAgICAgLCBoaWdoXyB7LXN0YXRpY19jYXN0PHN0ZDo6
dWludDY0X3Q+KG4gPCAwKX0KLSAgICB7IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChsb25n
IGxvbmcgbikKLSAgICAgICAgOiBsb3dfIHtzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihuKX0K
LSAgICAgICAgLCBoaWdoXyB7LXN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4gPCAwKX0KLSAg
ICB7IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChjb25zdCBJbnQxMjhJbXBsICYpID0gZGVm
YXVsdDsKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChJbnQxMjhJbXBsICYmKSA9IGRlZmF1bHQ7
Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yPShjb25zdCBJbnQxMjhJbXBsICYp
ID0gZGVmYXVsdDsKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3I9KEludDEyOElt
cGwgJiYpID0gZGVmYXVsdDsKLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yKygp
IGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3J+KCkgY29uc3QgeyByZXR1cm4ge35oaWdoXywgfmxvd199OyB9Ci0gICAgY29uc3RleHByIElu
dDEyOEltcGwgb3BlcmF0b3ItKCkgY29uc3QgeyByZXR1cm4gfip0aGlzICsgMTsgfQotICAgIGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFsb3dfICYmICFoaWdoXzsg
fQotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
bG93XyB8fCBoaWdoXzsgfQotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzdGQ6OnVp
bnQ2NF90KCkgY29uc3QgeyByZXR1cm4gbG93XzsgfQotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBv
cGVyYXRvciBzdGQ6OmludDY0X3QoKSBjb25zdCB7IHJldHVybiBsb3dfOyB9Ci0gICAgY29uc3Rl
eHByIGV4cGxpY2l0IG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4obG93Xyk7IH0KLQotICAgIGNvbnN0ZXhwciBzdGQ6OnVpbnQ2NF90IGhpZ2goKSBjb25zdCB7
IHJldHVybiBoaWdoXzsgfQotICAgIGNvbnN0ZXhwciBzdGQ6OnVpbnQ2NF90IGxvdygpIGNvbnN0
IHsgcmV0dXJuIGxvd187IH0KLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yKyso
LypwcmVmaXgqLykKLSAgICB7Ci0gICAgICAgICp0aGlzICs9IDE7Ci0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKyhpbnQgLypw
b3N0Zml4Ki8pCi0gICAgewotICAgICAgICBJbnQxMjhJbXBsIHJlc3VsdCB7KnRoaXN9OwotICAg
ICAgICAqdGhpcyArPSAxOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBjb25z
dGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvci0tKC8qcHJlZml4Ki8pCi0gICAgewotICAgICAgICAq
dGhpcyAtPSAxOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJ
bnQxMjhJbXBsIG9wZXJhdG9yLS0oaW50IC8qcG9zdGZpeCovKQotICAgIHsKLSAgICAgICAgSW50
MTI4SW1wbCByZXN1bHQgeyp0aGlzfTsKLSAgICAgICAgKnRoaXMgLT0gMTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvciYo
SW50MTI4SW1wbCB0aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHtoaWdoXyAmIHRo
YXQuaGlnaF8sIGxvd18gJiB0aGF0Lmxvd199OwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4
SW1wbCBvcGVyYXRvciB8IChJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4ge2hpZ2hfIHwgdGhhdC5oaWdoXywgbG93XyB8IHRoYXQubG93X307Ci0gICAgfQotICAg
IGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yXihJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4ge2hpZ2hfIF4gdGhhdC5oaWdoXywgbG93XyBeIHRoYXQubG93
X307Ci0gICAgfQotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3I8PChJbnQxMjhJ
bXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAodGhhdCA+PSAxMjgpCi0gICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICBpZiAoIXRoYXQpCi0gICAgICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgICAgIHN0ZDo6dWludDY0X3QgbiB7dGhhdC5sb3dffTsKLSAgICAgICAgaWYg
KG4gPj0gNjQpCi0gICAgICAgICAgICByZXR1cm4ge2xvd18gPDwgKG4gLSA2NCksIDB9OwotICAg
ICAgICByZXR1cm4geyhoaWdoXyA8PCBuKSB8IChsb3dfID4+ICg2NCAtIG4pKSwgbG93XyA8PCBu
fTsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3I+PihJbnQxMjhJbXBs
IHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAodGhhdCA+PSAxMjgpCi0gICAgICAgICAg
ICByZXR1cm4geyB9OwotICAgICAgICBpZiAoIXRoYXQpCi0gICAgICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgICAgIHN0ZDo6dWludDY0X3QgbiB7dGhhdC5sb3dffTsKLSAgICAgICAgaWYgKG4g
Pj0gNjQpCi0gICAgICAgICAgICByZXR1cm4gezAsIGhpZ2hfID4+IChuIC0gNjQpfTsKLSAgICAg
ICAgcmV0dXJuIHtoaWdoXyA+PiBuLCAoaGlnaF8gPDwgKDY0IC0gbikpIHwgKGxvd18gPj4gbil9
OwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yKyhJbnQxMjhJbXBs
IHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGQ6OnVpbnQ2NF90IGxvd2VyIHsobG93XyAm
IH50b3BCaXQpICsgKHRoYXQubG93XyAmIH50b3BCaXQpfTsKLSAgICAgICAgYm9vbCBjYXJyeSB7
KChsb3dlciA+PiA2MykgKyAobG93XyA+PiA2MykgKyAodGhhdC5sb3dfID4+IDYzKSkgPiAxfTsK
LSAgICAgICAgcmV0dXJuIHtoaWdoXyArIHRoYXQuaGlnaF8gKyBjYXJyeSwgbG93XyArIHRoYXQu
bG93X307Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yLShJbnQxMjhJ
bXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJuICp0aGlzICsgLXRoYXQ7IH0KLQotICAgIGNvbnN0ZXhw
ciBJbnQxMjhJbXBsIG9wZXJhdG9yKihJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAg
ICAgICBzdGQ6OnVpbnQ2NF90IG1hc2szMiB7MHhmZmZmZmZmZn07Ci0gICAgICAgIGlmICghaGln
aF8gJiYgIXRoYXQuaGlnaF8pIHsKLSAgICAgICAgICAgIHN0ZDo6dWludDY0X3QgeDAge2xvd18g
JiBtYXNrMzJ9LCB4MSB7bG93XyA+PiAzMn07Ci0gICAgICAgICAgICBzdGQ6OnVpbnQ2NF90IHkw
IHt0aGF0Lmxvd18gJiBtYXNrMzJ9LCB5MSB7dGhhdC5sb3dfID4+IDMyfTsKLSAgICAgICAgICAg
IEludDEyOEltcGwgeDB5MCB7eDAgKiB5MH0sIHgweTEge3gwICogeTF9OwotICAgICAgICAgICAg
SW50MTI4SW1wbCB4MXkwIHt4MSAqIHkwfSwgeDF5MSB7eDEgKiB5MX07Ci0gICAgICAgICAgICBy
ZXR1cm4geDB5MCArICgoeDB5MSArIHgxeTApIDw8IDMyKSArICh4MXkxIDw8IDY0KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0ZDo6dWludDY0X3QgeDAge2xvd18gJiBtYXNrMzJ9LCB4MSB7bG93
XyA+PiAzMn0sIHgyIHtoaWdoXyAmIG1hc2szMn0sCi0gICAgICAgICAgICB4MyB7aGlnaF8gPj4g
MzJ9OwotICAgICAgICBzdGQ6OnVpbnQ2NF90IHkwIHt0aGF0Lmxvd18gJiBtYXNrMzJ9LCB5MSB7
dGhhdC5sb3dfID4+IDMyfSwKLSAgICAgICAgICAgIHkyIHt0aGF0LmhpZ2hfICYgbWFzazMyfSwg
eTMge3RoYXQuaGlnaF8gPj4gMzJ9OwotICAgICAgICBJbnQxMjhJbXBsIHgweTAge3gwICogeTB9
LCB4MHkxIHt4MCAqIHkxfSwgeDB5MiB7eDAgKiB5Mn0sIHgweTMge3gwICogeTN9OwotICAgICAg
ICBJbnQxMjhJbXBsIHgxeTAge3gxICogeTB9LCB4MXkxIHt4MSAqIHkxfSwgeDF5MiB7eDEgKiB5
Mn07Ci0gICAgICAgIEludDEyOEltcGwgeDJ5MCB7eDIgKiB5MH0sIHgyeTEge3gyICogeTF9Owot
ICAgICAgICBJbnQxMjhJbXBsIHgzeTAge3gzICogeTB9OwotICAgICAgICByZXR1cm4geDB5MCAr
ICgoeDB5MSArIHgxeTApIDw8IDMyKSArICgoeDB5MiArIHgxeTEgKyB4MnkwKSA8PCA2NCkgKwot
ICAgICAgICAgICAgKCh4MHkzICsgeDF5MiArIHgyeTEgKyB4M3kwKSA8PCA5Nik7Ci0gICAgfQot
Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IvKEludDEyOEltcGwgdGhhdCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGludCBqIHtsZWFkaW5nWmVyb2VzKCl9OwotICAgICAgICBJbnQx
MjhJbXBsIGJpdHMgeyp0aGlzfTsKLSAgICAgICAgYml0cyA8PD0gajsKLSAgICAgICAgSW50MTI4
SW1wbCBudW1lcmF0b3IgeyB9OwotICAgICAgICBJbnQxMjhJbXBsIHF1b3RpZW50IHsgfTsKLSAg
ICAgICAgZm9yICg7IGogPCAxMjg7ICsraikgewotICAgICAgICAgICAgbnVtZXJhdG9yIDw8PSAx
OwotICAgICAgICAgICAgaWYgKGJpdHMuaGlnaF8gJiB0b3BCaXQpCi0gICAgICAgICAgICAgICAg
bnVtZXJhdG9yLmxvd18gfD0gMTsKLSAgICAgICAgICAgIGJpdHMgPDw9IDE7Ci0gICAgICAgICAg
ICBxdW90aWVudCA8PD0gMTsKLSAgICAgICAgICAgIGlmIChudW1lcmF0b3IgPj0gdGhhdCkgewot
ICAgICAgICAgICAgICAgICsrcXVvdGllbnQ7Ci0gICAgICAgICAgICAgICAgbnVtZXJhdG9yIC09
IHRoYXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHF1b3RpZW50
OwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yJShJbnQxMjhJbXBs
IHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpbnQgaiB7bGVhZGluZ1plcm9lcygpfTsKLSAg
ICAgICAgSW50MTI4SW1wbCBiaXRzIHsqdGhpc307Ci0gICAgICAgIGJpdHMgPDw9IGo7Ci0gICAg
ICAgIEludDEyOEltcGwgcmVtYWluZGVyIHsgfTsKLSAgICAgICAgZm9yICg7IGogPCAxMjg7ICsr
aikgewotICAgICAgICAgICAgcmVtYWluZGVyIDw8PSAxOwotICAgICAgICAgICAgaWYgKGJpdHMu
aGlnaF8gJiB0b3BCaXQpCi0gICAgICAgICAgICAgICAgcmVtYWluZGVyLmxvd18gfD0gMTsKLSAg
ICAgICAgICAgIGJpdHMgPDw9IDE7Ci0gICAgICAgICAgICBpZiAocmVtYWluZGVyID49IHRoYXQp
Ci0gICAgICAgICAgICAgICAgcmVtYWluZGVyIC09IHRoYXQ7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHJlbWFpbmRlcjsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
SW50MTI4SW1wbCB0aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKElTX1NJR05FRCAmJiAo
aGlnaF8gXiB0aGF0LmhpZ2hfKSAmIHRvcEJpdCkKLSAgICAgICAgICAgIHJldHVybiAhIShoaWdo
XyAmIHRvcEJpdCk7Ci0KLSAgICAgICAgcmV0dXJuIGhpZ2hfIDwgdGhhdC5oaWdoXyB8fCAoaGln
aF8gPT0gdGhhdC5oaWdoXyAmJiBsb3dfIDwgdGhhdC5sb3dfKTsKLSAgICB9Ci0gICAgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8PShJbnQxMjhJbXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPiB0aGF0KTsgfQotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oSW50MTI4SW1wbCB0
aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvd18gPT0gdGhhdC5sb3dfICYmIGhp
Z2hfID09IHRoYXQuaGlnaF87Ci0gICAgfQotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0o
SW50MTI4SW1wbCB0aGF0KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHRoYXQpOyB9Ci0gICAg
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShJbnQxMjhJbXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJu
IHRoYXQgPD0gKnRoaXM7IH0KLSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oSW50MTI4SW1w
bCB0aGF0KSBjb25zdCB7IHJldHVybiB0aGF0IDwgKnRoaXM7IH0KLQotICAgIGNvbnN0ZXhwciBJ
bnQxMjhJbXBsICZvcGVyYXRvciY9KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAg
ICAgICAqdGhpcyA9ICp0aGlzICYgdGhhdDsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0K
LSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3J8PShjb25zdCBJbnQxMjhJbXBsICZ0
aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyB8IHRoYXQ7Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yXj0oY29u
c3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gKnRoaXMgXiB0aGF0
OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBs
ICZvcGVyYXRvcjw8PShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRo
aXMgPSAqdGhpcyA8PCB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNv
bnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvcj4+PShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQot
ICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyA+PiB0aGF0OwotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvcis9KGNvbnN0IElu
dDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzICsgdGhhdDsKLSAg
ICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3Bl
cmF0b3ItPShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAq
dGhpcyAtIHRoYXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHBy
IEludDEyOEltcGwgJm9wZXJhdG9yKj0oY29uc3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0g
ICAgICAgICp0aGlzID0gKnRoaXMgKiB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg
fQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvci89KGNvbnN0IEludDEyOEltcGwg
JnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzIC8gdGhhdDsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3IlPShj
b25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyAlIHRo
YXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3Rl
eHByIEludDEyOEltcGwoc3RkOjp1aW50NjRfdCBoaSwgc3RkOjp1aW50NjRfdCBsbykgOiBsb3df
IHtsb30sIGhpZ2hfIHtoaX0geyB9Ci0gICAgY29uc3RleHByIGludCBsZWFkaW5nWmVyb2VzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaGlnaF8pCi0gICAgICAgICAgICByZXR1cm4gNjQg
KyBsZWFkaW5nWmVyb0JpdENvdW50KGxvd18pOwotICAgICAgICByZXR1cm4gbGVhZGluZ1plcm9C
aXRDb3VudChoaWdoXyk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjp1aW50NjRf
dCB0b3BCaXQge3N0ZDo6dWludDY0X3QgezF9IDw8IDYzfTsKLSAgICBzdGQ6OnVpbnQ2NF90IGxv
d18gezB9LCBoaWdoXyB7MH07CitjbGFzcyBJbnQxMjhJbXBsOworCisvLyBVSW50MTI4SW1wbAor
Ly8KKy8vIEFuIHVuc2lnbmVkIDEyOC1iaXQgaW50ZWdlciB0eXBlLiBUaGUgQVBJIGlzIG1lYW50
IHRvIG1pbWljIGFuIGludHJpbnNpYyB0eXBlCisvLyBhcyBjbG9zZWx5IGFzIGlzIHByYWN0aWNh
bCwgaW5jbHVkaW5nIGV4aGliaXRpbmcgdW5kZWZpbmVkIGJlaGF2aW9yIGluCisvLyBhbmFsb2dv
dXMgY2FzZXMgKGUuZy4gZGl2aXNpb24gYnkgemVybykuIFRoaXMgdHlwZSBpcyBpbnRlbmRlZCB0
byBiZSBhCisvLyBkcm9wLWluIHJlcGxhY2VtZW50IG9uY2UgQysrIHN1cHBvcnRzIGFuIGludHJp
bnNpYyBgdWludDEyOF90YCB0eXBlOyB3aGVuCisvLyB0aGF0IG9jY3VycywgZXhpc3Rpbmcgd2Vs
bC1iZWhhdmVkIHVzZXMgb2YgYFVJbnQxMjhJbXBsYCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsKKy8v
IHVzaW5nIHRoYXQgbmV3IHR5cGUuCisvLworLy8gTm90ZTogY29kZSB3cml0dGVuIHdpdGggdGhp
cyB0eXBlIHdpbGwgY29udGludWUgdG8gY29tcGlsZSBvbmNlIGB1aW50MTI4X3RgCisvLyBpcyBp
bnRyb2R1Y2VkLCBwcm92aWRlZCB0aGUgcmVwbGFjZW1lbnQgaGVscGVyIGZ1bmN0aW9ucworLy8g
YFVJbnQxMjhJbXBsKExvd3xIaWdoKTY0KClgIGFuZCBgTWFrZVVJbnQxMjgoKWAgYXJlIG1hZGUu
CisvLworLy8gQSBgVUludDEyOEltcGxgIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmc6CisvLworLy8g
ICAqIEltcGxpY2l0IGNvbnN0cnVjdGlvbiBmcm9tIGludGVncmFsIHR5cGVzCisvLyAgICogRXhw
bGljaXQgY29udmVyc2lvbiB0byBpbnRlZ3JhbCB0eXBlcworLy8KKy8vIEFkZGl0aW9uYWxseSwg
aWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBgX19pbnQxMjhgLCBgVUludDEyOEltcGxgIGlzCisv
LyBpbnRlcm9wZXJhYmxlIHdpdGggdGhhdCB0eXBlLiAoQWJzZWlsIGNoZWNrcyBmb3IgdGhpcyBj
b21wYXRpYmlsaXR5IHRocm91Z2gKKy8vIHRoZSBgQUJTTF9IQVZFX0lOVFJJTlNJQ19JTlQxMjhg
IG1hY3JvLikKKy8vCisvLyBIb3dldmVyLCBhIGBVSW50MTI4SW1wbGAgZGlmZmVycyBmcm9tIGlu
dHJpbnNpYyBpbnRlZ3JhbCB0eXBlcyBpbiB0aGUgZm9sbG93aW5nCisvLyB3YXlzOgorLy8KKy8v
ICAgKiBFcnJvcnMgb24gaW1wbGljaXQgY29udmVyc2lvbnMgdGhhdCBkbyBub3QgcHJlc2VydmUg
dmFsdWUgKHN1Y2ggYXMKKy8vICAgICBsb3NzIG9mIHByZWNpc2lvbiB3aGVuIGNvbnZlcnRpbmcg
dG8gZmxvYXQgdmFsdWVzKS4KKy8vICAgKiBSZXF1aXJlcyBleHBsaWNpdCBjb25zdHJ1Y3Rpb24g
ZnJvbSBhbmQgY29udmVyc2lvbiB0byBmbG9hdGluZyBwb2ludAorLy8gICAgIHR5cGVzLgorLy8g
ICAqIENvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlwZXMgcmVxdWlyZXMgYW4gZXhwbGljaXQgc3Rh
dGljX2Nhc3QoKSB0bworLy8gICAgIG1pbWljIHVzZSBvZiB0aGUgYC1XbmFycm93aW5nYCBjb21w
aWxlciBmbGFnLgorLy8gICAqIFRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2YgYFVJbnQxMjhJ
bXBsYCBtYXkgZGlmZmVyIGZyb20gdGhhdCBvZiBhbgorLy8gICAgIGludHJpbnNpYyAxMjgtYml0
IGludGVnZXIgdHlwZSBkZXBlbmRpbmcgb24gcGxhdGZvcm0gYW5kIGJ1aWxkCisvLyAgICAgY29u
ZmlndXJhdGlvbi4KKy8vCisvLyBFeGFtcGxlOgorLy8KKy8vICAgICBmbG9hdCB5ID0gYWJzbDo6
VUludDEyOE1heCgpOyAgLy8gRXJyb3IuIFVJbnQxMjhJbXBsIGNhbm5vdCBiZSBpbXBsaWNpdGx5
CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnRlZCB0byBm
bG9hdC4KKy8vCisvLyAgICAgYWJzbDo6VUludDEyOEltcGwgdjsKKy8vICAgICB1aW50NjRfdCBp
ID0gdjsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IKKy8vICAgICB1aW50NjRfdCBp
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpOyAgLy8gT0sKKy8vCitjbGFzcyBhbGlnbmFzKDE2
KSBVSW50MTI4SW1wbCB7CisgcHVibGljOgorICBVSW50MTI4SW1wbCgpID0gZGVmYXVsdDsKKwor
ICAvLyBDb25zdHJ1Y3RvcnMgZnJvbSBhcml0aG1ldGljIHR5cGVzCisgIGNvbnN0ZXhwciBVSW50
MTI4SW1wbChpbnQgdik7ICAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9leHBsaWNp
dCkKKyAgY29uc3RleHByIFVJbnQxMjhJbXBsKHVuc2lnbmVkIGludCB2KTsgICAgICAgIC8vIE5P
TElOVChydW50aW1lL2V4cGxpY2l0KQorICBjb25zdGV4cHIgVUludDEyOEltcGwobG9uZyB2KTsg
ICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgVUludDEy
OEltcGwodW5zaWduZWQgbG9uZyB2KTsgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBj
b25zdGV4cHIgVUludDEyOEltcGwobG9uZyBsb25nIHYpOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1
bnRpbWUvaW50KQorICBjb25zdGV4cHIgVUludDEyOEltcGwodW5zaWduZWQgbG9uZyBsb25nIHYp
OyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgVUludDEyOEltcGwoSW50MTI4
SW1wbCB2KTsgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQorICBXVEZfRVhQT1JUX1BSSVZB
VEUgZXhwbGljaXQgVUludDEyOEltcGwoZmxvYXQgdik7CisgIFdURl9FWFBPUlRfUFJJVkFURSBl
eHBsaWNpdCBVSW50MTI4SW1wbChkb3VibGUgdik7CisgIFdURl9FWFBPUlRfUFJJVkFURSBleHBs
aWNpdCBVSW50MTI4SW1wbChsb25nIGRvdWJsZSB2KTsKKworICAvLyBBc3NpZ25tZW50IG9wZXJh
dG9ycyBmcm9tIGFyaXRobWV0aWMgdHlwZXMKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPShpbnQg
dik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj0odW5zaWduZWQgaW50IHYpOworICBVSW50MTI4
SW1wbCYgb3BlcmF0b3I9KGxvbmcgdik7ICAgICAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPSh1bnNpZ25lZCBsb25nIHYpOyAgICAgICAv
LyBOT0xJTlQocnVudGltZS9pbnQpCisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj0obG9uZyBsb25n
IHYpOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBVSW50MTI4SW1wbCYgb3Bl
cmF0b3I9KHVuc2lnbmVkIGxvbmcgbG9uZyB2KTsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAg
VUludDEyOEltcGwmIG9wZXJhdG9yPShJbnQxMjhJbXBsIHYpOworCisgIC8vIENvbnZlcnNpb24g
b3BlcmF0b3JzIHRvIG90aGVyIGFyaXRobWV0aWMgdHlwZXMKKyAgY29uc3RleHByIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGNo
YXIoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHNpZ25lZCBjaGFyKCkg
Y29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCBjaGFyKCkgY29u
c3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyMTZfdCgpIGNvbnN0OworICBj
b25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgY2hhcjMyX3QoKSBjb25zdDsKKyAgY29uc3RleHBy
IGV4cGxpY2l0IG9wZXJhdG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCgpIGNvbnN0OworICBjb25z
dGV4cHIgZXhwbGljaXQgb3BlcmF0b3Igc2hvcnQoKSBjb25zdDsgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBs
aWNpdCBvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGlj
aXQgb3BlcmF0b3IgaW50KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1
bnNpZ25lZCBpbnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGxvbmco
KSBjb25zdDsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVu
dGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCBsb25nKCkg
Y29uc3Q7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhw
bGljaXQgb3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3Q7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1
bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgbG9uZyBs
b25nKCkgY29uc3Q7CisgIGV4cGxpY2l0IG9wZXJhdG9yIGZsb2F0KCkgY29uc3Q7CisgIGV4cGxp
Y2l0IG9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0OworICBleHBsaWNpdCBvcGVyYXRvciBsb25nIGRv
dWJsZSgpIGNvbnN0OworCisgIC8vIFRyaXZpYWwgY29weSBjb25zdHJ1Y3RvciwgYXNzaWdubWVu
dCBvcGVyYXRvciBhbmQgZGVzdHJ1Y3Rvci4KKworICAvLyBBcml0aG1ldGljIG9wZXJhdG9ycy4K
KyAgVUludDEyOEltcGwmIG9wZXJhdG9yKz0oVUludDEyOEltcGwgb3RoZXIpOworICBVSW50MTI4
SW1wbCYgb3BlcmF0b3ItPShVSW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQxMjhJbXBsJiBvcGVy
YXRvcio9KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgLy8gTG9uZyBkaXZpc2lvbi9tb2R1bG8gZm9y
IFVJbnQxMjhJbXBsLgorICBVSW50MTI4SW1wbCYgb3BlcmF0b3IvPShVSW50MTI4SW1wbCBvdGhl
cik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvciU9KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUlu
dDEyOEltcGwgb3BlcmF0b3IrKyhpbnQpOworICBVSW50MTI4SW1wbCBvcGVyYXRvci0tKGludCk7
CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcjw8PShpbnQpOworICBVSW50MTI4SW1wbCYgb3BlcmF0
b3I+Pj0oaW50KTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yJj0oVUludDEyOEltcGwgb3RoZXIp
OworICBVSW50MTI4SW1wbCYgb3BlcmF0b3J8PShVSW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQx
MjhJbXBsJiBvcGVyYXRvcl49KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUludDEyOEltcGwmIG9w
ZXJhdG9yKysoKTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yLS0oKTsKKworICAvLyBVSW50MTI4
TG93NjQoKQorICAvLworICAvLyBSZXR1cm5zIHRoZSBsb3dlciA2NC1iaXQgdmFsdWUgb2YgYSBg
VUludDEyOEltcGxgIHZhbHVlLgorICBmcmllbmQgY29uc3RleHByIHVpbnQ2NF90IFVJbnQxMjhM
b3c2NChVSW50MTI4SW1wbCB2KTsKKworICAvLyBVSW50MTI4SGlnaDY0KCkKKyAgLy8KKyAgLy8g
UmV0dXJucyB0aGUgaGlnaGVyIDY0LWJpdCB2YWx1ZSBvZiBhIGBVSW50MTI4SW1wbGAgdmFsdWUu
CisgIGZyaWVuZCBjb25zdGV4cHIgdWludDY0X3QgVUludDEyOEhpZ2g2NChVSW50MTI4SW1wbCB2
KTsKKworICAvLyBNYWtlVUludDEyOCgpCisgIC8vCisgIC8vIENvbnN0cnVjdHMgYSBgVUludDEy
OEltcGxgIG51bWVyaWMgdmFsdWUgZnJvbSB0d28gNjQtYml0IHVuc2lnbmVkIGludGVnZXJzLgor
ICAvLyBOb3RlIHRoYXQgdGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGlzIHRoZSBvbmx5IHdheSB0byBj
b25zdHJ1Y3QgYSBgVUludDEyOEltcGxgCisgIC8vIGZyb20gaW50ZWdlciB2YWx1ZXMgZ3JlYXRl
ciB0aGFuIDJeNjQuCisgIC8vCisgIC8vIEV4YW1wbGU6CisgIC8vCisgIC8vICAgVUludDEyOElt
cGwgYmlnID0gTWFrZVVJbnQxMjgoMSwgMCk7CisgIGZyaWVuZCBjb25zdGV4cHIgVUludDEyOElt
cGwgTWFrZVVJbnQxMjgodWludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KTsKKworICAvLyBVSW50
MTI4TWF4KCkKKyAgLy8KKyAgLy8gUmV0dXJucyB0aGUgaGlnaGVzdCB2YWx1ZSBmb3IgYSAxMjgt
Yml0IHVuc2lnbmVkIGludGVnZXIuCisgIGZyaWVuZCBjb25zdGV4cHIgVUludDEyOEltcGwgVUlu
dDEyOE1heCgpOworCisgcHJpdmF0ZToKKyAgY29uc3RleHByIFVJbnQxMjhJbXBsKHVpbnQ2NF90
IGhpZ2gsIHVpbnQ2NF90IGxvdyk7CisKKyAgLy8gVE9ETyhzdHJlbCkgVXBkYXRlIGltcGxlbWVu
dGF0aW9uIHRvIHVzZSBfX2ludDEyOCBvbmNlIGFsbCB1c2VycyBvZgorICAvLyBVSW50MTI4SW1w
bCBhcmUgZml4ZWQgdG8gbm90IGRlcGVuZCBvbiBhbGlnbm9mKFVJbnQxMjhJbXBsKSA9PSA4LiBB
bHNvIGFkZAorICAvLyBhbGlnbmFzKDE2KSB0byBjbGFzcyBkZWZpbml0aW9uIHRvIGtlZXAgYWxp
Z25tZW50IGNvbnNpc3RlbnQgYWNyb3NzCisgIC8vIHBsYXRmb3Jtcy4KKyNpZiBDUFUoTElUVExF
X0VORElBTikKKyAgdWludDY0X3QgbG9fOworICB1aW50NjRfdCBoaV87CisjZWxpZiBDUFUoQklH
X0VORElBTikKKyAgdWludDY0X3QgaGlfOworICB1aW50NjRfdCBsb187CisjZWxzZSAgLy8gYnl0
ZSBvcmRlcgorI2Vycm9yICJVbnN1cHBvcnRlZCBieXRlIG9yZGVyOiBtdXN0IGJlIGxpdHRsZS1l
bmRpYW4gb3IgYmlnLWVuZGlhbi4iCisjZW5kaWYgIC8vIGJ5dGUgb3JkZXIKK307CisKKy8vIGFs
bG93IFVJbnQxMjhJbXBsIHRvIGJlIGxvZ2dlZAorV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3N0
cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBVSW50MTI4SW1wbCB2KTsKKworLy8g
VE9ETyhzdHJlbCkgYWRkIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtJiwgVUludDEyOEltcGwpCisK
K2NvbnN0ZXhwciBVSW50MTI4SW1wbCBVSW50MTI4TWF4KCkgeworICByZXR1cm4gVUludDEyOElt
cGwoKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCksCisgICAgICAgICAgICAg
ICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpKTsKK30KKworfSAgLy8g
bmFtZXNwYWNlIFdURgorCisvLyBTcGVjaWFsaXplZCBudW1lcmljX2xpbWl0cyBmb3IgVUludDEy
OEltcGwuCituYW1lc3BhY2Ugc3RkIHsKK3RlbXBsYXRlIDw+CitjbGFzcyBudW1lcmljX2xpbWl0
czxXVEY6OlVJbnQxMjhJbXBsPiB7CisgcHVibGljOgorICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc2lnbmVk
ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX3NpZ25hbGlu
Z19OYU4gPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfZGVu
b3JtX2xvc3MgPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdF9yb3VuZF9zdHlsZSBy
b3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX21vZHVsbyA9IHRydWU7CisgIHN0YXRp
YyBjb25zdGV4cHIgaW50IGRpZ2l0cyA9IDEyODsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGln
aXRzMTAgPSAzODsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcmFkaXggPSAyOworICBzdGF0aWMgY29uc3RleHByIGludCBt
aW5fZXhwb25lbnQgPSAwOworICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQxMCA9
IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9leHBvbmVudCA9IDA7CisgIHN0YXRpYyBj
b25zdGV4cHIgaW50IG1heF9leHBvbmVudDEwID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHRyYXBzID0gbnVtZXJpY19saW1pdHM8dWludDY0X3Q+Ojp0cmFwczsKKyAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworCisgIHN0YXRpYyBjb25zdGV4cHIg
V1RGOjpVSW50MTI4SW1wbCAobWluKSgpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhw
ciBXVEY6OlVJbnQxMjhJbXBsIGxvd2VzdCgpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0
ZXhwciBXVEY6OlVJbnQxMjhJbXBsIChtYXgpKCkgeyByZXR1cm4gV1RGOjpVSW50MTI4TWF4KCk7
IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIGVwc2lsb24oKSB7IHJldHVy
biAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCByb3VuZF9lcnJvcigp
IHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIGluZmlu
aXR5KCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6VUludDEyOEltcGwg
cXVpZXRfTmFOKCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6VUludDEy
OEltcGwgc2lnbmFsaW5nX05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBX
VEY6OlVJbnQxMjhJbXBsIGRlbm9ybV9taW4oKSB7IHJldHVybiAwOyB9Cit9OworfSAgLy8gbmFt
ZXNwYWNlIHN0ZAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSW50MTI4SW1wbAorLy8KKy8vIEEg
c2lnbmVkIDEyOC1iaXQgaW50ZWdlciB0eXBlLiBUaGUgQVBJIGlzIG1lYW50IHRvIG1pbWljIGFu
IGludHJpbnNpYworLy8gaW50ZWdyYWwgdHlwZSBhcyBjbG9zZWx5IGFzIGlzIHByYWN0aWNhbCwg
aW5jbHVkaW5nIGV4aGliaXRpbmcgdW5kZWZpbmVkCisvLyBiZWhhdmlvciBpbiBhbmFsb2dvdXMg
Y2FzZXMgKGUuZy4gZGl2aXNpb24gYnkgemVybykuCisvLworLy8gQW4gYEludDEyOEltcGxgIHN1
cHBvcnRzIHRoZSBmb2xsb3dpbmc6CisvLworLy8gICAqIEltcGxpY2l0IGNvbnN0cnVjdGlvbiBm
cm9tIGludGVncmFsIHR5cGVzCisvLyAgICogRXhwbGljaXQgY29udmVyc2lvbiB0byBpbnRlZ3Jh
bCB0eXBlcworLy8KKy8vIEhvd2V2ZXIsIGFuIGBJbnQxMjhJbXBsYCBkaWZmZXJzIGZyb20gaW50
cmluc2ljIGludGVncmFsIHR5cGVzIGluIHRoZSBmb2xsb3dpbmcKKy8vIHdheXM6CisvLworLy8g
ICAqIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGNvbnZlcnRpYmxlIHRvIG90aGVyIGludGVncmFsIHR5
cGVzLgorLy8gICAqIFJlcXVpcmVzIGV4cGxpY2l0IGNvbnN0cnVjdGlvbiBmcm9tIGFuZCBjb252
ZXJzaW9uIHRvIGZsb2F0aW5nIHBvaW50CisvLyAgICAgdHlwZXMuCisKKy8vIEFkZGl0aW9uYWxs
eSwgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBgX19pbnQxMjhgLCBgSW50MTI4SW1wbGAgaXMK
Ky8vIGludGVyb3BlcmFibGUgd2l0aCB0aGF0IHR5cGUuIChBYnNlaWwgY2hlY2tzIGZvciB0aGlz
IGNvbXBhdGliaWxpdHkgdGhyb3VnaAorLy8gdGhlIGBBQlNMX0hBVkVfSU5UUklOU0lDX0lOVDEy
OGAgbWFjcm8uKQorLy8KKy8vIFRoZSBkZXNpZ24gZ29hbCBmb3IgYEludDEyOEltcGxgIGlzIHRo
YXQgaXQgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggYSBmdXR1cmUKKy8vIGBpbnQxMjhfdGAsIGlm
IHRoYXQgdHlwZSBiZWNvbWVzIGEgcGFydCBvZiB0aGUgc3RhbmRhcmQuCisvLworLy8gRXhhbXBs
ZToKKy8vCisvLyAgICAgZmxvYXQgeSA9IEludDEyOEltcGwoMTcpOyAgLy8gRXJyb3IuIEludDEy
OEltcGwgY2Fubm90IGJlIGltcGxpY2l0bHkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNvbnZlcnRlZCB0byBmbG9hdC4KKy8vCisvLyAgICAgSW50MTI4SW1wbCB2Owor
Ly8gICAgIGludDY0X3QgaSA9IHY7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IKKy8v
ICAgICBpbnQ2NF90IGkgPSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2KTsgIC8vIE9LCisvLworY2xh
c3MgYWxpZ25hcygxNikgSW50MTI4SW1wbCB7CisgcHVibGljOgorICBJbnQxMjhJbXBsKCkgPSBk
ZWZhdWx0OworCisgIC8vIENvbnN0cnVjdG9ycyBmcm9tIGFyaXRobWV0aWMgdHlwZXMKKyAgY29u
c3RleHByIEludDEyOEltcGwoaW50IHYpOyAgICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRp
bWUvZXhwbGljaXQpCisgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKHVuc2lnbmVkIGludCB2KTsgICAg
ICAgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQorICBjb25zdGV4cHIgSW50MTI4SW1wbChs
b25nIHYpOyAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhw
ciBJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgdik7ICAgICAgIC8vIE5PTElOVChydW50aW1lL2lu
dCkKKyAgY29uc3RleHByIEludDEyOEltcGwobG9uZyBsb25nIHYpOyAgICAgICAgICAgLy8gTk9M
SU5UKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxv
bmcgdik7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBJbnQx
MjhJbXBsKFVJbnQxMjhJbXBsIHYpOworICBXVEZfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW50
MTI4SW1wbChmbG9hdCB2KTsKKyAgV1RGX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEludDEyOElt
cGwoZG91YmxlIHYpOworICBXVEZfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW50MTI4SW1wbChs
b25nIGRvdWJsZSB2KTsKKworICAvLyBBc3NpZ25tZW50IG9wZXJhdG9ycyBmcm9tIGFyaXRobWV0
aWMgdHlwZXMKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KGludCB2KTsKKyAgSW50MTI4SW1wbCYg
b3BlcmF0b3I9KHVuc2lnbmVkIGludCB2KTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KGxvbmcg
dik7ICAgICAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgSW50MTI4SW1wbCYg
b3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgdik7ICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkK
KyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KGxvbmcgbG9uZyB2KTsgICAgICAgICAgIC8vIE5PTElO
VChydW50aW1lL2ludCkKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgbG9u
ZyB2KTsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKworICAvLyBDb252ZXJzaW9uIG9wZXJhdG9y
cyB0byBvdGhlciBhcml0aG1ldGljIHR5cGVzCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyKCkgY29u
c3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzaWduZWQgY2hhcigpIGNvbnN0Owor
ICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgY2hhcigpIGNvbnN0OworICBj
b25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgY2hhcjE2X3QoKSBjb25zdDsKKyAgY29uc3RleHBy
IGV4cGxpY2l0IG9wZXJhdG9yIGNoYXIzMl90KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNp
dCBvcGVyYXRvciBBQlNMX0lOVEVSTkFMX1dDSEFSX1QoKSBjb25zdDsKKyAgY29uc3RleHByIGV4
cGxpY2l0IG9wZXJhdG9yIHNob3J0KCkgY29uc3Q7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisg
IC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3Bl
cmF0b3IgdW5zaWduZWQgc2hvcnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJh
dG9yIGludCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQg
aW50KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBsb25nKCkgY29uc3Q7
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50
KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgbG9uZygpIGNvbnN0Owor
ICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9w
ZXJhdG9yIGxvbmcgbG9uZygpIGNvbnN0OworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2lu
dCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIGxvbmcgbG9uZygpIGNv
bnN0OworICBleHBsaWNpdCBvcGVyYXRvciBmbG9hdCgpIGNvbnN0OworICBleHBsaWNpdCBvcGVy
YXRvciBkb3VibGUoKSBjb25zdDsKKyAgZXhwbGljaXQgb3BlcmF0b3IgbG9uZyBkb3VibGUoKSBj
b25zdDsKKworICAvLyBUcml2aWFsIGNvcHkgY29uc3RydWN0b3IsIGFzc2lnbm1lbnQgb3BlcmF0
b3IgYW5kIGRlc3RydWN0b3IuCisKKyAgLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMKKyAgSW50MTI4
SW1wbCYgb3BlcmF0b3IrPShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0
b3ItPShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3IqPShJbnQxMjhJ
bXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3IvPShJbnQxMjhJbXBsIG90aGVyKTsK
KyAgSW50MTI4SW1wbCYgb3BlcmF0b3IlPShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1w
bCBvcGVyYXRvcisrKGludCk7ICAvLyBwb3N0Zml4IGluY3JlbWVudDogaSsrCisgIEludDEyOElt
cGwgb3BlcmF0b3ItLShpbnQpOyAgLy8gcG9zdGZpeCBkZWNyZW1lbnQ6IGktLQorICBJbnQxMjhJ
bXBsJiBvcGVyYXRvcisrKCk7ICAgIC8vIHByZWZpeCBpbmNyZW1lbnQ6ICArK2kKKyAgSW50MTI4
SW1wbCYgb3BlcmF0b3ItLSgpOyAgICAvLyBwcmVmaXggZGVjcmVtZW50OiAgLS1pCisgIEludDEy
OEltcGwmIG9wZXJhdG9yJj0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJh
dG9yfD0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9yXj0oSW50MTI4
SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9yPDw9KGludCBhbW91bnQpOworICBJ
bnQxMjhJbXBsJiBvcGVyYXRvcj4+PShpbnQgYW1vdW50KTsKKworICAvLyBJbnQxMjhMb3c2NCgp
CisgIC8vCisgIC8vIFJldHVybnMgdGhlIGxvd2VyIDY0LWJpdCB2YWx1ZSBvZiBhIGBJbnQxMjhJ
bXBsYCB2YWx1ZS4KKyAgZnJpZW5kIGNvbnN0ZXhwciB1aW50NjRfdCBJbnQxMjhMb3c2NChJbnQx
MjhJbXBsIHYpOworCisgIC8vIEludDEyOEhpZ2g2NCgpCisgIC8vCisgIC8vIFJldHVybnMgdGhl
IGhpZ2hlciA2NC1iaXQgdmFsdWUgb2YgYSBgSW50MTI4SW1wbGAgdmFsdWUuCisgIGZyaWVuZCBj
b25zdGV4cHIgaW50NjRfdCBJbnQxMjhIaWdoNjQoSW50MTI4SW1wbCB2KTsKKworICAvLyBNYWtl
SW50MTI4KCkKKyAgLy8KKyAgLy8gQ29uc3RydWN0cyBhIGBJbnQxMjhJbXBsYCBudW1lcmljIHZh
bHVlIGZyb20gdHdvIDY0LWJpdCBpbnRlZ2Vycy4gTm90ZSB0aGF0CisgIC8vIHNpZ25lZG5lc3Mg
aXMgY29udmV5ZWQgaW4gdGhlIHVwcGVyIGBoaWdoYCB2YWx1ZS4KKyAgLy8KKyAgLy8gICAoSW50
MTI4SW1wbCgxKSA8PCA2NCkgKiBoaWdoICsgbG93CisgIC8vCisgIC8vIE5vdGUgdGhhdCB0aGlz
IGZhY3RvcnkgZnVuY3Rpb24gaXMgdGhlIG9ubHkgd2F5IHRvIGNvbnN0cnVjdCBhIGBJbnQxMjhJ
bXBsYAorICAvLyBmcm9tIGludGVnZXIgdmFsdWVzIGdyZWF0ZXIgdGhhbiAyXjY0IG9yIGxlc3Mg
dGhhbiAtMl42NC4KKyAgLy8KKyAgLy8gRXhhbXBsZToKKyAgLy8KKyAgLy8gICBJbnQxMjhJbXBs
IGJpZyA9IE1ha2VJbnQxMjgoMSwgMCk7CisgIC8vICAgSW50MTI4SW1wbCBiaWdfbiA9IE1ha2VJ
bnQxMjgoLTEsIDApOworICBmcmllbmQgY29uc3RleHByIEludDEyOEltcGwgTWFrZUludDEyOChp
bnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdyk7CisKKyAgLy8gSW50MTI4TWF4KCkKKyAgLy8KKyAg
Ly8gUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgYSAxMjgtYml0IHNpZ25lZCBpbnRlZ2Vy
LgorICBmcmllbmQgY29uc3RleHByIEludDEyOEltcGwgSW50MTI4TWF4KCk7CisKKyAgLy8gSW50
MTI4TWluKCkKKyAgLy8KKyAgLy8gUmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZSBmb3IgYSAxMjgt
Yml0IHNpZ25lZCBpbnRlZ2VyLgorICBmcmllbmQgY29uc3RleHByIEludDEyOEltcGwgSW50MTI4
TWluKCk7CisKKyBwcml2YXRlOgorICBjb25zdGV4cHIgSW50MTI4SW1wbChpbnQ2NF90IGhpZ2gs
IHVpbnQ2NF90IGxvdyk7CisKKyNpZiBDUFUoTElUVExFX0VORElBTikKKyAgdWludDY0X3QgbG9f
OworICBpbnQ2NF90IGhpXzsKKyNlbGlmIENQVShCSUdfRU5ESUFOKQorICBpbnQ2NF90IGhpXzsK
KyAgdWludDY0X3QgbG9fOworI2Vsc2UgIC8vIGJ5dGUgb3JkZXIKKyNlcnJvciAiVW5zdXBwb3J0
ZWQgYnl0ZSBvcmRlcjogbXVzdCBiZSBsaXR0bGUtZW5kaWFuIG9yIGJpZy1lbmRpYW4uIgorI2Vu
ZGlmICAvLyBieXRlIG9yZGVyCiB9OwogCitXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvc3RyZWFt
JiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIEludDEyOEltcGwgdik7CisKKy8vIFRPRE8o
YWJzbC10ZWFtKSBhZGQgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0mLCBJbnQxMjhJbXBsKQorCitj
b25zdGV4cHIgSW50MTI4SW1wbCBJbnQxMjhNYXgoKSB7CisgIHJldHVybiBJbnQxMjhJbXBsKChz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgpKCksCisgICAgICAgICAgICAgICAgKHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCkpOworfQorCitjb25zdGV4cHIgSW50
MTI4SW1wbCBJbnQxMjhNaW4oKSB7CisgIHJldHVybiBJbnQxMjhJbXBsKChzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptaW4pKCksIDApOworfQorCit9ICAvLyBuYW1lc3BhY2UgV1RGCisK
Ky8vIFNwZWNpYWxpemVkIG51bWVyaWNfbGltaXRzIGZvciBJbnQxMjhJbXBsLgorbmFtZXNwYWNl
IHN0ZCB7Cit0ZW1wbGF0ZSA8PgorY2xhc3MgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBs
PiB7CisgcHVibGljOgorICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0
cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNfZXhhY3QgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICBz
dGF0aWMgY29uc3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi
c2VudDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwor
ICBzdGF0aWMgY29uc3RleHByIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf
dG93YXJkX3plcm87CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK
KyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IGRp
Z2l0cyA9IDEyNzsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGlnaXRzMTAgPSAzODsKKyAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgcmFkaXggPSAyOworICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQgPSAwOwor
ICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgIHN0YXRpYyBjb25z
dGV4cHIgaW50IG1heF9leHBvbmVudCA9IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9l
eHBvbmVudDEwID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYXBzID0gbnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+Ojp0cmFwczsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRpbnluZXNz
X2JlZm9yZSA9IGZhbHNlOworCisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsICht
aW4pKCkgeyByZXR1cm4gV1RGOjpJbnQxMjhNaW4oKTsgfQorICBzdGF0aWMgY29uc3RleHByIFdU
Rjo6SW50MTI4SW1wbCBsb3dlc3QoKSB7IHJldHVybiBXVEY6OkludDEyOE1pbigpOyB9CisgIHN0
YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIChtYXgpKCkgeyByZXR1cm4gV1RGOjpJbnQx
MjhNYXgoKTsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBlcHNpbG9uKCkg
eyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCByb3VuZF9l
cnJvcigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwg
aW5maW5pdHkoKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJ
bXBsIHF1aWV0X05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6Oklu
dDEyOEltcGwgc2lnbmFsaW5nX05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhw
ciBXVEY6OkludDEyOEltcGwgZGVub3JtX21pbigpIHsgcmV0dXJuIDA7IH0KK307Cit9ICAvLyBu
YW1lc3BhY2Ugc3RkCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAg
ICAgICBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvbGxvdworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
K25hbWVzcGFjZSBXVEYgeworCitjb25zdGV4cHIgVUludDEyOEltcGwgTWFrZVVJbnQxMjgodWlu
dDY0X3QgaGlnaCwgdWludDY0X3QgbG93KSB7CisgIHJldHVybiBVSW50MTI4SW1wbChoaWdoLCBs
b3cpOworfQorCisvLyBBc3NpZ25tZW50IGZyb20gaW50ZWdlciB0eXBlcy4KKworaW5saW5lIFVJ
bnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KGludCB2KSB7IHJldHVybiAqdGhpcyA9
IFVJbnQxMjhJbXBsKHYpOyB9CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9w
ZXJhdG9yPSh1bnNpZ25lZCBpbnQgdikgeworICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2
KTsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KGxvbmcg
dikgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1w
bCh2KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgVUludDEy
OEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcj0odW5zaWduZWQgbG9uZyB2KSB7CisgIHJldHVy
biAqdGhpcyA9IFVJbnQxMjhJbXBsKHYpOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1l
L2ludCkKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yPShsb25nIGxv
bmcgdikgeworICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2KTsKK30KKworLy8gTk9MSU5U
TkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpv
cGVyYXRvcj0odW5zaWduZWQgbG9uZyBsb25nIHYpIHsKKyAgcmV0dXJuICp0aGlzID0gVUludDEy
OEltcGwodik7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9y
PShJbnQxMjhJbXBsIHYpIHsKKyAgcmV0dXJuICp0aGlzID0gVUludDEyOEltcGwodik7Cit9CisK
Ky8vIEFyaXRobWV0aWMgb3BlcmF0b3JzLgorCitjb25zdGV4cHIgVUludDEyOEltcGwgb3BlcmF0
b3I8PChVSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpOworY29uc3RleHByIFVJbnQxMjhJbXBs
IG9wZXJhdG9yPj4oVUludDEyOEltcGwgbGhzLCBpbnQgYW1vdW50KTsKK2NvbnN0ZXhwciBVSW50
MTI4SW1wbCBvcGVyYXRvcisoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpOworY29u
c3RleHByIFVJbnQxMjhJbXBsIG9wZXJhdG9yLShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBs
IHJocyk7CitVSW50MTI4SW1wbCBvcGVyYXRvciooVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1w
bCByaHMpOworV1RGX0VYUE9SVF9QUklWQVRFIFVJbnQxMjhJbXBsIG9wZXJhdG9yLyhVSW50MTI4
SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVUludDEyOElt
cGwgb3BlcmF0b3IlKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKTsKKworaW5saW5l
IFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I8PD0oaW50IGFtb3VudCkgeworICAq
dGhpcyA9ICp0aGlzIDw8IGFtb3VudDsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgVUlu
dDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcj4+PShpbnQgYW1vdW50KSB7CisgICp0aGlz
ID0gKnRoaXMgPj4gYW1vdW50OworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yKz0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyArIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yLT0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAtIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yKj0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAqIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yLz0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAvIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yJT0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAlIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2NvbnN0ZXhwciB1aW50
NjRfdCBVSW50MTI4TG93NjQoVUludDEyOEltcGwgdikgeyByZXR1cm4gdi5sb187IH0KKworY29u
c3RleHByIHVpbnQ2NF90IFVJbnQxMjhIaWdoNjQoVUludDEyOEltcGwgdikgeyByZXR1cm4gdi5o
aV87IH0KKworLy8gQ29uc3RydWN0b3JzIGZyb20gaW50ZWdlciB0eXBlcy4KKworI2lmIENQVShM
SVRUTEVfRU5ESUFOKQorCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKHVpbnQ2
NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykKKyAgICA6IGxvX3tsb3d9LCBoaV97aGlnaH0ge30KKwor
Y29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChpbnQgdikKKyAgICA6IGxvX3tzdGF0
aWNfY2FzdDx1aW50NjRfdD4odil9LAorICAgICAgaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+OjptYXgpKCkgOiAwfSB7fQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpV
SW50MTI4SW1wbChsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBsb197c3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwKKyAgICAgIGhpX3t2IDwgMCA/IChzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpIDogMH0ge30KK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6
VUludDEyOEltcGwobG9uZyBsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBs
b197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwKKyAgICAgIGhpX3t2IDwgMCA/IChzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpIDogMH0ge30KKworY29uc3RleHByIFVJbnQx
MjhJbXBsOjpVSW50MTI4SW1wbCh1bnNpZ25lZCBpbnQgdikgOiBsb197dn0sIGhpX3swfSB7fQor
Ly8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJ
bnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgdikgOiBsb197dn0sIGhpX3swfSB7fQorLy8gTk9MSU5U
TkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBs
KHVuc2lnbmVkIGxvbmcgbG9uZyB2KSA6IGxvX3t2fSwgaGlfezB9IHt9CisKK2NvbnN0ZXhwciBV
SW50MTI4SW1wbDo6VUludDEyOEltcGwoSW50MTI4SW1wbCB2KQorICAgIDogbG9fe0ludDEyOExv
dzY0KHYpfSwgaGlfe3N0YXRpY19jYXN0PHVpbnQ2NF90PihJbnQxMjhIaWdoNjQodikpfSB7fQor
CisjZWxpZiBDUFUoQklHX0VORElBTikKKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4
SW1wbCh1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpCisgICAgOiBoaV97aGlnaH0sIGxvX3ts
b3d9IHt9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwoaW50IHYpCisgICAg
OiBoaV97diA8IDAgPyAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSA6IDB9
LAorICAgICAgbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0ge30KK2NvbnN0ZXhwciBVSW50
MTI4SW1wbDo6VUludDEyOEltcGwobG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAg
IDogaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCkgOiAw
fSwKKyAgICAgIGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9IHt9Citjb25zdGV4cHIgVUlu
dDEyOEltcGw6OlVJbnQxMjhJbXBsKGxvbmcgbG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50
KQorICAgIDogaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgp
KCkgOiAwfSwKKyAgICAgIGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9IHt9CisKK2NvbnN0
ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwodW5zaWduZWQgaW50IHYpIDogaGlfezB9LCBs
b197dn0ge30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQx
MjhJbXBsOjpVSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpIDogaGlfezB9LCBsb197dn0ge30K
Ky8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpV
SW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxvbmcgdikgOiBoaV97MH0sIGxvX3t2fSB7fQorCitj
b25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKEludDEyOEltcGwgdikKKyAgICA6IGhp
X3tzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4SGlnaDY0KHYpKX0sIGxvX3tJbnQxMjhMb3c2
NCh2KX0ge30KKworI2Vsc2UgIC8vIGJ5dGUgb3JkZXIKKyNlcnJvciAiVW5zdXBwb3J0ZWQgYnl0
ZSBvcmRlcjogbXVzdCBiZSBsaXR0bGUtZW5kaWFuIG9yIGJpZy1lbmRpYW4uIgorI2VuZGlmICAv
LyBieXRlIG9yZGVyCisKKy8vIENvbnZlcnNpb24gb3BlcmF0b3JzIHRvIGludGVnZXIgdHlwZXMu
CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
IGxvXyB8fCBoaV87IH0KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4obG9fKTsgfQorCitjb25zdGV4cHIgVUlu
dDEyOEltcGw6Om9wZXJhdG9yIHNpZ25lZCBjaGFyKCkgY29uc3QgeworICByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2lnbmVkIGNoYXI+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3Bl
cmF0b3IgdW5zaWduZWQgY2hhcigpIGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgY2hh
cjE2X3QoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyMTZfdD4obG9fKTsKK30K
KworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMzJfdCgpIGNvbnN0IHsKKyAg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXIzMl90Pihsb18pOworfQorCitjb25zdGV4cHIgVUludDEy
OEltcGw6Om9wZXJhdG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCgpIGNvbnN0IHsKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PEFCU0xfSU5URVJOQUxfV0NIQVJfVD4obG9fKTsKK30KKworLy8gTk9MSU5U
TkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIHNo
b3J0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KGxvXyk7IH0KKworY29uc3Rl
eHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCgpIGNvbnN0IHsgIC8vIE5P
TElOVChydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihs
b18pOyAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKK30KKworY29uc3RleHByIFVJ
bnQxMjhJbXBsOjpvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KGxvXyk7IH0KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBpbnQo
KSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGxvXyk7Cit9CisK
Ky8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpv
cGVyYXRvciBsb25nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4obG9fKTsgfQor
Citjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGxvbmcoKSBjb25zdCB7
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihsb18pOyAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKK30KKworY29uc3Rl
eHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGxvbmcoKSBjb25zdCB7ICAvLyBOT0xJTlQo
cnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGxvXyk7ICAgICAg
ICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorfQorCitjb25zdGV4cHIgVUludDEyOEltcGw6
Om9wZXJhdG9yIHVuc2lnbmVkIGxvbmcgbG9uZygpIGNvbnN0IHsgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obG9fKTsgICAg
ICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9CisKKy8vIENvbnZlcnNpb24gb3BlcmF0
b3JzIHRvIGZsb2F0aW5nIHBvaW50IHR5cGVzLgorCitpbmxpbmUgVUludDEyOEltcGw6Om9wZXJh
dG9yIGZsb2F0KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvXykgKyBz
dGQ6OmxkZXhwKHN0YXRpY19jYXN0PGZsb2F0PihoaV8pLCA2NCk7Cit9CisKK2lubGluZSBVSW50
MTI4SW1wbDo6b3BlcmF0b3IgZG91YmxlKCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihsb18pICsgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxkb3VibGU+KGhpXyksIDY0KTsK
K30KKworaW5saW5lIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJsZSgpIGNvbnN0IHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPihsb18pICsKKyAgICAgICAgIHN0ZDo6
bGRleHAoc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KGhpXyksIDY0KTsKK30KKworLy8gQ29tcGFy
aXNvbiBvcGVyYXRvcnMuCisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oVUludDEyOEltcGwg
bGhzLCBVSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIChVSW50MTI4TG93NjQobGhzKSA9PSBV
SW50MTI4TG93NjQocmhzKSAmJgorICAgICAgICAgIFVJbnQxMjhIaWdoNjQobGhzKSA9PSBVSW50
MTI4SGlnaDY0KHJocykpOworfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KFVJbnQxMjhJ
bXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7IHJldHVybiAhKGxocyA9PSByaHMpOyB9CisKK2Nv
bnN0ZXhwciBib29sIG9wZXJhdG9yPChVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykg
eworICByZXR1cm4gKFVJbnQxMjhIaWdoNjQobGhzKSA9PSBVSW50MTI4SGlnaDY0KHJocykpCisg
ICAgICAgICAgICAgPyAoVUludDEyOExvdzY0KGxocykgPCBVSW50MTI4TG93NjQocmhzKSkKKyAg
ICAgICAgICAgICA6IChVSW50MTI4SGlnaDY0KGxocykgPCBVSW50MTI4SGlnaDY0KHJocykpOwor
fQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1w
bCByaHMpIHsgcmV0dXJuIHJocyA8IGxoczsgfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9
KFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7IHJldHVybiAhKHJocyA8IGxocyk7
IH0KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJ
bXBsIHJocykgeyByZXR1cm4gIShsaHMgPCByaHMpOyB9CisKKy8vIFVuYXJ5IG9wZXJhdG9ycy4K
KworY29uc3RleHByIGlubGluZSBVSW50MTI4SW1wbCBvcGVyYXRvcisoVUludDEyOEltcGwgdmFs
KSB7CisgIHJldHVybiB2YWw7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgSW50MTI4SW1wbCBvcGVy
YXRvcisoSW50MTI4SW1wbCB2YWwpIHsKKyAgcmV0dXJuIHZhbDsKK30KKworY29uc3RleHByIFVJ
bnQxMjhJbXBsIG9wZXJhdG9yLShVSW50MTI4SW1wbCB2YWwpIHsKKyAgcmV0dXJuIE1ha2VVSW50
MTI4KAorICAgICAgflVJbnQxMjhIaWdoNjQodmFsKSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KFVJbnQxMjhMb3c2NCh2YWwpID09IDApLAorICAgICAgflVJbnQxMjhMb3c2NCh2YWwpICsg
MSk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvciEoVUludDEyOEltcGwgdmFs
KSB7CisgIHJldHVybiAhVUludDEyOEhpZ2g2NCh2YWwpICYmICFVSW50MTI4TG93NjQodmFsKTsK
K30KKworLy8gTG9naWNhbCBvcGVyYXRvcnMuCisKK2NvbnN0ZXhwciBpbmxpbmUgVUludDEyOElt
cGwgb3BlcmF0b3J+KFVJbnQxMjhJbXBsIHZhbCkgeworICByZXR1cm4gTWFrZVVJbnQxMjgoflVJ
bnQxMjhIaWdoNjQodmFsKSwgflVJbnQxMjhMb3c2NCh2YWwpKTsKK30KKworY29uc3RleHByIGlu
bGluZSBVSW50MTI4SW1wbCBvcGVyYXRvcnwoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCBy
aHMpIHsKKyAgcmV0dXJuIE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQobGhzKSB8IFVJbnQxMjhI
aWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpIHwgVUlu
dDEyOExvdzY0KHJocykpOworfQorCitjb25zdGV4cHIgaW5saW5lIFVJbnQxMjhJbXBsIG9wZXJh
dG9yJihVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gTWFrZVVJ
bnQxMjgoVUludDEyOEhpZ2g2NChsaHMpICYgVUludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAg
ICAgICAgICAgICAgVUludDEyOExvdzY0KGxocykgJiBVSW50MTI4TG93NjQocmhzKSk7Cit9CisK
K2NvbnN0ZXhwciBpbmxpbmUgVUludDEyOEltcGwgb3BlcmF0b3JeKFVJbnQxMjhJbXBsIGxocywg
VUludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtlVUludDEyOChVSW50MTI4SGlnaDY0KGxo
cykgXiBVSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICAgICBVSW50MTI4TG93
NjQobGhzKSBeIFVJbnQxMjhMb3c2NChyaHMpKTsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBV
SW50MTI4SW1wbDo6b3BlcmF0b3J8PShVSW50MTI4SW1wbCBvdGhlcikgeworICAqdGhpcyA9ICp0
aGlzIHwgb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBV
SW50MTI4SW1wbDo6b3BlcmF0b3ImPShVSW50MTI4SW1wbCBvdGhlcikgeworICAqdGhpcyA9ICp0
aGlzICYgb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBV
SW50MTI4SW1wbDo6b3BlcmF0b3JePShVSW50MTI4SW1wbCBvdGhlcikgeworICAqdGhpcyA9ICp0
aGlzIF4gb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworLy8gQXJpdGhtZXRpYyBvcGVyYXRv
cnMuCisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbCBvcGVyYXRvcjw8KFVJbnQxMjhJbXBsIGxocywg
aW50IGFtb3VudCkgeworICAvLyB1aW50NjRfdCBzaGlmdHMgb2YgPj0gNjQgYXJlIHVuZGVmaW5l
ZCwgc28gd2Ugd2lsbCBuZWVkIHNvbWUKKyAgLy8gc3BlY2lhbC1jYXNpbmcuCisgIHJldHVybiBh
bW91bnQgPj0gNjQgPyBNYWtlVUludDEyOChVSW50MTI4TG93NjQobGhzKSA8PCAoYW1vdW50IC0g
NjQpLCAwKQorICAgICAgICAgOiBhbW91bnQgPT0gMCA/IGxocworICAgICAgICAgICAgICAgICAg
ICAgICA6IE1ha2VVSW50MTI4KChVSW50MTI4SGlnaDY0KGxocykgPDwgYW1vdW50KSB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSW50MTI4TG93NjQobGhzKSA+
PiAoNjQgLSBhbW91bnQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
SW50MTI4TG93NjQobGhzKSA8PCBhbW91bnQpOworfQorCitjb25zdGV4cHIgVUludDEyOEltcGwg
b3BlcmF0b3I+PihVSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAgLy8gdWludDY0X3Qg
c2hpZnRzIG9mID49IDY0IGFyZSB1bmRlZmluZWQsIHNvIHdlIHdpbGwgbmVlZCBzb21lCisgIC8v
IHNwZWNpYWwtY2FzaW5nLgorICByZXR1cm4gYW1vdW50ID49IDY0ID8gTWFrZVVJbnQxMjgoMCwg
VUludDEyOEhpZ2g2NChsaHMpID4+IChhbW91bnQgLSA2NCkpCisgICAgICAgICA6IGFtb3VudCA9
PSAwID8gbGhzCisgICAgICAgICAgICAgICAgICAgICAgIDogTWFrZVVJbnQxMjgoVUludDEyOEhp
Z2g2NChsaHMpID4+IGFtb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoVUludDEyOExvdzY0KGxocykgPj4gYW1vdW50KSB8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChVSW50MTI4SGlnaDY0KGxocykgPDwgKDY0IC0gYW1vdW50KSkp
OworfQorCituYW1lc3BhY2UgaW50MTI4X2ludGVybmFsIHsKK2NvbnN0ZXhwciBVSW50MTI4SW1w
bCBBZGRSZXN1bHQoVUludDEyOEltcGwgcmVzdWx0LCBVSW50MTI4SW1wbCBsaHMpIHsKKyAgLy8g
Y2hlY2sgZm9yIGNhcnJ5CisgIHJldHVybiAoVUludDEyOExvdzY0KHJlc3VsdCkgPCBVSW50MTI4
TG93NjQobGhzKSkKKyAgICAgICAgICAgICA/IE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQocmVz
dWx0KSArIDEsIFVJbnQxMjhMb3c2NChyZXN1bHQpKQorICAgICAgICAgICAgIDogcmVzdWx0Owor
fQorfSAgLy8gbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbAorCitjb25zdGV4cHIgVUludDEyOElt
cGwgb3BlcmF0b3IrKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIHJldHVy
biBpbnQxMjhfaW50ZXJuYWw6OkFkZFJlc3VsdCgKKyAgICAgIE1ha2VVSW50MTI4KFVJbnQxMjhI
aWdoNjQobGhzKSArIFVJbnQxMjhIaWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgIFVJbnQx
MjhMb3c2NChsaHMpICsgVUludDEyOExvdzY0KHJocykpLAorICAgICAgbGhzKTsKK30KKworbmFt
ZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7Citjb25zdGV4cHIgVUludDEyOEltcGwgU3Vic3RydWN0
UmVzdWx0KFVJbnQxMjhJbXBsIHJlc3VsdCwgVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCBy
aHMpIHsKKyAgLy8gY2hlY2sgZm9yIGNhcnJ5CisgIHJldHVybiAoVUludDEyOExvdzY0KGxocykg
PCBVSW50MTI4TG93NjQocmhzKSkKKyAgICAgICAgICAgICA/IE1ha2VVSW50MTI4KFVJbnQxMjhI
aWdoNjQocmVzdWx0KSAtIDEsIFVJbnQxMjhMb3c2NChyZXN1bHQpKQorICAgICAgICAgICAgIDog
cmVzdWx0OworfQorfSAgLy8gbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbAorCitjb25zdGV4cHIg
VUludDEyOEltcGwgb3BlcmF0b3ItKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7
CisgIHJldHVybiBpbnQxMjhfaW50ZXJuYWw6OlN1YnN0cnVjdFJlc3VsdCgKKyAgICAgIE1ha2VV
SW50MTI4KFVJbnQxMjhIaWdoNjQobGhzKSAtIFVJbnQxMjhIaWdoNjQocmhzKSwKKyAgICAgICAg
ICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpIC0gVUludDEyOExvdzY0KHJocykpLAorICAgICAg
bGhzLCByaHMpOworfQorCitpbmxpbmUgVUludDEyOEltcGwgb3BlcmF0b3IqKFVJbnQxMjhJbXBs
IGxocywgVUludDEyOEltcGwgcmhzKSB7CisjaWYgQ09NUElMRVIoTVNWQykgJiYgQ1BVKFg4Nl82
NCkKKyAgdWludDY0X3QgY2Fycnk7CisgIHVpbnQ2NF90IGxvdyA9IF91bXVsMTI4KFVJbnQxMjhM
b3c2NChsaHMpLCBVSW50MTI4TG93NjQocmhzKSwgJmNhcnJ5KTsKKyAgcmV0dXJuIE1ha2VVSW50
MTI4KFVJbnQxMjhMb3c2NChsaHMpICogVUludDEyOEhpZ2g2NChyaHMpICsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBVSW50MTI4SGlnaDY0KGxocykgKiBVSW50MTI4TG93NjQocmhzKSArIGNh
cnJ5LAorICAgICAgICAgICAgICAgICAgICAgbG93KTsKKyNlbHNlICAgLy8gQUJTTF9IQVZFX0lO
VFJJTlNJQzEyOAorICB1aW50NjRfdCBhMzIgPSBVSW50MTI4TG93NjQobGhzKSA+PiAzMjsKKyAg
dWludDY0X3QgYTAwID0gVUludDEyOExvdzY0KGxocykgJiAweGZmZmZmZmZmOworICB1aW50NjRf
dCBiMzIgPSBVSW50MTI4TG93NjQocmhzKSA+PiAzMjsKKyAgdWludDY0X3QgYjAwID0gVUludDEy
OExvdzY0KHJocykgJiAweGZmZmZmZmZmOworICBVSW50MTI4SW1wbCByZXN1bHQgPQorICAgICAg
TWFrZVVJbnQxMjgoVUludDEyOEhpZ2g2NChsaHMpICogVUludDEyOExvdzY0KHJocykgKworICAg
ICAgICAgICAgICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpICogVUludDEyOEhpZ2g2NChyaHMp
ICsgYTMyICogYjMyLAorICAgICAgICAgICAgICAgICAgYTAwICogYjAwKTsKKyAgcmVzdWx0ICs9
IFVJbnQxMjhJbXBsKGEzMiAqIGIwMCkgPDwgMzI7CisgIHJlc3VsdCArPSBVSW50MTI4SW1wbChh
MDAgKiBiMzIpIDw8IDMyOworICByZXR1cm4gcmVzdWx0OworI2VuZGlmCit9CisKKy8vIEluY3Jl
bWVudC9kZWNyZW1lbnQgb3BlcmF0b3JzLgorCitpbmxpbmUgVUludDEyOEltcGwgVUludDEyOElt
cGw6Om9wZXJhdG9yKysoaW50KSB7CisgIFVJbnQxMjhJbXBsIHRtcCgqdGhpcyk7CisgICp0aGlz
ICs9IDE7CisgIHJldHVybiB0bXA7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCBVSW50MTI4SW1w
bDo6b3BlcmF0b3ItLShpbnQpIHsKKyAgVUludDEyOEltcGwgdG1wKCp0aGlzKTsKKyAgKnRoaXMg
LT0gMTsKKyAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1w
bDo6b3BlcmF0b3IrKygpIHsKKyAgKnRoaXMgKz0gMTsKKyAgcmV0dXJuICp0aGlzOworfQorCitp
bmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvci0tKCkgeworICAqdGhpcyAt
PSAxOworICByZXR1cm4gKnRoaXM7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIE1ha2VJbnQx
MjgoaW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpIHsKKyAgcmV0dXJuIEludDEyOEltcGwoaGln
aCwgbG93KTsKK30KKworLy8gQXNzaWdubWVudCBmcm9tIGludGVnZXIgdHlwZXMuCitpbmxpbmUg
SW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KGludCB2KSB7CisgIHJldHVybiAqdGhp
cyA9IEludDEyOEltcGwodik7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpv
cGVyYXRvcj0odW5zaWduZWQgaW50IHYpIHsKKyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2
KTsKK30KKworaW5saW5lIEludDEyOEltcGwmIEludDEyOEltcGw6Om9wZXJhdG9yPShsb25nIHYp
IHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2
KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgSW50MTI4SW1w
bCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgdikgeworICByZXR1cm4gKnRo
aXMgPSBJbnQxMjhJbXBsKHYpOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkK
K2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcj0obG9uZyBsb25nIHYpIHsK
KyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUo
cnVudGltZS9pbnQpCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KHVu
c2lnbmVkIGxvbmcgbG9uZyB2KSB7CisgIHJldHVybiAqdGhpcyA9IEludDEyOEltcGwodik7Cit9
CisKKy8vIEFyaXRobWV0aWMgb3BlcmF0b3JzLgorY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3ItKEludDEyOEltcGwgdik7Citjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcisoSW50MTI4
SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9y
LShJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworSW50MTI4SW1wbCBvcGVyYXRvcioo
SW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsKK1dURl9FWFBPUlRfUFJJVkFURSBJbnQx
MjhJbXBsIG9wZXJhdG9yLyhJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworV1RGX0VY
UE9SVF9QUklWQVRFIEludDEyOEltcGwgb3BlcmF0b3IlKEludDEyOEltcGwgbGhzLCBJbnQxMjhJ
bXBsIHJocyk7Citjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcnwoSW50MTI4SW1wbCBsaHMs
IEludDEyOEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yJihJbnQxMjhJ
bXBsIGxocywgSW50MTI4SW1wbCByaHMpOworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3Je
KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocyk7Citjb25zdGV4cHIgSW50MTI4SW1wbCBv
cGVyYXRvcjw8KEludDEyOEltcGwgbGhzLCBpbnQgYW1vdW50KTsKK2NvbnN0ZXhwciBJbnQxMjhJ
bXBsIG9wZXJhdG9yPj4oSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpOworCitpbmxpbmUgSW50
MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3IrPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0
aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4
SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3ItPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlz
ID0gKnRoaXMgLSBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1w
bCYgSW50MTI4SW1wbDo6b3BlcmF0b3IqPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0g
KnRoaXMgKiBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYg
SW50MTI4SW1wbDo6b3BlcmF0b3IvPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRo
aXMgLyBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50
MTI4SW1wbDo6b3BlcmF0b3IlPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMg
JSBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4
SW1wbDo6b3BlcmF0b3J8PShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgfCBv
dGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1w
bDo6b3BlcmF0b3ImPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgJiBvdGhl
cjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6
b3BlcmF0b3JePShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgXiBvdGhlcjsK
KyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3Bl
cmF0b3I8PD0oaW50IGFtb3VudCkgeworICAqdGhpcyA9ICp0aGlzIDw8IGFtb3VudDsKKyAgcmV0
dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I+
Pj0oaW50IGFtb3VudCkgeworICAqdGhpcyA9ICp0aGlzID4+IGFtb3VudDsKKyAgcmV0dXJuICp0
aGlzOworfQorCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIGZvciBjb21wYXJpc29uIG9wZXJhdG9y
cy4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwg
cmhzKTsKKworbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7CisKKy8vIENhc3RzIGZyb20gdW5z
aWduZWQgdG8gc2lnbmVkIHdoaWxlIHByZXNlcnZpbmcgdGhlIHVuZGVybHlpbmcgYmluYXJ5Cisv
LyByZXByZXNlbnRhdGlvbi4KK2NvbnN0ZXhwciBpbnQ2NF90IEJpdENhc3RUb1NpZ25lZCh1aW50
NjRfdCB2KSB7CisgIC8vIENhc3RpbmcgYW4gdW5zaWduZWQgaW50ZWdlciB0byBhIHNpZ25lZCBp
bnRlZ2VyIG9mIHRoZSBzYW1lCisgIC8vIHdpZHRoIGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQg
YmVoYXZpb3IgaWYgdGhlIHNvdXJjZSB2YWx1ZSB3b3VsZCBub3QgZml0CisgIC8vIGluIHRoZSBk
ZXN0aW5hdGlvbiB0eXBlLiBXZSBzdGVwIGFyb3VuZCBpdCB3aXRoIGEgcm91bmR0cmlwIGJpdHdp
c2Ugbm90CisgIC8vIG9wZXJhdGlvbiB0byBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiByZW1haW5z
IGNvbnN0ZXhwci4gQ2xhbmcsIEdDQywgYW5kCisgIC8vIE1TVkMgb3B0aW1pemUgdGhpcyB0byBh
IG5vLW9wIG9uIHg4Ni02NC4KKyAgcmV0dXJuIHYgJiAodWludDY0X3R7MX0gPDwgNjMpID8gfnN0
YXRpY19jYXN0PGludDY0X3Q+KH52KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGludDEyOF9p
bnRlcm5hbAorCisvLyAjaW5jbHVkZSAiYWJzbC9udW1lcmljL2ludDEyOF9ub19pbnRyaW5zaWMu
aW5jIiAgLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCitjb25zdGV4cHIgdWludDY0X3QgSW50MTI4
TG93NjQoSW50MTI4SW1wbCB2KSB7IHJldHVybiB2LmxvXzsgfQorCitjb25zdGV4cHIgaW50NjRf
dCBJbnQxMjhIaWdoNjQoSW50MTI4SW1wbCB2KSB7IHJldHVybiB2LmhpXzsgfQorCisjaWYgQ1BV
KExJVFRMRV9FTkRJQU4pCisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGludDY0
X3QgaGlnaCwgdWludDY0X3QgbG93KSA6CisgICAgbG9fKGxvdyksIGhpXyhoaWdoKSB7fQorCitj
b25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChpbnQgdikKKyAgICA6IGxvX3tzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odil9LCBoaV97diA8IDAgPyB+aW50NjRfdHswfSA6IDB9IHt9Citjb25z
dGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9p
bnQpCisgICAgOiBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwgaGlfe3YgPCAwID8gfmlu
dDY0X3R7MH0gOiAwfSB7fQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwobG9uZyBs
b25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBsb197c3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHYpfSwgaGlfe3YgPCAwID8gfmludDY0X3R7MH0gOiAwfSB7fQorCitjb25zdGV4cHIg
SW50MTI4SW1wbDo6SW50MTI4SW1wbCh1bnNpZ25lZCBpbnQgdikgOiBsb197dn0sIGhpX3swfSB7
fQorLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgSW50MTI4SW1wbDo6
SW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpIDogbG9fe3Z9LCBoaV97MH0ge30KKy8vIE5PTElO
VE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwo
dW5zaWduZWQgbG9uZyBsb25nIHYpIDogbG9fe3Z9LCBoaV97MH0ge30KKworY29uc3RleHByIElu
dDEyOEltcGw6OkludDEyOEltcGwoVUludDEyOEltcGwgdikKKyAgICA6IGxvX3tVSW50MTI4TG93
NjQodil9LCBoaV97c3RhdGljX2Nhc3Q8aW50NjRfdD4oVUludDEyOEhpZ2g2NCh2KSl9IHt9CisK
KyNlbGlmIENQVShCSUdfRU5ESUFOKQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1w
bChpbnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykgOgorICAgIGhpX3toaWdofSwgbG9fe2xvd30g
e30KKworY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwoaW50IHYpCisgICAgOiBoaV97
diA8IDAgPyB+aW50NjRfdHswfSA6IDB9LCBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSB7
fQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwobG9uZyB2KSAgLy8gTk9MSU5UKHJ1
bnRpbWUvaW50KQorICAgIDogaGlfe3YgPCAwID8gfmludDY0X3R7MH0gOiAwfSwgbG9fe3N0YXRp
Y19jYXN0PHVpbnQ2NF90Pih2KX0ge30KK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KGxvbmcgbG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIDogaGlfe3YgPCAwID8g
fmludDY0X3R7MH0gOiAwfSwgbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0ge30KKworY29u
c3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwodW5zaWduZWQgaW50IHYpIDogaGlfezB9LCBs
b197dn0ge30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIEludDEy
OEltcGw6OkludDEyOEltcGwodW5zaWduZWQgbG9uZyB2KSA6IGhpX3swfSwgbG9fe3Z9IHt9Cisv
LyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQx
MjhJbXBsKHVuc2lnbmVkIGxvbmcgbG9uZyB2KSA6IGhpX3swfSwgbG9fe3Z9IHt9CisKK2NvbnN0
ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKFVJbnQxMjhJbXBsIHYpCisgICAgOiBoaV97c3Rh
dGljX2Nhc3Q8aW50NjRfdD4oVUludDEyOEhpZ2g2NCh2KSl9LCBsb197VUludDEyOExvdzY0KHYp
fSB7fQorCisjZWxzZSAgLy8gYnl0ZSBvcmRlcgorI2Vycm9yICJVbnN1cHBvcnRlZCBieXRlIG9y
ZGVyOiBtdXN0IGJlIGxpdHRsZS1lbmRpYW4gb3IgYmlnLWVuZGlhbi4iCisjZW5kaWYgIC8vIGJ5
dGUgb3JkZXIKKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBsb18gfHwgaGlfOyB9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBj
aGFyKCkgY29uc3QgeworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PGNoYXI+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsKK30KKwor
Y29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHNpZ25lZCBjaGFyKCkgY29uc3QgeworICAv
LyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25l
ZCBjaGFyPihzdGF0aWNfY2FzdDxsb25nIGxvbmc+KCp0aGlzKSk7Cit9CisKK2NvbnN0ZXhwciBJ
bnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBjaGFyKCkgY29uc3QgeworICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obG9fKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6
Om9wZXJhdG9yIGNoYXIxNl90KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcjE2
X3Q+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMzJfdCgp
IGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIzMl90Pihsb18pOworfQorCitjb25z
dGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UKCkgY29uc3Qg
eworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0
PEFCU0xfSU5URVJOQUxfV0NIQVJfVD4oc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigqdGhpcykpOwor
fQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3Igc2hvcnQoKSBjb25zdCB7ICAvLyBO
T0xJTlQocnVudGltZS9pbnQpCisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsK
K30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIHNob3J0KCkgY29u
c3QgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQ+KGxvXyk7ICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9CisKK2Nv
bnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBpbnQoKSBjb25zdCB7CisgIC8vIE5PTElOVE5F
WFRMSU5FKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KCp0aGlzKSk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRv
ciB1bnNpZ25lZCBpbnQoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBp
bnQ+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nKCkgY29u
c3QgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBOT0xJTlRORVhUTElORShydW50aW1l
L2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4o
KnRoaXMpKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGxv
bmcoKSBjb25zdCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihsb18pOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQor
fQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3QgeyAg
Ly8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBXZSBkb24ndCBib3RoZXIgY2hlY2tpbmcgdGhl
IHZhbHVlIG9mIGhpXy4gSWYgKnRoaXMgPCAwLCBsb18ncyBoaWdoIGJpdAorICAvLyBtdXN0IGJl
IHNldCBpbiBvcmRlciBmb3IgdGhlIHZhbHVlIHRvIGZpdCBpbnRvIGEgbG9uZyBsb25nLiBDb252
ZXJzZWx5LCBpZgorICAvLyBsb18ncyBoaWdoIGJpdCBpcyBzZXQsICp0aGlzIG11c3QgYmUgPCAw
IGZvciB0aGUgdmFsdWUgdG8gZml0LgorICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpCaXRDYXN0
VG9TaWduZWQobG9fKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2ln
bmVkIGxvbmcgbG9uZygpIGNvbnN0IHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obG9fKTsgICAgICAgICAgIC8vIE5PTElO
VChydW50aW1lL2ludCkKK30KKworaW5saW5lIEludDEyOEltcGw6Om9wZXJhdG9yIGZsb2F0KCkg
Y29uc3QgeworICAvLyBXZSBtdXN0IGNvbnZlcnQgdGhlIGFic29sdXRlIHZhbHVlIGFuZCB0aGVu
IG5lZ2F0ZSBhcyBuZWVkZWQsIGJlY2F1c2UKKyAgLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXMgYXJl
IHR5cGljYWxseSBzaWduLW1hZ25pdHVkZS4gT3RoZXJ3aXNlLCB0aGUKKyAgLy8gZGlmZmVyZW5j
ZSBiZXR3ZWVuIHRoZSBoaWdoIGFuZCBsb3cgNjQgYml0cyB3aGVuIGludGVycHJldGVkIGFzIHR3
bydzCisgIC8vIGNvbXBsZW1lbnQgb3ZlcndoZWxtcyB0aGUgcHJlY2lzaW9uIG9mIHRoZSBtYW50
aXNzYS4KKyAgLy8KKyAgLy8gQWxzbyBjaGVjayB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbmVnYXRl
IEludDEyOE1pbigpCisgIHJldHVybiBoaV8gPCAwICYmICp0aGlzICE9IEludDEyOE1pbigpCisg
ICAgICAgICAgICAgPyAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0qdGhpcykKKyAgICAgICAgICAgICA6
IHN0YXRpY19jYXN0PGZsb2F0Pihsb18pICsKKyAgICAgICAgICAgICAgICAgICBzdGQ6OmxkZXhw
KHN0YXRpY19jYXN0PGZsb2F0PihoaV8pLCA2NCk7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsOjpv
cGVyYXRvciBkb3VibGUoKSBjb25zdCB7CisgIC8vIFNlZSBjb21tZW50IGluIEludDEyOEltcGw6
Om9wZXJhdG9yIGZsb2F0KCkgYWJvdmUuCisgIHJldHVybiBoaV8gPCAwICYmICp0aGlzICE9IElu
dDEyOE1pbigpCisgICAgICAgICAgICAgPyAtc3RhdGljX2Nhc3Q8ZG91YmxlPigtKnRoaXMpCisg
ICAgICAgICAgICAgOiBzdGF0aWNfY2FzdDxkb3VibGU+KGxvXykgKworICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihoaV8pLCA2NCk7Cit9CisKK2lubGlu
ZSBJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJsZSgpIGNvbnN0IHsKKyAgLy8gU2VlIGNv
bW1lbnQgaW4gSW50MTI4SW1wbDo6b3BlcmF0b3IgZmxvYXQoKSBhYm92ZS4KKyAgcmV0dXJuIGhp
XyA8IDAgJiYgKnRoaXMgIT0gSW50MTI4TWluKCkKKyAgICAgICAgICAgICA/IC1zdGF0aWNfY2Fz
dDxsb25nIGRvdWJsZT4oLSp0aGlzKQorICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8bG9uZyBk
b3VibGU+KGxvXykgKworICAgICAgICAgICAgICAgICAgIHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8
bG9uZyBkb3VibGU+KGhpXyksIDY0KTsKK30KKworLy8gQ29tcGFyaXNvbiBvcGVyYXRvcnMuCisK
K2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhz
KSB7CisgIHJldHVybiAoSW50MTI4TG93NjQobGhzKSA9PSBJbnQxMjhMb3c2NChyaHMpICYmCisg
ICAgICAgICAgSW50MTI4SGlnaDY0KGxocykgPT0gSW50MTI4SGlnaDY0KHJocykpOworfQorCitj
b25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eyByZXR1cm4gIShsaHMgPT0gcmhzKTsgfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoSW50
MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiAoSW50MTI4SGlnaDY0KGxo
cykgPT0gSW50MTI4SGlnaDY0KHJocykpCisgICAgICAgICAgICAgPyAoSW50MTI4TG93NjQobGhz
KSA8IEludDEyOExvdzY0KHJocykpCisgICAgICAgICAgICAgOiAoSW50MTI4SGlnaDY0KGxocykg
PCBJbnQxMjhIaWdoNjQocmhzKSk7Cit9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPihJbnQx
MjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIChJbnQxMjhIaWdoNjQobGhz
KSA9PSBJbnQxMjhIaWdoNjQocmhzKSkKKyAgICAgICAgICAgICA/IChJbnQxMjhMb3c2NChsaHMp
ID4gSW50MTI4TG93NjQocmhzKSkKKyAgICAgICAgICAgICA6IChJbnQxMjhIaWdoNjQobGhzKSA+
IEludDEyOEhpZ2g2NChyaHMpKTsKK30KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShJbnQx
MjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsgcmV0dXJuICEobGhzID4gcmhzKTsgfQorCitj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eyByZXR1cm4gIShsaHMgPCByaHMpOyB9CisKKy8vIFVuYXJ5IG9wZXJhdG9ycy4KKworY29uc3Rl
eHByIEludDEyOEltcGwgb3BlcmF0b3ItKEludDEyOEltcGwgdikgeworICByZXR1cm4gTWFrZUlu
dDEyOCh+SW50MTI4SGlnaDY0KHYpICsgKEludDEyOExvdzY0KHYpID09IDApLAorICAgICAgICAg
ICAgICAgICAgICB+SW50MTI4TG93NjQodikgKyAxKTsKK30KKworY29uc3RleHByIGJvb2wgb3Bl
cmF0b3IhKEludDEyOEltcGwgdikgeworICByZXR1cm4gIUludDEyOExvdzY0KHYpICYmICFJbnQx
MjhIaWdoNjQodik7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yfihJbnQxMjhJ
bXBsIHZhbCkgeworICByZXR1cm4gTWFrZUludDEyOCh+SW50MTI4SGlnaDY0KHZhbCksIH5JbnQx
MjhMb3c2NCh2YWwpKTsKK30KKworLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMuCisKK25hbWVzcGFj
ZSBpbnQxMjhfaW50ZXJuYWwgeworY29uc3RleHByIEludDEyOEltcGwgU2lnbmVkQWRkUmVzdWx0
KEludDEyOEltcGwgcmVzdWx0LCBJbnQxMjhJbXBsIGxocykgeworICAvLyBjaGVjayBmb3IgY2Fy
cnkKKyAgcmV0dXJuIChJbnQxMjhMb3c2NChyZXN1bHQpIDwgSW50MTI4TG93NjQobGhzKSkKKyAg
ICAgICAgICAgICA/IE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KHJlc3VsdCkgKyAxLCBJbnQxMjhM
b3c2NChyZXN1bHQpKQorICAgICAgICAgICAgIDogcmVzdWx0OworfQorfSAgLy8gbmFtZXNwYWNl
IGludDEyOF9pbnRlcm5hbAorY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKEludDEyOElt
cGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpTaWdu
ZWRBZGRSZXN1bHQoCisgICAgICBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChsaHMpICsgSW50MTI4
SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgIEludDEyOExvdzY0KGxocykgKyBJbnQxMjhM
b3c2NChyaHMpKSwKKyAgICAgIGxocyk7Cit9CisKK25hbWVzcGFjZSBpbnQxMjhfaW50ZXJuYWwg
eworY29uc3RleHByIEludDEyOEltcGwgU2lnbmVkU3Vic3RydWN0UmVzdWx0KEludDEyOEltcGwg
cmVzdWx0LCBJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgLy8gY2hlY2sgZm9y
IGNhcnJ5CisgIHJldHVybiAoSW50MTI4TG93NjQobGhzKSA8IEludDEyOExvdzY0KHJocykpCisg
ICAgICAgICAgICAgPyBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChyZXN1bHQpIC0gMSwgSW50MTI4
TG93NjQocmVzdWx0KSkKKyAgICAgICAgICAgICA6IHJlc3VsdDsKK30KK30gIC8vIG5hbWVzcGFj
ZSBpbnQxMjhfaW50ZXJuYWwKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yLShJbnQxMjhJ
bXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIGludDEyOF9pbnRlcm5hbDo6U2ln
bmVkU3Vic3RydWN0UmVzdWx0KAorICAgICAgTWFrZUludDEyOChJbnQxMjhIaWdoNjQobGhzKSAt
IEludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAgICAgICAgICBJbnQxMjhMb3c2NChsaHMpIC0g
SW50MTI4TG93NjQocmhzKSksCisgICAgICBsaHMsIHJocyk7Cit9CisKK2lubGluZSBJbnQxMjhJ
bXBsIG9wZXJhdG9yKihJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJu
IE1ha2VJbnQxMjgoCisgICAgICBpbnQxMjhfaW50ZXJuYWw6OkJpdENhc3RUb1NpZ25lZChVSW50
MTI4SGlnaDY0KFVJbnQxMjhJbXBsKGxocykgKiByaHMpKSwKKyAgICAgIFVJbnQxMjhMb3c2NChV
SW50MTI4SW1wbChsaHMpICogcmhzKSk7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsIEludDEyOElt
cGw6Om9wZXJhdG9yKysoaW50KSB7CisgIEludDEyOEltcGwgdG1wKCp0aGlzKTsKKyAgKnRoaXMg
Kz0gMTsKKyAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIEludDEyOEltcGwgSW50MTI4SW1wbDo6
b3BlcmF0b3ItLShpbnQpIHsKKyAgSW50MTI4SW1wbCB0bXAoKnRoaXMpOworICAqdGhpcyAtPSAx
OworICByZXR1cm4gdG1wOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3Bl
cmF0b3IrKygpIHsKKyAgKnRoaXMgKz0gMTsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUg
SW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3ItLSgpIHsKKyAgKnRoaXMgLT0gMTsKKyAg
cmV0dXJuICp0aGlzOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcnwoSW50MTI4
SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtlSW50MTI4KEludDEyOEhp
Z2g2NChsaHMpIHwgSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICAgIEludDEy
OExvdzY0KGxocykgfCBJbnQxMjhMb3c2NChyaHMpKTsKK30KKworY29uc3RleHByIEludDEyOElt
cGwgb3BlcmF0b3ImKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4g
TWFrZUludDEyOChJbnQxMjhIaWdoNjQobGhzKSAmIEludDEyOEhpZ2g2NChyaHMpLAorICAgICAg
ICAgICAgICAgICAgICBJbnQxMjhMb3c2NChsaHMpICYgSW50MTI4TG93NjQocmhzKSk7Cit9CisK
K2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yXihJbnQxMjhJbXBsIGxocywgSW50MTI4SW1w
bCByaHMpIHsKKyAgcmV0dXJuIE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KGxocykgXiBJbnQxMjhI
aWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgICAgSW50MTI4TG93NjQobGhzKSBeIEludDEy
OExvdzY0KHJocykpOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcjw8KEludDEy
OEltcGwgbGhzLCBpbnQgYW1vdW50KSB7CisgIC8vIGludDY0X3Qgc2hpZnRzIG9mID49IDY0IGFy
ZSB1bmRlZmluZWQsIHNvIHdlIG5lZWQgc29tZSBzcGVjaWFsLWNhc2luZy4KKyAgcmV0dXJuIGFt
b3VudCA+PSA2NAorICAgICAgICAgICAgID8gTWFrZUludDEyOCgKKyAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ2NF90PihJbnQxMjhMb3c2NChsaHMpIDw8IChhbW91bnQgLSA2NCkp
LCAwKQorICAgICAgICAgOiBhbW91bnQgPT0gMAorICAgICAgICAgICAgID8gbGhzCisgICAgICAg
ICAgICAgOiBNYWtlSW50MTI4KAorICAgICAgICAgICAgICAgICAgIChJbnQxMjhIaWdoNjQobGhz
KSA8PCBhbW91bnQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50NjRf
dD4oSW50MTI4TG93NjQobGhzKSA+PiAoNjQgLSBhbW91bnQpKSwKKyAgICAgICAgICAgICAgICAg
ICBJbnQxMjhMb3c2NChsaHMpIDw8IGFtb3VudCk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBs
IG9wZXJhdG9yPj4oSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAgLy8gaW50NjRfdCBz
aGlmdHMgb2YgPj0gNjQgYXJlIHVuZGVmaW5lZCwgc28gd2UgbmVlZCBzb21lIHNwZWNpYWwtY2Fz
aW5nLgorICAvLyBUaGUgKEludDEyOEhpZ2g2NChsaHMpID4+IDMyKSA+PiAzMiAidHJpY2siIGNh
dXNlcyB0aGUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQKKyAgLy8gaW50NjQgdG8gYmUgaW5pdGl0aWFs
aXplZCB3aXRoIGFsbCB6ZXJvcyBvciBhbGwgb25lcyBjb3JyZWN0bHkuIEl0IHRha2VzCisgIC8v
IGludG8gYWNjb3VudCB3aGV0aGVyIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUgb3IgcG9zaXRpdmUs
IGFuZCB3aGV0aGVyIHRoZQorICAvLyBjdXJyZW50IGFyY2hpdGVjdHVyZSBkb2VzIGFyaXRobWV0
aWMgb3IgbG9naWNhbCByaWdodCBzaGlmdHMgZm9yIG5lZ2F0aXZlCisgIC8vIG51bWJlcnMuCisg
IHJldHVybiBhbW91bnQgPj0gNjQKKyAgICAgICAgICAgICA/IE1ha2VJbnQxMjgoCisgICAgICAg
ICAgICAgICAgICAgKEludDEyOEhpZ2g2NChsaHMpID4+IDMyKSA+PiAzMiwKKyAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4SGlnaDY0KGxocykgPj4gKGFtb3Vu
dCAtIDY0KSkpCisgICAgICAgICA6IGFtb3VudCA9PSAwCisgICAgICAgICAgICAgPyBsaHMKKyAg
ICAgICAgICAgICA6IE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KGxocykgPj4gYW1vdW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAoSW50MTI4TG93NjQobGhzKSA+PiBhbW91bnQpIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4
SGlnaDY0KGxocykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKDY0IC0gYW1v
dW50KSkpOworfQorCiAjaWYgSEFWRShJTlQxMjhfVCkKIHVzaW5nIFVJbnQxMjggPSBfX3VpbnQx
MjhfdDsKIHVzaW5nIEludDEyOCA9IF9faW50MTI4X3Q7CiAjZWxzZQotdXNpbmcgVUludDEyOCA9
IEludDEyOEltcGw8ZmFsc2U+OwotdXNpbmcgSW50MTI4ID0gSW50MTI4SW1wbDx0cnVlPjsKK3Vz
aW5nIFVJbnQxMjggPSBVSW50MTI4SW1wbDsKK3VzaW5nIEludDEyOCA9IEludDEyOEltcGw7CiAj
ZW5kaWYKIAotdGVtcGxhdGUgPGludCBCSVRTPiBzdHJ1Y3QgSG9zdFVuc2lnbmVkSW50VHlwZUhl
bHBlciB7Ci0gICAgdXNpbmcgdHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDwoQklUUyA8PSA4KSwg
c3RkOjp1aW50OF90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gMTYpLCBz
dGQ6OnVpbnQxNl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gMzIpLCBz
dGQ6OnVpbnQzMl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gNjQpLCBz
dGQ6OnVpbnQ2NF90LCBVSW50MTI4Pj4+PjsKLX07Ci10ZW1wbGF0ZSA8aW50IEJJVFM+IHN0cnVj
dCBIb3N0U2lnbmVkSW50VHlwZUhlbHBlciB7Ci0gICAgdXNpbmcgdHlwZSA9IHN0ZDo6Y29uZGl0
aW9uYWxfdDwoQklUUyA8PSA4KSwgc3RkOjppbnQ4X3QsCi0gICAgICAgIHN0ZDo6Y29uZGl0aW9u
YWxfdDwoQklUUyA8PSAxNiksIHN0ZDo6aW50MTZfdCwKLSAgICAgICAgc3RkOjpjb25kaXRpb25h
bF90PChCSVRTIDw9IDMyKSwgc3RkOjppbnQzMl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFs
X3Q8KEJJVFMgPD0gNjQpLCBzdGQ6OmludDY0X3QsIEludDEyOD4+Pj47Ci19OwotdGVtcGxhdGUg
PGludCBCSVRTPgotdXNpbmcgSG9zdFVuc2lnbmVkSW50VHlwZSA9IHR5cGVuYW1lIEhvc3RVbnNp
Z25lZEludFR5cGVIZWxwZXI8QklUUz46OnR5cGU7Ci10ZW1wbGF0ZSA8aW50IEJJVFM+Ci11c2lu
ZyBIb3N0U2lnbmVkSW50VHlwZSA9IHR5cGVuYW1lIEhvc3RTaWduZWRJbnRUeXBlSGVscGVyPEJJ
VFM+Ojp0eXBlOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpJbnQxMjg7Ci11
c2luZyBXVEY6OlVJbnQxMjg7Cit9ICAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggY2NkOTE0Y2IzZDRlZGFjYThkZjUy
ZGM2NGY0Y2IyNjgxYzM0MzZkOC4uMzg4ZTBmYTBhMGU0MDhlOGE1ZmE2OGE1NmY1NWI5MTVlODVh
NjMyMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDIxLTEwLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW1dURl0gUmVwbGFjZSBjdXJyZW50IExMVk0gZmxhbmcncyBJbnQx
Mjggd2l0aCBhYnNlaWwtY3BwJ3MgSW50MTI4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIxMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ludDEyOC5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUWVBFRF9URVNUKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdFVuYXJ5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RCaW5hcnkpOiBEZWxldGVkLgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VG9OYXRpdmUpOiBEZWxldGVkLgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6RnJvbU5hdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0
VnNOYXRpdmUpOiBEZWxldGVkLgorCiAyMDIxLTEwLTIxICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRk
YWRAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkdMIGJvdCBzaG91bGQgcnVuIHRlc3RzIHdpdGgg
R1BVIFByb2Nlc3MgZW5hYmxlZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSW50MTI4LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ludDEyOC5j
cHAKaW5kZXggNzc1YmY3MTE5NDBkZDQyMmZmNDcyMWI0Y2RiYzVlN2ZhNzYzZjQyYy4uM2UyZTNj
N2Q4NTgxNTcwOTJiMmU1ODI2Zjg4MDg5ODRiYjU2MTBmZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvSW50MTI4LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9JbnQxMjguY3BwCkBAIC0xLDE0NSArMSwxMTk1IEBACi0vLyBUYWtlbiBmcm9t
IExMVk0gUHJvamVjdCwgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAgd2l0aCBMTFZNIEV4
Y2VwdGlvbnMuCi0vLyBTZWUgU291cmNlL1dURi9MSUNFTlNFLUxMVk0udHh0IGZvciBsaWNlbnNl
IGluZm9ybWF0aW9uLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgV0lU
SCBMTFZNLWV4Y2VwdGlvbgotCi0vLyBCYXNlZCBvbjoKLS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9s
bHZtL2xsdm0tcHJvamVjdC9ibG9iL2Q0ODBmOTY4L2ZsYW5nL3VuaXR0ZXN0cy9FdmFsdWF0ZS91
aW50MTI4LmNwcAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIEFic2VpbCBBdXRob3JzLgorLy8KKy8v
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisvLworLy8gICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlIDx3dGYvSW50MTI4Lmg+CiAKLSNpbmNsdWRlIDxj
aW50dHlwZXM+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNs
dWRlIDxyYW5kb20+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4K
KyNpbmNsdWRlIDx2ZWN0b3I+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAotdXNpbmcg
Tm9uTmF0aXZlSW50MTI4ID0gV1RGOjpJbnQxMjhJbXBsPHRydWU+OwotdXNpbmcgTm9uTmF0aXZl
VUludDEyOCA9IFdURjo6SW50MTI4SW1wbDxmYWxzZT47Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFdURl9VSW50MTI4SW50ZWdlclRyYWl0c1Rlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpU
ZXN0IHsKK307Cit0eXBlZGVmIDo6dGVzdGluZzo6VHlwZXM8Ym9vbCwgY2hhciwgc2lnbmVkIGNo
YXIsIHVuc2lnbmVkIGNoYXIsIGNoYXIxNl90LAorICAgIGNoYXIzMl90LCB3Y2hhcl90LAorICAg
IHNob3J0LCAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgdW5zaWduZWQgc2hvcnQsIC8vIE5P
TElOVChydW50aW1lL2ludCkKKyAgICBpbnQsIHVuc2lnbmVkIGludCwKKyAgICBsb25nLCAvLyBO
T0xJTlQocnVudGltZS9pbnQpCisgICAgdW5zaWduZWQgbG9uZywgLy8gTk9MSU5UKHJ1bnRpbWUv
aW50KQorICAgIGxvbmcgbG9uZywgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIHVuc2lnbmVk
IGxvbmcgbG9uZz4gLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIEludGVnZXJUeXBlczsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBXVEZfVUludDEyOEZsb2F0VHJhaXRzVGVzdCA6
IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworfTsKK3R5cGVkZWYgOjp0ZXN0aW5nOjpUeXBlczxm
bG9hdCwgZG91YmxlLCBsb25nIGRvdWJsZT4gRmxvYXRpbmdQb2ludFR5cGVzOworCitUWVBFRF9U
RVNUX1NVSVRFKFdURl9VSW50MTI4SW50ZWdlclRyYWl0c1Rlc3QsIEludGVnZXJUeXBlcyk7CisK
K1RZUEVEX1RFU1QoV1RGX1VJbnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCwgQ29uc3RydWN0QXNzaWdu
VGVzdCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxXVEY6OlVJ
bnQxMjhJbXBsLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6VUludDEyOEltcGwg
bXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gVHlwZVBhcmFtIik7CisgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Fzc2lnbmFibGU8V1RGOjpVSW50MTI4SW1wbCYsIFR5cGVQYXJhbT46OnZhbHVl
LAorICAgICAgICAiV1RGOjpVSW50MTI4SW1wbCBtdXN0IGJlIGFzc2lnbmFibGUgZnJvbSBUeXBl
UGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBhcmFt
JiwgV1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAiVHlwZVBhcmFtIG11c3Qgbm90
IGJlIGFzc2lnbmFibGUgZnJvbSBXVEY6OlVJbnQxMjhJbXBsIik7Cit9CisKK1RZUEVEX1RFU1Rf
U1VJVEUoV1RGX1VJbnQxMjhGbG9hdFRyYWl0c1Rlc3QsIEZsb2F0aW5nUG9pbnRUeXBlcyk7CisK
K1RZUEVEX1RFU1QoV1RGX1VJbnQxMjhGbG9hdFRyYWl0c1Rlc3QsIENvbnN0cnVjdEFzc2lnblRl
c3QpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8V1RGOjpVSW50
MTI4SW1wbCwgVHlwZVBhcmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6OlVJbnQxMjhJbXBsIG11
c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3NlcnQo
IXN0ZDo6aXNfYXNzaWduYWJsZTxXVEY6OlVJbnQxMjhJbXBsJiwgVHlwZVBhcmFtPjo6dmFsdWUs
CisgICAgICAgICJXVEY6OlVJbnQxMjhJbXBsIG11c3Qgbm90IGJlIGFzc2lnbmFibGUgZnJvbSBU
eXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBh
cmFtJiwgV1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAiVHlwZVBhcmFtIG11c3Qg
bm90IGJlIGFzc2lnbmFibGUgZnJvbSBXVEY6OlVJbnQxMjhJbXBsIik7Cit9CisKK1RFU1QoV1RG
X1VJbnQxMjgsIFRyaXZpYWxUcmFpdHNUZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1
ZSwKKyAgICAgICAgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29w
eV9jb25zdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1ZSwKKyAgICAgICAgIiIpOwor
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlPFdURjo6
VUludDEyOEltcGw+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1ZSwgIiIpOworfQorCitU
RVNUKFdURl9VSW50MTI4LCBBbGxUZXN0cykKK3sKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHplcm8g
PSAwOworICAgIFdURjo6VUludDEyOEltcGwgb25lID0gMTsKKyAgICBXVEY6OlVJbnQxMjhJbXBs
IG9uZV8yYXJnID0gV1RGOjpNYWtlVUludDEyOCgwLCAxKTsKKyAgICBXVEY6OlVJbnQxMjhJbXBs
IHR3byA9IDI7CisgICAgV1RGOjpVSW50MTI4SW1wbCB0aHJlZSA9IDM7CisgICAgV1RGOjpVSW50
MTI4SW1wbCBiaWcgPSBXVEY6Ok1ha2VVSW50MTI4KDIwMDAsIDIpOworICAgIFdURjo6VUludDEy
OEltcGwgYmlnX21pbnVzX29uZSA9IFdURjo6TWFrZVVJbnQxMjgoMjAwMCwgMSk7CisgICAgV1RG
OjpVSW50MTI4SW1wbCBiaWdnZXIgPSBXVEY6Ok1ha2VVSW50MTI4KDIwMDEsIDEpOworICAgIFdU
Rjo6VUludDEyOEltcGwgYmlnZ2VzdCA9IFdURjo6VUludDEyOE1heCgpOworICAgIFdURjo6VUlu
dDEyOEltcGwgaGlnaF9sb3cgPSBXVEY6Ok1ha2VVSW50MTI4KDEsIDApOworICAgIFdURjo6VUlu
dDEyOEltcGwgbG93X2hpZ2ggPSBXVEY6Ok1ha2VVSW50MTI4KDAsIHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDY0X3Q+OjptYXgoKSk7CisgICAgRVhQRUNUX0xUKG9uZSwgdHdvKTsKKyAgICBFWFBF
Q1RfR1QodHdvLCBvbmUpOworICAgIEVYUEVDVF9MVChvbmUsIGJpZyk7CisgICAgRVhQRUNUX0xU
KG9uZSwgYmlnKTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmVfMmFyZyk7CisgICAgRVhQRUNUX05F
KG9uZSwgdHdvKTsKKyAgICBFWFBFQ1RfR1QoYmlnLCBvbmUpOworICAgIEVYUEVDVF9HRShiaWcs
IHR3byk7CisgICAgRVhQRUNUX0dFKGJpZywgYmlnX21pbnVzX29uZSk7CisgICAgRVhQRUNUX0dU
KGJpZywgYmlnX21pbnVzX29uZSk7CisgICAgRVhQRUNUX0xUKGJpZ19taW51c19vbmUsIGJpZyk7
CisgICAgRVhQRUNUX0xFKGJpZ19taW51c19vbmUsIGJpZyk7CisgICAgRVhQRUNUX05FKGJpZ19t
aW51c19vbmUsIGJpZyk7CisgICAgRVhQRUNUX0xUKGJpZywgYmlnZ2VzdCk7CisgICAgRVhQRUNU
X0xFKGJpZywgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0dUKGJpZ2dlc3QsIGJpZyk7CisgICAgRVhQ
RUNUX0dFKGJpZ2dlc3QsIGJpZyk7CisgICAgRVhQRUNUX0VRKGJpZywgfn5iaWcpOworICAgIEVY
UEVDVF9FUShvbmUsIG9uZSB8IG9uZSk7CisgICAgRVhQRUNUX0VRKGJpZywgYmlnIHwgYmlnKTsK
KyAgICBFWFBFQ1RfRVEob25lLCBvbmUgfCB6ZXJvKTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmUg
JiBvbmUpOworICAgIEVYUEVDVF9FUShiaWcsIGJpZyAmIGJpZyk7CisgICAgRVhQRUNUX0VRKHpl
cm8sIG9uZSAmIHplcm8pOworICAgIEVYUEVDVF9FUSh6ZXJvLCBiaWcgJiB+YmlnKTsKKyAgICBF
WFBFQ1RfRVEoemVybywgb25lIF4gb25lKTsKKyAgICBFWFBFQ1RfRVEoemVybywgYmlnIF4gYmln
KTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmUgXiB6ZXJvKTsKKworICAgIC8vIFNoaWZ0IG9wZXJh
dG9ycy4KKyAgICBFWFBFQ1RfRVEoYmlnLCBiaWcgPDwgMCk7CisgICAgRVhQRUNUX0VRKGJpZywg
YmlnID4+IDApOworICAgIEVYUEVDVF9HVChiaWcgPDwgMSwgYmlnKTsKKyAgICBFWFBFQ1RfTFQo
YmlnID4+IDEsIGJpZyk7CisgICAgRVhQRUNUX0VRKGJpZywgKGJpZyA8PCAxMCkgPj4gMTApOwor
ICAgIEVYUEVDVF9FUShiaWcsIChiaWcgPj4gMSkgPDwgMSk7CisgICAgRVhQRUNUX0VRKG9uZSwg
KG9uZSA8PCA4MCkgPj4gODApOworICAgIEVYUEVDVF9FUSh6ZXJvLCAob25lID4+IDgwKSA8PCA4
MCk7CisKKyAgICAvLyBTaGlmdCBhc3NpZ25tZW50cy4KKyAgICBXVEY6OlVJbnQxMjhJbXBsIGJp
Z19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPDwgMCwgYmlnX2NvcHkgPDw9IDApOwor
ICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gMCwgYmlnX2NvcHkgPj49
IDApOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPDwgMSwgYmlnX2Nv
cHkgPDw9IDEpOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gMSwg
YmlnX2NvcHkgPj49IDEpOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcg
PDwgMTAsIGJpZ19jb3B5IDw8PSAxMCk7CisgICAgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNU
X0VRKGJpZyA+PiAxMCwgYmlnX2NvcHkgPj49IDEwKTsKKyAgICBiaWdfY29weSA9IGJpZzsKKyAg
ICBFWFBFQ1RfRVEoYmlnIDw8IDY0LCBiaWdfY29weSA8PD0gNjQpOworICAgIGJpZ19jb3B5ID0g
YmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gNjQsIGJpZ19jb3B5ID4+PSA2NCk7CisgICAgYmln
X2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA8PCA3MywgYmlnX2NvcHkgPDw9IDczKTsK
KyAgICBiaWdfY29weSA9IGJpZzsKKyAgICBFWFBFQ1RfRVEoYmlnID4+IDczLCBiaWdfY29weSA+
Pj0gNzMpOworCisgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOEhpZ2g2NChiaWdnZXN0KSwgc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpV
SW50MTI4TG93NjQoYmlnZ2VzdCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgo
KSk7CisgICAgRVhQRUNUX0VRKHplcm8gKyBvbmUsIG9uZSk7CisgICAgRVhQRUNUX0VRKG9uZSAr
IG9uZSwgdHdvKTsKKyAgICBFWFBFQ1RfRVEoYmlnX21pbnVzX29uZSArIG9uZSwgYmlnKTsKKyAg
ICBFWFBFQ1RfRVEob25lIC0gb25lLCB6ZXJvKTsKKyAgICBFWFBFQ1RfRVEob25lIC0gemVybywg
b25lKTsKKyAgICBFWFBFQ1RfRVEoemVybyAtIG9uZSwgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0VR
KGJpZyAtIGJpZywgemVybyk7CisgICAgRVhQRUNUX0VRKGJpZyAtIG9uZSwgYmlnX21pbnVzX29u
ZSk7CisgICAgRVhQRUNUX0VRKGJpZyArIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+Ojpt
YXgoKSwgYmlnZ2VyKTsKKyAgICBFWFBFQ1RfRVEoYmlnZ2VzdCArIDEsIHplcm8pOworICAgIEVY
UEVDVF9FUSh6ZXJvIC0gMSwgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0VRKGhpZ2hfbG93IC0gb25l
LCBsb3dfaGlnaCk7CisgICAgRVhQRUNUX0VRKGxvd19oaWdoICsgb25lLCBoaWdoX2xvdyk7Cisg
ICAgRVhQRUNUX0VRKFdURjo6VUludDEyOEhpZ2g2NCgoV1RGOjpVSW50MTI4SW1wbCgxKSA8PCA2
NCkgLSAxKSwgMFUpOworICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhMb3c2NCgoV1RGOjpVSW50
MTI4SW1wbCgxKSA8PCA2NCkgLSAxKSwKKyAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghIW9uZSk7CisgICAgRVhQRUNUX1RSVUUo
ISFoaWdoX2xvdyk7CisgICAgRVhQRUNUX0ZBTFNFKCEhemVybyk7CisgICAgRVhQRUNUX0ZBTFNF
KCFvbmUpOworICAgIEVYUEVDVF9GQUxTRSghaGlnaF9sb3cpOworICAgIEVYUEVDVF9UUlVFKCF6
ZXJvKTsKKyAgICBFWFBFQ1RfVFJVRSh6ZXJvID09IDApOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkv
Y2hlY2spCisgICAgRVhQRUNUX0ZBTFNFKHplcm8gIT0gMCk7IC8vIE5PTElOVChyZWFkYWJpbGl0
eS9jaGVjaykKKyAgICBFWFBFQ1RfRkFMU0Uob25lID09IDApOyAvLyBOT0xJTlQocmVhZGFiaWxp
dHkvY2hlY2spCisgICAgRVhQRUNUX1RSVUUob25lICE9IDApOyAvLyBOT0xJTlQocmVhZGFiaWxp
dHkvY2hlY2spCisgICAgRVhQRUNUX0ZBTFNFKGhpZ2hfbG93ID09IDApOyAvLyBOT0xJTlQocmVh
ZGFiaWxpdHkvY2hlY2spCisgICAgRVhQRUNUX1RSVUUoaGlnaF9sb3cgIT0gMCk7IC8vIE5PTElO
VChyZWFkYWJpbGl0eS9jaGVjaykKKworICAgIFdURjo6VUludDEyOEltcGwgdGVzdCA9IHplcm87
CisgICAgRVhQRUNUX0VRKCsrdGVzdCwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCwgb25lKTsK
KyAgICBFWFBFQ1RfRVEodGVzdCsrLCBvbmUpOworICAgIEVYUEVDVF9FUSh0ZXN0LCB0d28pOwor
ICAgIEVYUEVDVF9FUSh0ZXN0IC09IDIsIHplcm8pOworICAgIEVYUEVDVF9FUSh0ZXN0LCB6ZXJv
KTsKKyAgICBFWFBFQ1RfRVEodGVzdCArPSAyLCB0d28pOworICAgIEVYUEVDVF9FUSh0ZXN0LCB0
d28pOworICAgIEVYUEVDVF9FUSgtLXRlc3QsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QsIG9u
ZSk7CisgICAgRVhQRUNUX0VRKHRlc3QtLSwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCwgemVy
byk7CisgICAgRVhQRUNUX0VRKHRlc3QgfD0gdGhyZWUsIHRocmVlKTsKKyAgICBFWFBFQ1RfRVEo
dGVzdCAmPSBvbmUsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QgXj0gdGhyZWUsIHR3byk7Cisg
ICAgRVhQRUNUX0VRKHRlc3QgPj49IDEsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QgPDw9IDEs
IHR3byk7CisKKyAgICBFWFBFQ1RfRVEoYmlnLCArYmlnKTsKKyAgICBFWFBFQ1RfRVEodHdvLCAr
dHdvKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4TWF4KCksICtXVEY6OlVJbnQxMjhNYXgo
KSk7CisgICAgRVhQRUNUX0VRKHplcm8sICt6ZXJvKTsKKworICAgIEVYUEVDVF9FUShiaWcsIC0o
LWJpZykpOworICAgIEVYUEVDVF9FUSh0d28sIC0oKC1vbmUpIC0gMSkpOworICAgIEVYUEVDVF9F
UShXVEY6OlVJbnQxMjhNYXgoKSwgLW9uZSk7CisgICAgRVhQRUNUX0VRKHplcm8sIC16ZXJvKTsK
K30KKworVEVTVChXVEZfSW50MTI4LCBSaWdodFNoaWZ0T2ZOZWdhdGl2ZU51bWJlcnMpCit7Cisg
ICAgV1RGOjpJbnQxMjhJbXBsIG1pbnVzX3NpeCA9IC02OworICAgIFdURjo6SW50MTI4SW1wbCBt
aW51c190aHJlZSA9IC0zOworICAgIFdURjo6SW50MTI4SW1wbCBtaW51c190d28gPSAtMjsKKyAg
ICBXVEY6OkludDEyOEltcGwgbWludXNfb25lID0gLTE7CisgICAgaWYgKCgtNiA+PiAxKSA9PSAt
MykgeworICAgICAgICAvLyBSaWdodCBzaGlmdCBpcyBhcml0aG1ldGljIChzaWduIHByb3BhZ2F0
ZXMpCisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gMSwgbWludXNfdGhyZWUpOworICAg
ICAgICBFWFBFQ1RfRVEobWludXNfc2l4ID4+IDIsIG1pbnVzX3R3byk7CisgICAgICAgIEVYUEVD
VF9FUShtaW51c19zaXggPj4gNjUsIG1pbnVzX29uZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gUmlnaHQgc2hpZnQgaXMgbG9naWNhbCAoemVyb3Mgc2hpZnRlZCBpbiBhdCBNU0IpCisgICAg
ICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gMSwgV1RGOjpJbnQxMjhJbXBsKFdURjo6VUludDEy
OEltcGwobWludXNfc2l4KSA+PiAxKSk7CisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4g
MiwgV1RGOjpJbnQxMjhJbXBsKFdURjo6VUludDEyOEltcGwobWludXNfc2l4KSA+PiAyKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gNjUsIFdURjo6SW50MTI4SW1wbChXVEY6OlVJ
bnQxMjhJbXBsKG1pbnVzX3NpeCkgPj4gNjUpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1VJbnQx
MjgsIENvbnZlcnNpb25UZXN0cykKK3sKKyAgICBFWFBFQ1RfVFJVRShXVEY6Ok1ha2VVSW50MTI4
KDEsIDApKTsKKworICAgIC8vIHZlcmlmeSB0aGF0IGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDIq
KjY0IHRoYXQgY2FuIGJlIHN0b3JlZCBwcmVjaXNlbHkKKyAgICAvLyBpbnNpZGUgYSBkb3VibGUg
aXMgY29udmVydGVkIHRvIGEgV1RGOjpVSW50MTI4SW1wbCB3aXRob3V0IGxvc3Mgb2YKKyAgICAv
LyBpbmZvcm1hdGlvbi4KKyAgICBkb3VibGUgcHJlY2lzZV9kb3VibGUgPSAweDUzMGUgKiBzdGQ6
OnBvdygyLjAsIDY0LjApICsgMHhkYTc0MDAwMDAwMDAwMDAwOworICAgIFdURjo6VUludDEyOElt
cGwgZnJvbV9wcmVjaXNlX2RvdWJsZShwcmVjaXNlX2RvdWJsZSk7CisgICAgV1RGOjpVSW50MTI4
SW1wbCBmcm9tX3ByZWNpc2VfaW50cyA9IFdURjo6TWFrZVVJbnQxMjgoMHg1MzBlLCAweGRhNzQw
MDAwMDAwMDAwMDApOworICAgIEVYUEVDVF9FUShmcm9tX3ByZWNpc2VfZG91YmxlLCBmcm9tX3By
ZWNpc2VfaW50cyk7CisgICAgRVhQRUNUX0RPVUJMRV9FUShzdGF0aWNfY2FzdDxkb3VibGU+KGZy
b21fcHJlY2lzZV9pbnRzKSwgcHJlY2lzZV9kb3VibGUpOworCisgICAgZG91YmxlIGFwcHJveF9k
b3VibGUgPSAweGZmZmZlZWVlZGRkZGNjY2MgKiBzdGQ6OnBvdygyLjAsIDY0LjApICsgMHhiYmJi
YWFhYTk5OTk4ODg4OworICAgIFdURjo6VUludDEyOEltcGwgZnJvbV9hcHByb3hfZG91YmxlKGFw
cHJveF9kb3VibGUpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoc3RhdGljX2Nhc3Q8ZG91YmxlPihm
cm9tX2FwcHJveF9kb3VibGUpLCBhcHByb3hfZG91YmxlKTsKKworICAgIGRvdWJsZSByb3VuZF90
b196ZXJvID0gMC43OworICAgIGRvdWJsZSByb3VuZF90b19maXZlID0gNS44OworICAgIGRvdWJs
ZSByb3VuZF90b19uaW5lID0gOS4zOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxXVEY6OlVJ
bnQxMjhJbXBsPihyb3VuZF90b196ZXJvKSwgMCk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PFdURjo6VUludDEyOEltcGw+KHJvdW5kX3RvX2ZpdmUpLCA1KTsKKyAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4ocm91bmRfdG9fbmluZSksIDkpOworCisgICAgV1RG
OjpVSW50MTI4SW1wbCBoaWdoZXN0X3ByZWNpc2lvbl9pbl9sb25nX2RvdWJsZSA9IH5XVEY6OlVJ
bnQxMjhJbXBsIHt9ID4+ICgxMjggLSBzdGQ6Om51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6
ZGlnaXRzKTsKKyAgICBFWFBFQ1RfRVEoaGlnaGVzdF9wcmVjaXNpb25faW5fbG9uZ19kb3VibGUs
CisgICAgICAgIHN0YXRpY19jYXN0PFdURjo6VUludDEyOEltcGw+KAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8bG9uZyBkb3VibGU+KGhpZ2hlc3RfcHJlY2lzaW9uX2luX2xvbmdfZG91YmxlKSkp
OworICAgIC8vIEFwcGx5IGEgbWFzayBqdXN0IHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGJpdHMgYXJl
IHRoZSByaWdodCBwbGFjZS4KKyAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIGFyYml0cmFyeV9t
YXNrID0gV1RGOjpNYWtlVUludDEyOCgweGEyOWY2MjI2NzdkZWQ3NTEsIDB4ZjhjYTY2YWRkMDc2
ZjQ2OCk7CisgICAgRVhQRUNUX0VRKGhpZ2hlc3RfcHJlY2lzaW9uX2luX2xvbmdfZG91YmxlICYg
YXJiaXRyYXJ5X21hc2ssCisgICAgICAgIHN0YXRpY19jYXN0PFdURjo6VUludDEyOEltcGw+KHN0
YXRpY19jYXN0PGxvbmcgZG91YmxlPigKKyAgICAgICAgICAgIGhpZ2hlc3RfcHJlY2lzaW9uX2lu
X2xvbmdfZG91YmxlICYgYXJiaXRyYXJ5X21hc2spKSk7CisKKyAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4oLTAuMUwpLCAwKTsKK30KKworVEVTVChXVEZfVUludDEy
OCwgT3BlcmF0b3JBc3NpZ25SZXR1cm5SZWYpCit7CisgICAgV1RGOjpVSW50MTI4SW1wbCB2KDEp
OworICAgICh2ICs9IDQpIC09IDM7CisgICAgRVhQRUNUX0VRKDIsIHYpOworfQorCitURVNUKFdU
Rl9VSW50MTI4LCBNdWx0aXBseSkKK3sKKyAgICBXVEY6OlVJbnQxMjhJbXBsIGEsIGIsIGM7CisK
KyAgICAvLyBaZXJvIHRlc3QuCisgICAgYSA9IDA7CisgICAgYiA9IDA7CisgICAgYyA9IGEgKiBi
OworICAgIEVYUEVDVF9FUSgwLCBjKTsKKworICAgIC8vIE1heCBjYXJyaWVzLgorICAgIGEgPSBX
VEY6OlVJbnQxMjhJbXBsKDApIC0gMTsKKyAgICBiID0gV1RGOjpVSW50MTI4SW1wbCgwKSAtIDE7
CisgICAgYyA9IGEgKiBiOworICAgIEVYUEVDVF9FUSgxLCBjKTsKKworICAgIC8vIFNlbGYtb3Bl
cmF0aW9uIHdpdGggbWF4IGNhcnJpZXMuCisgICAgYyA9IFdURjo6VUludDEyOEltcGwoMCkgLSAx
OworICAgIGMgKj0gYzsKKyAgICBFWFBFQ1RfRVEoMSwgYyk7CisKKyAgICAvLyAxLWJpdCB4IDEt
Yml0LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IDY0OyArK2opIHsKKyAgICAgICAgICAgIGEgPSBXVEY6OlVJbnQxMjhJbXBs
KDEpIDw8IGk7CisgICAgICAgICAgICBiID0gV1RGOjpVSW50MTI4SW1wbCgxKSA8PCBqOworICAg
ICAgICAgICAgYyA9IGEgKiBiOworICAgICAgICAgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOElt
cGwoMSkgPDwgKGkgKyBqKSwgYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBWZXJpZmll
ZCB3aXRoIGRjLgorICAgIGEgPSBXVEY6Ok1ha2VVSW50MTI4KDB4ZmZmZmVlZWVkZGRkY2NjYywg
MHhiYmJiYWFhYTk5OTk4ODg4KTsKKyAgICBiID0gV1RGOjpNYWtlVUludDEyOCgweDc3Nzc2NjY2
NTU1NTQ0NDQsIDB4MzMzMzIyMjIxMTExMDAwMCk7CisgICAgYyA9IGEgKiBiOworICAgIEVYUEVD
VF9FUShXVEY6Ok1ha2VVSW50MTI4KDB4NTMwRURBNzQxQzcxRDRDMywgMHhCRjI1OTc1MzE5MDgw
MDAwKSwgYyk7CisgICAgRVhQRUNUX0VRKDAsIGMgLSBiICogYSk7CisgICAgRVhQRUNUX0VRKGEg
KiBhIC0gYiAqIGIsIChhICsgYikgKiAoYSAtIGIpKTsKKworICAgIC8vIFZlcmlmaWVkIHdpdGgg
ZGMuCisgICAgYSA9IFdURjo6TWFrZVVJbnQxMjgoMHgwMTIzNDU2Nzg5YWJjZGVmLCAweGZlZGNi
YTk4NzY1NDMyMTApOworICAgIGIgPSBXVEY6Ok1ha2VVSW50MTI4KDB4MDI0NjhhY2UxMzU3OWJk
ZiwgMHhmZGI5NzUzMWVjYTg2NDIwKTsKKyAgICBjID0gYSAqIGI7CisgICAgRVhQRUNUX0VRKFdU
Rjo6TWFrZVVJbnQxMjgoMHg5N2E4N2Y0ZjI2MWJhM2YyLCAweDM0MmQwYmJmNDg5NDgyMDApLCBj
KTsKKyAgICBFWFBFQ1RfRVEoMCwgYyAtIGIgKiBhKTsKKyAgICBFWFBFQ1RfRVEoYSAqIGEgLSBi
ICogYiwgKGEgKyBiKSAqIChhIC0gYikpOworfQorCitURVNUKFdURl9VSW50MTI4LCBBbGlhc1Rl
c3RzKQoreworICAgIFdURjo6VUludDEyOEltcGwgeDEgPSBXVEY6Ok1ha2VVSW50MTI4KDEsIDIp
OworICAgIFdURjo6VUludDEyOEltcGwgeDIgPSBXVEY6Ok1ha2VVSW50MTI4KDIsIDQpOworICAg
IHgxICs9IHgxOworICAgIEVYUEVDVF9FUSh4MiwgeDEpOworCisgICAgV1RGOjpVSW50MTI4SW1w
bCB4MyA9IFdURjo6TWFrZVVJbnQxMjgoMSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IDYz
KTsKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHg0ID0gV1RGOjpNYWtlVUludDEyOCgzLCAwKTsKKyAg
ICB4MyArPSB4MzsKKyAgICBFWFBFQ1RfRVEoeDQsIHgzKTsKK30KKworVEVTVChXVEZfVUludDEy
OCwgRGl2aWRlQW5kTW9kKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsKKworICAgIC8vIGEgOj0g
cSAqIGIgKyByCisgICAgV1RGOjpVSW50MTI4SW1wbCBhLCBiLCBxLCByOworCisgICAgLy8gWmVy
byB0ZXN0LgorICAgIGEgPSAwOworICAgIGIgPSAxMjM7CisgICAgcSA9IGEgLyBiOworICAgIHIg
PSBhICUgYjsKKyAgICBFWFBFQ1RfRVEoMCwgcSk7CisgICAgRVhQRUNUX0VRKDAsIHIpOworCisg
ICAgYSA9IFdURjo6TWFrZVVJbnQxMjgoMHg1MzBlZGE3NDFjNzFkNGMzLCAweGJmMjU5NzUzMTkw
ODAwMDApOworICAgIHEgPSBXVEY6Ok1ha2VVSW50MTI4KDB4NGRlMmNhYjA4MSwgMHgxNGMzNGFi
NDY3NmU0YmFiKTsKKyAgICBiID0gV1RGOjpVSW50MTI4SW1wbCgweDExMTAwMDEpOworICAgIHIg
PSBXVEY6OlVJbnQxMjhJbXBsKDB4M2ViNDU1KTsKKyAgICBBU1NFUlRfRVEoYSwgcSAqIGIgKyBy
KTsgLy8gU2FuaXR5LWNoZWNrLgorCisgICAgV1RGOjpVSW50MTI4SW1wbCByZXN1bHRfcSwgcmVz
dWx0X3I7CisgICAgcmVzdWx0X3EgPSBhIC8gYjsKKyAgICByZXN1bHRfciA9IGEgJSBiOworICAg
IEVYUEVDVF9FUShxLCByZXN1bHRfcSk7CisgICAgRVhQRUNUX0VRKHIsIHJlc3VsdF9yKTsKKwor
ICAgIC8vIFRyeSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgICBzd2FwKHEsIGIpOworICAgIHJl
c3VsdF9xID0gYSAvIGI7CisgICAgcmVzdWx0X3IgPSBhICUgYjsKKyAgICBFWFBFQ1RfRVEocSwg
cmVzdWx0X3EpOworICAgIEVYUEVDVF9FUShyLCByZXN1bHRfcik7CisgICAgLy8gUmVzdG9yZS4K
KyAgICBzd2FwKGIsIHEpOwogCi1zdGF0aWMgdm9pZCBUZXN0VW5hcnkoc3RkOjp1aW50NjRfdCB4
KQorICAgIC8vIERpdmlkZW5kIDwgZGl2aXNvcjsgcmVzdWx0IHNob3VsZCBiZSBxOjAgcjo8ZGl2
aWRlbmQ+LgorICAgIHN3YXAoYSwgYik7CisgICAgcmVzdWx0X3EgPSBhIC8gYjsKKyAgICByZXN1
bHRfciA9IGEgJSBiOworICAgIEVYUEVDVF9FUSgwLCByZXN1bHRfcSk7CisgICAgRVhQRUNUX0VR
KGEsIHJlc3VsdF9yKTsKKyAgICAvLyBUcnkgdGhlIG90aGVyIHdheSBhcm91bmQuCisgICAgc3dh
cChhLCBxKTsKKyAgICByZXN1bHRfcSA9IGEgLyBiOworICAgIHJlc3VsdF9yID0gYSAlIGI7Cisg
ICAgRVhQRUNUX0VRKDAsIHJlc3VsdF9xKTsKKyAgICBFWFBFQ1RfRVEoYSwgcmVzdWx0X3IpOwor
ICAgIC8vIFJlc3RvcmUuCisgICAgc3dhcChxLCBhKTsKKyAgICBzd2FwKGIsIGEpOworCisgICAg
Ly8gVHJ5IGEgbGFyZ2UgcmVtYWluZGVyLgorICAgIGIgPSBhIC8gMiArIDE7CisgICAgV1RGOjpV
SW50MTI4SW1wbCBleHBlY3RlZF9yID0gV1RGOjpNYWtlVUludDEyOCgweDI5ODc2ZDNhMGUzOGVh
NjEsIDB4ZGY5MmNiYTk4YzgzZmZmZik7CisgICAgLy8gU2FuaXR5IGNoZWNrcy4KKyAgICBBU1NF
UlRfRVEoYSAvIDIgLSAxLCBleHBlY3RlZF9yKTsKKyAgICBBU1NFUlRfRVEoYSwgYiArIGV4cGVj
dGVkX3IpOworICAgIHJlc3VsdF9xID0gYSAvIGI7CisgICAgcmVzdWx0X3IgPSBhICUgYjsKKyAg
ICBFWFBFQ1RfRVEoMSwgcmVzdWx0X3EpOworICAgIEVYUEVDVF9FUShleHBlY3RlZF9yLCByZXN1
bHRfcik7Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIERpdmlkZUFuZE1vZFJhbmRvbUlucHV0cykK
IHsKLSAgICBOb25OYXRpdmVVSW50MTI4IG4geyB4IH07Ci0gICAgRVhQRUNUX0VRKHgsIHN0YXRp
Y19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pKTsKLSAgICBFWFBFQ1RfRVEofngsIHN0YXRpY19jYXN0
PHN0ZDo6dWludDY0X3Q+KH5uKSk7Ci0gICAgRVhQRUNUX0VRKC14LCBzdGF0aWNfY2FzdDxzdGQ6
OnVpbnQ2NF90PigtbikpOwotICAgIEVYUEVDVF9FUSgheCwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50
NjRfdD4oIW4pKTsKLSAgICBFWFBFQ1RfVFJVRShuID09IG4pOwotICAgIEVYUEVDVF9UUlVFKG4g
KyBuID09IG4gKiBzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PigyKSk7Ci0gICAgRVhQRUNU
X1RSVUUobiAtIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMCkpOwotICAgIEVY
UEVDVF9UUlVFKG4gKyBuID09IG4gPDwgc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMSkp
OwotICAgIEVYUEVDVF9UUlVFKG4gKyBuID09IG4gPDwgc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUlu
dDEyOD4oMSkpOwotICAgIEVYUEVDVF9UUlVFKChuICsgbikgLSBuID09IG4pOwotICAgIEVYUEVD
VF9UUlVFKCgobiArIG4pID4+IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDEpKSA9PSBu
KTsKLSAgICBpZiAoeCkgewotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRp
dmVVSW50MTI4PigwKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMCkpOwot
ICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PihuIC0gMSkg
LyBuID09IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDApKTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4obikgLyBuID09IHN0YXRpY19jYXN0
PE5vbk5hdGl2ZVVJbnQxMjg+KDEpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8
Tm9uTmF0aXZlVUludDEyOD4obiArIG4gLSAxKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZl
VUludDEyOD4oMSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRpdmVV
SW50MTI4PihuICsgbikgLyBuID09IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDIpKTsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIFRlc3RCaW5hcnkoc3RkOjp1aW50NjRfdCB4LCBzdGQ6
OnVpbnQ2NF90IHkpCi17Ci0gICAgTm9uTmF0aXZlVUludDEyOCBtIHsgeCB9LCBuIHsgeSB9Owot
ICAgIEVYUEVDVF9FUSh4LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtKSk7Ci0gICAgRVhQ
RUNUX0VRKHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pKTsKLSAgICBFWFBFQ1RfRVEo
eCAmIHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG0gJiBuKSk7Ci0gICAgRVhQRUNUX0VR
KHggfCB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtIHwgbikpOwotICAgIEVYUEVDVF9F
USh4IF4geSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obSBeIG4pKTsKLSAgICBFWFBFQ1Rf
RVEoeCArIHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG0gKyBuKSk7Ci0gICAgRVhQRUNU
X0VRKHggLSB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtIC0gbikpOwotICAgIEVYUEVD
VF9FUSh4ICogeSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obSAqIG4pKTsKLSAgICBpZiAo
bikKLSAgICAgICAgRVhQRUNUX0VRKHggLyB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90Piht
IC8gbikpOwotfQotCi1URVNUKFdURl9JbnQxMjgsIEJhc2ljKQotewotICAgIGZvciAoc3RkOjp1
aW50NjRfdCBqIHswfTsgaiA8IDY0OyArK2opIHsKLSAgICAgICAgVGVzdFVuYXJ5KGopOwotICAg
ICAgICBUZXN0VW5hcnkofmopOwotICAgICAgICBUZXN0VW5hcnkoc3RkOjp1aW50NjRfdCgxKSA8
PCBqKTsKLSAgICAgICAgZm9yIChzdGQ6OnVpbnQ2NF90IGsgezB9OyBrIDwgNjQ7ICsraykKLSAg
ICAgICAgICAgIFRlc3RCaW5hcnkoaiwgayk7Ci0gICAgfQotfQotCi0jaWYgSEFWRShJTlQxMjhf
VCkKLXN0YXRpYyBfX3VpbnQxMjhfdCBUb05hdGl2ZShOb25OYXRpdmVVSW50MTI4IG4pCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PF9fdWludDEyOF90PihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2
NF90PihuID4+IDY0KSkgPDwgNjQgfAotICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90
PihuKTsKLX0KLQotc3RhdGljIE5vbk5hdGl2ZVVJbnQxMjggRnJvbU5hdGl2ZShfX3VpbnQxMjhf
dCBuKQotewotICAgIHJldHVybiBOb25OYXRpdmVVSW50MTI4IHsgc3RhdGljX2Nhc3Q8c3RkOjp1
aW50NjRfdD4obiA+PiA2NCl9IDw8IDY0IHwgTm9uTmF0aXZlVUludDEyOCB7IHN0YXRpY19jYXN0
PHN0ZDo6dWludDY0X3Q+KG4pIH07Ci19Ci0KLXN0YXRpYyB2b2lkIFRlc3RWc05hdGl2ZShfX3Vp
bnQxMjhfdCB4LCBfX3VpbnQxMjhfdCB5KQotewotICAgIE5vbk5hdGl2ZVVJbnQxMjggbSB7IEZy
b21OYXRpdmUoeCkgfSwgbiB7IEZyb21OYXRpdmUoeSkgfTsKLSAgICBFWFBFQ1RfVFJVRShUb05h
dGl2ZShtKSA9PSB4KTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShuKSA9PSB5KTsKLSAgICBF
WFBFQ1RfVFJVRShUb05hdGl2ZSh+bSkgPT0gfngpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZl
KC1tKSA9PSAteCk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUoIW0pID09ICF4KTsKLSAgICBF
WFBFQ1RfVFJVRShUb05hdGl2ZShtIDwgbikgPT0gKHggPCB5KSk7Ci0gICAgRVhQRUNUX1RSVUUo
VG9OYXRpdmUobSA8PSBuKSA9PSAoeCA8PSB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUo
bSA9PSBuKSA9PSAoeCA9PSB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAhPSBuKSA9
PSAoeCAhPSB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSA+PSBuKSA9PSAoeCA+PSB5
KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSA+IG4pID09ICh4ID4geSkpOwotICAgIEVY
UEVDVF9UUlVFKFRvTmF0aXZlKG0gJiBuKSA9PSAoeCAmIHkpKTsKLSAgICBFWFBFQ1RfVFJVRShU
b05hdGl2ZShtIHwgbikgPT0gKHggfCB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSBe
IG4pID09ICh4IF4geSkpOwotICAgIGlmICh5IDwgMTI4KSB7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KFRvTmF0aXZlKG0gPDwgbikgPT0gKHggPDwgeSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShUb05h
dGl2ZShtID4+IG4pID09ICh4ID4+IHkpKTsKLSAgICB9Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRp
dmUobSArIG4pID09ICh4ICsgeSkpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gLSBuKSA9
PSAoeCAtIHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtICogbikgPT0gKHggKiB5KSk7
Ci0gICAgaWYgKHkgPiAwKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gLyBuKSA9
PSAoeCAvIHkpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAlIG4pID09ICh4ICUg
eSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtIC0gbiAqIChtIC8gbikpID09ICh4
ICUgeSkpOwotICAgIH0KLX0KLQotVEVTVChXVEZfSW50MTI4LCBWc05hdGl2ZSkKLXsKLSAgICBH
VEVTVF9MT0dfKElORk8pIDw8ICJFbnZpcm9ubWVudCBoYXMgbmF0aXZlIF9fdWludDEyOF90IjsK
LQotICAgIGZvciAoaW50IGogezB9OyBqIDwgMTI4OyArK2opIHsKLSAgICAgICAgZm9yIChpbnQg
ayB7MH07IGsgPCAxMjg7ICsraykgewotICAgICAgICAgICAgX191aW50MTI4X3QgbSB7IDEgfSwg
biB7IDEgfTsKLSAgICAgICAgICAgIG0gPDw9IGo7Ci0gICAgICAgICAgICBuIDw8PSBrOwotICAg
ICAgICAgICAgVGVzdFZzTmF0aXZlKG0sIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0aXZlKH5t
LCBuKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtLCB+bik7Ci0gICAgICAgICAgICBUZXN0
VnNOYXRpdmUofm0sIH5uKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtIF4gbiwgbik7Ci0g
ICAgICAgICAgICBUZXN0VnNOYXRpdmUobSwgbSBeIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0
aXZlKG0gXiB+biwgbik7Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUobSwgfm0gXiBuKTsKLSAg
ICAgICAgICAgIFRlc3RWc05hdGl2ZShtIF4gfm4sIG0gXiBuKTsKLSAgICAgICAgICAgIFRlc3RW
c05hdGl2ZShtIF4gbiwgfm0gXiBuKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtIF4gfm4s
IH5tIF4gbik7Ci0gICAgICAgICAgICBUZXN0QmluYXJ5KG0sIDEwMDAwMDAwMDAwMDAwMDAwKTsg
Ly8gaW1wb3J0YW50IGNhc2UgZm9yIGRlY2ltYWwgY29udmVyc2lvbgotICAgICAgICAgICAgVGVz
dEJpbmFyeSh+bSwgMTAwMDAwMDAwMDAwMDAwMDApOworICAgIGNvbnN0IGludCBrTnVtSXRlcnMg
PSAxIDw8IDE4OworICAgIHN0ZDo6bWluc3RkX3JhbmQgcmFuZG9tKHRlc3Rpbmc6OlVuaXRUZXN0
OjpHZXRJbnN0YW5jZSgpLT5yYW5kb21fc2VlZCgpKTsKKyAgICBzdGQ6OnVuaWZvcm1faW50X2Rp
c3RyaWJ1dGlvbjx1aW50NjRfdD4gdW5pZm9ybV91aW50NjQ7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBrTnVtSXRlcnM7ICsraSkgeworICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIGEg
PSBXVEY6Ok1ha2VVSW50MTI4KHVuaWZvcm1fdWludDY0KHJhbmRvbSksIHVuaWZvcm1fdWludDY0
KHJhbmRvbSkpOworICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIGIgPSBXVEY6Ok1ha2VV
SW50MTI4KHVuaWZvcm1fdWludDY0KHJhbmRvbSksIHVuaWZvcm1fdWludDY0KHJhbmRvbSkpOwor
ICAgICAgICBpZiAoYiA9PSAwKSB7CisgICAgICAgICAgICBjb250aW51ZTsgLy8gQXZvaWQgYSBk
aXYtYnktemVyby4KICAgICAgICAgfQorICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIHEg
PSBhIC8gYjsKKyAgICAgICAgY29uc3QgV1RGOjpVSW50MTI4SW1wbCByID0gYSAlIGI7CisgICAg
ICAgIEFTU0VSVF9FUShhLCBiICogcSArIHIpOworICAgIH0KK30KKworVEVTVChXVEZfVUludDEy
OCwgQ29uc3RleHByVGVzdCkKK3sKKyAgICBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCB6ZXJv
ID0gV1RGOjpVSW50MTI4SW1wbCgpOworICAgIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIG9u
ZSA9IDE7CisgICAgY29uc3RleHByIFdURjo6VUludDEyOEltcGwgbWludXNfdHdvID0gLTI7Cisg
ICAgRVhQRUNUX0VRKHplcm8sIFdURjo6VUludDEyOEltcGwoMCkpOworICAgIEVYUEVDVF9FUShv
bmUsIFdURjo6VUludDEyOEltcGwoMSkpOworICAgIEVYUEVDVF9FUShtaW51c190d28sIFdURjo6
TWFrZVVJbnQxMjgoLTEsIC0yKSk7Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIE51bWVyaWNMaW1p
dHNUZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJ
bnQxMjhJbXBsPjo6aXNfc3BlY2lhbGl6ZWQsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6
Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zaWduZWQsICIiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX2lu
dGVnZXIsICIiKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PigxMjggKiBzdGQ6Omxv
ZzEwKDIpKSwKKyAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6
ZGlnaXRzMTApOworICAgIEVYUEVDVF9FUSgwLCBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjptaW4oKSk7CisgICAgRVhQRUNUX0VRKDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8
V1RGOjpVSW50MTI4SW1wbD46Omxvd2VzdCgpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4
TWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heCgpKTsKK30K
KworVEVTVChXVEZfSW50MTI4VUludDEyOCwgQ29udmVyc2lvblRlc3QpCit7CisgICAgV1RGOjpJ
bnQxMjhJbXBsIG5vbm5lZ2F0aXZlX3NpZ25lZF92YWx1ZXNbXSA9IHsKKyAgICAgICAgMCwKKyAg
ICAgICAgMSwKKyAgICAgICAgMHhmZmVlZGRjY2JiYWE5OTg4LAorICAgICAgICBXVEY6Ok1ha2VJ
bnQxMjgoMHg3NzY2NTU0NDMzMjIxMTAwLCAwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4
MTIzNDU2Nzg5MGFiY2RlZiwgMHhmZWRjYmEwOTg3NjU0MzIxKSwKKyAgICAgICAgV1RGOjpJbnQx
MjhNYXgoKQorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiBub25uZWdh
dGl2ZV9zaWduZWRfdmFsdWVzKSB7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgV1RGOjpJbnQx
MjhJbXBsKFdURjo6VUludDEyOEltcGwodmFsdWUpKSk7CisKKyAgICAgICAgV1RGOjpVSW50MTI4
SW1wbCBhc3NpZ25lZF92YWx1ZTsKKyAgICAgICAgYXNzaWduZWRfdmFsdWUgPSB2YWx1ZTsKKyAg
ICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwoYXNzaWduZWRfdmFsdWUpKTsK
KyAgICB9CisKKyAgICBXVEY6OkludDEyOEltcGwgbmVnYXRpdmVfdmFsdWVzW10gPSB7CisgICAg
ICAgIC0xLCAtMHgxMjM0NTY3ODkwYWJjZGVmLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoLTB4
NTU0NDMzMjIxMWZmZWVkZCwgMCksCisgICAgICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHg3NjU0MzIx
MGZlZGNiYTk4LCAweGFiY2RlZjAxMjM0NTY3ODkpCisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50
MTI4SW1wbCB2YWx1ZSA6IG5lZ2F0aXZlX3ZhbHVlcykgeworICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpVSW50MTI4SW1wbCgtdmFsdWUpLCAtV1RGOjpVSW50MTI4SW1wbCh2YWx1ZSkpOworCisgICAg
ICAgIFdURjo6VUludDEyOEltcGwgYXNzaWduZWRfdmFsdWU7CisgICAgICAgIGFzc2lnbmVkX3Zh
bHVlID0gdmFsdWU7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhJbXBsKC12YWx1ZSks
IC1hc3NpZ25lZF92YWx1ZSk7CiAgICAgfQogfQogCi0jZWxzZSAvLyAhSEFWRShJTlQxMjhfVCkK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV1RGX0ludDEyOEludGVnZXJUcmFpdHNUZXN0
IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9OworCitUWVBFRF9URVNUX1NVSVRFKFdURl9J
bnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCwgSW50ZWdlclR5cGVzKTsKKworVFlQRURfVEVTVChXVEZf
SW50MTI4SW50ZWdlclRyYWl0c1Rlc3QsIENvbnN0cnVjdEFzc2lnblRlc3QpCit7CisgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8V1RGOjpJbnQxMjhJbXBsLCBUeXBlUGFy
YW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6SW50MTI4SW1wbCBtdXN0IGJlIGNvbnN0cnVjdGli
bGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXNzaWduYWJs
ZTxXVEY6OkludDEyOEltcGwmLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6SW50
MTI4SW1wbCBtdXN0IGJlIGFzc2lnbmFibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBhcmFtJiwgV1RGOjpJbnQxMjhJbXBsPjo6
dmFsdWUsCisgICAgICAgICJUeXBlUGFyYW0gbXVzdCBub3QgYmUgYXNzaWduYWJsZSBmcm9tIFdU
Rjo6SW50MTI4SW1wbCIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFdURl9J
bnQxMjhGbG9hdFRyYWl0c1Rlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK307CisKK1RZ
UEVEX1RFU1RfU1VJVEUoV1RGX0ludDEyOEZsb2F0VHJhaXRzVGVzdCwgRmxvYXRpbmdQb2ludFR5
cGVzKTsKIAotVEVTVChXVEZfSW50MTI4LCBWc05hdGl2ZSkKK1RZUEVEX1RFU1QoV1RGX0ludDEy
OEZsb2F0VHJhaXRzVGVzdCwgQ29uc3RydWN0QXNzaWduVGVzdCkKIHsKLSAgICBHVEVTVF9MT0df
KElORk8pIDw8ICJFbnZpcm9ubWVudCBsYWNrcyBuYXRpdmUgX191aW50MTI4X3QiOworICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19jb25zdHJ1Y3RpYmxlPFdURjo6SW50MTI4SW1wbCwgVHlwZVBh
cmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6OkludDEyOEltcGwgbXVzdCBiZSBjb25zdHJ1Y3Rp
YmxlIGZyb20gVHlwZVBhcmFtIik7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19hc3NpZ25h
YmxlPFdURjo6SW50MTI4SW1wbCYsIFR5cGVQYXJhbT46OnZhbHVlLAorICAgICAgICAiV1RGOjpJ
bnQxMjhJbXBsIG11c3Qgbm90IGJlIGFzc2lnbmFibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBhcmFtJiwgV1RGOjpJbnQxMjhJ
bXBsPjo6dmFsdWUsCisgICAgICAgICJUeXBlUGFyYW0gbXVzdCBub3QgYmUgYXNzaWduYWJsZSBm
cm9tIFdURjo6SW50MTI4SW1wbCIpOwogfQogCi0jZW5kaWYgLy8gIUhBVkUoSU5UMTI4X1QpCitU
RVNUKFdURl9JbnQxMjgsIFRyaXZpYWxUcmFpdHNUZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFdURjo6SW50MTI4SW1wbD46
OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2Nv
bnN0cnVjdGlibGU8V1RGOjpJbnQxMjhJbXBsPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZTxXVEY6OkludDEyOEltcGw+Ojp2
YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFdURjo6SW50MTI4SW1wbD46OnZhbHVlLCAiIik7Cit9CisKK1RFU1QoV1RGX0ludDEyOCwg
Qm9vbENvbnZlcnNpb25UZXN0KQoreworICAgIEVYUEVDVF9GQUxTRShXVEY6OkludDEyOEltcGwo
MCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICBFWFBFQ1Rf
VFJVRShXVEY6Ok1ha2VJbnQxMjgoMCwgdWludDY0X3QgeyAxIH0gPDwgaSkpOworICAgIH0KKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDYzOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoV1RG
OjpNYWtlSW50MTI4KGludDY0X3QgeyAxIH0gPDwgaSwgMCkpOworICAgIH0KKyAgICBFWFBFQ1Rf
VFJVRShXVEY6OkludDEyOE1pbigpKTsKKworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwo
MSksIFdURjo6SW50MTI4SW1wbCh0cnVlKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1w
bCgwKSwgV1RGOjpJbnQxMjhJbXBsKGZhbHNlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgV1RGX0ludDEyOEludGVnZXJDb252ZXJzaW9uVGVzdCA6IHB1YmxpYyA6OnRlc3Rp
bmc6OlRlc3QgeworfTsKKworVFlQRURfVEVTVF9TVUlURShXVEZfSW50MTI4SW50ZWdlckNvbnZl
cnNpb25UZXN0LCBJbnRlZ2VyVHlwZXMpOworCitUWVBFRF9URVNUKFdURl9JbnQxMjhJbnRlZ2Vy
Q29udmVyc2lvblRlc3QsIFJvdW5kVHJpcFRlc3QpCit7CisgICAgRVhQRUNUX0VRKFR5cGVQYXJh
bSB7IDAgfSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOEltcGwoMCkpKTsKKyAg
ICBFWFBFQ1RfRVEoc3RkOjpudW1lcmljX2xpbWl0czxUeXBlUGFyYW0+OjptaW4oKSwKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChz
dGQ6Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46Om1pbigpKSkpOworICAgIEVYUEVDVF9FUShz
dGQ6Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46Om1heCgpLAorICAgICAgICBzdGF0aWNfY2Fz
dDxUeXBlUGFyYW0+KAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHN0ZDo6bnVtZXJpY19s
aW1pdHM8VHlwZVBhcmFtPjo6bWF4KCkpKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
Y2xhc3MgV1RGX0ludDEyOEZsb2F0Q29udmVyc2lvblRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpU
ZXN0IHsKK307CisKK1RZUEVEX1RFU1RfU1VJVEUoV1RGX0ludDEyOEZsb2F0Q29udmVyc2lvblRl
c3QsIEZsb2F0aW5nUG9pbnRUeXBlcyk7CisKK1RZUEVEX1RFU1QoV1RGX0ludDEyOEZsb2F0Q29u
dmVyc2lvblRlc3QsIENvbnN0cnVjdEFuZENhc3RUZXN0KQoreworICAgIC8vIENvbnZlcnNpb25z
IHdoZXJlIHRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZXMgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNh
bWUuCisgICAgLy8gMHg5ZjViIGlzIGEgcmFuZG9tbHkgY2hvc2VuIHNtYWxsIHZhbHVlLgorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMTEwOyArK2kpIHsgLy8gMTEwID0gMTI2IC0gI2JpdHMgaW4g
MHg5ZjViCisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAiaSA9
ICIgPDwgaSk7CisKKyAgICAgICAgVHlwZVBhcmFtIGZsb2F0X3ZhbHVlID0gc3RkOjpsZGV4cChz
dGF0aWNfY2FzdDxUeXBlUGFyYW0+KDB4OWY1YiksIGkpOworICAgICAgICBXVEY6OkludDEyOElt
cGwgaW50X3ZhbHVlID0gV1RGOjpJbnQxMjhJbXBsKDB4OWY1YikgPDwgaTsKKworICAgICAgICBF
WFBFQ1RfRVEoZmxvYXRfdmFsdWUsIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oaW50X3ZhbHVlKSk7
CisgICAgICAgIEVYUEVDVF9FUSgtZmxvYXRfdmFsdWUsIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4o
LWludF92YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoaW50X3ZhbHVlLCBXVEY6OkludDEyOElt
cGwoZmxvYXRfdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKC1pbnRfdmFsdWUsIFdURjo6SW50
MTI4SW1wbCgtZmxvYXRfdmFsdWUpKTsKKyAgICB9CisKKyAgICAvLyBSb3VuZCB0cmlwIGNvbnZl
cnNpb25zIHdpdGggYSBzbWFsbCBzYW1wbGUgb2YgcmFuZG9tbHkgZ2VuZXJhdGVkIHVpbnQ2NF90
CisgICAgLy8gdmFsdWVzIChsZXNzIHRoYW4gaW50NjRfdCBtYXggc28gdGhhdCB2YWx1ZSAqIDJe
NjQgZml0cyBpbnRvIGludDEyOCkuCisgICAgdWludDY0X3QgdmFsdWVzW10gPSB7IDB4NmQ0NDky
YzI0ZmI4NjE5OSwgMHgyNmVhZDY1ZTRjYjM1OWI1LAorICAgICAgICAweDJjNDM0MDc0MzNiYTNm
ZDEsIDB4M2I1NzRlYzY2OGRmNmI1NSwKKyAgICAgICAgMHgxYzc1MGU1NWEyOWY0ZjBmIH07Cisg
ICAgZm9yICh1aW50NjRfdCB2YWx1ZSA6IHZhbHVlcykgeworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8PSA2NDsgKytpKSB7CisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpN
ZXNzYWdlKCkKKyAgICAgICAgICAgICAgICA8PCAidmFsdWUgPSAiIDw8IHZhbHVlIDw8ICI7IGkg
PSAiIDw8IGkpOworCisgICAgICAgICAgICBUeXBlUGFyYW0gZnZhbHVlID0gc3RkOjpsZGV4cChz
dGF0aWNfY2FzdDxUeXBlUGFyYW0+KHZhbHVlKSwgaSk7CisgICAgICAgICAgICBFWFBFQ1RfRE9V
QkxFX0VRKGZ2YWx1ZSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOEltcGwoZnZh
bHVlKSkpOworICAgICAgICAgICAgRVhQRUNUX0RPVUJMRV9FUSgtZnZhbHVlLCBzdGF0aWNfY2Fz
dDxUeXBlUGFyYW0+KC1XVEY6OkludDEyOEltcGwoZnZhbHVlKSkpOworICAgICAgICAgICAgRVhQ
RUNUX0RPVUJMRV9FUSgtZnZhbHVlLCBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KFdURjo6SW50MTI4
SW1wbCgtZnZhbHVlKSkpOworICAgICAgICAgICAgRVhQRUNUX0RPVUJMRV9FUShmdmFsdWUsIHN0
YXRpY19jYXN0PFR5cGVQYXJhbT4oLVdURjo6SW50MTI4SW1wbCgtZnZhbHVlKSkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gUm91bmQgdHJpcCBjb252ZXJzaW9ucyB3aXRoIGEgc21hbGwg
c2FtcGxlIG9mIHJhbmRvbSBsYXJnZSBwb3NpdGl2ZSB2YWx1ZXMuCisgICAgV1RGOjpJbnQxMjhJ
bXBsIGxhcmdlX3ZhbHVlc1tdID0geworICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHg1YjA2NDBk
OTZjN2IzZDlmLCAweGI3YTcxODllNTFkMTg2MjIpLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgo
MHgzNGJlZDA0MmM2ZjY1MjcwLCAweDczYjIzNjU3MDY2OWEwODkpLAorICAgICAgICBXVEY6Ok1h
a2VJbnQxMjgoMHg0M2RlYmE5ZTZkYTEyNzI0LCAweGY3ZjBmODNkYTY4Njc5N2QpLAorICAgICAg
ICBXVEY6Ok1ha2VJbnQxMjgoMHg3MWU4ZDM4M2JlNGU1NTg5LCAweDc1YzNmOTZmYjAwNzUyYjYp
CisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50MTI4SW1wbCB2YWx1ZSA6IGxhcmdlX3ZhbHVlcykg
eworICAgICAgICAvLyBNYWtlIHZhbHVlIGhhdmUgYXMgbWFueSBzaWduaWZpY2FudCBiaXRzIGFz
IGNhbiBiZSByZXByZXNlbnRlZCBieQorICAgICAgICAvLyB0aGUgbWFudGlzc2EsIGFsc28gbWFr
aW5nIHN1cmUgdGhlIGhpZ2hlc3QgYW5kIGxvd2VzdCBiaXQgaW4gdGhlIHJhbmdlCisgICAgICAg
IC8vIGFyZSBzZXQuCisgICAgICAgIHZhbHVlID4+PSAoMTI3IC0gc3RkOjpudW1lcmljX2xpbWl0
czxUeXBlUGFyYW0+OjpkaWdpdHMpOworICAgICAgICB2YWx1ZSB8PSBXVEY6OkludDEyOEltcGwo
MSkgPDwgKHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZVBhcmFtPjo6ZGlnaXRzIC0gMSk7CisgICAg
ICAgIHZhbHVlIHw9IDE7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTI3IC0gc3RkOjpu
dW1lcmljX2xpbWl0czxUeXBlUGFyYW0+OjpkaWdpdHM7ICsraSkgeworICAgICAgICAgICAgV1RG
OjpJbnQxMjhJbXBsIGludF92YWx1ZSA9IHZhbHVlIDw8IGk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoaW50X3ZhbHVlLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdURjo6SW50MTI4SW1w
bD4oc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihpbnRfdmFsdWUpKSk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoLWludF92YWx1ZSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXVEY6OkludDEy
OEltcGw+KHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oLWludF92YWx1ZSkpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFNtYWxsIHNhbXBsZSBvZiBjaGVja3MgdGhhdCByb3VuZGluZyBpcyB0
b3dhcmQgemVybworICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoVHlwZVBhcmFtKDAu
MSkpKTsKKyAgICBFWFBFQ1RfRVEoMTcsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oMTcuOCkp
KTsKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKFR5cGVQYXJhbSgtMC44KSkpOwor
ICAgIEVYUEVDVF9FUSgtNTMsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oLTUzLjEpKSk7Cisg
ICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oMC41KSkpOworICAgIEVY
UEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoVHlwZVBhcmFtKC0wLjUpKSk7CisgICAgVHlwZVBh
cmFtIGp1c3RfbHRfb25lID0gc3RkOjpuZXh0dG93YXJkKFR5cGVQYXJhbSgxKSwgVHlwZVBhcmFt
KDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKGp1c3RfbHRfb25lKSk7Cisg
ICAgVHlwZVBhcmFtIGp1c3RfZ3RfbWludXNfb25lID0gc3RkOjpuZXh0dG93YXJkKFR5cGVQYXJh
bSgtMSksIFR5cGVQYXJhbSgwKSk7CisgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbChq
dXN0X2d0X21pbnVzX29uZSkpOworCisgICAgLy8gQ2hlY2sgbGltaXRzCisgICAgRVhQRUNUX0RP
VUJMRV9FUShzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oMSksIDEyNyksCisgICAg
ICAgIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oV1RGOjpJbnQxMjhNYXgoKSkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoLXN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigxKSwgMTI3KSwK
KyAgICAgICAgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOE1pbigpKSk7Cit9CisK
K1RFU1QoV1RGX0ludDEyOCwgRmFjdG9yeVRlc3QpCit7CisgICAgRVhQRUNUX0VRKFdURjo6SW50
MTI4SW1wbCgtMSksIFdURjo6TWFrZUludDEyOCgtMSwgLTEpKTsKKyAgICBFWFBFQ1RfRVEoV1RG
OjpJbnQxMjhJbXBsKC0zMSksIFdURjo6TWFrZUludDEyOCgtMSwgLTMxKSk7CisgICAgRVhQRUNU
X0VRKFdURjo6SW50MTI4SW1wbChzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSks
CisgICAgICAgIFdURjo6TWFrZUludDEyOCgtMSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90
Pjo6bWluKCkpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKDApLCBXVEY6Ok1ha2VJ
bnQxMjgoMCwgMCkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoMSksIFdURjo6TWFr
ZUludDEyOCgwLCAxKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgwLCBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpOworfQorCitURVNUKFdURl9JbnQx
MjgsIEhpZ2hMb3dUZXN0KQoreworICAgIHN0cnVjdCBIaWdoTG93UGFpciB7CisgICAgICAgIGlu
dDY0X3QgaGlnaDsKKyAgICAgICAgdWludDY0X3QgbG93OworICAgIH07CisgICAgSGlnaExvd1Bh
aXIgdmFsdWVzW10geyB7IDAsIDAgfSwgeyAwLCAxIH0sIHsgMSwgMCB9LCB7IDEyMywgNDU2IH0s
IHsgLTY1NCwgMzIxIH0gfTsKKyAgICBmb3IgKGNvbnN0IEhpZ2hMb3dQYWlyJiBwYWlyIDogdmFs
dWVzKSB7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCB2YWx1ZSA9IFdURjo6TWFrZUludDEyOChw
YWlyLmhpZ2gsIHBhaXIubG93KTsKKyAgICAgICAgRVhQRUNUX0VRKHBhaXIubG93LCBXVEY6Oklu
dDEyOExvdzY0KHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShwYWlyLmhpZ2gsIFdURjo6SW50
MTI4SGlnaDY0KHZhbHVlKSk7CisgICAgfQorfQorCitURVNUKFdURl9JbnQxMjgsIExpbWl0c1Rl
c3QpCit7CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgweDdmZmZmZmZmZmZmZmZmZmYs
IDB4ZmZmZmZmZmZmZmZmZmZmZiksCisgICAgICAgIFdURjo6SW50MTI4TWF4KCkpOworICAgIEVY
UEVDVF9FUShXVEY6OkludDEyOE1heCgpLCB+V1RGOjpJbnQxMjhNaW4oKSk7Cit9CisKK1RFU1Qo
V1RGX0ludDEyOCwgQ29uc3RleHByVGVzdCkKK3sKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJ
bXBsIHplcm8gPSBXVEY6OkludDEyOEltcGwoKTsKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJ
bXBsIG9uZSA9IDE7CisgICAgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBtaW51c190d28gPSAt
MjsKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIG1pbiA9IFdURjo6SW50MTI4TWluKCk7
CisgICAgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBtYXggPSBXVEY6OkludDEyOE1heCgpOwor
ICAgIEVYUEVDVF9FUSh6ZXJvLCBXVEY6OkludDEyOEltcGwoMCkpOworICAgIEVYUEVDVF9FUShv
bmUsIFdURjo6SW50MTI4SW1wbCgxKSk7CisgICAgRVhQRUNUX0VRKG1pbnVzX3R3bywgV1RGOjpN
YWtlSW50MTI4KC0xLCAtMikpOworICAgIEVYUEVDVF9HVChtYXgsIG9uZSk7CisgICAgRVhQRUNU
X0xUKG1pbiwgbWludXNfdHdvKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBDb21wYXJpc29uVGVz
dCkKK3sKKyAgICBzdHJ1Y3QgVGVzdENhc2UgeworICAgICAgICBXVEY6OkludDEyOEltcGwgc21h
bGxlcjsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGxhcmdlcjsKKyAgICB9OworICAgIFRlc3RD
YXNlIGNhc2VzW10gPSB7CisgICAgICAgIHsgV1RGOjpJbnQxMjhJbXBsKDApLCBXVEY6OkludDEy
OEltcGwoMTIzKSB9LAorICAgICAgICB7IFdURjo6TWFrZUludDEyOCgtMTIsIDM0KSwgV1RGOjpN
YWtlSW50MTI4KDEyLCAzNCkgfSwKKyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgoMSwgMTAwMCks
IFdURjo6TWFrZUludDEyOCgxMDAwLCAxKSB9LAorICAgICAgICB7IFdURjo6TWFrZUludDEyOCgt
MTAwMCwgMTAwMCksIFdURjo6TWFrZUludDEyOCgtMSwgMSkgfSwKKyAgICB9OworICAgIGZvciAo
Y29uc3QgVGVzdENhc2UmIHBhaXIgOiBjYXNlcykgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0
ZXN0aW5nOjpNZXNzYWdlKCkgPDwgInBhaXIuc21hbGxlciA9ICIgPDwgcGFpci5zbWFsbGVyCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiOyBwYWlyLmxhcmdl
ciA9ICIgPDwgcGFpci5sYXJnZXIpOworCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21hbGxl
ciA9PSBwYWlyLnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAg
IEVYUEVDVF9UUlVFKHBhaXIubGFyZ2VyID09IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRh
YmlsaXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5zbWFsbGVyID09IHBhaXIu
bGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorCisgICAgICAgIEVYUEVDVF9U
UlVFKHBhaXIuc21hbGxlciAhPSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9j
aGVjaykKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhaXIuc21hbGxlciAhPSBwYWlyLnNtYWxsZXIp
OyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9GQUxTRShwYWly
LmxhcmdlciAhPSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKwor
ICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLnNtYWxsZXIgPCBwYWlyLmxhcmdlcik7IC8vIE5PTElO
VChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhaXIubGFyZ2VyIDwg
cGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorCisgICAgICAgIEVY
UEVDVF9UUlVFKHBhaXIubGFyZ2VyID4gcGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmls
aXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5zbWFsbGVyID4gcGFpci5sYXJn
ZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisKKyAgICAgICAgRVhQRUNUX1RSVUUo
cGFpci5zbWFsbGVyIDw9IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNr
KQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5sYXJnZXIgPD0gcGFpci5zbWFsbGVyKTsgLy8g
Tk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLnNtYWxs
ZXIgPD0gcGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAg
ICBFWFBFQ1RfVFJVRShwYWlyLmxhcmdlciA8PSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFk
YWJpbGl0eS9jaGVjaykKKworICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLmxhcmdlciA+PSBwYWly
LnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9G
QUxTRShwYWlyLnNtYWxsZXIgPj0gcGFpci5sYXJnZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkv
Y2hlY2spCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21hbGxlciA+PSBwYWlyLnNtYWxsZXIp
OyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIu
bGFyZ2VyID49IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAg
IH0KK30KKworVEVTVChXVEZfSW50MTI4LCBVbmFyeVBsdXNUZXN0KQoreworICAgIGludDY0X3Qg
dmFsdWVzNjRbXSA9IHsgMCwgMSwgMTIzNDUsIDB4NDAwMDAwMDAwMDAwMDAwMCwKKyAgICAgICAg
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkgfTsKKyAgICBmb3IgKGludDY0X3Qg
dmFsdWUgOiB2YWx1ZXM2NCkgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNz
YWdlKCkgPDwgInZhbHVlID0gIiA8PCB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6
SW50MTI4SW1wbCh2YWx1ZSksICtXVEY6OkludDEyOEltcGwodmFsdWUpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKFdURjo6SW50MTI4SW1wbCgtdmFsdWUpLCArV1RGOjpJbnQxMjhJbXBsKC12YWx1ZSkp
OworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHZhbHVlLCAwKSwgK1dURjo6TWFr
ZUludDEyOCh2YWx1ZSwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KC12
YWx1ZSwgMCksICtXVEY6Ok1ha2VJbnQxMjgoLXZhbHVlLCAwKSk7CisgICAgfQorfQorCitURVNU
KFdURl9JbnQxMjgsIFVuYXJ5TmVnYXRpb25UZXN0KQoreworICAgIGludDY0X3QgdmFsdWVzNjRb
XSA9IHsgMCwgMSwgMTIzNDUsIDB4NDAwMDAwMDAwMDAwMDAwMCwKKyAgICAgICAgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkgfTsKKyAgICBmb3IgKGludDY0X3QgdmFsdWUgOiB2
YWx1ZXM2NCkgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwg
InZhbHVlID0gIiA8PCB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1w
bCgtdmFsdWUpLCAtV1RGOjpJbnQxMjhJbXBsKHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShX
VEY6OkludDEyOEltcGwodmFsdWUpLCAtV1RGOjpJbnQxMjhJbXBsKC12YWx1ZSkpOworICAgICAg
ICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KC12YWx1ZSwgMCksIC1XVEY6Ok1ha2VJbnQxMjgo
dmFsdWUsIDApKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh2YWx1ZSwgMCks
IC1XVEY6Ok1ha2VJbnQxMjgoLXZhbHVlLCAwKSk7CisgICAgfQorfQorCitURVNUKFdURl9JbnQx
MjgsIExvZ2ljYWxOb3RUZXN0KQoreworICAgIEVYUEVDVF9UUlVFKCFXVEY6OkludDEyOEltcGwo
MCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICBFWFBFQ1Rf
RkFMU0UoIVdURjo6TWFrZUludDEyOCgwLCB1aW50NjRfdCB7IDEgfSA8PCBpKSk7CisgICAgfQor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjM7ICsraSkgeworICAgICAgICBFWFBFQ1RfRkFMU0Uo
IVdURjo6TWFrZUludDEyOChpbnQ2NF90IHsgMSB9IDw8IGksIDApKTsKKyAgICB9Cit9CisKK1RF
U1QoV1RGX0ludDEyOCwgQWRkaXRpb25TdWJ0cmFjdGlvblRlc3QpCit7CisgICAgLy8gNjQgYml0
IHBhaXJzIHRoYXQgd2lsbCBub3QgY2F1c2Ugb3ZlcmZsb3cgLyB1bmRlcmZsb3cuIFRoZXNlIHRl
c3QgbmVnYXRpdmUKKyAgICAvLyBjYXJyeTsgcG9zaXRpdmUgY2FycnkgbXVzdCBiZSBjaGVja2Vk
IHNlcGFyYXRlbHkuCisgICAgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+IGNhc2VzW10gewor
ICAgICAgICB7IDAsIDAgfSwgLy8gMCwgMAorICAgICAgICB7IDAsIDI5NDU3ODEyOTA4MzQgfSwg
Ly8gMCwgKworICAgICAgICB7IDE5MDgzNTc2MTkyMzQsIDAgfSwgLy8gKywgMAorICAgICAgICB7
IDAsIC0xMjA0ODk1OTE4MjQ1IH0sIC8vIDAsIC0KKyAgICAgICAgeyAtMjk1NzkyODUyMzU2MCwg
MCB9LCAvLyAtLCAwCisgICAgICAgIHsgODkwMjM5ODIzMTI0NjEsIDk4MzQ2MDEyNTY3MTM0IH0s
IC8vICssICsKKyAgICAgICAgeyAtNjM0NTQyMzQ1NjgyMzksIC0yMzQ1NjIzNTIzMDc3MyB9LCAv
LyAtLCAtCisgICAgICAgIHsgOTgyNjM0NTcyNjM1MDIsIC0yMTQyODU2MTkzNTkyNSB9LCAvLyAr
LCAtCisgICAgICAgIHsgLTg4MjM1MjM3NDM4NDY3LCAxNTkyMzY1OTIzNDU3MyB9LCAvLyAtLCAr
CisgICAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBjYXNlcykgeworICAgICAgICBT
Q09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkKKyAgICAgICAgICAgIDw8ICJwYWlyID0g
eyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBhaXIuc2Vjb25kIDw8ICd9Jyk7CisKKyAgICAg
ICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0ICsgcGFpci5zZWNvbmQpLAor
ICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpICsgV1RGOjpJbnQxMjhJbXBs
KHBhaXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5z
ZWNvbmQgKyBwYWlyLmZpcnN0KSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLnNl
Y29uZCkgKz0gV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpKTsKKworICAgICAgICBFWFBFQ1Rf
RVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgLSBwYWlyLnNlY29uZCksCisgICAgICAgICAg
ICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgLSBXVEY6OkludDEyOEltcGwocGFpci5zZWNv
bmQpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCAtIHBh
aXIuZmlyc3QpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSAtPSBX
VEY6OkludDEyOEltcGwocGFpci5maXJzdCkpOworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAg
ICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCArIHBhaXIuZmlyc3QsIDApLAorICAg
ICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSArIFdURjo6TWFrZUludDEy
OChwYWlyLmZpcnN0LCAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6
TWFrZUludDEyOChwYWlyLmZpcnN0ICsgcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RG
OjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApICs9IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29u
ZCwgMCkpOworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEy
OChwYWlyLnNlY29uZCAtIHBhaXIuZmlyc3QsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50
MTI4KHBhaXIuc2Vjb25kLCAwKSAtIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0
IC0gcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmly
c3QsIDApIC09IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgIH0KKworICAg
IC8vIGNoZWNrIHBvc2l0aXZlIGNhcnJ5CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgz
MSwgMCksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgyMCwgMSkgKyBXVEY6Ok1ha2VJbnQxMjgo
MTAsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpOworfQorCitURVNUKFdU
Rl9JbnQxMjgsIEluY3JlbWVudERlY3JlbWVudFRlc3QpCit7CisgICAgV1RGOjpJbnQxMjhJbXBs
IHZhbHVlID0gMDsKKyAgICBFWFBFQ1RfRVEoMCwgdmFsdWUrKyk7CisgICAgRVhQRUNUX0VRKDEs
IHZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoMSwgdmFsdWUtLSk7CisgICAgRVhQRUNUX0VRKDAsIHZh
bHVlKTsKKyAgICBFWFBFQ1RfRVEoLTEsIC0tdmFsdWUpOworICAgIEVYUEVDVF9FUSgtMSwgdmFs
dWUpOworICAgIEVYUEVDVF9FUSgwLCArK3ZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoMCwgdmFsdWUp
OworfQorCitURVNUKFdURl9JbnQxMjgsIE11bHRpcGxpY2F0aW9uVGVzdCkKK3sKKyAgICAvLyAx
IGJpdCB4IDEgYml0LCBhbmQgbmVnYXRpdmUgY29tYmluYXRpb25zCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTI3IC0gaTsg
KytqKSB7CisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwg
ImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBXVEY6OkludDEyOElt
cGwgYSA9IFdURjo6SW50MTI4SW1wbCgxKSA8PCBpOworICAgICAgICAgICAgV1RGOjpJbnQxMjhJ
bXBsIGIgPSBXVEY6OkludDEyOEltcGwoMSkgPDwgajsKKyAgICAgICAgICAgIFdURjo6SW50MTI4
SW1wbCBjID0gV1RGOjpJbnQxMjhJbXBsKDEpIDw8IChpICsgaik7CisKKyAgICAgICAgICAgIEVY
UEVDVF9FUShjLCBhICogYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIC1hICogYik7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIGEgKiAtYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
YywgLWEgKiAtYik7CisKKyAgICAgICAgICAgIEVYUEVDVF9FUShjLCBXVEY6OkludDEyOEltcGwo
YSkgKj0gYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIFdURjo6SW50MTI4SW1wbCgtYSkg
Kj0gYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIFdURjo6SW50MTI4SW1wbChhKSAqPSAt
Yik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoYywgV1RGOjpJbnQxMjhJbXBsKC1hKSAqPSAtYik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYWlycyBvZiByYW5kb20gdmFsdWVzIHRoYXQg
d2lsbCBub3Qgb3ZlcmZsb3cgc2lnbmVkIDY0LWJpdCBtdWx0aXBsaWNhdGlvbgorICAgIHN0ZDo6
cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiBzbWFsbF92YWx1ZXNbXSA9IHsKKyAgICAgICAgeyAweDVl
NjEsIDB4ZjI5Zjc5Y2ExNGI0IH0sIC8vICssICsKKyAgICAgICAgeyAweDNlMDMzYiwgLTB4NjEy
YzBlZTU0OSB9LCAvLyArLCAtCisgICAgICAgIHsgLTB4MDUyY2U3ZTgsIDB4N2M3MjhmMGYgfSwg
Ly8gLSwgKworICAgICAgICB7IC0weDNhZjcwNTQ2MjYsIC0weGZiMWUxZCB9LCAvLyAtLCAtCisg
ICAgfTsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiYgcGFpciA6
IHNtYWxsX3ZhbHVlcykgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdl
KCkKKyAgICAgICAgICAgIDw8ICJwYWlyID0geyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBh
aXIuc2Vjb25kIDw8ICd9Jyk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChw
YWlyLmZpcnN0ICogcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBh
aXIuZmlyc3QpICogV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVD
VF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJzdCAqIHBhaXIuc2Vjb25kKSwKKyAgICAgICAg
ICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0KSAqPSBXVEY6OkludDEyOEltcGwocGFpci5z
ZWNvbmQpKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3Qg
KiBwYWlyLnNlY29uZCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJz
dCwgMCkgKiBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKyAgICAgICAgRVhQRUNUX0VR
KFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0ICogcGFpci5zZWNvbmQsIDApLAorICAgICAgICAg
ICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApICo9IFdURjo6SW50MTI4SW1wbChwYWly
LnNlY29uZCkpOworICAgIH0KKworICAgIC8vIFBhaXJzIG9mIHBvc2l0aXZlIHJhbmRvbSB2YWx1
ZXMgdGhhdCB3aWxsIG5vdCBvdmVyZmxvdyA2NC1iaXQKKyAgICAvLyBtdWx0aXBsaWNhdGlvbiBh
bmQgY2FuIGJlIGxlZnQgc2hpZnRlZCBieSAzMiB3aXRob3V0IG92ZXJmbG93CisgICAgc3RkOjpw
YWlyPGludDY0X3QsIGludDY0X3Q+IHNtYWxsX3ZhbHVlczJbXSA9IHsKKyAgICAgICAgeyAweDFi
YjBhMTEwLCAweDMxNDg3NjcxIH0sCisgICAgICAgIHsgMHg0NzkyNzg0ZSwgMHgyOGFkZDdkNyB9
LAorICAgICAgICB7IDB4N2I2NjU1M2EsIDB4MTFkZmY4ZWYgfSwKKyAgICB9OworICAgIGZvciAo
Y29uc3Qgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+JiBwYWlyIDogc21hbGxfdmFsdWVzMikg
eworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkKKyAgICAgICAgICAg
IDw8ICJwYWlyID0geyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBhaXIuc2Vjb25kIDw8ICd9
Jyk7CisKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGEgPSBXVEY6OkludDEyOEltcGwocGFpci5m
aXJzdCA8PCAzMik7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBiID0gV1RGOjpJbnQxMjhJbXBs
KHBhaXIuc2Vjb25kIDw8IDMyKTsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGMgPSBXVEY6Ok1h
a2VJbnQxMjgocGFpci5maXJzdCAqIHBhaXIuc2Vjb25kLCAwKTsKKworICAgICAgICBFWFBFQ1Rf
RVEoYywgYSAqIGIpOworICAgICAgICBFWFBFQ1RfRVEoLWMsIC1hICogYik7CisgICAgICAgIEVY
UEVDVF9FUSgtYywgYSAqIC1iKTsKKyAgICAgICAgRVhQRUNUX0VRKGMsIC1hICogLWIpOworCisg
ICAgICAgIEVYUEVDVF9FUShjLCBXVEY6OkludDEyOEltcGwoYSkgKj0gYik7CisgICAgICAgIEVY
UEVDVF9FUSgtYywgV1RGOjpJbnQxMjhJbXBsKC1hKSAqPSBiKTsKKyAgICAgICAgRVhQRUNUX0VR
KC1jLCBXVEY6OkludDEyOEltcGwoYSkgKj0gLWIpOworICAgICAgICBFWFBFQ1RfRVEoYywgV1RG
OjpJbnQxMjhJbXBsKC1hKSAqPSAtYik7CisgICAgfQorCisgICAgLy8gY2hlY2sgMCwgMSwgYW5k
IC0xIGJlaGF2aW9yIHdpdGggbGFyZ2UgdmFsdWVzCisgICAgV1RGOjpJbnQxMjhJbXBsIGxhcmdl
X3ZhbHVlc1tdID0geworICAgICAgICB7IFdURjo6TWFrZUludDEyOCgweGQ2NmYwNjFhZjAyZDA0
MDgsIDB4NzI3ZDI4NDZjYjQ3NWI1MykgfSwKKyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgoMHgy
N2I4ZDVlZDYxMDQ0NTJkLCAweDAzZjhhMzNiMGVlMWRmNGYpIH0sCisgICAgICAgIHsgLVdURjo6
TWFrZUludDEyOCgweDYyMWI2NjI2YjllOGQwNDIsIDB4MjczMTFhYzk5ZGYwMDkzOCkgfSwKKyAg
ICAgICAgeyAtV1RGOjpNYWtlSW50MTI4KDB4MzRlMDY1NmYxZTk1ZmI2MCwgMHg0MjgxY2ZkNzMx
MjU3YTQ3KSB9LAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiBsYXJn
ZV92YWx1ZXMpIHsKKyAgICAgICAgRVhQRUNUX0VRKDAsIDAgKiB2YWx1ZSk7CisgICAgICAgIEVY
UEVDVF9FUSgwLCB2YWx1ZSAqIDApOworICAgICAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJ
bXBsKDApICo9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHZhbHVlICo9IDApOworCisg
ICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgMSAqIHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKHZh
bHVlLCB2YWx1ZSAqIDEpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIFdURjo6SW50MTI4SW1w
bCgxKSAqPSB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgKj0gMSk7CisK
KyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgLTEgKiB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9F
USgtdmFsdWUsIHZhbHVlICogLTEpOworICAgICAgICBFWFBFQ1RfRVEoLXZhbHVlLCBXVEY6Oklu
dDEyOEltcGwoLTEpICo9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgdmFsdWUg
Kj0gLTEpOworICAgIH0KKworICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0ZWQgcmFuZG9tIGxhcmdl
IHZhbHVlIGNhc2VzCisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgweGNkMGVmZDM0NDIy
MTliYiwgMHhkZTQ3YzA1YmNkOWRmNmUxKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4N2M2
NDQ4LCAweDNiYzQyODVjNDdhOWQyNTMpICogMHgxYTYwMzc1MzdiKTsKKyAgICBFWFBFQ1RfRVEo
LVdURjo6TWFrZUludDEyOCgweDFmOGYxNDk4NTBiMWU1ZTYsIDB4MWU1MGQ2YjUyZDI3MmMzZSks
CisgICAgICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHgyMywgMHgyZTY4YTUxM2NhMWI4ODU5KSAqIDB4
ZTVhNDM0Y2QxNDg2NmUpOworICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtlSW50MTI4KDB4NTVjYWU3
MzIwMjlkMWZjZSwgMHhjYTY0NzRiNjQyMzI2M2U0KSwKKyAgICAgICAgMHhhOWI5OGE4ZGRmNjZi
YyAqIC1XVEY6Ok1ha2VJbnQxMjgoMHg4MSwgMHg2NzJlNTgyMzFlMjQ2OWQ3KSk7CisgICAgRVhQ
RUNUX0VRKFdURjo6TWFrZUludDEyOCgweDE5YzhiNzYyMGI1MDdkYzQsIDB4ZmVjMDQyYjcxYTVm
MjlhNCksCisgICAgICAgIC0weDNlMzkzNDExNDcgKiAtV1RGOjpNYWtlSW50MTI4KDB4NmExNGIy
LCAweDVlZDM0Y2NhNDIzMjdiM2MpKTsKKworICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgo
MHhjZDBlZmQzNDQyMjE5YmIsIDB4ZGU0N2MwNWJjZDlkZjZlMSksCisgICAgICAgIFdURjo6TWFr
ZUludDEyOCgweDdjNjQ0OCwgMHgzYmM0Mjg1YzQ3YTlkMjUzKSAqPSAweDFhNjAzNzUzN2IpOwor
ICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtlSW50MTI4KDB4MWY4ZjE0OTg1MGIxZTVlNiwgMHgxZTUw
ZDZiNTJkMjcyYzNlKSwKKyAgICAgICAgLVdURjo6TWFrZUludDEyOCgweDIzLCAweDJlNjhhNTEz
Y2ExYjg4NTkpICo9IDB4ZTVhNDM0Y2QxNDg2NmUpOworICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtl
SW50MTI4KDB4NTVjYWU3MzIwMjlkMWZjZSwgMHhjYTY0NzRiNjQyMzI2M2U0KSwKKyAgICAgICAg
V1RGOjpJbnQxMjhJbXBsKDB4YTliOThhOGRkZjY2YmMpICo9IC1XVEY6Ok1ha2VJbnQxMjgoMHg4
MSwgMHg2NzJlNTgyMzFlMjQ2OWQ3KSk7CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgw
eDE5YzhiNzYyMGI1MDdkYzQsIDB4ZmVjMDQyYjcxYTVmMjlhNCksCisgICAgICAgIFdURjo6SW50
MTI4SW1wbCgtMHgzZTM5MzQxMTQ3KSAqPSAtV1RGOjpNYWtlSW50MTI4KDB4NmExNGIyLCAweDVl
ZDM0Y2NhNDIzMjdiM2MpKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBEaXZpc2lvbkFuZE1vZHVs
b1Rlc3QpCit7CisgICAgLy8gQ2hlY2sgYWdhaW5zdCA2NCBiaXQgZGl2aXNpb24gYW5kIG1vZHVs
byBvcGVyYXRvcnMgd2l0aCBhIHNhbXBsZSBvZgorICAgIC8vIHJhbmRvbWx5IGdlbmVyYXRlZCBw
YWlycy4KKyAgICBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gc21hbGxfcGFpcnNbXSA9IHsK
KyAgICAgICAgeyAweDE1ZjJhNjQxMzgsIDB4NjdkYTA1IH0sCisgICAgICAgIHsgMHg1ZTU2ZDE5
NGFmNDMwNDVmLCAweGNmMTU0M2ZiOTkgfSwKKyAgICAgICAgeyAweDE1ZTYxZWQwNTIwMzZhLCAt
MHhjOGU2IH0sCisgICAgICAgIHsgMHg4ODEyNWEzNDFlODUsIC0weGQyM2ZiNzc2ODMgfSwKKyAg
ICAgICAgeyAtMHhjMDZlMjAsIDB4NWEgfSwKKyAgICAgICAgeyAtMHg0ZjEwMDIxOWFlYTNlODVk
LCAweGRjYzU2Y2I0ZWZlOTkzIH0sCisgICAgICAgIHsgLTB4MTY4ZDYyOTEwNSwgLTB4YTcgfSwK
KyAgICAgICAgeyAtMHg3YjQ0ZTkyZjAzYWIyMzc1LCAtMHg2NTE2IH0sCisgICAgfTsKKyAgICBm
b3IgKGNvbnN0IHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiYgcGFpciA6IHNtYWxsX3BhaXJz
KSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAg
ICAgPDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5zZWNvbmQgPDwg
J30nKTsKKworICAgICAgICBXVEY6OkludDEyOEltcGwgZGl2aWRlbmQgPSBwYWlyLmZpcnN0Owor
ICAgICAgICBXVEY6OkludDEyOEltcGwgZGl2aXNvciA9IHBhaXIuc2Vjb25kOworICAgICAgICBp
bnQ2NF90IHF1b3RpZW50ID0gcGFpci5maXJzdCAvIHBhaXIuc2Vjb25kOworICAgICAgICBpbnQ2
NF90IHJlbWFpbmRlciA9IHBhaXIuZmlyc3QgJSBwYWlyLnNlY29uZDsKKworICAgICAgICBFWFBF
Q1RfRVEocXVvdGllbnQsIGRpdmlkZW5kIC8gZGl2aXNvcik7CisgICAgICAgIEVYUEVDVF9FUShx
dW90aWVudCwgV1RGOjpJbnQxMjhJbXBsKGRpdmlkZW5kKSAvPSBkaXZpc29yKTsKKyAgICAgICAg
RVhQRUNUX0VRKHJlbWFpbmRlciwgZGl2aWRlbmQgJSBkaXZpc29yKTsKKyAgICAgICAgRVhQRUNU
X0VRKHJlbWFpbmRlciwgV1RGOjpJbnQxMjhJbXBsKGRpdmlkZW5kKSAlPSBkaXZpc29yKTsKKyAg
ICB9CisKKyAgICAvLyBUZXN0IGJlaGF2aW9yIHdpdGggMCwgMSwgYW5kIC0xIHdpdGggYSBzYW1w
bGUgb2YgcmFuZG9tbHkgZ2VuZXJhdGVkIGxhcmdlCisgICAgLy8gdmFsdWVzLgorICAgIFdURjo6
SW50MTI4SW1wbCB2YWx1ZXNbXSA9IHsKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4NjNkMjZl
ZTY4OGE5NjJiMiwgMHg5ZTE0MTFhYmRhNWMxZDcwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4
KDB4MTUyZjM4NTE1OWQ2Zjk4NiwgMHhiZjhkNDhlZjYzZGEzOTVkKSwKKyAgICAgICAgLVdURjo6
TWFrZUludDEyOCgweDMwOThkNzU2NzAzMDAzOGMsIDB4MTRlN2E4YTA5OGRjMjE2NCksCisgICAg
ICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHg0OWEwMzdhY2EzNWM4MDlmLCAweGE2YTg3NTI1NDgwZWYz
MzApLAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiB2YWx1ZXMpIHsK
KyAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJ2YWx1ZSA9ICIg
PDwgdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSgwLCAwIC8gdmFsdWUpOworICAgICAgICBF
WFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKDApIC89IHZhbHVlKTsKKyAgICAgICAgRVhQRUNU
X0VRKDAsIDAgJSB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwo
MCkgJT0gdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgLyAxKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwodmFsdWUpIC89IDEpOworICAg
ICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgJSAxKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFdURjo6
SW50MTI4SW1wbCh2YWx1ZSkgJT0gMSk7CisKKyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgdmFs
dWUgLyAtMSk7CisgICAgICAgIEVYUEVDVF9FUSgtdmFsdWUsIFdURjo6SW50MTI4SW1wbCh2YWx1
ZSkgLz0gLTEpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgJSAtMSk7CisgICAgICAgIEVY
UEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwodmFsdWUpICU9IC0xKTsKKyAgICB9CisKKyAgICAv
LyBNaW4gYW5kIG1heCB2YWx1ZXMKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhNYXgoKSAv
IFdURjo6SW50MTI4TWluKCkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOE1heCgpLCBXVEY6
OkludDEyOE1heCgpICUgV1RGOjpJbnQxMjhNaW4oKSk7CisgICAgRVhQRUNUX0VRKC0xLCBXVEY6
OkludDEyOE1pbigpIC8gV1RGOjpJbnQxMjhNYXgoKSk7CisgICAgRVhQRUNUX0VRKC0xLCBXVEY6
OkludDEyOE1pbigpICUgV1RGOjpJbnQxMjhNYXgoKSk7CisKKyAgICAvLyBQb3dlciBvZiB0d28g
ZGl2aXNpb24gYW5kIG1vZHVsbyBvZiByYW5kb20gbGFyZ2UgZGl2aWRlbmRzCisgICAgV1RGOjpJ
bnQxMjhJbXBsIHBvc2l0aXZlX3ZhbHVlc1tdID0geworICAgICAgICBXVEY6Ok1ha2VJbnQxMjgo
MHgyMWUxYTFjYzY5NTc0NjIwLCAweGU3YWM0NDdmYWIyZmM4NjkpLAorICAgICAgICBXVEY6Ok1h
a2VJbnQxMjgoMHgzMmMyZmYzYWI4OWU2NmU4LCAweDAzMzc5YTYxM2ZkMWNlNzQpLAorICAgICAg
ICBXVEY6Ok1ha2VJbnQxMjgoMHg2ZjMyY2E3ODYxODRkY2FmLCAweDA0NmY5YzllY2IzYTljZTEp
LAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHgxYWViNDY5ZGQ5OTBlMGVlLCAweGRhMjc0MGYy
NDNjZDM3ZWIpLAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiBwb3Np
dGl2ZV92YWx1ZXMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMjc7ICsraSkgewor
ICAgICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpCisgICAgICAgICAg
ICAgICAgPDwgInZhbHVlID0gIiA8PCB2YWx1ZSA8PCAiOyBpID0gIiA8PCBpKTsKKyAgICAgICAg
ICAgIFdURjo6SW50MTI4SW1wbCBwb3dlcl9vZl90d28gPSBXVEY6OkludDEyOEltcGwoMSkgPDwg
aTsKKworICAgICAgICAgICAgRVhQRUNUX0VRKHZhbHVlID4+IGksIHZhbHVlIC8gcG93ZXJfb2Zf
dHdvKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSA+PiBpLCBXVEY6OkludDEyOEltcGwo
dmFsdWUpIC89IHBvd2VyX29mX3R3byk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWUgJiAo
cG93ZXJfb2ZfdHdvIC0gMSksIHZhbHVlICUgcG93ZXJfb2ZfdHdvKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSh2YWx1ZSAmIChwb3dlcl9vZl90d28gLSAxKSwKKyAgICAgICAgICAgICAgICBXVEY6
OkludDEyOEltcGwodmFsdWUpICU9IHBvd2VyX29mX3R3byk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBNYW51YWxseSBjYWxjdWxhdGVkIGNhc2VzIHdpdGggcmFuZG9tIGxhcmdlIGRpdmlk
ZW5kcworICAgIHN0cnVjdCBEaXZpc2lvbk1vZENhc2UgeworICAgICAgICBXVEY6OkludDEyOElt
cGwgZGl2aWRlbmQ7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBkaXZpc29yOworICAgICAgICBX
VEY6OkludDEyOEltcGwgcXVvdGllbnQ7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCByZW1haW5k
ZXI7CisgICAgfTsKKyAgICBEaXZpc2lvbk1vZENhc2UgbWFudWFsX2Nhc2VzW10gPSB7CisgICAg
ICAgIHsgV1RGOjpNYWtlSW50MTI4KDB4NmFkYTQ4ZDQ4OTAwNzk2NiwgMHgzYzljNWM5ODE1MGQ1
ZDY5KSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCgweDhiYzMwOGZiLCAweDhjYjljYzlh
M2I4MDMzNDQpLCAweGMzYjg3ZTA4LAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4MWI3
ZGI1ZTEsIDB4ZDllY2EzNGI3YWYwNGI0OSkgfSwKKyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgo
MHhkNjk0NjUxMWI1YiwgMHg0ODg2YzVjOTY1NDZiZjVmKSwKKyAgICAgICAgICAgIC1XVEY6Ok1h
a2VJbnQxMjgoMHgyNjNiLCAweGZkNTE2Mjc5ZWZjZmUyZGMpLCAtMHg1OWNiYWJmMCwKKyAgICAg
ICAgICAgIFdURjo6TWFrZUludDEyOCgweDYyMiwgMHhmNDYyOTA5MTU1NjUxZDFmKSB9LAorICAg
ICAgICB7IC1XVEY6Ok1ha2VJbnQxMjgoMHgzM2RiNzM0ZjllOGQxMzk5LCAweDg0NDdhYzkyNDgy
YmNhNGQpLCAweDM3NDk1MDc4MjQwLAorICAgICAgICAgICAgLVdURjo6TWFrZUludDEyOCgweGYw
MWYxLCAweGJjMDM2OGJmOWE3N2VhZTgpLCAtMHgyMWE1MDhmNDA0ZCB9LAorICAgICAgICB7IC1X
VEY6Ok1ha2VJbnQxMjgoMHgxM2Y4MzdiNDA5YTA3ZTdkLCAweDdmYzhlMjQ4YTdkNzM1NjApLCAt
MHgxYjlmLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4YjkxNTc1NTZkNzI0LCAweGIx
NGY2MzU3MTRkNzU2M2UpLCAtMHgxYWRlIH0sCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IERpdmlz
aW9uTW9kQ2FzZSB0ZXN0X2Nhc2UgOiBtYW51YWxfY2FzZXMpIHsKKyAgICAgICAgRVhQRUNUX0VR
KHRlc3RfY2FzZS5xdW90aWVudCwgdGVzdF9jYXNlLmRpdmlkZW5kIC8gdGVzdF9jYXNlLmRpdmlz
b3IpOworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnF1b3RpZW50LAorICAgICAgICAgICAg
V1RGOjpJbnQxMjhJbXBsKHRlc3RfY2FzZS5kaXZpZGVuZCkgLz0gdGVzdF9jYXNlLmRpdmlzb3Ip
OworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnJlbWFpbmRlciwgdGVzdF9jYXNlLmRpdmlk
ZW5kICUgdGVzdF9jYXNlLmRpdmlzb3IpOworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnJl
bWFpbmRlciwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbCh0ZXN0X2Nhc2UuZGl2aWRlbmQp
ICU9IHRlc3RfY2FzZS5kaXZpc29yKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgQml0
d2lzZUxvZ2ljVGVzdCkKK3sKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKC0xKSwgfldU
Rjo6SW50MTI4SW1wbCgwKSk7CisKKyAgICBXVEY6OkludDEyOEltcGwgdmFsdWVzW10geworICAg
ICAgICAwLCAtMSwgMHhkZTQwMGJlZTA1YzNmZjZiLCBXVEY6Ok1ha2VJbnQxMjgoMHg3ZjMyMTc4
ZGQ4MWQ2MzRhLCAwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4YWY1MzkwNTcwNTU2MTNh
OSwgMHg3ZDEwNGQ3ZDk0NmMyZTRkKQorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwg
dmFsdWUgOiB2YWx1ZXMpIHsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB+fnZhbHVlKTsKKwor
ICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIHZhbHVlIHwgdmFsdWUpOworICAgICAgICBFWFBFQ1Rf
RVEodmFsdWUsIHZhbHVlICYgdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgXiB2
YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwodmFsdWUp
IHw9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwodmFs
dWUpICY9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbCh2YWx1
ZSkgXj0gdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgfCAwKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDAsIHZhbHVlICYgMCk7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwg
dmFsdWUgXiAwKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKC0xKSwgdmFs
dWUgfCBXVEY6OkludDEyOEltcGwoLTEpKTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB2YWx1
ZSAmIFdURjo6SW50MTI4SW1wbCgtMSkpOworICAgICAgICBFWFBFQ1RfRVEofnZhbHVlLCB2YWx1
ZSBeIFdURjo6SW50MTI4SW1wbCgtMSkpOworICAgIH0KKworICAgIC8vIHNtYWxsIHNhbXBsZSBv
ZiByYW5kb21seSBnZW5lcmF0ZWQgaW50NjRfdCdzCisgICAgc3RkOjpwYWlyPGludDY0X3QsIGlu
dDY0X3Q+IHBhaXJzNjRbXSB7CisgICAgICAgIHsgMHg3Zjg2Nzk3ZjVlOTkxYWY0LCAweDFlZTMw
NDk0ZmIwMDdjOTcgfSwKKyAgICAgICAgeyAweDBiMjc4MjgyYmFjZjAxYWYsIDB4NTg3ODBlMGE1
N2E0OWU4NiB9LAorICAgICAgICB7IDB4MDU5ZjI2NmNjYjkzYTY2NiwgMHgzZDViNzMxYmFlOTI4
NmY1IH0sCisgICAgICAgIHsgMHg2M2MwYzQ4MjBmMTIxMDhjLCAweDU4MTY2NzEzYzEyZTFjM2Eg
fSwKKyAgICAgICAgeyAweDM4MTQ4OGJiMmVkMmE2NmUsIDB4MjIyMGEzZWI3NmEzNjk4YyB9LAor
ICAgICAgICB7IDB4MmEwYTBkZmI4MWUwNmYyMSwgMHg0YjYwNTg1OTI3ZjU1MjNjIH0sCisgICAg
ICAgIHsgMHg1NTViMWMzYTAzNjk4NTM3LCAweDI1NDc4Y2QxOWQ4ZTUzY2IgfSwKKyAgICAgICAg
eyAweDQ3NTBmNmYyN2Q3NzkyMjUsIDB4MTYzOTc1NTNjNmZmMDVmYyB9LAorICAgIH07CisgICAg
Zm9yIChjb25zdCBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4mIHBhaXIgOiBwYWlyczY0KSB7
CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAgICAg
PDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5zZWNvbmQgPDwgJ30n
KTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KH5wYWlyLmZpcnN0LCB+cGFp
ci5zZWNvbmQpLAorICAgICAgICAgICAgfldURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCBwYWly
LnNlY29uZCkpOworCisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJz
dCAmIHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0
KSAmIFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgfCBwYWlyLnNlY29uZCksCisgICAgICAgICAgICBXVEY6
OkludDEyOEltcGwocGFpci5maXJzdCkgfCBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsK
KyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0IF4gcGFpci5zZWNv
bmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpIF4gV1RGOjpJbnQx
MjhJbXBsKHBhaXIuc2Vjb25kKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1w
bChwYWlyLmZpcnN0ICYgcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBs
KHBhaXIuZmlyc3QpICY9IFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworICAgICAgICBF
WFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgfCBwYWlyLnNlY29uZCksCisgICAg
ICAgICAgICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgfD0gV1RGOjpJbnQxMjhJbXBsKHBh
aXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJz
dCBeIHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0
KSBePSBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKworICAgICAgICBFWFBFQ1RfRVEo
CisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCAmIHBhaXIuc2Vjb25kLCAw
KSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSAmIFdURjo6TWFr
ZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoCisgICAgICAgICAg
ICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCB8IHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAg
ICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSB8IFdURjo6TWFrZUludDEyOChwYWly
LnNlY29uZCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoCisgICAgICAgICAgICBXVEY6Ok1ha2VJ
bnQxMjgocGFpci5maXJzdCBeIHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFr
ZUludDEyOChwYWlyLmZpcnN0LCAwKSBeIFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkp
OworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWly
LmZpcnN0ICYgcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBh
aXIuZmlyc3QsIDApICY9IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgICAg
ICBFWFBFQ1RfRVEoCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCB8IHBh
aXIuc2Vjb25kLCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAw
KSB8PSBXVEY6Ok1ha2VJbnQxMjgocGFpci5zZWNvbmQsIDApKTsKKyAgICAgICAgRVhQRUNUX0VR
KAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QgXiBwYWlyLnNlY29uZCwg
MCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCwgMCkgXj0gV1RGOjpN
YWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisgICAgfQorfQorCitURVNUKFdURl9JbnQxMjgs
IEJpdHdpc2VTaGlmdFRlc3QpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7
CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IGk7ICsraikgeworICAgICAgICAgICAgLy8g
TGVmdCBzaGlmdCBmcm9tIGotdGggYml0IHRvIGktdGggYml0LgorICAgICAgICAgICAgU0NPUEVE
X1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7IGogPSAiIDw8
IGopOworICAgICAgICAgICAgRVhQRUNUX0VRKHVpbnQ2NF90IHsgMSB9IDw8IGksIFdURjo6SW50
MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA8PCAoaSAtIGopKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSh1aW50NjRfdCB7IDEgfSA8PCBpLCBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAx
IH0gPDwgaikgPDw9IChpIC0gaikpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgNjM7ICsraSkgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDY0OyArK2op
IHsKKyAgICAgICAgICAgIC8vIExlZnQgc2hpZnQgZnJvbSBqLXRoIGJpdCB0byAoaSArIDY0KS10
aCBiaXQuCisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwg
ImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGksIDApLAorICAgICAgICAgICAgICAgIFdU
Rjo6SW50MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA8PCAoaSArIDY0IC0gaikpOworICAg
ICAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBpLCAw
KSwKKyAgICAgICAgICAgICAgICBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAxIH0gPDwgaikg
PDw9IChpICsgNjQgLSBqKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PD0gaTsgKytqKSB7CisgICAgICAgICAgICAvLyBMZWZ0IHNoaWZ0IGZyb20gKGogKyA2NCktdGgg
Yml0IHRvIChpICsgNjQpLXRoIGJpdC4KKyAgICAgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rp
bmc6Ok1lc3NhZ2UoKSA8PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBqKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwgaSwgMCksCisg
ICAgICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGosIDApIDw8
IChpIC0gaikpOworICAgICAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRf
dCB7IDEgfSA8PCBpLCAwKSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0
X3QgeyAxIH0gPDwgaiwgMCkgPDw9IChpIC0gaikpOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSBpOyBq
IDwgNjQ7ICsraikgeworICAgICAgICAgICAgLy8gUmlnaHQgc2hpZnQgZnJvbSBqLXRoIGJpdCB0
byBpLXRoIGJpdC4KKyAgICAgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2Uo
KSA8PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBqKTsKKyAgICAgICAgICAgIEVYUEVDVF9F
USh1aW50NjRfdCB7IDEgfSA8PCBpLCBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAxIH0gPDwg
aikgPj4gKGogLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodWludDY0X3QgeyAxIH0gPDwg
aSwgV1RGOjpJbnQxMjhJbXBsKHVpbnQ2NF90IHsgMSB9IDw8IGopID4+PSAoaiAtIGkpKTsKKyAg
ICAgICAgfQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDYzOyArK2opIHsKKyAgICAgICAg
ICAgIC8vIFJpZ2h0IHNoaWZ0IGZyb20gKGogKyA2NCktdGggYml0IHRvIGktdGggYml0LgorICAg
ICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBp
IDw8ICI7IGogPSAiIDw8IGopOworICAgICAgICAgICAgRVhQRUNUX0VRKHVpbnQ2NF90IHsgMSB9
IDw8IGksCisgICAgICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8
IGosIDApID4+IChqICsgNjQgLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodWludDY0X3Qg
eyAxIH0gPDwgaSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAx
IH0gPDwgaiwgMCkgPj49IChqICsgNjQgLSBpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA2MzsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSBpOyBqIDwg
NjM7ICsraikgeworICAgICAgICAgICAgLy8gUmlnaHQgc2hpZnQgZnJvbSAoaiArIDY0KS10aCBi
aXQgdG8gKGkgKyA2NCktdGggYml0LgorICAgICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGlu
Zzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7IGogPSAiIDw8IGopOworICAgICAgICAg
ICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBpLCAwKSwKKyAg
ICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwgaiwgMCkgPj4g
KGogLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90
IHsgMSB9IDw8IGksIDApLAorICAgICAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCh1aW50NjRf
dCB7IDEgfSA8PCBqLCAwKSA+Pj0gKGogLSBpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RF
U1QoV1RGX0ludDEyOCwgTnVtZXJpY0xpbWl0c1Rlc3QpCit7CisgICAgc3RhdGljX2Fzc2VydChz
dGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX3NwZWNpYWxpemVkLCAiIik7
CisgICAgc3RhdGljX2Fzc2VydChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46
OmlzX3NpZ25lZCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+Ojppc19pbnRlZ2VyLCAiIik7CisgICAgRVhQRUNUX0VRKHN0YXRpY19j
YXN0PGludD4oMTI3ICogc3RkOjpsb2cxMCgyKSksCisgICAgICAgIHN0ZDo6bnVtZXJpY19saW1p
dHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGlnaXRzMTApOworICAgIEVYUEVDVF9FUShXVEY6OkludDEy
OE1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Om1pbigpKTsKKyAg
ICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhNaW4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6Oklu
dDEyOEltcGw+Ojpsb3dlc3QoKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4TWF4KCksIHN0
ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6bWF4KCkpOworfQogCiB9IC8vIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442111</attachid>
            <date>2021-10-21 20:46:24 -0700</date>
            <delta_ts>2021-10-21 21:18:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232129-20211021204624.patch</filename>
            <type>text/plain</type>
            <size>136252</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYzMmI5ODlkM2IzZmVlZDQ5ZTA1MjMx
Yzk4MjIyNDk0ZjU2NDcyMjEuLmMxZTVlNjM3YjIzZTc2Yzk1ZWNlYzhjN2M4NTU2M2ZkMmQ5MmFj
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTY3IEBACisyMDIxLTEwLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gUmVwbGFjZSBjdXJyZW50IExMVk0gZmxh
bmcncyBJbnQxMjggd2l0aCBhYnNlaWwtY3BwJ3MgSW50MTI4CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIxMjkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBmb3VuZCB0aGF0IGZsYW5nJ3Mgc2lnbmVk
IEludDEyOCBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdGVzdGVkLAorICAgICAgICBhbmQgaXQgaGFz
IHNldmVyYWwgaXNzdWVzIGFib3V0IHNpZ24gZXh0ZW5zaW9uIGFuZCBkaXZpc2lvbi4KKworICAg
ICAgICBJbnN0ZWFkLCB3ZSBpbXBvcnQgYWJzZWlsLWNwcFsxXSdzIGludDEyOCBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgYWJzZWlsLWNwcCBpcyBtb3JlIGJhdHRsZS10ZXN0ZWQsIGFuZCBhYnNl
aWwgaXMgYWxyZWFkeSB1c2VkCisgICAgICAgIGluIFdlYktpdCB0b28gKEFOR0xFIGFuZCBsaWJ3
ZWJydGMgdXNlIGFic2VpbC1jcHAgYXMgdGhlaXIgdXRpbGl0eQorICAgICAgICBsaWJyYXJ5KS4K
KworICAgICAgICBGb3IgQXBwbGUgcmVhZGVycywgYWJzZWlsLWNwcCBmb3IgV2ViS2l0IGlzIGFw
cHJvdmVkIGluIE9TUy0zNTEuCisKKyAgICAgICAgWzFdOiBodHRwczovL2dpdGh1Yi5jb20vYWJz
ZWlsL2Fic2VpbC1jcHAKKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvSW50MTI4LmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbCk6CisgICAg
ICAgIChXVEY6Om9wZXJhdG9yLyk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yJSk6CisgICAgICAg
IChXVEY6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KToKKyAgICAgICAgKiB3dGYvSW50MTI4Lmg6CisgICAgICAgIChXVEY6OlVJbnQxMjhNYXgpOgor
ICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluKToKKyAg
ICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omxvd2VzdCk6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXgpOgorICAg
ICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6ZXBzaWxvbik6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpyb3VuZF9lcnJv
cik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjppbmZp
bml0eSk6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpx
dWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBs
Pjo6c2lnbmFsaW5nX05hTik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjpkZW5vcm1fbWluKToKKyAgICAgICAgKFdURjo6SW50MTI4TWF4KToKKyAgICAg
ICAgKFdURjo6SW50MTI4TWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6bWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bG93ZXN0KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bWF4KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJ
bXBsPjo6ZXBzaWxvbik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4
SW1wbD46OnJvdW5kX2Vycm9yKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6aW5maW5pdHkpOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjpxdWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+OjpzaWduYWxpbmdfTmFOKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGVub3JtX21pbik6CisgICAgICAgIChXVEY6Ok1ha2VV
SW50MTI4KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcjw8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcis9
KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RG
OjpVSW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvci89KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yJT0pOgorICAg
ICAgICAoV1RGOjpVSW50MTI4TG93NjQpOgorICAgICAgICAoV1RGOjpVSW50MTI4SGlnaDY0KToK
KyAgICAgICAgKFdURjo6VUludDEyOEltcGw6OlVJbnQxMjhJbXBsKToKKyAgICAgICAgKFdURjo6
VUludDEyOEltcGw6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4
SW1wbDo6b3BlcmF0b3IgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBjaGFyIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6
Om9wZXJhdG9yIGNoYXIxNl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9w
ZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvciBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBs
OjpvcGVyYXRvciBpbnQgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0
b3IgdW5zaWduZWQgaW50IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBs
b25nIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGZsb2F0IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6b3Bl
cmF0b3I+KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciEpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcn4p
OgorICAgICAgICAoV1RGOjpvcGVyYXRvcnwpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciYpOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcl4pOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3Bl
cmF0b3J8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciY9KToKKyAgICAg
ICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yXj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXVEY6OmludDEyOF9p
bnRlcm5hbDo6QWRkUmVzdWx0KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTdWJz
dHJ1Y3RSZXN1bHQpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpV
SW50MTI4SW1wbDo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVy
YXRvci0tKToKKyAgICAgICAgKFdURjo6TWFrZUludDEyOCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKz0p
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yLz0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciU9KToKKyAgICAgICAg
KFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6
Om9wZXJhdG9yJj0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl49KToKKyAg
ICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I8PD0pOgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6Qml0
Q2FzdFRvU2lnbmVkKToKKyAgICAgICAgKFdURjo6SW50MTI4TG93NjQpOgorICAgICAgICAoV1RG
OjpJbnQxMjhIaWdoNjQpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKToK
KyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6Oklu
dDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMTZfdCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1w
bDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3Igc2hvcnQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJ
bXBsOjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIHVuc2lnbmVkIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciB1
bnNpZ25lZCBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3Ig
bG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0
b3IgZmxvYXQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBkb3Vi
bGUgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJs
ZSBjb25zdCk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6U2lnbmVkQWRkUmVzdWx0
KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTaWduZWRTdWJzdHJ1Y3RSZXN1bHQp
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3ItLSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yKyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9y
fiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yISBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIHN0ZDo6dWlu
dDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRv
ciBzdGQ6OmludDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBs
OjpoaWdoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6bG93IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3ImIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgfCAgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl4gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcjw8IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I+PiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yJSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPD0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6SW50MTI4SW1wbDo6b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OkludDEyOEltcGw6Om9wZXJhdG9yPj0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvcj4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpsZWFkaW5nWmVyb2VzIGNvbnN0KTogRGVsZXRlZC4KKwogMjAyMS0xMC0yMSAgQWRp
dHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBFbmFi
bGUgYWNjZW50LWNvbG9yIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDNlYzAzOTFmN2M3MzdhM2FmMTYyNDczNmJiODUxMmE1MmQ3YjFlNjUu
LmU4MTAwMGRkMGViMWQxMzg4YjdiZmMwZWEyYmQyZGVjYzU3MDk0OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc5LDYgKzE3OSw3IEBACiAJCUUzMTQ5
QTM4MjI4QkI0MkMwMEJGQTZDNyAvKiBSZWZDb3VudGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTAyMENDNjFFQjAwQTAzRENE
IC8qIFJlZkNvdW50ZWRBcnJheS5jcHAgKi87IH07CiAJCUUzMTQ5QTM5MjI4QkI0MzUwMEJGQTZD
NyAvKiBWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5NUI2MzQyMENCNTNDMTAwNDc5NjM1IC8qIFZlY3Rvci5jcHAgKi87IH07CiAJCUUz
MTQ5QTNCMjI4QkRDQUMwMEJGQTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMTQ5QTNBMjI4QkRDQUIwMEJG
QTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAqLzsgfTsKKwkJRTMzNjY3NEEyNzIyNTUxMTAw
MjU5MTIyIC8qIEludDEyOC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzM2Njc0OTI3MjI1NTA5MDAyNTkxMjIgLyogSW50MTI4LmNwcCAqLzsgfTsK
IAkJRTM3RTk2NTQyNzAyQUQwQjAwRTFDMzZBIC8qIEFwcHJveGltYXRlVGltZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzdFOTY1MjI3MDJBRDA3
MDBFMUMzNkEgLyogQXBwcm94aW1hdGVUaW1lLmNwcCAqLzsgfTsKIAkJRTM4ODg4NkYyMEM5MDk1
MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM4ODg4NkQyMEM5MDk1MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wu
Y3BwICovOyB9OwogCQlFMzhDNDEyODFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzhDNDEyNjFFQjRF
MDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi87IH07CkBAIC03NTQsNiArNzU1LDcgQEAKIAkJ
RTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RI
YXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAyRDAwMzRBMDkyIC8qIE5ha2VkUmVmLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ha2VkUmVmLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW50MTI4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJsZUxhbWJkYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNENEMEQwMjI4MTBBMDIwMDIwRDI5OSAvKiBQYWNrZWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTI1LDYgKzExMjcsNyBAQAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxp
bmVBU00uaCAqLywKIAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmgg
Ki8sCiAJCQkJNTE4MkMyMkMxRjJCQzdFNjAwNTlCQTdDIC8qIEluc3RhbmNlQ291bnRlZC5oICov
LAorCQkJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3BwICovLAogCQkJCUY2
RDY3RDMyMjZGOTAxNDIwMDZFMDM0OSAvKiBJbnQxMjguaCAqLywKIAkJCQkzM0ZENDgxMTI2NUNC
MzgwMDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLywKIAkJCQkwRjdFQjg1QjFGQThG
RjQxMDBGMUFCQ0IgLyogSXNvTWFsbG9jLmggKi8sCkBAIC0xNzczLDYgKzE3NzYsNyBAQAogCQkJ
CUE4QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTNCNUI0NEUyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51bWJlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFM0JFMDlBNzI0QTU4NTREMDA5REYyQjQgLyogSUNVSGVscGVycy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlFMzM2Njc0QTI3MjI1NTExMDAyNTkxMjIgLyogSW50MTI4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdBMDUwOTNGMUZCOURDQzUwMEIzM0ZCOCAvKiBKU09OVmFsdWVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzQTMyQkM0MUZDODMwRTIwMDdEN0U3NiAvKiBKU1Zh
bHVlTWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQkNGQzQwMUY2MUQxMzAwMEM5MjIy
QyAvKiBMYW5ndWFnZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NGUzOGFhYTkzMGQ0MTA3MjdlZDM3NDliMmM3NDEyMjM4ZDZhY2FiNS4uYjRmNDczODlkODYwMGI0
ODFkNjQ1Y2UzMWI2N2E3MTQ3YzY3MDI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTQyNSw2
ICs0MjUsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBHcmVnb3JpYW5EYXRlVGltZS5jcHAKICAg
ICBIYXNoVGFibGUuY3BwCiAgICAgSGV4TnVtYmVyLmNwcAorICAgIEludDEyOC5oCiAgICAgSlNP
TlZhbHVlcy5jcHAKICAgICBKU1ZhbHVlTWFsbG9jLmNwcAogICAgIExhbmd1YWdlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW50MTI4LmNwcCBiL1NvdXJjZS9XVEYvd3RmL0ludDEy
OC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjQyOTdiOTUwMTU3MWExYzE2YTY3MWFhYzc5NjI5YzgwZmFjNjk1
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ludDEyOC5jcHAKQEAgLTAsMCAr
MSwzNzEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBBYnNlaWwgQXV0aG9ycy4KKy8vCisvLyBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorLy8KKy8vICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
Ky8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0ludDEyOC5oPgorCisjaW5jbHVkZSA8c3Rk
ZGVmLmg+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxpb21hbmlwPgorI2luY2x1ZGUg
PG9zdHJlYW0+ICAvLyBOT0xJTlQocmVhZGFiaWxpdHkvc3RyZWFtcykKKyNpbmNsdWRlIDxzc3Ry
ZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIHsKKwor
Ly8gUmV0dXJucyB0aGUgMC1iYXNlZCBwb3NpdGlvbiBvZiB0aGUgbGFzdCBzZXQgYml0IChpLmUu
LCBtb3N0IHNpZ25pZmljYW50IGJpdCkKKy8vIGluIHRoZSBnaXZlbiBVSW50MTI4SW1wbC4gVGhl
IGFyZ3VtZW50IGlzIG5vdCAwLgorLy8KKy8vIEZvciBleGFtcGxlOgorLy8gICBHaXZlbjogNSAo
ZGVjaW1hbCkgPT0gMTAxIChiaW5hcnkpCisvLyAgIFJldHVybnM6IDIKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIGludCBGbHMxMjgoVUludDEyOEltcGwgbikgeworICBpZiAodWludDY0X3QgaGkgPSBV
SW50MTI4SGlnaDY0KG4pKSB7CisgICAgQVNTRVJUKGhpICE9IDApOworICAgIHJldHVybiAxMjcg
LSBjbHooaGkpOworICB9CisgIGNvbnN0IHVpbnQ2NF90IGxvdyA9IFVJbnQxMjhMb3c2NChuKTsK
KyAgQVNTRVJUKGxvdyAhPSAwKTsKKyAgcmV0dXJuIDYzIC0gY2x6KGxvdyk7Cit9CisKKy8vIExv
bmcgZGl2aXNpb24vbW9kdWxvIGZvciBVSW50MTI4SW1wbCBpbXBsZW1lbnRlZCB1c2luZyB0aGUg
c2hpZnQtc3VidHJhY3QKKy8vIGRpdmlzaW9uIGFsZ29yaXRobSBhZGFwdGVkIGZyb206CisvLyBo
dHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81Mzg2Mzc3L2RpdmlzaW9uLXdpdGhv
dXQtdXNpbmcKK3N0YXRpYyBpbmxpbmUgdm9pZCBEaXZNb2RJbXBsKFVJbnQxMjhJbXBsIGRpdmlk
ZW5kLCBVSW50MTI4SW1wbCBkaXZpc29yLCBVSW50MTI4SW1wbCogcXVvdGllbnRfcmV0LCBVSW50
MTI4SW1wbCogcmVtYWluZGVyX3JldCkgeworICBhc3NlcnQoZGl2aXNvciAhPSAwKTsKKworICBp
ZiAoZGl2aXNvciA+IGRpdmlkZW5kKSB7CisgICAgKnF1b3RpZW50X3JldCA9IDA7CisgICAgKnJl
bWFpbmRlcl9yZXQgPSBkaXZpZGVuZDsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoZGl2aXNv
ciA9PSBkaXZpZGVuZCkgeworICAgICpxdW90aWVudF9yZXQgPSAxOworICAgICpyZW1haW5kZXJf
cmV0ID0gMDsKKyAgICByZXR1cm47CisgIH0KKworICBVSW50MTI4SW1wbCBkZW5vbWluYXRvciA9
IGRpdmlzb3I7CisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKworICAvLyBMZWZ0IGFsaWdu
cyB0aGUgTVNCIG9mIHRoZSBkZW5vbWluYXRvciBhbmQgdGhlIGRpdmlkZW5kLgorICBjb25zdCBp
bnQgc2hpZnQgPSBGbHMxMjgoZGl2aWRlbmQpIC0gRmxzMTI4KGRlbm9taW5hdG9yKTsKKyAgZGVu
b21pbmF0b3IgPDw9IHNoaWZ0OworCisgIC8vIFVzZXMgc2hpZnQtc3VidHJhY3QgYWxnb3JpdGht
IHRvIGRpdmlkZSBkaXZpZGVuZCBieSBkZW5vbWluYXRvci4gVGhlCisgIC8vIHJlbWFpbmRlciB3
aWxsIGJlIGxlZnQgaW4gZGl2aWRlbmQuCisgIGZvciAoaW50IGkgPSAwOyBpIDw9IHNoaWZ0OyAr
K2kpIHsKKyAgICBxdW90aWVudCA8PD0gMTsKKyAgICBpZiAoZGl2aWRlbmQgPj0gZGVub21pbmF0
b3IpIHsKKyAgICAgIGRpdmlkZW5kIC09IGRlbm9taW5hdG9yOworICAgICAgcXVvdGllbnQgfD0g
MTsKKyAgICB9CisgICAgZGVub21pbmF0b3IgPj49IDE7CisgIH0KKworICAqcXVvdGllbnRfcmV0
ID0gcXVvdGllbnQ7CisgICpyZW1haW5kZXJfcmV0ID0gZGl2aWRlbmQ7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorc3RhdGljIFVJbnQxMjhJbXBsIE1ha2VVSW50MTI4RnJvbUZsb2F0KFQg
dikgeworICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlLCAi
Iik7CisKKyAgLy8gUm91bmRpbmcgYmVoYXZpb3IgaXMgdG93YXJkcyB6ZXJvLCBzYW1lIGFzIGZv
ciBidWlsdC1pbiB0eXBlcy4KKworICAvLyBVbmRlZmluZWQgYmVoYXZpb3IgaWYgdiBpcyBOYU4g
b3IgY2Fubm90IGZpdCBpbnRvIFVJbnQxMjhJbXBsLgorICBhc3NlcnQoc3RkOjppc2Zpbml0ZSh2
KSAmJiB2ID4gLTEgJiYKKyAgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXhfZXhw
b25lbnQgPD0gMTI4IHx8CisgICAgICAgICAgdiA8IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VD4o
MSksIDEyOCkpKTsKKworICBpZiAodiA+PSBzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KDEpLCA2
NCkpIHsKKyAgICB1aW50NjRfdCBoaSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6OmxkZXhw
KHYsIC02NCkpOworICAgIHVpbnQ2NF90IGxvID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYgLSBz
dGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KGhpKSwgNjQpKTsKKyAgICByZXR1cm4gTWFrZVVJbnQx
MjgoaGksIGxvKTsKKyAgfQorCisgIHJldHVybiBNYWtlVUludDEyOCgwLCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4odikpOworfQorCisjaWYgQ09NUElMRVIoQ0xBTkcpICYmICFkZWZpbmVkKF9fU1NF
M19fKQorLy8gV29ya2Fyb3VuZCBmb3IgY2xhbmcgYnVnOiBodHRwczovL2J1Z3MubGx2bS5vcmcv
c2hvd19idWcuY2dpP2lkPTM4Mjg5CisvLyBDYXN0aW5nIGZyb20gbG9uZyBkb3VibGUgdG8gdWlu
dDY0X3QgaXMgbWlzY29tcGlsZWQgYW5kIGRyb3BzIGJpdHMuCisvLyBJdCBpcyBtb3JlIHdvcmss
IHNvIG9ubHkgdXNlIHdoZW4gd2UgbmVlZCB0aGUgd29ya2Fyb3VuZC4KK3N0YXRpYyBVSW50MTI4
SW1wbCBNYWtlVUludDEyOEZyb21GbG9hdChsb25nIGRvdWJsZSB2KSB7CisgIC8vIEdvIDUwIGJp
dHMgYXQgYSB0aW1lLCB0aGF0IGZpdHMgaW4gYSBkb3VibGUKKyAgc3RhdGljX2Fzc2VydChzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmRpZ2l0cyA+PSA1MCwgIiIpOworICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMgPD0gMTUwLCAiIik7
CisgIC8vIFVuZGVmaW5lZCBiZWhhdmlvciBpZiB2IGlzIG5vdCBmaW5pdGUgb3IgY2Fubm90IGZp
dCBpbnRvIFVJbnQxMjhJbXBsLgorICBhc3NlcnQoc3RkOjppc2Zpbml0ZSh2KSAmJiB2ID4gLTEg
JiYgdiA8IHN0ZDo6bGRleHAoMS4wTCwgMTI4KSk7CisKKyAgdiA9IHN0ZDo6bGRleHAodiwgLTEw
MCk7CisgIHVpbnQ2NF90IHcwID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjp0cnVuYyh2KSkpOworICB2ID0gc3RkOjpsZGV4cCh2IC0gc3RhdGljX2Nhc3Q8
ZG91YmxlPih3MCksIDUwKTsKKyAgdWludDY0X3QgdzEgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
c3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6OnRydW5jKHYpKSk7CisgIHYgPSBzdGQ6OmxkZXhwKHYg
LSBzdGF0aWNfY2FzdDxkb3VibGU+KHcxKSwgNTApOworICB1aW50NjRfdCB3MiA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6dHJ1bmModikpKTsKKyAgcmV0
dXJuIChzdGF0aWNfY2FzdDxVSW50MTI4SW1wbD4odzApIDw8IDEwMCkgfCAoc3RhdGljX2Nhc3Q8
VUludDEyOEltcGw+KHcxKSA8PCA1MCkgfAorICAgICAgICAgc3RhdGljX2Nhc3Q8VUludDEyOElt
cGw+KHcyKTsKK30KKyNlbmRpZiAgLy8gQ09NUElMRVIoQ0xBTkcpICYmICFfX1NTRTNfXworfSAg
Ly8gbmFtZXNwYWNlCisKK1VJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChmbG9hdCB2KSA6IFVJbnQx
MjhJbXBsKE1ha2VVSW50MTI4RnJvbUZsb2F0KHYpKSB7fQorVUludDEyOEltcGw6OlVJbnQxMjhJ
bXBsKGRvdWJsZSB2KSA6IFVJbnQxMjhJbXBsKE1ha2VVSW50MTI4RnJvbUZsb2F0KHYpKSB7fQor
VUludDEyOEltcGw6OlVJbnQxMjhJbXBsKGxvbmcgZG91YmxlIHYpIDogVUludDEyOEltcGwoTWFr
ZVVJbnQxMjhGcm9tRmxvYXQodikpIHt9CisKK1VJbnQxMjhJbXBsIG9wZXJhdG9yLyhVSW50MTI4
SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworICBVSW50MTI4SW1wbCBxdW90aWVudCA9IDA7
CisgIFVJbnQxMjhJbXBsIHJlbWFpbmRlciA9IDA7CisgIERpdk1vZEltcGwobGhzLCByaHMsICZx
dW90aWVudCwgJnJlbWFpbmRlcik7CisgIHJldHVybiBxdW90aWVudDsKK30KKworVUludDEyOElt
cGwgb3BlcmF0b3IlKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIFVJbnQx
MjhJbXBsIHF1b3RpZW50ID0gMDsKKyAgVUludDEyOEltcGwgcmVtYWluZGVyID0gMDsKKyAgRGl2
TW9kSW1wbChsaHMsIHJocywgJnF1b3RpZW50LCAmcmVtYWluZGVyKTsKKyAgcmV0dXJuIHJlbWFp
bmRlcjsKK30KKworbmFtZXNwYWNlIHsKKworc3RhdGljIHN0ZDo6c3RyaW5nIFVJbnQxMjhUb0Zv
cm1hdHRlZFN0cmluZyhVSW50MTI4SW1wbCB2LCBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyBmbGFn
cykgeworICAvLyBTZWxlY3QgYSBkaXZpc29yIHdoaWNoIGlzIHRoZSBsYXJnZXN0IHBvd2VyIG9m
IHRoZSBiYXNlIDwgMl42NC4KKyAgVUludDEyOEltcGwgZGl2OworICBpbnQgZGl2X2Jhc2VfbG9n
OworICBzd2l0Y2ggKGZsYWdzICYgc3RkOjppb3M6OmJhc2VmaWVsZCkgeworICAgIGNhc2Ugc3Rk
Ojppb3M6OmhleDoKKyAgICAgIGRpdiA9IDB4MTAwMDAwMDAwMDAwMDAwMDsgIC8vIDE2XjE1Cisg
ICAgICBkaXZfYmFzZV9sb2cgPSAxNTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ugc3RkOjppb3M6
Om9jdDoKKyAgICAgIGRpdiA9IDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwOyAgLy8gOF4yMQorICAg
ICAgZGl2X2Jhc2VfbG9nID0gMjE7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiAgLy8gc3Rk
Ojppb3M6OmRlYworICAgICAgZGl2ID0gMTAwMDAwMDAwMDAwMDAwMDAwMDB1OyAgLy8gMTBeMTkK
KyAgICAgIGRpdl9iYXNlX2xvZyA9IDE5OworICAgICAgYnJlYWs7CisgIH0KKworICAvLyBOb3cg
cGllY2UgdG9nZXRoZXIgdGhlIFVJbnQxMjhJbXBsIHJlcHJlc2VudGF0aW9uIGZyb20gdGhyZWUg
Y2h1bmtzIG9mIHRoZQorICAvLyBvcmlnaW5hbCB2YWx1ZSwgZWFjaCBsZXNzIHRoYW4gImRpdiIg
YW5kIHRoZXJlZm9yZSByZXByZXNlbnRhYmxlIGFzIGEKKyAgLy8gdWludDY0X3QuCisgIHN0ZDo6
b3N0cmluZ3N0cmVhbSBvczsKKyAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgY29weV9tYXNrID0K
KyAgICAgIHN0ZDo6aW9zOjpiYXNlZmllbGQgfCBzdGQ6Omlvczo6c2hvd2Jhc2UgfCBzdGQ6Omlv
czo6dXBwZXJjYXNlOworICBvcy5zZXRmKGZsYWdzICYgY29weV9tYXNrLCBjb3B5X21hc2spOwor
ICBVSW50MTI4SW1wbCBoaWdoID0gdjsKKyAgVUludDEyOEltcGwgbG93OworICBEaXZNb2RJbXBs
KGhpZ2gsIGRpdiwgJmhpZ2gsICZsb3cpOworICBVSW50MTI4SW1wbCBtaWQ7CisgIERpdk1vZElt
cGwoaGlnaCwgZGl2LCAmaGlnaCwgJm1pZCk7CisgIGlmIChVSW50MTI4TG93NjQoaGlnaCkgIT0g
MCkgeworICAgIG9zIDw8IFVJbnQxMjhMb3c2NChoaWdoKTsKKyAgICBvcyA8PCBzdGQ6Om5vc2hv
d2Jhc2UgPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KGRpdl9iYXNlX2xvZyk7Cisg
ICAgb3MgPDwgVUludDEyOExvdzY0KG1pZCk7CisgICAgb3MgPDwgc3RkOjpzZXR3KGRpdl9iYXNl
X2xvZyk7CisgIH0gZWxzZSBpZiAoVUludDEyOExvdzY0KG1pZCkgIT0gMCkgeworICAgIG9zIDw8
IFVJbnQxMjhMb3c2NChtaWQpOworICAgIG9zIDw8IHN0ZDo6bm9zaG93YmFzZSA8PCBzdGQ6OnNl
dGZpbGwoJzAnKSA8PCBzdGQ6OnNldHcoZGl2X2Jhc2VfbG9nKTsKKyAgfQorICBvcyA8PCBVSW50
MTI4TG93NjQobG93KTsKKyAgcmV0dXJuIG9zLnN0cigpOworfQorCit9ICAvLyBuYW1lc3BhY2UK
Kworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIFVJbnQxMjhJbXBs
IHYpIHsKKyAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgZmxhZ3MgPSBvcy5mbGFncygpOworICBz
dGQ6OnN0cmluZyByZXAgPSBVSW50MTI4VG9Gb3JtYXR0ZWRTdHJpbmcodiwgZmxhZ3MpOworCisg
IC8vIEFkZCB0aGUgcmVxdWlzaXRlIHBhZGRpbmcuCisgIHN0ZDo6c3RyZWFtc2l6ZSB3aWR0aCA9
IG9zLndpZHRoKDApOworICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pih3aWR0aCkgPiByZXAuc2l6
ZSgpKSB7CisgICAgc3RkOjppb3M6OmZtdGZsYWdzIGFkanVzdGZpZWxkID0gZmxhZ3MgJiBzdGQ6
Omlvczo6YWRqdXN0ZmllbGQ7CisgICAgaWYgKGFkanVzdGZpZWxkID09IHN0ZDo6aW9zOjpsZWZ0
KSB7CisgICAgICByZXAuYXBwZW5kKHdpZHRoIC0gcmVwLnNpemUoKSwgb3MuZmlsbCgpKTsKKyAg
ICB9IGVsc2UgaWYgKGFkanVzdGZpZWxkID09IHN0ZDo6aW9zOjppbnRlcm5hbCAmJgorICAgICAg
ICAgICAgICAgKGZsYWdzICYgc3RkOjppb3M6OnNob3diYXNlKSAmJgorICAgICAgICAgICAgICAg
KGZsYWdzICYgc3RkOjppb3M6OmJhc2VmaWVsZCkgPT0gc3RkOjppb3M6OmhleCAmJiB2ICE9IDAp
IHsKKyAgICAgIHJlcC5pbnNlcnQoMiwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICByZXAuaW5zZXJ0KDAsIHdpZHRoIC0gcmVwLnNpemUoKSwgb3Mu
ZmlsbCgpKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gb3MgPDwgcmVwOworfQorCituYW1lc3Bh
Y2UgeworCitzdGF0aWMgVUludDEyOEltcGwgVW5zaWduZWRBYnNvbHV0ZVZhbHVlKEludDEyOElt
cGwgdikgeworICAvLyBDYXN0IHRvIFVJbnQxMjhJbXBsIGJlZm9yZSBwb3NzaWJseSBuZWdhdGlu
ZyBiZWNhdXNlIC1JbnQxMjhNaW4oKSBpcyB1bmRlZmluZWQuCisgIHJldHVybiBJbnQxMjhIaWdo
NjQodikgPCAwID8gLVVJbnQxMjhJbXBsKHYpIDogVUludDEyOEltcGwodik7Cit9CisKK30gIC8v
IG5hbWVzcGFjZQorCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRp
YyBJbnQxMjhJbXBsIE1ha2VJbnQxMjhGcm9tRmxvYXQoVCB2KSB7CisgIC8vIENvbnZlcnNpb24g
d2hlbiB2IGlzIE5hTiBvciBjYW5ub3QgZml0IGludG8gSW50MTI4SW1wbCB3b3VsZCBiZSB1bmRl
ZmluZWQKKyAgLy8gYmVoYXZpb3IgaWYgdXNpbmcgYW4gaW50cmluc2ljIDEyOC1iaXQgaW50ZWdl
ci4KKyAgYXNzZXJ0KHN0ZDo6aXNmaW5pdGUodikgJiYgKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1heF9leHBvbmVudCA8PSAxMjcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
ID49IC1zdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFQ+KDEpLCAxMjcpICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdiA8IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VD4oMSksIDEyNykp
KSk7CisKKyAgLy8gV2UgbXVzdCBjb252ZXJ0IHRoZSBhYnNvbHV0ZSB2YWx1ZSBhbmQgdGhlbiBu
ZWdhdGUgYXMgbmVlZGVkLCBiZWNhdXNlCisgIC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzIGFyZSB0
eXBpY2FsbHkgc2lnbi1tYWduaXR1ZGUuIE90aGVyd2lzZSwgdGhlCisgIC8vIGRpZmZlcmVuY2Ug
YmV0d2VlbiB0aGUgaGlnaCBhbmQgbG93IDY0IGJpdHMgd2hlbiBpbnRlcnByZXRlZCBhcyB0d28n
cworICAvLyBjb21wbGVtZW50IG92ZXJ3aGVsbXMgdGhlIHByZWNpc2lvbiBvZiB0aGUgbWFudGlz
c2EuCisgIFVJbnQxMjhJbXBsIHJlc3VsdCA9IHYgPCAwID8gLU1ha2VVSW50MTI4RnJvbUZsb2F0
KC12KSA6IE1ha2VVSW50MTI4RnJvbUZsb2F0KHYpOworICByZXR1cm4gTWFrZUludDEyOChpbnQx
MjhfaW50ZXJuYWw6OkJpdENhc3RUb1NpZ25lZChVSW50MTI4SGlnaDY0KHJlc3VsdCkpLAorICAg
ICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQocmVzdWx0KSk7Cit9CisKK30gIC8vIG5hbWVz
cGFjZQorCitJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGZsb2F0IHYpIDogSW50MTI4SW1wbChNYWtl
SW50MTI4RnJvbUZsb2F0KHYpKSB7fQorSW50MTI4SW1wbDo6SW50MTI4SW1wbChkb3VibGUgdikg
OiBJbnQxMjhJbXBsKE1ha2VJbnQxMjhGcm9tRmxvYXQodikpIHt9CitJbnQxMjhJbXBsOjpJbnQx
MjhJbXBsKGxvbmcgZG91YmxlIHYpIDogSW50MTI4SW1wbChNYWtlSW50MTI4RnJvbUZsb2F0KHYp
KSB7fQorCitJbnQxMjhJbXBsIG9wZXJhdG9yLyhJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCBy
aHMpIHsKKyAgYXNzZXJ0KGxocyAhPSBJbnQxMjhNaW4oKSB8fCByaHMgIT0gLTEpOyAgLy8gVUIg
b24gdHdvJ3MgY29tcGxlbWVudC4KKworICBVSW50MTI4SW1wbCBxdW90aWVudCA9IDA7CisgIFVJ
bnQxMjhJbXBsIHJlbWFpbmRlciA9IDA7CisgIERpdk1vZEltcGwoVW5zaWduZWRBYnNvbHV0ZVZh
bHVlKGxocyksIFVuc2lnbmVkQWJzb2x1dGVWYWx1ZShyaHMpLAorICAgICAgICAgICAgICZxdW90
aWVudCwgJnJlbWFpbmRlcik7CisgIGlmICgoSW50MTI4SGlnaDY0KGxocykgPCAwKSAhPSAoSW50
MTI4SGlnaDY0KHJocykgPCAwKSkgcXVvdGllbnQgPSAtcXVvdGllbnQ7CisgIHJldHVybiBNYWtl
SW50MTI4KGludDEyOF9pbnRlcm5hbDo6Qml0Q2FzdFRvU2lnbmVkKFVJbnQxMjhIaWdoNjQocXVv
dGllbnQpKSwKKyAgICAgICAgICAgICAgICAgICAgVUludDEyOExvdzY0KHF1b3RpZW50KSk7Cit9
CisKK0ludDEyOEltcGwgb3BlcmF0b3IlKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eworICBhc3NlcnQobGhzICE9IEludDEyOE1pbigpIHx8IHJocyAhPSAtMSk7ICAvLyBVQiBvbiB0
d28ncyBjb21wbGVtZW50LgorCisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKyAgVUludDEy
OEltcGwgcmVtYWluZGVyID0gMDsKKyAgRGl2TW9kSW1wbChVbnNpZ25lZEFic29sdXRlVmFsdWUo
bGhzKSwgVW5zaWduZWRBYnNvbHV0ZVZhbHVlKHJocyksCisgICAgICAgICAgICAgJnF1b3RpZW50
LCAmcmVtYWluZGVyKTsKKyAgaWYgKEludDEyOEhpZ2g2NChsaHMpIDwgMCkgcmVtYWluZGVyID0g
LXJlbWFpbmRlcjsKKyAgcmV0dXJuIE1ha2VJbnQxMjgoaW50MTI4X2ludGVybmFsOjpCaXRDYXN0
VG9TaWduZWQoVUludDEyOEhpZ2g2NChyZW1haW5kZXIpKSwKKyAgICAgICAgICAgICAgICAgICAg
VUludDEyOExvdzY0KHJlbWFpbmRlcikpOworfQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwo
c3RkOjpvc3RyZWFtJiBvcywgSW50MTI4SW1wbCB2KSB7CisgIHN0ZDo6aW9zX2Jhc2U6OmZtdGZs
YWdzIGZsYWdzID0gb3MuZmxhZ3MoKTsKKyAgc3RkOjpzdHJpbmcgcmVwOworCisgIC8vIEFkZCB0
aGUgc2lnbiBpZiBuZWVkZWQuCisgIGJvb2wgcHJpbnRfYXNfZGVjaW1hbCA9CisgICAgICAoZmxh
Z3MgJiBzdGQ6Omlvczo6YmFzZWZpZWxkKSA9PSBzdGQ6Omlvczo6ZGVjIHx8CisgICAgICAoZmxh
Z3MgJiBzdGQ6Omlvczo6YmFzZWZpZWxkKSA9PSBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncygpOwor
ICBpZiAocHJpbnRfYXNfZGVjaW1hbCkgeworICAgIGlmIChJbnQxMjhIaWdoNjQodikgPCAwKSB7
CisgICAgICByZXAgPSAiLSI7CisgICAgfSBlbHNlIGlmIChmbGFncyAmIHN0ZDo6aW9zOjpzaG93
cG9zKSB7CisgICAgICByZXAgPSAiKyI7CisgICAgfQorICB9CisKKyAgcmVwLmFwcGVuZChVSW50
MTI4VG9Gb3JtYXR0ZWRTdHJpbmcoCisgICAgICBwcmludF9hc19kZWNpbWFsID8gVW5zaWduZWRB
YnNvbHV0ZVZhbHVlKHYpIDogVUludDEyOEltcGwodiksIG9zLmZsYWdzKCkpKTsKKworICAvLyBB
ZGQgdGhlIHJlcXVpc2l0ZSBwYWRkaW5nLgorICBzdGQ6OnN0cmVhbXNpemUgd2lkdGggPSBvcy53
aWR0aCgwKTsKKyAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4od2lkdGgpID4gcmVwLnNpemUoKSkg
eworICAgIHN3aXRjaCAoZmxhZ3MgJiBzdGQ6Omlvczo6YWRqdXN0ZmllbGQpIHsKKyAgICAgIGNh
c2Ugc3RkOjppb3M6OmxlZnQ6CisgICAgICAgIHJlcC5hcHBlbmQod2lkdGggLSByZXAuc2l6ZSgp
LCBvcy5maWxsKCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ugc3RkOjppb3M6OmludGVy
bmFsOgorICAgICAgICBpZiAocHJpbnRfYXNfZGVjaW1hbCAmJiAocmVwWzBdID09ICcrJyB8fCBy
ZXBbMF0gPT0gJy0nKSkgeworICAgICAgICAgIHJlcC5pbnNlcnQoMSwgd2lkdGggLSByZXAuc2l6
ZSgpLCBvcy5maWxsKCkpOworICAgICAgICB9IGVsc2UgaWYgKChmbGFncyAmIHN0ZDo6aW9zOjpi
YXNlZmllbGQpID09IHN0ZDo6aW9zOjpoZXggJiYKKyAgICAgICAgICAgICAgICAgICAoZmxhZ3Mg
JiBzdGQ6Omlvczo6c2hvd2Jhc2UpICYmIHYgIT0gMCkgeworICAgICAgICAgIHJlcC5pbnNlcnQo
Miwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgIHJlcC5pbnNlcnQoMCwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogIC8vIHN0ZDo6aW9zOjpyaWdo
dAorICAgICAgICByZXAuaW5zZXJ0KDAsIHdpZHRoIC0gcmVwLnNpemUoKSwgb3MuZmlsbCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIG9zIDw8IHJlcDsKK30KKwor
fSAgLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2Ugc3RkIHsKK2NvbnN0ZXhwciBib29sIG51
bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zcGVjaWFsaXplZDsKK2NvbnN0ZXhw
ciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zaWduZWQ7Citjb25z
dGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6aXNfaW50ZWdlcjsK
K2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19leGFj
dDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjpoYXNf
aW5maW5pdHk7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBs
Pjo6aGFzX3F1aWV0X05hTjsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjpoYXNfc2lnbmFsaW5nX05hTjsKK2NvbnN0ZXhwciBmbG9hdF9kZW5vcm1fc3R5
bGUgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omhhc19kZW5vcm07Citjb25zdGV4
cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6aGFzX2Rlbm9ybV9sb3Nz
OworY29uc3RleHByIGZsb2F0X3JvdW5kX3N0eWxlIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEy
OEltcGw+Ojpyb3VuZF9zdHlsZTsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6
VUludDEyOEltcGw+Ojppc19pZWM1NTk7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxX
VEY6OlVJbnQxMjhJbXBsPjo6aXNfYm91bmRlZDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGlt
aXRzPFdURjo6VUludDEyOEltcGw+Ojppc19tb2R1bG87Citjb25zdGV4cHIgaW50IG51bWVyaWNf
bGltaXRzPFdURjo6VUludDEyOEltcGw+OjpkaWdpdHM7Citjb25zdGV4cHIgaW50IG51bWVyaWNf
bGltaXRzPFdURjo6VUludDEyOEltcGw+OjpkaWdpdHMxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJp
Y19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heF9kaWdpdHMxMDsKK2NvbnN0ZXhwciBpbnQg
bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OnJhZGl4OworY29uc3RleHByIGludCBu
dW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluX2V4cG9uZW50OworY29uc3RleHBy
IGludCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluX2V4cG9uZW50MTA7Citj
b25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXhfZXhwb25l
bnQ7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXhf
ZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOElt
cGw+Ojp0cmFwczsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOElt
cGw+Ojp0aW55bmVzc19iZWZvcmU7CisKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdU
Rjo6SW50MTI4SW1wbD46OmlzX3NwZWNpYWxpemVkOworY29uc3RleHByIGJvb2wgbnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfc2lnbmVkOworY29uc3RleHByIGJvb2wgbnVtZXJp
Y19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfaW50ZWdlcjsKK2NvbnN0ZXhwciBib29sIG51
bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX2V4YWN0OworY29uc3RleHByIGJvb2wg
bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aGFzX2luZmluaXR5OworY29uc3RleHBy
IGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aGFzX3F1aWV0X05hTjsKK2Nv
bnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Omhhc19zaWduYWxp
bmdfTmFOOworY29uc3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjpoYXNfZGVub3JtOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8
V1RGOjpJbnQxMjhJbXBsPjo6aGFzX2Rlbm9ybV9sb3NzOworY29uc3RleHByIGZsb2F0X3JvdW5k
X3N0eWxlIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OnJvdW5kX3N0eWxlOworY29u
c3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfaWVjNTU5Owor
Y29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfYm91bmRl
ZDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX21v
ZHVsbzsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGln
aXRzOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjpkaWdp
dHMxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6bWF4
X2RpZ2l0czEwOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+
OjpyYWRpeDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6
bWluX2V4cG9uZW50OworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOElt
cGw+OjptaW5fZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6bWF4X2V4cG9uZW50OworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+OjptYXhfZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNf
bGltaXRzPFdURjo6SW50MTI4SW1wbD46OnRyYXBzOworY29uc3RleHByIGJvb2wgbnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6dGlueW5lc3NfYmVmb3JlOworfSAgLy8gbmFtZXNwYWNl
IHN0ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW50MTI4LmggYi9Tb3VyY2UvV1RGL3d0
Zi9JbnQxMjguaAppbmRleCAzYmRiMGE0NWVmNWM0OWFmZWUyYjlkZGZkMzBhOGFjMjUyMGQ2M2Zh
Li43OTNjZGNjNjNkMTY2NDU4Y2RmYzlmM2MwMmU4MTg4MWFmNGExYmMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9JbnQxMjguaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9JbnQxMjguaApAQCAt
MSwyOTEgKzEsMTI4OSBAQAotLy8gVGFrZW4gZnJvbSBMTFZNIFByb2plY3QsIHVuZGVyIHRoZSBB
cGFjaGUgTGljZW5zZSB2Mi4wIHdpdGggTExWTSBFeGNlcHRpb25zLgotLy8gU2VlIFNvdXJjZS9X
VEYvTElDRU5TRS1MTFZNLnR4dCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4KLS8vIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIFdJVEggTExWTS1leGNlcHRpb24KKy8vCisvLyBD
b3B5cmlnaHQgMjAxNyBUaGUgQWJzZWlsIEF1dGhvcnMuCisvLworLy8gTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAg
ICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBV
bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs
IHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gRmlsZTogSW50MTI4SW1wbC5oCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8KKy8vIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyAxMjgtYml0IGludGVnZXIgdHlwZXMsIGB1
aW50MTI4YCBhbmQgYEludDEyOEltcGxgLgorLy8KKy8vIFRPRE8oYWJzbC10ZWFtKTogVGhpcyBt
b2R1bGUgaXMgaW5jb25zaXN0ZW50IGFzIG1hbnkgaW5saW5lIGB1aW50MTI4YCBtZXRob2RzCisv
LyBhcmUgZGVmaW5lZCBpbiB0aGlzIGZpbGUsIHdoaWxlIG1hbnkgaW5saW5lIGBJbnQxMjhJbXBs
YCBtZXRob2RzIGFyZSBkZWZpbmVkIGluCisvLyB0aGUgYGludDEyOF8qX2ludHJpbnNpYy5pbmNg
IGZpbGVzLgorLy8KIAotLy8gUG9ydGFibGUgMTI4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGFyaXRo
bWV0aWMgZm9yIHVzZSBpbiBpbXBvdmVyaXNoZWQKLS8vIEMrKyBpbXBsZW1lbnRhdGlvbnMgbGFj
a2luZyBfX3VpbnQxMjhfdC4KLQotLy8gQmFzZWQgb246Ci0vLyBodHRwczovL2dpdGh1Yi5jb20v
bGx2bS9sbHZtLXByb2plY3QvYmxvYi9kNDgwZjk2OC9mbGFuZy9pbmNsdWRlL2ZsYW5nL0NvbW1v
bi91aW50MTI4LmgKKy8vIEludDEyOC5oIGFuZCBJbnQxMjguY3BwIGFyZSBkZXJpdmVkIGZyb20g
YWJzZWlsLWNwcCAoaHR0cHM6Ly9naXRodWIuY29tL2Fic2VpbC9hYnNlaWwtY3BwKQorLy8gSW1w
b3J0ZWQgcmV2aXNpb24gaXMgZGRiODQyZjU4M2U1NjBiYmRlNDk3YmM5NmNmZWJlMjVmOTA4OWUx
MS4KKy8vIFdlIGFwcGx5IHRoZSBmb2xsb3dpbmcgY2hhbmdlcy4KKy8vIDEuIFVzZSBXVEYgbWFj
cm9zIGluc3RlYWQgb2YgQUJTTCBtYWNyb3MuCisvLyAyLiBSZW1vdmUgYWJzZWlsIEhhc2hUYWJs
ZSBoYW5kbGluZworLy8gMy4gUmVtb3ZlIF9faW50MTI4X3QgaGFuZGxpbmcKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPGNz
dGRpbnQ+Ci0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0jaW5jbHVkZSA8d3RmL0xlYWRpbmdaZXJv
Qml0Q291bnQuaD4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNs
dWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIENPTVBJTEVSKE1TVkMpCisvLyBJbiB2ZXJ5IG9sZCB2ZXJzaW9ucyBvZiBNU1ZD
IGFuZCB3aGVuIHRoZSAvWmM6d2NoYXJfdCBmbGFnIGlzIG9mZiwgd2NoYXJfdCBpcworLy8gYSB0
eXBlZGVmIGZvciB1bnNpZ25lZCBzaG9ydC4gIE90aGVyd2lzZSB3Y2hhcl90IGlzIG1hcHBlZCB0
byB0aGUgX193Y2hhcl90CisvLyBidWlsdGluIHR5cGUuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBu
b3QgdG8gZGVmaW5lIG9wZXJhdG9yIHdjaGFyX3QoKQorLy8gYWxvbmdzaWRlIG9wZXJhdG9yIHVu
c2lnbmVkIHNob3J0KCkgaW4gdGhlc2UgaW5zdGFuY2VzLgorI2RlZmluZSBBQlNMX0lOVEVSTkFM
X1dDSEFSX1QgX193Y2hhcl90CisjaWYgQ1BVKFg4Nl82NCkKKyNpbmNsdWRlIDxpbnRyaW4uaD4K
KyNwcmFnbWEgaW50cmluc2ljKF91bXVsMTI4KQorI2VuZGlmICAvLyBkZWZpbmVkKF9NX1g2NCkK
KyNlbHNlICAgLy8gZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgQUJTTF9JTlRFUk5BTF9XQ0hB
Ul9UIHdjaGFyX3QKKyNlbmRpZiAgLy8gZGVmaW5lZChfTVNDX1ZFUikKIAogbmFtZXNwYWNlIFdU
RiB7CiAKLXRlbXBsYXRlIDxib29sIElTX1NJR05FRCA9IGZhbHNlPiBjbGFzcyBJbnQxMjhJbXBs
IHsKLXB1YmxpYzoKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCgpIHsgfQotICAgIC8vIFRoaXMg
bWVhbnMgb2YgZGVmaW5pdGlvbiBwcm92aWRlcyBzb21lIHBvcnRhYmlsaXR5IGZvcgotICAgIC8v
ICJzaXplX3QiIG9wZXJhbmRzLgotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKHVuc2lnbmVkIG4p
IDogbG93XyB7bn0geyB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwodW5zaWduZWQgbG9uZyBu
KSA6IGxvd18ge259IHsgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcg
bG9uZyBuKSA6IGxvd18ge259IHsgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGludCBuKQot
ICAgICAgICA6IGxvd18ge3N0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pfQotICAgICAgICAs
IGhpZ2hfIHstc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obiA8IDApfQotICAgIHsgfQotICAg
IGNvbnN0ZXhwciBJbnQxMjhJbXBsKGxvbmcgbikKLSAgICAgICAgOiBsb3dfIHtzdGF0aWNfY2Fz
dDxzdGQ6OnVpbnQ2NF90PihuKX0KLSAgICAgICAgLCBoaWdoXyB7LXN0YXRpY19jYXN0PHN0ZDo6
dWludDY0X3Q+KG4gPCAwKX0KLSAgICB7IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChsb25n
IGxvbmcgbikKLSAgICAgICAgOiBsb3dfIHtzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihuKX0K
LSAgICAgICAgLCBoaWdoXyB7LXN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4gPCAwKX0KLSAg
ICB7IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChjb25zdCBJbnQxMjhJbXBsICYpID0gZGVm
YXVsdDsKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChJbnQxMjhJbXBsICYmKSA9IGRlZmF1bHQ7
Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yPShjb25zdCBJbnQxMjhJbXBsICYp
ID0gZGVmYXVsdDsKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3I9KEludDEyOElt
cGwgJiYpID0gZGVmYXVsdDsKLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yKygp
IGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3J+KCkgY29uc3QgeyByZXR1cm4ge35oaWdoXywgfmxvd199OyB9Ci0gICAgY29uc3RleHByIElu
dDEyOEltcGwgb3BlcmF0b3ItKCkgY29uc3QgeyByZXR1cm4gfip0aGlzICsgMTsgfQotICAgIGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFsb3dfICYmICFoaWdoXzsg
fQotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
bG93XyB8fCBoaWdoXzsgfQotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzdGQ6OnVp
bnQ2NF90KCkgY29uc3QgeyByZXR1cm4gbG93XzsgfQotICAgIGNvbnN0ZXhwciBleHBsaWNpdCBv
cGVyYXRvciBzdGQ6OmludDY0X3QoKSBjb25zdCB7IHJldHVybiBsb3dfOyB9Ci0gICAgY29uc3Rl
eHByIGV4cGxpY2l0IG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4obG93Xyk7IH0KLQotICAgIGNvbnN0ZXhwciBzdGQ6OnVpbnQ2NF90IGhpZ2goKSBjb25zdCB7
IHJldHVybiBoaWdoXzsgfQotICAgIGNvbnN0ZXhwciBzdGQ6OnVpbnQ2NF90IGxvdygpIGNvbnN0
IHsgcmV0dXJuIGxvd187IH0KLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yKyso
LypwcmVmaXgqLykKLSAgICB7Ci0gICAgICAgICp0aGlzICs9IDE7Ci0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKyhpbnQgLypw
b3N0Zml4Ki8pCi0gICAgewotICAgICAgICBJbnQxMjhJbXBsIHJlc3VsdCB7KnRoaXN9OwotICAg
ICAgICAqdGhpcyArPSAxOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBjb25z
dGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvci0tKC8qcHJlZml4Ki8pCi0gICAgewotICAgICAgICAq
dGhpcyAtPSAxOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJ
bnQxMjhJbXBsIG9wZXJhdG9yLS0oaW50IC8qcG9zdGZpeCovKQotICAgIHsKLSAgICAgICAgSW50
MTI4SW1wbCByZXN1bHQgeyp0aGlzfTsKLSAgICAgICAgKnRoaXMgLT0gMTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvciYo
SW50MTI4SW1wbCB0aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHtoaWdoXyAmIHRo
YXQuaGlnaF8sIGxvd18gJiB0aGF0Lmxvd199OwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4
SW1wbCBvcGVyYXRvciB8IChJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4ge2hpZ2hfIHwgdGhhdC5oaWdoXywgbG93XyB8IHRoYXQubG93X307Ci0gICAgfQotICAg
IGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yXihJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4ge2hpZ2hfIF4gdGhhdC5oaWdoXywgbG93XyBeIHRoYXQubG93
X307Ci0gICAgfQotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3I8PChJbnQxMjhJ
bXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAodGhhdCA+PSAxMjgpCi0gICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICBpZiAoIXRoYXQpCi0gICAgICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgICAgIHN0ZDo6dWludDY0X3QgbiB7dGhhdC5sb3dffTsKLSAgICAgICAgaWYg
KG4gPj0gNjQpCi0gICAgICAgICAgICByZXR1cm4ge2xvd18gPDwgKG4gLSA2NCksIDB9OwotICAg
ICAgICByZXR1cm4geyhoaWdoXyA8PCBuKSB8IChsb3dfID4+ICg2NCAtIG4pKSwgbG93XyA8PCBu
fTsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3I+PihJbnQxMjhJbXBs
IHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAodGhhdCA+PSAxMjgpCi0gICAgICAgICAg
ICByZXR1cm4geyB9OwotICAgICAgICBpZiAoIXRoYXQpCi0gICAgICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgICAgIHN0ZDo6dWludDY0X3QgbiB7dGhhdC5sb3dffTsKLSAgICAgICAgaWYgKG4g
Pj0gNjQpCi0gICAgICAgICAgICByZXR1cm4gezAsIGhpZ2hfID4+IChuIC0gNjQpfTsKLSAgICAg
ICAgcmV0dXJuIHtoaWdoXyA+PiBuLCAoaGlnaF8gPDwgKDY0IC0gbikpIHwgKGxvd18gPj4gbil9
OwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yKyhJbnQxMjhJbXBs
IHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGQ6OnVpbnQ2NF90IGxvd2VyIHsobG93XyAm
IH50b3BCaXQpICsgKHRoYXQubG93XyAmIH50b3BCaXQpfTsKLSAgICAgICAgYm9vbCBjYXJyeSB7
KChsb3dlciA+PiA2MykgKyAobG93XyA+PiA2MykgKyAodGhhdC5sb3dfID4+IDYzKSkgPiAxfTsK
LSAgICAgICAgcmV0dXJuIHtoaWdoXyArIHRoYXQuaGlnaF8gKyBjYXJyeSwgbG93XyArIHRoYXQu
bG93X307Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yLShJbnQxMjhJ
bXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJuICp0aGlzICsgLXRoYXQ7IH0KLQotICAgIGNvbnN0ZXhw
ciBJbnQxMjhJbXBsIG9wZXJhdG9yKihJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAg
ICAgICBzdGQ6OnVpbnQ2NF90IG1hc2szMiB7MHhmZmZmZmZmZn07Ci0gICAgICAgIGlmICghaGln
aF8gJiYgIXRoYXQuaGlnaF8pIHsKLSAgICAgICAgICAgIHN0ZDo6dWludDY0X3QgeDAge2xvd18g
JiBtYXNrMzJ9LCB4MSB7bG93XyA+PiAzMn07Ci0gICAgICAgICAgICBzdGQ6OnVpbnQ2NF90IHkw
IHt0aGF0Lmxvd18gJiBtYXNrMzJ9LCB5MSB7dGhhdC5sb3dfID4+IDMyfTsKLSAgICAgICAgICAg
IEludDEyOEltcGwgeDB5MCB7eDAgKiB5MH0sIHgweTEge3gwICogeTF9OwotICAgICAgICAgICAg
SW50MTI4SW1wbCB4MXkwIHt4MSAqIHkwfSwgeDF5MSB7eDEgKiB5MX07Ci0gICAgICAgICAgICBy
ZXR1cm4geDB5MCArICgoeDB5MSArIHgxeTApIDw8IDMyKSArICh4MXkxIDw8IDY0KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHN0ZDo6dWludDY0X3QgeDAge2xvd18gJiBtYXNrMzJ9LCB4MSB7bG93
XyA+PiAzMn0sIHgyIHtoaWdoXyAmIG1hc2szMn0sCi0gICAgICAgICAgICB4MyB7aGlnaF8gPj4g
MzJ9OwotICAgICAgICBzdGQ6OnVpbnQ2NF90IHkwIHt0aGF0Lmxvd18gJiBtYXNrMzJ9LCB5MSB7
dGhhdC5sb3dfID4+IDMyfSwKLSAgICAgICAgICAgIHkyIHt0aGF0LmhpZ2hfICYgbWFzazMyfSwg
eTMge3RoYXQuaGlnaF8gPj4gMzJ9OwotICAgICAgICBJbnQxMjhJbXBsIHgweTAge3gwICogeTB9
LCB4MHkxIHt4MCAqIHkxfSwgeDB5MiB7eDAgKiB5Mn0sIHgweTMge3gwICogeTN9OwotICAgICAg
ICBJbnQxMjhJbXBsIHgxeTAge3gxICogeTB9LCB4MXkxIHt4MSAqIHkxfSwgeDF5MiB7eDEgKiB5
Mn07Ci0gICAgICAgIEludDEyOEltcGwgeDJ5MCB7eDIgKiB5MH0sIHgyeTEge3gyICogeTF9Owot
ICAgICAgICBJbnQxMjhJbXBsIHgzeTAge3gzICogeTB9OwotICAgICAgICByZXR1cm4geDB5MCAr
ICgoeDB5MSArIHgxeTApIDw8IDMyKSArICgoeDB5MiArIHgxeTEgKyB4MnkwKSA8PCA2NCkgKwot
ICAgICAgICAgICAgKCh4MHkzICsgeDF5MiArIHgyeTEgKyB4M3kwKSA8PCA5Nik7Ci0gICAgfQot
Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IvKEludDEyOEltcGwgdGhhdCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGludCBqIHtsZWFkaW5nWmVyb2VzKCl9OwotICAgICAgICBJbnQx
MjhJbXBsIGJpdHMgeyp0aGlzfTsKLSAgICAgICAgYml0cyA8PD0gajsKLSAgICAgICAgSW50MTI4
SW1wbCBudW1lcmF0b3IgeyB9OwotICAgICAgICBJbnQxMjhJbXBsIHF1b3RpZW50IHsgfTsKLSAg
ICAgICAgZm9yICg7IGogPCAxMjg7ICsraikgewotICAgICAgICAgICAgbnVtZXJhdG9yIDw8PSAx
OwotICAgICAgICAgICAgaWYgKGJpdHMuaGlnaF8gJiB0b3BCaXQpCi0gICAgICAgICAgICAgICAg
bnVtZXJhdG9yLmxvd18gfD0gMTsKLSAgICAgICAgICAgIGJpdHMgPDw9IDE7Ci0gICAgICAgICAg
ICBxdW90aWVudCA8PD0gMTsKLSAgICAgICAgICAgIGlmIChudW1lcmF0b3IgPj0gdGhhdCkgewot
ICAgICAgICAgICAgICAgICsrcXVvdGllbnQ7Ci0gICAgICAgICAgICAgICAgbnVtZXJhdG9yIC09
IHRoYXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHF1b3RpZW50
OwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yJShJbnQxMjhJbXBs
IHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpbnQgaiB7bGVhZGluZ1plcm9lcygpfTsKLSAg
ICAgICAgSW50MTI4SW1wbCBiaXRzIHsqdGhpc307Ci0gICAgICAgIGJpdHMgPDw9IGo7Ci0gICAg
ICAgIEludDEyOEltcGwgcmVtYWluZGVyIHsgfTsKLSAgICAgICAgZm9yICg7IGogPCAxMjg7ICsr
aikgewotICAgICAgICAgICAgcmVtYWluZGVyIDw8PSAxOwotICAgICAgICAgICAgaWYgKGJpdHMu
aGlnaF8gJiB0b3BCaXQpCi0gICAgICAgICAgICAgICAgcmVtYWluZGVyLmxvd18gfD0gMTsKLSAg
ICAgICAgICAgIGJpdHMgPDw9IDE7Ci0gICAgICAgICAgICBpZiAocmVtYWluZGVyID49IHRoYXQp
Ci0gICAgICAgICAgICAgICAgcmVtYWluZGVyIC09IHRoYXQ7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHJlbWFpbmRlcjsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
SW50MTI4SW1wbCB0aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKElTX1NJR05FRCAmJiAo
aGlnaF8gXiB0aGF0LmhpZ2hfKSAmIHRvcEJpdCkKLSAgICAgICAgICAgIHJldHVybiAhIShoaWdo
XyAmIHRvcEJpdCk7Ci0KLSAgICAgICAgcmV0dXJuIGhpZ2hfIDwgdGhhdC5oaWdoXyB8fCAoaGln
aF8gPT0gdGhhdC5oaWdoXyAmJiBsb3dfIDwgdGhhdC5sb3dfKTsKLSAgICB9Ci0gICAgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8PShJbnQxMjhJbXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPiB0aGF0KTsgfQotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oSW50MTI4SW1wbCB0
aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvd18gPT0gdGhhdC5sb3dfICYmIGhp
Z2hfID09IHRoYXQuaGlnaF87Ci0gICAgfQotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0o
SW50MTI4SW1wbCB0aGF0KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHRoYXQpOyB9Ci0gICAg
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShJbnQxMjhJbXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJu
IHRoYXQgPD0gKnRoaXM7IH0KLSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oSW50MTI4SW1w
bCB0aGF0KSBjb25zdCB7IHJldHVybiB0aGF0IDwgKnRoaXM7IH0KLQotICAgIGNvbnN0ZXhwciBJ
bnQxMjhJbXBsICZvcGVyYXRvciY9KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAg
ICAgICAqdGhpcyA9ICp0aGlzICYgdGhhdDsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0K
LSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3J8PShjb25zdCBJbnQxMjhJbXBsICZ0
aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyB8IHRoYXQ7Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yXj0oY29u
c3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gKnRoaXMgXiB0aGF0
OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBs
ICZvcGVyYXRvcjw8PShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRo
aXMgPSAqdGhpcyA8PCB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNv
bnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvcj4+PShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQot
ICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyA+PiB0aGF0OwotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvcis9KGNvbnN0IElu
dDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzICsgdGhhdDsKLSAg
ICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3Bl
cmF0b3ItPShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAq
dGhpcyAtIHRoYXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHBy
IEludDEyOEltcGwgJm9wZXJhdG9yKj0oY29uc3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0g
ICAgICAgICp0aGlzID0gKnRoaXMgKiB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg
fQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvci89KGNvbnN0IEludDEyOEltcGwg
JnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzIC8gdGhhdDsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3IlPShj
b25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyAlIHRo
YXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3Rl
eHByIEludDEyOEltcGwoc3RkOjp1aW50NjRfdCBoaSwgc3RkOjp1aW50NjRfdCBsbykgOiBsb3df
IHtsb30sIGhpZ2hfIHtoaX0geyB9Ci0gICAgY29uc3RleHByIGludCBsZWFkaW5nWmVyb2VzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaGlnaF8pCi0gICAgICAgICAgICByZXR1cm4gNjQg
KyBsZWFkaW5nWmVyb0JpdENvdW50KGxvd18pOwotICAgICAgICByZXR1cm4gbGVhZGluZ1plcm9C
aXRDb3VudChoaWdoXyk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjp1aW50NjRf
dCB0b3BCaXQge3N0ZDo6dWludDY0X3QgezF9IDw8IDYzfTsKLSAgICBzdGQ6OnVpbnQ2NF90IGxv
d18gezB9LCBoaWdoXyB7MH07CitjbGFzcyBJbnQxMjhJbXBsOworCisvLyBVSW50MTI4SW1wbAor
Ly8KKy8vIEFuIHVuc2lnbmVkIDEyOC1iaXQgaW50ZWdlciB0eXBlLiBUaGUgQVBJIGlzIG1lYW50
IHRvIG1pbWljIGFuIGludHJpbnNpYyB0eXBlCisvLyBhcyBjbG9zZWx5IGFzIGlzIHByYWN0aWNh
bCwgaW5jbHVkaW5nIGV4aGliaXRpbmcgdW5kZWZpbmVkIGJlaGF2aW9yIGluCisvLyBhbmFsb2dv
dXMgY2FzZXMgKGUuZy4gZGl2aXNpb24gYnkgemVybykuIFRoaXMgdHlwZSBpcyBpbnRlbmRlZCB0
byBiZSBhCisvLyBkcm9wLWluIHJlcGxhY2VtZW50IG9uY2UgQysrIHN1cHBvcnRzIGFuIGludHJp
bnNpYyBgdWludDEyOF90YCB0eXBlOyB3aGVuCisvLyB0aGF0IG9jY3VycywgZXhpc3Rpbmcgd2Vs
bC1iZWhhdmVkIHVzZXMgb2YgYFVJbnQxMjhJbXBsYCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsKKy8v
IHVzaW5nIHRoYXQgbmV3IHR5cGUuCisvLworLy8gTm90ZTogY29kZSB3cml0dGVuIHdpdGggdGhp
cyB0eXBlIHdpbGwgY29udGludWUgdG8gY29tcGlsZSBvbmNlIGB1aW50MTI4X3RgCisvLyBpcyBp
bnRyb2R1Y2VkLCBwcm92aWRlZCB0aGUgcmVwbGFjZW1lbnQgaGVscGVyIGZ1bmN0aW9ucworLy8g
YFVJbnQxMjhJbXBsKExvd3xIaWdoKTY0KClgIGFuZCBgTWFrZVVJbnQxMjgoKWAgYXJlIG1hZGUu
CisvLworLy8gQSBgVUludDEyOEltcGxgIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmc6CisvLworLy8g
ICAqIEltcGxpY2l0IGNvbnN0cnVjdGlvbiBmcm9tIGludGVncmFsIHR5cGVzCisvLyAgICogRXhw
bGljaXQgY29udmVyc2lvbiB0byBpbnRlZ3JhbCB0eXBlcworLy8KKy8vIEFkZGl0aW9uYWxseSwg
aWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBgX19pbnQxMjhgLCBgVUludDEyOEltcGxgIGlzCisv
LyBpbnRlcm9wZXJhYmxlIHdpdGggdGhhdCB0eXBlLiAoQWJzZWlsIGNoZWNrcyBmb3IgdGhpcyBj
b21wYXRpYmlsaXR5IHRocm91Z2gKKy8vIHRoZSBgQUJTTF9IQVZFX0lOVFJJTlNJQ19JTlQxMjhg
IG1hY3JvLikKKy8vCisvLyBIb3dldmVyLCBhIGBVSW50MTI4SW1wbGAgZGlmZmVycyBmcm9tIGlu
dHJpbnNpYyBpbnRlZ3JhbCB0eXBlcyBpbiB0aGUgZm9sbG93aW5nCisvLyB3YXlzOgorLy8KKy8v
ICAgKiBFcnJvcnMgb24gaW1wbGljaXQgY29udmVyc2lvbnMgdGhhdCBkbyBub3QgcHJlc2VydmUg
dmFsdWUgKHN1Y2ggYXMKKy8vICAgICBsb3NzIG9mIHByZWNpc2lvbiB3aGVuIGNvbnZlcnRpbmcg
dG8gZmxvYXQgdmFsdWVzKS4KKy8vICAgKiBSZXF1aXJlcyBleHBsaWNpdCBjb25zdHJ1Y3Rpb24g
ZnJvbSBhbmQgY29udmVyc2lvbiB0byBmbG9hdGluZyBwb2ludAorLy8gICAgIHR5cGVzLgorLy8g
ICAqIENvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlwZXMgcmVxdWlyZXMgYW4gZXhwbGljaXQgc3Rh
dGljX2Nhc3QoKSB0bworLy8gICAgIG1pbWljIHVzZSBvZiB0aGUgYC1XbmFycm93aW5nYCBjb21w
aWxlciBmbGFnLgorLy8gICAqIFRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2YgYFVJbnQxMjhJ
bXBsYCBtYXkgZGlmZmVyIGZyb20gdGhhdCBvZiBhbgorLy8gICAgIGludHJpbnNpYyAxMjgtYml0
IGludGVnZXIgdHlwZSBkZXBlbmRpbmcgb24gcGxhdGZvcm0gYW5kIGJ1aWxkCisvLyAgICAgY29u
ZmlndXJhdGlvbi4KKy8vCisvLyBFeGFtcGxlOgorLy8KKy8vICAgICBmbG9hdCB5ID0gYWJzbDo6
VUludDEyOE1heCgpOyAgLy8gRXJyb3IuIFVJbnQxMjhJbXBsIGNhbm5vdCBiZSBpbXBsaWNpdGx5
CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnRlZCB0byBm
bG9hdC4KKy8vCisvLyAgICAgYWJzbDo6VUludDEyOEltcGwgdjsKKy8vICAgICB1aW50NjRfdCBp
ID0gdjsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IKKy8vICAgICB1aW50NjRfdCBp
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpOyAgLy8gT0sKKy8vCitjbGFzcyBhbGlnbmFzKDE2
KSBVSW50MTI4SW1wbCB7CisgcHVibGljOgorICBVSW50MTI4SW1wbCgpID0gZGVmYXVsdDsKKwor
ICAvLyBDb25zdHJ1Y3RvcnMgZnJvbSBhcml0aG1ldGljIHR5cGVzCisgIGNvbnN0ZXhwciBVSW50
MTI4SW1wbChpbnQgdik7ICAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9leHBsaWNp
dCkKKyAgY29uc3RleHByIFVJbnQxMjhJbXBsKHVuc2lnbmVkIGludCB2KTsgICAgICAgIC8vIE5P
TElOVChydW50aW1lL2V4cGxpY2l0KQorICBjb25zdGV4cHIgVUludDEyOEltcGwobG9uZyB2KTsg
ICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgVUludDEy
OEltcGwodW5zaWduZWQgbG9uZyB2KTsgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBj
b25zdGV4cHIgVUludDEyOEltcGwobG9uZyBsb25nIHYpOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1
bnRpbWUvaW50KQorICBjb25zdGV4cHIgVUludDEyOEltcGwodW5zaWduZWQgbG9uZyBsb25nIHYp
OyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgVUludDEyOEltcGwoSW50MTI4
SW1wbCB2KTsgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQorICBXVEZfRVhQT1JUX1BSSVZB
VEUgZXhwbGljaXQgVUludDEyOEltcGwoZmxvYXQgdik7CisgIFdURl9FWFBPUlRfUFJJVkFURSBl
eHBsaWNpdCBVSW50MTI4SW1wbChkb3VibGUgdik7CisgIFdURl9FWFBPUlRfUFJJVkFURSBleHBs
aWNpdCBVSW50MTI4SW1wbChsb25nIGRvdWJsZSB2KTsKKworICAvLyBBc3NpZ25tZW50IG9wZXJh
dG9ycyBmcm9tIGFyaXRobWV0aWMgdHlwZXMKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPShpbnQg
dik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj0odW5zaWduZWQgaW50IHYpOworICBVSW50MTI4
SW1wbCYgb3BlcmF0b3I9KGxvbmcgdik7ICAgICAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPSh1bnNpZ25lZCBsb25nIHYpOyAgICAgICAv
LyBOT0xJTlQocnVudGltZS9pbnQpCisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj0obG9uZyBsb25n
IHYpOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBVSW50MTI4SW1wbCYgb3Bl
cmF0b3I9KHVuc2lnbmVkIGxvbmcgbG9uZyB2KTsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAg
VUludDEyOEltcGwmIG9wZXJhdG9yPShJbnQxMjhJbXBsIHYpOworCisgIC8vIENvbnZlcnNpb24g
b3BlcmF0b3JzIHRvIG90aGVyIGFyaXRobWV0aWMgdHlwZXMKKyAgY29uc3RleHByIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGNo
YXIoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHNpZ25lZCBjaGFyKCkg
Y29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCBjaGFyKCkgY29u
c3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyMTZfdCgpIGNvbnN0OworICBj
b25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgY2hhcjMyX3QoKSBjb25zdDsKKyAgY29uc3RleHBy
IGV4cGxpY2l0IG9wZXJhdG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCgpIGNvbnN0OworICBjb25z
dGV4cHIgZXhwbGljaXQgb3BlcmF0b3Igc2hvcnQoKSBjb25zdDsgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBs
aWNpdCBvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGlj
aXQgb3BlcmF0b3IgaW50KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1
bnNpZ25lZCBpbnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGxvbmco
KSBjb25zdDsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVu
dGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCBsb25nKCkg
Y29uc3Q7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhw
bGljaXQgb3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3Q7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1
bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgbG9uZyBs
b25nKCkgY29uc3Q7CisgIGV4cGxpY2l0IG9wZXJhdG9yIGZsb2F0KCkgY29uc3Q7CisgIGV4cGxp
Y2l0IG9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0OworICBleHBsaWNpdCBvcGVyYXRvciBsb25nIGRv
dWJsZSgpIGNvbnN0OworCisgIC8vIFRyaXZpYWwgY29weSBjb25zdHJ1Y3RvciwgYXNzaWdubWVu
dCBvcGVyYXRvciBhbmQgZGVzdHJ1Y3Rvci4KKworICAvLyBBcml0aG1ldGljIG9wZXJhdG9ycy4K
KyAgVUludDEyOEltcGwmIG9wZXJhdG9yKz0oVUludDEyOEltcGwgb3RoZXIpOworICBVSW50MTI4
SW1wbCYgb3BlcmF0b3ItPShVSW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQxMjhJbXBsJiBvcGVy
YXRvcio9KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgLy8gTG9uZyBkaXZpc2lvbi9tb2R1bG8gZm9y
IFVJbnQxMjhJbXBsLgorICBVSW50MTI4SW1wbCYgb3BlcmF0b3IvPShVSW50MTI4SW1wbCBvdGhl
cik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvciU9KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUlu
dDEyOEltcGwgb3BlcmF0b3IrKyhpbnQpOworICBVSW50MTI4SW1wbCBvcGVyYXRvci0tKGludCk7
CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcjw8PShpbnQpOworICBVSW50MTI4SW1wbCYgb3BlcmF0
b3I+Pj0oaW50KTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yJj0oVUludDEyOEltcGwgb3RoZXIp
OworICBVSW50MTI4SW1wbCYgb3BlcmF0b3J8PShVSW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQx
MjhJbXBsJiBvcGVyYXRvcl49KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUludDEyOEltcGwmIG9w
ZXJhdG9yKysoKTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yLS0oKTsKKworICAvLyBVSW50MTI4
TG93NjQoKQorICAvLworICAvLyBSZXR1cm5zIHRoZSBsb3dlciA2NC1iaXQgdmFsdWUgb2YgYSBg
VUludDEyOEltcGxgIHZhbHVlLgorICBmcmllbmQgY29uc3RleHByIHVpbnQ2NF90IFVJbnQxMjhM
b3c2NChVSW50MTI4SW1wbCB2KTsKKworICAvLyBVSW50MTI4SGlnaDY0KCkKKyAgLy8KKyAgLy8g
UmV0dXJucyB0aGUgaGlnaGVyIDY0LWJpdCB2YWx1ZSBvZiBhIGBVSW50MTI4SW1wbGAgdmFsdWUu
CisgIGZyaWVuZCBjb25zdGV4cHIgdWludDY0X3QgVUludDEyOEhpZ2g2NChVSW50MTI4SW1wbCB2
KTsKKworICAvLyBNYWtlVUludDEyOCgpCisgIC8vCisgIC8vIENvbnN0cnVjdHMgYSBgVUludDEy
OEltcGxgIG51bWVyaWMgdmFsdWUgZnJvbSB0d28gNjQtYml0IHVuc2lnbmVkIGludGVnZXJzLgor
ICAvLyBOb3RlIHRoYXQgdGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGlzIHRoZSBvbmx5IHdheSB0byBj
b25zdHJ1Y3QgYSBgVUludDEyOEltcGxgCisgIC8vIGZyb20gaW50ZWdlciB2YWx1ZXMgZ3JlYXRl
ciB0aGFuIDJeNjQuCisgIC8vCisgIC8vIEV4YW1wbGU6CisgIC8vCisgIC8vICAgVUludDEyOElt
cGwgYmlnID0gTWFrZVVJbnQxMjgoMSwgMCk7CisgIGZyaWVuZCBjb25zdGV4cHIgVUludDEyOElt
cGwgTWFrZVVJbnQxMjgodWludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KTsKKworICAvLyBVSW50
MTI4TWF4KCkKKyAgLy8KKyAgLy8gUmV0dXJucyB0aGUgaGlnaGVzdCB2YWx1ZSBmb3IgYSAxMjgt
Yml0IHVuc2lnbmVkIGludGVnZXIuCisgIGZyaWVuZCBjb25zdGV4cHIgVUludDEyOEltcGwgVUlu
dDEyOE1heCgpOworCisgcHJpdmF0ZToKKyAgY29uc3RleHByIFVJbnQxMjhJbXBsKHVpbnQ2NF90
IGhpZ2gsIHVpbnQ2NF90IGxvdyk7CisKKyAgLy8gVE9ETyhzdHJlbCkgVXBkYXRlIGltcGxlbWVu
dGF0aW9uIHRvIHVzZSBfX2ludDEyOCBvbmNlIGFsbCB1c2VycyBvZgorICAvLyBVSW50MTI4SW1w
bCBhcmUgZml4ZWQgdG8gbm90IGRlcGVuZCBvbiBhbGlnbm9mKFVJbnQxMjhJbXBsKSA9PSA4LiBB
bHNvIGFkZAorICAvLyBhbGlnbmFzKDE2KSB0byBjbGFzcyBkZWZpbml0aW9uIHRvIGtlZXAgYWxp
Z25tZW50IGNvbnNpc3RlbnQgYWNyb3NzCisgIC8vIHBsYXRmb3Jtcy4KKyNpZiBDUFUoTElUVExF
X0VORElBTikKKyAgdWludDY0X3QgbG9fOworICB1aW50NjRfdCBoaV87CisjZWxpZiBDUFUoQklH
X0VORElBTikKKyAgdWludDY0X3QgaGlfOworICB1aW50NjRfdCBsb187CisjZWxzZSAgLy8gYnl0
ZSBvcmRlcgorI2Vycm9yICJVbnN1cHBvcnRlZCBieXRlIG9yZGVyOiBtdXN0IGJlIGxpdHRsZS1l
bmRpYW4gb3IgYmlnLWVuZGlhbi4iCisjZW5kaWYgIC8vIGJ5dGUgb3JkZXIKK307CisKKy8vIGFs
bG93IFVJbnQxMjhJbXBsIHRvIGJlIGxvZ2dlZAorV1RGX0VYUE9SVF9QUklWQVRFIHN0ZDo6b3N0
cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBVSW50MTI4SW1wbCB2KTsKKworLy8g
VE9ETyhzdHJlbCkgYWRkIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtJiwgVUludDEyOEltcGwpCisK
K2NvbnN0ZXhwciBVSW50MTI4SW1wbCBVSW50MTI4TWF4KCkgeworICByZXR1cm4gVUludDEyOElt
cGwoKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCksCisgICAgICAgICAgICAg
ICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpKTsKK30KKworfSAgLy8g
bmFtZXNwYWNlIFdURgorCisvLyBTcGVjaWFsaXplZCBudW1lcmljX2xpbWl0cyBmb3IgVUludDEy
OEltcGwuCituYW1lc3BhY2Ugc3RkIHsKK3RlbXBsYXRlIDw+CitjbGFzcyBudW1lcmljX2xpbWl0
czxXVEY6OlVJbnQxMjhJbXBsPiB7CisgcHVibGljOgorICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc2lnbmVk
ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKKyAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX3NpZ25hbGlu
Z19OYU4gPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfZGVu
b3JtX2xvc3MgPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdF9yb3VuZF9zdHlsZSBy
b3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX21vZHVsbyA9IHRydWU7CisgIHN0YXRp
YyBjb25zdGV4cHIgaW50IGRpZ2l0cyA9IDEyODsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGln
aXRzMTAgPSAzODsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgcmFkaXggPSAyOworICBzdGF0aWMgY29uc3RleHByIGludCBt
aW5fZXhwb25lbnQgPSAwOworICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQxMCA9
IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9leHBvbmVudCA9IDA7CisgIHN0YXRpYyBj
b25zdGV4cHIgaW50IG1heF9leHBvbmVudDEwID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHRyYXBzID0gbnVtZXJpY19saW1pdHM8dWludDY0X3Q+Ojp0cmFwczsKKyAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOworCisgIHN0YXRpYyBjb25zdGV4cHIg
V1RGOjpVSW50MTI4SW1wbCAobWluKSgpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhw
ciBXVEY6OlVJbnQxMjhJbXBsIGxvd2VzdCgpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0
ZXhwciBXVEY6OlVJbnQxMjhJbXBsIChtYXgpKCkgeyByZXR1cm4gV1RGOjpVSW50MTI4TWF4KCk7
IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIGVwc2lsb24oKSB7IHJldHVy
biAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCByb3VuZF9lcnJvcigp
IHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIGluZmlu
aXR5KCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6VUludDEyOEltcGwg
cXVpZXRfTmFOKCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6VUludDEy
OEltcGwgc2lnbmFsaW5nX05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBX
VEY6OlVJbnQxMjhJbXBsIGRlbm9ybV9taW4oKSB7IHJldHVybiAwOyB9Cit9OworfSAgLy8gbmFt
ZXNwYWNlIHN0ZAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gSW50MTI4SW1wbAorLy8KKy8vIEEg
c2lnbmVkIDEyOC1iaXQgaW50ZWdlciB0eXBlLiBUaGUgQVBJIGlzIG1lYW50IHRvIG1pbWljIGFu
IGludHJpbnNpYworLy8gaW50ZWdyYWwgdHlwZSBhcyBjbG9zZWx5IGFzIGlzIHByYWN0aWNhbCwg
aW5jbHVkaW5nIGV4aGliaXRpbmcgdW5kZWZpbmVkCisvLyBiZWhhdmlvciBpbiBhbmFsb2dvdXMg
Y2FzZXMgKGUuZy4gZGl2aXNpb24gYnkgemVybykuCisvLworLy8gQW4gYEludDEyOEltcGxgIHN1
cHBvcnRzIHRoZSBmb2xsb3dpbmc6CisvLworLy8gICAqIEltcGxpY2l0IGNvbnN0cnVjdGlvbiBm
cm9tIGludGVncmFsIHR5cGVzCisvLyAgICogRXhwbGljaXQgY29udmVyc2lvbiB0byBpbnRlZ3Jh
bCB0eXBlcworLy8KKy8vIEhvd2V2ZXIsIGFuIGBJbnQxMjhJbXBsYCBkaWZmZXJzIGZyb20gaW50
cmluc2ljIGludGVncmFsIHR5cGVzIGluIHRoZSBmb2xsb3dpbmcKKy8vIHdheXM6CisvLworLy8g
ICAqIEl0IGlzIG5vdCBpbXBsaWNpdGx5IGNvbnZlcnRpYmxlIHRvIG90aGVyIGludGVncmFsIHR5
cGVzLgorLy8gICAqIFJlcXVpcmVzIGV4cGxpY2l0IGNvbnN0cnVjdGlvbiBmcm9tIGFuZCBjb252
ZXJzaW9uIHRvIGZsb2F0aW5nIHBvaW50CisvLyAgICAgdHlwZXMuCisKKy8vIEFkZGl0aW9uYWxs
eSwgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBgX19pbnQxMjhgLCBgSW50MTI4SW1wbGAgaXMK
Ky8vIGludGVyb3BlcmFibGUgd2l0aCB0aGF0IHR5cGUuIChBYnNlaWwgY2hlY2tzIGZvciB0aGlz
IGNvbXBhdGliaWxpdHkgdGhyb3VnaAorLy8gdGhlIGBBQlNMX0hBVkVfSU5UUklOU0lDX0lOVDEy
OGAgbWFjcm8uKQorLy8KKy8vIFRoZSBkZXNpZ24gZ29hbCBmb3IgYEludDEyOEltcGxgIGlzIHRo
YXQgaXQgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggYSBmdXR1cmUKKy8vIGBpbnQxMjhfdGAsIGlm
IHRoYXQgdHlwZSBiZWNvbWVzIGEgcGFydCBvZiB0aGUgc3RhbmRhcmQuCisvLworLy8gRXhhbXBs
ZToKKy8vCisvLyAgICAgZmxvYXQgeSA9IEludDEyOEltcGwoMTcpOyAgLy8gRXJyb3IuIEludDEy
OEltcGwgY2Fubm90IGJlIGltcGxpY2l0bHkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNvbnZlcnRlZCB0byBmbG9hdC4KKy8vCisvLyAgICAgSW50MTI4SW1wbCB2Owor
Ly8gICAgIGludDY0X3QgaSA9IHY7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IKKy8v
ICAgICBpbnQ2NF90IGkgPSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2KTsgIC8vIE9LCisvLworY2xh
c3MgYWxpZ25hcygxNikgSW50MTI4SW1wbCB7CisgcHVibGljOgorICBJbnQxMjhJbXBsKCkgPSBk
ZWZhdWx0OworCisgIC8vIENvbnN0cnVjdG9ycyBmcm9tIGFyaXRobWV0aWMgdHlwZXMKKyAgY29u
c3RleHByIEludDEyOEltcGwoaW50IHYpOyAgICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRp
bWUvZXhwbGljaXQpCisgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKHVuc2lnbmVkIGludCB2KTsgICAg
ICAgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQorICBjb25zdGV4cHIgSW50MTI4SW1wbChs
b25nIHYpOyAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhw
ciBJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgdik7ICAgICAgIC8vIE5PTElOVChydW50aW1lL2lu
dCkKKyAgY29uc3RleHByIEludDEyOEltcGwobG9uZyBsb25nIHYpOyAgICAgICAgICAgLy8gTk9M
SU5UKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxv
bmcgdik7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBJbnQx
MjhJbXBsKFVJbnQxMjhJbXBsIHYpOworICBXVEZfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW50
MTI4SW1wbChmbG9hdCB2KTsKKyAgV1RGX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEludDEyOElt
cGwoZG91YmxlIHYpOworICBXVEZfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW50MTI4SW1wbChs
b25nIGRvdWJsZSB2KTsKKworICAvLyBBc3NpZ25tZW50IG9wZXJhdG9ycyBmcm9tIGFyaXRobWV0
aWMgdHlwZXMKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KGludCB2KTsKKyAgSW50MTI4SW1wbCYg
b3BlcmF0b3I9KHVuc2lnbmVkIGludCB2KTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KGxvbmcg
dik7ICAgICAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgSW50MTI4SW1wbCYg
b3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgdik7ICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkK
KyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KGxvbmcgbG9uZyB2KTsgICAgICAgICAgIC8vIE5PTElO
VChydW50aW1lL2ludCkKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgbG9u
ZyB2KTsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKworICAvLyBDb252ZXJzaW9uIG9wZXJhdG9y
cyB0byBvdGhlciBhcml0aG1ldGljIHR5cGVzCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyKCkgY29u
c3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzaWduZWQgY2hhcigpIGNvbnN0Owor
ICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgY2hhcigpIGNvbnN0OworICBj
b25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgY2hhcjE2X3QoKSBjb25zdDsKKyAgY29uc3RleHBy
IGV4cGxpY2l0IG9wZXJhdG9yIGNoYXIzMl90KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNp
dCBvcGVyYXRvciBBQlNMX0lOVEVSTkFMX1dDSEFSX1QoKSBjb25zdDsKKyAgY29uc3RleHByIGV4
cGxpY2l0IG9wZXJhdG9yIHNob3J0KCkgY29uc3Q7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisg
IC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3Bl
cmF0b3IgdW5zaWduZWQgc2hvcnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJh
dG9yIGludCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQg
aW50KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBsb25nKCkgY29uc3Q7
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50
KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgbG9uZygpIGNvbnN0Owor
ICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9w
ZXJhdG9yIGxvbmcgbG9uZygpIGNvbnN0OworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2lu
dCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIGxvbmcgbG9uZygpIGNv
bnN0OworICBleHBsaWNpdCBvcGVyYXRvciBmbG9hdCgpIGNvbnN0OworICBleHBsaWNpdCBvcGVy
YXRvciBkb3VibGUoKSBjb25zdDsKKyAgZXhwbGljaXQgb3BlcmF0b3IgbG9uZyBkb3VibGUoKSBj
b25zdDsKKworICAvLyBUcml2aWFsIGNvcHkgY29uc3RydWN0b3IsIGFzc2lnbm1lbnQgb3BlcmF0
b3IgYW5kIGRlc3RydWN0b3IuCisKKyAgLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMKKyAgSW50MTI4
SW1wbCYgb3BlcmF0b3IrPShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0
b3ItPShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3IqPShJbnQxMjhJ
bXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3IvPShJbnQxMjhJbXBsIG90aGVyKTsK
KyAgSW50MTI4SW1wbCYgb3BlcmF0b3IlPShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1w
bCBvcGVyYXRvcisrKGludCk7ICAvLyBwb3N0Zml4IGluY3JlbWVudDogaSsrCisgIEludDEyOElt
cGwgb3BlcmF0b3ItLShpbnQpOyAgLy8gcG9zdGZpeCBkZWNyZW1lbnQ6IGktLQorICBJbnQxMjhJ
bXBsJiBvcGVyYXRvcisrKCk7ICAgIC8vIHByZWZpeCBpbmNyZW1lbnQ6ICArK2kKKyAgSW50MTI4
SW1wbCYgb3BlcmF0b3ItLSgpOyAgICAvLyBwcmVmaXggZGVjcmVtZW50OiAgLS1pCisgIEludDEy
OEltcGwmIG9wZXJhdG9yJj0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJh
dG9yfD0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9yXj0oSW50MTI4
SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9yPDw9KGludCBhbW91bnQpOworICBJ
bnQxMjhJbXBsJiBvcGVyYXRvcj4+PShpbnQgYW1vdW50KTsKKworICAvLyBJbnQxMjhMb3c2NCgp
CisgIC8vCisgIC8vIFJldHVybnMgdGhlIGxvd2VyIDY0LWJpdCB2YWx1ZSBvZiBhIGBJbnQxMjhJ
bXBsYCB2YWx1ZS4KKyAgZnJpZW5kIGNvbnN0ZXhwciB1aW50NjRfdCBJbnQxMjhMb3c2NChJbnQx
MjhJbXBsIHYpOworCisgIC8vIEludDEyOEhpZ2g2NCgpCisgIC8vCisgIC8vIFJldHVybnMgdGhl
IGhpZ2hlciA2NC1iaXQgdmFsdWUgb2YgYSBgSW50MTI4SW1wbGAgdmFsdWUuCisgIGZyaWVuZCBj
b25zdGV4cHIgaW50NjRfdCBJbnQxMjhIaWdoNjQoSW50MTI4SW1wbCB2KTsKKworICAvLyBNYWtl
SW50MTI4KCkKKyAgLy8KKyAgLy8gQ29uc3RydWN0cyBhIGBJbnQxMjhJbXBsYCBudW1lcmljIHZh
bHVlIGZyb20gdHdvIDY0LWJpdCBpbnRlZ2Vycy4gTm90ZSB0aGF0CisgIC8vIHNpZ25lZG5lc3Mg
aXMgY29udmV5ZWQgaW4gdGhlIHVwcGVyIGBoaWdoYCB2YWx1ZS4KKyAgLy8KKyAgLy8gICAoSW50
MTI4SW1wbCgxKSA8PCA2NCkgKiBoaWdoICsgbG93CisgIC8vCisgIC8vIE5vdGUgdGhhdCB0aGlz
IGZhY3RvcnkgZnVuY3Rpb24gaXMgdGhlIG9ubHkgd2F5IHRvIGNvbnN0cnVjdCBhIGBJbnQxMjhJ
bXBsYAorICAvLyBmcm9tIGludGVnZXIgdmFsdWVzIGdyZWF0ZXIgdGhhbiAyXjY0IG9yIGxlc3Mg
dGhhbiAtMl42NC4KKyAgLy8KKyAgLy8gRXhhbXBsZToKKyAgLy8KKyAgLy8gICBJbnQxMjhJbXBs
IGJpZyA9IE1ha2VJbnQxMjgoMSwgMCk7CisgIC8vICAgSW50MTI4SW1wbCBiaWdfbiA9IE1ha2VJ
bnQxMjgoLTEsIDApOworICBmcmllbmQgY29uc3RleHByIEludDEyOEltcGwgTWFrZUludDEyOChp
bnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdyk7CisKKyAgLy8gSW50MTI4TWF4KCkKKyAgLy8KKyAg
Ly8gUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgYSAxMjgtYml0IHNpZ25lZCBpbnRlZ2Vy
LgorICBmcmllbmQgY29uc3RleHByIEludDEyOEltcGwgSW50MTI4TWF4KCk7CisKKyAgLy8gSW50
MTI4TWluKCkKKyAgLy8KKyAgLy8gUmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZSBmb3IgYSAxMjgt
Yml0IHNpZ25lZCBpbnRlZ2VyLgorICBmcmllbmQgY29uc3RleHByIEludDEyOEltcGwgSW50MTI4
TWluKCk7CisKKyBwcml2YXRlOgorICBjb25zdGV4cHIgSW50MTI4SW1wbChpbnQ2NF90IGhpZ2gs
IHVpbnQ2NF90IGxvdyk7CisKKyNpZiBDUFUoTElUVExFX0VORElBTikKKyAgdWludDY0X3QgbG9f
OworICBpbnQ2NF90IGhpXzsKKyNlbGlmIENQVShCSUdfRU5ESUFOKQorICBpbnQ2NF90IGhpXzsK
KyAgdWludDY0X3QgbG9fOworI2Vsc2UgIC8vIGJ5dGUgb3JkZXIKKyNlcnJvciAiVW5zdXBwb3J0
ZWQgYnl0ZSBvcmRlcjogbXVzdCBiZSBsaXR0bGUtZW5kaWFuIG9yIGJpZy1lbmRpYW4uIgorI2Vu
ZGlmICAvLyBieXRlIG9yZGVyCiB9OwogCitXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpvc3RyZWFt
JiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIEludDEyOEltcGwgdik7CisKKy8vIFRPRE8o
YWJzbC10ZWFtKSBhZGQgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0mLCBJbnQxMjhJbXBsKQorCitj
b25zdGV4cHIgSW50MTI4SW1wbCBJbnQxMjhNYXgoKSB7CisgIHJldHVybiBJbnQxMjhJbXBsKChz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgpKCksCisgICAgICAgICAgICAgICAgKHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCkpOworfQorCitjb25zdGV4cHIgSW50
MTI4SW1wbCBJbnQxMjhNaW4oKSB7CisgIHJldHVybiBJbnQxMjhJbXBsKChzdGQ6Om51bWVyaWNf
bGltaXRzPGludDY0X3Q+OjptaW4pKCksIDApOworfQorCit9ICAvLyBuYW1lc3BhY2UgV1RGCisK
Ky8vIFNwZWNpYWxpemVkIG51bWVyaWNfbGltaXRzIGZvciBJbnQxMjhJbXBsLgorbmFtZXNwYWNl
IHN0ZCB7Cit0ZW1wbGF0ZSA8PgorY2xhc3MgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBs
PiB7CisgcHVibGljOgorICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0
cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKKyAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzX2ludGVnZXIgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNfZXhhY3QgPSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOworICBz
dGF0aWMgY29uc3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi
c2VudDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwor
ICBzdGF0aWMgY29uc3RleHByIGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf
dG93YXJkX3plcm87CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK
KyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2JvdW5kZWQgPSB0cnVlOworICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IGRp
Z2l0cyA9IDEyNzsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZGlnaXRzMTAgPSAzODsKKyAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgbWF4X2RpZ2l0czEwID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgcmFkaXggPSAyOworICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQgPSAwOwor
ICBzdGF0aWMgY29uc3RleHByIGludCBtaW5fZXhwb25lbnQxMCA9IDA7CisgIHN0YXRpYyBjb25z
dGV4cHIgaW50IG1heF9leHBvbmVudCA9IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9l
eHBvbmVudDEwID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYXBzID0gbnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+Ojp0cmFwczsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRpbnluZXNz
X2JlZm9yZSA9IGZhbHNlOworCisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsICht
aW4pKCkgeyByZXR1cm4gV1RGOjpJbnQxMjhNaW4oKTsgfQorICBzdGF0aWMgY29uc3RleHByIFdU
Rjo6SW50MTI4SW1wbCBsb3dlc3QoKSB7IHJldHVybiBXVEY6OkludDEyOE1pbigpOyB9CisgIHN0
YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIChtYXgpKCkgeyByZXR1cm4gV1RGOjpJbnQx
MjhNYXgoKTsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBlcHNpbG9uKCkg
eyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCByb3VuZF9l
cnJvcigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwg
aW5maW5pdHkoKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJ
bXBsIHF1aWV0X05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6Oklu
dDEyOEltcGwgc2lnbmFsaW5nX05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhw
ciBXVEY6OkludDEyOEltcGwgZGVub3JtX21pbigpIHsgcmV0dXJuIDA7IH0KK307Cit9ICAvLyBu
YW1lc3BhY2Ugc3RkCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAg
ICAgICBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvbGxvdworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
K25hbWVzcGFjZSBXVEYgeworCitjb25zdGV4cHIgVUludDEyOEltcGwgTWFrZVVJbnQxMjgodWlu
dDY0X3QgaGlnaCwgdWludDY0X3QgbG93KSB7CisgIHJldHVybiBVSW50MTI4SW1wbChoaWdoLCBs
b3cpOworfQorCisvLyBBc3NpZ25tZW50IGZyb20gaW50ZWdlciB0eXBlcy4KKworaW5saW5lIFVJ
bnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KGludCB2KSB7IHJldHVybiAqdGhpcyA9
IFVJbnQxMjhJbXBsKHYpOyB9CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9w
ZXJhdG9yPSh1bnNpZ25lZCBpbnQgdikgeworICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2
KTsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KGxvbmcg
dikgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1w
bCh2KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgVUludDEy
OEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcj0odW5zaWduZWQgbG9uZyB2KSB7CisgIHJldHVy
biAqdGhpcyA9IFVJbnQxMjhJbXBsKHYpOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1l
L2ludCkKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yPShsb25nIGxv
bmcgdikgeworICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2KTsKK30KKworLy8gTk9MSU5U
TkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpv
cGVyYXRvcj0odW5zaWduZWQgbG9uZyBsb25nIHYpIHsKKyAgcmV0dXJuICp0aGlzID0gVUludDEy
OEltcGwodik7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9y
PShJbnQxMjhJbXBsIHYpIHsKKyAgcmV0dXJuICp0aGlzID0gVUludDEyOEltcGwodik7Cit9CisK
Ky8vIEFyaXRobWV0aWMgb3BlcmF0b3JzLgorCitjb25zdGV4cHIgVUludDEyOEltcGwgb3BlcmF0
b3I8PChVSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpOworY29uc3RleHByIFVJbnQxMjhJbXBs
IG9wZXJhdG9yPj4oVUludDEyOEltcGwgbGhzLCBpbnQgYW1vdW50KTsKK2NvbnN0ZXhwciBVSW50
MTI4SW1wbCBvcGVyYXRvcisoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpOworY29u
c3RleHByIFVJbnQxMjhJbXBsIG9wZXJhdG9yLShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBs
IHJocyk7CitVSW50MTI4SW1wbCBvcGVyYXRvciooVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1w
bCByaHMpOworV1RGX0VYUE9SVF9QUklWQVRFIFVJbnQxMjhJbXBsIG9wZXJhdG9yLyhVSW50MTI4
SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVUludDEyOElt
cGwgb3BlcmF0b3IlKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKTsKKworaW5saW5l
IFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I8PD0oaW50IGFtb3VudCkgeworICAq
dGhpcyA9ICp0aGlzIDw8IGFtb3VudDsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgVUlu
dDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcj4+PShpbnQgYW1vdW50KSB7CisgICp0aGlz
ID0gKnRoaXMgPj4gYW1vdW50OworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yKz0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyArIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yLT0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAtIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yKj0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAqIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yLz0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAvIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBVSW50MTI4
SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yJT0oVUludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAlIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2NvbnN0ZXhwciB1aW50
NjRfdCBVSW50MTI4TG93NjQoVUludDEyOEltcGwgdikgeyByZXR1cm4gdi5sb187IH0KKworY29u
c3RleHByIHVpbnQ2NF90IFVJbnQxMjhIaWdoNjQoVUludDEyOEltcGwgdikgeyByZXR1cm4gdi5o
aV87IH0KKworLy8gQ29uc3RydWN0b3JzIGZyb20gaW50ZWdlciB0eXBlcy4KKworI2lmIENQVShM
SVRUTEVfRU5ESUFOKQorCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKHVpbnQ2
NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykKKyAgICA6IGxvX3tsb3d9LCBoaV97aGlnaH0ge30KKwor
Y29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChpbnQgdikKKyAgICA6IGxvX3tzdGF0
aWNfY2FzdDx1aW50NjRfdD4odil9LAorICAgICAgaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+OjptYXgpKCkgOiAwfSB7fQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpV
SW50MTI4SW1wbChsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBsb197c3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwKKyAgICAgIGhpX3t2IDwgMCA/IChzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpIDogMH0ge30KK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6
VUludDEyOEltcGwobG9uZyBsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBs
b197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwKKyAgICAgIGhpX3t2IDwgMCA/IChzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpIDogMH0ge30KKworY29uc3RleHByIFVJbnQx
MjhJbXBsOjpVSW50MTI4SW1wbCh1bnNpZ25lZCBpbnQgdikgOiBsb197dn0sIGhpX3swfSB7fQor
Ly8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJ
bnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgdikgOiBsb197dn0sIGhpX3swfSB7fQorLy8gTk9MSU5U
TkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBs
KHVuc2lnbmVkIGxvbmcgbG9uZyB2KSA6IGxvX3t2fSwgaGlfezB9IHt9CisKK2NvbnN0ZXhwciBV
SW50MTI4SW1wbDo6VUludDEyOEltcGwoSW50MTI4SW1wbCB2KQorICAgIDogbG9fe0ludDEyOExv
dzY0KHYpfSwgaGlfe3N0YXRpY19jYXN0PHVpbnQ2NF90PihJbnQxMjhIaWdoNjQodikpfSB7fQor
CisjZWxpZiBDUFUoQklHX0VORElBTikKKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4
SW1wbCh1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpCisgICAgOiBoaV97aGlnaH0sIGxvX3ts
b3d9IHt9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwoaW50IHYpCisgICAg
OiBoaV97diA8IDAgPyAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSA6IDB9
LAorICAgICAgbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0ge30KK2NvbnN0ZXhwciBVSW50
MTI4SW1wbDo6VUludDEyOEltcGwobG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAg
IDogaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCkgOiAw
fSwKKyAgICAgIGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9IHt9Citjb25zdGV4cHIgVUlu
dDEyOEltcGw6OlVJbnQxMjhJbXBsKGxvbmcgbG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50
KQorICAgIDogaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgp
KCkgOiAwfSwKKyAgICAgIGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9IHt9CisKK2NvbnN0
ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwodW5zaWduZWQgaW50IHYpIDogaGlfezB9LCBs
b197dn0ge30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQx
MjhJbXBsOjpVSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpIDogaGlfezB9LCBsb197dn0ge30K
Ky8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpV
SW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxvbmcgdikgOiBoaV97MH0sIGxvX3t2fSB7fQorCitj
b25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKEludDEyOEltcGwgdikKKyAgICA6IGhp
X3tzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4SGlnaDY0KHYpKX0sIGxvX3tJbnQxMjhMb3c2
NCh2KX0ge30KKworI2Vsc2UgIC8vIGJ5dGUgb3JkZXIKKyNlcnJvciAiVW5zdXBwb3J0ZWQgYnl0
ZSBvcmRlcjogbXVzdCBiZSBsaXR0bGUtZW5kaWFuIG9yIGJpZy1lbmRpYW4uIgorI2VuZGlmICAv
LyBieXRlIG9yZGVyCisKKy8vIENvbnZlcnNpb24gb3BlcmF0b3JzIHRvIGludGVnZXIgdHlwZXMu
CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
IGxvXyB8fCBoaV87IH0KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4obG9fKTsgfQorCitjb25zdGV4cHIgVUlu
dDEyOEltcGw6Om9wZXJhdG9yIHNpZ25lZCBjaGFyKCkgY29uc3QgeworICByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2lnbmVkIGNoYXI+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3Bl
cmF0b3IgdW5zaWduZWQgY2hhcigpIGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgY2hh
cjE2X3QoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyMTZfdD4obG9fKTsKK30K
KworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMzJfdCgpIGNvbnN0IHsKKyAg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXIzMl90Pihsb18pOworfQorCitjb25zdGV4cHIgVUludDEy
OEltcGw6Om9wZXJhdG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCgpIGNvbnN0IHsKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PEFCU0xfSU5URVJOQUxfV0NIQVJfVD4obG9fKTsKK30KKworLy8gTk9MSU5U
TkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIHNo
b3J0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KGxvXyk7IH0KKworY29uc3Rl
eHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCgpIGNvbnN0IHsgIC8vIE5P
TElOVChydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihs
b18pOyAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKK30KKworY29uc3RleHByIFVJ
bnQxMjhJbXBsOjpvcGVyYXRvciBpbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KGxvXyk7IH0KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBpbnQo
KSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGxvXyk7Cit9CisK
Ky8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpv
cGVyYXRvciBsb25nKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4obG9fKTsgfQor
Citjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGxvbmcoKSBjb25zdCB7
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPihsb18pOyAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKK30KKworY29uc3Rl
eHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGxvbmcoKSBjb25zdCB7ICAvLyBOT0xJTlQo
cnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGxvXyk7ICAgICAg
ICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorfQorCitjb25zdGV4cHIgVUludDEyOEltcGw6
Om9wZXJhdG9yIHVuc2lnbmVkIGxvbmcgbG9uZygpIGNvbnN0IHsgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obG9fKTsgICAg
ICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9CisKKy8vIENvbnZlcnNpb24gb3BlcmF0
b3JzIHRvIGZsb2F0aW5nIHBvaW50IHR5cGVzLgorCitpbmxpbmUgVUludDEyOEltcGw6Om9wZXJh
dG9yIGZsb2F0KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvXykgKyBz
dGQ6OmxkZXhwKHN0YXRpY19jYXN0PGZsb2F0PihoaV8pLCA2NCk7Cit9CisKK2lubGluZSBVSW50
MTI4SW1wbDo6b3BlcmF0b3IgZG91YmxlKCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihsb18pICsgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxkb3VibGU+KGhpXyksIDY0KTsK
K30KKworaW5saW5lIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJsZSgpIGNvbnN0IHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPihsb18pICsKKyAgICAgICAgIHN0ZDo6
bGRleHAoc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KGhpXyksIDY0KTsKK30KKworLy8gQ29tcGFy
aXNvbiBvcGVyYXRvcnMuCisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oVUludDEyOEltcGwg
bGhzLCBVSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIChVSW50MTI4TG93NjQobGhzKSA9PSBV
SW50MTI4TG93NjQocmhzKSAmJgorICAgICAgICAgIFVJbnQxMjhIaWdoNjQobGhzKSA9PSBVSW50
MTI4SGlnaDY0KHJocykpOworfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KFVJbnQxMjhJ
bXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7IHJldHVybiAhKGxocyA9PSByaHMpOyB9CisKK2Nv
bnN0ZXhwciBib29sIG9wZXJhdG9yPChVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykg
eworICByZXR1cm4gKFVJbnQxMjhIaWdoNjQobGhzKSA9PSBVSW50MTI4SGlnaDY0KHJocykpCisg
ICAgICAgICAgICAgPyAoVUludDEyOExvdzY0KGxocykgPCBVSW50MTI4TG93NjQocmhzKSkKKyAg
ICAgICAgICAgICA6IChVSW50MTI4SGlnaDY0KGxocykgPCBVSW50MTI4SGlnaDY0KHJocykpOwor
fQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1w
bCByaHMpIHsgcmV0dXJuIHJocyA8IGxoczsgfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9
KFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7IHJldHVybiAhKHJocyA8IGxocyk7
IH0KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJ
bXBsIHJocykgeyByZXR1cm4gIShsaHMgPCByaHMpOyB9CisKKy8vIFVuYXJ5IG9wZXJhdG9ycy4K
KworY29uc3RleHByIGlubGluZSBVSW50MTI4SW1wbCBvcGVyYXRvcisoVUludDEyOEltcGwgdmFs
KSB7CisgIHJldHVybiB2YWw7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgSW50MTI4SW1wbCBvcGVy
YXRvcisoSW50MTI4SW1wbCB2YWwpIHsKKyAgcmV0dXJuIHZhbDsKK30KKworY29uc3RleHByIFVJ
bnQxMjhJbXBsIG9wZXJhdG9yLShVSW50MTI4SW1wbCB2YWwpIHsKKyAgcmV0dXJuIE1ha2VVSW50
MTI4KAorICAgICAgflVJbnQxMjhIaWdoNjQodmFsKSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KFVJbnQxMjhMb3c2NCh2YWwpID09IDApLAorICAgICAgflVJbnQxMjhMb3c2NCh2YWwpICsg
MSk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvciEoVUludDEyOEltcGwgdmFs
KSB7CisgIHJldHVybiAhVUludDEyOEhpZ2g2NCh2YWwpICYmICFVSW50MTI4TG93NjQodmFsKTsK
K30KKworLy8gTG9naWNhbCBvcGVyYXRvcnMuCisKK2NvbnN0ZXhwciBpbmxpbmUgVUludDEyOElt
cGwgb3BlcmF0b3J+KFVJbnQxMjhJbXBsIHZhbCkgeworICByZXR1cm4gTWFrZVVJbnQxMjgoflVJ
bnQxMjhIaWdoNjQodmFsKSwgflVJbnQxMjhMb3c2NCh2YWwpKTsKK30KKworY29uc3RleHByIGlu
bGluZSBVSW50MTI4SW1wbCBvcGVyYXRvcnwoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCBy
aHMpIHsKKyAgcmV0dXJuIE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQobGhzKSB8IFVJbnQxMjhI
aWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpIHwgVUlu
dDEyOExvdzY0KHJocykpOworfQorCitjb25zdGV4cHIgaW5saW5lIFVJbnQxMjhJbXBsIG9wZXJh
dG9yJihVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gTWFrZVVJ
bnQxMjgoVUludDEyOEhpZ2g2NChsaHMpICYgVUludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAg
ICAgICAgICAgICAgVUludDEyOExvdzY0KGxocykgJiBVSW50MTI4TG93NjQocmhzKSk7Cit9CisK
K2NvbnN0ZXhwciBpbmxpbmUgVUludDEyOEltcGwgb3BlcmF0b3JeKFVJbnQxMjhJbXBsIGxocywg
VUludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtlVUludDEyOChVSW50MTI4SGlnaDY0KGxo
cykgXiBVSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICAgICBVSW50MTI4TG93
NjQobGhzKSBeIFVJbnQxMjhMb3c2NChyaHMpKTsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBV
SW50MTI4SW1wbDo6b3BlcmF0b3J8PShVSW50MTI4SW1wbCBvdGhlcikgeworICAqdGhpcyA9ICp0
aGlzIHwgb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBV
SW50MTI4SW1wbDo6b3BlcmF0b3ImPShVSW50MTI4SW1wbCBvdGhlcikgeworICAqdGhpcyA9ICp0
aGlzICYgb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBV
SW50MTI4SW1wbDo6b3BlcmF0b3JePShVSW50MTI4SW1wbCBvdGhlcikgeworICAqdGhpcyA9ICp0
aGlzIF4gb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworLy8gQXJpdGhtZXRpYyBvcGVyYXRv
cnMuCisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbCBvcGVyYXRvcjw8KFVJbnQxMjhJbXBsIGxocywg
aW50IGFtb3VudCkgeworICAvLyB1aW50NjRfdCBzaGlmdHMgb2YgPj0gNjQgYXJlIHVuZGVmaW5l
ZCwgc28gd2Ugd2lsbCBuZWVkIHNvbWUKKyAgLy8gc3BlY2lhbC1jYXNpbmcuCisgIHJldHVybiBh
bW91bnQgPj0gNjQgPyBNYWtlVUludDEyOChVSW50MTI4TG93NjQobGhzKSA8PCAoYW1vdW50IC0g
NjQpLCAwKQorICAgICAgICAgOiBhbW91bnQgPT0gMCA/IGxocworICAgICAgICAgICAgICAgICAg
ICAgICA6IE1ha2VVSW50MTI4KChVSW50MTI4SGlnaDY0KGxocykgPDwgYW1vdW50KSB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSW50MTI4TG93NjQobGhzKSA+
PiAoNjQgLSBhbW91bnQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
SW50MTI4TG93NjQobGhzKSA8PCBhbW91bnQpOworfQorCitjb25zdGV4cHIgVUludDEyOEltcGwg
b3BlcmF0b3I+PihVSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAgLy8gdWludDY0X3Qg
c2hpZnRzIG9mID49IDY0IGFyZSB1bmRlZmluZWQsIHNvIHdlIHdpbGwgbmVlZCBzb21lCisgIC8v
IHNwZWNpYWwtY2FzaW5nLgorICByZXR1cm4gYW1vdW50ID49IDY0ID8gTWFrZVVJbnQxMjgoMCwg
VUludDEyOEhpZ2g2NChsaHMpID4+IChhbW91bnQgLSA2NCkpCisgICAgICAgICA6IGFtb3VudCA9
PSAwID8gbGhzCisgICAgICAgICAgICAgICAgICAgICAgIDogTWFrZVVJbnQxMjgoVUludDEyOEhp
Z2g2NChsaHMpID4+IGFtb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoVUludDEyOExvdzY0KGxocykgPj4gYW1vdW50KSB8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChVSW50MTI4SGlnaDY0KGxocykgPDwgKDY0IC0gYW1vdW50KSkp
OworfQorCituYW1lc3BhY2UgaW50MTI4X2ludGVybmFsIHsKK2NvbnN0ZXhwciBVSW50MTI4SW1w
bCBBZGRSZXN1bHQoVUludDEyOEltcGwgcmVzdWx0LCBVSW50MTI4SW1wbCBsaHMpIHsKKyAgLy8g
Y2hlY2sgZm9yIGNhcnJ5CisgIHJldHVybiAoVUludDEyOExvdzY0KHJlc3VsdCkgPCBVSW50MTI4
TG93NjQobGhzKSkKKyAgICAgICAgICAgICA/IE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQocmVz
dWx0KSArIDEsIFVJbnQxMjhMb3c2NChyZXN1bHQpKQorICAgICAgICAgICAgIDogcmVzdWx0Owor
fQorfSAgLy8gbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbAorCitjb25zdGV4cHIgVUludDEyOElt
cGwgb3BlcmF0b3IrKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIHJldHVy
biBpbnQxMjhfaW50ZXJuYWw6OkFkZFJlc3VsdCgKKyAgICAgIE1ha2VVSW50MTI4KFVJbnQxMjhI
aWdoNjQobGhzKSArIFVJbnQxMjhIaWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgIFVJbnQx
MjhMb3c2NChsaHMpICsgVUludDEyOExvdzY0KHJocykpLAorICAgICAgbGhzKTsKK30KKworbmFt
ZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7Citjb25zdGV4cHIgVUludDEyOEltcGwgU3Vic3RydWN0
UmVzdWx0KFVJbnQxMjhJbXBsIHJlc3VsdCwgVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCBy
aHMpIHsKKyAgLy8gY2hlY2sgZm9yIGNhcnJ5CisgIHJldHVybiAoVUludDEyOExvdzY0KGxocykg
PCBVSW50MTI4TG93NjQocmhzKSkKKyAgICAgICAgICAgICA/IE1ha2VVSW50MTI4KFVJbnQxMjhI
aWdoNjQocmVzdWx0KSAtIDEsIFVJbnQxMjhMb3c2NChyZXN1bHQpKQorICAgICAgICAgICAgIDog
cmVzdWx0OworfQorfSAgLy8gbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbAorCitjb25zdGV4cHIg
VUludDEyOEltcGwgb3BlcmF0b3ItKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7
CisgIHJldHVybiBpbnQxMjhfaW50ZXJuYWw6OlN1YnN0cnVjdFJlc3VsdCgKKyAgICAgIE1ha2VV
SW50MTI4KFVJbnQxMjhIaWdoNjQobGhzKSAtIFVJbnQxMjhIaWdoNjQocmhzKSwKKyAgICAgICAg
ICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpIC0gVUludDEyOExvdzY0KHJocykpLAorICAgICAg
bGhzLCByaHMpOworfQorCitpbmxpbmUgVUludDEyOEltcGwgb3BlcmF0b3IqKFVJbnQxMjhJbXBs
IGxocywgVUludDEyOEltcGwgcmhzKSB7CisjaWYgQ09NUElMRVIoTVNWQykgJiYgQ1BVKFg4Nl82
NCkKKyAgdWludDY0X3QgY2Fycnk7CisgIHVpbnQ2NF90IGxvdyA9IF91bXVsMTI4KFVJbnQxMjhM
b3c2NChsaHMpLCBVSW50MTI4TG93NjQocmhzKSwgJmNhcnJ5KTsKKyAgcmV0dXJuIE1ha2VVSW50
MTI4KFVJbnQxMjhMb3c2NChsaHMpICogVUludDEyOEhpZ2g2NChyaHMpICsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBVSW50MTI4SGlnaDY0KGxocykgKiBVSW50MTI4TG93NjQocmhzKSArIGNh
cnJ5LAorICAgICAgICAgICAgICAgICAgICAgbG93KTsKKyNlbHNlICAgLy8gQUJTTF9IQVZFX0lO
VFJJTlNJQzEyOAorICB1aW50NjRfdCBhMzIgPSBVSW50MTI4TG93NjQobGhzKSA+PiAzMjsKKyAg
dWludDY0X3QgYTAwID0gVUludDEyOExvdzY0KGxocykgJiAweGZmZmZmZmZmOworICB1aW50NjRf
dCBiMzIgPSBVSW50MTI4TG93NjQocmhzKSA+PiAzMjsKKyAgdWludDY0X3QgYjAwID0gVUludDEy
OExvdzY0KHJocykgJiAweGZmZmZmZmZmOworICBVSW50MTI4SW1wbCByZXN1bHQgPQorICAgICAg
TWFrZVVJbnQxMjgoVUludDEyOEhpZ2g2NChsaHMpICogVUludDEyOExvdzY0KHJocykgKworICAg
ICAgICAgICAgICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpICogVUludDEyOEhpZ2g2NChyaHMp
ICsgYTMyICogYjMyLAorICAgICAgICAgICAgICAgICAgYTAwICogYjAwKTsKKyAgcmVzdWx0ICs9
IFVJbnQxMjhJbXBsKGEzMiAqIGIwMCkgPDwgMzI7CisgIHJlc3VsdCArPSBVSW50MTI4SW1wbChh
MDAgKiBiMzIpIDw8IDMyOworICByZXR1cm4gcmVzdWx0OworI2VuZGlmCit9CisKKy8vIEluY3Jl
bWVudC9kZWNyZW1lbnQgb3BlcmF0b3JzLgorCitpbmxpbmUgVUludDEyOEltcGwgVUludDEyOElt
cGw6Om9wZXJhdG9yKysoaW50KSB7CisgIFVJbnQxMjhJbXBsIHRtcCgqdGhpcyk7CisgICp0aGlz
ICs9IDE7CisgIHJldHVybiB0bXA7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCBVSW50MTI4SW1w
bDo6b3BlcmF0b3ItLShpbnQpIHsKKyAgVUludDEyOEltcGwgdG1wKCp0aGlzKTsKKyAgKnRoaXMg
LT0gMTsKKyAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1w
bDo6b3BlcmF0b3IrKygpIHsKKyAgKnRoaXMgKz0gMTsKKyAgcmV0dXJuICp0aGlzOworfQorCitp
bmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvci0tKCkgeworICAqdGhpcyAt
PSAxOworICByZXR1cm4gKnRoaXM7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIE1ha2VJbnQx
MjgoaW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpIHsKKyAgcmV0dXJuIEludDEyOEltcGwoaGln
aCwgbG93KTsKK30KKworLy8gQXNzaWdubWVudCBmcm9tIGludGVnZXIgdHlwZXMuCitpbmxpbmUg
SW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KGludCB2KSB7CisgIHJldHVybiAqdGhp
cyA9IEludDEyOEltcGwodik7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpv
cGVyYXRvcj0odW5zaWduZWQgaW50IHYpIHsKKyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2
KTsKK30KKworaW5saW5lIEludDEyOEltcGwmIEludDEyOEltcGw6Om9wZXJhdG9yPShsb25nIHYp
IHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2
KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgSW50MTI4SW1w
bCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgdikgeworICByZXR1cm4gKnRo
aXMgPSBJbnQxMjhJbXBsKHYpOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkK
K2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcj0obG9uZyBsb25nIHYpIHsK
KyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUo
cnVudGltZS9pbnQpCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KHVu
c2lnbmVkIGxvbmcgbG9uZyB2KSB7CisgIHJldHVybiAqdGhpcyA9IEludDEyOEltcGwodik7Cit9
CisKKy8vIEFyaXRobWV0aWMgb3BlcmF0b3JzLgorY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3ItKEludDEyOEltcGwgdik7Citjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcisoSW50MTI4
SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9y
LShJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworSW50MTI4SW1wbCBvcGVyYXRvcioo
SW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsKK1dURl9FWFBPUlRfUFJJVkFURSBJbnQx
MjhJbXBsIG9wZXJhdG9yLyhJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworV1RGX0VY
UE9SVF9QUklWQVRFIEludDEyOEltcGwgb3BlcmF0b3IlKEludDEyOEltcGwgbGhzLCBJbnQxMjhJ
bXBsIHJocyk7Citjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcnwoSW50MTI4SW1wbCBsaHMs
IEludDEyOEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yJihJbnQxMjhJ
bXBsIGxocywgSW50MTI4SW1wbCByaHMpOworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3Je
KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocyk7Citjb25zdGV4cHIgSW50MTI4SW1wbCBv
cGVyYXRvcjw8KEludDEyOEltcGwgbGhzLCBpbnQgYW1vdW50KTsKK2NvbnN0ZXhwciBJbnQxMjhJ
bXBsIG9wZXJhdG9yPj4oSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpOworCitpbmxpbmUgSW50
MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3IrPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0
aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4
SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3ItPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlz
ID0gKnRoaXMgLSBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1w
bCYgSW50MTI4SW1wbDo6b3BlcmF0b3IqPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0g
KnRoaXMgKiBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYg
SW50MTI4SW1wbDo6b3BlcmF0b3IvPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRo
aXMgLyBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50
MTI4SW1wbDo6b3BlcmF0b3IlPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMg
JSBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4
SW1wbDo6b3BlcmF0b3J8PShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgfCBv
dGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1w
bDo6b3BlcmF0b3ImPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgJiBvdGhl
cjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6
b3BlcmF0b3JePShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgXiBvdGhlcjsK
KyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3Bl
cmF0b3I8PD0oaW50IGFtb3VudCkgeworICAqdGhpcyA9ICp0aGlzIDw8IGFtb3VudDsKKyAgcmV0
dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I+
Pj0oaW50IGFtb3VudCkgeworICAqdGhpcyA9ICp0aGlzID4+IGFtb3VudDsKKyAgcmV0dXJuICp0
aGlzOworfQorCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIGZvciBjb21wYXJpc29uIG9wZXJhdG9y
cy4KK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwg
cmhzKTsKKworbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7CisKKy8vIENhc3RzIGZyb20gdW5z
aWduZWQgdG8gc2lnbmVkIHdoaWxlIHByZXNlcnZpbmcgdGhlIHVuZGVybHlpbmcgYmluYXJ5Cisv
LyByZXByZXNlbnRhdGlvbi4KK2NvbnN0ZXhwciBpbnQ2NF90IEJpdENhc3RUb1NpZ25lZCh1aW50
NjRfdCB2KSB7CisgIC8vIENhc3RpbmcgYW4gdW5zaWduZWQgaW50ZWdlciB0byBhIHNpZ25lZCBp
bnRlZ2VyIG9mIHRoZSBzYW1lCisgIC8vIHdpZHRoIGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQg
YmVoYXZpb3IgaWYgdGhlIHNvdXJjZSB2YWx1ZSB3b3VsZCBub3QgZml0CisgIC8vIGluIHRoZSBk
ZXN0aW5hdGlvbiB0eXBlLiBXZSBzdGVwIGFyb3VuZCBpdCB3aXRoIGEgcm91bmR0cmlwIGJpdHdp
c2Ugbm90CisgIC8vIG9wZXJhdGlvbiB0byBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiByZW1haW5z
IGNvbnN0ZXhwci4gQ2xhbmcsIEdDQywgYW5kCisgIC8vIE1TVkMgb3B0aW1pemUgdGhpcyB0byBh
IG5vLW9wIG9uIHg4Ni02NC4KKyAgcmV0dXJuIHYgJiAodWludDY0X3R7MX0gPDwgNjMpID8gfnN0
YXRpY19jYXN0PGludDY0X3Q+KH52KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGludDEyOF9p
bnRlcm5hbAorCisvLyAjaW5jbHVkZSAiYWJzbC9udW1lcmljL2ludDEyOF9ub19pbnRyaW5zaWMu
aW5jIiAgLy8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCitjb25zdGV4cHIgdWludDY0X3QgSW50MTI4
TG93NjQoSW50MTI4SW1wbCB2KSB7IHJldHVybiB2LmxvXzsgfQorCitjb25zdGV4cHIgaW50NjRf
dCBJbnQxMjhIaWdoNjQoSW50MTI4SW1wbCB2KSB7IHJldHVybiB2LmhpXzsgfQorCisjaWYgQ1BV
KExJVFRMRV9FTkRJQU4pCisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGludDY0
X3QgaGlnaCwgdWludDY0X3QgbG93KSA6CisgICAgbG9fKGxvdyksIGhpXyhoaWdoKSB7fQorCitj
b25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChpbnQgdikKKyAgICA6IGxvX3tzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odil9LCBoaV97diA8IDAgPyB+aW50NjRfdHswfSA6IDB9IHt9Citjb25z
dGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9p
bnQpCisgICAgOiBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwgaGlfe3YgPCAwID8gfmlu
dDY0X3R7MH0gOiAwfSB7fQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwobG9uZyBs
b25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBsb197c3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHYpfSwgaGlfe3YgPCAwID8gfmludDY0X3R7MH0gOiAwfSB7fQorCitjb25zdGV4cHIg
SW50MTI4SW1wbDo6SW50MTI4SW1wbCh1bnNpZ25lZCBpbnQgdikgOiBsb197dn0sIGhpX3swfSB7
fQorLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgSW50MTI4SW1wbDo6
SW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpIDogbG9fe3Z9LCBoaV97MH0ge30KKy8vIE5PTElO
VE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwo
dW5zaWduZWQgbG9uZyBsb25nIHYpIDogbG9fe3Z9LCBoaV97MH0ge30KKworY29uc3RleHByIElu
dDEyOEltcGw6OkludDEyOEltcGwoVUludDEyOEltcGwgdikKKyAgICA6IGxvX3tVSW50MTI4TG93
NjQodil9LCBoaV97c3RhdGljX2Nhc3Q8aW50NjRfdD4oVUludDEyOEhpZ2g2NCh2KSl9IHt9CisK
KyNlbGlmIENQVShCSUdfRU5ESUFOKQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1w
bChpbnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykgOgorICAgIGhpX3toaWdofSwgbG9fe2xvd30g
e30KKworY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwoaW50IHYpCisgICAgOiBoaV97
diA8IDAgPyB+aW50NjRfdHswfSA6IDB9LCBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSB7
fQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwobG9uZyB2KSAgLy8gTk9MSU5UKHJ1
bnRpbWUvaW50KQorICAgIDogaGlfe3YgPCAwID8gfmludDY0X3R7MH0gOiAwfSwgbG9fe3N0YXRp
Y19jYXN0PHVpbnQ2NF90Pih2KX0ge30KK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KGxvbmcgbG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIDogaGlfe3YgPCAwID8g
fmludDY0X3R7MH0gOiAwfSwgbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0ge30KKworY29u
c3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwodW5zaWduZWQgaW50IHYpIDogaGlfezB9LCBs
b197dn0ge30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIEludDEy
OEltcGw6OkludDEyOEltcGwodW5zaWduZWQgbG9uZyB2KSA6IGhpX3swfSwgbG9fe3Z9IHt9Cisv
LyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQx
MjhJbXBsKHVuc2lnbmVkIGxvbmcgbG9uZyB2KSA6IGhpX3swfSwgbG9fe3Z9IHt9CisKK2NvbnN0
ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKFVJbnQxMjhJbXBsIHYpCisgICAgOiBoaV97c3Rh
dGljX2Nhc3Q8aW50NjRfdD4oVUludDEyOEhpZ2g2NCh2KSl9LCBsb197VUludDEyOExvdzY0KHYp
fSB7fQorCisjZWxzZSAgLy8gYnl0ZSBvcmRlcgorI2Vycm9yICJVbnN1cHBvcnRlZCBieXRlIG9y
ZGVyOiBtdXN0IGJlIGxpdHRsZS1lbmRpYW4gb3IgYmlnLWVuZGlhbi4iCisjZW5kaWYgIC8vIGJ5
dGUgb3JkZXIKKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBsb18gfHwgaGlfOyB9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBj
aGFyKCkgY29uc3QgeworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PGNoYXI+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsKK30KKwor
Y29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHNpZ25lZCBjaGFyKCkgY29uc3QgeworICAv
LyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25l
ZCBjaGFyPihzdGF0aWNfY2FzdDxsb25nIGxvbmc+KCp0aGlzKSk7Cit9CisKK2NvbnN0ZXhwciBJ
bnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBjaGFyKCkgY29uc3QgeworICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obG9fKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6
Om9wZXJhdG9yIGNoYXIxNl90KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcjE2
X3Q+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMzJfdCgp
IGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIzMl90Pihsb18pOworfQorCitjb25z
dGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UKCkgY29uc3Qg
eworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0
PEFCU0xfSU5URVJOQUxfV0NIQVJfVD4oc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigqdGhpcykpOwor
fQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3Igc2hvcnQoKSBjb25zdCB7ICAvLyBO
T0xJTlQocnVudGltZS9pbnQpCisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsK
K30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIHNob3J0KCkgY29u
c3QgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQ+KGxvXyk7ICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9CisKK2Nv
bnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBpbnQoKSBjb25zdCB7CisgIC8vIE5PTElOVE5F
WFRMSU5FKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KCp0aGlzKSk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRv
ciB1bnNpZ25lZCBpbnQoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBp
bnQ+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nKCkgY29u
c3QgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBOT0xJTlRORVhUTElORShydW50aW1l
L2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4o
KnRoaXMpKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGxv
bmcoKSBjb25zdCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPihsb18pOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQor
fQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3QgeyAg
Ly8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBXZSBkb24ndCBib3RoZXIgY2hlY2tpbmcgdGhl
IHZhbHVlIG9mIGhpXy4gSWYgKnRoaXMgPCAwLCBsb18ncyBoaWdoIGJpdAorICAvLyBtdXN0IGJl
IHNldCBpbiBvcmRlciBmb3IgdGhlIHZhbHVlIHRvIGZpdCBpbnRvIGEgbG9uZyBsb25nLiBDb252
ZXJzZWx5LCBpZgorICAvLyBsb18ncyBoaWdoIGJpdCBpcyBzZXQsICp0aGlzIG11c3QgYmUgPCAw
IGZvciB0aGUgdmFsdWUgdG8gZml0LgorICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpCaXRDYXN0
VG9TaWduZWQobG9fKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2ln
bmVkIGxvbmcgbG9uZygpIGNvbnN0IHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obG9fKTsgICAgICAgICAgIC8vIE5PTElO
VChydW50aW1lL2ludCkKK30KKworaW5saW5lIEludDEyOEltcGw6Om9wZXJhdG9yIGZsb2F0KCkg
Y29uc3QgeworICAvLyBXZSBtdXN0IGNvbnZlcnQgdGhlIGFic29sdXRlIHZhbHVlIGFuZCB0aGVu
IG5lZ2F0ZSBhcyBuZWVkZWQsIGJlY2F1c2UKKyAgLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXMgYXJl
IHR5cGljYWxseSBzaWduLW1hZ25pdHVkZS4gT3RoZXJ3aXNlLCB0aGUKKyAgLy8gZGlmZmVyZW5j
ZSBiZXR3ZWVuIHRoZSBoaWdoIGFuZCBsb3cgNjQgYml0cyB3aGVuIGludGVycHJldGVkIGFzIHR3
bydzCisgIC8vIGNvbXBsZW1lbnQgb3ZlcndoZWxtcyB0aGUgcHJlY2lzaW9uIG9mIHRoZSBtYW50
aXNzYS4KKyAgLy8KKyAgLy8gQWxzbyBjaGVjayB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbmVnYXRl
IEludDEyOE1pbigpCisgIHJldHVybiBoaV8gPCAwICYmICp0aGlzICE9IEludDEyOE1pbigpCisg
ICAgICAgICAgICAgPyAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0qdGhpcykKKyAgICAgICAgICAgICA6
IHN0YXRpY19jYXN0PGZsb2F0Pihsb18pICsKKyAgICAgICAgICAgICAgICAgICBzdGQ6OmxkZXhw
KHN0YXRpY19jYXN0PGZsb2F0PihoaV8pLCA2NCk7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsOjpv
cGVyYXRvciBkb3VibGUoKSBjb25zdCB7CisgIC8vIFNlZSBjb21tZW50IGluIEludDEyOEltcGw6
Om9wZXJhdG9yIGZsb2F0KCkgYWJvdmUuCisgIHJldHVybiBoaV8gPCAwICYmICp0aGlzICE9IElu
dDEyOE1pbigpCisgICAgICAgICAgICAgPyAtc3RhdGljX2Nhc3Q8ZG91YmxlPigtKnRoaXMpCisg
ICAgICAgICAgICAgOiBzdGF0aWNfY2FzdDxkb3VibGU+KGxvXykgKworICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihoaV8pLCA2NCk7Cit9CisKK2lubGlu
ZSBJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJsZSgpIGNvbnN0IHsKKyAgLy8gU2VlIGNv
bW1lbnQgaW4gSW50MTI4SW1wbDo6b3BlcmF0b3IgZmxvYXQoKSBhYm92ZS4KKyAgcmV0dXJuIGhp
XyA8IDAgJiYgKnRoaXMgIT0gSW50MTI4TWluKCkKKyAgICAgICAgICAgICA/IC1zdGF0aWNfY2Fz
dDxsb25nIGRvdWJsZT4oLSp0aGlzKQorICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8bG9uZyBk
b3VibGU+KGxvXykgKworICAgICAgICAgICAgICAgICAgIHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8
bG9uZyBkb3VibGU+KGhpXyksIDY0KTsKK30KKworLy8gQ29tcGFyaXNvbiBvcGVyYXRvcnMuCisK
K2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhz
KSB7CisgIHJldHVybiAoSW50MTI4TG93NjQobGhzKSA9PSBJbnQxMjhMb3c2NChyaHMpICYmCisg
ICAgICAgICAgSW50MTI4SGlnaDY0KGxocykgPT0gSW50MTI4SGlnaDY0KHJocykpOworfQorCitj
b25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eyByZXR1cm4gIShsaHMgPT0gcmhzKTsgfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoSW50
MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiAoSW50MTI4SGlnaDY0KGxo
cykgPT0gSW50MTI4SGlnaDY0KHJocykpCisgICAgICAgICAgICAgPyAoSW50MTI4TG93NjQobGhz
KSA8IEludDEyOExvdzY0KHJocykpCisgICAgICAgICAgICAgOiAoSW50MTI4SGlnaDY0KGxocykg
PCBJbnQxMjhIaWdoNjQocmhzKSk7Cit9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPihJbnQx
MjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIChJbnQxMjhIaWdoNjQobGhz
KSA9PSBJbnQxMjhIaWdoNjQocmhzKSkKKyAgICAgICAgICAgICA/IChJbnQxMjhMb3c2NChsaHMp
ID4gSW50MTI4TG93NjQocmhzKSkKKyAgICAgICAgICAgICA6IChJbnQxMjhIaWdoNjQobGhzKSA+
IEludDEyOEhpZ2g2NChyaHMpKTsKK30KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShJbnQx
MjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsgcmV0dXJuICEobGhzID4gcmhzKTsgfQorCitj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykg
eyByZXR1cm4gIShsaHMgPCByaHMpOyB9CisKKy8vIFVuYXJ5IG9wZXJhdG9ycy4KKworY29uc3Rl
eHByIEludDEyOEltcGwgb3BlcmF0b3ItKEludDEyOEltcGwgdikgeworICByZXR1cm4gTWFrZUlu
dDEyOCh+SW50MTI4SGlnaDY0KHYpICsgKEludDEyOExvdzY0KHYpID09IDApLAorICAgICAgICAg
ICAgICAgICAgICB+SW50MTI4TG93NjQodikgKyAxKTsKK30KKworY29uc3RleHByIGJvb2wgb3Bl
cmF0b3IhKEludDEyOEltcGwgdikgeworICByZXR1cm4gIUludDEyOExvdzY0KHYpICYmICFJbnQx
MjhIaWdoNjQodik7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yfihJbnQxMjhJ
bXBsIHZhbCkgeworICByZXR1cm4gTWFrZUludDEyOCh+SW50MTI4SGlnaDY0KHZhbCksIH5JbnQx
MjhMb3c2NCh2YWwpKTsKK30KKworLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMuCisKK25hbWVzcGFj
ZSBpbnQxMjhfaW50ZXJuYWwgeworY29uc3RleHByIEludDEyOEltcGwgU2lnbmVkQWRkUmVzdWx0
KEludDEyOEltcGwgcmVzdWx0LCBJbnQxMjhJbXBsIGxocykgeworICAvLyBjaGVjayBmb3IgY2Fy
cnkKKyAgcmV0dXJuIChJbnQxMjhMb3c2NChyZXN1bHQpIDwgSW50MTI4TG93NjQobGhzKSkKKyAg
ICAgICAgICAgICA/IE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KHJlc3VsdCkgKyAxLCBJbnQxMjhM
b3c2NChyZXN1bHQpKQorICAgICAgICAgICAgIDogcmVzdWx0OworfQorfSAgLy8gbmFtZXNwYWNl
IGludDEyOF9pbnRlcm5hbAorY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKEludDEyOElt
cGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpTaWdu
ZWRBZGRSZXN1bHQoCisgICAgICBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChsaHMpICsgSW50MTI4
SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgIEludDEyOExvdzY0KGxocykgKyBJbnQxMjhM
b3c2NChyaHMpKSwKKyAgICAgIGxocyk7Cit9CisKK25hbWVzcGFjZSBpbnQxMjhfaW50ZXJuYWwg
eworY29uc3RleHByIEludDEyOEltcGwgU2lnbmVkU3Vic3RydWN0UmVzdWx0KEludDEyOEltcGwg
cmVzdWx0LCBJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgLy8gY2hlY2sgZm9y
IGNhcnJ5CisgIHJldHVybiAoSW50MTI4TG93NjQobGhzKSA8IEludDEyOExvdzY0KHJocykpCisg
ICAgICAgICAgICAgPyBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChyZXN1bHQpIC0gMSwgSW50MTI4
TG93NjQocmVzdWx0KSkKKyAgICAgICAgICAgICA6IHJlc3VsdDsKK30KK30gIC8vIG5hbWVzcGFj
ZSBpbnQxMjhfaW50ZXJuYWwKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yLShJbnQxMjhJ
bXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIGludDEyOF9pbnRlcm5hbDo6U2ln
bmVkU3Vic3RydWN0UmVzdWx0KAorICAgICAgTWFrZUludDEyOChJbnQxMjhIaWdoNjQobGhzKSAt
IEludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAgICAgICAgICBJbnQxMjhMb3c2NChsaHMpIC0g
SW50MTI4TG93NjQocmhzKSksCisgICAgICBsaHMsIHJocyk7Cit9CisKK2lubGluZSBJbnQxMjhJ
bXBsIG9wZXJhdG9yKihJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJu
IE1ha2VJbnQxMjgoCisgICAgICBpbnQxMjhfaW50ZXJuYWw6OkJpdENhc3RUb1NpZ25lZChVSW50
MTI4SGlnaDY0KFVJbnQxMjhJbXBsKGxocykgKiByaHMpKSwKKyAgICAgIFVJbnQxMjhMb3c2NChV
SW50MTI4SW1wbChsaHMpICogcmhzKSk7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsIEludDEyOElt
cGw6Om9wZXJhdG9yKysoaW50KSB7CisgIEludDEyOEltcGwgdG1wKCp0aGlzKTsKKyAgKnRoaXMg
Kz0gMTsKKyAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIEludDEyOEltcGwgSW50MTI4SW1wbDo6
b3BlcmF0b3ItLShpbnQpIHsKKyAgSW50MTI4SW1wbCB0bXAoKnRoaXMpOworICAqdGhpcyAtPSAx
OworICByZXR1cm4gdG1wOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3Bl
cmF0b3IrKygpIHsKKyAgKnRoaXMgKz0gMTsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUg
SW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3ItLSgpIHsKKyAgKnRoaXMgLT0gMTsKKyAg
cmV0dXJuICp0aGlzOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcnwoSW50MTI4
SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtlSW50MTI4KEludDEyOEhp
Z2g2NChsaHMpIHwgSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICAgIEludDEy
OExvdzY0KGxocykgfCBJbnQxMjhMb3c2NChyaHMpKTsKK30KKworY29uc3RleHByIEludDEyOElt
cGwgb3BlcmF0b3ImKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4g
TWFrZUludDEyOChJbnQxMjhIaWdoNjQobGhzKSAmIEludDEyOEhpZ2g2NChyaHMpLAorICAgICAg
ICAgICAgICAgICAgICBJbnQxMjhMb3c2NChsaHMpICYgSW50MTI4TG93NjQocmhzKSk7Cit9CisK
K2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yXihJbnQxMjhJbXBsIGxocywgSW50MTI4SW1w
bCByaHMpIHsKKyAgcmV0dXJuIE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KGxocykgXiBJbnQxMjhI
aWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgICAgSW50MTI4TG93NjQobGhzKSBeIEludDEy
OExvdzY0KHJocykpOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcjw8KEludDEy
OEltcGwgbGhzLCBpbnQgYW1vdW50KSB7CisgIC8vIGludDY0X3Qgc2hpZnRzIG9mID49IDY0IGFy
ZSB1bmRlZmluZWQsIHNvIHdlIG5lZWQgc29tZSBzcGVjaWFsLWNhc2luZy4KKyAgcmV0dXJuIGFt
b3VudCA+PSA2NAorICAgICAgICAgICAgID8gTWFrZUludDEyOCgKKyAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxpbnQ2NF90PihJbnQxMjhMb3c2NChsaHMpIDw8IChhbW91bnQgLSA2NCkp
LCAwKQorICAgICAgICAgOiBhbW91bnQgPT0gMAorICAgICAgICAgICAgID8gbGhzCisgICAgICAg
ICAgICAgOiBNYWtlSW50MTI4KAorICAgICAgICAgICAgICAgICAgIChJbnQxMjhIaWdoNjQobGhz
KSA8PCBhbW91bnQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50NjRf
dD4oSW50MTI4TG93NjQobGhzKSA+PiAoNjQgLSBhbW91bnQpKSwKKyAgICAgICAgICAgICAgICAg
ICBJbnQxMjhMb3c2NChsaHMpIDw8IGFtb3VudCk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBs
IG9wZXJhdG9yPj4oSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAgLy8gaW50NjRfdCBz
aGlmdHMgb2YgPj0gNjQgYXJlIHVuZGVmaW5lZCwgc28gd2UgbmVlZCBzb21lIHNwZWNpYWwtY2Fz
aW5nLgorICAvLyBUaGUgKEludDEyOEhpZ2g2NChsaHMpID4+IDMyKSA+PiAzMiAidHJpY2siIGNh
dXNlcyB0aGUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQKKyAgLy8gaW50NjQgdG8gYmUgaW5pdGl0aWFs
aXplZCB3aXRoIGFsbCB6ZXJvcyBvciBhbGwgb25lcyBjb3JyZWN0bHkuIEl0IHRha2VzCisgIC8v
IGludG8gYWNjb3VudCB3aGV0aGVyIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUgb3IgcG9zaXRpdmUs
IGFuZCB3aGV0aGVyIHRoZQorICAvLyBjdXJyZW50IGFyY2hpdGVjdHVyZSBkb2VzIGFyaXRobWV0
aWMgb3IgbG9naWNhbCByaWdodCBzaGlmdHMgZm9yIG5lZ2F0aXZlCisgIC8vIG51bWJlcnMuCisg
IHJldHVybiBhbW91bnQgPj0gNjQKKyAgICAgICAgICAgICA/IE1ha2VJbnQxMjgoCisgICAgICAg
ICAgICAgICAgICAgKEludDEyOEhpZ2g2NChsaHMpID4+IDMyKSA+PiAzMiwKKyAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4SGlnaDY0KGxocykgPj4gKGFtb3Vu
dCAtIDY0KSkpCisgICAgICAgICA6IGFtb3VudCA9PSAwCisgICAgICAgICAgICAgPyBsaHMKKyAg
ICAgICAgICAgICA6IE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KGxocykgPj4gYW1vdW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAoSW50MTI4TG93NjQobGhzKSA+PiBhbW91bnQpIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4
SGlnaDY0KGxocykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKDY0IC0gYW1v
dW50KSkpOworfQorCiAjaWYgSEFWRShJTlQxMjhfVCkKIHVzaW5nIFVJbnQxMjggPSBfX3VpbnQx
MjhfdDsKIHVzaW5nIEludDEyOCA9IF9faW50MTI4X3Q7CiAjZWxzZQotdXNpbmcgVUludDEyOCA9
IEludDEyOEltcGw8ZmFsc2U+OwotdXNpbmcgSW50MTI4ID0gSW50MTI4SW1wbDx0cnVlPjsKK3Vz
aW5nIFVJbnQxMjggPSBVSW50MTI4SW1wbDsKK3VzaW5nIEludDEyOCA9IEludDEyOEltcGw7CiAj
ZW5kaWYKIAotdGVtcGxhdGUgPGludCBCSVRTPiBzdHJ1Y3QgSG9zdFVuc2lnbmVkSW50VHlwZUhl
bHBlciB7Ci0gICAgdXNpbmcgdHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDwoQklUUyA8PSA4KSwg
c3RkOjp1aW50OF90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gMTYpLCBz
dGQ6OnVpbnQxNl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gMzIpLCBz
dGQ6OnVpbnQzMl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gNjQpLCBz
dGQ6OnVpbnQ2NF90LCBVSW50MTI4Pj4+PjsKLX07Ci10ZW1wbGF0ZSA8aW50IEJJVFM+IHN0cnVj
dCBIb3N0U2lnbmVkSW50VHlwZUhlbHBlciB7Ci0gICAgdXNpbmcgdHlwZSA9IHN0ZDo6Y29uZGl0
aW9uYWxfdDwoQklUUyA8PSA4KSwgc3RkOjppbnQ4X3QsCi0gICAgICAgIHN0ZDo6Y29uZGl0aW9u
YWxfdDwoQklUUyA8PSAxNiksIHN0ZDo6aW50MTZfdCwKLSAgICAgICAgc3RkOjpjb25kaXRpb25h
bF90PChCSVRTIDw9IDMyKSwgc3RkOjppbnQzMl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFs
X3Q8KEJJVFMgPD0gNjQpLCBzdGQ6OmludDY0X3QsIEludDEyOD4+Pj47Ci19OwotdGVtcGxhdGUg
PGludCBCSVRTPgotdXNpbmcgSG9zdFVuc2lnbmVkSW50VHlwZSA9IHR5cGVuYW1lIEhvc3RVbnNp
Z25lZEludFR5cGVIZWxwZXI8QklUUz46OnR5cGU7Ci10ZW1wbGF0ZSA8aW50IEJJVFM+Ci11c2lu
ZyBIb3N0U2lnbmVkSW50VHlwZSA9IHR5cGVuYW1lIEhvc3RTaWduZWRJbnRUeXBlSGVscGVyPEJJ
VFM+Ojp0eXBlOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKK30gIC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpJbnQxMjg7CiB1c2luZyBXVEY6OlVJbnQxMjg7CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggY2NkOTE0Y2IzZDRlZGFjYThkZjUy
ZGM2NGY0Y2IyNjgxYzM0MzZkOC4uMzg4ZTBmYTBhMGU0MDhlOGE1ZmE2OGE1NmY1NWI5MTVlODVh
NjMyMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDIxLTEwLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW1dURl0gUmVwbGFjZSBjdXJyZW50IExMVk0gZmxhbmcncyBJbnQx
Mjggd2l0aCBhYnNlaWwtY3BwJ3MgSW50MTI4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIxMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ludDEyOC5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUWVBFRF9URVNUKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdFVuYXJ5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RCaW5hcnkpOiBEZWxldGVkLgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VG9OYXRpdmUpOiBEZWxldGVkLgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6RnJvbU5hdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0
VnNOYXRpdmUpOiBEZWxldGVkLgorCiAyMDIxLTEwLTIxICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRk
YWRAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkdMIGJvdCBzaG91bGQgcnVuIHRlc3RzIHdpdGgg
R1BVIFByb2Nlc3MgZW5hYmxlZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSW50MTI4LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ludDEyOC5j
cHAKaW5kZXggNzc1YmY3MTE5NDBkZDQyMmZmNDcyMWI0Y2RiYzVlN2ZhNzYzZjQyYy4uM2UyZTNj
N2Q4NTgxNTcwOTJiMmU1ODI2Zjg4MDg5ODRiYjU2MTBmZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvSW50MTI4LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9JbnQxMjguY3BwCkBAIC0xLDE0NSArMSwxMTk1IEBACi0vLyBUYWtlbiBmcm9t
IExMVk0gUHJvamVjdCwgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAgd2l0aCBMTFZNIEV4
Y2VwdGlvbnMuCi0vLyBTZWUgU291cmNlL1dURi9MSUNFTlNFLUxMVk0udHh0IGZvciBsaWNlbnNl
IGluZm9ybWF0aW9uLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgV0lU
SCBMTFZNLWV4Y2VwdGlvbgotCi0vLyBCYXNlZCBvbjoKLS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9s
bHZtL2xsdm0tcHJvamVjdC9ibG9iL2Q0ODBmOTY4L2ZsYW5nL3VuaXR0ZXN0cy9FdmFsdWF0ZS91
aW50MTI4LmNwcAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIEFic2VpbCBBdXRob3JzLgorLy8KKy8v
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisvLworLy8gICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlIDx3dGYvSW50MTI4Lmg+CiAKLSNpbmNsdWRlIDxj
aW50dHlwZXM+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNs
dWRlIDxyYW5kb20+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4K
KyNpbmNsdWRlIDx2ZWN0b3I+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAotdXNpbmcg
Tm9uTmF0aXZlSW50MTI4ID0gV1RGOjpJbnQxMjhJbXBsPHRydWU+OwotdXNpbmcgTm9uTmF0aXZl
VUludDEyOCA9IFdURjo6SW50MTI4SW1wbDxmYWxzZT47Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFdURl9VSW50MTI4SW50ZWdlclRyYWl0c1Rlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpU
ZXN0IHsKK307Cit0eXBlZGVmIDo6dGVzdGluZzo6VHlwZXM8Ym9vbCwgY2hhciwgc2lnbmVkIGNo
YXIsIHVuc2lnbmVkIGNoYXIsIGNoYXIxNl90LAorICAgIGNoYXIzMl90LCB3Y2hhcl90LAorICAg
IHNob3J0LCAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgdW5zaWduZWQgc2hvcnQsIC8vIE5P
TElOVChydW50aW1lL2ludCkKKyAgICBpbnQsIHVuc2lnbmVkIGludCwKKyAgICBsb25nLCAvLyBO
T0xJTlQocnVudGltZS9pbnQpCisgICAgdW5zaWduZWQgbG9uZywgLy8gTk9MSU5UKHJ1bnRpbWUv
aW50KQorICAgIGxvbmcgbG9uZywgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIHVuc2lnbmVk
IGxvbmcgbG9uZz4gLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIEludGVnZXJUeXBlczsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBXVEZfVUludDEyOEZsb2F0VHJhaXRzVGVzdCA6
IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworfTsKK3R5cGVkZWYgOjp0ZXN0aW5nOjpUeXBlczxm
bG9hdCwgZG91YmxlLCBsb25nIGRvdWJsZT4gRmxvYXRpbmdQb2ludFR5cGVzOworCitUWVBFRF9U
RVNUX1NVSVRFKFdURl9VSW50MTI4SW50ZWdlclRyYWl0c1Rlc3QsIEludGVnZXJUeXBlcyk7CisK
K1RZUEVEX1RFU1QoV1RGX1VJbnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCwgQ29uc3RydWN0QXNzaWdu
VGVzdCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxXVEY6OlVJ
bnQxMjhJbXBsLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6VUludDEyOEltcGwg
bXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gVHlwZVBhcmFtIik7CisgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Fzc2lnbmFibGU8V1RGOjpVSW50MTI4SW1wbCYsIFR5cGVQYXJhbT46OnZhbHVl
LAorICAgICAgICAiV1RGOjpVSW50MTI4SW1wbCBtdXN0IGJlIGFzc2lnbmFibGUgZnJvbSBUeXBl
UGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBhcmFt
JiwgV1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAiVHlwZVBhcmFtIG11c3Qgbm90
IGJlIGFzc2lnbmFibGUgZnJvbSBXVEY6OlVJbnQxMjhJbXBsIik7Cit9CisKK1RZUEVEX1RFU1Rf
U1VJVEUoV1RGX1VJbnQxMjhGbG9hdFRyYWl0c1Rlc3QsIEZsb2F0aW5nUG9pbnRUeXBlcyk7CisK
K1RZUEVEX1RFU1QoV1RGX1VJbnQxMjhGbG9hdFRyYWl0c1Rlc3QsIENvbnN0cnVjdEFzc2lnblRl
c3QpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8V1RGOjpVSW50
MTI4SW1wbCwgVHlwZVBhcmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6OlVJbnQxMjhJbXBsIG11
c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3NlcnQo
IXN0ZDo6aXNfYXNzaWduYWJsZTxXVEY6OlVJbnQxMjhJbXBsJiwgVHlwZVBhcmFtPjo6dmFsdWUs
CisgICAgICAgICJXVEY6OlVJbnQxMjhJbXBsIG11c3Qgbm90IGJlIGFzc2lnbmFibGUgZnJvbSBU
eXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBh
cmFtJiwgV1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAiVHlwZVBhcmFtIG11c3Qg
bm90IGJlIGFzc2lnbmFibGUgZnJvbSBXVEY6OlVJbnQxMjhJbXBsIik7Cit9CisKK1RFU1QoV1RG
X1VJbnQxMjgsIFRyaXZpYWxUcmFpdHNUZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1
ZSwKKyAgICAgICAgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29w
eV9jb25zdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1ZSwKKyAgICAgICAgIiIpOwor
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlPFdURjo6
VUludDEyOEltcGw+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1ZSwgIiIpOworfQorCitU
RVNUKFdURl9VSW50MTI4LCBBbGxUZXN0cykKK3sKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHplcm8g
PSAwOworICAgIFdURjo6VUludDEyOEltcGwgb25lID0gMTsKKyAgICBXVEY6OlVJbnQxMjhJbXBs
IG9uZV8yYXJnID0gV1RGOjpNYWtlVUludDEyOCgwLCAxKTsKKyAgICBXVEY6OlVJbnQxMjhJbXBs
IHR3byA9IDI7CisgICAgV1RGOjpVSW50MTI4SW1wbCB0aHJlZSA9IDM7CisgICAgV1RGOjpVSW50
MTI4SW1wbCBiaWcgPSBXVEY6Ok1ha2VVSW50MTI4KDIwMDAsIDIpOworICAgIFdURjo6VUludDEy
OEltcGwgYmlnX21pbnVzX29uZSA9IFdURjo6TWFrZVVJbnQxMjgoMjAwMCwgMSk7CisgICAgV1RG
OjpVSW50MTI4SW1wbCBiaWdnZXIgPSBXVEY6Ok1ha2VVSW50MTI4KDIwMDEsIDEpOworICAgIFdU
Rjo6VUludDEyOEltcGwgYmlnZ2VzdCA9IFdURjo6VUludDEyOE1heCgpOworICAgIFdURjo6VUlu
dDEyOEltcGwgaGlnaF9sb3cgPSBXVEY6Ok1ha2VVSW50MTI4KDEsIDApOworICAgIFdURjo6VUlu
dDEyOEltcGwgbG93X2hpZ2ggPSBXVEY6Ok1ha2VVSW50MTI4KDAsIHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDY0X3Q+OjptYXgoKSk7CisgICAgRVhQRUNUX0xUKG9uZSwgdHdvKTsKKyAgICBFWFBF
Q1RfR1QodHdvLCBvbmUpOworICAgIEVYUEVDVF9MVChvbmUsIGJpZyk7CisgICAgRVhQRUNUX0xU
KG9uZSwgYmlnKTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmVfMmFyZyk7CisgICAgRVhQRUNUX05F
KG9uZSwgdHdvKTsKKyAgICBFWFBFQ1RfR1QoYmlnLCBvbmUpOworICAgIEVYUEVDVF9HRShiaWcs
IHR3byk7CisgICAgRVhQRUNUX0dFKGJpZywgYmlnX21pbnVzX29uZSk7CisgICAgRVhQRUNUX0dU
KGJpZywgYmlnX21pbnVzX29uZSk7CisgICAgRVhQRUNUX0xUKGJpZ19taW51c19vbmUsIGJpZyk7
CisgICAgRVhQRUNUX0xFKGJpZ19taW51c19vbmUsIGJpZyk7CisgICAgRVhQRUNUX05FKGJpZ19t
aW51c19vbmUsIGJpZyk7CisgICAgRVhQRUNUX0xUKGJpZywgYmlnZ2VzdCk7CisgICAgRVhQRUNU
X0xFKGJpZywgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0dUKGJpZ2dlc3QsIGJpZyk7CisgICAgRVhQ
RUNUX0dFKGJpZ2dlc3QsIGJpZyk7CisgICAgRVhQRUNUX0VRKGJpZywgfn5iaWcpOworICAgIEVY
UEVDVF9FUShvbmUsIG9uZSB8IG9uZSk7CisgICAgRVhQRUNUX0VRKGJpZywgYmlnIHwgYmlnKTsK
KyAgICBFWFBFQ1RfRVEob25lLCBvbmUgfCB6ZXJvKTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmUg
JiBvbmUpOworICAgIEVYUEVDVF9FUShiaWcsIGJpZyAmIGJpZyk7CisgICAgRVhQRUNUX0VRKHpl
cm8sIG9uZSAmIHplcm8pOworICAgIEVYUEVDVF9FUSh6ZXJvLCBiaWcgJiB+YmlnKTsKKyAgICBF
WFBFQ1RfRVEoemVybywgb25lIF4gb25lKTsKKyAgICBFWFBFQ1RfRVEoemVybywgYmlnIF4gYmln
KTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmUgXiB6ZXJvKTsKKworICAgIC8vIFNoaWZ0IG9wZXJh
dG9ycy4KKyAgICBFWFBFQ1RfRVEoYmlnLCBiaWcgPDwgMCk7CisgICAgRVhQRUNUX0VRKGJpZywg
YmlnID4+IDApOworICAgIEVYUEVDVF9HVChiaWcgPDwgMSwgYmlnKTsKKyAgICBFWFBFQ1RfTFQo
YmlnID4+IDEsIGJpZyk7CisgICAgRVhQRUNUX0VRKGJpZywgKGJpZyA8PCAxMCkgPj4gMTApOwor
ICAgIEVYUEVDVF9FUShiaWcsIChiaWcgPj4gMSkgPDwgMSk7CisgICAgRVhQRUNUX0VRKG9uZSwg
KG9uZSA8PCA4MCkgPj4gODApOworICAgIEVYUEVDVF9FUSh6ZXJvLCAob25lID4+IDgwKSA8PCA4
MCk7CisKKyAgICAvLyBTaGlmdCBhc3NpZ25tZW50cy4KKyAgICBXVEY6OlVJbnQxMjhJbXBsIGJp
Z19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPDwgMCwgYmlnX2NvcHkgPDw9IDApOwor
ICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gMCwgYmlnX2NvcHkgPj49
IDApOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPDwgMSwgYmlnX2Nv
cHkgPDw9IDEpOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gMSwg
YmlnX2NvcHkgPj49IDEpOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcg
PDwgMTAsIGJpZ19jb3B5IDw8PSAxMCk7CisgICAgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNU
X0VRKGJpZyA+PiAxMCwgYmlnX2NvcHkgPj49IDEwKTsKKyAgICBiaWdfY29weSA9IGJpZzsKKyAg
ICBFWFBFQ1RfRVEoYmlnIDw8IDY0LCBiaWdfY29weSA8PD0gNjQpOworICAgIGJpZ19jb3B5ID0g
YmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gNjQsIGJpZ19jb3B5ID4+PSA2NCk7CisgICAgYmln
X2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA8PCA3MywgYmlnX2NvcHkgPDw9IDczKTsK
KyAgICBiaWdfY29weSA9IGJpZzsKKyAgICBFWFBFQ1RfRVEoYmlnID4+IDczLCBiaWdfY29weSA+
Pj0gNzMpOworCisgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOEhpZ2g2NChiaWdnZXN0KSwgc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpV
SW50MTI4TG93NjQoYmlnZ2VzdCksIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgo
KSk7CisgICAgRVhQRUNUX0VRKHplcm8gKyBvbmUsIG9uZSk7CisgICAgRVhQRUNUX0VRKG9uZSAr
IG9uZSwgdHdvKTsKKyAgICBFWFBFQ1RfRVEoYmlnX21pbnVzX29uZSArIG9uZSwgYmlnKTsKKyAg
ICBFWFBFQ1RfRVEob25lIC0gb25lLCB6ZXJvKTsKKyAgICBFWFBFQ1RfRVEob25lIC0gemVybywg
b25lKTsKKyAgICBFWFBFQ1RfRVEoemVybyAtIG9uZSwgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0VR
KGJpZyAtIGJpZywgemVybyk7CisgICAgRVhQRUNUX0VRKGJpZyAtIG9uZSwgYmlnX21pbnVzX29u
ZSk7CisgICAgRVhQRUNUX0VRKGJpZyArIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+Ojpt
YXgoKSwgYmlnZ2VyKTsKKyAgICBFWFBFQ1RfRVEoYmlnZ2VzdCArIDEsIHplcm8pOworICAgIEVY
UEVDVF9FUSh6ZXJvIC0gMSwgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0VRKGhpZ2hfbG93IC0gb25l
LCBsb3dfaGlnaCk7CisgICAgRVhQRUNUX0VRKGxvd19oaWdoICsgb25lLCBoaWdoX2xvdyk7Cisg
ICAgRVhQRUNUX0VRKFdURjo6VUludDEyOEhpZ2g2NCgoV1RGOjpVSW50MTI4SW1wbCgxKSA8PCA2
NCkgLSAxKSwgMFUpOworICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhMb3c2NCgoV1RGOjpVSW50
MTI4SW1wbCgxKSA8PCA2NCkgLSAxKSwKKyAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghIW9uZSk7CisgICAgRVhQRUNUX1RSVUUo
ISFoaWdoX2xvdyk7CisgICAgRVhQRUNUX0ZBTFNFKCEhemVybyk7CisgICAgRVhQRUNUX0ZBTFNF
KCFvbmUpOworICAgIEVYUEVDVF9GQUxTRSghaGlnaF9sb3cpOworICAgIEVYUEVDVF9UUlVFKCF6
ZXJvKTsKKyAgICBFWFBFQ1RfVFJVRSh6ZXJvID09IDApOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkv
Y2hlY2spCisgICAgRVhQRUNUX0ZBTFNFKHplcm8gIT0gMCk7IC8vIE5PTElOVChyZWFkYWJpbGl0
eS9jaGVjaykKKyAgICBFWFBFQ1RfRkFMU0Uob25lID09IDApOyAvLyBOT0xJTlQocmVhZGFiaWxp
dHkvY2hlY2spCisgICAgRVhQRUNUX1RSVUUob25lICE9IDApOyAvLyBOT0xJTlQocmVhZGFiaWxp
dHkvY2hlY2spCisgICAgRVhQRUNUX0ZBTFNFKGhpZ2hfbG93ID09IDApOyAvLyBOT0xJTlQocmVh
ZGFiaWxpdHkvY2hlY2spCisgICAgRVhQRUNUX1RSVUUoaGlnaF9sb3cgIT0gMCk7IC8vIE5PTElO
VChyZWFkYWJpbGl0eS9jaGVjaykKKworICAgIFdURjo6VUludDEyOEltcGwgdGVzdCA9IHplcm87
CisgICAgRVhQRUNUX0VRKCsrdGVzdCwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCwgb25lKTsK
KyAgICBFWFBFQ1RfRVEodGVzdCsrLCBvbmUpOworICAgIEVYUEVDVF9FUSh0ZXN0LCB0d28pOwor
ICAgIEVYUEVDVF9FUSh0ZXN0IC09IDIsIHplcm8pOworICAgIEVYUEVDVF9FUSh0ZXN0LCB6ZXJv
KTsKKyAgICBFWFBFQ1RfRVEodGVzdCArPSAyLCB0d28pOworICAgIEVYUEVDVF9FUSh0ZXN0LCB0
d28pOworICAgIEVYUEVDVF9FUSgtLXRlc3QsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QsIG9u
ZSk7CisgICAgRVhQRUNUX0VRKHRlc3QtLSwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCwgemVy
byk7CisgICAgRVhQRUNUX0VRKHRlc3QgfD0gdGhyZWUsIHRocmVlKTsKKyAgICBFWFBFQ1RfRVEo
dGVzdCAmPSBvbmUsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QgXj0gdGhyZWUsIHR3byk7Cisg
ICAgRVhQRUNUX0VRKHRlc3QgPj49IDEsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QgPDw9IDEs
IHR3byk7CisKKyAgICBFWFBFQ1RfRVEoYmlnLCArYmlnKTsKKyAgICBFWFBFQ1RfRVEodHdvLCAr
dHdvKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4TWF4KCksICtXVEY6OlVJbnQxMjhNYXgo
KSk7CisgICAgRVhQRUNUX0VRKHplcm8sICt6ZXJvKTsKKworICAgIEVYUEVDVF9FUShiaWcsIC0o
LWJpZykpOworICAgIEVYUEVDVF9FUSh0d28sIC0oKC1vbmUpIC0gMSkpOworICAgIEVYUEVDVF9F
UShXVEY6OlVJbnQxMjhNYXgoKSwgLW9uZSk7CisgICAgRVhQRUNUX0VRKHplcm8sIC16ZXJvKTsK
K30KKworVEVTVChXVEZfSW50MTI4LCBSaWdodFNoaWZ0T2ZOZWdhdGl2ZU51bWJlcnMpCit7Cisg
ICAgV1RGOjpJbnQxMjhJbXBsIG1pbnVzX3NpeCA9IC02OworICAgIFdURjo6SW50MTI4SW1wbCBt
aW51c190aHJlZSA9IC0zOworICAgIFdURjo6SW50MTI4SW1wbCBtaW51c190d28gPSAtMjsKKyAg
ICBXVEY6OkludDEyOEltcGwgbWludXNfb25lID0gLTE7CisgICAgaWYgKCgtNiA+PiAxKSA9PSAt
MykgeworICAgICAgICAvLyBSaWdodCBzaGlmdCBpcyBhcml0aG1ldGljIChzaWduIHByb3BhZ2F0
ZXMpCisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gMSwgbWludXNfdGhyZWUpOworICAg
ICAgICBFWFBFQ1RfRVEobWludXNfc2l4ID4+IDIsIG1pbnVzX3R3byk7CisgICAgICAgIEVYUEVD
VF9FUShtaW51c19zaXggPj4gNjUsIG1pbnVzX29uZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gUmlnaHQgc2hpZnQgaXMgbG9naWNhbCAoemVyb3Mgc2hpZnRlZCBpbiBhdCBNU0IpCisgICAg
ICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gMSwgV1RGOjpJbnQxMjhJbXBsKFdURjo6VUludDEy
OEltcGwobWludXNfc2l4KSA+PiAxKSk7CisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4g
MiwgV1RGOjpJbnQxMjhJbXBsKFdURjo6VUludDEyOEltcGwobWludXNfc2l4KSA+PiAyKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gNjUsIFdURjo6SW50MTI4SW1wbChXVEY6OlVJ
bnQxMjhJbXBsKG1pbnVzX3NpeCkgPj4gNjUpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1VJbnQx
MjgsIENvbnZlcnNpb25UZXN0cykKK3sKKyAgICBFWFBFQ1RfVFJVRShXVEY6Ok1ha2VVSW50MTI4
KDEsIDApKTsKKworICAgIC8vIHZlcmlmeSB0aGF0IGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDIq
KjY0IHRoYXQgY2FuIGJlIHN0b3JlZCBwcmVjaXNlbHkKKyAgICAvLyBpbnNpZGUgYSBkb3VibGUg
aXMgY29udmVydGVkIHRvIGEgV1RGOjpVSW50MTI4SW1wbCB3aXRob3V0IGxvc3Mgb2YKKyAgICAv
LyBpbmZvcm1hdGlvbi4KKyAgICBkb3VibGUgcHJlY2lzZV9kb3VibGUgPSAweDUzMGUgKiBzdGQ6
OnBvdygyLjAsIDY0LjApICsgMHhkYTc0MDAwMDAwMDAwMDAwOworICAgIFdURjo6VUludDEyOElt
cGwgZnJvbV9wcmVjaXNlX2RvdWJsZShwcmVjaXNlX2RvdWJsZSk7CisgICAgV1RGOjpVSW50MTI4
SW1wbCBmcm9tX3ByZWNpc2VfaW50cyA9IFdURjo6TWFrZVVJbnQxMjgoMHg1MzBlLCAweGRhNzQw
MDAwMDAwMDAwMDApOworICAgIEVYUEVDVF9FUShmcm9tX3ByZWNpc2VfZG91YmxlLCBmcm9tX3By
ZWNpc2VfaW50cyk7CisgICAgRVhQRUNUX0RPVUJMRV9FUShzdGF0aWNfY2FzdDxkb3VibGU+KGZy
b21fcHJlY2lzZV9pbnRzKSwgcHJlY2lzZV9kb3VibGUpOworCisgICAgZG91YmxlIGFwcHJveF9k
b3VibGUgPSAweGZmZmZlZWVlZGRkZGNjY2MgKiBzdGQ6OnBvdygyLjAsIDY0LjApICsgMHhiYmJi
YWFhYTk5OTk4ODg4OworICAgIFdURjo6VUludDEyOEltcGwgZnJvbV9hcHByb3hfZG91YmxlKGFw
cHJveF9kb3VibGUpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoc3RhdGljX2Nhc3Q8ZG91YmxlPihm
cm9tX2FwcHJveF9kb3VibGUpLCBhcHByb3hfZG91YmxlKTsKKworICAgIGRvdWJsZSByb3VuZF90
b196ZXJvID0gMC43OworICAgIGRvdWJsZSByb3VuZF90b19maXZlID0gNS44OworICAgIGRvdWJs
ZSByb3VuZF90b19uaW5lID0gOS4zOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxXVEY6OlVJ
bnQxMjhJbXBsPihyb3VuZF90b196ZXJvKSwgMCk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PFdURjo6VUludDEyOEltcGw+KHJvdW5kX3RvX2ZpdmUpLCA1KTsKKyAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4ocm91bmRfdG9fbmluZSksIDkpOworCisgICAgV1RG
OjpVSW50MTI4SW1wbCBoaWdoZXN0X3ByZWNpc2lvbl9pbl9sb25nX2RvdWJsZSA9IH5XVEY6OlVJ
bnQxMjhJbXBsIHt9ID4+ICgxMjggLSBzdGQ6Om51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6
ZGlnaXRzKTsKKyAgICBFWFBFQ1RfRVEoaGlnaGVzdF9wcmVjaXNpb25faW5fbG9uZ19kb3VibGUs
CisgICAgICAgIHN0YXRpY19jYXN0PFdURjo6VUludDEyOEltcGw+KAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8bG9uZyBkb3VibGU+KGhpZ2hlc3RfcHJlY2lzaW9uX2luX2xvbmdfZG91YmxlKSkp
OworICAgIC8vIEFwcGx5IGEgbWFzayBqdXN0IHRvIG1ha2Ugc3VyZSBhbGwgdGhlIGJpdHMgYXJl
IHRoZSByaWdodCBwbGFjZS4KKyAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIGFyYml0cmFyeV9t
YXNrID0gV1RGOjpNYWtlVUludDEyOCgweGEyOWY2MjI2NzdkZWQ3NTEsIDB4ZjhjYTY2YWRkMDc2
ZjQ2OCk7CisgICAgRVhQRUNUX0VRKGhpZ2hlc3RfcHJlY2lzaW9uX2luX2xvbmdfZG91YmxlICYg
YXJiaXRyYXJ5X21hc2ssCisgICAgICAgIHN0YXRpY19jYXN0PFdURjo6VUludDEyOEltcGw+KHN0
YXRpY19jYXN0PGxvbmcgZG91YmxlPigKKyAgICAgICAgICAgIGhpZ2hlc3RfcHJlY2lzaW9uX2lu
X2xvbmdfZG91YmxlICYgYXJiaXRyYXJ5X21hc2spKSk7CisKKyAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4oLTAuMUwpLCAwKTsKK30KKworVEVTVChXVEZfVUludDEy
OCwgT3BlcmF0b3JBc3NpZ25SZXR1cm5SZWYpCit7CisgICAgV1RGOjpVSW50MTI4SW1wbCB2KDEp
OworICAgICh2ICs9IDQpIC09IDM7CisgICAgRVhQRUNUX0VRKDIsIHYpOworfQorCitURVNUKFdU
Rl9VSW50MTI4LCBNdWx0aXBseSkKK3sKKyAgICBXVEY6OlVJbnQxMjhJbXBsIGEsIGIsIGM7CisK
KyAgICAvLyBaZXJvIHRlc3QuCisgICAgYSA9IDA7CisgICAgYiA9IDA7CisgICAgYyA9IGEgKiBi
OworICAgIEVYUEVDVF9FUSgwLCBjKTsKKworICAgIC8vIE1heCBjYXJyaWVzLgorICAgIGEgPSBX
VEY6OlVJbnQxMjhJbXBsKDApIC0gMTsKKyAgICBiID0gV1RGOjpVSW50MTI4SW1wbCgwKSAtIDE7
CisgICAgYyA9IGEgKiBiOworICAgIEVYUEVDVF9FUSgxLCBjKTsKKworICAgIC8vIFNlbGYtb3Bl
cmF0aW9uIHdpdGggbWF4IGNhcnJpZXMuCisgICAgYyA9IFdURjo6VUludDEyOEltcGwoMCkgLSAx
OworICAgIGMgKj0gYzsKKyAgICBFWFBFQ1RfRVEoMSwgYyk7CisKKyAgICAvLyAxLWJpdCB4IDEt
Yml0LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IDY0OyArK2opIHsKKyAgICAgICAgICAgIGEgPSBXVEY6OlVJbnQxMjhJbXBs
KDEpIDw8IGk7CisgICAgICAgICAgICBiID0gV1RGOjpVSW50MTI4SW1wbCgxKSA8PCBqOworICAg
ICAgICAgICAgYyA9IGEgKiBiOworICAgICAgICAgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOElt
cGwoMSkgPDwgKGkgKyBqKSwgYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBWZXJpZmll
ZCB3aXRoIGRjLgorICAgIGEgPSBXVEY6Ok1ha2VVSW50MTI4KDB4ZmZmZmVlZWVkZGRkY2NjYywg
MHhiYmJiYWFhYTk5OTk4ODg4KTsKKyAgICBiID0gV1RGOjpNYWtlVUludDEyOCgweDc3Nzc2NjY2
NTU1NTQ0NDQsIDB4MzMzMzIyMjIxMTExMDAwMCk7CisgICAgYyA9IGEgKiBiOworICAgIEVYUEVD
VF9FUShXVEY6Ok1ha2VVSW50MTI4KDB4NTMwRURBNzQxQzcxRDRDMywgMHhCRjI1OTc1MzE5MDgw
MDAwKSwgYyk7CisgICAgRVhQRUNUX0VRKDAsIGMgLSBiICogYSk7CisgICAgRVhQRUNUX0VRKGEg
KiBhIC0gYiAqIGIsIChhICsgYikgKiAoYSAtIGIpKTsKKworICAgIC8vIFZlcmlmaWVkIHdpdGgg
ZGMuCisgICAgYSA9IFdURjo6TWFrZVVJbnQxMjgoMHgwMTIzNDU2Nzg5YWJjZGVmLCAweGZlZGNi
YTk4NzY1NDMyMTApOworICAgIGIgPSBXVEY6Ok1ha2VVSW50MTI4KDB4MDI0NjhhY2UxMzU3OWJk
ZiwgMHhmZGI5NzUzMWVjYTg2NDIwKTsKKyAgICBjID0gYSAqIGI7CisgICAgRVhQRUNUX0VRKFdU
Rjo6TWFrZVVJbnQxMjgoMHg5N2E4N2Y0ZjI2MWJhM2YyLCAweDM0MmQwYmJmNDg5NDgyMDApLCBj
KTsKKyAgICBFWFBFQ1RfRVEoMCwgYyAtIGIgKiBhKTsKKyAgICBFWFBFQ1RfRVEoYSAqIGEgLSBi
ICogYiwgKGEgKyBiKSAqIChhIC0gYikpOworfQorCitURVNUKFdURl9VSW50MTI4LCBBbGlhc1Rl
c3RzKQoreworICAgIFdURjo6VUludDEyOEltcGwgeDEgPSBXVEY6Ok1ha2VVSW50MTI4KDEsIDIp
OworICAgIFdURjo6VUludDEyOEltcGwgeDIgPSBXVEY6Ok1ha2VVSW50MTI4KDIsIDQpOworICAg
IHgxICs9IHgxOworICAgIEVYUEVDVF9FUSh4MiwgeDEpOworCisgICAgV1RGOjpVSW50MTI4SW1w
bCB4MyA9IFdURjo6TWFrZVVJbnQxMjgoMSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IDYz
KTsKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHg0ID0gV1RGOjpNYWtlVUludDEyOCgzLCAwKTsKKyAg
ICB4MyArPSB4MzsKKyAgICBFWFBFQ1RfRVEoeDQsIHgzKTsKK30KKworVEVTVChXVEZfVUludDEy
OCwgRGl2aWRlQW5kTW9kKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsKKworICAgIC8vIGEgOj0g
cSAqIGIgKyByCisgICAgV1RGOjpVSW50MTI4SW1wbCBhLCBiLCBxLCByOworCisgICAgLy8gWmVy
byB0ZXN0LgorICAgIGEgPSAwOworICAgIGIgPSAxMjM7CisgICAgcSA9IGEgLyBiOworICAgIHIg
PSBhICUgYjsKKyAgICBFWFBFQ1RfRVEoMCwgcSk7CisgICAgRVhQRUNUX0VRKDAsIHIpOworCisg
ICAgYSA9IFdURjo6TWFrZVVJbnQxMjgoMHg1MzBlZGE3NDFjNzFkNGMzLCAweGJmMjU5NzUzMTkw
ODAwMDApOworICAgIHEgPSBXVEY6Ok1ha2VVSW50MTI4KDB4NGRlMmNhYjA4MSwgMHgxNGMzNGFi
NDY3NmU0YmFiKTsKKyAgICBiID0gV1RGOjpVSW50MTI4SW1wbCgweDExMTAwMDEpOworICAgIHIg
PSBXVEY6OlVJbnQxMjhJbXBsKDB4M2ViNDU1KTsKKyAgICBBU1NFUlRfRVEoYSwgcSAqIGIgKyBy
KTsgLy8gU2FuaXR5LWNoZWNrLgorCisgICAgV1RGOjpVSW50MTI4SW1wbCByZXN1bHRfcSwgcmVz
dWx0X3I7CisgICAgcmVzdWx0X3EgPSBhIC8gYjsKKyAgICByZXN1bHRfciA9IGEgJSBiOworICAg
IEVYUEVDVF9FUShxLCByZXN1bHRfcSk7CisgICAgRVhQRUNUX0VRKHIsIHJlc3VsdF9yKTsKKwor
ICAgIC8vIFRyeSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgICBzd2FwKHEsIGIpOworICAgIHJl
c3VsdF9xID0gYSAvIGI7CisgICAgcmVzdWx0X3IgPSBhICUgYjsKKyAgICBFWFBFQ1RfRVEocSwg
cmVzdWx0X3EpOworICAgIEVYUEVDVF9FUShyLCByZXN1bHRfcik7CisgICAgLy8gUmVzdG9yZS4K
KyAgICBzd2FwKGIsIHEpOwogCi1zdGF0aWMgdm9pZCBUZXN0VW5hcnkoc3RkOjp1aW50NjRfdCB4
KQorICAgIC8vIERpdmlkZW5kIDwgZGl2aXNvcjsgcmVzdWx0IHNob3VsZCBiZSBxOjAgcjo8ZGl2
aWRlbmQ+LgorICAgIHN3YXAoYSwgYik7CisgICAgcmVzdWx0X3EgPSBhIC8gYjsKKyAgICByZXN1
bHRfciA9IGEgJSBiOworICAgIEVYUEVDVF9FUSgwLCByZXN1bHRfcSk7CisgICAgRVhQRUNUX0VR
KGEsIHJlc3VsdF9yKTsKKyAgICAvLyBUcnkgdGhlIG90aGVyIHdheSBhcm91bmQuCisgICAgc3dh
cChhLCBxKTsKKyAgICByZXN1bHRfcSA9IGEgLyBiOworICAgIHJlc3VsdF9yID0gYSAlIGI7Cisg
ICAgRVhQRUNUX0VRKDAsIHJlc3VsdF9xKTsKKyAgICBFWFBFQ1RfRVEoYSwgcmVzdWx0X3IpOwor
ICAgIC8vIFJlc3RvcmUuCisgICAgc3dhcChxLCBhKTsKKyAgICBzd2FwKGIsIGEpOworCisgICAg
Ly8gVHJ5IGEgbGFyZ2UgcmVtYWluZGVyLgorICAgIGIgPSBhIC8gMiArIDE7CisgICAgV1RGOjpV
SW50MTI4SW1wbCBleHBlY3RlZF9yID0gV1RGOjpNYWtlVUludDEyOCgweDI5ODc2ZDNhMGUzOGVh
NjEsIDB4ZGY5MmNiYTk4YzgzZmZmZik7CisgICAgLy8gU2FuaXR5IGNoZWNrcy4KKyAgICBBU1NF
UlRfRVEoYSAvIDIgLSAxLCBleHBlY3RlZF9yKTsKKyAgICBBU1NFUlRfRVEoYSwgYiArIGV4cGVj
dGVkX3IpOworICAgIHJlc3VsdF9xID0gYSAvIGI7CisgICAgcmVzdWx0X3IgPSBhICUgYjsKKyAg
ICBFWFBFQ1RfRVEoMSwgcmVzdWx0X3EpOworICAgIEVYUEVDVF9FUShleHBlY3RlZF9yLCByZXN1
bHRfcik7Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIERpdmlkZUFuZE1vZFJhbmRvbUlucHV0cykK
IHsKLSAgICBOb25OYXRpdmVVSW50MTI4IG4geyB4IH07Ci0gICAgRVhQRUNUX0VRKHgsIHN0YXRp
Y19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pKTsKLSAgICBFWFBFQ1RfRVEofngsIHN0YXRpY19jYXN0
PHN0ZDo6dWludDY0X3Q+KH5uKSk7Ci0gICAgRVhQRUNUX0VRKC14LCBzdGF0aWNfY2FzdDxzdGQ6
OnVpbnQ2NF90PigtbikpOwotICAgIEVYUEVDVF9FUSgheCwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50
NjRfdD4oIW4pKTsKLSAgICBFWFBFQ1RfVFJVRShuID09IG4pOwotICAgIEVYUEVDVF9UUlVFKG4g
KyBuID09IG4gKiBzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PigyKSk7Ci0gICAgRVhQRUNU
X1RSVUUobiAtIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMCkpOwotICAgIEVY
UEVDVF9UUlVFKG4gKyBuID09IG4gPDwgc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMSkp
OwotICAgIEVYUEVDVF9UUlVFKG4gKyBuID09IG4gPDwgc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUlu
dDEyOD4oMSkpOwotICAgIEVYUEVDVF9UUlVFKChuICsgbikgLSBuID09IG4pOwotICAgIEVYUEVD
VF9UUlVFKCgobiArIG4pID4+IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDEpKSA9PSBu
KTsKLSAgICBpZiAoeCkgewotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRp
dmVVSW50MTI4PigwKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMCkpOwot
ICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PihuIC0gMSkg
LyBuID09IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDApKTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4obikgLyBuID09IHN0YXRpY19jYXN0
PE5vbk5hdGl2ZVVJbnQxMjg+KDEpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nhc3Q8
Tm9uTmF0aXZlVUludDEyOD4obiArIG4gLSAxKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZl
VUludDEyOD4oMSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRpdmVV
SW50MTI4PihuICsgbikgLyBuID09IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDIpKTsK
LSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIFRlc3RCaW5hcnkoc3RkOjp1aW50NjRfdCB4LCBzdGQ6
OnVpbnQ2NF90IHkpCi17Ci0gICAgTm9uTmF0aXZlVUludDEyOCBtIHsgeCB9LCBuIHsgeSB9Owot
ICAgIEVYUEVDVF9FUSh4LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtKSk7Ci0gICAgRVhQ
RUNUX0VRKHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pKTsKLSAgICBFWFBFQ1RfRVEo
eCAmIHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG0gJiBuKSk7Ci0gICAgRVhQRUNUX0VR
KHggfCB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtIHwgbikpOwotICAgIEVYUEVDVF9F
USh4IF4geSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obSBeIG4pKTsKLSAgICBFWFBFQ1Rf
RVEoeCArIHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG0gKyBuKSk7Ci0gICAgRVhQRUNU
X0VRKHggLSB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtIC0gbikpOwotICAgIEVYUEVD
VF9FUSh4ICogeSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obSAqIG4pKTsKLSAgICBpZiAo
bikKLSAgICAgICAgRVhQRUNUX0VRKHggLyB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90Piht
IC8gbikpOwotfQotCi1URVNUKFdURl9JbnQxMjgsIEJhc2ljKQotewotICAgIGZvciAoc3RkOjp1
aW50NjRfdCBqIHswfTsgaiA8IDY0OyArK2opIHsKLSAgICAgICAgVGVzdFVuYXJ5KGopOwotICAg
ICAgICBUZXN0VW5hcnkofmopOwotICAgICAgICBUZXN0VW5hcnkoc3RkOjp1aW50NjRfdCgxKSA8
PCBqKTsKLSAgICAgICAgZm9yIChzdGQ6OnVpbnQ2NF90IGsgezB9OyBrIDwgNjQ7ICsraykKLSAg
ICAgICAgICAgIFRlc3RCaW5hcnkoaiwgayk7Ci0gICAgfQotfQotCi0jaWYgSEFWRShJTlQxMjhf
VCkKLXN0YXRpYyBfX3VpbnQxMjhfdCBUb05hdGl2ZShOb25OYXRpdmVVSW50MTI4IG4pCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PF9fdWludDEyOF90PihzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2
NF90PihuID4+IDY0KSkgPDwgNjQgfAotICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90
PihuKTsKLX0KLQotc3RhdGljIE5vbk5hdGl2ZVVJbnQxMjggRnJvbU5hdGl2ZShfX3VpbnQxMjhf
dCBuKQotewotICAgIHJldHVybiBOb25OYXRpdmVVSW50MTI4IHsgc3RhdGljX2Nhc3Q8c3RkOjp1
aW50NjRfdD4obiA+PiA2NCl9IDw8IDY0IHwgTm9uTmF0aXZlVUludDEyOCB7IHN0YXRpY19jYXN0
PHN0ZDo6dWludDY0X3Q+KG4pIH07Ci19Ci0KLXN0YXRpYyB2b2lkIFRlc3RWc05hdGl2ZShfX3Vp
bnQxMjhfdCB4LCBfX3VpbnQxMjhfdCB5KQotewotICAgIE5vbk5hdGl2ZVVJbnQxMjggbSB7IEZy
b21OYXRpdmUoeCkgfSwgbiB7IEZyb21OYXRpdmUoeSkgfTsKLSAgICBFWFBFQ1RfVFJVRShUb05h
dGl2ZShtKSA9PSB4KTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShuKSA9PSB5KTsKLSAgICBF
WFBFQ1RfVFJVRShUb05hdGl2ZSh+bSkgPT0gfngpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZl
KC1tKSA9PSAteCk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUoIW0pID09ICF4KTsKLSAgICBF
WFBFQ1RfVFJVRShUb05hdGl2ZShtIDwgbikgPT0gKHggPCB5KSk7Ci0gICAgRVhQRUNUX1RSVUUo
VG9OYXRpdmUobSA8PSBuKSA9PSAoeCA8PSB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUo
bSA9PSBuKSA9PSAoeCA9PSB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAhPSBuKSA9
PSAoeCAhPSB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSA+PSBuKSA9PSAoeCA+PSB5
KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSA+IG4pID09ICh4ID4geSkpOwotICAgIEVY
UEVDVF9UUlVFKFRvTmF0aXZlKG0gJiBuKSA9PSAoeCAmIHkpKTsKLSAgICBFWFBFQ1RfVFJVRShU
b05hdGl2ZShtIHwgbikgPT0gKHggfCB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSBe
IG4pID09ICh4IF4geSkpOwotICAgIGlmICh5IDwgMTI4KSB7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KFRvTmF0aXZlKG0gPDwgbikgPT0gKHggPDwgeSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShUb05h
dGl2ZShtID4+IG4pID09ICh4ID4+IHkpKTsKLSAgICB9Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRp
dmUobSArIG4pID09ICh4ICsgeSkpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gLSBuKSA9
PSAoeCAtIHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtICogbikgPT0gKHggKiB5KSk7
Ci0gICAgaWYgKHkgPiAwKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gLyBuKSA9
PSAoeCAvIHkpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAlIG4pID09ICh4ICUg
eSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtIC0gbiAqIChtIC8gbikpID09ICh4
ICUgeSkpOwotICAgIH0KLX0KLQotVEVTVChXVEZfSW50MTI4LCBWc05hdGl2ZSkKLXsKLSAgICBH
VEVTVF9MT0dfKElORk8pIDw8ICJFbnZpcm9ubWVudCBoYXMgbmF0aXZlIF9fdWludDEyOF90IjsK
LQotICAgIGZvciAoaW50IGogezB9OyBqIDwgMTI4OyArK2opIHsKLSAgICAgICAgZm9yIChpbnQg
ayB7MH07IGsgPCAxMjg7ICsraykgewotICAgICAgICAgICAgX191aW50MTI4X3QgbSB7IDEgfSwg
biB7IDEgfTsKLSAgICAgICAgICAgIG0gPDw9IGo7Ci0gICAgICAgICAgICBuIDw8PSBrOwotICAg
ICAgICAgICAgVGVzdFZzTmF0aXZlKG0sIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0aXZlKH5t
LCBuKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtLCB+bik7Ci0gICAgICAgICAgICBUZXN0
VnNOYXRpdmUofm0sIH5uKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtIF4gbiwgbik7Ci0g
ICAgICAgICAgICBUZXN0VnNOYXRpdmUobSwgbSBeIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0
aXZlKG0gXiB+biwgbik7Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUobSwgfm0gXiBuKTsKLSAg
ICAgICAgICAgIFRlc3RWc05hdGl2ZShtIF4gfm4sIG0gXiBuKTsKLSAgICAgICAgICAgIFRlc3RW
c05hdGl2ZShtIF4gbiwgfm0gXiBuKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtIF4gfm4s
IH5tIF4gbik7Ci0gICAgICAgICAgICBUZXN0QmluYXJ5KG0sIDEwMDAwMDAwMDAwMDAwMDAwKTsg
Ly8gaW1wb3J0YW50IGNhc2UgZm9yIGRlY2ltYWwgY29udmVyc2lvbgotICAgICAgICAgICAgVGVz
dEJpbmFyeSh+bSwgMTAwMDAwMDAwMDAwMDAwMDApOworICAgIGNvbnN0IGludCBrTnVtSXRlcnMg
PSAxIDw8IDE4OworICAgIHN0ZDo6bWluc3RkX3JhbmQgcmFuZG9tKHRlc3Rpbmc6OlVuaXRUZXN0
OjpHZXRJbnN0YW5jZSgpLT5yYW5kb21fc2VlZCgpKTsKKyAgICBzdGQ6OnVuaWZvcm1faW50X2Rp
c3RyaWJ1dGlvbjx1aW50NjRfdD4gdW5pZm9ybV91aW50NjQ7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBrTnVtSXRlcnM7ICsraSkgeworICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIGEg
PSBXVEY6Ok1ha2VVSW50MTI4KHVuaWZvcm1fdWludDY0KHJhbmRvbSksIHVuaWZvcm1fdWludDY0
KHJhbmRvbSkpOworICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIGIgPSBXVEY6Ok1ha2VV
SW50MTI4KHVuaWZvcm1fdWludDY0KHJhbmRvbSksIHVuaWZvcm1fdWludDY0KHJhbmRvbSkpOwor
ICAgICAgICBpZiAoYiA9PSAwKSB7CisgICAgICAgICAgICBjb250aW51ZTsgLy8gQXZvaWQgYSBk
aXYtYnktemVyby4KICAgICAgICAgfQorICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIHEg
PSBhIC8gYjsKKyAgICAgICAgY29uc3QgV1RGOjpVSW50MTI4SW1wbCByID0gYSAlIGI7CisgICAg
ICAgIEFTU0VSVF9FUShhLCBiICogcSArIHIpOworICAgIH0KK30KKworVEVTVChXVEZfVUludDEy
OCwgQ29uc3RleHByVGVzdCkKK3sKKyAgICBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCB6ZXJv
ID0gV1RGOjpVSW50MTI4SW1wbCgpOworICAgIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIG9u
ZSA9IDE7CisgICAgY29uc3RleHByIFdURjo6VUludDEyOEltcGwgbWludXNfdHdvID0gLTI7Cisg
ICAgRVhQRUNUX0VRKHplcm8sIFdURjo6VUludDEyOEltcGwoMCkpOworICAgIEVYUEVDVF9FUShv
bmUsIFdURjo6VUludDEyOEltcGwoMSkpOworICAgIEVYUEVDVF9FUShtaW51c190d28sIFdURjo6
TWFrZVVJbnQxMjgoLTEsIC0yKSk7Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIE51bWVyaWNMaW1p
dHNUZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJ
bnQxMjhJbXBsPjo6aXNfc3BlY2lhbGl6ZWQsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6
Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zaWduZWQsICIiKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX2lu
dGVnZXIsICIiKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PigxMjggKiBzdGQ6Omxv
ZzEwKDIpKSwKKyAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6
ZGlnaXRzMTApOworICAgIEVYUEVDVF9FUSgwLCBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjptaW4oKSk7CisgICAgRVhQRUNUX0VRKDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8
V1RGOjpVSW50MTI4SW1wbD46Omxvd2VzdCgpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4
TWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heCgpKTsKK30K
KworVEVTVChXVEZfSW50MTI4VUludDEyOCwgQ29udmVyc2lvblRlc3QpCit7CisgICAgV1RGOjpJ
bnQxMjhJbXBsIG5vbm5lZ2F0aXZlX3NpZ25lZF92YWx1ZXNbXSA9IHsKKyAgICAgICAgMCwKKyAg
ICAgICAgMSwKKyAgICAgICAgMHhmZmVlZGRjY2JiYWE5OTg4LAorICAgICAgICBXVEY6Ok1ha2VJ
bnQxMjgoMHg3NzY2NTU0NDMzMjIxMTAwLCAwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4
MTIzNDU2Nzg5MGFiY2RlZiwgMHhmZWRjYmEwOTg3NjU0MzIxKSwKKyAgICAgICAgV1RGOjpJbnQx
MjhNYXgoKQorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiBub25uZWdh
dGl2ZV9zaWduZWRfdmFsdWVzKSB7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgV1RGOjpJbnQx
MjhJbXBsKFdURjo6VUludDEyOEltcGwodmFsdWUpKSk7CisKKyAgICAgICAgV1RGOjpVSW50MTI4
SW1wbCBhc3NpZ25lZF92YWx1ZTsKKyAgICAgICAgYXNzaWduZWRfdmFsdWUgPSB2YWx1ZTsKKyAg
ICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwoYXNzaWduZWRfdmFsdWUpKTsK
KyAgICB9CisKKyAgICBXVEY6OkludDEyOEltcGwgbmVnYXRpdmVfdmFsdWVzW10gPSB7CisgICAg
ICAgIC0xLCAtMHgxMjM0NTY3ODkwYWJjZGVmLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoLTB4
NTU0NDMzMjIxMWZmZWVkZCwgMCksCisgICAgICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHg3NjU0MzIx
MGZlZGNiYTk4LCAweGFiY2RlZjAxMjM0NTY3ODkpCisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50
MTI4SW1wbCB2YWx1ZSA6IG5lZ2F0aXZlX3ZhbHVlcykgeworICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpVSW50MTI4SW1wbCgtdmFsdWUpLCAtV1RGOjpVSW50MTI4SW1wbCh2YWx1ZSkpOworCisgICAg
ICAgIFdURjo6VUludDEyOEltcGwgYXNzaWduZWRfdmFsdWU7CisgICAgICAgIGFzc2lnbmVkX3Zh
bHVlID0gdmFsdWU7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhJbXBsKC12YWx1ZSks
IC1hc3NpZ25lZF92YWx1ZSk7CiAgICAgfQogfQogCi0jZWxzZSAvLyAhSEFWRShJTlQxMjhfVCkK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV1RGX0ludDEyOEludGVnZXJUcmFpdHNUZXN0
IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9OworCitUWVBFRF9URVNUX1NVSVRFKFdURl9J
bnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCwgSW50ZWdlclR5cGVzKTsKKworVFlQRURfVEVTVChXVEZf
SW50MTI4SW50ZWdlclRyYWl0c1Rlc3QsIENvbnN0cnVjdEFzc2lnblRlc3QpCit7CisgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8V1RGOjpJbnQxMjhJbXBsLCBUeXBlUGFy
YW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6SW50MTI4SW1wbCBtdXN0IGJlIGNvbnN0cnVjdGli
bGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXNzaWduYWJs
ZTxXVEY6OkludDEyOEltcGwmLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6SW50
MTI4SW1wbCBtdXN0IGJlIGFzc2lnbmFibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBhcmFtJiwgV1RGOjpJbnQxMjhJbXBsPjo6
dmFsdWUsCisgICAgICAgICJUeXBlUGFyYW0gbXVzdCBub3QgYmUgYXNzaWduYWJsZSBmcm9tIFdU
Rjo6SW50MTI4SW1wbCIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFdURl9J
bnQxMjhGbG9hdFRyYWl0c1Rlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK307CisKK1RZ
UEVEX1RFU1RfU1VJVEUoV1RGX0ludDEyOEZsb2F0VHJhaXRzVGVzdCwgRmxvYXRpbmdQb2ludFR5
cGVzKTsKIAotVEVTVChXVEZfSW50MTI4LCBWc05hdGl2ZSkKK1RZUEVEX1RFU1QoV1RGX0ludDEy
OEZsb2F0VHJhaXRzVGVzdCwgQ29uc3RydWN0QXNzaWduVGVzdCkKIHsKLSAgICBHVEVTVF9MT0df
KElORk8pIDw8ICJFbnZpcm9ubWVudCBsYWNrcyBuYXRpdmUgX191aW50MTI4X3QiOworICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19jb25zdHJ1Y3RpYmxlPFdURjo6SW50MTI4SW1wbCwgVHlwZVBh
cmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6OkludDEyOEltcGwgbXVzdCBiZSBjb25zdHJ1Y3Rp
YmxlIGZyb20gVHlwZVBhcmFtIik7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19hc3NpZ25h
YmxlPFdURjo6SW50MTI4SW1wbCYsIFR5cGVQYXJhbT46OnZhbHVlLAorICAgICAgICAiV1RGOjpJ
bnQxMjhJbXBsIG11c3Qgbm90IGJlIGFzc2lnbmFibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2lnbmFibGU8VHlwZVBhcmFtJiwgV1RGOjpJbnQxMjhJ
bXBsPjo6dmFsdWUsCisgICAgICAgICJUeXBlUGFyYW0gbXVzdCBub3QgYmUgYXNzaWduYWJsZSBm
cm9tIFdURjo6SW50MTI4SW1wbCIpOwogfQogCi0jZW5kaWYgLy8gIUhBVkUoSU5UMTI4X1QpCitU
RVNUKFdURl9JbnQxMjgsIFRyaXZpYWxUcmFpdHNUZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFdURjo6SW50MTI4SW1wbD46
OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2Nv
bnN0cnVjdGlibGU8V1RGOjpJbnQxMjhJbXBsPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZTxXVEY6OkludDEyOEltcGw+Ojp2
YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFdURjo6SW50MTI4SW1wbD46OnZhbHVlLCAiIik7Cit9CisKK1RFU1QoV1RGX0ludDEyOCwg
Qm9vbENvbnZlcnNpb25UZXN0KQoreworICAgIEVYUEVDVF9GQUxTRShXVEY6OkludDEyOEltcGwo
MCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICBFWFBFQ1Rf
VFJVRShXVEY6Ok1ha2VJbnQxMjgoMCwgdWludDY0X3QgeyAxIH0gPDwgaSkpOworICAgIH0KKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDYzOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoV1RG
OjpNYWtlSW50MTI4KGludDY0X3QgeyAxIH0gPDwgaSwgMCkpOworICAgIH0KKyAgICBFWFBFQ1Rf
VFJVRShXVEY6OkludDEyOE1pbigpKTsKKworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwo
MSksIFdURjo6SW50MTI4SW1wbCh0cnVlKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1w
bCgwKSwgV1RGOjpJbnQxMjhJbXBsKGZhbHNlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgV1RGX0ludDEyOEludGVnZXJDb252ZXJzaW9uVGVzdCA6IHB1YmxpYyA6OnRlc3Rp
bmc6OlRlc3QgeworfTsKKworVFlQRURfVEVTVF9TVUlURShXVEZfSW50MTI4SW50ZWdlckNvbnZl
cnNpb25UZXN0LCBJbnRlZ2VyVHlwZXMpOworCitUWVBFRF9URVNUKFdURl9JbnQxMjhJbnRlZ2Vy
Q29udmVyc2lvblRlc3QsIFJvdW5kVHJpcFRlc3QpCit7CisgICAgRVhQRUNUX0VRKFR5cGVQYXJh
bSB7IDAgfSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOEltcGwoMCkpKTsKKyAg
ICBFWFBFQ1RfRVEoc3RkOjpudW1lcmljX2xpbWl0czxUeXBlUGFyYW0+OjptaW4oKSwKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChz
dGQ6Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46Om1pbigpKSkpOworICAgIEVYUEVDVF9FUShz
dGQ6Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46Om1heCgpLAorICAgICAgICBzdGF0aWNfY2Fz
dDxUeXBlUGFyYW0+KAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHN0ZDo6bnVtZXJpY19s
aW1pdHM8VHlwZVBhcmFtPjo6bWF4KCkpKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
Y2xhc3MgV1RGX0ludDEyOEZsb2F0Q29udmVyc2lvblRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpU
ZXN0IHsKK307CisKK1RZUEVEX1RFU1RfU1VJVEUoV1RGX0ludDEyOEZsb2F0Q29udmVyc2lvblRl
c3QsIEZsb2F0aW5nUG9pbnRUeXBlcyk7CisKK1RZUEVEX1RFU1QoV1RGX0ludDEyOEZsb2F0Q29u
dmVyc2lvblRlc3QsIENvbnN0cnVjdEFuZENhc3RUZXN0KQoreworICAgIC8vIENvbnZlcnNpb25z
IHdoZXJlIHRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZXMgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNh
bWUuCisgICAgLy8gMHg5ZjViIGlzIGEgcmFuZG9tbHkgY2hvc2VuIHNtYWxsIHZhbHVlLgorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMTEwOyArK2kpIHsgLy8gMTEwID0gMTI2IC0gI2JpdHMgaW4g
MHg5ZjViCisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAiaSA9
ICIgPDwgaSk7CisKKyAgICAgICAgVHlwZVBhcmFtIGZsb2F0X3ZhbHVlID0gc3RkOjpsZGV4cChz
dGF0aWNfY2FzdDxUeXBlUGFyYW0+KDB4OWY1YiksIGkpOworICAgICAgICBXVEY6OkludDEyOElt
cGwgaW50X3ZhbHVlID0gV1RGOjpJbnQxMjhJbXBsKDB4OWY1YikgPDwgaTsKKworICAgICAgICBF
WFBFQ1RfRVEoZmxvYXRfdmFsdWUsIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oaW50X3ZhbHVlKSk7
CisgICAgICAgIEVYUEVDVF9FUSgtZmxvYXRfdmFsdWUsIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4o
LWludF92YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoaW50X3ZhbHVlLCBXVEY6OkludDEyOElt
cGwoZmxvYXRfdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKC1pbnRfdmFsdWUsIFdURjo6SW50
MTI4SW1wbCgtZmxvYXRfdmFsdWUpKTsKKyAgICB9CisKKyAgICAvLyBSb3VuZCB0cmlwIGNvbnZl
cnNpb25zIHdpdGggYSBzbWFsbCBzYW1wbGUgb2YgcmFuZG9tbHkgZ2VuZXJhdGVkIHVpbnQ2NF90
CisgICAgLy8gdmFsdWVzIChsZXNzIHRoYW4gaW50NjRfdCBtYXggc28gdGhhdCB2YWx1ZSAqIDJe
NjQgZml0cyBpbnRvIGludDEyOCkuCisgICAgdWludDY0X3QgdmFsdWVzW10gPSB7IDB4NmQ0NDky
YzI0ZmI4NjE5OSwgMHgyNmVhZDY1ZTRjYjM1OWI1LAorICAgICAgICAweDJjNDM0MDc0MzNiYTNm
ZDEsIDB4M2I1NzRlYzY2OGRmNmI1NSwKKyAgICAgICAgMHgxYzc1MGU1NWEyOWY0ZjBmIH07Cisg
ICAgZm9yICh1aW50NjRfdCB2YWx1ZSA6IHZhbHVlcykgeworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8PSA2NDsgKytpKSB7CisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpN
ZXNzYWdlKCkKKyAgICAgICAgICAgICAgICA8PCAidmFsdWUgPSAiIDw8IHZhbHVlIDw8ICI7IGkg
PSAiIDw8IGkpOworCisgICAgICAgICAgICBUeXBlUGFyYW0gZnZhbHVlID0gc3RkOjpsZGV4cChz
dGF0aWNfY2FzdDxUeXBlUGFyYW0+KHZhbHVlKSwgaSk7CisgICAgICAgICAgICBFWFBFQ1RfRE9V
QkxFX0VRKGZ2YWx1ZSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOEltcGwoZnZh
bHVlKSkpOworICAgICAgICAgICAgRVhQRUNUX0RPVUJMRV9FUSgtZnZhbHVlLCBzdGF0aWNfY2Fz
dDxUeXBlUGFyYW0+KC1XVEY6OkludDEyOEltcGwoZnZhbHVlKSkpOworICAgICAgICAgICAgRVhQ
RUNUX0RPVUJMRV9FUSgtZnZhbHVlLCBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KFdURjo6SW50MTI4
SW1wbCgtZnZhbHVlKSkpOworICAgICAgICAgICAgRVhQRUNUX0RPVUJMRV9FUShmdmFsdWUsIHN0
YXRpY19jYXN0PFR5cGVQYXJhbT4oLVdURjo6SW50MTI4SW1wbCgtZnZhbHVlKSkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gUm91bmQgdHJpcCBjb252ZXJzaW9ucyB3aXRoIGEgc21hbGwg
c2FtcGxlIG9mIHJhbmRvbSBsYXJnZSBwb3NpdGl2ZSB2YWx1ZXMuCisgICAgV1RGOjpJbnQxMjhJ
bXBsIGxhcmdlX3ZhbHVlc1tdID0geworICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHg1YjA2NDBk
OTZjN2IzZDlmLCAweGI3YTcxODllNTFkMTg2MjIpLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgo
MHgzNGJlZDA0MmM2ZjY1MjcwLCAweDczYjIzNjU3MDY2OWEwODkpLAorICAgICAgICBXVEY6Ok1h
a2VJbnQxMjgoMHg0M2RlYmE5ZTZkYTEyNzI0LCAweGY3ZjBmODNkYTY4Njc5N2QpLAorICAgICAg
ICBXVEY6Ok1ha2VJbnQxMjgoMHg3MWU4ZDM4M2JlNGU1NTg5LCAweDc1YzNmOTZmYjAwNzUyYjYp
CisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50MTI4SW1wbCB2YWx1ZSA6IGxhcmdlX3ZhbHVlcykg
eworICAgICAgICAvLyBNYWtlIHZhbHVlIGhhdmUgYXMgbWFueSBzaWduaWZpY2FudCBiaXRzIGFz
IGNhbiBiZSByZXByZXNlbnRlZCBieQorICAgICAgICAvLyB0aGUgbWFudGlzc2EsIGFsc28gbWFr
aW5nIHN1cmUgdGhlIGhpZ2hlc3QgYW5kIGxvd2VzdCBiaXQgaW4gdGhlIHJhbmdlCisgICAgICAg
IC8vIGFyZSBzZXQuCisgICAgICAgIHZhbHVlID4+PSAoMTI3IC0gc3RkOjpudW1lcmljX2xpbWl0
czxUeXBlUGFyYW0+OjpkaWdpdHMpOworICAgICAgICB2YWx1ZSB8PSBXVEY6OkludDEyOEltcGwo
MSkgPDwgKHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZVBhcmFtPjo6ZGlnaXRzIC0gMSk7CisgICAg
ICAgIHZhbHVlIHw9IDE7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTI3IC0gc3RkOjpu
dW1lcmljX2xpbWl0czxUeXBlUGFyYW0+OjpkaWdpdHM7ICsraSkgeworICAgICAgICAgICAgV1RG
OjpJbnQxMjhJbXBsIGludF92YWx1ZSA9IHZhbHVlIDw8IGk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoaW50X3ZhbHVlLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdURjo6SW50MTI4SW1w
bD4oc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihpbnRfdmFsdWUpKSk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoLWludF92YWx1ZSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXVEY6OkludDEy
OEltcGw+KHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oLWludF92YWx1ZSkpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFNtYWxsIHNhbXBsZSBvZiBjaGVja3MgdGhhdCByb3VuZGluZyBpcyB0
b3dhcmQgemVybworICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoVHlwZVBhcmFtKDAu
MSkpKTsKKyAgICBFWFBFQ1RfRVEoMTcsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oMTcuOCkp
KTsKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKFR5cGVQYXJhbSgtMC44KSkpOwor
ICAgIEVYUEVDVF9FUSgtNTMsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oLTUzLjEpKSk7Cisg
ICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oMC41KSkpOworICAgIEVY
UEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoVHlwZVBhcmFtKC0wLjUpKSk7CisgICAgVHlwZVBh
cmFtIGp1c3RfbHRfb25lID0gc3RkOjpuZXh0dG93YXJkKFR5cGVQYXJhbSgxKSwgVHlwZVBhcmFt
KDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKGp1c3RfbHRfb25lKSk7Cisg
ICAgVHlwZVBhcmFtIGp1c3RfZ3RfbWludXNfb25lID0gc3RkOjpuZXh0dG93YXJkKFR5cGVQYXJh
bSgtMSksIFR5cGVQYXJhbSgwKSk7CisgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbChq
dXN0X2d0X21pbnVzX29uZSkpOworCisgICAgLy8gQ2hlY2sgbGltaXRzCisgICAgRVhQRUNUX0RP
VUJMRV9FUShzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oMSksIDEyNyksCisgICAg
ICAgIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oV1RGOjpJbnQxMjhNYXgoKSkpOworICAgIEVYUEVD
VF9ET1VCTEVfRVEoLXN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigxKSwgMTI3KSwK
KyAgICAgICAgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOE1pbigpKSk7Cit9CisK
K1RFU1QoV1RGX0ludDEyOCwgRmFjdG9yeVRlc3QpCit7CisgICAgRVhQRUNUX0VRKFdURjo6SW50
MTI4SW1wbCgtMSksIFdURjo6TWFrZUludDEyOCgtMSwgLTEpKTsKKyAgICBFWFBFQ1RfRVEoV1RG
OjpJbnQxMjhJbXBsKC0zMSksIFdURjo6TWFrZUludDEyOCgtMSwgLTMxKSk7CisgICAgRVhQRUNU
X0VRKFdURjo6SW50MTI4SW1wbChzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSks
CisgICAgICAgIFdURjo6TWFrZUludDEyOCgtMSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90
Pjo6bWluKCkpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKDApLCBXVEY6Ok1ha2VJ
bnQxMjgoMCwgMCkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoMSksIFdURjo6TWFr
ZUludDEyOCgwLCAxKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgwLCBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpOworfQorCitURVNUKFdURl9JbnQx
MjgsIEhpZ2hMb3dUZXN0KQoreworICAgIHN0cnVjdCBIaWdoTG93UGFpciB7CisgICAgICAgIGlu
dDY0X3QgaGlnaDsKKyAgICAgICAgdWludDY0X3QgbG93OworICAgIH07CisgICAgSGlnaExvd1Bh
aXIgdmFsdWVzW10geyB7IDAsIDAgfSwgeyAwLCAxIH0sIHsgMSwgMCB9LCB7IDEyMywgNDU2IH0s
IHsgLTY1NCwgMzIxIH0gfTsKKyAgICBmb3IgKGNvbnN0IEhpZ2hMb3dQYWlyJiBwYWlyIDogdmFs
dWVzKSB7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCB2YWx1ZSA9IFdURjo6TWFrZUludDEyOChw
YWlyLmhpZ2gsIHBhaXIubG93KTsKKyAgICAgICAgRVhQRUNUX0VRKHBhaXIubG93LCBXVEY6Oklu
dDEyOExvdzY0KHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShwYWlyLmhpZ2gsIFdURjo6SW50
MTI4SGlnaDY0KHZhbHVlKSk7CisgICAgfQorfQorCitURVNUKFdURl9JbnQxMjgsIExpbWl0c1Rl
c3QpCit7CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgweDdmZmZmZmZmZmZmZmZmZmYs
IDB4ZmZmZmZmZmZmZmZmZmZmZiksCisgICAgICAgIFdURjo6SW50MTI4TWF4KCkpOworICAgIEVY
UEVDVF9FUShXVEY6OkludDEyOE1heCgpLCB+V1RGOjpJbnQxMjhNaW4oKSk7Cit9CisKK1RFU1Qo
V1RGX0ludDEyOCwgQ29uc3RleHByVGVzdCkKK3sKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJ
bXBsIHplcm8gPSBXVEY6OkludDEyOEltcGwoKTsKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJ
bXBsIG9uZSA9IDE7CisgICAgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBtaW51c190d28gPSAt
MjsKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIG1pbiA9IFdURjo6SW50MTI4TWluKCk7
CisgICAgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBtYXggPSBXVEY6OkludDEyOE1heCgpOwor
ICAgIEVYUEVDVF9FUSh6ZXJvLCBXVEY6OkludDEyOEltcGwoMCkpOworICAgIEVYUEVDVF9FUShv
bmUsIFdURjo6SW50MTI4SW1wbCgxKSk7CisgICAgRVhQRUNUX0VRKG1pbnVzX3R3bywgV1RGOjpN
YWtlSW50MTI4KC0xLCAtMikpOworICAgIEVYUEVDVF9HVChtYXgsIG9uZSk7CisgICAgRVhQRUNU
X0xUKG1pbiwgbWludXNfdHdvKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBDb21wYXJpc29uVGVz
dCkKK3sKKyAgICBzdHJ1Y3QgVGVzdENhc2UgeworICAgICAgICBXVEY6OkludDEyOEltcGwgc21h
bGxlcjsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGxhcmdlcjsKKyAgICB9OworICAgIFRlc3RD
YXNlIGNhc2VzW10gPSB7CisgICAgICAgIHsgV1RGOjpJbnQxMjhJbXBsKDApLCBXVEY6OkludDEy
OEltcGwoMTIzKSB9LAorICAgICAgICB7IFdURjo6TWFrZUludDEyOCgtMTIsIDM0KSwgV1RGOjpN
YWtlSW50MTI4KDEyLCAzNCkgfSwKKyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgoMSwgMTAwMCks
IFdURjo6TWFrZUludDEyOCgxMDAwLCAxKSB9LAorICAgICAgICB7IFdURjo6TWFrZUludDEyOCgt
MTAwMCwgMTAwMCksIFdURjo6TWFrZUludDEyOCgtMSwgMSkgfSwKKyAgICB9OworICAgIGZvciAo
Y29uc3QgVGVzdENhc2UmIHBhaXIgOiBjYXNlcykgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0
ZXN0aW5nOjpNZXNzYWdlKCkgPDwgInBhaXIuc21hbGxlciA9ICIgPDwgcGFpci5zbWFsbGVyCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiOyBwYWlyLmxhcmdl
ciA9ICIgPDwgcGFpci5sYXJnZXIpOworCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21hbGxl
ciA9PSBwYWlyLnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAg
IEVYUEVDVF9UUlVFKHBhaXIubGFyZ2VyID09IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRh
YmlsaXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5zbWFsbGVyID09IHBhaXIu
bGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorCisgICAgICAgIEVYUEVDVF9U
UlVFKHBhaXIuc21hbGxlciAhPSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9j
aGVjaykKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhaXIuc21hbGxlciAhPSBwYWlyLnNtYWxsZXIp
OyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9GQUxTRShwYWly
LmxhcmdlciAhPSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKwor
ICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLnNtYWxsZXIgPCBwYWlyLmxhcmdlcik7IC8vIE5PTElO
VChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhaXIubGFyZ2VyIDwg
cGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorCisgICAgICAgIEVY
UEVDVF9UUlVFKHBhaXIubGFyZ2VyID4gcGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmls
aXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5zbWFsbGVyID4gcGFpci5sYXJn
ZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisKKyAgICAgICAgRVhQRUNUX1RSVUUo
cGFpci5zbWFsbGVyIDw9IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNr
KQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5sYXJnZXIgPD0gcGFpci5zbWFsbGVyKTsgLy8g
Tk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLnNtYWxs
ZXIgPD0gcGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAg
ICBFWFBFQ1RfVFJVRShwYWlyLmxhcmdlciA8PSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFk
YWJpbGl0eS9jaGVjaykKKworICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLmxhcmdlciA+PSBwYWly
LnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9G
QUxTRShwYWlyLnNtYWxsZXIgPj0gcGFpci5sYXJnZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkv
Y2hlY2spCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21hbGxlciA+PSBwYWlyLnNtYWxsZXIp
OyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIu
bGFyZ2VyID49IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAg
IH0KK30KKworVEVTVChXVEZfSW50MTI4LCBVbmFyeVBsdXNUZXN0KQoreworICAgIGludDY0X3Qg
dmFsdWVzNjRbXSA9IHsgMCwgMSwgMTIzNDUsIDB4NDAwMDAwMDAwMDAwMDAwMCwKKyAgICAgICAg
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkgfTsKKyAgICBmb3IgKGludDY0X3Qg
dmFsdWUgOiB2YWx1ZXM2NCkgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNz
YWdlKCkgPDwgInZhbHVlID0gIiA8PCB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6
SW50MTI4SW1wbCh2YWx1ZSksICtXVEY6OkludDEyOEltcGwodmFsdWUpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKFdURjo6SW50MTI4SW1wbCgtdmFsdWUpLCArV1RGOjpJbnQxMjhJbXBsKC12YWx1ZSkp
OworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHZhbHVlLCAwKSwgK1dURjo6TWFr
ZUludDEyOCh2YWx1ZSwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KC12
YWx1ZSwgMCksICtXVEY6Ok1ha2VJbnQxMjgoLXZhbHVlLCAwKSk7CisgICAgfQorfQorCitURVNU
KFdURl9JbnQxMjgsIFVuYXJ5TmVnYXRpb25UZXN0KQoreworICAgIGludDY0X3QgdmFsdWVzNjRb
XSA9IHsgMCwgMSwgMTIzNDUsIDB4NDAwMDAwMDAwMDAwMDAwMCwKKyAgICAgICAgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkgfTsKKyAgICBmb3IgKGludDY0X3QgdmFsdWUgOiB2
YWx1ZXM2NCkgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwg
InZhbHVlID0gIiA8PCB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1w
bCgtdmFsdWUpLCAtV1RGOjpJbnQxMjhJbXBsKHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShX
VEY6OkludDEyOEltcGwodmFsdWUpLCAtV1RGOjpJbnQxMjhJbXBsKC12YWx1ZSkpOworICAgICAg
ICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KC12YWx1ZSwgMCksIC1XVEY6Ok1ha2VJbnQxMjgo
dmFsdWUsIDApKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh2YWx1ZSwgMCks
IC1XVEY6Ok1ha2VJbnQxMjgoLXZhbHVlLCAwKSk7CisgICAgfQorfQorCitURVNUKFdURl9JbnQx
MjgsIExvZ2ljYWxOb3RUZXN0KQoreworICAgIEVYUEVDVF9UUlVFKCFXVEY6OkludDEyOEltcGwo
MCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgeworICAgICAgICBFWFBFQ1Rf
RkFMU0UoIVdURjo6TWFrZUludDEyOCgwLCB1aW50NjRfdCB7IDEgfSA8PCBpKSk7CisgICAgfQor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjM7ICsraSkgeworICAgICAgICBFWFBFQ1RfRkFMU0Uo
IVdURjo6TWFrZUludDEyOChpbnQ2NF90IHsgMSB9IDw8IGksIDApKTsKKyAgICB9Cit9CisKK1RF
U1QoV1RGX0ludDEyOCwgQWRkaXRpb25TdWJ0cmFjdGlvblRlc3QpCit7CisgICAgLy8gNjQgYml0
IHBhaXJzIHRoYXQgd2lsbCBub3QgY2F1c2Ugb3ZlcmZsb3cgLyB1bmRlcmZsb3cuIFRoZXNlIHRl
c3QgbmVnYXRpdmUKKyAgICAvLyBjYXJyeTsgcG9zaXRpdmUgY2FycnkgbXVzdCBiZSBjaGVja2Vk
IHNlcGFyYXRlbHkuCisgICAgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+IGNhc2VzW10gewor
ICAgICAgICB7IDAsIDAgfSwgLy8gMCwgMAorICAgICAgICB7IDAsIDI5NDU3ODEyOTA4MzQgfSwg
Ly8gMCwgKworICAgICAgICB7IDE5MDgzNTc2MTkyMzQsIDAgfSwgLy8gKywgMAorICAgICAgICB7
IDAsIC0xMjA0ODk1OTE4MjQ1IH0sIC8vIDAsIC0KKyAgICAgICAgeyAtMjk1NzkyODUyMzU2MCwg
MCB9LCAvLyAtLCAwCisgICAgICAgIHsgODkwMjM5ODIzMTI0NjEsIDk4MzQ2MDEyNTY3MTM0IH0s
IC8vICssICsKKyAgICAgICAgeyAtNjM0NTQyMzQ1NjgyMzksIC0yMzQ1NjIzNTIzMDc3MyB9LCAv
LyAtLCAtCisgICAgICAgIHsgOTgyNjM0NTcyNjM1MDIsIC0yMTQyODU2MTkzNTkyNSB9LCAvLyAr
LCAtCisgICAgICAgIHsgLTg4MjM1MjM3NDM4NDY3LCAxNTkyMzY1OTIzNDU3MyB9LCAvLyAtLCAr
CisgICAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBjYXNlcykgeworICAgICAgICBT
Q09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkKKyAgICAgICAgICAgIDw8ICJwYWlyID0g
eyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBhaXIuc2Vjb25kIDw8ICd9Jyk7CisKKyAgICAg
ICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0ICsgcGFpci5zZWNvbmQpLAor
ICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpICsgV1RGOjpJbnQxMjhJbXBs
KHBhaXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5z
ZWNvbmQgKyBwYWlyLmZpcnN0KSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLnNl
Y29uZCkgKz0gV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpKTsKKworICAgICAgICBFWFBFQ1Rf
RVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgLSBwYWlyLnNlY29uZCksCisgICAgICAgICAg
ICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgLSBXVEY6OkludDEyOEltcGwocGFpci5zZWNv
bmQpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCAtIHBh
aXIuZmlyc3QpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSAtPSBX
VEY6OkludDEyOEltcGwocGFpci5maXJzdCkpOworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAg
ICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCArIHBhaXIuZmlyc3QsIDApLAorICAg
ICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSArIFdURjo6TWFrZUludDEy
OChwYWlyLmZpcnN0LCAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6
TWFrZUludDEyOChwYWlyLmZpcnN0ICsgcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RG
OjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApICs9IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29u
ZCwgMCkpOworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEy
OChwYWlyLnNlY29uZCAtIHBhaXIuZmlyc3QsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50
MTI4KHBhaXIuc2Vjb25kLCAwKSAtIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0
IC0gcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmly
c3QsIDApIC09IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgIH0KKworICAg
IC8vIGNoZWNrIHBvc2l0aXZlIGNhcnJ5CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgz
MSwgMCksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgyMCwgMSkgKyBXVEY6Ok1ha2VJbnQxMjgo
MTAsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpOworfQorCitURVNUKFdU
Rl9JbnQxMjgsIEluY3JlbWVudERlY3JlbWVudFRlc3QpCit7CisgICAgV1RGOjpJbnQxMjhJbXBs
IHZhbHVlID0gMDsKKyAgICBFWFBFQ1RfRVEoMCwgdmFsdWUrKyk7CisgICAgRVhQRUNUX0VRKDEs
IHZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoMSwgdmFsdWUtLSk7CisgICAgRVhQRUNUX0VRKDAsIHZh
bHVlKTsKKyAgICBFWFBFQ1RfRVEoLTEsIC0tdmFsdWUpOworICAgIEVYUEVDVF9FUSgtMSwgdmFs
dWUpOworICAgIEVYUEVDVF9FUSgwLCArK3ZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoMCwgdmFsdWUp
OworfQorCitURVNUKFdURl9JbnQxMjgsIE11bHRpcGxpY2F0aW9uVGVzdCkKK3sKKyAgICAvLyAx
IGJpdCB4IDEgYml0LCBhbmQgbmVnYXRpdmUgY29tYmluYXRpb25zCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTI3IC0gaTsg
KytqKSB7CisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwg
ImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBXVEY6OkludDEyOElt
cGwgYSA9IFdURjo6SW50MTI4SW1wbCgxKSA8PCBpOworICAgICAgICAgICAgV1RGOjpJbnQxMjhJ
bXBsIGIgPSBXVEY6OkludDEyOEltcGwoMSkgPDwgajsKKyAgICAgICAgICAgIFdURjo6SW50MTI4
SW1wbCBjID0gV1RGOjpJbnQxMjhJbXBsKDEpIDw8IChpICsgaik7CisKKyAgICAgICAgICAgIEVY
UEVDVF9FUShjLCBhICogYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIC1hICogYik7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIGEgKiAtYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
YywgLWEgKiAtYik7CisKKyAgICAgICAgICAgIEVYUEVDVF9FUShjLCBXVEY6OkludDEyOEltcGwo
YSkgKj0gYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIFdURjo6SW50MTI4SW1wbCgtYSkg
Kj0gYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIFdURjo6SW50MTI4SW1wbChhKSAqPSAt
Yik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoYywgV1RGOjpJbnQxMjhJbXBsKC1hKSAqPSAtYik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYWlycyBvZiByYW5kb20gdmFsdWVzIHRoYXQg
d2lsbCBub3Qgb3ZlcmZsb3cgc2lnbmVkIDY0LWJpdCBtdWx0aXBsaWNhdGlvbgorICAgIHN0ZDo6
cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiBzbWFsbF92YWx1ZXNbXSA9IHsKKyAgICAgICAgeyAweDVl
NjEsIDB4ZjI5Zjc5Y2ExNGI0IH0sIC8vICssICsKKyAgICAgICAgeyAweDNlMDMzYiwgLTB4NjEy
YzBlZTU0OSB9LCAvLyArLCAtCisgICAgICAgIHsgLTB4MDUyY2U3ZTgsIDB4N2M3MjhmMGYgfSwg
Ly8gLSwgKworICAgICAgICB7IC0weDNhZjcwNTQ2MjYsIC0weGZiMWUxZCB9LCAvLyAtLCAtCisg
ICAgfTsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiYgcGFpciA6
IHNtYWxsX3ZhbHVlcykgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdl
KCkKKyAgICAgICAgICAgIDw8ICJwYWlyID0geyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBh
aXIuc2Vjb25kIDw8ICd9Jyk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChw
YWlyLmZpcnN0ICogcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBh
aXIuZmlyc3QpICogV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVD
VF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJzdCAqIHBhaXIuc2Vjb25kKSwKKyAgICAgICAg
ICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0KSAqPSBXVEY6OkludDEyOEltcGwocGFpci5z
ZWNvbmQpKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3Qg
KiBwYWlyLnNlY29uZCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJz
dCwgMCkgKiBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKyAgICAgICAgRVhQRUNUX0VR
KFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0ICogcGFpci5zZWNvbmQsIDApLAorICAgICAgICAg
ICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApICo9IFdURjo6SW50MTI4SW1wbChwYWly
LnNlY29uZCkpOworICAgIH0KKworICAgIC8vIFBhaXJzIG9mIHBvc2l0aXZlIHJhbmRvbSB2YWx1
ZXMgdGhhdCB3aWxsIG5vdCBvdmVyZmxvdyA2NC1iaXQKKyAgICAvLyBtdWx0aXBsaWNhdGlvbiBh
bmQgY2FuIGJlIGxlZnQgc2hpZnRlZCBieSAzMiB3aXRob3V0IG92ZXJmbG93CisgICAgc3RkOjpw
YWlyPGludDY0X3QsIGludDY0X3Q+IHNtYWxsX3ZhbHVlczJbXSA9IHsKKyAgICAgICAgeyAweDFi
YjBhMTEwLCAweDMxNDg3NjcxIH0sCisgICAgICAgIHsgMHg0NzkyNzg0ZSwgMHgyOGFkZDdkNyB9
LAorICAgICAgICB7IDB4N2I2NjU1M2EsIDB4MTFkZmY4ZWYgfSwKKyAgICB9OworICAgIGZvciAo
Y29uc3Qgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+JiBwYWlyIDogc21hbGxfdmFsdWVzMikg
eworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkKKyAgICAgICAgICAg
IDw8ICJwYWlyID0geyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBhaXIuc2Vjb25kIDw8ICd9
Jyk7CisKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGEgPSBXVEY6OkludDEyOEltcGwocGFpci5m
aXJzdCA8PCAzMik7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBiID0gV1RGOjpJbnQxMjhJbXBs
KHBhaXIuc2Vjb25kIDw8IDMyKTsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGMgPSBXVEY6Ok1h
a2VJbnQxMjgocGFpci5maXJzdCAqIHBhaXIuc2Vjb25kLCAwKTsKKworICAgICAgICBFWFBFQ1Rf
RVEoYywgYSAqIGIpOworICAgICAgICBFWFBFQ1RfRVEoLWMsIC1hICogYik7CisgICAgICAgIEVY
UEVDVF9FUSgtYywgYSAqIC1iKTsKKyAgICAgICAgRVhQRUNUX0VRKGMsIC1hICogLWIpOworCisg
ICAgICAgIEVYUEVDVF9FUShjLCBXVEY6OkludDEyOEltcGwoYSkgKj0gYik7CisgICAgICAgIEVY
UEVDVF9FUSgtYywgV1RGOjpJbnQxMjhJbXBsKC1hKSAqPSBiKTsKKyAgICAgICAgRVhQRUNUX0VR
KC1jLCBXVEY6OkludDEyOEltcGwoYSkgKj0gLWIpOworICAgICAgICBFWFBFQ1RfRVEoYywgV1RG
OjpJbnQxMjhJbXBsKC1hKSAqPSAtYik7CisgICAgfQorCisgICAgLy8gY2hlY2sgMCwgMSwgYW5k
IC0xIGJlaGF2aW9yIHdpdGggbGFyZ2UgdmFsdWVzCisgICAgV1RGOjpJbnQxMjhJbXBsIGxhcmdl
X3ZhbHVlc1tdID0geworICAgICAgICB7IFdURjo6TWFrZUludDEyOCgweGQ2NmYwNjFhZjAyZDA0
MDgsIDB4NzI3ZDI4NDZjYjQ3NWI1MykgfSwKKyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgoMHgy
N2I4ZDVlZDYxMDQ0NTJkLCAweDAzZjhhMzNiMGVlMWRmNGYpIH0sCisgICAgICAgIHsgLVdURjo6
TWFrZUludDEyOCgweDYyMWI2NjI2YjllOGQwNDIsIDB4MjczMTFhYzk5ZGYwMDkzOCkgfSwKKyAg
ICAgICAgeyAtV1RGOjpNYWtlSW50MTI4KDB4MzRlMDY1NmYxZTk1ZmI2MCwgMHg0MjgxY2ZkNzMx
MjU3YTQ3KSB9LAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiBsYXJn
ZV92YWx1ZXMpIHsKKyAgICAgICAgRVhQRUNUX0VRKDAsIDAgKiB2YWx1ZSk7CisgICAgICAgIEVY
UEVDVF9FUSgwLCB2YWx1ZSAqIDApOworICAgICAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJ
bXBsKDApICo9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHZhbHVlICo9IDApOworCisg
ICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgMSAqIHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKHZh
bHVlLCB2YWx1ZSAqIDEpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIFdURjo6SW50MTI4SW1w
bCgxKSAqPSB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgKj0gMSk7CisK
KyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgLTEgKiB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9F
USgtdmFsdWUsIHZhbHVlICogLTEpOworICAgICAgICBFWFBFQ1RfRVEoLXZhbHVlLCBXVEY6Oklu
dDEyOEltcGwoLTEpICo9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgdmFsdWUg
Kj0gLTEpOworICAgIH0KKworICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0ZWQgcmFuZG9tIGxhcmdl
IHZhbHVlIGNhc2VzCisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgweGNkMGVmZDM0NDIy
MTliYiwgMHhkZTQ3YzA1YmNkOWRmNmUxKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4N2M2
NDQ4LCAweDNiYzQyODVjNDdhOWQyNTMpICogMHgxYTYwMzc1MzdiKTsKKyAgICBFWFBFQ1RfRVEo
LVdURjo6TWFrZUludDEyOCgweDFmOGYxNDk4NTBiMWU1ZTYsIDB4MWU1MGQ2YjUyZDI3MmMzZSks
CisgICAgICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHgyMywgMHgyZTY4YTUxM2NhMWI4ODU5KSAqIDB4
ZTVhNDM0Y2QxNDg2NmUpOworICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtlSW50MTI4KDB4NTVjYWU3
MzIwMjlkMWZjZSwgMHhjYTY0NzRiNjQyMzI2M2U0KSwKKyAgICAgICAgMHhhOWI5OGE4ZGRmNjZi
YyAqIC1XVEY6Ok1ha2VJbnQxMjgoMHg4MSwgMHg2NzJlNTgyMzFlMjQ2OWQ3KSk7CisgICAgRVhQ
RUNUX0VRKFdURjo6TWFrZUludDEyOCgweDE5YzhiNzYyMGI1MDdkYzQsIDB4ZmVjMDQyYjcxYTVm
MjlhNCksCisgICAgICAgIC0weDNlMzkzNDExNDcgKiAtV1RGOjpNYWtlSW50MTI4KDB4NmExNGIy
LCAweDVlZDM0Y2NhNDIzMjdiM2MpKTsKKworICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgo
MHhjZDBlZmQzNDQyMjE5YmIsIDB4ZGU0N2MwNWJjZDlkZjZlMSksCisgICAgICAgIFdURjo6TWFr
ZUludDEyOCgweDdjNjQ0OCwgMHgzYmM0Mjg1YzQ3YTlkMjUzKSAqPSAweDFhNjAzNzUzN2IpOwor
ICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtlSW50MTI4KDB4MWY4ZjE0OTg1MGIxZTVlNiwgMHgxZTUw
ZDZiNTJkMjcyYzNlKSwKKyAgICAgICAgLVdURjo6TWFrZUludDEyOCgweDIzLCAweDJlNjhhNTEz
Y2ExYjg4NTkpICo9IDB4ZTVhNDM0Y2QxNDg2NmUpOworICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtl
SW50MTI4KDB4NTVjYWU3MzIwMjlkMWZjZSwgMHhjYTY0NzRiNjQyMzI2M2U0KSwKKyAgICAgICAg
V1RGOjpJbnQxMjhJbXBsKDB4YTliOThhOGRkZjY2YmMpICo9IC1XVEY6Ok1ha2VJbnQxMjgoMHg4
MSwgMHg2NzJlNTgyMzFlMjQ2OWQ3KSk7CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgw
eDE5YzhiNzYyMGI1MDdkYzQsIDB4ZmVjMDQyYjcxYTVmMjlhNCksCisgICAgICAgIFdURjo6SW50
MTI4SW1wbCgtMHgzZTM5MzQxMTQ3KSAqPSAtV1RGOjpNYWtlSW50MTI4KDB4NmExNGIyLCAweDVl
ZDM0Y2NhNDIzMjdiM2MpKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBEaXZpc2lvbkFuZE1vZHVs
b1Rlc3QpCit7CisgICAgLy8gQ2hlY2sgYWdhaW5zdCA2NCBiaXQgZGl2aXNpb24gYW5kIG1vZHVs
byBvcGVyYXRvcnMgd2l0aCBhIHNhbXBsZSBvZgorICAgIC8vIHJhbmRvbWx5IGdlbmVyYXRlZCBw
YWlycy4KKyAgICBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gc21hbGxfcGFpcnNbXSA9IHsK
KyAgICAgICAgeyAweDE1ZjJhNjQxMzgsIDB4NjdkYTA1IH0sCisgICAgICAgIHsgMHg1ZTU2ZDE5
NGFmNDMwNDVmLCAweGNmMTU0M2ZiOTkgfSwKKyAgICAgICAgeyAweDE1ZTYxZWQwNTIwMzZhLCAt
MHhjOGU2IH0sCisgICAgICAgIHsgMHg4ODEyNWEzNDFlODUsIC0weGQyM2ZiNzc2ODMgfSwKKyAg
ICAgICAgeyAtMHhjMDZlMjAsIDB4NWEgfSwKKyAgICAgICAgeyAtMHg0ZjEwMDIxOWFlYTNlODVk
LCAweGRjYzU2Y2I0ZWZlOTkzIH0sCisgICAgICAgIHsgLTB4MTY4ZDYyOTEwNSwgLTB4YTcgfSwK
KyAgICAgICAgeyAtMHg3YjQ0ZTkyZjAzYWIyMzc1LCAtMHg2NTE2IH0sCisgICAgfTsKKyAgICBm
b3IgKGNvbnN0IHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiYgcGFpciA6IHNtYWxsX3BhaXJz
KSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAg
ICAgPDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5zZWNvbmQgPDwg
J30nKTsKKworICAgICAgICBXVEY6OkludDEyOEltcGwgZGl2aWRlbmQgPSBwYWlyLmZpcnN0Owor
ICAgICAgICBXVEY6OkludDEyOEltcGwgZGl2aXNvciA9IHBhaXIuc2Vjb25kOworICAgICAgICBp
bnQ2NF90IHF1b3RpZW50ID0gcGFpci5maXJzdCAvIHBhaXIuc2Vjb25kOworICAgICAgICBpbnQ2
NF90IHJlbWFpbmRlciA9IHBhaXIuZmlyc3QgJSBwYWlyLnNlY29uZDsKKworICAgICAgICBFWFBF
Q1RfRVEocXVvdGllbnQsIGRpdmlkZW5kIC8gZGl2aXNvcik7CisgICAgICAgIEVYUEVDVF9FUShx
dW90aWVudCwgV1RGOjpJbnQxMjhJbXBsKGRpdmlkZW5kKSAvPSBkaXZpc29yKTsKKyAgICAgICAg
RVhQRUNUX0VRKHJlbWFpbmRlciwgZGl2aWRlbmQgJSBkaXZpc29yKTsKKyAgICAgICAgRVhQRUNU
X0VRKHJlbWFpbmRlciwgV1RGOjpJbnQxMjhJbXBsKGRpdmlkZW5kKSAlPSBkaXZpc29yKTsKKyAg
ICB9CisKKyAgICAvLyBUZXN0IGJlaGF2aW9yIHdpdGggMCwgMSwgYW5kIC0xIHdpdGggYSBzYW1w
bGUgb2YgcmFuZG9tbHkgZ2VuZXJhdGVkIGxhcmdlCisgICAgLy8gdmFsdWVzLgorICAgIFdURjo6
SW50MTI4SW1wbCB2YWx1ZXNbXSA9IHsKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4NjNkMjZl
ZTY4OGE5NjJiMiwgMHg5ZTE0MTFhYmRhNWMxZDcwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4
KDB4MTUyZjM4NTE1OWQ2Zjk4NiwgMHhiZjhkNDhlZjYzZGEzOTVkKSwKKyAgICAgICAgLVdURjo6
TWFrZUludDEyOCgweDMwOThkNzU2NzAzMDAzOGMsIDB4MTRlN2E4YTA5OGRjMjE2NCksCisgICAg
ICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHg0OWEwMzdhY2EzNWM4MDlmLCAweGE2YTg3NTI1NDgwZWYz
MzApLAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiB2YWx1ZXMpIHsK
KyAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJ2YWx1ZSA9ICIg
PDwgdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSgwLCAwIC8gdmFsdWUpOworICAgICAgICBF
WFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKDApIC89IHZhbHVlKTsKKyAgICAgICAgRVhQRUNU
X0VRKDAsIDAgJSB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwo
MCkgJT0gdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgLyAxKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwodmFsdWUpIC89IDEpOworICAg
ICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgJSAxKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFdURjo6
SW50MTI4SW1wbCh2YWx1ZSkgJT0gMSk7CisKKyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgdmFs
dWUgLyAtMSk7CisgICAgICAgIEVYUEVDVF9FUSgtdmFsdWUsIFdURjo6SW50MTI4SW1wbCh2YWx1
ZSkgLz0gLTEpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgJSAtMSk7CisgICAgICAgIEVY
UEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwodmFsdWUpICU9IC0xKTsKKyAgICB9CisKKyAgICAv
LyBNaW4gYW5kIG1heCB2YWx1ZXMKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhNYXgoKSAv
IFdURjo6SW50MTI4TWluKCkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOE1heCgpLCBXVEY6
OkludDEyOE1heCgpICUgV1RGOjpJbnQxMjhNaW4oKSk7CisgICAgRVhQRUNUX0VRKC0xLCBXVEY6
OkludDEyOE1pbigpIC8gV1RGOjpJbnQxMjhNYXgoKSk7CisgICAgRVhQRUNUX0VRKC0xLCBXVEY6
OkludDEyOE1pbigpICUgV1RGOjpJbnQxMjhNYXgoKSk7CisKKyAgICAvLyBQb3dlciBvZiB0d28g
ZGl2aXNpb24gYW5kIG1vZHVsbyBvZiByYW5kb20gbGFyZ2UgZGl2aWRlbmRzCisgICAgV1RGOjpJ
bnQxMjhJbXBsIHBvc2l0aXZlX3ZhbHVlc1tdID0geworICAgICAgICBXVEY6Ok1ha2VJbnQxMjgo
MHgyMWUxYTFjYzY5NTc0NjIwLCAweGU3YWM0NDdmYWIyZmM4NjkpLAorICAgICAgICBXVEY6Ok1h
a2VJbnQxMjgoMHgzMmMyZmYzYWI4OWU2NmU4LCAweDAzMzc5YTYxM2ZkMWNlNzQpLAorICAgICAg
ICBXVEY6Ok1ha2VJbnQxMjgoMHg2ZjMyY2E3ODYxODRkY2FmLCAweDA0NmY5YzllY2IzYTljZTEp
LAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHgxYWViNDY5ZGQ5OTBlMGVlLCAweGRhMjc0MGYy
NDNjZDM3ZWIpLAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiBwb3Np
dGl2ZV92YWx1ZXMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMjc7ICsraSkgewor
ICAgICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpCisgICAgICAgICAg
ICAgICAgPDwgInZhbHVlID0gIiA8PCB2YWx1ZSA8PCAiOyBpID0gIiA8PCBpKTsKKyAgICAgICAg
ICAgIFdURjo6SW50MTI4SW1wbCBwb3dlcl9vZl90d28gPSBXVEY6OkludDEyOEltcGwoMSkgPDwg
aTsKKworICAgICAgICAgICAgRVhQRUNUX0VRKHZhbHVlID4+IGksIHZhbHVlIC8gcG93ZXJfb2Zf
dHdvKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSA+PiBpLCBXVEY6OkludDEyOEltcGwo
dmFsdWUpIC89IHBvd2VyX29mX3R3byk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWUgJiAo
cG93ZXJfb2ZfdHdvIC0gMSksIHZhbHVlICUgcG93ZXJfb2ZfdHdvKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSh2YWx1ZSAmIChwb3dlcl9vZl90d28gLSAxKSwKKyAgICAgICAgICAgICAgICBXVEY6
OkludDEyOEltcGwodmFsdWUpICU9IHBvd2VyX29mX3R3byk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBNYW51YWxseSBjYWxjdWxhdGVkIGNhc2VzIHdpdGggcmFuZG9tIGxhcmdlIGRpdmlk
ZW5kcworICAgIHN0cnVjdCBEaXZpc2lvbk1vZENhc2UgeworICAgICAgICBXVEY6OkludDEyOElt
cGwgZGl2aWRlbmQ7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBkaXZpc29yOworICAgICAgICBX
VEY6OkludDEyOEltcGwgcXVvdGllbnQ7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCByZW1haW5k
ZXI7CisgICAgfTsKKyAgICBEaXZpc2lvbk1vZENhc2UgbWFudWFsX2Nhc2VzW10gPSB7CisgICAg
ICAgIHsgV1RGOjpNYWtlSW50MTI4KDB4NmFkYTQ4ZDQ4OTAwNzk2NiwgMHgzYzljNWM5ODE1MGQ1
ZDY5KSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCgweDhiYzMwOGZiLCAweDhjYjljYzlh
M2I4MDMzNDQpLCAweGMzYjg3ZTA4LAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4MWI3
ZGI1ZTEsIDB4ZDllY2EzNGI3YWYwNGI0OSkgfSwKKyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgo
MHhkNjk0NjUxMWI1YiwgMHg0ODg2YzVjOTY1NDZiZjVmKSwKKyAgICAgICAgICAgIC1XVEY6Ok1h
a2VJbnQxMjgoMHgyNjNiLCAweGZkNTE2Mjc5ZWZjZmUyZGMpLCAtMHg1OWNiYWJmMCwKKyAgICAg
ICAgICAgIFdURjo6TWFrZUludDEyOCgweDYyMiwgMHhmNDYyOTA5MTU1NjUxZDFmKSB9LAorICAg
ICAgICB7IC1XVEY6Ok1ha2VJbnQxMjgoMHgzM2RiNzM0ZjllOGQxMzk5LCAweDg0NDdhYzkyNDgy
YmNhNGQpLCAweDM3NDk1MDc4MjQwLAorICAgICAgICAgICAgLVdURjo6TWFrZUludDEyOCgweGYw
MWYxLCAweGJjMDM2OGJmOWE3N2VhZTgpLCAtMHgyMWE1MDhmNDA0ZCB9LAorICAgICAgICB7IC1X
VEY6Ok1ha2VJbnQxMjgoMHgxM2Y4MzdiNDA5YTA3ZTdkLCAweDdmYzhlMjQ4YTdkNzM1NjApLCAt
MHgxYjlmLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4YjkxNTc1NTZkNzI0LCAweGIx
NGY2MzU3MTRkNzU2M2UpLCAtMHgxYWRlIH0sCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IERpdmlz
aW9uTW9kQ2FzZSB0ZXN0X2Nhc2UgOiBtYW51YWxfY2FzZXMpIHsKKyAgICAgICAgRVhQRUNUX0VR
KHRlc3RfY2FzZS5xdW90aWVudCwgdGVzdF9jYXNlLmRpdmlkZW5kIC8gdGVzdF9jYXNlLmRpdmlz
b3IpOworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnF1b3RpZW50LAorICAgICAgICAgICAg
V1RGOjpJbnQxMjhJbXBsKHRlc3RfY2FzZS5kaXZpZGVuZCkgLz0gdGVzdF9jYXNlLmRpdmlzb3Ip
OworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnJlbWFpbmRlciwgdGVzdF9jYXNlLmRpdmlk
ZW5kICUgdGVzdF9jYXNlLmRpdmlzb3IpOworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnJl
bWFpbmRlciwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbCh0ZXN0X2Nhc2UuZGl2aWRlbmQp
ICU9IHRlc3RfY2FzZS5kaXZpc29yKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgQml0
d2lzZUxvZ2ljVGVzdCkKK3sKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKC0xKSwgfldU
Rjo6SW50MTI4SW1wbCgwKSk7CisKKyAgICBXVEY6OkludDEyOEltcGwgdmFsdWVzW10geworICAg
ICAgICAwLCAtMSwgMHhkZTQwMGJlZTA1YzNmZjZiLCBXVEY6Ok1ha2VJbnQxMjgoMHg3ZjMyMTc4
ZGQ4MWQ2MzRhLCAwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4YWY1MzkwNTcwNTU2MTNh
OSwgMHg3ZDEwNGQ3ZDk0NmMyZTRkKQorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwg
dmFsdWUgOiB2YWx1ZXMpIHsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB+fnZhbHVlKTsKKwor
ICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIHZhbHVlIHwgdmFsdWUpOworICAgICAgICBFWFBFQ1Rf
RVEodmFsdWUsIHZhbHVlICYgdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgXiB2
YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwodmFsdWUp
IHw9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwodmFs
dWUpICY9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbCh2YWx1
ZSkgXj0gdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgfCAwKTsKKyAg
ICAgICAgRVhQRUNUX0VRKDAsIHZhbHVlICYgMCk7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwg
dmFsdWUgXiAwKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKC0xKSwgdmFs
dWUgfCBXVEY6OkludDEyOEltcGwoLTEpKTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB2YWx1
ZSAmIFdURjo6SW50MTI4SW1wbCgtMSkpOworICAgICAgICBFWFBFQ1RfRVEofnZhbHVlLCB2YWx1
ZSBeIFdURjo6SW50MTI4SW1wbCgtMSkpOworICAgIH0KKworICAgIC8vIHNtYWxsIHNhbXBsZSBv
ZiByYW5kb21seSBnZW5lcmF0ZWQgaW50NjRfdCdzCisgICAgc3RkOjpwYWlyPGludDY0X3QsIGlu
dDY0X3Q+IHBhaXJzNjRbXSB7CisgICAgICAgIHsgMHg3Zjg2Nzk3ZjVlOTkxYWY0LCAweDFlZTMw
NDk0ZmIwMDdjOTcgfSwKKyAgICAgICAgeyAweDBiMjc4MjgyYmFjZjAxYWYsIDB4NTg3ODBlMGE1
N2E0OWU4NiB9LAorICAgICAgICB7IDB4MDU5ZjI2NmNjYjkzYTY2NiwgMHgzZDViNzMxYmFlOTI4
NmY1IH0sCisgICAgICAgIHsgMHg2M2MwYzQ4MjBmMTIxMDhjLCAweDU4MTY2NzEzYzEyZTFjM2Eg
fSwKKyAgICAgICAgeyAweDM4MTQ4OGJiMmVkMmE2NmUsIDB4MjIyMGEzZWI3NmEzNjk4YyB9LAor
ICAgICAgICB7IDB4MmEwYTBkZmI4MWUwNmYyMSwgMHg0YjYwNTg1OTI3ZjU1MjNjIH0sCisgICAg
ICAgIHsgMHg1NTViMWMzYTAzNjk4NTM3LCAweDI1NDc4Y2QxOWQ4ZTUzY2IgfSwKKyAgICAgICAg
eyAweDQ3NTBmNmYyN2Q3NzkyMjUsIDB4MTYzOTc1NTNjNmZmMDVmYyB9LAorICAgIH07CisgICAg
Zm9yIChjb25zdCBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4mIHBhaXIgOiBwYWlyczY0KSB7
CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAgICAg
PDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5zZWNvbmQgPDwgJ30n
KTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KH5wYWlyLmZpcnN0LCB+cGFp
ci5zZWNvbmQpLAorICAgICAgICAgICAgfldURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCBwYWly
LnNlY29uZCkpOworCisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJz
dCAmIHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0
KSAmIFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgfCBwYWlyLnNlY29uZCksCisgICAgICAgICAgICBXVEY6
OkludDEyOEltcGwocGFpci5maXJzdCkgfCBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsK
KyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0IF4gcGFpci5zZWNv
bmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpIF4gV1RGOjpJbnQx
MjhJbXBsKHBhaXIuc2Vjb25kKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1w
bChwYWlyLmZpcnN0ICYgcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBs
KHBhaXIuZmlyc3QpICY9IFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworICAgICAgICBF
WFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgfCBwYWlyLnNlY29uZCksCisgICAg
ICAgICAgICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgfD0gV1RGOjpJbnQxMjhJbXBsKHBh
aXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJz
dCBeIHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0
KSBePSBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKworICAgICAgICBFWFBFQ1RfRVEo
CisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCAmIHBhaXIuc2Vjb25kLCAw
KSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSAmIFdURjo6TWFr
ZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoCisgICAgICAgICAg
ICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCB8IHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAg
ICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSB8IFdURjo6TWFrZUludDEyOChwYWly
LnNlY29uZCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoCisgICAgICAgICAgICBXVEY6Ok1ha2VJ
bnQxMjgocGFpci5maXJzdCBeIHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFr
ZUludDEyOChwYWlyLmZpcnN0LCAwKSBeIFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkp
OworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWly
LmZpcnN0ICYgcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBh
aXIuZmlyc3QsIDApICY9IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgICAg
ICBFWFBFQ1RfRVEoCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCB8IHBh
aXIuc2Vjb25kLCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAw
KSB8PSBXVEY6Ok1ha2VJbnQxMjgocGFpci5zZWNvbmQsIDApKTsKKyAgICAgICAgRVhQRUNUX0VR
KAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QgXiBwYWlyLnNlY29uZCwg
MCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCwgMCkgXj0gV1RGOjpN
YWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisgICAgfQorfQorCitURVNUKFdURl9JbnQxMjgs
IEJpdHdpc2VTaGlmdFRlc3QpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7
CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IGk7ICsraikgeworICAgICAgICAgICAgLy8g
TGVmdCBzaGlmdCBmcm9tIGotdGggYml0IHRvIGktdGggYml0LgorICAgICAgICAgICAgU0NPUEVE
X1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7IGogPSAiIDw8
IGopOworICAgICAgICAgICAgRVhQRUNUX0VRKHVpbnQ2NF90IHsgMSB9IDw8IGksIFdURjo6SW50
MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA8PCAoaSAtIGopKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSh1aW50NjRfdCB7IDEgfSA8PCBpLCBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAx
IH0gPDwgaikgPDw9IChpIC0gaikpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgNjM7ICsraSkgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDY0OyArK2op
IHsKKyAgICAgICAgICAgIC8vIExlZnQgc2hpZnQgZnJvbSBqLXRoIGJpdCB0byAoaSArIDY0KS10
aCBiaXQuCisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwg
ImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGksIDApLAorICAgICAgICAgICAgICAgIFdU
Rjo6SW50MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA8PCAoaSArIDY0IC0gaikpOworICAg
ICAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBpLCAw
KSwKKyAgICAgICAgICAgICAgICBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAxIH0gPDwgaikg
PDw9IChpICsgNjQgLSBqKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PD0gaTsgKytqKSB7CisgICAgICAgICAgICAvLyBMZWZ0IHNoaWZ0IGZyb20gKGogKyA2NCktdGgg
Yml0IHRvIChpICsgNjQpLXRoIGJpdC4KKyAgICAgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rp
bmc6Ok1lc3NhZ2UoKSA8PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBqKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwgaSwgMCksCisg
ICAgICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGosIDApIDw8
IChpIC0gaikpOworICAgICAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRf
dCB7IDEgfSA8PCBpLCAwKSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0
X3QgeyAxIH0gPDwgaiwgMCkgPDw9IChpIC0gaikpOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSBpOyBq
IDwgNjQ7ICsraikgeworICAgICAgICAgICAgLy8gUmlnaHQgc2hpZnQgZnJvbSBqLXRoIGJpdCB0
byBpLXRoIGJpdC4KKyAgICAgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2Uo
KSA8PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBqKTsKKyAgICAgICAgICAgIEVYUEVDVF9F
USh1aW50NjRfdCB7IDEgfSA8PCBpLCBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAxIH0gPDwg
aikgPj4gKGogLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodWludDY0X3QgeyAxIH0gPDwg
aSwgV1RGOjpJbnQxMjhJbXBsKHVpbnQ2NF90IHsgMSB9IDw8IGopID4+PSAoaiAtIGkpKTsKKyAg
ICAgICAgfQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDYzOyArK2opIHsKKyAgICAgICAg
ICAgIC8vIFJpZ2h0IHNoaWZ0IGZyb20gKGogKyA2NCktdGggYml0IHRvIGktdGggYml0LgorICAg
ICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBp
IDw8ICI7IGogPSAiIDw8IGopOworICAgICAgICAgICAgRVhQRUNUX0VRKHVpbnQ2NF90IHsgMSB9
IDw8IGksCisgICAgICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8
IGosIDApID4+IChqICsgNjQgLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodWludDY0X3Qg
eyAxIH0gPDwgaSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAx
IH0gPDwgaiwgMCkgPj49IChqICsgNjQgLSBpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA2MzsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSBpOyBqIDwg
NjM7ICsraikgeworICAgICAgICAgICAgLy8gUmlnaHQgc2hpZnQgZnJvbSAoaiArIDY0KS10aCBi
aXQgdG8gKGkgKyA2NCktdGggYml0LgorICAgICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGlu
Zzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7IGogPSAiIDw8IGopOworICAgICAgICAg
ICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBpLCAwKSwKKyAg
ICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwgaiwgMCkgPj4g
KGogLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90
IHsgMSB9IDw8IGksIDApLAorICAgICAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCh1aW50NjRf
dCB7IDEgfSA8PCBqLCAwKSA+Pj0gKGogLSBpKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RF
U1QoV1RGX0ludDEyOCwgTnVtZXJpY0xpbWl0c1Rlc3QpCit7CisgICAgc3RhdGljX2Fzc2VydChz
dGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX3NwZWNpYWxpemVkLCAiIik7
CisgICAgc3RhdGljX2Fzc2VydChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46
OmlzX3NpZ25lZCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+Ojppc19pbnRlZ2VyLCAiIik7CisgICAgRVhQRUNUX0VRKHN0YXRpY19j
YXN0PGludD4oMTI3ICogc3RkOjpsb2cxMCgyKSksCisgICAgICAgIHN0ZDo6bnVtZXJpY19saW1p
dHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGlnaXRzMTApOworICAgIEVYUEVDVF9FUShXVEY6OkludDEy
OE1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Om1pbigpKTsKKyAg
ICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhNaW4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6Oklu
dDEyOEltcGw+Ojpsb3dlc3QoKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4TWF4KCksIHN0
ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6bWF4KCkpOworfQogCiB9IC8vIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="commit-queue"
          id="466532"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442116</attachid>
            <date>2021-10-21 21:08:36 -0700</date>
            <delta_ts>2021-10-23 00:29:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232129-20211021210835.patch</filename>
            <type>text/plain</type>
            <size>136254</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYzMmI5ODlkM2IzZmVlZDQ5ZTA1MjMx
Yzk4MjIyNDk0ZjU2NDcyMjEuLmMxZTVlNjM3YjIzZTc2Yzk1ZWNlYzhjN2M4NTU2M2ZkMmQ5MmFj
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTY3IEBACisyMDIxLTEwLTIxICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gUmVwbGFjZSBjdXJyZW50IExMVk0gZmxh
bmcncyBJbnQxMjggd2l0aCBhYnNlaWwtY3BwJ3MgSW50MTI4CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIxMjkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBmb3VuZCB0aGF0IGZsYW5nJ3Mgc2lnbmVk
IEludDEyOCBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdGVzdGVkLAorICAgICAgICBhbmQgaXQgaGFz
IHNldmVyYWwgaXNzdWVzIGFib3V0IHNpZ24gZXh0ZW5zaW9uIGFuZCBkaXZpc2lvbi4KKworICAg
ICAgICBJbnN0ZWFkLCB3ZSBpbXBvcnQgYWJzZWlsLWNwcFsxXSdzIGludDEyOCBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgYWJzZWlsLWNwcCBpcyBtb3JlIGJhdHRsZS10ZXN0ZWQsIGFuZCBhYnNl
aWwgaXMgYWxyZWFkeSB1c2VkCisgICAgICAgIGluIFdlYktpdCB0b28gKEFOR0xFIGFuZCBsaWJ3
ZWJydGMgdXNlIGFic2VpbC1jcHAgYXMgdGhlaXIgdXRpbGl0eQorICAgICAgICBsaWJyYXJ5KS4K
KworICAgICAgICBGb3IgQXBwbGUgcmVhZGVycywgYWJzZWlsLWNwcCBmb3IgV2ViS2l0IGlzIGFw
cHJvdmVkIGluIE9TUy0zNTEuCisKKyAgICAgICAgWzFdOiBodHRwczovL2dpdGh1Yi5jb20vYWJz
ZWlsL2Fic2VpbC1jcHAKKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvSW50MTI4LmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbCk6CisgICAg
ICAgIChXVEY6Om9wZXJhdG9yLyk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yJSk6CisgICAgICAg
IChXVEY6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KToKKyAgICAgICAgKiB3dGYvSW50MTI4Lmg6CisgICAgICAgIChXVEY6OlVJbnQxMjhNYXgpOgor
ICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluKToKKyAg
ICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omxvd2VzdCk6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXgpOgorICAg
ICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6ZXBzaWxvbik6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpyb3VuZF9lcnJv
cik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjppbmZp
bml0eSk6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpx
dWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBs
Pjo6c2lnbmFsaW5nX05hTik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjpkZW5vcm1fbWluKToKKyAgICAgICAgKFdURjo6SW50MTI4TWF4KToKKyAgICAg
ICAgKFdURjo6SW50MTI4TWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6bWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bG93ZXN0KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bWF4KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJ
bXBsPjo6ZXBzaWxvbik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4
SW1wbD46OnJvdW5kX2Vycm9yKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6aW5maW5pdHkpOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjpxdWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+OjpzaWduYWxpbmdfTmFOKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGVub3JtX21pbik6CisgICAgICAgIChXVEY6Ok1ha2VV
SW50MTI4KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcjw8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcis9
KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RG
OjpVSW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvci89KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yJT0pOgorICAg
ICAgICAoV1RGOjpVSW50MTI4TG93NjQpOgorICAgICAgICAoV1RGOjpVSW50MTI4SGlnaDY0KToK
KyAgICAgICAgKFdURjo6VUludDEyOEltcGw6OlVJbnQxMjhJbXBsKToKKyAgICAgICAgKFdURjo6
VUludDEyOEltcGw6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4
SW1wbDo6b3BlcmF0b3IgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBjaGFyIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6
Om9wZXJhdG9yIGNoYXIxNl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9w
ZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvciBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBs
OjpvcGVyYXRvciBpbnQgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0
b3IgdW5zaWduZWQgaW50IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBs
b25nIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGZsb2F0IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6b3Bl
cmF0b3I+KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciEpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcn4p
OgorICAgICAgICAoV1RGOjpvcGVyYXRvcnwpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciYpOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcl4pOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3Bl
cmF0b3J8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciY9KToKKyAgICAg
ICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yXj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXVEY6OmludDEyOF9p
bnRlcm5hbDo6QWRkUmVzdWx0KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTdWJz
dHJ1Y3RSZXN1bHQpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpV
SW50MTI4SW1wbDo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVy
YXRvci0tKToKKyAgICAgICAgKFdURjo6TWFrZUludDEyOCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKz0p
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yLz0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciU9KToKKyAgICAgICAg
KFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6
Om9wZXJhdG9yJj0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl49KToKKyAg
ICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I8PD0pOgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6Qml0
Q2FzdFRvU2lnbmVkKToKKyAgICAgICAgKFdURjo6SW50MTI4TG93NjQpOgorICAgICAgICAoV1RG
OjpJbnQxMjhIaWdoNjQpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKToK
KyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6Oklu
dDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMTZfdCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1w
bDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3Igc2hvcnQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJ
bXBsOjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIHVuc2lnbmVkIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciB1
bnNpZ25lZCBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3Ig
bG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0
b3IgZmxvYXQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBkb3Vi
bGUgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJs
ZSBjb25zdCk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6U2lnbmVkQWRkUmVzdWx0
KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTaWduZWRTdWJzdHJ1Y3RSZXN1bHQp
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3ItLSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yKyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9y
fiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yISBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIHN0ZDo6dWlu
dDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRv
ciBzdGQ6OmludDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBs
OjpoaWdoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6bG93IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3ImIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgfCAgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl4gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcjw8IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I+PiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yJSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPD0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6SW50MTI4SW1wbDo6b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OkludDEyOEltcGw6Om9wZXJhdG9yPj0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvcj4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpsZWFkaW5nWmVyb2VzIGNvbnN0KTogRGVsZXRlZC4KKwogMjAyMS0xMC0yMSAgQWRp
dHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBFbmFi
bGUgYWNjZW50LWNvbG9yIGJ5IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDNlYzAzOTFmN2M3MzdhM2FmMTYyNDczNmJiODUxMmE1MmQ3YjFlNjUu
LmU4MTAwMGRkMGViMWQxMzg4YjdiZmMwZWEyYmQyZGVjYzU3MDk0OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc5LDYgKzE3OSw3IEBACiAJCUUzMTQ5
QTM4MjI4QkI0MkMwMEJGQTZDNyAvKiBSZWZDb3VudGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTAyMENDNjFFQjAwQTAzRENE
IC8qIFJlZkNvdW50ZWRBcnJheS5jcHAgKi87IH07CiAJCUUzMTQ5QTM5MjI4QkI0MzUwMEJGQTZD
NyAvKiBWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5NUI2MzQyMENCNTNDMTAwNDc5NjM1IC8qIFZlY3Rvci5jcHAgKi87IH07CiAJCUUz
MTQ5QTNCMjI4QkRDQUMwMEJGQTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMTQ5QTNBMjI4QkRDQUIwMEJG
QTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCAqLzsgfTsKKwkJRTMzNjY3NEEyNzIyNTUxMTAw
MjU5MTIyIC8qIEludDEyOC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzM2Njc0OTI3MjI1NTA5MDAyNTkxMjIgLyogSW50MTI4LmNwcCAqLzsgfTsK
IAkJRTM3RTk2NTQyNzAyQUQwQjAwRTFDMzZBIC8qIEFwcHJveGltYXRlVGltZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzdFOTY1MjI3MDJBRDA3
MDBFMUMzNkEgLyogQXBwcm94aW1hdGVUaW1lLmNwcCAqLzsgfTsKIAkJRTM4ODg4NkYyMEM5MDk1
MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTM4ODg4NkQyMEM5MDk1MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wu
Y3BwICovOyB9OwogCQlFMzhDNDEyODFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzhDNDEyNjFFQjRF
MDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi87IH07CkBAIC03NTQsNiArNzU1LDcgQEAKIAkJ
RTMyMDBBQjQxRTlBNTM2RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzMjU2MTEyMjYxMUI1QjYwMEE3MkNDNSAvKiBSb2Jpbkhvb2RI
YXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJvYmluSG9vZEhhc2hTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTMyQTIwNzMyM0M1OTAyRDAwMzRBMDkyIC8qIE5ha2VkUmVmLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ha2VkUmVmLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW50MTI4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTMzOUMxNjMyNDRCNEU4NzAwMzU5REE5IC8qIERhdGFSZWYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzNENUY4NzFGQkVENjY3MDBCRjYyNUUgLyogUmVjdXJzYWJsZUxhbWJkYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1cnNhYmxlTGFtYmRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzNENEMEQwMjI4MTBBMDIwMDIwRDI5OSAvKiBQYWNrZWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTI1LDYgKzExMjcsNyBAQAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxp
bmVBU00uaCAqLywKIAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmgg
Ki8sCiAJCQkJNTE4MkMyMkMxRjJCQzdFNjAwNTlCQTdDIC8qIEluc3RhbmNlQ291bnRlZC5oICov
LAorCQkJCUUzMzY2NzQ5MjcyMjU1MDkwMDI1OTEyMiAvKiBJbnQxMjguY3BwICovLAogCQkJCUY2
RDY3RDMyMjZGOTAxNDIwMDZFMDM0OSAvKiBJbnQxMjguaCAqLywKIAkJCQkzM0ZENDgxMTI2NUNC
MzgwMDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLywKIAkJCQkwRjdFQjg1QjFGQThG
RjQxMDBGMUFCQ0IgLyogSXNvTWFsbG9jLmggKi8sCkBAIC0xNzczLDYgKzE3NzYsNyBAQAogCQkJ
CUE4QTQ3M0Q4MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTNCNUI0NEUyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51bWJlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFM0JFMDlBNzI0QTU4NTREMDA5REYyQjQgLyogSUNVSGVscGVycy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlFMzM2Njc0QTI3MjI1NTExMDAyNTkxMjIgLyogSW50MTI4LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdBMDUwOTNGMUZCOURDQzUwMEIzM0ZCOCAvKiBKU09OVmFsdWVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzQTMyQkM0MUZDODMwRTIwMDdEN0U3NiAvKiBKU1Zh
bHVlTWFsbG9jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQkNGQzQwMUY2MUQxMzAwMEM5MjIy
QyAvKiBMYW5ndWFnZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NGUzOGFhYTkzMGQ0MTA3MjdlZDM3NDliMmM3NDEyMjM4ZDZhY2FiNS4uMWY1Yzg0ZGJjNjE3MGUy
ZDA3NzFhZTBjZDljYzNjNjIzODVhOTg0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTQyNSw2
ICs0MjUsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBHcmVnb3JpYW5EYXRlVGltZS5jcHAKICAg
ICBIYXNoVGFibGUuY3BwCiAgICAgSGV4TnVtYmVyLmNwcAorICAgIEludDEyOC5jcHAKICAgICBK
U09OVmFsdWVzLmNwcAogICAgIEpTVmFsdWVNYWxsb2MuY3BwCiAgICAgTGFuZ3VhZ2UuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbnQxMjguY3BwIGIvU291cmNlL1dURi93dGYvSW50
MTI4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNDI5N2I5NTAxNTcxYTFjMTZhNjcxYWFjNzk2MjljODBmYWM2
OTU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvSW50MTI4LmNwcApAQCAtMCww
ICsxLDM3MSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIEFic2VpbCBBdXRob3JzLgorLy8KKy8v
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisvLworLy8gICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvSW50MTI4Lmg+CisKKyNpbmNsdWRlIDxz
dGRkZWYuaD4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGlvbWFuaXA+CisjaW5jbHVk
ZSA8b3N0cmVhbT4gIC8vIE5PTElOVChyZWFkYWJpbGl0eS9zdHJlYW1zKQorI2luY2x1ZGUgPHNz
dHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2Ugewor
CisvLyBSZXR1cm5zIHRoZSAwLWJhc2VkIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHNldCBiaXQgKGku
ZS4sIG1vc3Qgc2lnbmlmaWNhbnQgYml0KQorLy8gaW4gdGhlIGdpdmVuIFVJbnQxMjhJbXBsLiBU
aGUgYXJndW1lbnQgaXMgbm90IDAuCisvLworLy8gRm9yIGV4YW1wbGU6CisvLyAgIEdpdmVuOiA1
IChkZWNpbWFsKSA9PSAxMDEgKGJpbmFyeSkKKy8vICAgUmV0dXJuczogMgorc3RhdGljIEFMV0FZ
U19JTkxJTkUgaW50IEZsczEyOChVSW50MTI4SW1wbCBuKSB7CisgIGlmICh1aW50NjRfdCBoaSA9
IFVJbnQxMjhIaWdoNjQobikpIHsKKyAgICBBU1NFUlQoaGkgIT0gMCk7CisgICAgcmV0dXJuIDEy
NyAtIGNseihoaSk7CisgIH0KKyAgY29uc3QgdWludDY0X3QgbG93ID0gVUludDEyOExvdzY0KG4p
OworICBBU1NFUlQobG93ICE9IDApOworICByZXR1cm4gNjMgLSBjbHoobG93KTsKK30KKworLy8g
TG9uZyBkaXZpc2lvbi9tb2R1bG8gZm9yIFVJbnQxMjhJbXBsIGltcGxlbWVudGVkIHVzaW5nIHRo
ZSBzaGlmdC1zdWJ0cmFjdAorLy8gZGl2aXNpb24gYWxnb3JpdGhtIGFkYXB0ZWQgZnJvbToKKy8v
IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUzODYzNzcvZGl2aXNpb24td2l0
aG91dC11c2luZworc3RhdGljIGlubGluZSB2b2lkIERpdk1vZEltcGwoVUludDEyOEltcGwgZGl2
aWRlbmQsIFVJbnQxMjhJbXBsIGRpdmlzb3IsIFVJbnQxMjhJbXBsKiBxdW90aWVudF9yZXQsIFVJ
bnQxMjhJbXBsKiByZW1haW5kZXJfcmV0KSB7CisgIGFzc2VydChkaXZpc29yICE9IDApOworCisg
IGlmIChkaXZpc29yID4gZGl2aWRlbmQpIHsKKyAgICAqcXVvdGllbnRfcmV0ID0gMDsKKyAgICAq
cmVtYWluZGVyX3JldCA9IGRpdmlkZW5kOworICAgIHJldHVybjsKKyAgfQorCisgIGlmIChkaXZp
c29yID09IGRpdmlkZW5kKSB7CisgICAgKnF1b3RpZW50X3JldCA9IDE7CisgICAgKnJlbWFpbmRl
cl9yZXQgPSAwOworICAgIHJldHVybjsKKyAgfQorCisgIFVJbnQxMjhJbXBsIGRlbm9taW5hdG9y
ID0gZGl2aXNvcjsKKyAgVUludDEyOEltcGwgcXVvdGllbnQgPSAwOworCisgIC8vIExlZnQgYWxp
Z25zIHRoZSBNU0Igb2YgdGhlIGRlbm9taW5hdG9yIGFuZCB0aGUgZGl2aWRlbmQuCisgIGNvbnN0
IGludCBzaGlmdCA9IEZsczEyOChkaXZpZGVuZCkgLSBGbHMxMjgoZGVub21pbmF0b3IpOworICBk
ZW5vbWluYXRvciA8PD0gc2hpZnQ7CisKKyAgLy8gVXNlcyBzaGlmdC1zdWJ0cmFjdCBhbGdvcml0
aG0gdG8gZGl2aWRlIGRpdmlkZW5kIGJ5IGRlbm9taW5hdG9yLiBUaGUKKyAgLy8gcmVtYWluZGVy
IHdpbGwgYmUgbGVmdCBpbiBkaXZpZGVuZC4KKyAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc2hpZnQ7
ICsraSkgeworICAgIHF1b3RpZW50IDw8PSAxOworICAgIGlmIChkaXZpZGVuZCA+PSBkZW5vbWlu
YXRvcikgeworICAgICAgZGl2aWRlbmQgLT0gZGVub21pbmF0b3I7CisgICAgICBxdW90aWVudCB8
PSAxOworICAgIH0KKyAgICBkZW5vbWluYXRvciA+Pj0gMTsKKyAgfQorCisgICpxdW90aWVudF9y
ZXQgPSBxdW90aWVudDsKKyAgKnJlbWFpbmRlcl9yZXQgPSBkaXZpZGVuZDsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgVUludDEyOEltcGwgTWFrZVVJbnQxMjhGcm9tRmxvYXQo
VCB2KSB7CisgIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUs
ICIiKTsKKworICAvLyBSb3VuZGluZyBiZWhhdmlvciBpcyB0b3dhcmRzIHplcm8sIHNhbWUgYXMg
Zm9yIGJ1aWx0LWluIHR5cGVzLgorCisgIC8vIFVuZGVmaW5lZCBiZWhhdmlvciBpZiB2IGlzIE5h
TiBvciBjYW5ub3QgZml0IGludG8gVUludDEyOEltcGwuCisgIGFzc2VydChzdGQ6OmlzZmluaXRl
KHYpICYmIHYgPiAtMSAmJgorICAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heF9l
eHBvbmVudCA8PSAxMjggfHwKKyAgICAgICAgICB2IDwgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxU
PigxKSwgMTI4KSkpOworCisgIGlmICh2ID49IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VD4oMSks
IDY0KSkgeworICAgIHVpbnQ2NF90IGhpID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bGRl
eHAodiwgLTY0KSk7CisgICAgdWludDY0X3QgbG8gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odiAt
IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VD4oaGkpLCA2NCkpOworICAgIHJldHVybiBNYWtlVUlu
dDEyOChoaSwgbG8pOworICB9CisKKyAgcmV0dXJuIE1ha2VVSW50MTI4KDAsIHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih2KSk7Cit9CisKKyNpZiBDT01QSUxFUihDTEFORykgJiYgIWRlZmluZWQoX19T
U0UzX18pCisvLyBXb3JrYXJvdW5kIGZvciBjbGFuZyBidWc6IGh0dHBzOi8vYnVncy5sbHZtLm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzgyODkKKy8vIENhc3RpbmcgZnJvbSBsb25nIGRvdWJsZSB0byB1
aW50NjRfdCBpcyBtaXNjb21waWxlZCBhbmQgZHJvcHMgYml0cy4KKy8vIEl0IGlzIG1vcmUgd29y
aywgc28gb25seSB1c2Ugd2hlbiB3ZSBuZWVkIHRoZSB3b3JrYXJvdW5kLgorc3RhdGljIFVJbnQx
MjhJbXBsIE1ha2VVSW50MTI4RnJvbUZsb2F0KGxvbmcgZG91YmxlIHYpIHsKKyAgLy8gR28gNTAg
Yml0cyBhdCBhIHRpbWUsIHRoYXQgZml0cyBpbiBhIGRvdWJsZQorICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZGlnaXRzID49IDUwLCAiIik7CisgIHN0YXRpY19h
c3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46OmRpZ2l0cyA8PSAxNTAsICIi
KTsKKyAgLy8gVW5kZWZpbmVkIGJlaGF2aW9yIGlmIHYgaXMgbm90IGZpbml0ZSBvciBjYW5ub3Qg
Zml0IGludG8gVUludDEyOEltcGwuCisgIGFzc2VydChzdGQ6OmlzZmluaXRlKHYpICYmIHYgPiAt
MSAmJiB2IDwgc3RkOjpsZGV4cCgxLjBMLCAxMjgpKTsKKworICB2ID0gc3RkOjpsZGV4cCh2LCAt
MTAwKTsKKyAgdWludDY0X3QgdzAgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6OnRydW5jKHYpKSk7CisgIHYgPSBzdGQ6OmxkZXhwKHYgLSBzdGF0aWNfY2Fz
dDxkb3VibGU+KHcwKSwgNTApOworICB1aW50NjRfdCB3MSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6dHJ1bmModikpKTsKKyAgdiA9IHN0ZDo6bGRleHAo
diAtIHN0YXRpY19jYXN0PGRvdWJsZT4odzEpLCA1MCk7CisgIHVpbnQ2NF90IHcyID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjp0cnVuYyh2KSkpOworICBy
ZXR1cm4gKHN0YXRpY19jYXN0PFVJbnQxMjhJbXBsPih3MCkgPDwgMTAwKSB8IChzdGF0aWNfY2Fz
dDxVSW50MTI4SW1wbD4odzEpIDw8IDUwKSB8CisgICAgICAgICBzdGF0aWNfY2FzdDxVSW50MTI4
SW1wbD4odzIpOworfQorI2VuZGlmICAvLyBDT01QSUxFUihDTEFORykgJiYgIV9fU1NFM19fCit9
ICAvLyBuYW1lc3BhY2UKKworVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKGZsb2F0IHYpIDogVUlu
dDEyOEltcGwoTWFrZVVJbnQxMjhGcm9tRmxvYXQodikpIHt9CitVSW50MTI4SW1wbDo6VUludDEy
OEltcGwoZG91YmxlIHYpIDogVUludDEyOEltcGwoTWFrZVVJbnQxMjhGcm9tRmxvYXQodikpIHt9
CitVSW50MTI4SW1wbDo6VUludDEyOEltcGwobG9uZyBkb3VibGUgdikgOiBVSW50MTI4SW1wbChN
YWtlVUludDEyOEZyb21GbG9hdCh2KSkge30KKworVUludDEyOEltcGwgb3BlcmF0b3IvKFVJbnQx
MjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0g
MDsKKyAgVUludDEyOEltcGwgcmVtYWluZGVyID0gMDsKKyAgRGl2TW9kSW1wbChsaHMsIHJocywg
JnF1b3RpZW50LCAmcmVtYWluZGVyKTsKKyAgcmV0dXJuIHF1b3RpZW50OworfQorCitVSW50MTI4
SW1wbCBvcGVyYXRvciUoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpIHsKKyAgVUlu
dDEyOEltcGwgcXVvdGllbnQgPSAwOworICBVSW50MTI4SW1wbCByZW1haW5kZXIgPSAwOworICBE
aXZNb2RJbXBsKGxocywgcmhzLCAmcXVvdGllbnQsICZyZW1haW5kZXIpOworICByZXR1cm4gcmVt
YWluZGVyOworfQorCituYW1lc3BhY2UgeworCitzdGF0aWMgc3RkOjpzdHJpbmcgVUludDEyOFRv
Rm9ybWF0dGVkU3RyaW5nKFVJbnQxMjhJbXBsIHYsIHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzIGZs
YWdzKSB7CisgIC8vIFNlbGVjdCBhIGRpdmlzb3Igd2hpY2ggaXMgdGhlIGxhcmdlc3QgcG93ZXIg
b2YgdGhlIGJhc2UgPCAyXjY0LgorICBVSW50MTI4SW1wbCBkaXY7CisgIGludCBkaXZfYmFzZV9s
b2c7CisgIHN3aXRjaCAoZmxhZ3MgJiBzdGQ6Omlvczo6YmFzZWZpZWxkKSB7CisgICAgY2FzZSBz
dGQ6Omlvczo6aGV4OgorICAgICAgZGl2ID0gMHgxMDAwMDAwMDAwMDAwMDAwOyAgLy8gMTZeMTUK
KyAgICAgIGRpdl9iYXNlX2xvZyA9IDE1OworICAgICAgYnJlYWs7CisgICAgY2FzZSBzdGQ6Omlv
czo6b2N0OgorICAgICAgZGl2ID0gMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDA7ICAvLyA4XjIxCisg
ICAgICBkaXZfYmFzZV9sb2cgPSAyMTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6ICAvLyBz
dGQ6Omlvczo6ZGVjCisgICAgICBkaXYgPSAxMDAwMDAwMDAwMDAwMDAwMDAwMHU7ICAvLyAxMF4x
OQorICAgICAgZGl2X2Jhc2VfbG9nID0gMTk7CisgICAgICBicmVhazsKKyAgfQorCisgIC8vIE5v
dyBwaWVjZSB0b2dldGhlciB0aGUgVUludDEyOEltcGwgcmVwcmVzZW50YXRpb24gZnJvbSB0aHJl
ZSBjaHVua3Mgb2YgdGhlCisgIC8vIG9yaWdpbmFsIHZhbHVlLCBlYWNoIGxlc3MgdGhhbiAiZGl2
IiBhbmQgdGhlcmVmb3JlIHJlcHJlc2VudGFibGUgYXMgYQorICAvLyB1aW50NjRfdC4KKyAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIG9zOworICBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyBjb3B5X21hc2sg
PQorICAgICAgc3RkOjppb3M6OmJhc2VmaWVsZCB8IHN0ZDo6aW9zOjpzaG93YmFzZSB8IHN0ZDo6
aW9zOjp1cHBlcmNhc2U7CisgIG9zLnNldGYoZmxhZ3MgJiBjb3B5X21hc2ssIGNvcHlfbWFzayk7
CisgIFVJbnQxMjhJbXBsIGhpZ2ggPSB2OworICBVSW50MTI4SW1wbCBsb3c7CisgIERpdk1vZElt
cGwoaGlnaCwgZGl2LCAmaGlnaCwgJmxvdyk7CisgIFVJbnQxMjhJbXBsIG1pZDsKKyAgRGl2TW9k
SW1wbChoaWdoLCBkaXYsICZoaWdoLCAmbWlkKTsKKyAgaWYgKFVJbnQxMjhMb3c2NChoaWdoKSAh
PSAwKSB7CisgICAgb3MgPDwgVUludDEyOExvdzY0KGhpZ2gpOworICAgIG9zIDw8IHN0ZDo6bm9z
aG93YmFzZSA8PCBzdGQ6OnNldGZpbGwoJzAnKSA8PCBzdGQ6OnNldHcoZGl2X2Jhc2VfbG9nKTsK
KyAgICBvcyA8PCBVSW50MTI4TG93NjQobWlkKTsKKyAgICBvcyA8PCBzdGQ6OnNldHcoZGl2X2Jh
c2VfbG9nKTsKKyAgfSBlbHNlIGlmIChVSW50MTI4TG93NjQobWlkKSAhPSAwKSB7CisgICAgb3Mg
PDwgVUludDEyOExvdzY0KG1pZCk7CisgICAgb3MgPDwgc3RkOjpub3Nob3diYXNlIDw8IHN0ZDo6
c2V0ZmlsbCgnMCcpIDw8IHN0ZDo6c2V0dyhkaXZfYmFzZV9sb2cpOworICB9CisgIG9zIDw8IFVJ
bnQxMjhMb3c2NChsb3cpOworICByZXR1cm4gb3Muc3RyKCk7Cit9CisKK30gIC8vIG5hbWVzcGFj
ZQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgVUludDEyOElt
cGwgdikgeworICBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyBmbGFncyA9IG9zLmZsYWdzKCk7Cisg
IHN0ZDo6c3RyaW5nIHJlcCA9IFVJbnQxMjhUb0Zvcm1hdHRlZFN0cmluZyh2LCBmbGFncyk7CisK
KyAgLy8gQWRkIHRoZSByZXF1aXNpdGUgcGFkZGluZy4KKyAgc3RkOjpzdHJlYW1zaXplIHdpZHRo
ID0gb3Mud2lkdGgoMCk7CisgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHdpZHRoKSA+IHJlcC5z
aXplKCkpIHsKKyAgICBzdGQ6Omlvczo6Zm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbGFncyAmIHN0
ZDo6aW9zOjphZGp1c3RmaWVsZDsKKyAgICBpZiAoYWRqdXN0ZmllbGQgPT0gc3RkOjppb3M6Omxl
ZnQpIHsKKyAgICAgIHJlcC5hcHBlbmQod2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOwor
ICAgIH0gZWxzZSBpZiAoYWRqdXN0ZmllbGQgPT0gc3RkOjppb3M6OmludGVybmFsICYmCisgICAg
ICAgICAgICAgICAoZmxhZ3MgJiBzdGQ6Omlvczo6c2hvd2Jhc2UpICYmCisgICAgICAgICAgICAg
ICAoZmxhZ3MgJiBzdGQ6Omlvczo6YmFzZWZpZWxkKSA9PSBzdGQ6Omlvczo6aGV4ICYmIHYgIT0g
MCkgeworICAgICAgcmVwLmluc2VydCgyLCB3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcC5pbnNlcnQoMCwgd2lkdGggLSByZXAuc2l6ZSgpLCBv
cy5maWxsKCkpOworICAgIH0KKyAgfQorCisgIHJldHVybiBvcyA8PCByZXA7Cit9CisKK25hbWVz
cGFjZSB7CisKK3N0YXRpYyBVSW50MTI4SW1wbCBVbnNpZ25lZEFic29sdXRlVmFsdWUoSW50MTI4
SW1wbCB2KSB7CisgIC8vIENhc3QgdG8gVUludDEyOEltcGwgYmVmb3JlIHBvc3NpYmx5IG5lZ2F0
aW5nIGJlY2F1c2UgLUludDEyOE1pbigpIGlzIHVuZGVmaW5lZC4KKyAgcmV0dXJuIEludDEyOEhp
Z2g2NCh2KSA8IDAgPyAtVUludDEyOEltcGwodikgOiBVSW50MTI4SW1wbCh2KTsKK30KKworfSAg
Ly8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3Rh
dGljIEludDEyOEltcGwgTWFrZUludDEyOEZyb21GbG9hdChUIHYpIHsKKyAgLy8gQ29udmVyc2lv
biB3aGVuIHYgaXMgTmFOIG9yIGNhbm5vdCBmaXQgaW50byBJbnQxMjhJbXBsIHdvdWxkIGJlIHVu
ZGVmaW5lZAorICAvLyBiZWhhdmlvciBpZiB1c2luZyBhbiBpbnRyaW5zaWMgMTI4LWJpdCBpbnRl
Z2VyLgorICBhc3NlcnQoc3RkOjppc2Zpbml0ZSh2KSAmJiAoc3RkOjpudW1lcmljX2xpbWl0czxU
Pjo6bWF4X2V4cG9uZW50IDw9IDEyNyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHYgPj0gLXN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VD4oMSksIDEyNykgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2IDwgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxUPigxKSwgMTI3
KSkpKTsKKworICAvLyBXZSBtdXN0IGNvbnZlcnQgdGhlIGFic29sdXRlIHZhbHVlIGFuZCB0aGVu
IG5lZ2F0ZSBhcyBuZWVkZWQsIGJlY2F1c2UKKyAgLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXMgYXJl
IHR5cGljYWxseSBzaWduLW1hZ25pdHVkZS4gT3RoZXJ3aXNlLCB0aGUKKyAgLy8gZGlmZmVyZW5j
ZSBiZXR3ZWVuIHRoZSBoaWdoIGFuZCBsb3cgNjQgYml0cyB3aGVuIGludGVycHJldGVkIGFzIHR3
bydzCisgIC8vIGNvbXBsZW1lbnQgb3ZlcndoZWxtcyB0aGUgcHJlY2lzaW9uIG9mIHRoZSBtYW50
aXNzYS4KKyAgVUludDEyOEltcGwgcmVzdWx0ID0gdiA8IDAgPyAtTWFrZVVJbnQxMjhGcm9tRmxv
YXQoLXYpIDogTWFrZVVJbnQxMjhGcm9tRmxvYXQodik7CisgIHJldHVybiBNYWtlSW50MTI4KGlu
dDEyOF9pbnRlcm5hbDo6Qml0Q2FzdFRvU2lnbmVkKFVJbnQxMjhIaWdoNjQocmVzdWx0KSksCisg
ICAgICAgICAgICAgICAgICAgIFVJbnQxMjhMb3c2NChyZXN1bHQpKTsKK30KKworfSAgLy8gbmFt
ZXNwYWNlCisKK0ludDEyOEltcGw6OkludDEyOEltcGwoZmxvYXQgdikgOiBJbnQxMjhJbXBsKE1h
a2VJbnQxMjhGcm9tRmxvYXQodikpIHt9CitJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGRvdWJsZSB2
KSA6IEludDEyOEltcGwoTWFrZUludDEyOEZyb21GbG9hdCh2KSkge30KK0ludDEyOEltcGw6Oklu
dDEyOEltcGwobG9uZyBkb3VibGUgdikgOiBJbnQxMjhJbXBsKE1ha2VJbnQxMjhGcm9tRmxvYXQo
dikpIHt9CisKK0ludDEyOEltcGwgb3BlcmF0b3IvKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBs
IHJocykgeworICBhc3NlcnQobGhzICE9IEludDEyOE1pbigpIHx8IHJocyAhPSAtMSk7ICAvLyBV
QiBvbiB0d28ncyBjb21wbGVtZW50LgorCisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKyAg
VUludDEyOEltcGwgcmVtYWluZGVyID0gMDsKKyAgRGl2TW9kSW1wbChVbnNpZ25lZEFic29sdXRl
VmFsdWUobGhzKSwgVW5zaWduZWRBYnNvbHV0ZVZhbHVlKHJocyksCisgICAgICAgICAgICAgJnF1
b3RpZW50LCAmcmVtYWluZGVyKTsKKyAgaWYgKChJbnQxMjhIaWdoNjQobGhzKSA8IDApICE9IChJ
bnQxMjhIaWdoNjQocmhzKSA8IDApKSBxdW90aWVudCA9IC1xdW90aWVudDsKKyAgcmV0dXJuIE1h
a2VJbnQxMjgoaW50MTI4X2ludGVybmFsOjpCaXRDYXN0VG9TaWduZWQoVUludDEyOEhpZ2g2NChx
dW90aWVudCkpLAorICAgICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQocXVvdGllbnQpKTsK
K30KKworSW50MTI4SW1wbCBvcGVyYXRvciUoSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhz
KSB7CisgIGFzc2VydChsaHMgIT0gSW50MTI4TWluKCkgfHwgcmhzICE9IC0xKTsgIC8vIFVCIG9u
IHR3bydzIGNvbXBsZW1lbnQuCisKKyAgVUludDEyOEltcGwgcXVvdGllbnQgPSAwOworICBVSW50
MTI4SW1wbCByZW1haW5kZXIgPSAwOworICBEaXZNb2RJbXBsKFVuc2lnbmVkQWJzb2x1dGVWYWx1
ZShsaHMpLCBVbnNpZ25lZEFic29sdXRlVmFsdWUocmhzKSwKKyAgICAgICAgICAgICAmcXVvdGll
bnQsICZyZW1haW5kZXIpOworICBpZiAoSW50MTI4SGlnaDY0KGxocykgPCAwKSByZW1haW5kZXIg
PSAtcmVtYWluZGVyOworICByZXR1cm4gTWFrZUludDEyOChpbnQxMjhfaW50ZXJuYWw6OkJpdENh
c3RUb1NpZ25lZChVSW50MTI4SGlnaDY0KHJlbWFpbmRlcikpLAorICAgICAgICAgICAgICAgICAg
ICBVSW50MTI4TG93NjQocmVtYWluZGVyKSk7Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8
PChzdGQ6Om9zdHJlYW0mIG9zLCBJbnQxMjhJbXBsIHYpIHsKKyAgc3RkOjppb3NfYmFzZTo6Zm10
ZmxhZ3MgZmxhZ3MgPSBvcy5mbGFncygpOworICBzdGQ6OnN0cmluZyByZXA7CisKKyAgLy8gQWRk
IHRoZSBzaWduIGlmIG5lZWRlZC4KKyAgYm9vbCBwcmludF9hc19kZWNpbWFsID0KKyAgICAgIChm
bGFncyAmIHN0ZDo6aW9zOjpiYXNlZmllbGQpID09IHN0ZDo6aW9zOjpkZWMgfHwKKyAgICAgIChm
bGFncyAmIHN0ZDo6aW9zOjpiYXNlZmllbGQpID09IHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzKCk7
CisgIGlmIChwcmludF9hc19kZWNpbWFsKSB7CisgICAgaWYgKEludDEyOEhpZ2g2NCh2KSA8IDAp
IHsKKyAgICAgIHJlcCA9ICItIjsKKyAgICB9IGVsc2UgaWYgKGZsYWdzICYgc3RkOjppb3M6OnNo
b3dwb3MpIHsKKyAgICAgIHJlcCA9ICIrIjsKKyAgICB9CisgIH0KKworICByZXAuYXBwZW5kKFVJ
bnQxMjhUb0Zvcm1hdHRlZFN0cmluZygKKyAgICAgIHByaW50X2FzX2RlY2ltYWwgPyBVbnNpZ25l
ZEFic29sdXRlVmFsdWUodikgOiBVSW50MTI4SW1wbCh2KSwgb3MuZmxhZ3MoKSkpOworCisgIC8v
IEFkZCB0aGUgcmVxdWlzaXRlIHBhZGRpbmcuCisgIHN0ZDo6c3RyZWFtc2l6ZSB3aWR0aCA9IG9z
LndpZHRoKDApOworICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90Pih3aWR0aCkgPiByZXAuc2l6ZSgp
KSB7CisgICAgc3dpdGNoIChmbGFncyAmIHN0ZDo6aW9zOjphZGp1c3RmaWVsZCkgeworICAgICAg
Y2FzZSBzdGQ6Omlvczo6bGVmdDoKKyAgICAgICAgcmVwLmFwcGVuZCh3aWR0aCAtIHJlcC5zaXpl
KCksIG9zLmZpbGwoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBzdGQ6Omlvczo6aW50
ZXJuYWw6CisgICAgICAgIGlmIChwcmludF9hc19kZWNpbWFsICYmIChyZXBbMF0gPT0gJysnIHx8
IHJlcFswXSA9PSAnLScpKSB7CisgICAgICAgICAgcmVwLmluc2VydCgxLCB3aWR0aCAtIHJlcC5z
aXplKCksIG9zLmZpbGwoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoKGZsYWdzICYgc3RkOjppb3M6
OmJhc2VmaWVsZCkgPT0gc3RkOjppb3M6OmhleCAmJgorICAgICAgICAgICAgICAgICAgIChmbGFn
cyAmIHN0ZDo6aW9zOjpzaG93YmFzZSkgJiYgdiAhPSAwKSB7CisgICAgICAgICAgcmVwLmluc2Vy
dCgyLCB3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgcmVwLmluc2VydCgwLCB3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAgLy8gc3RkOjppb3M6OnJp
Z2h0CisgICAgICAgIHJlcC5pbnNlcnQoMCwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gb3MgPDwgcmVwOworfQor
Cit9ICAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVzcGFjZSBzdGQgeworY29uc3RleHByIGJvb2wg
bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX3NwZWNpYWxpemVkOworY29uc3Rl
eHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX3NpZ25lZDsKK2Nv
bnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19pbnRlZ2Vy
OworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX2V4
YWN0OworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omhh
c19pbmZpbml0eTsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOElt
cGw+OjpoYXNfcXVpZXRfTmFOOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpV
SW50MTI4SW1wbD46Omhhc19zaWduYWxpbmdfTmFOOworY29uc3RleHByIGZsb2F0X2Rlbm9ybV9z
dHlsZSBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6aGFzX2Rlbm9ybTsKK2NvbnN0
ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjpoYXNfZGVub3JtX2xv
c3M7Citjb25zdGV4cHIgZmxvYXRfcm91bmRfc3R5bGUgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50
MTI4SW1wbD46OnJvdW5kX3N0eWxlOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RG
OjpVSW50MTI4SW1wbD46OmlzX2llYzU1OTsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRz
PFdURjo6VUludDEyOEltcGw+Ojppc19ib3VuZGVkOworY29uc3RleHByIGJvb2wgbnVtZXJpY19s
aW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX21vZHVsbzsKK2NvbnN0ZXhwciBpbnQgbnVtZXJp
Y19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmRpZ2l0czsKK2NvbnN0ZXhwciBpbnQgbnVtZXJp
Y19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmRpZ2l0czEwOworY29uc3RleHByIGludCBudW1l
cmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWF4X2RpZ2l0czEwOworY29uc3RleHByIGlu
dCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6cmFkaXg7Citjb25zdGV4cHIgaW50
IG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptaW5fZXhwb25lbnQ7Citjb25zdGV4
cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptaW5fZXhwb25lbnQxMDsK
K2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heF9leHBv
bmVudDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1h
eF9leHBvbmVudDEwOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4
SW1wbD46OnRyYXBzOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4
SW1wbD46OnRpbnluZXNzX2JlZm9yZTsKKworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8
V1RGOjpJbnQxMjhJbXBsPjo6aXNfc3BlY2lhbGl6ZWQ7Citjb25zdGV4cHIgYm9vbCBudW1lcmlj
X2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojppc19zaWduZWQ7Citjb25zdGV4cHIgYm9vbCBudW1l
cmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojppc19pbnRlZ2VyOworY29uc3RleHByIGJvb2wg
bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfZXhhY3Q7Citjb25zdGV4cHIgYm9v
bCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjpoYXNfaW5maW5pdHk7Citjb25zdGV4
cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjpoYXNfcXVpZXRfTmFOOwor
Y29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aGFzX3NpZ25h
bGluZ19OYU47Citjb25zdGV4cHIgZmxvYXRfZGVub3JtX3N0eWxlIG51bWVyaWNfbGltaXRzPFdU
Rjo6SW50MTI4SW1wbD46Omhhc19kZW5vcm07Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0
czxXVEY6OkludDEyOEltcGw+OjpoYXNfZGVub3JtX2xvc3M7Citjb25zdGV4cHIgZmxvYXRfcm91
bmRfc3R5bGUgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6cm91bmRfc3R5bGU7Citj
b25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojppc19pZWM1NTk7
Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojppc19ib3Vu
ZGVkOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNf
bW9kdWxvOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojpk
aWdpdHM7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmRp
Z2l0czEwOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojpt
YXhfZGlnaXRzMTA7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1w
bD46OnJhZGl4OworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+
OjptaW5fZXhwb25lbnQ7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4
SW1wbD46Om1pbl9leHBvbmVudDEwOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjptYXhfZXhwb25lbnQ7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRz
PFdURjo6SW50MTI4SW1wbD46Om1heF9leHBvbmVudDEwOworY29uc3RleHByIGJvb2wgbnVtZXJp
Y19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6dHJhcHM7Citjb25zdGV4cHIgYm9vbCBudW1lcmlj
X2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojp0aW55bmVzc19iZWZvcmU7Cit9ICAvLyBuYW1lc3Bh
Y2Ugc3RkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbnQxMjguaCBiL1NvdXJjZS9XVEYv
d3RmL0ludDEyOC5oCmluZGV4IDNiZGIwYTQ1ZWY1YzQ5YWZlZTJiOWRkZmQzMGE4YWMyNTIwZDYz
ZmEuLjc5M2NkY2M2M2QxNjY0NThjZGZjOWYzYzAyZTgxODgxYWY0YTFiYzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0ludDEyOC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ludDEyOC5oCkBA
IC0xLDI5MSArMSwxMjg5IEBACi0vLyBUYWtlbiBmcm9tIExMVk0gUHJvamVjdCwgdW5kZXIgdGhl
IEFwYWNoZSBMaWNlbnNlIHYyLjAgd2l0aCBMTFZNIEV4Y2VwdGlvbnMuCi0vLyBTZWUgU291cmNl
L1dURi9MSUNFTlNFLUxMVk0udHh0IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLgotLy8gU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgV0lUSCBMTFZNLWV4Y2VwdGlvbgorLy8KKy8v
IENvcHlyaWdodCAyMDE3IFRoZSBBYnNlaWwgQXV0aG9ycy4KKy8vCisvLyBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8v
ICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8v
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8KKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBGaWxlOiBJbnQxMjhJbXBsLmgKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLworLy8gVGhpcyBoZWFkZXIgZmlsZSBkZWZpbmVzIDEyOC1iaXQgaW50ZWdlciB0eXBlcywg
YHVpbnQxMjhgIGFuZCBgSW50MTI4SW1wbGAuCisvLworLy8gVE9ETyhhYnNsLXRlYW0pOiBUaGlz
IG1vZHVsZSBpcyBpbmNvbnNpc3RlbnQgYXMgbWFueSBpbmxpbmUgYHVpbnQxMjhgIG1ldGhvZHMK
Ky8vIGFyZSBkZWZpbmVkIGluIHRoaXMgZmlsZSwgd2hpbGUgbWFueSBpbmxpbmUgYEludDEyOElt
cGxgIG1ldGhvZHMgYXJlIGRlZmluZWQgaW4KKy8vIHRoZSBgaW50MTI4XypfaW50cmluc2ljLmlu
Y2AgZmlsZXMuCisvLwogCi0vLyBQb3J0YWJsZSAxMjgtYml0IHVuc2lnbmVkIGludGVnZXIgYXJp
dGhtZXRpYyBmb3IgdXNlIGluIGltcG92ZXJpc2hlZAotLy8gQysrIGltcGxlbWVudGF0aW9ucyBs
YWNraW5nIF9fdWludDEyOF90LgotCi0vLyBCYXNlZCBvbjoKLS8vIGh0dHBzOi8vZ2l0aHViLmNv
bS9sbHZtL2xsdm0tcHJvamVjdC9ibG9iL2Q0ODBmOTY4L2ZsYW5nL2luY2x1ZGUvZmxhbmcvQ29t
bW9uL3VpbnQxMjguaAorLy8gSW50MTI4LmggYW5kIEludDEyOC5jcHAgYXJlIGRlcml2ZWQgZnJv
bSBhYnNlaWwtY3BwIChodHRwczovL2dpdGh1Yi5jb20vYWJzZWlsL2Fic2VpbC1jcHApCisvLyBJ
bXBvcnRlZCByZXZpc2lvbiBpcyBkZGI4NDJmNTgzZTU2MGJiZGU0OTdiYzk2Y2ZlYmUyNWY5MDg5
ZTExLgorLy8gV2UgYXBwbHkgdGhlIGZvbGxvd2luZyBjaGFuZ2VzLgorLy8gMS4gVXNlIFdURiBt
YWNyb3MgaW5zdGVhZCBvZiBBQlNMIG1hY3Jvcy4KKy8vIDIuIFJlbW92ZSBhYnNlaWwgSGFzaFRh
YmxlIGhhbmRsaW5nCisvLyAzLiBSZW1vdmUgX19pbnQxMjhfdCBoYW5kbGluZwogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8Y21hdGg+CiAjaW5jbHVkZSA8
Y3N0ZGludD4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDx3dGYvTGVhZGluZ1pl
cm9CaXRDb3VudC5oPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8aW9zZndkPgorI2lu
Y2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgQ09NUElMRVIoTVNWQykKKy8vIEluIHZlcnkgb2xkIHZlcnNpb25zIG9mIE1T
VkMgYW5kIHdoZW4gdGhlIC9aYzp3Y2hhcl90IGZsYWcgaXMgb2ZmLCB3Y2hhcl90IGlzCisvLyBh
IHR5cGVkZWYgZm9yIHVuc2lnbmVkIHNob3J0LiAgT3RoZXJ3aXNlIHdjaGFyX3QgaXMgbWFwcGVk
IHRvIHRoZSBfX3djaGFyX3QKKy8vIGJ1aWx0aW4gdHlwZS4gIFdlIG5lZWQgdG8gbWFrZSBzdXJl
IG5vdCB0byBkZWZpbmUgb3BlcmF0b3Igd2NoYXJfdCgpCisvLyBhbG9uZ3NpZGUgb3BlcmF0b3Ig
dW5zaWduZWQgc2hvcnQoKSBpbiB0aGVzZSBpbnN0YW5jZXMuCisjZGVmaW5lIEFCU0xfSU5URVJO
QUxfV0NIQVJfVCBfX3djaGFyX3QKKyNpZiBDUFUoWDg2XzY0KQorI2luY2x1ZGUgPGludHJpbi5o
PgorI3ByYWdtYSBpbnRyaW5zaWMoX3VtdWwxMjgpCisjZW5kaWYgIC8vIGRlZmluZWQoX01fWDY0
KQorI2Vsc2UgICAvLyBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBBQlNMX0lOVEVSTkFMX1dD
SEFSX1Qgd2NoYXJfdAorI2VuZGlmICAvLyBkZWZpbmVkKF9NU0NfVkVSKQogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotdGVtcGxhdGUgPGJvb2wgSVNfU0lHTkVEID0gZmFsc2U+IGNsYXNzIEludDEyOElt
cGwgewotcHVibGljOgotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKCkgeyB9Ci0gICAgLy8gVGhp
cyBtZWFucyBvZiBkZWZpbml0aW9uIHByb3ZpZGVzIHNvbWUgcG9ydGFiaWxpdHkgZm9yCi0gICAg
Ly8gInNpemVfdCIgb3BlcmFuZHMuCi0gICAgY29uc3RleHByIEludDEyOEltcGwodW5zaWduZWQg
bikgOiBsb3dfIHtufSB7IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCh1bnNpZ25lZCBsb25n
IG4pIDogbG93XyB7bn0geyB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwodW5zaWduZWQgbG9u
ZyBsb25nIG4pIDogbG93XyB7bn0geyB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwoaW50IG4p
Ci0gICAgICAgIDogbG93XyB7c3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obil9Ci0gICAgICAg
ICwgaGlnaF8gey1zdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihuIDwgMCl9Ci0gICAgeyB9Ci0g
ICAgY29uc3RleHByIEludDEyOEltcGwobG9uZyBuKQotICAgICAgICA6IGxvd18ge3N0YXRpY19j
YXN0PHN0ZDo6dWludDY0X3Q+KG4pfQotICAgICAgICAsIGhpZ2hfIHstc3RhdGljX2Nhc3Q8c3Rk
Ojp1aW50NjRfdD4obiA8IDApfQotICAgIHsgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGxv
bmcgbG9uZyBuKQotICAgICAgICA6IGxvd18ge3N0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4p
fQotICAgICAgICAsIGhpZ2hfIHstc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obiA8IDApfQot
ICAgIHsgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGNvbnN0IEludDEyOEltcGwgJikgPSBk
ZWZhdWx0OwotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKEludDEyOEltcGwgJiYpID0gZGVmYXVs
dDsKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3I9KGNvbnN0IEludDEyOEltcGwg
JikgPSBkZWZhdWx0OwotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvcj0oSW50MTI4
SW1wbCAmJikgPSBkZWZhdWx0OwotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3Ir
KCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVy
YXRvcn4oKSBjb25zdCB7IHJldHVybiB7fmhpZ2hfLCB+bG93X307IH0KLSAgICBjb25zdGV4cHIg
SW50MTI4SW1wbCBvcGVyYXRvci0oKSBjb25zdCB7IHJldHVybiB+KnRoaXMgKyAxOyB9Ci0gICAg
Y29uc3RleHByIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWxvd18gJiYgIWhpZ2hf
OyB9Ci0gICAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biBsb3dfIHx8IGhpZ2hfOyB9Ci0gICAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6
dWludDY0X3QoKSBjb25zdCB7IHJldHVybiBsb3dfOyB9Ci0gICAgY29uc3RleHByIGV4cGxpY2l0
IG9wZXJhdG9yIHN0ZDo6aW50NjRfdCgpIGNvbnN0IHsgcmV0dXJuIGxvd187IH0KLSAgICBjb25z
dGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgaW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50Pihsb3dfKTsgfQotCi0gICAgY29uc3RleHByIHN0ZDo6dWludDY0X3QgaGlnaCgpIGNvbnN0
IHsgcmV0dXJuIGhpZ2hfOyB9Ci0gICAgY29uc3RleHByIHN0ZDo6dWludDY0X3QgbG93KCkgY29u
c3QgeyByZXR1cm4gbG93XzsgfQotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3Ir
KygvKnByZWZpeCovKQotICAgIHsKLSAgICAgICAgKnRoaXMgKz0gMTsKLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcisrKGludCAv
KnBvc3RmaXgqLykKLSAgICB7Ci0gICAgICAgIEludDEyOEltcGwgcmVzdWx0IHsqdGhpc307Ci0g
ICAgICAgICp0aGlzICs9IDE7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGNv
bnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yLS0oLypwcmVmaXgqLykKLSAgICB7Ci0gICAgICAg
ICp0aGlzIC09IDE7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHBy
IEludDEyOEltcGwgb3BlcmF0b3ItLShpbnQgLypwb3N0Zml4Ki8pCi0gICAgewotICAgICAgICBJ
bnQxMjhJbXBsIHJlc3VsdCB7KnRoaXN9OwotICAgICAgICAqdGhpcyAtPSAxOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9y
JihJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4ge2hpZ2hfICYg
dGhhdC5oaWdoXywgbG93XyAmIHRoYXQubG93X307Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQx
MjhJbXBsIG9wZXJhdG9yIHwgKEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiB7aGlnaF8gfCB0aGF0LmhpZ2hfLCBsb3dfIHwgdGhhdC5sb3dffTsKLSAgICB9Ci0g
ICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3JeKEludDEyOEltcGwgdGhhdCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiB7aGlnaF8gXiB0aGF0LmhpZ2hfLCBsb3dfIF4gdGhhdC5s
b3dffTsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcjw8KEludDEy
OEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICh0aGF0ID49IDEyOCkKLSAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGlmICghdGhhdCkKLSAgICAgICAgICAgIHJldHVy
biAqdGhpczsKLSAgICAgICAgc3RkOjp1aW50NjRfdCBuIHt0aGF0Lmxvd199OwotICAgICAgICBp
ZiAobiA+PSA2NCkKLSAgICAgICAgICAgIHJldHVybiB7bG93XyA8PCAobiAtIDY0KSwgMH07Ci0g
ICAgICAgIHJldHVybiB7KGhpZ2hfIDw8IG4pIHwgKGxvd18gPj4gKDY0IC0gbikpLCBsb3dfIDw8
IG59OwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcj4+KEludDEyOElt
cGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICh0aGF0ID49IDEyOCkKLSAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgICAgIGlmICghdGhhdCkKLSAgICAgICAgICAgIHJldHVybiAq
dGhpczsKLSAgICAgICAgc3RkOjp1aW50NjRfdCBuIHt0aGF0Lmxvd199OwotICAgICAgICBpZiAo
biA+PSA2NCkKLSAgICAgICAgICAgIHJldHVybiB7MCwgaGlnaF8gPj4gKG4gLSA2NCl9OwotICAg
ICAgICByZXR1cm4ge2hpZ2hfID4+IG4sIChoaWdoXyA8PCAoNjQgLSBuKSkgfCAobG93XyA+PiBu
KX07Ci0gICAgfQotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKEludDEyOElt
cGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0ZDo6dWludDY0X3QgbG93ZXIgeyhsb3df
ICYgfnRvcEJpdCkgKyAodGhhdC5sb3dfICYgfnRvcEJpdCl9OwotICAgICAgICBib29sIGNhcnJ5
IHsoKGxvd2VyID4+IDYzKSArIChsb3dfID4+IDYzKSArICh0aGF0Lmxvd18gPj4gNjMpKSA+IDF9
OwotICAgICAgICByZXR1cm4ge2hpZ2hfICsgdGhhdC5oaWdoXyArIGNhcnJ5LCBsb3dfICsgdGhh
dC5sb3dffTsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3ItKEludDEy
OEltcGwgdGhhdCkgY29uc3QgeyByZXR1cm4gKnRoaXMgKyAtdGhhdDsgfQotCi0gICAgY29uc3Rl
eHByIEludDEyOEltcGwgb3BlcmF0b3IqKEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHN0ZDo6dWludDY0X3QgbWFzazMyIHsweGZmZmZmZmZmfTsKLSAgICAgICAgaWYgKCFo
aWdoXyAmJiAhdGhhdC5oaWdoXykgewotICAgICAgICAgICAgc3RkOjp1aW50NjRfdCB4MCB7bG93
XyAmIG1hc2szMn0sIHgxIHtsb3dfID4+IDMyfTsKLSAgICAgICAgICAgIHN0ZDo6dWludDY0X3Qg
eTAge3RoYXQubG93XyAmIG1hc2szMn0sIHkxIHt0aGF0Lmxvd18gPj4gMzJ9OwotICAgICAgICAg
ICAgSW50MTI4SW1wbCB4MHkwIHt4MCAqIHkwfSwgeDB5MSB7eDAgKiB5MX07Ci0gICAgICAgICAg
ICBJbnQxMjhJbXBsIHgxeTAge3gxICogeTB9LCB4MXkxIHt4MSAqIHkxfTsKLSAgICAgICAgICAg
IHJldHVybiB4MHkwICsgKCh4MHkxICsgeDF5MCkgPDwgMzIpICsgKHgxeTEgPDwgNjQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc3RkOjp1aW50NjRfdCB4MCB7bG93XyAmIG1hc2szMn0sIHgxIHts
b3dfID4+IDMyfSwgeDIge2hpZ2hfICYgbWFzazMyfSwKLSAgICAgICAgICAgIHgzIHtoaWdoXyA+
PiAzMn07Ci0gICAgICAgIHN0ZDo6dWludDY0X3QgeTAge3RoYXQubG93XyAmIG1hc2szMn0sIHkx
IHt0aGF0Lmxvd18gPj4gMzJ9LAotICAgICAgICAgICAgeTIge3RoYXQuaGlnaF8gJiBtYXNrMzJ9
LCB5MyB7dGhhdC5oaWdoXyA+PiAzMn07Ci0gICAgICAgIEludDEyOEltcGwgeDB5MCB7eDAgKiB5
MH0sIHgweTEge3gwICogeTF9LCB4MHkyIHt4MCAqIHkyfSwgeDB5MyB7eDAgKiB5M307Ci0gICAg
ICAgIEludDEyOEltcGwgeDF5MCB7eDEgKiB5MH0sIHgxeTEge3gxICogeTF9LCB4MXkyIHt4MSAq
IHkyfTsKLSAgICAgICAgSW50MTI4SW1wbCB4MnkwIHt4MiAqIHkwfSwgeDJ5MSB7eDIgKiB5MX07
Ci0gICAgICAgIEludDEyOEltcGwgeDN5MCB7eDMgKiB5MH07Ci0gICAgICAgIHJldHVybiB4MHkw
ICsgKCh4MHkxICsgeDF5MCkgPDwgMzIpICsgKCh4MHkyICsgeDF5MSArIHgyeTApIDw8IDY0KSAr
Ci0gICAgICAgICAgICAoKHgweTMgKyB4MXkyICsgeDJ5MSArIHgzeTApIDw8IDk2KTsKLSAgICB9
Ci0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvci8oSW50MTI4SW1wbCB0aGF0KSBj
b25zdAotICAgIHsKLSAgICAgICAgaW50IGoge2xlYWRpbmdaZXJvZXMoKX07Ci0gICAgICAgIElu
dDEyOEltcGwgYml0cyB7KnRoaXN9OwotICAgICAgICBiaXRzIDw8PSBqOwotICAgICAgICBJbnQx
MjhJbXBsIG51bWVyYXRvciB7IH07Ci0gICAgICAgIEludDEyOEltcGwgcXVvdGllbnQgeyB9Owot
ICAgICAgICBmb3IgKDsgaiA8IDEyODsgKytqKSB7Ci0gICAgICAgICAgICBudW1lcmF0b3IgPDw9
IDE7Ci0gICAgICAgICAgICBpZiAoYml0cy5oaWdoXyAmIHRvcEJpdCkKLSAgICAgICAgICAgICAg
ICBudW1lcmF0b3IubG93XyB8PSAxOwotICAgICAgICAgICAgYml0cyA8PD0gMTsKLSAgICAgICAg
ICAgIHF1b3RpZW50IDw8PSAxOwotICAgICAgICAgICAgaWYgKG51bWVyYXRvciA+PSB0aGF0KSB7
Ci0gICAgICAgICAgICAgICAgKytxdW90aWVudDsKLSAgICAgICAgICAgICAgICBudW1lcmF0b3Ig
LT0gdGhhdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcXVvdGll
bnQ7Ci0gICAgfQotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IlKEludDEyOElt
cGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGludCBqIHtsZWFkaW5nWmVyb2VzKCl9Owot
ICAgICAgICBJbnQxMjhJbXBsIGJpdHMgeyp0aGlzfTsKLSAgICAgICAgYml0cyA8PD0gajsKLSAg
ICAgICAgSW50MTI4SW1wbCByZW1haW5kZXIgeyB9OwotICAgICAgICBmb3IgKDsgaiA8IDEyODsg
KytqKSB7Ci0gICAgICAgICAgICByZW1haW5kZXIgPDw9IDE7Ci0gICAgICAgICAgICBpZiAoYml0
cy5oaWdoXyAmIHRvcEJpdCkKLSAgICAgICAgICAgICAgICByZW1haW5kZXIubG93XyB8PSAxOwot
ICAgICAgICAgICAgYml0cyA8PD0gMTsKLSAgICAgICAgICAgIGlmIChyZW1haW5kZXIgPj0gdGhh
dCkKLSAgICAgICAgICAgICAgICByZW1haW5kZXIgLT0gdGhhdDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gcmVtYWluZGVyOwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PChJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoSVNfU0lHTkVEICYm
IChoaWdoXyBeIHRoYXQuaGlnaF8pICYgdG9wQml0KQotICAgICAgICAgICAgcmV0dXJuICEhKGhp
Z2hfICYgdG9wQml0KTsKLQotICAgICAgICByZXR1cm4gaGlnaF8gPCB0aGF0LmhpZ2hfIHx8ICho
aWdoXyA9PSB0aGF0LmhpZ2hfICYmIGxvd18gPCB0aGF0Lmxvd18pOwotICAgIH0KLSAgICBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcjw9KEludDEyOEltcGwgdGhhdCkgY29uc3QgeyByZXR1cm4gISgq
dGhpcyA+IHRoYXQpOyB9Ci0gICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShJbnQxMjhJbXBs
IHRoYXQpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbG93XyA9PSB0aGF0Lmxvd18gJiYg
aGlnaF8gPT0gdGhhdC5oaWdoXzsKLSAgICB9Ci0gICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3Ih
PShJbnQxMjhJbXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gdGhhdCk7IH0KLSAg
ICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KEludDEyOEltcGwgdGhhdCkgY29uc3QgeyByZXR1
cm4gdGhhdCA8PSAqdGhpczsgfQotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihJbnQxMjhJ
bXBsIHRoYXQpIGNvbnN0IHsgcmV0dXJuIHRoYXQgPCAqdGhpczsgfQotCi0gICAgY29uc3RleHBy
IEludDEyOEltcGwgJm9wZXJhdG9yJj0oY29uc3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0g
ICAgICAgICp0aGlzID0gKnRoaXMgJiB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg
fQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvcnw9KGNvbnN0IEludDEyOEltcGwg
JnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzIHwgdGhhdDsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3JePShj
b25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyBeIHRo
YXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOElt
cGwgJm9wZXJhdG9yPDw9KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAq
dGhpcyA9ICp0aGlzIDw8IHRoYXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAg
Y29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yPj49KGNvbnN0IEludDEyOEltcGwgJnRoYXQp
Ci0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzID4+IHRoYXQ7Ci0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yKz0oY29uc3Qg
SW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gKnRoaXMgKyB0aGF0Owot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZv
cGVyYXRvci09KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9
ICp0aGlzIC0gdGhhdDsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4
cHIgSW50MTI4SW1wbCAmb3BlcmF0b3IqPShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsK
LSAgICAgICAgKnRoaXMgPSAqdGhpcyAqIHRoYXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yLz0oY29uc3QgSW50MTI4SW1w
bCAmdGhhdCkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gKnRoaXMgLyB0aGF0OwotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvciU9
KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzICUg
dGhhdDsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25z
dGV4cHIgSW50MTI4SW1wbChzdGQ6OnVpbnQ2NF90IGhpLCBzdGQ6OnVpbnQ2NF90IGxvKSA6IGxv
d18ge2xvfSwgaGlnaF8ge2hpfSB7IH0KLSAgICBjb25zdGV4cHIgaW50IGxlYWRpbmdaZXJvZXMo
KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFoaWdoXykKLSAgICAgICAgICAgIHJldHVybiA2
NCArIGxlYWRpbmdaZXJvQml0Q291bnQobG93Xyk7Ci0gICAgICAgIHJldHVybiBsZWFkaW5nWmVy
b0JpdENvdW50KGhpZ2hfKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnVpbnQ2
NF90IHRvcEJpdCB7c3RkOjp1aW50NjRfdCB7MX0gPDwgNjN9OwotICAgIHN0ZDo6dWludDY0X3Qg
bG93XyB7MH0sIGhpZ2hfIHswfTsKK2NsYXNzIEludDEyOEltcGw7CisKKy8vIFVJbnQxMjhJbXBs
CisvLworLy8gQW4gdW5zaWduZWQgMTI4LWJpdCBpbnRlZ2VyIHR5cGUuIFRoZSBBUEkgaXMgbWVh
bnQgdG8gbWltaWMgYW4gaW50cmluc2ljIHR5cGUKKy8vIGFzIGNsb3NlbHkgYXMgaXMgcHJhY3Rp
Y2FsLCBpbmNsdWRpbmcgZXhoaWJpdGluZyB1bmRlZmluZWQgYmVoYXZpb3IgaW4KKy8vIGFuYWxv
Z291cyBjYXNlcyAoZS5nLiBkaXZpc2lvbiBieSB6ZXJvKS4gVGhpcyB0eXBlIGlzIGludGVuZGVk
IHRvIGJlIGEKKy8vIGRyb3AtaW4gcmVwbGFjZW1lbnQgb25jZSBDKysgc3VwcG9ydHMgYW4gaW50
cmluc2ljIGB1aW50MTI4X3RgIHR5cGU7IHdoZW4KKy8vIHRoYXQgb2NjdXJzLCBleGlzdGluZyB3
ZWxsLWJlaGF2ZWQgdXNlcyBvZiBgVUludDEyOEltcGxgIHdpbGwgY29udGludWUgdG8gd29yawor
Ly8gdXNpbmcgdGhhdCBuZXcgdHlwZS4KKy8vCisvLyBOb3RlOiBjb2RlIHdyaXR0ZW4gd2l0aCB0
aGlzIHR5cGUgd2lsbCBjb250aW51ZSB0byBjb21waWxlIG9uY2UgYHVpbnQxMjhfdGAKKy8vIGlz
IGludHJvZHVjZWQsIHByb3ZpZGVkIHRoZSByZXBsYWNlbWVudCBoZWxwZXIgZnVuY3Rpb25zCisv
LyBgVUludDEyOEltcGwoTG93fEhpZ2gpNjQoKWAgYW5kIGBNYWtlVUludDEyOCgpYCBhcmUgbWFk
ZS4KKy8vCisvLyBBIGBVSW50MTI4SW1wbGAgc3VwcG9ydHMgdGhlIGZvbGxvd2luZzoKKy8vCisv
LyAgICogSW1wbGljaXQgY29uc3RydWN0aW9uIGZyb20gaW50ZWdyYWwgdHlwZXMKKy8vICAgKiBF
eHBsaWNpdCBjb252ZXJzaW9uIHRvIGludGVncmFsIHR5cGVzCisvLworLy8gQWRkaXRpb25hbGx5
LCBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGBfX2ludDEyOGAsIGBVSW50MTI4SW1wbGAgaXMK
Ky8vIGludGVyb3BlcmFibGUgd2l0aCB0aGF0IHR5cGUuIChBYnNlaWwgY2hlY2tzIGZvciB0aGlz
IGNvbXBhdGliaWxpdHkgdGhyb3VnaAorLy8gdGhlIGBBQlNMX0hBVkVfSU5UUklOU0lDX0lOVDEy
OGAgbWFjcm8uKQorLy8KKy8vIEhvd2V2ZXIsIGEgYFVJbnQxMjhJbXBsYCBkaWZmZXJzIGZyb20g
aW50cmluc2ljIGludGVncmFsIHR5cGVzIGluIHRoZSBmb2xsb3dpbmcKKy8vIHdheXM6CisvLwor
Ly8gICAqIEVycm9ycyBvbiBpbXBsaWNpdCBjb252ZXJzaW9ucyB0aGF0IGRvIG5vdCBwcmVzZXJ2
ZSB2YWx1ZSAoc3VjaCBhcworLy8gICAgIGxvc3Mgb2YgcHJlY2lzaW9uIHdoZW4gY29udmVydGlu
ZyB0byBmbG9hdCB2YWx1ZXMpLgorLy8gICAqIFJlcXVpcmVzIGV4cGxpY2l0IGNvbnN0cnVjdGlv
biBmcm9tIGFuZCBjb252ZXJzaW9uIHRvIGZsb2F0aW5nIHBvaW50CisvLyAgICAgdHlwZXMuCisv
LyAgICogQ29udmVyc2lvbiB0byBpbnRlZ3JhbCB0eXBlcyByZXF1aXJlcyBhbiBleHBsaWNpdCBz
dGF0aWNfY2FzdCgpIHRvCisvLyAgICAgbWltaWMgdXNlIG9mIHRoZSBgLVduYXJyb3dpbmdgIGNv
bXBpbGVyIGZsYWcuCisvLyAgICogVGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBvZiBgVUludDEy
OEltcGxgIG1heSBkaWZmZXIgZnJvbSB0aGF0IG9mIGFuCisvLyAgICAgaW50cmluc2ljIDEyOC1i
aXQgaW50ZWdlciB0eXBlIGRlcGVuZGluZyBvbiBwbGF0Zm9ybSBhbmQgYnVpbGQKKy8vICAgICBj
b25maWd1cmF0aW9uLgorLy8KKy8vIEV4YW1wbGU6CisvLworLy8gICAgIGZsb2F0IHkgPSBhYnNs
OjpVSW50MTI4TWF4KCk7ICAvLyBFcnJvci4gVUludDEyOEltcGwgY2Fubm90IGJlIGltcGxpY2l0
bHkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydGVkIHRv
IGZsb2F0LgorLy8KKy8vICAgICBhYnNsOjpVSW50MTI4SW1wbCB2OworLy8gICAgIHVpbnQ2NF90
IGkgPSB2OyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvcgorLy8gICAgIHVpbnQ2NF90
IGkgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odik7ICAvLyBPSworLy8KK2NsYXNzIGFsaWduYXMo
MTYpIFVJbnQxMjhJbXBsIHsKKyBwdWJsaWM6CisgIFVJbnQxMjhJbXBsKCkgPSBkZWZhdWx0Owor
CisgIC8vIENvbnN0cnVjdG9ycyBmcm9tIGFyaXRobWV0aWMgdHlwZXMKKyAgY29uc3RleHByIFVJ
bnQxMjhJbXBsKGludCB2KTsgICAgICAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2V4cGxp
Y2l0KQorICBjb25zdGV4cHIgVUludDEyOEltcGwodW5zaWduZWQgaW50IHYpOyAgICAgICAgLy8g
Tk9MSU5UKHJ1bnRpbWUvZXhwbGljaXQpCisgIGNvbnN0ZXhwciBVSW50MTI4SW1wbChsb25nIHYp
OyAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBVSW50
MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpOyAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisg
IGNvbnN0ZXhwciBVSW50MTI4SW1wbChsb25nIGxvbmcgdik7ICAgICAgICAgICAvLyBOT0xJTlQo
cnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBVSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxvbmcg
dik7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBVSW50MTI4SW1wbChJbnQx
MjhJbXBsIHYpOyAgLy8gTk9MSU5UKHJ1bnRpbWUvZXhwbGljaXQpCisgIFdURl9FWFBPUlRfUFJJ
VkFURSBleHBsaWNpdCBVSW50MTI4SW1wbChmbG9hdCB2KTsKKyAgV1RGX0VYUE9SVF9QUklWQVRF
IGV4cGxpY2l0IFVJbnQxMjhJbXBsKGRvdWJsZSB2KTsKKyAgV1RGX0VYUE9SVF9QUklWQVRFIGV4
cGxpY2l0IFVJbnQxMjhJbXBsKGxvbmcgZG91YmxlIHYpOworCisgIC8vIEFzc2lnbm1lbnQgb3Bl
cmF0b3JzIGZyb20gYXJpdGhtZXRpYyB0eXBlcworICBVSW50MTI4SW1wbCYgb3BlcmF0b3I9KGlu
dCB2KTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPSh1bnNpZ25lZCBpbnQgdik7CisgIFVJbnQx
MjhJbXBsJiBvcGVyYXRvcj0obG9uZyB2KTsgICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRp
bWUvaW50KQorICBVSW50MTI4SW1wbCYgb3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgdik7ICAgICAg
IC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPShsb25nIGxv
bmcgdik7ICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIFVJbnQxMjhJbXBsJiBv
cGVyYXRvcj0odW5zaWduZWQgbG9uZyBsb25nIHYpOyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQor
ICBVSW50MTI4SW1wbCYgb3BlcmF0b3I9KEludDEyOEltcGwgdik7CisKKyAgLy8gQ29udmVyc2lv
biBvcGVyYXRvcnMgdG8gb3RoZXIgYXJpdGhtZXRpYyB0eXBlcworICBjb25zdGV4cHIgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3Ig
Y2hhcigpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3Igc2lnbmVkIGNoYXIo
KSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIGNoYXIoKSBj
b25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGNoYXIxNl90KCkgY29uc3Q7Cisg
IGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyMzJfdCgpIGNvbnN0OworICBjb25zdGV4
cHIgZXhwbGljaXQgb3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UKCkgY29uc3Q7CisgIGNv
bnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzaG9ydCgpIGNvbnN0OyAgLy8gTk9MSU5UKHJ1bnRp
bWUvaW50KQorICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4
cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIHNob3J0KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBs
aWNpdCBvcGVyYXRvciBpbnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9y
IHVuc2lnbmVkIGludCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgbG9u
ZygpIGNvbnN0OyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBOT0xJTlRORVhUTElORShy
dW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIGxvbmco
KSBjb25zdDsKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBl
eHBsaWNpdCBvcGVyYXRvciBsb25nIGxvbmcoKSBjb25zdDsKKyAgLy8gTk9MSU5UTkVYVExJTkUo
cnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCBsb25n
IGxvbmcoKSBjb25zdDsKKyAgZXhwbGljaXQgb3BlcmF0b3IgZmxvYXQoKSBjb25zdDsKKyAgZXhw
bGljaXQgb3BlcmF0b3IgZG91YmxlKCkgY29uc3Q7CisgIGV4cGxpY2l0IG9wZXJhdG9yIGxvbmcg
ZG91YmxlKCkgY29uc3Q7CisKKyAgLy8gVHJpdmlhbCBjb3B5IGNvbnN0cnVjdG9yLCBhc3NpZ25t
ZW50IG9wZXJhdG9yIGFuZCBkZXN0cnVjdG9yLgorCisgIC8vIEFyaXRobWV0aWMgb3BlcmF0b3Jz
LgorICBVSW50MTI4SW1wbCYgb3BlcmF0b3IrPShVSW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQx
MjhJbXBsJiBvcGVyYXRvci09KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUludDEyOEltcGwmIG9w
ZXJhdG9yKj0oVUludDEyOEltcGwgb3RoZXIpOworICAvLyBMb25nIGRpdmlzaW9uL21vZHVsbyBm
b3IgVUludDEyOEltcGwuCisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvci89KFVJbnQxMjhJbXBsIG90
aGVyKTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yJT0oVUludDEyOEltcGwgb3RoZXIpOworICBV
SW50MTI4SW1wbCBvcGVyYXRvcisrKGludCk7CisgIFVJbnQxMjhJbXBsIG9wZXJhdG9yLS0oaW50
KTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPDw9KGludCk7CisgIFVJbnQxMjhJbXBsJiBvcGVy
YXRvcj4+PShpbnQpOworICBVSW50MTI4SW1wbCYgb3BlcmF0b3ImPShVSW50MTI4SW1wbCBvdGhl
cik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcnw9KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUlu
dDEyOEltcGwmIG9wZXJhdG9yXj0oVUludDEyOEltcGwgb3RoZXIpOworICBVSW50MTI4SW1wbCYg
b3BlcmF0b3IrKygpOworICBVSW50MTI4SW1wbCYgb3BlcmF0b3ItLSgpOworCisgIC8vIFVJbnQx
MjhMb3c2NCgpCisgIC8vCisgIC8vIFJldHVybnMgdGhlIGxvd2VyIDY0LWJpdCB2YWx1ZSBvZiBh
IGBVSW50MTI4SW1wbGAgdmFsdWUuCisgIGZyaWVuZCBjb25zdGV4cHIgdWludDY0X3QgVUludDEy
OExvdzY0KFVJbnQxMjhJbXBsIHYpOworCisgIC8vIFVJbnQxMjhIaWdoNjQoKQorICAvLworICAv
LyBSZXR1cm5zIHRoZSBoaWdoZXIgNjQtYml0IHZhbHVlIG9mIGEgYFVJbnQxMjhJbXBsYCB2YWx1
ZS4KKyAgZnJpZW5kIGNvbnN0ZXhwciB1aW50NjRfdCBVSW50MTI4SGlnaDY0KFVJbnQxMjhJbXBs
IHYpOworCisgIC8vIE1ha2VVSW50MTI4KCkKKyAgLy8KKyAgLy8gQ29uc3RydWN0cyBhIGBVSW50
MTI4SW1wbGAgbnVtZXJpYyB2YWx1ZSBmcm9tIHR3byA2NC1iaXQgdW5zaWduZWQgaW50ZWdlcnMu
CisgIC8vIE5vdGUgdGhhdCB0aGlzIGZhY3RvcnkgZnVuY3Rpb24gaXMgdGhlIG9ubHkgd2F5IHRv
IGNvbnN0cnVjdCBhIGBVSW50MTI4SW1wbGAKKyAgLy8gZnJvbSBpbnRlZ2VyIHZhbHVlcyBncmVh
dGVyIHRoYW4gMl42NC4KKyAgLy8KKyAgLy8gRXhhbXBsZToKKyAgLy8KKyAgLy8gICBVSW50MTI4
SW1wbCBiaWcgPSBNYWtlVUludDEyOCgxLCAwKTsKKyAgZnJpZW5kIGNvbnN0ZXhwciBVSW50MTI4
SW1wbCBNYWtlVUludDEyOCh1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpOworCisgIC8vIFVJ
bnQxMjhNYXgoKQorICAvLworICAvLyBSZXR1cm5zIHRoZSBoaWdoZXN0IHZhbHVlIGZvciBhIDEy
OC1iaXQgdW5zaWduZWQgaW50ZWdlci4KKyAgZnJpZW5kIGNvbnN0ZXhwciBVSW50MTI4SW1wbCBV
SW50MTI4TWF4KCk7CisKKyBwcml2YXRlOgorICBjb25zdGV4cHIgVUludDEyOEltcGwodWludDY0
X3QgaGlnaCwgdWludDY0X3QgbG93KTsKKworICAvLyBUT0RPKHN0cmVsKSBVcGRhdGUgaW1wbGVt
ZW50YXRpb24gdG8gdXNlIF9faW50MTI4IG9uY2UgYWxsIHVzZXJzIG9mCisgIC8vIFVJbnQxMjhJ
bXBsIGFyZSBmaXhlZCB0byBub3QgZGVwZW5kIG9uIGFsaWdub2YoVUludDEyOEltcGwpID09IDgu
IEFsc28gYWRkCisgIC8vIGFsaWduYXMoMTYpIHRvIGNsYXNzIGRlZmluaXRpb24gdG8ga2VlcCBh
bGlnbm1lbnQgY29uc2lzdGVudCBhY3Jvc3MKKyAgLy8gcGxhdGZvcm1zLgorI2lmIENQVShMSVRU
TEVfRU5ESUFOKQorICB1aW50NjRfdCBsb187CisgIHVpbnQ2NF90IGhpXzsKKyNlbGlmIENQVShC
SUdfRU5ESUFOKQorICB1aW50NjRfdCBoaV87CisgIHVpbnQ2NF90IGxvXzsKKyNlbHNlICAvLyBi
eXRlIG9yZGVyCisjZXJyb3IgIlVuc3VwcG9ydGVkIGJ5dGUgb3JkZXI6IG11c3QgYmUgbGl0dGxl
LWVuZGlhbiBvciBiaWctZW5kaWFuLiIKKyNlbmRpZiAgLy8gYnl0ZSBvcmRlcgorfTsKKworLy8g
YWxsb3cgVUludDEyOEltcGwgdG8gYmUgbG9nZ2VkCitXVEZfRVhQT1JUX1BSSVZBVEUgc3RkOjpv
c3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIFVJbnQxMjhJbXBsIHYpOworCisv
LyBUT0RPKHN0cmVsKSBhZGQgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0mLCBVSW50MTI4SW1wbCkK
KworY29uc3RleHByIFVJbnQxMjhJbXBsIFVJbnQxMjhNYXgoKSB7CisgIHJldHVybiBVSW50MTI4
SW1wbCgoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSwKKyAgICAgICAgICAg
ICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCkpOworfQorCit9ICAv
LyBuYW1lc3BhY2UgV1RGCisKKy8vIFNwZWNpYWxpemVkIG51bWVyaWNfbGltaXRzIGZvciBVSW50
MTI4SW1wbC4KK25hbWVzcGFjZSBzdGQgewordGVtcGxhdGUgPD4KK2NsYXNzIG51bWVyaWNfbGlt
aXRzPFdURjo6VUludDEyOEltcGw+IHsKKyBwdWJsaWM6CisgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc19zcGVjaWFsaXplZCA9IHRydWU7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19zaWdu
ZWQgPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2ludGVnZXIgPSB0cnVlOwor
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfZXhhY3QgPSB0cnVlOworICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBo
YXNfcXVpZXRfTmFOID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfc2lnbmFs
aW5nX05hTiA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBo
YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGZsb2F0X3JvdW5kX3N0eWxl
IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CisgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc19pZWM1NTkgPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2JvdW5kZWQg
PSB0cnVlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKKyAgc3Rh
dGljIGNvbnN0ZXhwciBpbnQgZGlnaXRzID0gMTI4OworICBzdGF0aWMgY29uc3RleHByIGludCBk
aWdpdHMxMCA9IDM4OworICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOwor
ICBzdGF0aWMgY29uc3RleHByIGludCByYWRpeCA9IDI7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50
IG1pbl9leHBvbmVudCA9IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbl9leHBvbmVudDEw
ID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgc3RhdGlj
IGNvbnN0ZXhwciBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOworICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdHJhcHMgPSBudW1lcmljX2xpbWl0czx1aW50NjRfdD46OnRyYXBzOworICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CisKKyAgc3RhdGljIGNvbnN0ZXhw
ciBXVEY6OlVJbnQxMjhJbXBsIChtaW4pKCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3Rl
eHByIFdURjo6VUludDEyOEltcGwgbG93ZXN0KCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29u
c3RleHByIFdURjo6VUludDEyOEltcGwgKG1heCkoKSB7IHJldHVybiBXVEY6OlVJbnQxMjhNYXgo
KTsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6VUludDEyOEltcGwgZXBzaWxvbigpIHsgcmV0
dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIHJvdW5kX2Vycm9y
KCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6VUludDEyOEltcGwgaW5m
aW5pdHkoKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1w
bCBxdWlldF9OYU4oKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpVSW50
MTI4SW1wbCBzaWduYWxpbmdfTmFOKCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHBy
IFdURjo6VUludDEyOEltcGwgZGVub3JtX21pbigpIHsgcmV0dXJuIDA7IH0KK307Cit9ICAvLyBu
YW1lc3BhY2Ugc3RkCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBJbnQxMjhJbXBsCisvLworLy8g
QSBzaWduZWQgMTI4LWJpdCBpbnRlZ2VyIHR5cGUuIFRoZSBBUEkgaXMgbWVhbnQgdG8gbWltaWMg
YW4gaW50cmluc2ljCisvLyBpbnRlZ3JhbCB0eXBlIGFzIGNsb3NlbHkgYXMgaXMgcHJhY3RpY2Fs
LCBpbmNsdWRpbmcgZXhoaWJpdGluZyB1bmRlZmluZWQKKy8vIGJlaGF2aW9yIGluIGFuYWxvZ291
cyBjYXNlcyAoZS5nLiBkaXZpc2lvbiBieSB6ZXJvKS4KKy8vCisvLyBBbiBgSW50MTI4SW1wbGAg
c3VwcG9ydHMgdGhlIGZvbGxvd2luZzoKKy8vCisvLyAgICogSW1wbGljaXQgY29uc3RydWN0aW9u
IGZyb20gaW50ZWdyYWwgdHlwZXMKKy8vICAgKiBFeHBsaWNpdCBjb252ZXJzaW9uIHRvIGludGVn
cmFsIHR5cGVzCisvLworLy8gSG93ZXZlciwgYW4gYEludDEyOEltcGxgIGRpZmZlcnMgZnJvbSBp
bnRyaW5zaWMgaW50ZWdyYWwgdHlwZXMgaW4gdGhlIGZvbGxvd2luZworLy8gd2F5czoKKy8vCisv
LyAgICogSXQgaXMgbm90IGltcGxpY2l0bHkgY29udmVydGlibGUgdG8gb3RoZXIgaW50ZWdyYWwg
dHlwZXMuCisvLyAgICogUmVxdWlyZXMgZXhwbGljaXQgY29uc3RydWN0aW9uIGZyb20gYW5kIGNv
bnZlcnNpb24gdG8gZmxvYXRpbmcgcG9pbnQKKy8vICAgICB0eXBlcy4KKworLy8gQWRkaXRpb25h
bGx5LCBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGBfX2ludDEyOGAsIGBJbnQxMjhJbXBsYCBp
cworLy8gaW50ZXJvcGVyYWJsZSB3aXRoIHRoYXQgdHlwZS4gKEFic2VpbCBjaGVja3MgZm9yIHRo
aXMgY29tcGF0aWJpbGl0eSB0aHJvdWdoCisvLyB0aGUgYEFCU0xfSEFWRV9JTlRSSU5TSUNfSU5U
MTI4YCBtYWNyby4pCisvLworLy8gVGhlIGRlc2lnbiBnb2FsIGZvciBgSW50MTI4SW1wbGAgaXMg
dGhhdCBpdCB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCBhIGZ1dHVyZQorLy8gYGludDEyOF90YCwg
aWYgdGhhdCB0eXBlIGJlY29tZXMgYSBwYXJ0IG9mIHRoZSBzdGFuZGFyZC4KKy8vCisvLyBFeGFt
cGxlOgorLy8KKy8vICAgICBmbG9hdCB5ID0gSW50MTI4SW1wbCgxNyk7ICAvLyBFcnJvci4gSW50
MTI4SW1wbCBjYW5ub3QgYmUgaW1wbGljaXRseQorLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gY29udmVydGVkIHRvIGZsb2F0LgorLy8KKy8vICAgICBJbnQxMjhJbXBsIHY7
CisvLyAgICAgaW50NjRfdCBpID0gdjsgICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvcgor
Ly8gICAgIGludDY0X3QgaSA9IHN0YXRpY19jYXN0PGludDY0X3Q+KHYpOyAgLy8gT0sKKy8vCitj
bGFzcyBhbGlnbmFzKDE2KSBJbnQxMjhJbXBsIHsKKyBwdWJsaWM6CisgIEludDEyOEltcGwoKSA9
IGRlZmF1bHQ7CisKKyAgLy8gQ29uc3RydWN0b3JzIGZyb20gYXJpdGhtZXRpYyB0eXBlcworICBj
b25zdGV4cHIgSW50MTI4SW1wbChpbnQgdik7ICAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVu
dGltZS9leHBsaWNpdCkKKyAgY29uc3RleHByIEludDEyOEltcGwodW5zaWduZWQgaW50IHYpOyAg
ICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvZXhwbGljaXQpCisgIGNvbnN0ZXhwciBJbnQxMjhJbXBs
KGxvbmcgdik7ICAgICAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgY29uc3Rl
eHByIEludDEyOEltcGwodW5zaWduZWQgbG9uZyB2KTsgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUv
aW50KQorICBjb25zdGV4cHIgSW50MTI4SW1wbChsb25nIGxvbmcgdik7ICAgICAgICAgICAvLyBO
T0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcg
bG9uZyB2KTsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4cGxpY2l0IElu
dDEyOEltcGwoVUludDEyOEltcGwgdik7CisgIFdURl9FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBJ
bnQxMjhJbXBsKGZsb2F0IHYpOworICBXVEZfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW50MTI4
SW1wbChkb3VibGUgdik7CisgIFdURl9FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBJbnQxMjhJbXBs
KGxvbmcgZG91YmxlIHYpOworCisgIC8vIEFzc2lnbm1lbnQgb3BlcmF0b3JzIGZyb20gYXJpdGht
ZXRpYyB0eXBlcworICBJbnQxMjhJbXBsJiBvcGVyYXRvcj0oaW50IHYpOworICBJbnQxMjhJbXBs
JiBvcGVyYXRvcj0odW5zaWduZWQgaW50IHYpOworICBJbnQxMjhJbXBsJiBvcGVyYXRvcj0obG9u
ZyB2KTsgICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBJbnQxMjhJbXBs
JiBvcGVyYXRvcj0odW5zaWduZWQgbG9uZyB2KTsgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50
KQorICBJbnQxMjhJbXBsJiBvcGVyYXRvcj0obG9uZyBsb25nIHYpOyAgICAgICAgICAgLy8gTk9M
SU5UKHJ1bnRpbWUvaW50KQorICBJbnQxMjhJbXBsJiBvcGVyYXRvcj0odW5zaWduZWQgbG9uZyBs
b25nIHYpOyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorCisgIC8vIENvbnZlcnNpb24gb3BlcmF0
b3JzIHRvIG90aGVyIGFyaXRobWV0aWMgdHlwZXMKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGNoYXIoKSBj
b25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHNpZ25lZCBjaGFyKCkgY29uc3Q7
CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCBjaGFyKCkgY29uc3Q7Cisg
IGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyMTZfdCgpIGNvbnN0OworICBjb25zdGV4
cHIgZXhwbGljaXQgb3BlcmF0b3IgY2hhcjMyX3QoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxp
Y2l0IG9wZXJhdG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCgpIGNvbnN0OworICBjb25zdGV4cHIg
ZXhwbGljaXQgb3BlcmF0b3Igc2hvcnQoKSBjb25zdDsgIC8vIE5PTElOVChydW50aW1lL2ludCkK
KyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBv
cGVyYXRvciB1bnNpZ25lZCBzaG9ydCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3Bl
cmF0b3IgaW50KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25l
ZCBpbnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGxvbmcoKSBjb25z
dDsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9p
bnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCBsb25nKCkgY29uc3Q7
CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhwbGljaXQg
b3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3Q7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUv
aW50KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgbG9uZyBsb25nKCkg
Y29uc3Q7CisgIGV4cGxpY2l0IG9wZXJhdG9yIGZsb2F0KCkgY29uc3Q7CisgIGV4cGxpY2l0IG9w
ZXJhdG9yIGRvdWJsZSgpIGNvbnN0OworICBleHBsaWNpdCBvcGVyYXRvciBsb25nIGRvdWJsZSgp
IGNvbnN0OworCisgIC8vIFRyaXZpYWwgY29weSBjb25zdHJ1Y3RvciwgYXNzaWdubWVudCBvcGVy
YXRvciBhbmQgZGVzdHJ1Y3Rvci4KKworICAvLyBBcml0aG1ldGljIG9wZXJhdG9ycworICBJbnQx
MjhJbXBsJiBvcGVyYXRvcis9KEludDEyOEltcGwgb3RoZXIpOworICBJbnQxMjhJbXBsJiBvcGVy
YXRvci09KEludDEyOEltcGwgb3RoZXIpOworICBJbnQxMjhJbXBsJiBvcGVyYXRvcio9KEludDEy
OEltcGwgb3RoZXIpOworICBJbnQxMjhJbXBsJiBvcGVyYXRvci89KEludDEyOEltcGwgb3RoZXIp
OworICBJbnQxMjhJbXBsJiBvcGVyYXRvciU9KEludDEyOEltcGwgb3RoZXIpOworICBJbnQxMjhJ
bXBsIG9wZXJhdG9yKysoaW50KTsgIC8vIHBvc3RmaXggaW5jcmVtZW50OiBpKysKKyAgSW50MTI4
SW1wbCBvcGVyYXRvci0tKGludCk7ICAvLyBwb3N0Zml4IGRlY3JlbWVudDogaS0tCisgIEludDEy
OEltcGwmIG9wZXJhdG9yKysoKTsgICAgLy8gcHJlZml4IGluY3JlbWVudDogICsraQorICBJbnQx
MjhJbXBsJiBvcGVyYXRvci0tKCk7ICAgIC8vIHByZWZpeCBkZWNyZW1lbnQ6ICAtLWkKKyAgSW50
MTI4SW1wbCYgb3BlcmF0b3ImPShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3Bl
cmF0b3J8PShJbnQxMjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3JePShJbnQx
MjhJbXBsIG90aGVyKTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I8PD0oaW50IGFtb3VudCk7Cisg
IEludDEyOEltcGwmIG9wZXJhdG9yPj49KGludCBhbW91bnQpOworCisgIC8vIEludDEyOExvdzY0
KCkKKyAgLy8KKyAgLy8gUmV0dXJucyB0aGUgbG93ZXIgNjQtYml0IHZhbHVlIG9mIGEgYEludDEy
OEltcGxgIHZhbHVlLgorICBmcmllbmQgY29uc3RleHByIHVpbnQ2NF90IEludDEyOExvdzY0KElu
dDEyOEltcGwgdik7CisKKyAgLy8gSW50MTI4SGlnaDY0KCkKKyAgLy8KKyAgLy8gUmV0dXJucyB0
aGUgaGlnaGVyIDY0LWJpdCB2YWx1ZSBvZiBhIGBJbnQxMjhJbXBsYCB2YWx1ZS4KKyAgZnJpZW5k
IGNvbnN0ZXhwciBpbnQ2NF90IEludDEyOEhpZ2g2NChJbnQxMjhJbXBsIHYpOworCisgIC8vIE1h
a2VJbnQxMjgoKQorICAvLworICAvLyBDb25zdHJ1Y3RzIGEgYEludDEyOEltcGxgIG51bWVyaWMg
dmFsdWUgZnJvbSB0d28gNjQtYml0IGludGVnZXJzLiBOb3RlIHRoYXQKKyAgLy8gc2lnbmVkbmVz
cyBpcyBjb252ZXllZCBpbiB0aGUgdXBwZXIgYGhpZ2hgIHZhbHVlLgorICAvLworICAvLyAgIChJ
bnQxMjhJbXBsKDEpIDw8IDY0KSAqIGhpZ2ggKyBsb3cKKyAgLy8KKyAgLy8gTm90ZSB0aGF0IHRo
aXMgZmFjdG9yeSBmdW5jdGlvbiBpcyB0aGUgb25seSB3YXkgdG8gY29uc3RydWN0IGEgYEludDEy
OEltcGxgCisgIC8vIGZyb20gaW50ZWdlciB2YWx1ZXMgZ3JlYXRlciB0aGFuIDJeNjQgb3IgbGVz
cyB0aGFuIC0yXjY0LgorICAvLworICAvLyBFeGFtcGxlOgorICAvLworICAvLyAgIEludDEyOElt
cGwgYmlnID0gTWFrZUludDEyOCgxLCAwKTsKKyAgLy8gICBJbnQxMjhJbXBsIGJpZ19uID0gTWFr
ZUludDEyOCgtMSwgMCk7CisgIGZyaWVuZCBjb25zdGV4cHIgSW50MTI4SW1wbCBNYWtlSW50MTI4
KGludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KTsKKworICAvLyBJbnQxMjhNYXgoKQorICAvLwor
ICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIDEyOC1iaXQgc2lnbmVkIGludGVn
ZXIuCisgIGZyaWVuZCBjb25zdGV4cHIgSW50MTI4SW1wbCBJbnQxMjhNYXgoKTsKKworICAvLyBJ
bnQxMjhNaW4oKQorICAvLworICAvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlIGZvciBhIDEy
OC1iaXQgc2lnbmVkIGludGVnZXIuCisgIGZyaWVuZCBjb25zdGV4cHIgSW50MTI4SW1wbCBJbnQx
MjhNaW4oKTsKKworIHByaXZhdGU6CisgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGludDY0X3QgaGln
aCwgdWludDY0X3QgbG93KTsKKworI2lmIENQVShMSVRUTEVfRU5ESUFOKQorICB1aW50NjRfdCBs
b187CisgIGludDY0X3QgaGlfOworI2VsaWYgQ1BVKEJJR19FTkRJQU4pCisgIGludDY0X3QgaGlf
OworICB1aW50NjRfdCBsb187CisjZWxzZSAgLy8gYnl0ZSBvcmRlcgorI2Vycm9yICJVbnN1cHBv
cnRlZCBieXRlIG9yZGVyOiBtdXN0IGJlIGxpdHRsZS1lbmRpYW4gb3IgYmlnLWVuZGlhbi4iCisj
ZW5kaWYgIC8vIGJ5dGUgb3JkZXIKIH07CiAKK1dURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9zdHJl
YW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgSW50MTI4SW1wbCB2KTsKKworLy8gVE9E
TyhhYnNsLXRlYW0pIGFkZCBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYsIEludDEyOEltcGwpCisK
K2NvbnN0ZXhwciBJbnQxMjhJbXBsIEludDEyOE1heCgpIHsKKyAgcmV0dXJuIEludDEyOEltcGwo
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCkoKSwKKyAgICAgICAgICAgICAgICAo
c3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSk7Cit9CisKK2NvbnN0ZXhwciBJ
bnQxMjhJbXBsIEludDEyOE1pbigpIHsKKyAgcmV0dXJuIEludDEyOEltcGwoKHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50NjRfdD46Om1pbikoKSwgMCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXVEYK
KworLy8gU3BlY2lhbGl6ZWQgbnVtZXJpY19saW1pdHMgZm9yIEludDEyOEltcGwuCituYW1lc3Bh
Y2Ugc3RkIHsKK3RlbXBsYXRlIDw+CitjbGFzcyBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOElt
cGw+IHsKKyBwdWJsaWM6CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19zaWduZWQgPSB0cnVlOworICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc19leGFjdCA9IHRydWU7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz
ZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7Cisg
IHN0YXRpYyBjb25zdGV4cHIgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f
YWJzZW50OworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7
CisgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2llYzU1OSA9IGZhbHNl
OworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CisgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
ZGlnaXRzID0gMTI3OworICBzdGF0aWMgY29uc3RleHByIGludCBkaWdpdHMxMCA9IDM4OworICBz
dGF0aWMgY29uc3RleHByIGludCBtYXhfZGlnaXRzMTAgPSAwOworICBzdGF0aWMgY29uc3RleHBy
IGludCByYWRpeCA9IDI7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbl9leHBvbmVudCA9IDA7
CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbl9leHBvbmVudDEwID0gMDsKKyAgc3RhdGljIGNv
bnN0ZXhwciBpbnQgbWF4X2V4cG9uZW50ID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4
X2V4cG9uZW50MTAgPSAwOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgdHJhcHMgPSBudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46OnRyYXBzOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CisKKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwg
KG1pbikoKSB7IHJldHVybiBXVEY6OkludDEyOE1pbigpOyB9CisgIHN0YXRpYyBjb25zdGV4cHIg
V1RGOjpJbnQxMjhJbXBsIGxvd2VzdCgpIHsgcmV0dXJuIFdURjo6SW50MTI4TWluKCk7IH0KKyAg
c3RhdGljIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwgKG1heCkoKSB7IHJldHVybiBXVEY6Oklu
dDEyOE1heCgpOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIGVwc2lsb24o
KSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIHJvdW5k
X2Vycm9yKCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4SW1w
bCBpbmZpbml0eSgpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OkludDEy
OEltcGwgcXVpZXRfTmFOKCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6
SW50MTI4SW1wbCBzaWduYWxpbmdfTmFOKCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMgY29uc3Rl
eHByIFdURjo6SW50MTI4SW1wbCBkZW5vcm1fbWluKCkgeyByZXR1cm4gMDsgfQorfTsKK30gIC8v
IG5hbWVzcGFjZSBzdGQKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAg
ICAgICAgIEltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9sbG93CisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorbmFtZXNwYWNlIFdURiB7CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbCBNYWtlVUludDEyOCh1
aW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpIHsKKyAgcmV0dXJuIFVJbnQxMjhJbXBsKGhpZ2gs
IGxvdyk7Cit9CisKKy8vIEFzc2lnbm1lbnQgZnJvbSBpbnRlZ2VyIHR5cGVzLgorCitpbmxpbmUg
VUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcj0oaW50IHYpIHsgcmV0dXJuICp0aGlz
ID0gVUludDEyOEltcGwodik7IH0KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6
b3BlcmF0b3I9KHVuc2lnbmVkIGludCB2KSB7CisgIHJldHVybiAqdGhpcyA9IFVJbnQxMjhJbXBs
KHYpOworfQorCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcj0obG9u
ZyB2KSB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiAqdGhpcyA9IFVJbnQxMjhJ
bXBsKHYpOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2lubGluZSBVSW50
MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yPSh1bnNpZ25lZCBsb25nIHYpIHsKKyAgcmV0
dXJuICp0aGlzID0gVUludDEyOEltcGwodik7Cit9CisKKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRp
bWUvaW50KQoraW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KGxvbmcg
bG9uZyB2KSB7CisgIHJldHVybiAqdGhpcyA9IFVJbnQxMjhJbXBsKHYpOworfQorCisvLyBOT0xJ
TlRORVhUTElORShydW50aW1lL2ludCkKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6
Om9wZXJhdG9yPSh1bnNpZ25lZCBsb25nIGxvbmcgdikgeworICByZXR1cm4gKnRoaXMgPSBVSW50
MTI4SW1wbCh2KTsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0
b3I9KEludDEyOEltcGwgdikgeworICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2KTsKK30K
KworLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMuCisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbCBvcGVy
YXRvcjw8KFVJbnQxMjhJbXBsIGxocywgaW50IGFtb3VudCk7Citjb25zdGV4cHIgVUludDEyOElt
cGwgb3BlcmF0b3I+PihVSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpOworY29uc3RleHByIFVJ
bnQxMjhJbXBsIG9wZXJhdG9yKyhVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocyk7Citj
b25zdGV4cHIgVUludDEyOEltcGwgb3BlcmF0b3ItKFVJbnQxMjhJbXBsIGxocywgVUludDEyOElt
cGwgcmhzKTsKK1VJbnQxMjhJbXBsIG9wZXJhdG9yKihVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJ
bXBsIHJocyk7CitXVEZfRVhQT1JUX1BSSVZBVEUgVUludDEyOEltcGwgb3BlcmF0b3IvKFVJbnQx
MjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKTsKK1dURl9FWFBPUlRfUFJJVkFURSBVSW50MTI4
SW1wbCBvcGVyYXRvciUoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpOworCitpbmxp
bmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcjw8PShpbnQgYW1vdW50KSB7Cisg
ICp0aGlzID0gKnRoaXMgPDwgYW1vdW50OworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBV
SW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yPj49KGludCBhbW91bnQpIHsKKyAgKnRo
aXMgPSAqdGhpcyA+PiBhbW91bnQ7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQx
MjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3IrPShVSW50MTI4SW1wbCBvdGhlcikgeworICAq
dGhpcyA9ICp0aGlzICsgb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQx
MjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3ItPShVSW50MTI4SW1wbCBvdGhlcikgeworICAq
dGhpcyA9ICp0aGlzIC0gb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQx
MjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3IqPShVSW50MTI4SW1wbCBvdGhlcikgeworICAq
dGhpcyA9ICp0aGlzICogb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQx
MjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3IvPShVSW50MTI4SW1wbCBvdGhlcikgeworICAq
dGhpcyA9ICp0aGlzIC8gb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworaW5saW5lIFVJbnQx
MjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3IlPShVSW50MTI4SW1wbCBvdGhlcikgeworICAq
dGhpcyA9ICp0aGlzICUgb3RoZXI7CisgIHJldHVybiAqdGhpczsKK30KKworY29uc3RleHByIHVp
bnQ2NF90IFVJbnQxMjhMb3c2NChVSW50MTI4SW1wbCB2KSB7IHJldHVybiB2LmxvXzsgfQorCitj
b25zdGV4cHIgdWludDY0X3QgVUludDEyOEhpZ2g2NChVSW50MTI4SW1wbCB2KSB7IHJldHVybiB2
LmhpXzsgfQorCisvLyBDb25zdHJ1Y3RvcnMgZnJvbSBpbnRlZ2VyIHR5cGVzLgorCisjaWYgQ1BV
KExJVFRMRV9FTkRJQU4pCisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwodWlu
dDY0X3QgaGlnaCwgdWludDY0X3QgbG93KQorICAgIDogbG9fe2xvd30sIGhpX3toaWdofSB7fQor
Citjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKGludCB2KQorICAgIDogbG9fe3N0
YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0sCisgICAgICBoaV97diA8IDAgPyAoc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46Om1heCkoKSA6IDB9IHt9Citjb25zdGV4cHIgVUludDEyOEltcGw6
OlVJbnQxMjhJbXBsKGxvbmcgdikgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgICA6IGxvX3tz
dGF0aWNfY2FzdDx1aW50NjRfdD4odil9LAorICAgICAgaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDY0X3Q+OjptYXgpKCkgOiAwfSB7fQorY29uc3RleHByIFVJbnQxMjhJbXBs
OjpVSW50MTI4SW1wbChsb25nIGxvbmcgdikgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgICA6
IGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9LAorICAgICAgaGlfe3YgPCAwID8gKHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgpKCkgOiAwfSB7fQorCitjb25zdGV4cHIgVUlu
dDEyOEltcGw6OlVJbnQxMjhJbXBsKHVuc2lnbmVkIGludCB2KSA6IGxvX3t2fSwgaGlfezB9IHt9
CisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6
VUludDEyOEltcGwodW5zaWduZWQgbG9uZyB2KSA6IGxvX3t2fSwgaGlfezB9IHt9CisvLyBOT0xJ
TlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOElt
cGwodW5zaWduZWQgbG9uZyBsb25nIHYpIDogbG9fe3Z9LCBoaV97MH0ge30KKworY29uc3RleHBy
IFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChJbnQxMjhJbXBsIHYpCisgICAgOiBsb197SW50MTI4
TG93NjQodil9LCBoaV97c3RhdGljX2Nhc3Q8dWludDY0X3Q+KEludDEyOEhpZ2g2NCh2KSl9IHt9
CisKKyNlbGlmIENQVShCSUdfRU5ESUFOKQorCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQx
MjhJbXBsKHVpbnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykKKyAgICA6IGhpX3toaWdofSwgbG9f
e2xvd30ge30KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChpbnQgdikKKyAg
ICA6IGhpX3t2IDwgMCA/IChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpIDog
MH0sCisgICAgICBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSB7fQorY29uc3RleHByIFVJ
bnQxMjhJbXBsOjpVSW50MTI4SW1wbChsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisg
ICAgOiBoaV97diA8IDAgPyAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSA6
IDB9LAorICAgICAgbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0ge30KK2NvbnN0ZXhwciBV
SW50MTI4SW1wbDo6VUludDEyOEltcGwobG9uZyBsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9p
bnQpCisgICAgOiBoaV97diA8IDAgPyAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1h
eCkoKSA6IDB9LAorICAgICAgbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0ge30KKworY29u
c3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbCh1bnNpZ25lZCBpbnQgdikgOiBoaV97MH0s
IGxvX3t2fSB7fQorLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUlu
dDEyOEltcGw6OlVJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgdikgOiBoaV97MH0sIGxvX3t2fSB7
fQorLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6
OlVJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgbG9uZyB2KSA6IGhpX3swfSwgbG9fe3Z9IHt9CisK
K2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwoSW50MTI4SW1wbCB2KQorICAgIDog
aGlfe3N0YXRpY19jYXN0PHVpbnQ2NF90PihJbnQxMjhIaWdoNjQodikpfSwgbG9fe0ludDEyOExv
dzY0KHYpfSB7fQorCisjZWxzZSAgLy8gYnl0ZSBvcmRlcgorI2Vycm9yICJVbnN1cHBvcnRlZCBi
eXRlIG9yZGVyOiBtdXN0IGJlIGxpdHRsZS1lbmRpYW4gb3IgYmlnLWVuZGlhbi4iCisjZW5kaWYg
IC8vIGJ5dGUgb3JkZXIKKworLy8gQ29udmVyc2lvbiBvcGVyYXRvcnMgdG8gaW50ZWdlciB0eXBl
cy4KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbG9fIHx8IGhpXzsgfQorCitjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIGNoYXIo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPihsb18pOyB9CisKK2NvbnN0ZXhwciBV
SW50MTI4SW1wbDo6b3BlcmF0b3Igc2lnbmVkIGNoYXIoKSBjb25zdCB7CisgIHJldHVybiBzdGF0
aWNfY2FzdDxzaWduZWQgY2hhcj4obG9fKTsKK30KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBjaGFyKCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4obG9fKTsKK30KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBj
aGFyMTZfdCgpIGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIxNl90Pihsb18pOwor
fQorCitjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIGNoYXIzMl90KCkgY29uc3Qgewor
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcjMyX3Q+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBVSW50
MTI4SW1wbDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UKCkgY29uc3QgeworICByZXR1
cm4gc3RhdGljX2Nhc3Q8QUJTTF9JTlRFUk5BTF9XQ0hBUl9UPihsb18pOworfQorCisvLyBOT0xJ
TlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3Ig
c2hvcnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4obG9fKTsgfQorCitjb25z
dGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIHNob3J0KCkgY29uc3QgeyAgLy8g
Tk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+
KGxvXyk7ICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorfQorCitjb25zdGV4cHIg
VUludDEyOEltcGw6Om9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4obG9fKTsgfQorCitjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGlu
dCgpIGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4obG9fKTsKK30K
KworLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgVUludDEyOEltcGw6
Om9wZXJhdG9yIGxvbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPihsb18pOyB9
CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5zaWduZWQgbG9uZygpIGNvbnN0
IHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGxvXyk7ICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorfQorCitjb25z
dGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIGxvbmcgbG9uZygpIGNvbnN0IHsgIC8vIE5PTElO
VChydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obG9fKTsgICAg
ICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1w
bDo6b3BlcmF0b3IgdW5zaWduZWQgbG9uZyBsb25nKCkgY29uc3QgeyAgLy8gTk9MSU5UKHJ1bnRp
bWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihsb18pOyAg
ICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKK30KKworLy8gQ29udmVyc2lvbiBvcGVy
YXRvcnMgdG8gZmxvYXRpbmcgcG9pbnQgdHlwZXMuCisKK2lubGluZSBVSW50MTI4SW1wbDo6b3Bl
cmF0b3IgZmxvYXQoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obG9fKSAr
IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhpXyksIDY0KTsKK30KKworaW5saW5lIFVJ
bnQxMjhJbXBsOjpvcGVyYXRvciBkb3VibGUoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KGxvXykgKyBzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PGRvdWJsZT4oaGlfKSwgNjQp
OworfQorCitpbmxpbmUgVUludDEyOEltcGw6Om9wZXJhdG9yIGxvbmcgZG91YmxlKCkgY29uc3Qg
eworICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KGxvXykgKworICAgICAgICAgc3Rk
OjpsZGV4cChzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oaGlfKSwgNjQpOworfQorCisvLyBDb21w
YXJpc29uIG9wZXJhdG9ycy4KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShVSW50MTI4SW1w
bCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gKFVJbnQxMjhMb3c2NChsaHMpID09
IFVJbnQxMjhMb3c2NChyaHMpICYmCisgICAgICAgICAgVUludDEyOEhpZ2g2NChsaHMpID09IFVJ
bnQxMjhIaWdoNjQocmhzKSk7Cit9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oVUludDEy
OEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpIHsgcmV0dXJuICEobGhzID09IHJocyk7IH0KKwor
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I8KFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhz
KSB7CisgIHJldHVybiAoVUludDEyOEhpZ2g2NChsaHMpID09IFVJbnQxMjhIaWdoNjQocmhzKSkK
KyAgICAgICAgICAgICA/IChVSW50MTI4TG93NjQobGhzKSA8IFVJbnQxMjhMb3c2NChyaHMpKQor
ICAgICAgICAgICAgIDogKFVJbnQxMjhIaWdoNjQobGhzKSA8IFVJbnQxMjhIaWdoNjQocmhzKSk7
Cit9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPihVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJ
bXBsIHJocykgeyByZXR1cm4gcmhzIDwgbGhzOyB9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9y
PD0oVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpIHsgcmV0dXJuICEocmhzIDwgbGhz
KTsgfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KFVJbnQxMjhJbXBsIGxocywgVUludDEy
OEltcGwgcmhzKSB7IHJldHVybiAhKGxocyA8IHJocyk7IH0KKworLy8gVW5hcnkgb3BlcmF0b3Jz
LgorCitjb25zdGV4cHIgaW5saW5lIFVJbnQxMjhJbXBsIG9wZXJhdG9yKyhVSW50MTI4SW1wbCB2
YWwpIHsKKyAgcmV0dXJuIHZhbDsKK30KKworY29uc3RleHByIGlubGluZSBJbnQxMjhJbXBsIG9w
ZXJhdG9yKyhJbnQxMjhJbXBsIHZhbCkgeworICByZXR1cm4gdmFsOworfQorCitjb25zdGV4cHIg
VUludDEyOEltcGwgb3BlcmF0b3ItKFVJbnQxMjhJbXBsIHZhbCkgeworICByZXR1cm4gTWFrZVVJ
bnQxMjgoCisgICAgICB+VUludDEyOEhpZ2g2NCh2YWwpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4oVUludDEyOExvdzY0KHZhbCkgPT0gMCksCisgICAgICB+VUludDEyOExvdzY0KHZhbCkg
KyAxKTsKK30KKworY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yIShVSW50MTI4SW1wbCB2
YWwpIHsKKyAgcmV0dXJuICFVSW50MTI4SGlnaDY0KHZhbCkgJiYgIVVJbnQxMjhMb3c2NCh2YWwp
OworfQorCisvLyBMb2dpY2FsIG9wZXJhdG9ycy4KKworY29uc3RleHByIGlubGluZSBVSW50MTI4
SW1wbCBvcGVyYXRvcn4oVUludDEyOEltcGwgdmFsKSB7CisgIHJldHVybiBNYWtlVUludDEyOCh+
VUludDEyOEhpZ2g2NCh2YWwpLCB+VUludDEyOExvdzY0KHZhbCkpOworfQorCitjb25zdGV4cHIg
aW5saW5lIFVJbnQxMjhJbXBsIG9wZXJhdG9yfChVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBs
IHJocykgeworICByZXR1cm4gTWFrZVVJbnQxMjgoVUludDEyOEhpZ2g2NChsaHMpIHwgVUludDEy
OEhpZ2g2NChyaHMpLAorICAgICAgICAgICAgICAgICAgICAgVUludDEyOExvdzY0KGxocykgfCBV
SW50MTI4TG93NjQocmhzKSk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgVUludDEyOEltcGwgb3Bl
cmF0b3ImKFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtl
VUludDEyOChVSW50MTI4SGlnaDY0KGxocykgJiBVSW50MTI4SGlnaDY0KHJocyksCisgICAgICAg
ICAgICAgICAgICAgICBVSW50MTI4TG93NjQobGhzKSAmIFVJbnQxMjhMb3c2NChyaHMpKTsKK30K
KworY29uc3RleHByIGlubGluZSBVSW50MTI4SW1wbCBvcGVyYXRvcl4oVUludDEyOEltcGwgbGhz
LCBVSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQo
bGhzKSBeIFVJbnQxMjhIaWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgICAgIFVJbnQxMjhM
b3c2NChsaHMpIF4gVUludDEyOExvdzY0KHJocykpOworfQorCitpbmxpbmUgVUludDEyOEltcGwm
IFVJbnQxMjhJbXBsOjpvcGVyYXRvcnw9KFVJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0g
KnRoaXMgfCBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgVUludDEyOEltcGwm
IFVJbnQxMjhJbXBsOjpvcGVyYXRvciY9KFVJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0g
KnRoaXMgJiBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgVUludDEyOEltcGwm
IFVJbnQxMjhJbXBsOjpvcGVyYXRvcl49KFVJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0g
KnRoaXMgXiBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCisvLyBBcml0aG1ldGljIG9wZXJh
dG9ycy4KKworY29uc3RleHByIFVJbnQxMjhJbXBsIG9wZXJhdG9yPDwoVUludDEyOEltcGwgbGhz
LCBpbnQgYW1vdW50KSB7CisgIC8vIHVpbnQ2NF90IHNoaWZ0cyBvZiA+PSA2NCBhcmUgdW5kZWZp
bmVkLCBzbyB3ZSB3aWxsIG5lZWQgc29tZQorICAvLyBzcGVjaWFsLWNhc2luZy4KKyAgcmV0dXJu
IGFtb3VudCA+PSA2NCA/IE1ha2VVSW50MTI4KFVJbnQxMjhMb3c2NChsaHMpIDw8IChhbW91bnQg
LSA2NCksIDApCisgICAgICAgICA6IGFtb3VudCA9PSAwID8gbGhzCisgICAgICAgICAgICAgICAg
ICAgICAgIDogTWFrZVVJbnQxMjgoKFVJbnQxMjhIaWdoNjQobGhzKSA8PCBhbW91bnQpIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVJbnQxMjhMb3c2NChsaHMp
ID4+ICg2NCAtIGFtb3VudCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVJbnQxMjhMb3c2NChsaHMpIDw8IGFtb3VudCk7Cit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1w
bCBvcGVyYXRvcj4+KFVJbnQxMjhJbXBsIGxocywgaW50IGFtb3VudCkgeworICAvLyB1aW50NjRf
dCBzaGlmdHMgb2YgPj0gNjQgYXJlIHVuZGVmaW5lZCwgc28gd2Ugd2lsbCBuZWVkIHNvbWUKKyAg
Ly8gc3BlY2lhbC1jYXNpbmcuCisgIHJldHVybiBhbW91bnQgPj0gNjQgPyBNYWtlVUludDEyOCgw
LCBVSW50MTI4SGlnaDY0KGxocykgPj4gKGFtb3VudCAtIDY0KSkKKyAgICAgICAgIDogYW1vdW50
ID09IDAgPyBsaHMKKyAgICAgICAgICAgICAgICAgICAgICAgOiBNYWtlVUludDEyOChVSW50MTI4
SGlnaDY0KGxocykgPj4gYW1vdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChVSW50MTI4TG93NjQobGhzKSA+PiBhbW91bnQpIHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKFVJbnQxMjhIaWdoNjQobGhzKSA8PCAoNjQgLSBhbW91bnQp
KSk7Cit9CisKK25hbWVzcGFjZSBpbnQxMjhfaW50ZXJuYWwgeworY29uc3RleHByIFVJbnQxMjhJ
bXBsIEFkZFJlc3VsdChVSW50MTI4SW1wbCByZXN1bHQsIFVJbnQxMjhJbXBsIGxocykgeworICAv
LyBjaGVjayBmb3IgY2FycnkKKyAgcmV0dXJuIChVSW50MTI4TG93NjQocmVzdWx0KSA8IFVJbnQx
MjhMb3c2NChsaHMpKQorICAgICAgICAgICAgID8gTWFrZVVJbnQxMjgoVUludDEyOEhpZ2g2NChy
ZXN1bHQpICsgMSwgVUludDEyOExvdzY0KHJlc3VsdCkpCisgICAgICAgICAgICAgOiByZXN1bHQ7
Cit9Cit9ICAvLyBuYW1lc3BhY2UgaW50MTI4X2ludGVybmFsCisKK2NvbnN0ZXhwciBVSW50MTI4
SW1wbCBvcGVyYXRvcisoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0
dXJuIGludDEyOF9pbnRlcm5hbDo6QWRkUmVzdWx0KAorICAgICAgTWFrZVVJbnQxMjgoVUludDEy
OEhpZ2g2NChsaHMpICsgVUludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAgICAgICAgICAgVUlu
dDEyOExvdzY0KGxocykgKyBVSW50MTI4TG93NjQocmhzKSksCisgICAgICBsaHMpOworfQorCitu
YW1lc3BhY2UgaW50MTI4X2ludGVybmFsIHsKK2NvbnN0ZXhwciBVSW50MTI4SW1wbCBTdWJzdHJ1
Y3RSZXN1bHQoVUludDEyOEltcGwgcmVzdWx0LCBVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBs
IHJocykgeworICAvLyBjaGVjayBmb3IgY2FycnkKKyAgcmV0dXJuIChVSW50MTI4TG93NjQobGhz
KSA8IFVJbnQxMjhMb3c2NChyaHMpKQorICAgICAgICAgICAgID8gTWFrZVVJbnQxMjgoVUludDEy
OEhpZ2g2NChyZXN1bHQpIC0gMSwgVUludDEyOExvdzY0KHJlc3VsdCkpCisgICAgICAgICAgICAg
OiByZXN1bHQ7Cit9Cit9ICAvLyBuYW1lc3BhY2UgaW50MTI4X2ludGVybmFsCisKK2NvbnN0ZXhw
ciBVSW50MTI4SW1wbCBvcGVyYXRvci0oVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMp
IHsKKyAgcmV0dXJuIGludDEyOF9pbnRlcm5hbDo6U3Vic3RydWN0UmVzdWx0KAorICAgICAgTWFr
ZVVJbnQxMjgoVUludDEyOEhpZ2g2NChsaHMpIC0gVUludDEyOEhpZ2g2NChyaHMpLAorICAgICAg
ICAgICAgICAgICAgVUludDEyOExvdzY0KGxocykgLSBVSW50MTI4TG93NjQocmhzKSksCisgICAg
ICBsaHMsIHJocyk7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCBvcGVyYXRvciooVUludDEyOElt
cGwgbGhzLCBVSW50MTI4SW1wbCByaHMpIHsKKyNpZiBDT01QSUxFUihNU1ZDKSAmJiBDUFUoWDg2
XzY0KQorICB1aW50NjRfdCBjYXJyeTsKKyAgdWludDY0X3QgbG93ID0gX3VtdWwxMjgoVUludDEy
OExvdzY0KGxocyksIFVJbnQxMjhMb3c2NChyaHMpLCAmY2FycnkpOworICByZXR1cm4gTWFrZVVJ
bnQxMjgoVUludDEyOExvdzY0KGxocykgKiBVSW50MTI4SGlnaDY0KHJocykgKworICAgICAgICAg
ICAgICAgICAgICAgICAgIFVJbnQxMjhIaWdoNjQobGhzKSAqIFVJbnQxMjhMb3c2NChyaHMpICsg
Y2FycnksCisgICAgICAgICAgICAgICAgICAgICBsb3cpOworI2Vsc2UgICAvLyBBQlNMX0hBVkVf
SU5UUklOU0lDMTI4CisgIHVpbnQ2NF90IGEzMiA9IFVJbnQxMjhMb3c2NChsaHMpID4+IDMyOwor
ICB1aW50NjRfdCBhMDAgPSBVSW50MTI4TG93NjQobGhzKSAmIDB4ZmZmZmZmZmY7CisgIHVpbnQ2
NF90IGIzMiA9IFVJbnQxMjhMb3c2NChyaHMpID4+IDMyOworICB1aW50NjRfdCBiMDAgPSBVSW50
MTI4TG93NjQocmhzKSAmIDB4ZmZmZmZmZmY7CisgIFVJbnQxMjhJbXBsIHJlc3VsdCA9CisgICAg
ICBNYWtlVUludDEyOChVSW50MTI4SGlnaDY0KGxocykgKiBVSW50MTI4TG93NjQocmhzKSArCisg
ICAgICAgICAgICAgICAgICAgICAgVUludDEyOExvdzY0KGxocykgKiBVSW50MTI4SGlnaDY0KHJo
cykgKyBhMzIgKiBiMzIsCisgICAgICAgICAgICAgICAgICBhMDAgKiBiMDApOworICByZXN1bHQg
Kz0gVUludDEyOEltcGwoYTMyICogYjAwKSA8PCAzMjsKKyAgcmVzdWx0ICs9IFVJbnQxMjhJbXBs
KGEwMCAqIGIzMikgPDwgMzI7CisgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKK30KKworLy8gSW5j
cmVtZW50L2RlY3JlbWVudCBvcGVyYXRvcnMuCisKK2lubGluZSBVSW50MTI4SW1wbCBVSW50MTI4
SW1wbDo6b3BlcmF0b3IrKyhpbnQpIHsKKyAgVUludDEyOEltcGwgdG1wKCp0aGlzKTsKKyAgKnRo
aXMgKz0gMTsKKyAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsIFVJbnQxMjhJ
bXBsOjpvcGVyYXRvci0tKGludCkgeworICBVSW50MTI4SW1wbCB0bXAoKnRoaXMpOworICAqdGhp
cyAtPSAxOworICByZXR1cm4gdG1wOworfQorCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJ
bXBsOjpvcGVyYXRvcisrKCkgeworICAqdGhpcyArPSAxOworICByZXR1cm4gKnRoaXM7Cit9CisK
K2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yLS0oKSB7CisgICp0aGlz
IC09IDE7CisgIHJldHVybiAqdGhpczsKK30KKworY29uc3RleHByIEludDEyOEltcGwgTWFrZUlu
dDEyOChpbnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykgeworICByZXR1cm4gSW50MTI4SW1wbCho
aWdoLCBsb3cpOworfQorCisvLyBBc3NpZ25tZW50IGZyb20gaW50ZWdlciB0eXBlcy4KK2lubGlu
ZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcj0oaW50IHYpIHsKKyAgcmV0dXJuICp0
aGlzID0gSW50MTI4SW1wbCh2KTsKK30KKworaW5saW5lIEludDEyOEltcGwmIEludDEyOEltcGw6
Om9wZXJhdG9yPSh1bnNpZ25lZCBpbnQgdikgeworICByZXR1cm4gKnRoaXMgPSBJbnQxMjhJbXBs
KHYpOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KGxvbmcg
dikgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gKnRoaXMgPSBJbnQxMjhJbXBs
KHYpOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2lubGluZSBJbnQxMjhJ
bXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcj0odW5zaWduZWQgbG9uZyB2KSB7CisgIHJldHVybiAq
dGhpcyA9IEludDEyOEltcGwodik7Cit9CisKKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50
KQoraW5saW5lIEludDEyOEltcGwmIEludDEyOEltcGw6Om9wZXJhdG9yPShsb25nIGxvbmcgdikg
eworICByZXR1cm4gKnRoaXMgPSBJbnQxMjhJbXBsKHYpOworfQorCisvLyBOT0xJTlRORVhUTElO
RShydW50aW1lL2ludCkKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcj0o
dW5zaWduZWQgbG9uZyBsb25nIHYpIHsKKyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2KTsK
K30KKworLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMuCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVy
YXRvci0oSW50MTI4SW1wbCB2KTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yKyhJbnQx
MjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3ItKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocyk7CitJbnQxMjhJbXBsIG9wZXJhdG9y
KihJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworV1RGX0VYUE9SVF9QUklWQVRFIElu
dDEyOEltcGwgb3BlcmF0b3IvKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocyk7CitXVEZf
RVhQT1JUX1BSSVZBVEUgSW50MTI4SW1wbCBvcGVyYXRvciUoSW50MTI4SW1wbCBsaHMsIEludDEy
OEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yfChJbnQxMjhJbXBsIGxo
cywgSW50MTI4SW1wbCByaHMpOworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3ImKEludDEy
OEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocyk7Citjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRv
cl4oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBs
IG9wZXJhdG9yPDwoSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpOworY29uc3RleHByIEludDEy
OEltcGwgb3BlcmF0b3I+PihJbnQxMjhJbXBsIGxocywgaW50IGFtb3VudCk7CisKK2lubGluZSBJ
bnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcis9KEludDEyOEltcGwgb3RoZXIpIHsKKyAg
KnRoaXMgPSAqdGhpcyArIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQx
MjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvci09KEludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRo
aXMgPSAqdGhpcyAtIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJ
bXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcio9KEludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRoaXMg
PSAqdGhpcyAqIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBs
JiBJbnQxMjhJbXBsOjpvcGVyYXRvci89KEludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRoaXMgPSAq
dGhpcyAvIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJ
bnQxMjhJbXBsOjpvcGVyYXRvciU9KEludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhp
cyAlIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQx
MjhJbXBsOjpvcGVyYXRvcnw9KEludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyB8
IG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJ
bXBsOjpvcGVyYXRvciY9KEludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyAmIG90
aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBs
OjpvcGVyYXRvcl49KEludDEyOEltcGwgb3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyBeIG90aGVy
OworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpv
cGVyYXRvcjw8PShpbnQgYW1vdW50KSB7CisgICp0aGlzID0gKnRoaXMgPDwgYW1vdW50OworICBy
ZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRv
cj4+PShpbnQgYW1vdW50KSB7CisgICp0aGlzID0gKnRoaXMgPj4gYW1vdW50OworICByZXR1cm4g
KnRoaXM7Cit9CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb24gZm9yIGNvbXBhcmlzb24gb3BlcmF0
b3JzLgorY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShJbnQxMjhJbXBsIGxocywgSW50MTI4SW1w
bCByaHMpOworCituYW1lc3BhY2UgaW50MTI4X2ludGVybmFsIHsKKworLy8gQ2FzdHMgZnJvbSB1
bnNpZ25lZCB0byBzaWduZWQgd2hpbGUgcHJlc2VydmluZyB0aGUgdW5kZXJseWluZyBiaW5hcnkK
Ky8vIHJlcHJlc2VudGF0aW9uLgorY29uc3RleHByIGludDY0X3QgQml0Q2FzdFRvU2lnbmVkKHVp
bnQ2NF90IHYpIHsKKyAgLy8gQ2FzdGluZyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHRvIGEgc2lnbmVk
IGludGVnZXIgb2YgdGhlIHNhbWUKKyAgLy8gd2lkdGggaXMgaW1wbGVtZW50YXRpb24gZGVmaW5l
ZCBiZWhhdmlvciBpZiB0aGUgc291cmNlIHZhbHVlIHdvdWxkIG5vdCBmaXQKKyAgLy8gaW4gdGhl
IGRlc3RpbmF0aW9uIHR5cGUuIFdlIHN0ZXAgYXJvdW5kIGl0IHdpdGggYSByb3VuZHRyaXAgYml0
d2lzZSBub3QKKyAgLy8gb3BlcmF0aW9uIHRvIG1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIHJlbWFp
bnMgY29uc3RleHByLiBDbGFuZywgR0NDLCBhbmQKKyAgLy8gTVNWQyBvcHRpbWl6ZSB0aGlzIHRv
IGEgbm8tb3Agb24geDg2LTY0LgorICByZXR1cm4gdiAmICh1aW50NjRfdHsxfSA8PCA2MykgPyB+
c3RhdGljX2Nhc3Q8aW50NjRfdD4ofnYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHYpOworfQorCit9ICAvLyBuYW1lc3BhY2UgaW50MTI4
X2ludGVybmFsCisKKy8vICNpbmNsdWRlICJhYnNsL251bWVyaWMvaW50MTI4X25vX2ludHJpbnNp
Yy5pbmMiICAvLyBJV1lVIHByYWdtYTogZXhwb3J0CisKK2NvbnN0ZXhwciB1aW50NjRfdCBJbnQx
MjhMb3c2NChJbnQxMjhJbXBsIHYpIHsgcmV0dXJuIHYubG9fOyB9CisKK2NvbnN0ZXhwciBpbnQ2
NF90IEludDEyOEhpZ2g2NChJbnQxMjhJbXBsIHYpIHsgcmV0dXJuIHYuaGlfOyB9CisKKyNpZiBD
UFUoTElUVExFX0VORElBTikKKworY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwoaW50
NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpIDoKKyAgICBsb18obG93KSwgaGlfKGhpZ2gpIHt9CisK
K2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGludCB2KQorICAgIDogbG9fe3N0YXRp
Y19jYXN0PHVpbnQ2NF90Pih2KX0sIGhpX3t2IDwgMCA/IH5pbnQ2NF90ezB9IDogMH0ge30KK2Nv
bnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGxvbmcgdikgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgICA6IGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9LCBoaV97diA8IDAgPyB+
aW50NjRfdHswfSA6IDB9IHt9Citjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChsb25n
IGxvbmcgdikgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgICA6IGxvX3tzdGF0aWNfY2FzdDx1
aW50NjRfdD4odil9LCBoaV97diA8IDAgPyB+aW50NjRfdHswfSA6IDB9IHt9CisKK2NvbnN0ZXhw
ciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKHVuc2lnbmVkIGludCB2KSA6IGxvX3t2fSwgaGlfezB9
IHt9CisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0ZXhwciBJbnQxMjhJbXBs
OjpJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgdikgOiBsb197dn0sIGhpX3swfSB7fQorLy8gTk9M
SU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1w
bCh1bnNpZ25lZCBsb25nIGxvbmcgdikgOiBsb197dn0sIGhpX3swfSB7fQorCitjb25zdGV4cHIg
SW50MTI4SW1wbDo6SW50MTI4SW1wbChVSW50MTI4SW1wbCB2KQorICAgIDogbG9fe1VJbnQxMjhM
b3c2NCh2KX0sIGhpX3tzdGF0aWNfY2FzdDxpbnQ2NF90PihVSW50MTI4SGlnaDY0KHYpKX0ge30K
KworI2VsaWYgQ1BVKEJJR19FTkRJQU4pCisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJ
bXBsKGludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KSA6CisgICAgaGlfe2hpZ2h9LCBsb197bG93
fSB7fQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChpbnQgdikKKyAgICA6IGhp
X3t2IDwgMCA/IH5pbnQ2NF90ezB9IDogMH0sIGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4odil9
IHt9Citjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChsb25nIHYpICAvLyBOT0xJTlQo
cnVudGltZS9pbnQpCisgICAgOiBoaV97diA8IDAgPyB+aW50NjRfdHswfSA6IDB9LCBsb197c3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHYpfSB7fQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOElt
cGwobG9uZyBsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBoaV97diA8IDAg
PyB+aW50NjRfdHswfSA6IDB9LCBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSB7fQorCitj
b25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbCh1bnNpZ25lZCBpbnQgdikgOiBoaV97MH0s
IGxvX3t2fSB7fQorLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgSW50
MTI4SW1wbDo6SW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpIDogaGlfezB9LCBsb197dn0ge30K
Ky8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIEludDEyOEltcGw6Oklu
dDEyOEltcGwodW5zaWduZWQgbG9uZyBsb25nIHYpIDogaGlfezB9LCBsb197dn0ge30KKworY29u
c3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwoVUludDEyOEltcGwgdikKKyAgICA6IGhpX3tz
dGF0aWNfY2FzdDxpbnQ2NF90PihVSW50MTI4SGlnaDY0KHYpKX0sIGxvX3tVSW50MTI4TG93NjQo
dil9IHt9CisKKyNlbHNlICAvLyBieXRlIG9yZGVyCisjZXJyb3IgIlVuc3VwcG9ydGVkIGJ5dGUg
b3JkZXI6IG11c3QgYmUgbGl0dGxlLWVuZGlhbiBvciBiaWctZW5kaWFuLiIKKyNlbmRpZiAgLy8g
Ynl0ZSBvcmRlcgorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIGxvXyB8fCBoaV87IH0KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9y
IGNoYXIoKSBjb25zdCB7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigqdGhpcykpOworfQor
Citjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3Igc2lnbmVkIGNoYXIoKSBjb25zdCB7Cisg
IC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8c2ln
bmVkIGNoYXI+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsKK30KKworY29uc3RleHBy
IEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGNoYXIoKSBjb25zdCB7CisgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihsb18pOworfQorCitjb25zdGV4cHIgSW50MTI4SW1w
bDo6b3BlcmF0b3IgY2hhcjE2X3QoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFy
MTZfdD4obG9fKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIGNoYXIzMl90
KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcjMyX3Q+KGxvXyk7Cit9CisKK2Nv
bnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBBQlNMX0lOVEVSTkFMX1dDSEFSX1QoKSBjb25z
dCB7CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nh
c3Q8QUJTTF9JTlRFUk5BTF9XQ0hBUl9UPihzdGF0aWNfY2FzdDxsb25nIGxvbmc+KCp0aGlzKSk7
Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBzaG9ydCgpIGNvbnN0IHsgIC8v
IE5PTElOVChydW50aW1lL2ludCkKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCisg
IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigqdGhpcykp
OworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5zaWduZWQgc2hvcnQoKSBj
b25zdCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBzaG9ydD4obG9fKTsgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKK30KKwor
Y29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIGludCgpIGNvbnN0IHsKKyAgLy8gTk9MSU5U
TkVYVExJTkUocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJh
dG9yIHVuc2lnbmVkIGludCgpIGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4obG9fKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIGxvbmcoKSBj
b25zdCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRp
bWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PigqdGhpcykpOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5zaWduZWQg
bG9uZygpIGNvbnN0IHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KGxvXyk7ICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQp
Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGxvbmcoKSBjb25zdCB7
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIC8vIFdlIGRvbid0IGJvdGhlciBjaGVja2luZyB0
aGUgdmFsdWUgb2YgaGlfLiBJZiAqdGhpcyA8IDAsIGxvXydzIGhpZ2ggYml0CisgIC8vIG11c3Qg
YmUgc2V0IGluIG9yZGVyIGZvciB0aGUgdmFsdWUgdG8gZml0IGludG8gYSBsb25nIGxvbmcuIENv
bnZlcnNlbHksIGlmCisgIC8vIGxvXydzIGhpZ2ggYml0IGlzIHNldCwgKnRoaXMgbXVzdCBiZSA8
IDAgZm9yIHRoZSB2YWx1ZSB0byBmaXQuCisgIHJldHVybiBpbnQxMjhfaW50ZXJuYWw6OkJpdENh
c3RUb1NpZ25lZChsb18pOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nKCkgY29uc3QgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihsb18pOyAgICAgICAgICAgLy8gTk9M
SU5UKHJ1bnRpbWUvaW50KQorfQorCitpbmxpbmUgSW50MTI4SW1wbDo6b3BlcmF0b3IgZmxvYXQo
KSBjb25zdCB7CisgIC8vIFdlIG11c3QgY29udmVydCB0aGUgYWJzb2x1dGUgdmFsdWUgYW5kIHRo
ZW4gbmVnYXRlIGFzIG5lZWRlZCwgYmVjYXVzZQorICAvLyBmbG9hdGluZyBwb2ludCB0eXBlcyBh
cmUgdHlwaWNhbGx5IHNpZ24tbWFnbml0dWRlLiBPdGhlcndpc2UsIHRoZQorICAvLyBkaWZmZXJl
bmNlIGJldHdlZW4gdGhlIGhpZ2ggYW5kIGxvdyA2NCBiaXRzIHdoZW4gaW50ZXJwcmV0ZWQgYXMg
dHdvJ3MKKyAgLy8gY29tcGxlbWVudCBvdmVyd2hlbG1zIHRoZSBwcmVjaXNpb24gb2YgdGhlIG1h
bnRpc3NhLgorICAvLworICAvLyBBbHNvIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBuZWdh
dGUgSW50MTI4TWluKCkKKyAgcmV0dXJuIGhpXyA8IDAgJiYgKnRoaXMgIT0gSW50MTI4TWluKCkK
KyAgICAgICAgICAgICA/IC1zdGF0aWNfY2FzdDxmbG9hdD4oLSp0aGlzKQorICAgICAgICAgICAg
IDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvXykgKworICAgICAgICAgICAgICAgICAgIHN0ZDo6bGRl
eHAoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhpXyksIDY0KTsKK30KKworaW5saW5lIEludDEyOEltcGw6
Om9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0IHsKKyAgLy8gU2VlIGNvbW1lbnQgaW4gSW50MTI4SW1w
bDo6b3BlcmF0b3IgZmxvYXQoKSBhYm92ZS4KKyAgcmV0dXJuIGhpXyA8IDAgJiYgKnRoaXMgIT0g
SW50MTI4TWluKCkKKyAgICAgICAgICAgICA/IC1zdGF0aWNfY2FzdDxkb3VibGU+KC0qdGhpcykK
KyAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PGRvdWJsZT4obG9fKSArCisgICAgICAgICAgICAg
ICAgICAgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxkb3VibGU+KGhpXyksIDY0KTsKK30KKworaW5s
aW5lIEludDEyOEltcGw6Om9wZXJhdG9yIGxvbmcgZG91YmxlKCkgY29uc3QgeworICAvLyBTZWUg
Y29tbWVudCBpbiBJbnQxMjhJbXBsOjpvcGVyYXRvciBmbG9hdCgpIGFib3ZlLgorICByZXR1cm4g
aGlfIDwgMCAmJiAqdGhpcyAhPSBJbnQxMjhNaW4oKQorICAgICAgICAgICAgID8gLXN0YXRpY19j
YXN0PGxvbmcgZG91YmxlPigtKnRoaXMpCisgICAgICAgICAgICAgOiBzdGF0aWNfY2FzdDxsb25n
IGRvdWJsZT4obG9fKSArCisgICAgICAgICAgICAgICAgICAgc3RkOjpsZGV4cChzdGF0aWNfY2Fz
dDxsb25nIGRvdWJsZT4oaGlfKSwgNjQpOworfQorCisvLyBDb21wYXJpc29uIG9wZXJhdG9ycy4K
KworY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCBy
aHMpIHsKKyAgcmV0dXJuIChJbnQxMjhMb3c2NChsaHMpID09IEludDEyOExvdzY0KHJocykgJiYK
KyAgICAgICAgICBJbnQxMjhIaWdoNjQobGhzKSA9PSBJbnQxMjhIaWdoNjQocmhzKSk7Cit9CisK
K2NvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhz
KSB7IHJldHVybiAhKGxocyA9PSByaHMpOyB9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPChJ
bnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIChJbnQxMjhIaWdoNjQo
bGhzKSA9PSBJbnQxMjhIaWdoNjQocmhzKSkKKyAgICAgICAgICAgICA/IChJbnQxMjhMb3c2NChs
aHMpIDwgSW50MTI4TG93NjQocmhzKSkKKyAgICAgICAgICAgICA6IChJbnQxMjhIaWdoNjQobGhz
KSA8IEludDEyOEhpZ2g2NChyaHMpKTsKK30KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KElu
dDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gKEludDEyOEhpZ2g2NChs
aHMpID09IEludDEyOEhpZ2g2NChyaHMpKQorICAgICAgICAgICAgID8gKEludDEyOExvdzY0KGxo
cykgPiBJbnQxMjhMb3c2NChyaHMpKQorICAgICAgICAgICAgIDogKEludDEyOEhpZ2g2NChsaHMp
ID4gSW50MTI4SGlnaDY0KHJocykpOworfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KElu
dDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeyByZXR1cm4gIShsaHMgPiByaHMpOyB9CisK
K2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhz
KSB7IHJldHVybiAhKGxocyA8IHJocyk7IH0KKworLy8gVW5hcnkgb3BlcmF0b3JzLgorCitjb25z
dGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvci0oSW50MTI4SW1wbCB2KSB7CisgIHJldHVybiBNYWtl
SW50MTI4KH5JbnQxMjhIaWdoNjQodikgKyAoSW50MTI4TG93NjQodikgPT0gMCksCisgICAgICAg
ICAgICAgICAgICAgIH5JbnQxMjhMb3c2NCh2KSArIDEpOworfQorCitjb25zdGV4cHIgYm9vbCBv
cGVyYXRvciEoSW50MTI4SW1wbCB2KSB7CisgIHJldHVybiAhSW50MTI4TG93NjQodikgJiYgIUlu
dDEyOEhpZ2g2NCh2KTsKK30KKworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3J+KEludDEy
OEltcGwgdmFsKSB7CisgIHJldHVybiBNYWtlSW50MTI4KH5JbnQxMjhIaWdoNjQodmFsKSwgfklu
dDEyOExvdzY0KHZhbCkpOworfQorCisvLyBBcml0aG1ldGljIG9wZXJhdG9ycy4KKworbmFtZXNw
YWNlIGludDEyOF9pbnRlcm5hbCB7Citjb25zdGV4cHIgSW50MTI4SW1wbCBTaWduZWRBZGRSZXN1
bHQoSW50MTI4SW1wbCByZXN1bHQsIEludDEyOEltcGwgbGhzKSB7CisgIC8vIGNoZWNrIGZvciBj
YXJyeQorICByZXR1cm4gKEludDEyOExvdzY0KHJlc3VsdCkgPCBJbnQxMjhMb3c2NChsaHMpKQor
ICAgICAgICAgICAgID8gTWFrZUludDEyOChJbnQxMjhIaWdoNjQocmVzdWx0KSArIDEsIEludDEy
OExvdzY0KHJlc3VsdCkpCisgICAgICAgICAgICAgOiByZXN1bHQ7Cit9Cit9ICAvLyBuYW1lc3Bh
Y2UgaW50MTI4X2ludGVybmFsCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcisoSW50MTI4
SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBpbnQxMjhfaW50ZXJuYWw6OlNp
Z25lZEFkZFJlc3VsdCgKKyAgICAgIE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KGxocykgKyBJbnQx
MjhIaWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgSW50MTI4TG93NjQobGhzKSArIEludDEy
OExvdzY0KHJocykpLAorICAgICAgbGhzKTsKK30KKworbmFtZXNwYWNlIGludDEyOF9pbnRlcm5h
bCB7Citjb25zdGV4cHIgSW50MTI4SW1wbCBTaWduZWRTdWJzdHJ1Y3RSZXN1bHQoSW50MTI4SW1w
bCByZXN1bHQsIEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICAvLyBjaGVjayBm
b3IgY2FycnkKKyAgcmV0dXJuIChJbnQxMjhMb3c2NChsaHMpIDwgSW50MTI4TG93NjQocmhzKSkK
KyAgICAgICAgICAgICA/IE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KHJlc3VsdCkgLSAxLCBJbnQx
MjhMb3c2NChyZXN1bHQpKQorICAgICAgICAgICAgIDogcmVzdWx0OworfQorfSAgLy8gbmFtZXNw
YWNlIGludDEyOF9pbnRlcm5hbAorY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3ItKEludDEy
OEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpT
aWduZWRTdWJzdHJ1Y3RSZXN1bHQoCisgICAgICBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChsaHMp
IC0gSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgIEludDEyOExvdzY0KGxocykg
LSBJbnQxMjhMb3c2NChyaHMpKSwKKyAgICAgIGxocywgcmhzKTsKK30KKworaW5saW5lIEludDEy
OEltcGwgb3BlcmF0b3IqKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1
cm4gTWFrZUludDEyOCgKKyAgICAgIGludDEyOF9pbnRlcm5hbDo6Qml0Q2FzdFRvU2lnbmVkKFVJ
bnQxMjhIaWdoNjQoVUludDEyOEltcGwobGhzKSAqIHJocykpLAorICAgICAgVUludDEyOExvdzY0
KFVJbnQxMjhJbXBsKGxocykgKiByaHMpKTsKK30KKworaW5saW5lIEludDEyOEltcGwgSW50MTI4
SW1wbDo6b3BlcmF0b3IrKyhpbnQpIHsKKyAgSW50MTI4SW1wbCB0bXAoKnRoaXMpOworICAqdGhp
cyArPSAxOworICByZXR1cm4gdG1wOworfQorCitpbmxpbmUgSW50MTI4SW1wbCBJbnQxMjhJbXBs
OjpvcGVyYXRvci0tKGludCkgeworICBJbnQxMjhJbXBsIHRtcCgqdGhpcyk7CisgICp0aGlzIC09
IDE7CisgIHJldHVybiB0bXA7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpv
cGVyYXRvcisrKCkgeworICAqdGhpcyArPSAxOworICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGlu
ZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvci0tKCkgeworICAqdGhpcyAtPSAxOwor
ICByZXR1cm4gKnRoaXM7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yfChJbnQx
MjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIE1ha2VJbnQxMjgoSW50MTI4
SGlnaDY0KGxocykgfCBJbnQxMjhIaWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgICAgSW50
MTI4TG93NjQobGhzKSB8IEludDEyOExvdzY0KHJocykpOworfQorCitjb25zdGV4cHIgSW50MTI4
SW1wbCBvcGVyYXRvciYoSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIHJldHVy
biBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChsaHMpICYgSW50MTI4SGlnaDY0KHJocyksCisgICAg
ICAgICAgICAgICAgICAgIEludDEyOExvdzY0KGxocykgJiBJbnQxMjhMb3c2NChyaHMpKTsKK30K
KworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3JeKEludDEyOEltcGwgbGhzLCBJbnQxMjhJ
bXBsIHJocykgeworICByZXR1cm4gTWFrZUludDEyOChJbnQxMjhIaWdoNjQobGhzKSBeIEludDEy
OEhpZ2g2NChyaHMpLAorICAgICAgICAgICAgICAgICAgICBJbnQxMjhMb3c2NChsaHMpIF4gSW50
MTI4TG93NjQocmhzKSk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yPDwoSW50
MTI4SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAgLy8gaW50NjRfdCBzaGlmdHMgb2YgPj0gNjQg
YXJlIHVuZGVmaW5lZCwgc28gd2UgbmVlZCBzb21lIHNwZWNpYWwtY2FzaW5nLgorICByZXR1cm4g
YW1vdW50ID49IDY0CisgICAgICAgICAgICAgPyBNYWtlSW50MTI4KAorICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDY0X3Q+KEludDEyOExvdzY0KGxocykgPDwgKGFtb3VudCAtIDY0
KSksIDApCisgICAgICAgICA6IGFtb3VudCA9PSAwCisgICAgICAgICAgICAgPyBsaHMKKyAgICAg
ICAgICAgICA6IE1ha2VJbnQxMjgoCisgICAgICAgICAgICAgICAgICAgKEludDEyOEhpZ2g2NChs
aHMpIDw8IGFtb3VudCkgfAorICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2
NF90PihJbnQxMjhMb3c2NChsaHMpID4+ICg2NCAtIGFtb3VudCkpLAorICAgICAgICAgICAgICAg
ICAgIEludDEyOExvdzY0KGxocykgPDwgYW1vdW50KTsKK30KKworY29uc3RleHByIEludDEyOElt
cGwgb3BlcmF0b3I+PihJbnQxMjhJbXBsIGxocywgaW50IGFtb3VudCkgeworICAvLyBpbnQ2NF90
IHNoaWZ0cyBvZiA+PSA2NCBhcmUgdW5kZWZpbmVkLCBzbyB3ZSBuZWVkIHNvbWUgc3BlY2lhbC1j
YXNpbmcuCisgIC8vIFRoZSAoSW50MTI4SGlnaDY0KGxocykgPj4gMzIpID4+IDMyICJ0cmljayIg
Y2F1c2VzIHRoZSB0aGUgbW9zdCBzaWduaWZpY2FudAorICAvLyBpbnQ2NCB0byBiZSBpbml0aXRp
YWxpemVkIHdpdGggYWxsIHplcm9zIG9yIGFsbCBvbmVzIGNvcnJlY3RseS4gSXQgdGFrZXMKKyAg
Ly8gaW50byBhY2NvdW50IHdoZXRoZXIgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSBvciBwb3NpdGl2
ZSwgYW5kIHdoZXRoZXIgdGhlCisgIC8vIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIGRvZXMgYXJpdGht
ZXRpYyBvciBsb2dpY2FsIHJpZ2h0IHNoaWZ0cyBmb3IgbmVnYXRpdmUKKyAgLy8gbnVtYmVycy4K
KyAgcmV0dXJuIGFtb3VudCA+PSA2NAorICAgICAgICAgICAgID8gTWFrZUludDEyOCgKKyAgICAg
ICAgICAgICAgICAgICAoSW50MTI4SGlnaDY0KGxocykgPj4gMzIpID4+IDMyLAorICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihJbnQxMjhIaWdoNjQobGhzKSA+PiAoYW1v
dW50IC0gNjQpKSkKKyAgICAgICAgIDogYW1vdW50ID09IDAKKyAgICAgICAgICAgICA/IGxocwor
ICAgICAgICAgICAgIDogTWFrZUludDEyOChJbnQxMjhIaWdoNjQobGhzKSA+PiBhbW91bnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIChJbnQxMjhMb3c2NChsaHMpID4+IGFtb3VudCkgfAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihJbnQx
MjhIaWdoNjQobGhzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAoNjQgLSBh
bW91bnQpKSk7Cit9CisKICNpZiBIQVZFKElOVDEyOF9UKQogdXNpbmcgVUludDEyOCA9IF9fdWlu
dDEyOF90OwogdXNpbmcgSW50MTI4ID0gX19pbnQxMjhfdDsKICNlbHNlCi11c2luZyBVSW50MTI4
ID0gSW50MTI4SW1wbDxmYWxzZT47Ci11c2luZyBJbnQxMjggPSBJbnQxMjhJbXBsPHRydWU+Owor
dXNpbmcgVUludDEyOCA9IFVJbnQxMjhJbXBsOwordXNpbmcgSW50MTI4ID0gSW50MTI4SW1wbDsK
ICNlbmRpZgogCi10ZW1wbGF0ZSA8aW50IEJJVFM+IHN0cnVjdCBIb3N0VW5zaWduZWRJbnRUeXBl
SGVscGVyIHsKLSAgICB1c2luZyB0eXBlID0gc3RkOjpjb25kaXRpb25hbF90PChCSVRTIDw9IDgp
LCBzdGQ6OnVpbnQ4X3QsCi0gICAgICAgIHN0ZDo6Y29uZGl0aW9uYWxfdDwoQklUUyA8PSAxNiks
IHN0ZDo6dWludDE2X3QsCi0gICAgICAgIHN0ZDo6Y29uZGl0aW9uYWxfdDwoQklUUyA8PSAzMiks
IHN0ZDo6dWludDMyX3QsCi0gICAgICAgIHN0ZDo6Y29uZGl0aW9uYWxfdDwoQklUUyA8PSA2NCks
IHN0ZDo6dWludDY0X3QsIFVJbnQxMjg+Pj4+OwotfTsKLXRlbXBsYXRlIDxpbnQgQklUUz4gc3Ry
dWN0IEhvc3RTaWduZWRJbnRUeXBlSGVscGVyIHsKLSAgICB1c2luZyB0eXBlID0gc3RkOjpjb25k
aXRpb25hbF90PChCSVRTIDw9IDgpLCBzdGQ6OmludDhfdCwKLSAgICAgICAgc3RkOjpjb25kaXRp
b25hbF90PChCSVRTIDw9IDE2KSwgc3RkOjppbnQxNl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlv
bmFsX3Q8KEJJVFMgPD0gMzIpLCBzdGQ6OmludDMyX3QsCi0gICAgICAgIHN0ZDo6Y29uZGl0aW9u
YWxfdDwoQklUUyA8PSA2NCksIHN0ZDo6aW50NjRfdCwgSW50MTI4Pj4+PjsKLX07Ci10ZW1wbGF0
ZSA8aW50IEJJVFM+Ci11c2luZyBIb3N0VW5zaWduZWRJbnRUeXBlID0gdHlwZW5hbWUgSG9zdFVu
c2lnbmVkSW50VHlwZUhlbHBlcjxCSVRTPjo6dHlwZTsKLXRlbXBsYXRlIDxpbnQgQklUUz4KLXVz
aW5nIEhvc3RTaWduZWRJbnRUeXBlID0gdHlwZW5hbWUgSG9zdFNpZ25lZEludFR5cGVIZWxwZXI8
QklUUz46OnR5cGU7Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgorfSAgLy8gbmFtZXNwYWNlIFdURgog
CiB1c2luZyBXVEY6OkludDEyODsKIHVzaW5nIFdURjo6VUludDEyODsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjY2Q5MTRjYjNkNGVkYWNhOGRm
NTJkYzY0ZjRjYjI2ODFjMzQzNmQ4Li4zODhlMGZhMGEwZTQwOGU4YTVmYTY4YTU2ZjU1YjkxNWU4
NWE2MzIxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMTAtMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KKworICAgICAgICBbV1RGXSBSZXBsYWNlIGN1cnJlbnQgTExWTSBmbGFuZydzIElu
dDEyOCB3aXRoIGFic2VpbC1jcHAncyBJbnQxMjgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjEyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSW50MTI4LmNw
cDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRZUEVEX1RFU1QpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0VW5hcnkpOiBEZWxl
dGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdEJpbmFyeSk6IERlbGV0ZWQuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUb05hdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpGcm9tTmF0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRl
c3RWc05hdGl2ZSk6IERlbGV0ZWQuCisKIDIwMjEtMTAtMjEgIFJ5YW4gSGFkZGFkICA8cnlhbmhh
ZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViR0wgYm90IHNob3VsZCBydW4gdGVzdHMgd2l0
aCBHUFUgUHJvY2VzcyBlbmFibGVkCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9JbnQxMjguY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSW50MTI4
LmNwcAppbmRleCA3NzViZjcxMTk0MGRkNDIyZmY0NzIxYjRjZGJjNWU3ZmE3NjNmNDJjLi4zZTJl
M2M3ZDg1ODE1NzA5MmIyZTU4MjZmODgwODk4NGJiNTYxMGZlIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9JbnQxMjguY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0ludDEyOC5jcHAKQEAgLTEsMTQ1ICsxLDExOTUgQEAKLS8vIFRha2VuIGZy
b20gTExWTSBQcm9qZWN0LCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMCB3aXRoIExMVk0g
RXhjZXB0aW9ucy4KLS8vIFNlZSBTb3VyY2UvV1RGL0xJQ0VOU0UtTExWTS50eHQgZm9yIGxpY2Vu
c2UgaW5mb3JtYXRpb24uCi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCBX
SVRIIExMVk0tZXhjZXB0aW9uCi0KLS8vIEJhc2VkIG9uOgotLy8gaHR0cHM6Ly9naXRodWIuY29t
L2xsdm0vbGx2bS1wcm9qZWN0L2Jsb2IvZDQ4MGY5NjgvZmxhbmcvdW5pdHRlc3RzL0V2YWx1YXRl
L3VpbnQxMjguY3BwCisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQWJzZWlsIEF1dGhvcnMuCisvLwor
Ly8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJM
aWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD
RU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
bmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPHd0Zi9JbnQxMjguaD4KIAotI2luY2x1ZGUg
PGNpbnR0eXBlcz4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bGltaXRzPgorI2lu
Y2x1ZGUgPHJhbmRvbT4KKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx1dGlsaXR5
PgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCi11c2lu
ZyBOb25OYXRpdmVJbnQxMjggPSBXVEY6OkludDEyOEltcGw8dHJ1ZT47Ci11c2luZyBOb25OYXRp
dmVVSW50MTI4ID0gV1RGOjpJbnQxMjhJbXBsPGZhbHNlPjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgV1RGX1VJbnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6
OlRlc3QgeworfTsKK3R5cGVkZWYgOjp0ZXN0aW5nOjpUeXBlczxib29sLCBjaGFyLCBzaWduZWQg
Y2hhciwgdW5zaWduZWQgY2hhciwgY2hhcjE2X3QsCisgICAgY2hhcjMyX3QsIHdjaGFyX3QsCisg
ICAgc2hvcnQsIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgICB1bnNpZ25lZCBzaG9ydCwgLy8g
Tk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIGludCwgdW5zaWduZWQgaW50LAorICAgIGxvbmcsIC8v
IE5PTElOVChydW50aW1lL2ludCkKKyAgICB1bnNpZ25lZCBsb25nLCAvLyBOT0xJTlQocnVudGlt
ZS9pbnQpCisgICAgbG9uZyBsb25nLCAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgdW5zaWdu
ZWQgbG9uZyBsb25nPiAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgSW50ZWdlclR5cGVzOwor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFdURl9VSW50MTI4RmxvYXRUcmFpdHNUZXN0
IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9OwordHlwZWRlZiA6OnRlc3Rpbmc6OlR5cGVz
PGZsb2F0LCBkb3VibGUsIGxvbmcgZG91YmxlPiBGbG9hdGluZ1BvaW50VHlwZXM7CisKK1RZUEVE
X1RFU1RfU1VJVEUoV1RGX1VJbnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCwgSW50ZWdlclR5cGVzKTsK
KworVFlQRURfVEVTVChXVEZfVUludDEyOEludGVnZXJUcmFpdHNUZXN0LCBDb25zdHJ1Y3RBc3Np
Z25UZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19jb25zdHJ1Y3RpYmxlPFdURjo6
VUludDEyOEltcGwsIFR5cGVQYXJhbT46OnZhbHVlLAorICAgICAgICAiV1RGOjpVSW50MTI4SW1w
bCBtdXN0IGJlIGNvbnN0cnVjdGlibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfYXNzaWduYWJsZTxXVEY6OlVJbnQxMjhJbXBsJiwgVHlwZVBhcmFtPjo6dmFs
dWUsCisgICAgICAgICJXVEY6OlVJbnQxMjhJbXBsIG11c3QgYmUgYXNzaWduYWJsZSBmcm9tIFR5
cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYXNzaWduYWJsZTxUeXBlUGFy
YW0mLCBXVEY6OlVJbnQxMjhJbXBsPjo6dmFsdWUsCisgICAgICAgICJUeXBlUGFyYW0gbXVzdCBu
b3QgYmUgYXNzaWduYWJsZSBmcm9tIFdURjo6VUludDEyOEltcGwiKTsKK30KKworVFlQRURfVEVT
VF9TVUlURShXVEZfVUludDEyOEZsb2F0VHJhaXRzVGVzdCwgRmxvYXRpbmdQb2ludFR5cGVzKTsK
KworVFlQRURfVEVTVChXVEZfVUludDEyOEZsb2F0VHJhaXRzVGVzdCwgQ29uc3RydWN0QXNzaWdu
VGVzdCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxXVEY6OlVJ
bnQxMjhJbXBsLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6VUludDEyOEltcGwg
bXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gVHlwZVBhcmFtIik7CisgICAgc3RhdGljX2Fzc2Vy
dCghc3RkOjppc19hc3NpZ25hYmxlPFdURjo6VUludDEyOEltcGwmLCBUeXBlUGFyYW0+Ojp2YWx1
ZSwKKyAgICAgICAgIldURjo6VUludDEyOEltcGwgbXVzdCBub3QgYmUgYXNzaWduYWJsZSBmcm9t
IFR5cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYXNzaWduYWJsZTxUeXBl
UGFyYW0mLCBXVEY6OlVJbnQxMjhJbXBsPjo6dmFsdWUsCisgICAgICAgICJUeXBlUGFyYW0gbXVz
dCBub3QgYmUgYXNzaWduYWJsZSBmcm9tIFdURjo6VUludDEyOEltcGwiKTsKK30KKworVEVTVChX
VEZfVUludDEyOCwgVHJpdmlhbFRyYWl0c1Rlc3QpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZWZhdWx0X2NvbnN0cnVjdGlibGU8V1RGOjpVSW50MTI4SW1wbD46OnZh
bHVlLAorICAgICAgICAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9j
b3B5X2NvbnN0cnVjdGlibGU8V1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAiIik7
CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGU8V1RG
OjpVSW50MTI4SW1wbD46OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8V1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLCAiIik7Cit9CisK
K1RFU1QoV1RGX1VJbnQxMjgsIEFsbFRlc3RzKQoreworICAgIFdURjo6VUludDEyOEltcGwgemVy
byA9IDA7CisgICAgV1RGOjpVSW50MTI4SW1wbCBvbmUgPSAxOworICAgIFdURjo6VUludDEyOElt
cGwgb25lXzJhcmcgPSBXVEY6Ok1ha2VVSW50MTI4KDAsIDEpOworICAgIFdURjo6VUludDEyOElt
cGwgdHdvID0gMjsKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHRocmVlID0gMzsKKyAgICBXVEY6OlVJ
bnQxMjhJbXBsIGJpZyA9IFdURjo6TWFrZVVJbnQxMjgoMjAwMCwgMik7CisgICAgV1RGOjpVSW50
MTI4SW1wbCBiaWdfbWludXNfb25lID0gV1RGOjpNYWtlVUludDEyOCgyMDAwLCAxKTsKKyAgICBX
VEY6OlVJbnQxMjhJbXBsIGJpZ2dlciA9IFdURjo6TWFrZVVJbnQxMjgoMjAwMSwgMSk7CisgICAg
V1RGOjpVSW50MTI4SW1wbCBiaWdnZXN0ID0gV1RGOjpVSW50MTI4TWF4KCk7CisgICAgV1RGOjpV
SW50MTI4SW1wbCBoaWdoX2xvdyA9IFdURjo6TWFrZVVJbnQxMjgoMSwgMCk7CisgICAgV1RGOjpV
SW50MTI4SW1wbCBsb3dfaGlnaCA9IFdURjo6TWFrZVVJbnQxMjgoMCwgc3RkOjpudW1lcmljX2xp
bWl0czx1aW50NjRfdD46Om1heCgpKTsKKyAgICBFWFBFQ1RfTFQob25lLCB0d28pOworICAgIEVY
UEVDVF9HVCh0d28sIG9uZSk7CisgICAgRVhQRUNUX0xUKG9uZSwgYmlnKTsKKyAgICBFWFBFQ1Rf
TFQob25lLCBiaWcpOworICAgIEVYUEVDVF9FUShvbmUsIG9uZV8yYXJnKTsKKyAgICBFWFBFQ1Rf
TkUob25lLCB0d28pOworICAgIEVYUEVDVF9HVChiaWcsIG9uZSk7CisgICAgRVhQRUNUX0dFKGJp
ZywgdHdvKTsKKyAgICBFWFBFQ1RfR0UoYmlnLCBiaWdfbWludXNfb25lKTsKKyAgICBFWFBFQ1Rf
R1QoYmlnLCBiaWdfbWludXNfb25lKTsKKyAgICBFWFBFQ1RfTFQoYmlnX21pbnVzX29uZSwgYmln
KTsKKyAgICBFWFBFQ1RfTEUoYmlnX21pbnVzX29uZSwgYmlnKTsKKyAgICBFWFBFQ1RfTkUoYmln
X21pbnVzX29uZSwgYmlnKTsKKyAgICBFWFBFQ1RfTFQoYmlnLCBiaWdnZXN0KTsKKyAgICBFWFBF
Q1RfTEUoYmlnLCBiaWdnZXN0KTsKKyAgICBFWFBFQ1RfR1QoYmlnZ2VzdCwgYmlnKTsKKyAgICBF
WFBFQ1RfR0UoYmlnZ2VzdCwgYmlnKTsKKyAgICBFWFBFQ1RfRVEoYmlnLCB+fmJpZyk7CisgICAg
RVhQRUNUX0VRKG9uZSwgb25lIHwgb25lKTsKKyAgICBFWFBFQ1RfRVEoYmlnLCBiaWcgfCBiaWcp
OworICAgIEVYUEVDVF9FUShvbmUsIG9uZSB8IHplcm8pOworICAgIEVYUEVDVF9FUShvbmUsIG9u
ZSAmIG9uZSk7CisgICAgRVhQRUNUX0VRKGJpZywgYmlnICYgYmlnKTsKKyAgICBFWFBFQ1RfRVEo
emVybywgb25lICYgemVybyk7CisgICAgRVhQRUNUX0VRKHplcm8sIGJpZyAmIH5iaWcpOworICAg
IEVYUEVDVF9FUSh6ZXJvLCBvbmUgXiBvbmUpOworICAgIEVYUEVDVF9FUSh6ZXJvLCBiaWcgXiBi
aWcpOworICAgIEVYUEVDVF9FUShvbmUsIG9uZSBeIHplcm8pOworCisgICAgLy8gU2hpZnQgb3Bl
cmF0b3JzLgorICAgIEVYUEVDVF9FUShiaWcsIGJpZyA8PCAwKTsKKyAgICBFWFBFQ1RfRVEoYmln
LCBiaWcgPj4gMCk7CisgICAgRVhQRUNUX0dUKGJpZyA8PCAxLCBiaWcpOworICAgIEVYUEVDVF9M
VChiaWcgPj4gMSwgYmlnKTsKKyAgICBFWFBFQ1RfRVEoYmlnLCAoYmlnIDw8IDEwKSA+PiAxMCk7
CisgICAgRVhQRUNUX0VRKGJpZywgKGJpZyA+PiAxKSA8PCAxKTsKKyAgICBFWFBFQ1RfRVEob25l
LCAob25lIDw8IDgwKSA+PiA4MCk7CisgICAgRVhQRUNUX0VRKHplcm8sIChvbmUgPj4gODApIDw8
IDgwKTsKKworICAgIC8vIFNoaWZ0IGFzc2lnbm1lbnRzLgorICAgIFdURjo6VUludDEyOEltcGwg
YmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA8PCAwLCBiaWdfY29weSA8PD0gMCk7
CisgICAgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA+PiAwLCBiaWdfY29weSA+
Pj0gMCk7CisgICAgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA8PCAxLCBiaWdf
Y29weSA8PD0gMSk7CisgICAgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA+PiAx
LCBiaWdfY29weSA+Pj0gMSk7CisgICAgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJp
ZyA8PCAxMCwgYmlnX2NvcHkgPDw9IDEwKTsKKyAgICBiaWdfY29weSA9IGJpZzsKKyAgICBFWFBF
Q1RfRVEoYmlnID4+IDEwLCBiaWdfY29weSA+Pj0gMTApOworICAgIGJpZ19jb3B5ID0gYmlnOwor
ICAgIEVYUEVDVF9FUShiaWcgPDwgNjQsIGJpZ19jb3B5IDw8PSA2NCk7CisgICAgYmlnX2NvcHkg
PSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA+PiA2NCwgYmlnX2NvcHkgPj49IDY0KTsKKyAgICBi
aWdfY29weSA9IGJpZzsKKyAgICBFWFBFQ1RfRVEoYmlnIDw8IDczLCBiaWdfY29weSA8PD0gNzMp
OworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gNzMsIGJpZ19jb3B5
ID4+PSA3Myk7CisKKyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4SGlnaDY0KGJpZ2dlc3QpLCBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpOworICAgIEVYUEVDVF9FUShXVEY6
OlVJbnQxMjhMb3c2NChiaWdnZXN0KSwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1h
eCgpKTsKKyAgICBFWFBFQ1RfRVEoemVybyArIG9uZSwgb25lKTsKKyAgICBFWFBFQ1RfRVEob25l
ICsgb25lLCB0d28pOworICAgIEVYUEVDVF9FUShiaWdfbWludXNfb25lICsgb25lLCBiaWcpOwor
ICAgIEVYUEVDVF9FUShvbmUgLSBvbmUsIHplcm8pOworICAgIEVYUEVDVF9FUShvbmUgLSB6ZXJv
LCBvbmUpOworICAgIEVYUEVDVF9FUSh6ZXJvIC0gb25lLCBiaWdnZXN0KTsKKyAgICBFWFBFQ1Rf
RVEoYmlnIC0gYmlnLCB6ZXJvKTsKKyAgICBFWFBFQ1RfRVEoYmlnIC0gb25lLCBiaWdfbWludXNf
b25lKTsKKyAgICBFWFBFQ1RfRVEoYmlnICsgc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46
Om1heCgpLCBiaWdnZXIpOworICAgIEVYUEVDVF9FUShiaWdnZXN0ICsgMSwgemVybyk7CisgICAg
RVhQRUNUX0VRKHplcm8gLSAxLCBiaWdnZXN0KTsKKyAgICBFWFBFQ1RfRVEoaGlnaF9sb3cgLSBv
bmUsIGxvd19oaWdoKTsKKyAgICBFWFBFQ1RfRVEobG93X2hpZ2ggKyBvbmUsIGhpZ2hfbG93KTsK
KyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4SGlnaDY0KChXVEY6OlVJbnQxMjhJbXBsKDEpIDw8
IDY0KSAtIDEpLCAwVSk7CisgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOExvdzY0KChXVEY6OlVJ
bnQxMjhJbXBsKDEpIDw8IDY0KSAtIDEpLAorICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkpOworICAgIEVYUEVDVF9UUlVFKCEhb25lKTsKKyAgICBFWFBFQ1RfVFJV
RSghIWhpZ2hfbG93KTsKKyAgICBFWFBFQ1RfRkFMU0UoISF6ZXJvKTsKKyAgICBFWFBFQ1RfRkFM
U0UoIW9uZSk7CisgICAgRVhQRUNUX0ZBTFNFKCFoaWdoX2xvdyk7CisgICAgRVhQRUNUX1RSVUUo
IXplcm8pOworICAgIEVYUEVDVF9UUlVFKHplcm8gPT0gMCk7IC8vIE5PTElOVChyZWFkYWJpbGl0
eS9jaGVjaykKKyAgICBFWFBFQ1RfRkFMU0UoemVybyAhPSAwKTsgLy8gTk9MSU5UKHJlYWRhYmls
aXR5L2NoZWNrKQorICAgIEVYUEVDVF9GQUxTRShvbmUgPT0gMCk7IC8vIE5PTElOVChyZWFkYWJp
bGl0eS9jaGVjaykKKyAgICBFWFBFQ1RfVFJVRShvbmUgIT0gMCk7IC8vIE5PTElOVChyZWFkYWJp
bGl0eS9jaGVjaykKKyAgICBFWFBFQ1RfRkFMU0UoaGlnaF9sb3cgPT0gMCk7IC8vIE5PTElOVChy
ZWFkYWJpbGl0eS9jaGVjaykKKyAgICBFWFBFQ1RfVFJVRShoaWdoX2xvdyAhPSAwKTsgLy8gTk9M
SU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorCisgICAgV1RGOjpVSW50MTI4SW1wbCB0ZXN0ID0gemVy
bzsKKyAgICBFWFBFQ1RfRVEoKyt0ZXN0LCBvbmUpOworICAgIEVYUEVDVF9FUSh0ZXN0LCBvbmUp
OworICAgIEVYUEVDVF9FUSh0ZXN0KyssIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QsIHR3byk7
CisgICAgRVhQRUNUX0VRKHRlc3QgLT0gMiwgemVybyk7CisgICAgRVhQRUNUX0VRKHRlc3QsIHpl
cm8pOworICAgIEVYUEVDVF9FUSh0ZXN0ICs9IDIsIHR3byk7CisgICAgRVhQRUNUX0VRKHRlc3Qs
IHR3byk7CisgICAgRVhQRUNUX0VRKC0tdGVzdCwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCwg
b25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdC0tLCBvbmUpOworICAgIEVYUEVDVF9FUSh0ZXN0LCB6
ZXJvKTsKKyAgICBFWFBFQ1RfRVEodGVzdCB8PSB0aHJlZSwgdGhyZWUpOworICAgIEVYUEVDVF9F
USh0ZXN0ICY9IG9uZSwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCBePSB0aHJlZSwgdHdvKTsK
KyAgICBFWFBFQ1RfRVEodGVzdCA+Pj0gMSwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCA8PD0g
MSwgdHdvKTsKKworICAgIEVYUEVDVF9FUShiaWcsICtiaWcpOworICAgIEVYUEVDVF9FUSh0d28s
ICt0d28pOworICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhNYXgoKSwgK1dURjo6VUludDEyOE1h
eCgpKTsKKyAgICBFWFBFQ1RfRVEoemVybywgK3plcm8pOworCisgICAgRVhQRUNUX0VRKGJpZywg
LSgtYmlnKSk7CisgICAgRVhQRUNUX0VRKHR3bywgLSgoLW9uZSkgLSAxKSk7CisgICAgRVhQRUNU
X0VRKFdURjo6VUludDEyOE1heCgpLCAtb25lKTsKKyAgICBFWFBFQ1RfRVEoemVybywgLXplcm8p
OworfQorCitURVNUKFdURl9JbnQxMjgsIFJpZ2h0U2hpZnRPZk5lZ2F0aXZlTnVtYmVycykKK3sK
KyAgICBXVEY6OkludDEyOEltcGwgbWludXNfc2l4ID0gLTY7CisgICAgV1RGOjpJbnQxMjhJbXBs
IG1pbnVzX3RocmVlID0gLTM7CisgICAgV1RGOjpJbnQxMjhJbXBsIG1pbnVzX3R3byA9IC0yOwor
ICAgIFdURjo6SW50MTI4SW1wbCBtaW51c19vbmUgPSAtMTsKKyAgICBpZiAoKC02ID4+IDEpID09
IC0zKSB7CisgICAgICAgIC8vIFJpZ2h0IHNoaWZ0IGlzIGFyaXRobWV0aWMgKHNpZ24gcHJvcGFn
YXRlcykKKyAgICAgICAgRVhQRUNUX0VRKG1pbnVzX3NpeCA+PiAxLCBtaW51c190aHJlZSk7Cisg
ICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gMiwgbWludXNfdHdvKTsKKyAgICAgICAgRVhQ
RUNUX0VRKG1pbnVzX3NpeCA+PiA2NSwgbWludXNfb25lKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBSaWdodCBzaGlmdCBpcyBsb2dpY2FsICh6ZXJvcyBzaGlmdGVkIGluIGF0IE1TQikKKyAg
ICAgICAgRVhQRUNUX0VRKG1pbnVzX3NpeCA+PiAxLCBXVEY6OkludDEyOEltcGwoV1RGOjpVSW50
MTI4SW1wbChtaW51c19zaXgpID4+IDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKG1pbnVzX3NpeCA+
PiAyLCBXVEY6OkludDEyOEltcGwoV1RGOjpVSW50MTI4SW1wbChtaW51c19zaXgpID4+IDIpKTsK
KyAgICAgICAgRVhQRUNUX0VRKG1pbnVzX3NpeCA+PiA2NSwgV1RGOjpJbnQxMjhJbXBsKFdURjo6
VUludDEyOEltcGwobWludXNfc2l4KSA+PiA2NSkpOworICAgIH0KK30KKworVEVTVChXVEZfVUlu
dDEyOCwgQ29udmVyc2lvblRlc3RzKQoreworICAgIEVYUEVDVF9UUlVFKFdURjo6TWFrZVVJbnQx
MjgoMSwgMCkpOworCisgICAgLy8gdmVyaWZ5IHRoYXQgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4g
MioqNjQgdGhhdCBjYW4gYmUgc3RvcmVkIHByZWNpc2VseQorICAgIC8vIGluc2lkZSBhIGRvdWJs
ZSBpcyBjb252ZXJ0ZWQgdG8gYSBXVEY6OlVJbnQxMjhJbXBsIHdpdGhvdXQgbG9zcyBvZgorICAg
IC8vIGluZm9ybWF0aW9uLgorICAgIGRvdWJsZSBwcmVjaXNlX2RvdWJsZSA9IDB4NTMwZSAqIHN0
ZDo6cG93KDIuMCwgNjQuMCkgKyAweGRhNzQwMDAwMDAwMDAwMDA7CisgICAgV1RGOjpVSW50MTI4
SW1wbCBmcm9tX3ByZWNpc2VfZG91YmxlKHByZWNpc2VfZG91YmxlKTsKKyAgICBXVEY6OlVJbnQx
MjhJbXBsIGZyb21fcHJlY2lzZV9pbnRzID0gV1RGOjpNYWtlVUludDEyOCgweDUzMGUsIDB4ZGE3
NDAwMDAwMDAwMDAwMCk7CisgICAgRVhQRUNUX0VRKGZyb21fcHJlY2lzZV9kb3VibGUsIGZyb21f
cHJlY2lzZV9pbnRzKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKHN0YXRpY19jYXN0PGRvdWJsZT4o
ZnJvbV9wcmVjaXNlX2ludHMpLCBwcmVjaXNlX2RvdWJsZSk7CisKKyAgICBkb3VibGUgYXBwcm94
X2RvdWJsZSA9IDB4ZmZmZmVlZWVkZGRkY2NjYyAqIHN0ZDo6cG93KDIuMCwgNjQuMCkgKyAweGJi
YmJhYWFhOTk5OTg4ODg7CisgICAgV1RGOjpVSW50MTI4SW1wbCBmcm9tX2FwcHJveF9kb3VibGUo
YXBwcm94X2RvdWJsZSk7CisgICAgRVhQRUNUX0RPVUJMRV9FUShzdGF0aWNfY2FzdDxkb3VibGU+
KGZyb21fYXBwcm94X2RvdWJsZSksIGFwcHJveF9kb3VibGUpOworCisgICAgZG91YmxlIHJvdW5k
X3RvX3plcm8gPSAwLjc7CisgICAgZG91YmxlIHJvdW5kX3RvX2ZpdmUgPSA1Ljg7CisgICAgZG91
YmxlIHJvdW5kX3RvX25pbmUgPSA5LjM7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PFdURjo6
VUludDEyOEltcGw+KHJvdW5kX3RvX3plcm8pLCAwKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8V1RGOjpVSW50MTI4SW1wbD4ocm91bmRfdG9fZml2ZSksIDUpOworICAgIEVYUEVDVF9FUShz
dGF0aWNfY2FzdDxXVEY6OlVJbnQxMjhJbXBsPihyb3VuZF90b19uaW5lKSwgOSk7CisKKyAgICBX
VEY6OlVJbnQxMjhJbXBsIGhpZ2hlc3RfcHJlY2lzaW9uX2luX2xvbmdfZG91YmxlID0gfldURjo6
VUludDEyOEltcGwge30gPj4gKDEyOCAtIHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+
OjpkaWdpdHMpOworICAgIEVYUEVDVF9FUShoaWdoZXN0X3ByZWNpc2lvbl9pbl9sb25nX2RvdWJs
ZSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4oCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oaGlnaGVzdF9wcmVjaXNpb25faW5fbG9uZ19kb3VibGUp
KSk7CisgICAgLy8gQXBwbHkgYSBtYXNrIGp1c3QgdG8gbWFrZSBzdXJlIGFsbCB0aGUgYml0cyBh
cmUgdGhlIHJpZ2h0IHBsYWNlLgorICAgIGNvbnN0IFdURjo6VUludDEyOEltcGwgYXJiaXRyYXJ5
X21hc2sgPSBXVEY6Ok1ha2VVSW50MTI4KDB4YTI5ZjYyMjY3N2RlZDc1MSwgMHhmOGNhNjZhZGQw
NzZmNDY4KTsKKyAgICBFWFBFQ1RfRVEoaGlnaGVzdF9wcmVjaXNpb25faW5fbG9uZ19kb3VibGUg
JiBhcmJpdHJhcnlfbWFzaywKKyAgICAgICAgc3RhdGljX2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4o
c3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KAorICAgICAgICAgICAgaGlnaGVzdF9wcmVjaXNpb25f
aW5fbG9uZ19kb3VibGUgJiBhcmJpdHJhcnlfbWFzaykpKTsKKworICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxXVEY6OlVJbnQxMjhJbXBsPigtMC4xTCksIDApOworfQorCitURVNUKFdURl9VSW50
MTI4LCBPcGVyYXRvckFzc2lnblJldHVyblJlZikKK3sKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHYo
MSk7CisgICAgKHYgKz0gNCkgLT0gMzsKKyAgICBFWFBFQ1RfRVEoMiwgdik7Cit9CisKK1RFU1Qo
V1RGX1VJbnQxMjgsIE11bHRpcGx5KQoreworICAgIFdURjo6VUludDEyOEltcGwgYSwgYiwgYzsK
KworICAgIC8vIFplcm8gdGVzdC4KKyAgICBhID0gMDsKKyAgICBiID0gMDsKKyAgICBjID0gYSAq
IGI7CisgICAgRVhQRUNUX0VRKDAsIGMpOworCisgICAgLy8gTWF4IGNhcnJpZXMuCisgICAgYSA9
IFdURjo6VUludDEyOEltcGwoMCkgLSAxOworICAgIGIgPSBXVEY6OlVJbnQxMjhJbXBsKDApIC0g
MTsKKyAgICBjID0gYSAqIGI7CisgICAgRVhQRUNUX0VRKDEsIGMpOworCisgICAgLy8gU2VsZi1v
cGVyYXRpb24gd2l0aCBtYXggY2Fycmllcy4KKyAgICBjID0gV1RGOjpVSW50MTI4SW1wbCgwKSAt
IDE7CisgICAgYyAqPSBjOworICAgIEVYUEVDVF9FUSgxLCBjKTsKKworICAgIC8vIDEtYml0IHgg
MS1iaXQuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgNjQ7ICsraikgeworICAgICAgICAgICAgYSA9IFdURjo6VUludDEyOElt
cGwoMSkgPDwgaTsKKyAgICAgICAgICAgIGIgPSBXVEY6OlVJbnQxMjhJbXBsKDEpIDw8IGo7Cisg
ICAgICAgICAgICBjID0gYSAqIGI7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4
SW1wbCgxKSA8PCAoaSArIGopLCBjKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFZlcmlm
aWVkIHdpdGggZGMuCisgICAgYSA9IFdURjo6TWFrZVVJbnQxMjgoMHhmZmZmZWVlZWRkZGRjY2Nj
LCAweGJiYmJhYWFhOTk5OTg4ODgpOworICAgIGIgPSBXVEY6Ok1ha2VVSW50MTI4KDB4Nzc3NzY2
NjY1NTU1NDQ0NCwgMHgzMzMzMjIyMjExMTEwMDAwKTsKKyAgICBjID0gYSAqIGI7CisgICAgRVhQ
RUNUX0VRKFdURjo6TWFrZVVJbnQxMjgoMHg1MzBFREE3NDFDNzFENEMzLCAweEJGMjU5NzUzMTkw
ODAwMDApLCBjKTsKKyAgICBFWFBFQ1RfRVEoMCwgYyAtIGIgKiBhKTsKKyAgICBFWFBFQ1RfRVEo
YSAqIGEgLSBiICogYiwgKGEgKyBiKSAqIChhIC0gYikpOworCisgICAgLy8gVmVyaWZpZWQgd2l0
aCBkYy4KKyAgICBhID0gV1RGOjpNYWtlVUludDEyOCgweDAxMjM0NTY3ODlhYmNkZWYsIDB4ZmVk
Y2JhOTg3NjU0MzIxMCk7CisgICAgYiA9IFdURjo6TWFrZVVJbnQxMjgoMHgwMjQ2OGFjZTEzNTc5
YmRmLCAweGZkYjk3NTMxZWNhODY0MjApOworICAgIGMgPSBhICogYjsKKyAgICBFWFBFQ1RfRVEo
V1RGOjpNYWtlVUludDEyOCgweDk3YTg3ZjRmMjYxYmEzZjIsIDB4MzQyZDBiYmY0ODk0ODIwMCks
IGMpOworICAgIEVYUEVDVF9FUSgwLCBjIC0gYiAqIGEpOworICAgIEVYUEVDVF9FUShhICogYSAt
IGIgKiBiLCAoYSArIGIpICogKGEgLSBiKSk7Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIEFsaWFz
VGVzdHMpCit7CisgICAgV1RGOjpVSW50MTI4SW1wbCB4MSA9IFdURjo6TWFrZVVJbnQxMjgoMSwg
Mik7CisgICAgV1RGOjpVSW50MTI4SW1wbCB4MiA9IFdURjo6TWFrZVVJbnQxMjgoMiwgNCk7Cisg
ICAgeDEgKz0geDE7CisgICAgRVhQRUNUX0VRKHgyLCB4MSk7CisKKyAgICBXVEY6OlVJbnQxMjhJ
bXBsIHgzID0gV1RGOjpNYWtlVUludDEyOCgxLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwg
NjMpOworICAgIFdURjo6VUludDEyOEltcGwgeDQgPSBXVEY6Ok1ha2VVSW50MTI4KDMsIDApOwor
ICAgIHgzICs9IHgzOworICAgIEVYUEVDVF9FUSh4NCwgeDMpOworfQorCitURVNUKFdURl9VSW50
MTI4LCBEaXZpZGVBbmRNb2QpCit7CisgICAgdXNpbmcgc3RkOjpzd2FwOworCisgICAgLy8gYSA6
PSBxICogYiArIHIKKyAgICBXVEY6OlVJbnQxMjhJbXBsIGEsIGIsIHEsIHI7CisKKyAgICAvLyBa
ZXJvIHRlc3QuCisgICAgYSA9IDA7CisgICAgYiA9IDEyMzsKKyAgICBxID0gYSAvIGI7CisgICAg
ciA9IGEgJSBiOworICAgIEVYUEVDVF9FUSgwLCBxKTsKKyAgICBFWFBFQ1RfRVEoMCwgcik7CisK
KyAgICBhID0gV1RGOjpNYWtlVUludDEyOCgweDUzMGVkYTc0MWM3MWQ0YzMsIDB4YmYyNTk3NTMx
OTA4MDAwMCk7CisgICAgcSA9IFdURjo6TWFrZVVJbnQxMjgoMHg0ZGUyY2FiMDgxLCAweDE0YzM0
YWI0Njc2ZTRiYWIpOworICAgIGIgPSBXVEY6OlVJbnQxMjhJbXBsKDB4MTExMDAwMSk7CisgICAg
ciA9IFdURjo6VUludDEyOEltcGwoMHgzZWI0NTUpOworICAgIEFTU0VSVF9FUShhLCBxICogYiAr
IHIpOyAvLyBTYW5pdHktY2hlY2suCisKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHJlc3VsdF9xLCBy
ZXN1bHRfcjsKKyAgICByZXN1bHRfcSA9IGEgLyBiOworICAgIHJlc3VsdF9yID0gYSAlIGI7Cisg
ICAgRVhQRUNUX0VRKHEsIHJlc3VsdF9xKTsKKyAgICBFWFBFQ1RfRVEociwgcmVzdWx0X3IpOwor
CisgICAgLy8gVHJ5IHRoZSBvdGhlciB3YXkgYXJvdW5kLgorICAgIHN3YXAocSwgYik7CisgICAg
cmVzdWx0X3EgPSBhIC8gYjsKKyAgICByZXN1bHRfciA9IGEgJSBiOworICAgIEVYUEVDVF9FUShx
LCByZXN1bHRfcSk7CisgICAgRVhQRUNUX0VRKHIsIHJlc3VsdF9yKTsKKyAgICAvLyBSZXN0b3Jl
LgorICAgIHN3YXAoYiwgcSk7CiAKLXN0YXRpYyB2b2lkIFRlc3RVbmFyeShzdGQ6OnVpbnQ2NF90
IHgpCisgICAgLy8gRGl2aWRlbmQgPCBkaXZpc29yOyByZXN1bHQgc2hvdWxkIGJlIHE6MCByOjxk
aXZpZGVuZD4uCisgICAgc3dhcChhLCBiKTsKKyAgICByZXN1bHRfcSA9IGEgLyBiOworICAgIHJl
c3VsdF9yID0gYSAlIGI7CisgICAgRVhQRUNUX0VRKDAsIHJlc3VsdF9xKTsKKyAgICBFWFBFQ1Rf
RVEoYSwgcmVzdWx0X3IpOworICAgIC8vIFRyeSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgICBz
d2FwKGEsIHEpOworICAgIHJlc3VsdF9xID0gYSAvIGI7CisgICAgcmVzdWx0X3IgPSBhICUgYjsK
KyAgICBFWFBFQ1RfRVEoMCwgcmVzdWx0X3EpOworICAgIEVYUEVDVF9FUShhLCByZXN1bHRfcik7
CisgICAgLy8gUmVzdG9yZS4KKyAgICBzd2FwKHEsIGEpOworICAgIHN3YXAoYiwgYSk7CisKKyAg
ICAvLyBUcnkgYSBsYXJnZSByZW1haW5kZXIuCisgICAgYiA9IGEgLyAyICsgMTsKKyAgICBXVEY6
OlVJbnQxMjhJbXBsIGV4cGVjdGVkX3IgPSBXVEY6Ok1ha2VVSW50MTI4KDB4Mjk4NzZkM2EwZTM4
ZWE2MSwgMHhkZjkyY2JhOThjODNmZmZmKTsKKyAgICAvLyBTYW5pdHkgY2hlY2tzLgorICAgIEFT
U0VSVF9FUShhIC8gMiAtIDEsIGV4cGVjdGVkX3IpOworICAgIEFTU0VSVF9FUShhLCBiICsgZXhw
ZWN0ZWRfcik7CisgICAgcmVzdWx0X3EgPSBhIC8gYjsKKyAgICByZXN1bHRfciA9IGEgJSBiOwor
ICAgIEVYUEVDVF9FUSgxLCByZXN1bHRfcSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkX3IsIHJl
c3VsdF9yKTsKK30KKworVEVTVChXVEZfVUludDEyOCwgRGl2aWRlQW5kTW9kUmFuZG9tSW5wdXRz
KQogewotICAgIE5vbk5hdGl2ZVVJbnQxMjggbiB7IHggfTsKLSAgICBFWFBFQ1RfRVEoeCwgc3Rh
dGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obikpOwotICAgIEVYUEVDVF9FUSh+eCwgc3RhdGljX2Nh
c3Q8c3RkOjp1aW50NjRfdD4ofm4pKTsKLSAgICBFWFBFQ1RfRVEoLXgsIHN0YXRpY19jYXN0PHN0
ZDo6dWludDY0X3Q+KC1uKSk7Ci0gICAgRVhQRUNUX0VRKCF4LCBzdGF0aWNfY2FzdDxzdGQ6OnVp
bnQ2NF90PighbikpOwotICAgIEVYUEVDVF9UUlVFKG4gPT0gbik7Ci0gICAgRVhQRUNUX1RSVUUo
biArIG4gPT0gbiAqIHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDIpKTsKLSAgICBFWFBF
Q1RfVFJVRShuIC0gbiA9PSBzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PigwKSk7Ci0gICAg
RVhQRUNUX1RSVUUobiArIG4gPT0gbiA8PCBzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4Pigx
KSk7Ci0gICAgRVhQRUNUX1RSVUUobiArIG4gPT0gbiA8PCBzdGF0aWNfY2FzdDxOb25OYXRpdmVV
SW50MTI4PigxKSk7Ci0gICAgRVhQRUNUX1RSVUUoKG4gKyBuKSAtIG4gPT0gbik7Ci0gICAgRVhQ
RUNUX1RSVUUoKChuICsgbikgPj4gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMSkpID09
IG4pOwotICAgIGlmICh4KSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHN0YXRpY19jYXN0PE5vbk5h
dGl2ZVVJbnQxMjg+KDApIC8gbiA9PSBzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PigwKSk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KG4gLSAx
KSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMCkpOwotICAgICAgICBFWFBF
Q1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PihuKSAvIG4gPT0gc3RhdGljX2Nh
c3Q8Tm9uTmF0aXZlVUludDEyOD4oMSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2Fz
dDxOb25OYXRpdmVVSW50MTI4PihuICsgbiAtIDEpIC8gbiA9PSBzdGF0aWNfY2FzdDxOb25OYXRp
dmVVSW50MTI4PigxKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHN0YXRpY19jYXN0PE5vbk5hdGl2
ZVVJbnQxMjg+KG4gKyBuKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMikp
OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgVGVzdEJpbmFyeShzdGQ6OnVpbnQ2NF90IHgsIHN0
ZDo6dWludDY0X3QgeSkKLXsKLSAgICBOb25OYXRpdmVVSW50MTI4IG0geyB4IH0sIG4geyB5IH07
Ci0gICAgRVhQRUNUX0VRKHgsIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG0pKTsKLSAgICBF
WFBFQ1RfRVEoeSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obikpOwotICAgIEVYUEVDVF9F
USh4ICYgeSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obSAmIG4pKTsKLSAgICBFWFBFQ1Rf
RVEoeCB8IHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG0gfCBuKSk7Ci0gICAgRVhQRUNU
X0VRKHggXiB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtIF4gbikpOwotICAgIEVYUEVD
VF9FUSh4ICsgeSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obSArIG4pKTsKLSAgICBFWFBF
Q1RfRVEoeCAtIHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG0gLSBuKSk7Ci0gICAgRVhQ
RUNUX0VRKHggKiB5LCBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihtICogbikpOwotICAgIGlm
IChuKQotICAgICAgICBFWFBFQ1RfRVEoeCAvIHksIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+
KG0gLyBuKSk7Ci19Ci0KLVRFU1QoV1RGX0ludDEyOCwgQmFzaWMpCi17Ci0gICAgZm9yIChzdGQ6
OnVpbnQ2NF90IGogezB9OyBqIDwgNjQ7ICsraikgewotICAgICAgICBUZXN0VW5hcnkoaik7Ci0g
ICAgICAgIFRlc3RVbmFyeSh+aik7Ci0gICAgICAgIFRlc3RVbmFyeShzdGQ6OnVpbnQ2NF90KDEp
IDw8IGopOwotICAgICAgICBmb3IgKHN0ZDo6dWludDY0X3QgayB7MH07IGsgPCA2NDsgKytrKQot
ICAgICAgICAgICAgVGVzdEJpbmFyeShqLCBrKTsKLSAgICB9Ci19Ci0KLSNpZiBIQVZFKElOVDEy
OF9UKQotc3RhdGljIF9fdWludDEyOF90IFRvTmF0aXZlKE5vbk5hdGl2ZVVJbnQxMjggbikKLXsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X191aW50MTI4X3Q+KHN0YXRpY19jYXN0PHN0ZDo6dWlu
dDY0X3Q+KG4gPj4gNjQpKSA8PCA2NCB8Ci0gICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0
X3Q+KG4pOwotfQotCi1zdGF0aWMgTm9uTmF0aXZlVUludDEyOCBGcm9tTmF0aXZlKF9fdWludDEy
OF90IG4pCi17Ci0gICAgcmV0dXJuIE5vbk5hdGl2ZVVJbnQxMjggeyBzdGF0aWNfY2FzdDxzdGQ6
OnVpbnQ2NF90PihuID4+IDY0KX0gPDwgNjQgfCBOb25OYXRpdmVVSW50MTI4IHsgc3RhdGljX2Nh
c3Q8c3RkOjp1aW50NjRfdD4obikgfTsKLX0KLQotc3RhdGljIHZvaWQgVGVzdFZzTmF0aXZlKF9f
dWludDEyOF90IHgsIF9fdWludDEyOF90IHkpCi17Ci0gICAgTm9uTmF0aXZlVUludDEyOCBtIHsg
RnJvbU5hdGl2ZSh4KSB9LCBuIHsgRnJvbU5hdGl2ZSh5KSB9OwotICAgIEVYUEVDVF9UUlVFKFRv
TmF0aXZlKG0pID09IHgpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG4pID09IHkpOwotICAg
IEVYUEVDVF9UUlVFKFRvTmF0aXZlKH5tKSA9PSB+eCk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRp
dmUoLW0pID09IC14KTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZSghbSkgPT0gIXgpOwotICAg
IEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gPCBuKSA9PSAoeCA8IHkpKTsKLSAgICBFWFBFQ1RfVFJV
RShUb05hdGl2ZShtIDw9IG4pID09ICh4IDw9IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2
ZShtID09IG4pID09ICh4ID09IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtICE9IG4p
ID09ICh4ICE9IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtID49IG4pID09ICh4ID49
IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtID4gbikgPT0gKHggPiB5KSk7Ci0gICAg
RVhQRUNUX1RSVUUoVG9OYXRpdmUobSAmIG4pID09ICh4ICYgeSkpOwotICAgIEVYUEVDVF9UUlVF
KFRvTmF0aXZlKG0gfCBuKSA9PSAoeCB8IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZSht
IF4gbikgPT0gKHggXiB5KSk7Ci0gICAgaWYgKHkgPCAxMjgpIHsKLSAgICAgICAgRVhQRUNUX1RS
VUUoVG9OYXRpdmUobSA8PCBuKSA9PSAoeCA8PCB5KSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFRv
TmF0aXZlKG0gPj4gbikgPT0gKHggPj4geSkpOwotICAgIH0KLSAgICBFWFBFQ1RfVFJVRShUb05h
dGl2ZShtICsgbikgPT0gKHggKyB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAtIG4p
ID09ICh4IC0geSkpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gKiBuKSA9PSAoeCAqIHkp
KTsKLSAgICBpZiAoeSA+IDApIHsKLSAgICAgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAvIG4p
ID09ICh4IC8geSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtICUgbikgPT0gKHgg
JSB5KSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gLSBuICogKG0gLyBuKSkgPT0g
KHggJSB5KSk7Ci0gICAgfQotfQotCi1URVNUKFdURl9JbnQxMjgsIFZzTmF0aXZlKQotewotICAg
IEdURVNUX0xPR18oSU5GTykgPDwgIkVudmlyb25tZW50IGhhcyBuYXRpdmUgX191aW50MTI4X3Qi
OwotCi0gICAgZm9yIChpbnQgaiB7MH07IGogPCAxMjg7ICsraikgewotICAgICAgICBmb3IgKGlu
dCBrIHswfTsgayA8IDEyODsgKytrKSB7Ci0gICAgICAgICAgICBfX3VpbnQxMjhfdCBtIHsgMSB9
LCBuIHsgMSB9OwotICAgICAgICAgICAgbSA8PD0gajsKLSAgICAgICAgICAgIG4gPDw9IGs7Ci0g
ICAgICAgICAgICBUZXN0VnNOYXRpdmUobSwgbik7Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUo
fm0sIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0aXZlKG0sIH5uKTsKLSAgICAgICAgICAgIFRl
c3RWc05hdGl2ZSh+bSwgfm4pOwotICAgICAgICAgICAgVGVzdFZzTmF0aXZlKG0gXiBuLCBuKTsK
LSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtLCBtIF4gbik7Ci0gICAgICAgICAgICBUZXN0VnNO
YXRpdmUobSBeIH5uLCBuKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtLCB+bSBeIG4pOwot
ICAgICAgICAgICAgVGVzdFZzTmF0aXZlKG0gXiB+biwgbSBeIG4pOwotICAgICAgICAgICAgVGVz
dFZzTmF0aXZlKG0gXiBuLCB+bSBeIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0aXZlKG0gXiB+
biwgfm0gXiBuKTsKLSAgICAgICAgICAgIFRlc3RCaW5hcnkobSwgMTAwMDAwMDAwMDAwMDAwMDAp
OyAvLyBpbXBvcnRhbnQgY2FzZSBmb3IgZGVjaW1hbCBjb252ZXJzaW9uCi0gICAgICAgICAgICBU
ZXN0QmluYXJ5KH5tLCAxMDAwMDAwMDAwMDAwMDAwMCk7CisgICAgY29uc3QgaW50IGtOdW1JdGVy
cyA9IDEgPDwgMTg7CisgICAgc3RkOjptaW5zdGRfcmFuZCByYW5kb20odGVzdGluZzo6VW5pdFRl
c3Q6OkdldEluc3RhbmNlKCktPnJhbmRvbV9zZWVkKCkpOworICAgIHN0ZDo6dW5pZm9ybV9pbnRf
ZGlzdHJpYnV0aW9uPHVpbnQ2NF90PiB1bmlmb3JtX3VpbnQ2NDsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGtOdW1JdGVyczsgKytpKSB7CisgICAgICAgIGNvbnN0IFdURjo6VUludDEyOEltcGwg
YSA9IFdURjo6TWFrZVVJbnQxMjgodW5pZm9ybV91aW50NjQocmFuZG9tKSwgdW5pZm9ybV91aW50
NjQocmFuZG9tKSk7CisgICAgICAgIGNvbnN0IFdURjo6VUludDEyOEltcGwgYiA9IFdURjo6TWFr
ZVVJbnQxMjgodW5pZm9ybV91aW50NjQocmFuZG9tKSwgdW5pZm9ybV91aW50NjQocmFuZG9tKSk7
CisgICAgICAgIGlmIChiID09IDApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBBdm9pZCBh
IGRpdi1ieS16ZXJvLgogICAgICAgICB9CisgICAgICAgIGNvbnN0IFdURjo6VUludDEyOEltcGwg
cSA9IGEgLyBiOworICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIHIgPSBhICUgYjsKKyAg
ICAgICAgQVNTRVJUX0VRKGEsIGIgKiBxICsgcik7CisgICAgfQorfQorCitURVNUKFdURl9VSW50
MTI4LCBDb25zdGV4cHJUZXN0KQoreworICAgIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIHpl
cm8gPSBXVEY6OlVJbnQxMjhJbXBsKCk7CisgICAgY29uc3RleHByIFdURjo6VUludDEyOEltcGwg
b25lID0gMTsKKyAgICBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCBtaW51c190d28gPSAtMjsK
KyAgICBFWFBFQ1RfRVEoemVybywgV1RGOjpVSW50MTI4SW1wbCgwKSk7CisgICAgRVhQRUNUX0VR
KG9uZSwgV1RGOjpVSW50MTI4SW1wbCgxKSk7CisgICAgRVhQRUNUX0VRKG1pbnVzX3R3bywgV1RG
OjpNYWtlVUludDEyOCgtMSwgLTIpKTsKK30KKworVEVTVChXVEZfVUludDEyOCwgTnVtZXJpY0xp
bWl0c1Rlc3QpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6
VUludDEyOEltcGw+Ojppc19zcGVjaWFsaXplZCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoIXN0
ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX3NpZ25lZCwgIiIpOworICAg
IHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6aXNf
aW50ZWdlciwgIiIpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxpbnQ+KDEyOCAqIHN0ZDo6
bG9nMTAoMikpLAorICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+
OjpkaWdpdHMxMCk7CisgICAgRVhQRUNUX0VRKDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpV
SW50MTI4SW1wbD46Om1pbigpKTsKKyAgICBFWFBFQ1RfRVEoMCwgc3RkOjpudW1lcmljX2xpbWl0
czxXVEY6OlVJbnQxMjhJbXBsPjo6bG93ZXN0KCkpOworICAgIEVYUEVDVF9FUShXVEY6OlVJbnQx
MjhNYXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWF4KCkpOwor
fQorCitURVNUKFdURl9JbnQxMjhVSW50MTI4LCBDb252ZXJzaW9uVGVzdCkKK3sKKyAgICBXVEY6
OkludDEyOEltcGwgbm9ubmVnYXRpdmVfc2lnbmVkX3ZhbHVlc1tdID0geworICAgICAgICAwLAor
ICAgICAgICAxLAorICAgICAgICAweGZmZWVkZGNjYmJhYTk5ODgsCisgICAgICAgIFdURjo6TWFr
ZUludDEyOCgweDc3NjY1NTQ0MzMyMjExMDAsIDApLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgo
MHgxMjM0NTY3ODkwYWJjZGVmLCAweGZlZGNiYTA5ODc2NTQzMjEpLAorICAgICAgICBXVEY6Oklu
dDEyOE1heCgpCisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50MTI4SW1wbCB2YWx1ZSA6IG5vbm5l
Z2F0aXZlX3NpZ25lZF92YWx1ZXMpIHsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6Oklu
dDEyOEltcGwoV1RGOjpVSW50MTI4SW1wbCh2YWx1ZSkpKTsKKworICAgICAgICBXVEY6OlVJbnQx
MjhJbXBsIGFzc2lnbmVkX3ZhbHVlOworICAgICAgICBhc3NpZ25lZF92YWx1ZSA9IHZhbHVlOwor
ICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIFdURjo6SW50MTI4SW1wbChhc3NpZ25lZF92YWx1ZSkp
OworICAgIH0KKworICAgIFdURjo6SW50MTI4SW1wbCBuZWdhdGl2ZV92YWx1ZXNbXSA9IHsKKyAg
ICAgICAgLTEsIC0weDEyMzQ1Njc4OTBhYmNkZWYsCisgICAgICAgIFdURjo6TWFrZUludDEyOCgt
MHg1NTQ0MzMyMjExZmZlZWRkLCAwKSwKKyAgICAgICAgLVdURjo6TWFrZUludDEyOCgweDc2NTQz
MjEwZmVkY2JhOTgsIDB4YWJjZGVmMDEyMzQ1Njc4OSkKKyAgICB9OworICAgIGZvciAoV1RGOjpJ
bnQxMjhJbXBsIHZhbHVlIDogbmVnYXRpdmVfdmFsdWVzKSB7CisgICAgICAgIEVYUEVDVF9FUShX
VEY6OlVJbnQxMjhJbXBsKC12YWx1ZSksIC1XVEY6OlVJbnQxMjhJbXBsKHZhbHVlKSk7CisKKyAg
ICAgICAgV1RGOjpVSW50MTI4SW1wbCBhc3NpZ25lZF92YWx1ZTsKKyAgICAgICAgYXNzaWduZWRf
dmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOEltcGwoLXZhbHVl
KSwgLWFzc2lnbmVkX3ZhbHVlKTsKICAgICB9CiB9CiAKLSNlbHNlIC8vICFIQVZFKElOVDEyOF9U
KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBXVEZfSW50MTI4SW50ZWdlclRyYWl0c1Rl
c3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK307CisKK1RZUEVEX1RFU1RfU1VJVEUoV1RG
X0ludDEyOEludGVnZXJUcmFpdHNUZXN0LCBJbnRlZ2VyVHlwZXMpOworCitUWVBFRF9URVNUKFdU
Rl9JbnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCwgQ29uc3RydWN0QXNzaWduVGVzdCkKK3sKKyAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxXVEY6OkludDEyOEltcGwsIFR5cGVQ
YXJhbT46OnZhbHVlLAorICAgICAgICAiV1RGOjpJbnQxMjhJbXBsIG11c3QgYmUgY29uc3RydWN0
aWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19hc3NpZ25h
YmxlPFdURjo6SW50MTI4SW1wbCYsIFR5cGVQYXJhbT46OnZhbHVlLAorICAgICAgICAiV1RGOjpJ
bnQxMjhJbXBsIG11c3QgYmUgYXNzaWduYWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAgIHN0YXRp
Y19hc3NlcnQoIXN0ZDo6aXNfYXNzaWduYWJsZTxUeXBlUGFyYW0mLCBXVEY6OkludDEyOEltcGw+
Ojp2YWx1ZSwKKyAgICAgICAgIlR5cGVQYXJhbSBtdXN0IG5vdCBiZSBhc3NpZ25hYmxlIGZyb20g
V1RGOjpJbnQxMjhJbXBsIik7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV1RG
X0ludDEyOEZsb2F0VHJhaXRzVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworfTsKKwor
VFlQRURfVEVTVF9TVUlURShXVEZfSW50MTI4RmxvYXRUcmFpdHNUZXN0LCBGbG9hdGluZ1BvaW50
VHlwZXMpOwogCi1URVNUKFdURl9JbnQxMjgsIFZzTmF0aXZlKQorVFlQRURfVEVTVChXVEZfSW50
MTI4RmxvYXRUcmFpdHNUZXN0LCBDb25zdHJ1Y3RBc3NpZ25UZXN0KQogewotICAgIEdURVNUX0xP
R18oSU5GTykgPDwgIkVudmlyb25tZW50IGxhY2tzIG5hdGl2ZSBfX3VpbnQxMjhfdCI7CisgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8V1RGOjpJbnQxMjhJbXBsLCBUeXBl
UGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6SW50MTI4SW1wbCBtdXN0IGJlIGNvbnN0cnVj
dGlibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2ln
bmFibGU8V1RGOjpJbnQxMjhJbXBsJiwgVHlwZVBhcmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6
OkludDEyOEltcGwgbXVzdCBub3QgYmUgYXNzaWduYWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAg
IHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYXNzaWduYWJsZTxUeXBlUGFyYW0mLCBXVEY6OkludDEy
OEltcGw+Ojp2YWx1ZSwKKyAgICAgICAgIlR5cGVQYXJhbSBtdXN0IG5vdCBiZSBhc3NpZ25hYmxl
IGZyb20gV1RGOjpJbnQxMjhJbXBsIik7CiB9CiAKLSNlbmRpZiAvLyAhSEFWRShJTlQxMjhfVCkK
K1RFU1QoV1RGX0ludDEyOCwgVHJpdmlhbFRyYWl0c1Rlc3QpCit7CisgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZWZhdWx0X2NvbnN0cnVjdGlibGU8V1RGOjpJbnQxMjhJbXBs
Pjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlf
Y29uc3RydWN0aWJsZTxXVEY6OkludDEyOEltcGw+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlPFdURjo6SW50MTI4SW1wbD46
OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8V1RGOjpJbnQxMjhJbXBsPjo6dmFsdWUsICIiKTsKK30KKworVEVTVChXVEZfSW50MTI4
LCBCb29sQ29udmVyc2lvblRlc3QpCit7CisgICAgRVhQRUNUX0ZBTFNFKFdURjo6SW50MTI4SW1w
bCgwKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIEVYUEVD
VF9UUlVFKFdURjo6TWFrZUludDEyOCgwLCB1aW50NjRfdCB7IDEgfSA8PCBpKSk7CisgICAgfQor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjM7ICsraSkgeworICAgICAgICBFWFBFQ1RfVFJVRShX
VEY6Ok1ha2VJbnQxMjgoaW50NjRfdCB7IDEgfSA8PCBpLCAwKSk7CisgICAgfQorICAgIEVYUEVD
VF9UUlVFKFdURjo6SW50MTI4TWluKCkpOworCisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1w
bCgxKSwgV1RGOjpJbnQxMjhJbXBsKHRydWUpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJ
bXBsKDApLCBXVEY6OkludDEyOEltcGwoZmFsc2UpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitjbGFzcyBXVEZfSW50MTI4SW50ZWdlckNvbnZlcnNpb25UZXN0IDogcHVibGljIDo6dGVz
dGluZzo6VGVzdCB7Cit9OworCitUWVBFRF9URVNUX1NVSVRFKFdURl9JbnQxMjhJbnRlZ2VyQ29u
dmVyc2lvblRlc3QsIEludGVnZXJUeXBlcyk7CisKK1RZUEVEX1RFU1QoV1RGX0ludDEyOEludGVn
ZXJDb252ZXJzaW9uVGVzdCwgUm91bmRUcmlwVGVzdCkKK3sKKyAgICBFWFBFQ1RfRVEoVHlwZVBh
cmFtIHsgMCB9LCBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KFdURjo6SW50MTI4SW1wbCgwKSkpOwor
ICAgIEVYUEVDVF9FUShzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46Om1pbigpLAorICAg
ICAgICBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBs
KHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZVBhcmFtPjo6bWluKCkpKSk7CisgICAgRVhQRUNUX0VR
KHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZVBhcmFtPjo6bWF4KCksCisgICAgICAgIHN0YXRpY19j
YXN0PFR5cGVQYXJhbT4oCisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwoc3RkOjpudW1lcmlj
X2xpbWl0czxUeXBlUGFyYW0+OjptYXgoKSkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitjbGFzcyBXVEZfSW50MTI4RmxvYXRDb252ZXJzaW9uVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6
OlRlc3QgeworfTsKKworVFlQRURfVEVTVF9TVUlURShXVEZfSW50MTI4RmxvYXRDb252ZXJzaW9u
VGVzdCwgRmxvYXRpbmdQb2ludFR5cGVzKTsKKworVFlQRURfVEVTVChXVEZfSW50MTI4RmxvYXRD
b252ZXJzaW9uVGVzdCwgQ29uc3RydWN0QW5kQ2FzdFRlc3QpCit7CisgICAgLy8gQ29udmVyc2lv
bnMgd2hlcmUgdGhlIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBzaG91bGQgYmUgZXhhY3RseSB0aGUg
c2FtZS4KKyAgICAvLyAweDlmNWIgaXMgYSByYW5kb21seSBjaG9zZW4gc21hbGwgdmFsdWUuCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMTA7ICsraSkgeyAvLyAxMTAgPSAxMjYgLSAjYml0cyBp
biAweDlmNWIKKyAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJp
ID0gIiA8PCBpKTsKKworICAgICAgICBUeXBlUGFyYW0gZmxvYXRfdmFsdWUgPSBzdGQ6OmxkZXhw
KHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oMHg5ZjViKSwgaSk7CisgICAgICAgIFdURjo6SW50MTI4
SW1wbCBpbnRfdmFsdWUgPSBXVEY6OkludDEyOEltcGwoMHg5ZjViKSA8PCBpOworCisgICAgICAg
IEVYUEVDVF9FUShmbG9hdF92YWx1ZSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihpbnRfdmFsdWUp
KTsKKyAgICAgICAgRVhQRUNUX0VRKC1mbG9hdF92YWx1ZSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFt
PigtaW50X3ZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShpbnRfdmFsdWUsIFdURjo6SW50MTI4
SW1wbChmbG9hdF92YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoLWludF92YWx1ZSwgV1RGOjpJ
bnQxMjhJbXBsKC1mbG9hdF92YWx1ZSkpOworICAgIH0KKworICAgIC8vIFJvdW5kIHRyaXAgY29u
dmVyc2lvbnMgd2l0aCBhIHNtYWxsIHNhbXBsZSBvZiByYW5kb21seSBnZW5lcmF0ZWQgdWludDY0
X3QKKyAgICAvLyB2YWx1ZXMgKGxlc3MgdGhhbiBpbnQ2NF90IG1heCBzbyB0aGF0IHZhbHVlICog
Ml42NCBmaXRzIGludG8gaW50MTI4KS4KKyAgICB1aW50NjRfdCB2YWx1ZXNbXSA9IHsgMHg2ZDQ0
OTJjMjRmYjg2MTk5LCAweDI2ZWFkNjVlNGNiMzU5YjUsCisgICAgICAgIDB4MmM0MzQwNzQzM2Jh
M2ZkMSwgMHgzYjU3NGVjNjY4ZGY2YjU1LAorICAgICAgICAweDFjNzUwZTU1YTI5ZjRmMGYgfTsK
KyAgICBmb3IgKHVpbnQ2NF90IHZhbHVlIDogdmFsdWVzKSB7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDw9IDY0OyArK2kpIHsKKyAgICAgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6
Ok1lc3NhZ2UoKQorICAgICAgICAgICAgICAgIDw8ICJ2YWx1ZSA9ICIgPDwgdmFsdWUgPDwgIjsg
aSA9ICIgPDwgaSk7CisKKyAgICAgICAgICAgIFR5cGVQYXJhbSBmdmFsdWUgPSBzdGQ6OmxkZXhw
KHN0YXRpY19jYXN0PFR5cGVQYXJhbT4odmFsdWUpLCBpKTsKKyAgICAgICAgICAgIEVYUEVDVF9E
T1VCTEVfRVEoZnZhbHVlLCBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KFdURjo6SW50MTI4SW1wbChm
dmFsdWUpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRE9VQkxFX0VRKC1mdmFsdWUsIHN0YXRpY19j
YXN0PFR5cGVQYXJhbT4oLVdURjo6SW50MTI4SW1wbChmdmFsdWUpKSk7CisgICAgICAgICAgICBF
WFBFQ1RfRE9VQkxFX0VRKC1mdmFsdWUsIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oV1RGOjpJbnQx
MjhJbXBsKC1mdmFsdWUpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRE9VQkxFX0VRKGZ2YWx1ZSwg
c3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigtV1RGOjpJbnQxMjhJbXBsKC1mdmFsdWUpKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBSb3VuZCB0cmlwIGNvbnZlcnNpb25zIHdpdGggYSBzbWFs
bCBzYW1wbGUgb2YgcmFuZG9tIGxhcmdlIHBvc2l0aXZlIHZhbHVlcy4KKyAgICBXVEY6OkludDEy
OEltcGwgbGFyZ2VfdmFsdWVzW10gPSB7CisgICAgICAgIFdURjo6TWFrZUludDEyOCgweDViMDY0
MGQ5NmM3YjNkOWYsIDB4YjdhNzE4OWU1MWQxODYyMiksCisgICAgICAgIFdURjo6TWFrZUludDEy
OCgweDM0YmVkMDQyYzZmNjUyNzAsIDB4NzNiMjM2NTcwNjY5YTA4OSksCisgICAgICAgIFdURjo6
TWFrZUludDEyOCgweDQzZGViYTllNmRhMTI3MjQsIDB4ZjdmMGY4M2RhNjg2Nzk3ZCksCisgICAg
ICAgIFdURjo6TWFrZUludDEyOCgweDcxZThkMzgzYmU0ZTU1ODksIDB4NzVjM2Y5NmZiMDA3NTJi
NikKKyAgICB9OworICAgIGZvciAoV1RGOjpJbnQxMjhJbXBsIHZhbHVlIDogbGFyZ2VfdmFsdWVz
KSB7CisgICAgICAgIC8vIE1ha2UgdmFsdWUgaGF2ZSBhcyBtYW55IHNpZ25pZmljYW50IGJpdHMg
YXMgY2FuIGJlIHJlcHJlc2VudGVkIGJ5CisgICAgICAgIC8vIHRoZSBtYW50aXNzYSwgYWxzbyBt
YWtpbmcgc3VyZSB0aGUgaGlnaGVzdCBhbmQgbG93ZXN0IGJpdCBpbiB0aGUgcmFuZ2UKKyAgICAg
ICAgLy8gYXJlIHNldC4KKyAgICAgICAgdmFsdWUgPj49ICgxMjcgLSBzdGQ6Om51bWVyaWNfbGlt
aXRzPFR5cGVQYXJhbT46OmRpZ2l0cyk7CisgICAgICAgIHZhbHVlIHw9IFdURjo6SW50MTI4SW1w
bCgxKSA8PCAoc3RkOjpudW1lcmljX2xpbWl0czxUeXBlUGFyYW0+OjpkaWdpdHMgLSAxKTsKKyAg
ICAgICAgdmFsdWUgfD0gMTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMjcgLSBzdGQ6
Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46OmRpZ2l0czsgKytpKSB7CisgICAgICAgICAgICBX
VEY6OkludDEyOEltcGwgaW50X3ZhbHVlID0gdmFsdWUgPDwgaTsKKyAgICAgICAgICAgIEVYUEVD
VF9FUShpbnRfdmFsdWUsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V1RGOjpJbnQxMjhJ
bXBsPihzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KGludF92YWx1ZSkpKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSgtaW50X3ZhbHVlLAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdURjo6SW50
MTI4SW1wbD4oc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigtaW50X3ZhbHVlKSkpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gU21hbGwgc2FtcGxlIG9mIGNoZWNrcyB0aGF0IHJvdW5kaW5nIGlz
IHRvd2FyZCB6ZXJvCisgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0o
MC4xKSkpOworICAgIEVYUEVDVF9FUSgxNywgV1RGOjpJbnQxMjhJbXBsKFR5cGVQYXJhbSgxNy44
KSkpOworICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoVHlwZVBhcmFtKC0wLjgpKSk7
CisgICAgRVhQRUNUX0VRKC01MywgV1RGOjpJbnQxMjhJbXBsKFR5cGVQYXJhbSgtNTMuMSkpKTsK
KyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKFR5cGVQYXJhbSgwLjUpKSk7CisgICAg
RVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbChUeXBlUGFyYW0oLTAuNSkpKTsKKyAgICBUeXBl
UGFyYW0ganVzdF9sdF9vbmUgPSBzdGQ6Om5leHR0b3dhcmQoVHlwZVBhcmFtKDEpLCBUeXBlUGFy
YW0oMCkpOworICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoanVzdF9sdF9vbmUpKTsK
KyAgICBUeXBlUGFyYW0ganVzdF9ndF9taW51c19vbmUgPSBzdGQ6Om5leHR0b3dhcmQoVHlwZVBh
cmFtKC0xKSwgVHlwZVBhcmFtKDApKTsKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBs
KGp1c3RfZ3RfbWludXNfb25lKSk7CisKKyAgICAvLyBDaGVjayBsaW1pdHMKKyAgICBFWFBFQ1Rf
RE9VQkxFX0VRKHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigxKSwgMTI3KSwKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOE1heCgpKSk7CisgICAgRVhQ
RUNUX0RPVUJMRV9FUSgtc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KDEpLCAxMjcp
LAorICAgICAgICBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KFdURjo6SW50MTI4TWluKCkpKTsKK30K
KworVEVTVChXVEZfSW50MTI4LCBGYWN0b3J5VGVzdCkKK3sKKyAgICBFWFBFQ1RfRVEoV1RGOjpJ
bnQxMjhJbXBsKC0xKSwgV1RGOjpNYWtlSW50MTI4KC0xLCAtMSkpOworICAgIEVYUEVDVF9FUShX
VEY6OkludDEyOEltcGwoLTMxKSwgV1RGOjpNYWtlSW50MTI4KC0xLCAtMzEpKTsKKyAgICBFWFBF
Q1RfRVEoV1RGOjpJbnQxMjhJbXBsKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigp
KSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KC0xLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0
X3Q+OjptaW4oKSkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoMCksIFdURjo6TWFr
ZUludDEyOCgwLCAwKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbCgxKSwgV1RGOjpN
YWtlSW50MTI4KDAsIDEpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDAs
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSk7Cit9CisKK1RFU1QoV1RGX0lu
dDEyOCwgSGlnaExvd1Rlc3QpCit7CisgICAgc3RydWN0IEhpZ2hMb3dQYWlyIHsKKyAgICAgICAg
aW50NjRfdCBoaWdoOworICAgICAgICB1aW50NjRfdCBsb3c7CisgICAgfTsKKyAgICBIaWdoTG93
UGFpciB2YWx1ZXNbXSB7IHsgMCwgMCB9LCB7IDAsIDEgfSwgeyAxLCAwIH0sIHsgMTIzLCA0NTYg
fSwgeyAtNjU0LCAzMjEgfSB9OworICAgIGZvciAoY29uc3QgSGlnaExvd1BhaXImIHBhaXIgOiB2
YWx1ZXMpIHsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIHZhbHVlID0gV1RGOjpNYWtlSW50MTI4
KHBhaXIuaGlnaCwgcGFpci5sb3cpOworICAgICAgICBFWFBFQ1RfRVEocGFpci5sb3csIFdURjo6
SW50MTI4TG93NjQodmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKHBhaXIuaGlnaCwgV1RGOjpJ
bnQxMjhIaWdoNjQodmFsdWUpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgTGltaXRz
VGVzdCkKK3sKKyAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KDB4N2ZmZmZmZmZmZmZmZmZm
ZiwgMHhmZmZmZmZmZmZmZmZmZmZmKSwKKyAgICAgICAgV1RGOjpJbnQxMjhNYXgoKSk7CisgICAg
RVhQRUNUX0VRKFdURjo6SW50MTI4TWF4KCksIH5XVEY6OkludDEyOE1pbigpKTsKK30KKworVEVT
VChXVEZfSW50MTI4LCBDb25zdGV4cHJUZXN0KQoreworICAgIGNvbnN0ZXhwciBXVEY6OkludDEy
OEltcGwgemVybyA9IFdURjo6SW50MTI4SW1wbCgpOworICAgIGNvbnN0ZXhwciBXVEY6OkludDEy
OEltcGwgb25lID0gMTsKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIG1pbnVzX3R3byA9
IC0yOworICAgIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwgbWluID0gV1RGOjpJbnQxMjhNaW4o
KTsKKyAgICBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIG1heCA9IFdURjo6SW50MTI4TWF4KCk7
CisgICAgRVhQRUNUX0VRKHplcm8sIFdURjo6SW50MTI4SW1wbCgwKSk7CisgICAgRVhQRUNUX0VR
KG9uZSwgV1RGOjpJbnQxMjhJbXBsKDEpKTsKKyAgICBFWFBFQ1RfRVEobWludXNfdHdvLCBXVEY6
Ok1ha2VJbnQxMjgoLTEsIC0yKSk7CisgICAgRVhQRUNUX0dUKG1heCwgb25lKTsKKyAgICBFWFBF
Q1RfTFQobWluLCBtaW51c190d28pOworfQorCitURVNUKFdURl9JbnQxMjgsIENvbXBhcmlzb25U
ZXN0KQoreworICAgIHN0cnVjdCBUZXN0Q2FzZSB7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBz
bWFsbGVyOworICAgICAgICBXVEY6OkludDEyOEltcGwgbGFyZ2VyOworICAgIH07CisgICAgVGVz
dENhc2UgY2FzZXNbXSA9IHsKKyAgICAgICAgeyBXVEY6OkludDEyOEltcGwoMCksIFdURjo6SW50
MTI4SW1wbCgxMjMpIH0sCisgICAgICAgIHsgV1RGOjpNYWtlSW50MTI4KC0xMiwgMzQpLCBXVEY6
Ok1ha2VJbnQxMjgoMTIsIDM0KSB9LAorICAgICAgICB7IFdURjo6TWFrZUludDEyOCgxLCAxMDAw
KSwgV1RGOjpNYWtlSW50MTI4KDEwMDAsIDEpIH0sCisgICAgICAgIHsgV1RGOjpNYWtlSW50MTI4
KC0xMDAwLCAxMDAwKSwgV1RGOjpNYWtlSW50MTI4KC0xLCAxKSB9LAorICAgIH07CisgICAgZm9y
IChjb25zdCBUZXN0Q2FzZSYgcGFpciA6IGNhc2VzKSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6
OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAicGFpci5zbWFsbGVyID0gIiA8PCBwYWlyLnNtYWxsZXIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICI7IHBhaXIubGFy
Z2VyID0gIiA8PCBwYWlyLmxhcmdlcik7CisKKyAgICAgICAgRVhQRUNUX1RSVUUocGFpci5zbWFs
bGVyID09IHBhaXIuc21hbGxlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAg
ICAgRVhQRUNUX1RSVUUocGFpci5sYXJnZXIgPT0gcGFpci5sYXJnZXIpOyAvLyBOT0xJTlQocmVh
ZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9GQUxTRShwYWlyLnNtYWxsZXIgPT0gcGFp
ci5sYXJnZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisKKyAgICAgICAgRVhQRUNU
X1RSVUUocGFpci5zbWFsbGVyICE9IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5
L2NoZWNrKQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5zbWFsbGVyICE9IHBhaXIuc21hbGxl
cik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBh
aXIubGFyZ2VyICE9IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQor
CisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21hbGxlciA8IHBhaXIubGFyZ2VyKTsgLy8gTk9M
SU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5sYXJnZXIg
PCBwYWlyLnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisKKyAgICAgICAg
RVhQRUNUX1RSVUUocGFpci5sYXJnZXIgPiBwYWlyLnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFi
aWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9GQUxTRShwYWlyLnNtYWxsZXIgPiBwYWlyLmxh
cmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKworICAgICAgICBFWFBFQ1RfVFJV
RShwYWlyLnNtYWxsZXIgPD0gcGFpci5sYXJnZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hl
Y2spCisgICAgICAgIEVYUEVDVF9GQUxTRShwYWlyLmxhcmdlciA8PSBwYWlyLnNtYWxsZXIpOyAv
LyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21h
bGxlciA8PSBwYWlyLnNtYWxsZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAg
ICAgIEVYUEVDVF9UUlVFKHBhaXIubGFyZ2VyIDw9IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJl
YWRhYmlsaXR5L2NoZWNrKQorCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIubGFyZ2VyID49IHBh
aXIuc21hbGxlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKHBhaXIuc21hbGxlciA+PSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0
eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX1RSVUUocGFpci5zbWFsbGVyID49IHBhaXIuc21hbGxl
cik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX1RSVUUocGFp
ci5sYXJnZXIgPj0gcGFpci5sYXJnZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisg
ICAgfQorfQorCitURVNUKFdURl9JbnQxMjgsIFVuYXJ5UGx1c1Rlc3QpCit7CisgICAgaW50NjRf
dCB2YWx1ZXM2NFtdID0geyAwLCAxLCAxMjM0NSwgMHg0MDAwMDAwMDAwMDAwMDAwLAorICAgICAg
ICBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSB9OworICAgIGZvciAoaW50NjRf
dCB2YWx1ZSA6IHZhbHVlczY0KSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1l
c3NhZ2UoKSA8PCAidmFsdWUgPSAiIDw8IHZhbHVlKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RG
OjpJbnQxMjhJbXBsKHZhbHVlKSwgK1dURjo6SW50MTI4SW1wbCh2YWx1ZSkpOworICAgICAgICBF
WFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKC12YWx1ZSksICtXVEY6OkludDEyOEltcGwoLXZhbHVl
KSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgodmFsdWUsIDApLCArV1RGOjpN
YWtlSW50MTI4KHZhbHVlLCAwKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgo
LXZhbHVlLCAwKSwgK1dURjo6TWFrZUludDEyOCgtdmFsdWUsIDApKTsKKyAgICB9Cit9CisKK1RF
U1QoV1RGX0ludDEyOCwgVW5hcnlOZWdhdGlvblRlc3QpCit7CisgICAgaW50NjRfdCB2YWx1ZXM2
NFtdID0geyAwLCAxLCAxMjM0NSwgMHg0MDAwMDAwMDAwMDAwMDAwLAorICAgICAgICBzdGQ6Om51
bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSB9OworICAgIGZvciAoaW50NjRfdCB2YWx1ZSA6
IHZhbHVlczY0KSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8
PCAidmFsdWUgPSAiIDw8IHZhbHVlKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJ
bXBsKC12YWx1ZSksIC1XVEY6OkludDEyOEltcGwodmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VR
KFdURjo6SW50MTI4SW1wbCh2YWx1ZSksIC1XVEY6OkludDEyOEltcGwoLXZhbHVlKSk7CisgICAg
ICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgoLXZhbHVlLCAwKSwgLVdURjo6TWFrZUludDEy
OCh2YWx1ZSwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHZhbHVlLCAw
KSwgLVdURjo6TWFrZUludDEyOCgtdmFsdWUsIDApKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0lu
dDEyOCwgTG9naWNhbE5vdFRlc3QpCit7CisgICAgRVhQRUNUX1RSVUUoIVdURjo6SW50MTI4SW1w
bCgwKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIEVYUEVD
VF9GQUxTRSghV1RGOjpNYWtlSW50MTI4KDAsIHVpbnQ2NF90IHsgMSB9IDw8IGkpKTsKKyAgICB9
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2MzsgKytpKSB7CisgICAgICAgIEVYUEVDVF9GQUxT
RSghV1RGOjpNYWtlSW50MTI4KGludDY0X3QgeyAxIH0gPDwgaSwgMCkpOworICAgIH0KK30KKwor
VEVTVChXVEZfSW50MTI4LCBBZGRpdGlvblN1YnRyYWN0aW9uVGVzdCkKK3sKKyAgICAvLyA2NCBi
aXQgcGFpcnMgdGhhdCB3aWxsIG5vdCBjYXVzZSBvdmVyZmxvdyAvIHVuZGVyZmxvdy4gVGhlc2Ug
dGVzdCBuZWdhdGl2ZQorICAgIC8vIGNhcnJ5OyBwb3NpdGl2ZSBjYXJyeSBtdXN0IGJlIGNoZWNr
ZWQgc2VwYXJhdGVseS4KKyAgICBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gY2FzZXNbXSB7
CisgICAgICAgIHsgMCwgMCB9LCAvLyAwLCAwCisgICAgICAgIHsgMCwgMjk0NTc4MTI5MDgzNCB9
LCAvLyAwLCArCisgICAgICAgIHsgMTkwODM1NzYxOTIzNCwgMCB9LCAvLyArLCAwCisgICAgICAg
IHsgMCwgLTEyMDQ4OTU5MTgyNDUgfSwgLy8gMCwgLQorICAgICAgICB7IC0yOTU3OTI4NTIzNTYw
LCAwIH0sIC8vIC0sIDAKKyAgICAgICAgeyA4OTAyMzk4MjMxMjQ2MSwgOTgzNDYwMTI1NjcxMzQg
fSwgLy8gKywgKworICAgICAgICB7IC02MzQ1NDIzNDU2ODIzOSwgLTIzNDU2MjM1MjMwNzczIH0s
IC8vIC0sIC0KKyAgICAgICAgeyA5ODI2MzQ1NzI2MzUwMiwgLTIxNDI4NTYxOTM1OTI1IH0sIC8v
ICssIC0KKyAgICAgICAgeyAtODgyMzUyMzc0Mzg0NjcsIDE1OTIzNjU5MjM0NTczIH0sIC8vIC0s
ICsKKyAgICB9OworICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IGNhc2VzKSB7CisgICAgICAg
IFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAgICAgPDwgInBhaXIg
PSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5zZWNvbmQgPDwgJ30nKTsKKworICAg
ICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgKyBwYWlyLnNlY29uZCks
CisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgKyBXVEY6OkludDEyOElt
cGwocGFpci5zZWNvbmQpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWly
LnNlY29uZCArIHBhaXIuZmlyc3QpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIu
c2Vjb25kKSArPSBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkpOworCisgICAgICAgIEVYUEVD
VF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJzdCAtIHBhaXIuc2Vjb25kKSwKKyAgICAgICAg
ICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0KSAtIFdURjo6SW50MTI4SW1wbChwYWlyLnNl
Y29uZCkpOworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kIC0g
cGFpci5maXJzdCksCisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpIC09
IFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0KSk7CisKKyAgICAgICAgRVhQRUNUX0VRKAorICAg
ICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kICsgcGFpci5maXJzdCwgMCksCisg
ICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5zZWNvbmQsIDApICsgV1RGOjpNYWtlSW50
MTI4KHBhaXIuZmlyc3QsIDApKTsKKyAgICAgICAgRVhQRUNUX0VRKAorICAgICAgICAgICAgV1RG
OjpNYWtlSW50MTI4KHBhaXIuZmlyc3QgKyBwYWlyLnNlY29uZCwgMCksCisgICAgICAgICAgICBX
VEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCwgMCkgKz0gV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vj
b25kLCAwKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKAorICAgICAgICAgICAgV1RGOjpNYWtlSW50
MTI4KHBhaXIuc2Vjb25kIC0gcGFpci5maXJzdCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJ
bnQxMjgocGFpci5zZWNvbmQsIDApIC0gV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApKTsK
KyAgICAgICAgRVhQRUNUX0VRKAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmly
c3QgLSBwYWlyLnNlY29uZCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5m
aXJzdCwgMCkgLT0gV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisgICAgfQorCisg
ICAgLy8gY2hlY2sgcG9zaXRpdmUgY2FycnkKKyAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4
KDMxLCAwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDIwLCAxKSArIFdURjo6TWFrZUludDEy
OCgxMCwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSk7Cit9CisKK1RFU1Qo
V1RGX0ludDEyOCwgSW5jcmVtZW50RGVjcmVtZW50VGVzdCkKK3sKKyAgICBXVEY6OkludDEyOElt
cGwgdmFsdWUgPSAwOworICAgIEVYUEVDVF9FUSgwLCB2YWx1ZSsrKTsKKyAgICBFWFBFQ1RfRVEo
MSwgdmFsdWUpOworICAgIEVYUEVDVF9FUSgxLCB2YWx1ZS0tKTsKKyAgICBFWFBFQ1RfRVEoMCwg
dmFsdWUpOworICAgIEVYUEVDVF9FUSgtMSwgLS12YWx1ZSk7CisgICAgRVhQRUNUX0VRKC0xLCB2
YWx1ZSk7CisgICAgRVhQRUNUX0VRKDAsICsrdmFsdWUpOworICAgIEVYUEVDVF9FUSgwLCB2YWx1
ZSk7Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgTXVsdGlwbGljYXRpb25UZXN0KQoreworICAgIC8v
IDEgYml0IHggMSBiaXQsIGFuZCBuZWdhdGl2ZSBjb21iaW5hdGlvbnMKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxMjcgLSBp
OyArK2opIHsKKyAgICAgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8
PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBqKTsKKyAgICAgICAgICAgIFdURjo6SW50MTI4
SW1wbCBhID0gV1RGOjpJbnQxMjhJbXBsKDEpIDw8IGk7CisgICAgICAgICAgICBXVEY6OkludDEy
OEltcGwgYiA9IFdURjo6SW50MTI4SW1wbCgxKSA8PCBqOworICAgICAgICAgICAgV1RGOjpJbnQx
MjhJbXBsIGMgPSBXVEY6OkludDEyOEltcGwoMSkgPDwgKGkgKyBqKTsKKworICAgICAgICAgICAg
RVhQRUNUX0VRKGMsIGEgKiBiKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgtYywgLWEgKiBiKTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUSgtYywgYSAqIC1iKTsKKyAgICAgICAgICAgIEVYUEVDVF9F
UShjLCAtYSAqIC1iKTsKKworICAgICAgICAgICAgRVhQRUNUX0VRKGMsIFdURjo6SW50MTI4SW1w
bChhKSAqPSBiKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgtYywgV1RGOjpJbnQxMjhJbXBsKC1h
KSAqPSBiKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgtYywgV1RGOjpJbnQxMjhJbXBsKGEpICo9
IC1iKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjLCBXVEY6OkludDEyOEltcGwoLWEpICo9IC1i
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFBhaXJzIG9mIHJhbmRvbSB2YWx1ZXMgdGhh
dCB3aWxsIG5vdCBvdmVyZmxvdyBzaWduZWQgNjQtYml0IG11bHRpcGxpY2F0aW9uCisgICAgc3Rk
OjpwYWlyPGludDY0X3QsIGludDY0X3Q+IHNtYWxsX3ZhbHVlc1tdID0geworICAgICAgICB7IDB4
NWU2MSwgMHhmMjlmNzljYTE0YjQgfSwgLy8gKywgKworICAgICAgICB7IDB4M2UwMzNiLCAtMHg2
MTJjMGVlNTQ5IH0sIC8vICssIC0KKyAgICAgICAgeyAtMHgwNTJjZTdlOCwgMHg3YzcyOGYwZiB9
LCAvLyAtLCArCisgICAgICAgIHsgLTB4M2FmNzA1NDYyNiwgLTB4ZmIxZTFkIH0sIC8vIC0sIC0K
KyAgICB9OworICAgIGZvciAoY29uc3Qgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+JiBwYWly
IDogc21hbGxfdmFsdWVzKSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3Nh
Z2UoKQorICAgICAgICAgICAgPDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwg
cGFpci5zZWNvbmQgPDwgJ30nKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBs
KHBhaXIuZmlyc3QgKiBwYWlyLnNlY29uZCksCisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwo
cGFpci5maXJzdCkgKiBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0ICogcGFpci5zZWNvbmQpLAorICAgICAg
ICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpICo9IFdURjo6SW50MTI4SW1wbChwYWly
LnNlY29uZCkpOworCisgICAgICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJz
dCAqIHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZp
cnN0LCAwKSAqIFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworICAgICAgICBFWFBFQ1Rf
RVEoV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QgKiBwYWlyLnNlY29uZCwgMCksCisgICAgICAg
ICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCwgMCkgKj0gV1RGOjpJbnQxMjhJbXBsKHBh
aXIuc2Vjb25kKSk7CisgICAgfQorCisgICAgLy8gUGFpcnMgb2YgcG9zaXRpdmUgcmFuZG9tIHZh
bHVlcyB0aGF0IHdpbGwgbm90IG92ZXJmbG93IDY0LWJpdAorICAgIC8vIG11bHRpcGxpY2F0aW9u
IGFuZCBjYW4gYmUgbGVmdCBzaGlmdGVkIGJ5IDMyIHdpdGhvdXQgb3ZlcmZsb3cKKyAgICBzdGQ6
OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gc21hbGxfdmFsdWVzMltdID0geworICAgICAgICB7IDB4
MWJiMGExMTAsIDB4MzE0ODc2NzEgfSwKKyAgICAgICAgeyAweDQ3OTI3ODRlLCAweDI4YWRkN2Q3
IH0sCisgICAgICAgIHsgMHg3YjY2NTUzYSwgMHgxMWRmZjhlZiB9LAorICAgIH07CisgICAgZm9y
IChjb25zdCBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4mIHBhaXIgOiBzbWFsbF92YWx1ZXMy
KSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAgICAgICAg
ICAgPDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5zZWNvbmQgPDwg
J30nKTsKKworICAgICAgICBXVEY6OkludDEyOEltcGwgYSA9IFdURjo6SW50MTI4SW1wbChwYWly
LmZpcnN0IDw8IDMyKTsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGIgPSBXVEY6OkludDEyOElt
cGwocGFpci5zZWNvbmQgPDwgMzIpOworICAgICAgICBXVEY6OkludDEyOEltcGwgYyA9IFdURjo6
TWFrZUludDEyOChwYWlyLmZpcnN0ICogcGFpci5zZWNvbmQsIDApOworCisgICAgICAgIEVYUEVD
VF9FUShjLCBhICogYik7CisgICAgICAgIEVYUEVDVF9FUSgtYywgLWEgKiBiKTsKKyAgICAgICAg
RVhQRUNUX0VRKC1jLCBhICogLWIpOworICAgICAgICBFWFBFQ1RfRVEoYywgLWEgKiAtYik7CisK
KyAgICAgICAgRVhQRUNUX0VRKGMsIFdURjo6SW50MTI4SW1wbChhKSAqPSBiKTsKKyAgICAgICAg
RVhQRUNUX0VRKC1jLCBXVEY6OkludDEyOEltcGwoLWEpICo9IGIpOworICAgICAgICBFWFBFQ1Rf
RVEoLWMsIFdURjo6SW50MTI4SW1wbChhKSAqPSAtYik7CisgICAgICAgIEVYUEVDVF9FUShjLCBX
VEY6OkludDEyOEltcGwoLWEpICo9IC1iKTsKKyAgICB9CisKKyAgICAvLyBjaGVjayAwLCAxLCBh
bmQgLTEgYmVoYXZpb3Igd2l0aCBsYXJnZSB2YWx1ZXMKKyAgICBXVEY6OkludDEyOEltcGwgbGFy
Z2VfdmFsdWVzW10gPSB7CisgICAgICAgIHsgV1RGOjpNYWtlSW50MTI4KDB4ZDY2ZjA2MWFmMDJk
MDQwOCwgMHg3MjdkMjg0NmNiNDc1YjUzKSB9LAorICAgICAgICB7IFdURjo6TWFrZUludDEyOCgw
eDI3YjhkNWVkNjEwNDQ1MmQsIDB4MDNmOGEzM2IwZWUxZGY0ZikgfSwKKyAgICAgICAgeyAtV1RG
OjpNYWtlSW50MTI4KDB4NjIxYjY2MjZiOWU4ZDA0MiwgMHgyNzMxMWFjOTlkZjAwOTM4KSB9LAor
ICAgICAgICB7IC1XVEY6Ok1ha2VJbnQxMjgoMHgzNGUwNjU2ZjFlOTVmYjYwLCAweDQyODFjZmQ3
MzEyNTdhNDcpIH0sCisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50MTI4SW1wbCB2YWx1ZSA6IGxh
cmdlX3ZhbHVlcykgeworICAgICAgICBFWFBFQ1RfRVEoMCwgMCAqIHZhbHVlKTsKKyAgICAgICAg
RVhQRUNUX0VRKDAsIHZhbHVlICogMCk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEy
OEltcGwoMCkgKj0gdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgKj0gMCk7CisK
KyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCAxICogdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEo
dmFsdWUsIHZhbHVlICogMSk7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgV1RGOjpJbnQxMjhJ
bXBsKDEpICo9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB2YWx1ZSAqPSAxKTsK
KworICAgICAgICBFWFBFQ1RfRVEoLXZhbHVlLCAtMSAqIHZhbHVlKTsKKyAgICAgICAgRVhQRUNU
X0VRKC12YWx1ZSwgdmFsdWUgKiAtMSk7CisgICAgICAgIEVYUEVDVF9FUSgtdmFsdWUsIFdURjo6
SW50MTI4SW1wbCgtMSkgKj0gdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoLXZhbHVlLCB2YWx1
ZSAqPSAtMSk7CisgICAgfQorCisgICAgLy8gTWFudWFsbHkgY2FsY3VsYXRlZCByYW5kb20gbGFy
Z2UgdmFsdWUgY2FzZXMKKyAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KDB4Y2QwZWZkMzQ0
MjIxOWJiLCAweGRlNDdjMDViY2Q5ZGY2ZTEpLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHg3
YzY0NDgsIDB4M2JjNDI4NWM0N2E5ZDI1MykgKiAweDFhNjAzNzUzN2IpOworICAgIEVYUEVDVF9F
USgtV1RGOjpNYWtlSW50MTI4KDB4MWY4ZjE0OTg1MGIxZTVlNiwgMHgxZTUwZDZiNTJkMjcyYzNl
KSwKKyAgICAgICAgLVdURjo6TWFrZUludDEyOCgweDIzLCAweDJlNjhhNTEzY2ExYjg4NTkpICog
MHhlNWE0MzRjZDE0ODY2ZSk7CisgICAgRVhQRUNUX0VRKC1XVEY6Ok1ha2VJbnQxMjgoMHg1NWNh
ZTczMjAyOWQxZmNlLCAweGNhNjQ3NGI2NDIzMjYzZTQpLAorICAgICAgICAweGE5Yjk4YThkZGY2
NmJjICogLVdURjo6TWFrZUludDEyOCgweDgxLCAweDY3MmU1ODIzMWUyNDY5ZDcpKTsKKyAgICBF
WFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KDB4MTljOGI3NjIwYjUwN2RjNCwgMHhmZWMwNDJiNzFh
NWYyOWE0KSwKKyAgICAgICAgLTB4M2UzOTM0MTE0NyAqIC1XVEY6Ok1ha2VJbnQxMjgoMHg2YTE0
YjIsIDB4NWVkMzRjY2E0MjMyN2IzYykpOworCisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEy
OCgweGNkMGVmZDM0NDIyMTliYiwgMHhkZTQ3YzA1YmNkOWRmNmUxKSwKKyAgICAgICAgV1RGOjpN
YWtlSW50MTI4KDB4N2M2NDQ4LCAweDNiYzQyODVjNDdhOWQyNTMpICo9IDB4MWE2MDM3NTM3Yik7
CisgICAgRVhQRUNUX0VRKC1XVEY6Ok1ha2VJbnQxMjgoMHgxZjhmMTQ5ODUwYjFlNWU2LCAweDFl
NTBkNmI1MmQyNzJjM2UpLAorICAgICAgICAtV1RGOjpNYWtlSW50MTI4KDB4MjMsIDB4MmU2OGE1
MTNjYTFiODg1OSkgKj0gMHhlNWE0MzRjZDE0ODY2ZSk7CisgICAgRVhQRUNUX0VRKC1XVEY6Ok1h
a2VJbnQxMjgoMHg1NWNhZTczMjAyOWQxZmNlLCAweGNhNjQ3NGI2NDIzMjYzZTQpLAorICAgICAg
ICBXVEY6OkludDEyOEltcGwoMHhhOWI5OGE4ZGRmNjZiYykgKj0gLVdURjo6TWFrZUludDEyOCgw
eDgxLCAweDY3MmU1ODIzMWUyNDY5ZDcpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4
KDB4MTljOGI3NjIwYjUwN2RjNCwgMHhmZWMwNDJiNzFhNWYyOWE0KSwKKyAgICAgICAgV1RGOjpJ
bnQxMjhJbXBsKC0weDNlMzkzNDExNDcpICo9IC1XVEY6Ok1ha2VJbnQxMjgoMHg2YTE0YjIsIDB4
NWVkMzRjY2E0MjMyN2IzYykpOworfQorCitURVNUKFdURl9JbnQxMjgsIERpdmlzaW9uQW5kTW9k
dWxvVGVzdCkKK3sKKyAgICAvLyBDaGVjayBhZ2FpbnN0IDY0IGJpdCBkaXZpc2lvbiBhbmQgbW9k
dWxvIG9wZXJhdG9ycyB3aXRoIGEgc2FtcGxlIG9mCisgICAgLy8gcmFuZG9tbHkgZ2VuZXJhdGVk
IHBhaXJzLgorICAgIHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiBzbWFsbF9wYWlyc1tdID0g
eworICAgICAgICB7IDB4MTVmMmE2NDEzOCwgMHg2N2RhMDUgfSwKKyAgICAgICAgeyAweDVlNTZk
MTk0YWY0MzA0NWYsIDB4Y2YxNTQzZmI5OSB9LAorICAgICAgICB7IDB4MTVlNjFlZDA1MjAzNmEs
IC0weGM4ZTYgfSwKKyAgICAgICAgeyAweDg4MTI1YTM0MWU4NSwgLTB4ZDIzZmI3NzY4MyB9LAor
ICAgICAgICB7IC0weGMwNmUyMCwgMHg1YSB9LAorICAgICAgICB7IC0weDRmMTAwMjE5YWVhM2U4
NWQsIDB4ZGNjNTZjYjRlZmU5OTMgfSwKKyAgICAgICAgeyAtMHgxNjhkNjI5MTA1LCAtMHhhNyB9
LAorICAgICAgICB7IC0weDdiNDRlOTJmMDNhYjIzNzUsIC0weDY1MTYgfSwKKyAgICB9OworICAg
IGZvciAoY29uc3Qgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+JiBwYWlyIDogc21hbGxfcGFp
cnMpIHsKKyAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpCisgICAgICAg
ICAgICA8PCAicGFpciA9IHsiIDw8IHBhaXIuZmlyc3QgPDwgIiwgIiA8PCBwYWlyLnNlY29uZCA8
PCAnfScpOworCisgICAgICAgIFdURjo6SW50MTI4SW1wbCBkaXZpZGVuZCA9IHBhaXIuZmlyc3Q7
CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBkaXZpc29yID0gcGFpci5zZWNvbmQ7CisgICAgICAg
IGludDY0X3QgcXVvdGllbnQgPSBwYWlyLmZpcnN0IC8gcGFpci5zZWNvbmQ7CisgICAgICAgIGlu
dDY0X3QgcmVtYWluZGVyID0gcGFpci5maXJzdCAlIHBhaXIuc2Vjb25kOworCisgICAgICAgIEVY
UEVDVF9FUShxdW90aWVudCwgZGl2aWRlbmQgLyBkaXZpc29yKTsKKyAgICAgICAgRVhQRUNUX0VR
KHF1b3RpZW50LCBXVEY6OkludDEyOEltcGwoZGl2aWRlbmQpIC89IGRpdmlzb3IpOworICAgICAg
ICBFWFBFQ1RfRVEocmVtYWluZGVyLCBkaXZpZGVuZCAlIGRpdmlzb3IpOworICAgICAgICBFWFBF
Q1RfRVEocmVtYWluZGVyLCBXVEY6OkludDEyOEltcGwoZGl2aWRlbmQpICU9IGRpdmlzb3IpOwor
ICAgIH0KKworICAgIC8vIFRlc3QgYmVoYXZpb3Igd2l0aCAwLCAxLCBhbmQgLTEgd2l0aCBhIHNh
bXBsZSBvZiByYW5kb21seSBnZW5lcmF0ZWQgbGFyZ2UKKyAgICAvLyB2YWx1ZXMuCisgICAgV1RG
OjpJbnQxMjhJbXBsIHZhbHVlc1tdID0geworICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHg2M2Qy
NmVlNjg4YTk2MmIyLCAweDllMTQxMWFiZGE1YzFkNzApLAorICAgICAgICBXVEY6Ok1ha2VJbnQx
MjgoMHgxNTJmMzg1MTU5ZDZmOTg2LCAweGJmOGQ0OGVmNjNkYTM5NWQpLAorICAgICAgICAtV1RG
OjpNYWtlSW50MTI4KDB4MzA5OGQ3NTY3MDMwMDM4YywgMHgxNGU3YThhMDk4ZGMyMTY0KSwKKyAg
ICAgICAgLVdURjo6TWFrZUludDEyOCgweDQ5YTAzN2FjYTM1YzgwOWYsIDB4YTZhODc1MjU0ODBl
ZjMzMCksCisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50MTI4SW1wbCB2YWx1ZSA6IHZhbHVlcykg
eworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwgInZhbHVlID0g
IiA8PCB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKDAsIDAgLyB2YWx1ZSk7CisgICAgICAg
IEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoMCkgLz0gdmFsdWUpOworICAgICAgICBFWFBF
Q1RfRVEoMCwgMCAlIHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1w
bCgwKSAlPSB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB2YWx1ZSAvIDEpOwor
ICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIFdURjo6SW50MTI4SW1wbCh2YWx1ZSkgLz0gMSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgwLCB2YWx1ZSAlIDEpOworICAgICAgICBFWFBFQ1RfRVEoMCwgV1RG
OjpJbnQxMjhJbXBsKHZhbHVlKSAlPSAxKTsKKworICAgICAgICBFWFBFQ1RfRVEoLXZhbHVlLCB2
YWx1ZSAvIC0xKTsKKyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgV1RGOjpJbnQxMjhJbXBsKHZh
bHVlKSAvPSAtMSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB2YWx1ZSAlIC0xKTsKKyAgICAgICAg
RVhQRUNUX0VRKDAsIFdURjo6SW50MTI4SW1wbCh2YWx1ZSkgJT0gLTEpOworICAgIH0KKworICAg
IC8vIE1pbiBhbmQgbWF4IHZhbHVlcworICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOE1heCgp
IC8gV1RGOjpJbnQxMjhNaW4oKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4TWF4KCksIFdU
Rjo6SW50MTI4TWF4KCkgJSBXVEY6OkludDEyOE1pbigpKTsKKyAgICBFWFBFQ1RfRVEoLTEsIFdU
Rjo6SW50MTI4TWluKCkgLyBXVEY6OkludDEyOE1heCgpKTsKKyAgICBFWFBFQ1RfRVEoLTEsIFdU
Rjo6SW50MTI4TWluKCkgJSBXVEY6OkludDEyOE1heCgpKTsKKworICAgIC8vIFBvd2VyIG9mIHR3
byBkaXZpc2lvbiBhbmQgbW9kdWxvIG9mIHJhbmRvbSBsYXJnZSBkaXZpZGVuZHMKKyAgICBXVEY6
OkludDEyOEltcGwgcG9zaXRpdmVfdmFsdWVzW10gPSB7CisgICAgICAgIFdURjo6TWFrZUludDEy
OCgweDIxZTFhMWNjNjk1NzQ2MjAsIDB4ZTdhYzQ0N2ZhYjJmYzg2OSksCisgICAgICAgIFdURjo6
TWFrZUludDEyOCgweDMyYzJmZjNhYjg5ZTY2ZTgsIDB4MDMzNzlhNjEzZmQxY2U3NCksCisgICAg
ICAgIFdURjo6TWFrZUludDEyOCgweDZmMzJjYTc4NjE4NGRjYWYsIDB4MDQ2ZjljOWVjYjNhOWNl
MSksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgweDFhZWI0NjlkZDk5MGUwZWUsIDB4ZGEyNzQw
ZjI0M2NkMzdlYiksCisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50MTI4SW1wbCB2YWx1ZSA6IHBv
c2l0aXZlX3ZhbHVlcykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEyNzsgKytpKSB7
CisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkKKyAgICAgICAg
ICAgICAgICA8PCAidmFsdWUgPSAiIDw8IHZhbHVlIDw8ICI7IGkgPSAiIDw8IGkpOworICAgICAg
ICAgICAgV1RGOjpJbnQxMjhJbXBsIHBvd2VyX29mX3R3byA9IFdURjo6SW50MTI4SW1wbCgxKSA8
PCBpOworCisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWUgPj4gaSwgdmFsdWUgLyBwb3dlcl9v
Zl90d28pOworICAgICAgICAgICAgRVhQRUNUX0VRKHZhbHVlID4+IGksIFdURjo6SW50MTI4SW1w
bCh2YWx1ZSkgLz0gcG93ZXJfb2ZfdHdvKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSAm
IChwb3dlcl9vZl90d28gLSAxKSwgdmFsdWUgJSBwb3dlcl9vZl90d28pOworICAgICAgICAgICAg
RVhQRUNUX0VRKHZhbHVlICYgKHBvd2VyX29mX3R3byAtIDEpLAorICAgICAgICAgICAgICAgIFdU
Rjo6SW50MTI4SW1wbCh2YWx1ZSkgJT0gcG93ZXJfb2ZfdHdvKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0ZWQgY2FzZXMgd2l0aCByYW5kb20gbGFyZ2UgZGl2
aWRlbmRzCisgICAgc3RydWN0IERpdmlzaW9uTW9kQ2FzZSB7CisgICAgICAgIFdURjo6SW50MTI4
SW1wbCBkaXZpZGVuZDsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGRpdmlzb3I7CisgICAgICAg
IFdURjo6SW50MTI4SW1wbCBxdW90aWVudDsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIHJlbWFp
bmRlcjsKKyAgICB9OworICAgIERpdmlzaW9uTW9kQ2FzZSBtYW51YWxfY2FzZXNbXSA9IHsKKyAg
ICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgoMHg2YWRhNDhkNDg5MDA3OTY2LCAweDNjOWM1Yzk4MTUw
ZDVkNjkpLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4OGJjMzA4ZmIsIDB4OGNiOWNj
OWEzYjgwMzM0NCksIDB4YzNiODdlMDgsCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHgx
YjdkYjVlMSwgMHhkOWVjYTM0YjdhZjA0YjQ5KSB9LAorICAgICAgICB7IFdURjo6TWFrZUludDEy
OCgweGQ2OTQ2NTExYjViLCAweDQ4ODZjNWM5NjU0NmJmNWYpLAorICAgICAgICAgICAgLVdURjo6
TWFrZUludDEyOCgweDI2M2IsIDB4ZmQ1MTYyNzllZmNmZTJkYyksIC0weDU5Y2JhYmYwLAorICAg
ICAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4NjIyLCAweGY0NjI5MDkxNTU2NTFkMWYpIH0sCisg
ICAgICAgIHsgLVdURjo6TWFrZUludDEyOCgweDMzZGI3MzRmOWU4ZDEzOTksIDB4ODQ0N2FjOTI0
ODJiY2E0ZCksIDB4Mzc0OTUwNzgyNDAsCisgICAgICAgICAgICAtV1RGOjpNYWtlSW50MTI4KDB4
ZjAxZjEsIDB4YmMwMzY4YmY5YTc3ZWFlOCksIC0weDIxYTUwOGY0MDRkIH0sCisgICAgICAgIHsg
LVdURjo6TWFrZUludDEyOCgweDEzZjgzN2I0MDlhMDdlN2QsIDB4N2ZjOGUyNDhhN2Q3MzU2MCks
IC0weDFiOWYsCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHhiOTE1NzU1NmQ3MjQsIDB4
YjE0ZjYzNTcxNGQ3NTYzZSksIC0weDFhZGUgfSwKKyAgICB9OworICAgIGZvciAoY29uc3QgRGl2
aXNpb25Nb2RDYXNlIHRlc3RfY2FzZSA6IG1hbnVhbF9jYXNlcykgeworICAgICAgICBFWFBFQ1Rf
RVEodGVzdF9jYXNlLnF1b3RpZW50LCB0ZXN0X2Nhc2UuZGl2aWRlbmQgLyB0ZXN0X2Nhc2UuZGl2
aXNvcik7CisgICAgICAgIEVYUEVDVF9FUSh0ZXN0X2Nhc2UucXVvdGllbnQsCisgICAgICAgICAg
ICBXVEY6OkludDEyOEltcGwodGVzdF9jYXNlLmRpdmlkZW5kKSAvPSB0ZXN0X2Nhc2UuZGl2aXNv
cik7CisgICAgICAgIEVYUEVDVF9FUSh0ZXN0X2Nhc2UucmVtYWluZGVyLCB0ZXN0X2Nhc2UuZGl2
aWRlbmQgJSB0ZXN0X2Nhc2UuZGl2aXNvcik7CisgICAgICAgIEVYUEVDVF9FUSh0ZXN0X2Nhc2Uu
cmVtYWluZGVyLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHRlc3RfY2FzZS5kaXZpZGVu
ZCkgJT0gdGVzdF9jYXNlLmRpdmlzb3IpOworICAgIH0KK30KKworVEVTVChXVEZfSW50MTI4LCBC
aXR3aXNlTG9naWNUZXN0KQoreworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoLTEpLCB+
V1RGOjpJbnQxMjhJbXBsKDApKTsKKworICAgIFdURjo6SW50MTI4SW1wbCB2YWx1ZXNbXSB7Cisg
ICAgICAgIDAsIC0xLCAweGRlNDAwYmVlMDVjM2ZmNmIsIFdURjo6TWFrZUludDEyOCgweDdmMzIx
NzhkZDgxZDYzNGEsIDApLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHhhZjUzOTA1NzA1NTYx
M2E5LCAweDdkMTA0ZDdkOTQ2YzJlNGQpCisgICAgfTsKKyAgICBmb3IgKFdURjo6SW50MTI4SW1w
bCB2YWx1ZSA6IHZhbHVlcykgeworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIH5+dmFsdWUpOwor
CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUgfCB2YWx1ZSk7CisgICAgICAgIEVYUEVD
VF9FUSh2YWx1ZSwgdmFsdWUgJiB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB2YWx1ZSBe
IHZhbHVlKTsKKworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIFdURjo6SW50MTI4SW1wbCh2YWx1
ZSkgfD0gdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIFdURjo6SW50MTI4SW1wbCh2
YWx1ZSkgJj0gdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKHZh
bHVlKSBePSB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB2YWx1ZSB8IDApOwor
ICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgJiAwKTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVl
LCB2YWx1ZSBeIDApOworCisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoLTEpLCB2
YWx1ZSB8IFdURjo6SW50MTI4SW1wbCgtMSkpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIHZh
bHVlICYgV1RGOjpJbnQxMjhJbXBsKC0xKSk7CisgICAgICAgIEVYUEVDVF9FUSh+dmFsdWUsIHZh
bHVlIF4gV1RGOjpJbnQxMjhJbXBsKC0xKSk7CisgICAgfQorCisgICAgLy8gc21hbGwgc2FtcGxl
IG9mIHJhbmRvbWx5IGdlbmVyYXRlZCBpbnQ2NF90J3MKKyAgICBzdGQ6OnBhaXI8aW50NjRfdCwg
aW50NjRfdD4gcGFpcnM2NFtdIHsKKyAgICAgICAgeyAweDdmODY3OTdmNWU5OTFhZjQsIDB4MWVl
MzA0OTRmYjAwN2M5NyB9LAorICAgICAgICB7IDB4MGIyNzgyODJiYWNmMDFhZiwgMHg1ODc4MGUw
YTU3YTQ5ZTg2IH0sCisgICAgICAgIHsgMHgwNTlmMjY2Y2NiOTNhNjY2LCAweDNkNWI3MzFiYWU5
Mjg2ZjUgfSwKKyAgICAgICAgeyAweDYzYzBjNDgyMGYxMjEwOGMsIDB4NTgxNjY3MTNjMTJlMWMz
YSB9LAorICAgICAgICB7IDB4MzgxNDg4YmIyZWQyYTY2ZSwgMHgyMjIwYTNlYjc2YTM2OThjIH0s
CisgICAgICAgIHsgMHgyYTBhMGRmYjgxZTA2ZjIxLCAweDRiNjA1ODU5MjdmNTUyM2MgfSwKKyAg
ICAgICAgeyAweDU1NWIxYzNhMDM2OTg1MzcsIDB4MjU0NzhjZDE5ZDhlNTNjYiB9LAorICAgICAg
ICB7IDB4NDc1MGY2ZjI3ZDc3OTIyNSwgMHgxNjM5NzU1M2M2ZmYwNWZjIH0sCisgICAgfTsKKyAg
ICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiYgcGFpciA6IHBhaXJzNjQp
IHsKKyAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpCisgICAgICAgICAg
ICA8PCAicGFpciA9IHsiIDw8IHBhaXIuZmlyc3QgPDwgIiwgIiA8PCBwYWlyLnNlY29uZCA8PCAn
fScpOworCisgICAgICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgofnBhaXIuZmlyc3QsIH5w
YWlyLnNlY29uZCksCisgICAgICAgICAgICB+V1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIHBh
aXIuc2Vjb25kKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZp
cnN0ICYgcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmly
c3QpICYgV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVDVF9FUShX
VEY6OkludDEyOEltcGwocGFpci5maXJzdCB8IHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdU
Rjo6SW50MTI4SW1wbChwYWlyLmZpcnN0KSB8IFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkp
OworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgXiBwYWlyLnNl
Y29uZCksCisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgXiBXVEY6Oklu
dDEyOEltcGwocGFpci5zZWNvbmQpKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJ
bXBsKHBhaXIuZmlyc3QgJiBwYWlyLnNlY29uZCksCisgICAgICAgICAgICBXVEY6OkludDEyOElt
cGwocGFpci5maXJzdCkgJj0gV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSk7CisgICAgICAg
IEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJzdCB8IHBhaXIuc2Vjb25kKSwKKyAg
ICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0KSB8PSBXVEY6OkludDEyOEltcGwo
cGFpci5zZWNvbmQpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZp
cnN0IF4gcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmly
c3QpIF49IFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworCisgICAgICAgIEVYUEVDVF9F
USgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0ICYgcGFpci5zZWNvbmQs
IDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApICYgV1RGOjpN
YWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAg
ICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0IHwgcGFpci5zZWNvbmQsIDApLAorICAgICAg
ICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApIHwgV1RGOjpNYWtlSW50MTI4KHBh
aXIuc2Vjb25kLCAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFr
ZUludDEyOChwYWlyLmZpcnN0IF4gcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpN
YWtlSW50MTI4KHBhaXIuZmlyc3QsIDApIF4gV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAw
KSk7CisKKyAgICAgICAgRVhQRUNUX0VRKAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBh
aXIuZmlyc3QgJiBwYWlyLnNlY29uZCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgo
cGFpci5maXJzdCwgMCkgJj0gV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisgICAg
ICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0IHwg
cGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3Qs
IDApIHw9IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgICAgICBFWFBFQ1Rf
RVEoCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCBeIHBhaXIuc2Vjb25k
LCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSBePSBXVEY6
Ok1ha2VJbnQxMjgocGFpci5zZWNvbmQsIDApKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0ludDEy
OCwgQml0d2lzZVNoaWZ0VGVzdCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kp
IHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gaTsgKytqKSB7CisgICAgICAgICAgICAv
LyBMZWZ0IHNoaWZ0IGZyb20gai10aCBiaXQgdG8gaS10aCBiaXQuCisgICAgICAgICAgICBTQ09Q
RURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwgImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIg
PDwgaik7CisgICAgICAgICAgICBFWFBFQ1RfRVEodWludDY0X3QgeyAxIH0gPDwgaSwgV1RGOjpJ
bnQxMjhJbXBsKHVpbnQ2NF90IHsgMSB9IDw8IGopIDw8IChpIC0gaikpOworICAgICAgICAgICAg
RVhQRUNUX0VRKHVpbnQ2NF90IHsgMSB9IDw8IGksIFdURjo6SW50MTI4SW1wbCh1aW50NjRfdCB7
IDEgfSA8PCBqKSA8PD0gKGkgLSBqKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCA2MzsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNjQ7ICsr
aikgeworICAgICAgICAgICAgLy8gTGVmdCBzaGlmdCBmcm9tIGotdGggYml0IHRvIChpICsgNjQp
LXRoIGJpdC4KKyAgICAgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8
PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBqKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShX
VEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwgaSwgMCksCisgICAgICAgICAgICAgICAg
V1RGOjpJbnQxMjhJbXBsKHVpbnQ2NF90IHsgMSB9IDw8IGopIDw8IChpICsgNjQgLSBqKSk7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGks
IDApLAorICAgICAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBq
KSA8PD0gKGkgKyA2NCAtIGopKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8PSBpOyArK2opIHsKKyAgICAgICAgICAgIC8vIExlZnQgc2hpZnQgZnJvbSAoaiArIDY0KS10
aCBiaXQgdG8gKGkgKyA2NCktdGggYml0LgorICAgICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVz
dGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7IGogPSAiIDw8IGopOworICAgICAg
ICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBpLCAwKSwK
KyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwgaiwgMCkg
PDwgKGkgLSBqKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHVpbnQ2
NF90IHsgMSB9IDw8IGksIDApLAorICAgICAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCh1aW50
NjRfdCB7IDEgfSA8PCBqLCAwKSA8PD0gKGkgLSBqKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IGk7
IGogPCA2NDsgKytqKSB7CisgICAgICAgICAgICAvLyBSaWdodCBzaGlmdCBmcm9tIGotdGggYml0
IHRvIGktdGggYml0LgorICAgICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2Fn
ZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7IGogPSAiIDw8IGopOworICAgICAgICAgICAgRVhQRUNU
X0VRKHVpbnQ2NF90IHsgMSB9IDw8IGksIFdURjo6SW50MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8
PCBqKSA+PiAoaiAtIGkpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh1aW50NjRfdCB7IDEgfSA8
PCBpLCBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAxIH0gPDwgaikgPj49IChqIC0gaSkpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNjM7ICsraikgeworICAgICAg
ICAgICAgLy8gUmlnaHQgc2hpZnQgZnJvbSAoaiArIDY0KS10aCBiaXQgdG8gaS10aCBiaXQuCisg
ICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwgImkgPSAiIDw8
IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBFWFBFQ1RfRVEodWludDY0X3QgeyAx
IH0gPDwgaSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0g
PDwgaiwgMCkgPj4gKGogKyA2NCAtIGkpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh1aW50NjRf
dCB7IDEgfSA8PCBpLAorICAgICAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7
IDEgfSA8PCBqLCAwKSA+Pj0gKGogKyA2NCAtIGkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDYzOyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IGk7IGog
PCA2MzsgKytqKSB7CisgICAgICAgICAgICAvLyBSaWdodCBzaGlmdCBmcm9tIChqICsgNjQpLXRo
IGJpdCB0byAoaSArIDY0KS10aCBiaXQuCisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0
aW5nOjpNZXNzYWdlKCkgPDwgImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGksIDApLAor
ICAgICAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBqLCAwKSA+
PiAoaiAtIGkpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgodWludDY0
X3QgeyAxIH0gPDwgaSwgMCksCisgICAgICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHVpbnQ2
NF90IHsgMSB9IDw8IGosIDApID4+PSAoaiAtIGkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
VEVTVChXVEZfSW50MTI4LCBOdW1lcmljTGltaXRzVGVzdCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfc3BlY2lhbGl6ZWQsICIi
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBs
Pjo6aXNfc2lnbmVkLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6Om51bWVyaWNfbGltaXRz
PFdURjo6SW50MTI4SW1wbD46OmlzX2ludGVnZXIsICIiKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8aW50PigxMjcgKiBzdGQ6OmxvZzEwKDIpKSwKKyAgICAgICAgc3RkOjpudW1lcmljX2xp
bWl0czxXVEY6OkludDEyOEltcGw+OjpkaWdpdHMxMCk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50
MTI4TWluKCksIHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6bWluKCkpOwor
ICAgIEVYUEVDVF9FUShXVEY6OkludDEyOE1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6
SW50MTI4SW1wbD46Omxvd2VzdCgpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhNYXgoKSwg
c3RkOjpudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjptYXgoKSk7Cit9CiAKIH0gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442255</attachid>
            <date>2021-10-23 00:29:52 -0700</date>
            <delta_ts>2021-10-23 14:35:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232129-20211023002951.patch</filename>
            <type>text/plain</type>
            <size>157788</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYzMmI5ODlkM2IzZmVlZDQ5ZTA1MjMx
Yzk4MjIyNDk0ZjU2NDcyMjEuLjhhMjExOWU2MGMyYmIwMTVkMTUzYWZlMDQyNTBmZWU2OWQ5ZDJk
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTY5IEBACisyMDIxLTEwLTIzICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gUmVwbGFjZSBjdXJyZW50IExMVk0gZmxh
bmcncyBJbnQxMjggd2l0aCBhYnNlaWwtY3BwJ3MgSW50MTI4CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIxMjkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBmb3VuZCB0aGF0IGZsYW5nJ3Mgc2lnbmVk
IEludDEyOCBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdGVzdGVkLAorICAgICAgICBhbmQgaXQgaGFz
IHNldmVyYWwgaXNzdWVzIGFib3V0IHNpZ24gZXh0ZW5zaW9uIGFuZCBkaXZpc2lvbi4KKworICAg
ICAgICBJbnN0ZWFkLCB3ZSBpbXBvcnQgYWJzZWlsLWNwcFsxXSdzIGludDEyOCBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgYWJzZWlsLWNwcCBpcyBtb3JlIGJhdHRsZS10ZXN0ZWQsIGFuZCBhYnNl
aWwgaXMgYWxyZWFkeSB1c2VkCisgICAgICAgIGluIFdlYktpdCB0b28gKEFOR0xFIGFuZCBsaWJ3
ZWJydGMgdXNlIGFic2VpbC1jcHAgYXMgdGhlaXIgdXRpbGl0eQorICAgICAgICBsaWJyYXJ5KS4K
KworICAgICAgICBGb3IgQXBwbGUgcmVhZGVycywgYWJzZWlsLWNwcCBmb3IgV2ViS2l0IGlzIGFw
cHJvdmVkIGluIE9TUy0zNTEuCisKKyAgICAgICAgWzFdOiBodHRwczovL2dpdGh1Yi5jb20vYWJz
ZWlsL2Fic2VpbC1jcHAKKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvSW50MTI4LmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbCk6CisgICAg
ICAgIChXVEY6Om9wZXJhdG9yLyk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yJSk6CisgICAgICAg
IChXVEY6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KToKKyAgICAgICAgKiB3dGYvSW50MTI4Lmg6CisgICAgICAgIChXVEY6OlVJbnQxMjhNYXgpOgor
ICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6bWluKToKKyAg
ICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omxvd2VzdCk6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjptYXgpOgorICAg
ICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBsPjo6ZXBzaWxvbik6Cisg
ICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpyb3VuZF9lcnJv
cik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjppbmZp
bml0eSk6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpx
dWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBs
Pjo6c2lnbmFsaW5nX05hTik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUlu
dDEyOEltcGw+OjpkZW5vcm1fbWluKToKKyAgICAgICAgKFdURjo6SW50MTI4TWF4KToKKyAgICAg
ICAgKFdURjo6SW50MTI4TWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6bWluKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bG93ZXN0KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQx
MjhJbXBsPjo6bWF4KToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJ
bXBsPjo6ZXBzaWxvbik6CisgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4
SW1wbD46OnJvdW5kX2Vycm9yKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6aW5maW5pdHkpOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjpxdWlldF9OYU4pOgorICAgICAgICAoc3RkOjpudW1lcmljX2xpbWl0czxX
VEY6OkludDEyOEltcGw+OjpzaWduYWxpbmdfTmFOKToKKyAgICAgICAgKHN0ZDo6bnVtZXJpY19s
aW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGVub3JtX21pbik6CisgICAgICAgIChXVEY6Ok1ha2VV
SW50MTI4KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcjw8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvcis9
KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RG
OjpVSW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvci89KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yJT0pOgorICAg
ICAgICAoV1RGOjpVSW50MTI4TG93NjQpOgorICAgICAgICAoV1RGOjpVSW50MTI4SGlnaDY0KToK
KyAgICAgICAgKFdURjo6VUludDEyOEltcGw6OlVJbnQxMjhJbXBsKToKKyAgICAgICAgKFdURjo6
VUludDEyOEltcGw6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4
SW1wbDo6b3BlcmF0b3IgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBjaGFyIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6
Om9wZXJhdG9yIGNoYXIxNl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9w
ZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIEFCU0xfSU5URVJOQUxfV0NIQVJfVCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJ
bXBsOjpvcGVyYXRvciBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpv
cGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBs
OjpvcGVyYXRvciBpbnQgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0
b3IgdW5zaWduZWQgaW50IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBs
b25nIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJh
dG9yIGZsb2F0IGNvbnN0KToKKyAgICAgICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRv
dWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6b3Bl
cmF0b3I+KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6CisgICAgICAgIChXVEY6Om9wZXJh
dG9yPj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvcispOgorICAgICAgICAoV1RGOjpvcGVyYXRv
ci0pOgorICAgICAgICAoV1RGOjpvcGVyYXRvciEpOgorICAgICAgICAoV1RGOjpvcGVyYXRvcn4p
OgorICAgICAgICAoV1RGOjpvcGVyYXRvcnwpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciYpOgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcl4pOgorICAgICAgICAoV1RGOjpVSW50MTI4SW1wbDo6b3Bl
cmF0b3J8PSk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVyYXRvciY9KToKKyAgICAg
ICAgKFdURjo6VUludDEyOEltcGw6Om9wZXJhdG9yXj0pOgorICAgICAgICAoV1RGOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdURjo6b3BlcmF0b3I+Pik6CisgICAgICAgIChXVEY6OmludDEyOF9p
bnRlcm5hbDo6QWRkUmVzdWx0KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTdWJz
dHJ1Y3RSZXN1bHQpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpV
SW50MTI4SW1wbDo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OlVJbnQxMjhJbXBsOjpvcGVy
YXRvci0tKToKKyAgICAgICAgKFdURjo6TWFrZUludDEyOCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKz0p
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvci09KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3IqPSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yLz0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciU9KToKKyAgICAgICAg
KFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3J8PSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6
Om9wZXJhdG9yJj0pOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl49KToKKyAg
ICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I8PD0pOgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpvcGVyYXRvcj4+PSk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6Qml0
Q2FzdFRvU2lnbmVkKToKKyAgICAgICAgKFdURjo6SW50MTI4TG93NjQpOgorICAgICAgICAoV1RG
OjpJbnQxMjhIaWdoNjQpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKToK
KyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBzaWduZWQgY2hhciBjb25zdCk6CisgICAgICAgIChXVEY6Oklu
dDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGNoYXIgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMTZfdCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGNoYXIzMl90IGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1w
bDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3Igc2hvcnQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJ
bXBsOjpvcGVyYXRvciB1bnNpZ25lZCBzaG9ydCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEy
OEltcGw6Om9wZXJhdG9yIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIHVuc2lnbmVkIGludCBjb25zdCk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9w
ZXJhdG9yIGxvbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciB1
bnNpZ25lZCBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3Ig
bG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgdW5z
aWduZWQgbG9uZyBsb25nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0
b3IgZmxvYXQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBkb3Vi
bGUgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJs
ZSBjb25zdCk6CisgICAgICAgIChXVEY6OmludDEyOF9pbnRlcm5hbDo6U2lnbmVkQWRkUmVzdWx0
KToKKyAgICAgICAgKFdURjo6aW50MTI4X2ludGVybmFsOjpTaWduZWRTdWJzdHJ1Y3RSZXN1bHQp
OgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6
SW50MTI4SW1wbDo6b3BlcmF0b3ItLSk6CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJh
dG9yKyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9y
fiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yISBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yIHN0ZDo6dWlu
dDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRv
ciBzdGQ6OmludDY0X3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBs
OjpoaWdoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6bG93IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3ImIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3IgfCAgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcl4gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcjw8IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6SW50MTI4SW1wbDo6b3BlcmF0b3I+PiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yKiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yLyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yJSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OkludDEyOEltcGw6Om9wZXJhdG9yPD0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpJbnQxMjhJbXBsOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6SW50MTI4SW1wbDo6b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OkludDEyOEltcGw6Om9wZXJhdG9yPj0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJ
bnQxMjhJbXBsOjpvcGVyYXRvcj4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpJbnQx
MjhJbXBsOjpsZWFkaW5nWmVyb2VzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvTGVh
ZGluZ1plcm9CaXRDb3VudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL0xlYWRpbmdaZXJv
Qml0Q291bnQuaDogUmVtb3ZlZC4KKwogMjAyMS0xMC0yMSAgQWRpdHlhIEtlZXJ0aGkgIDxha2Vl
cnRoaUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBFbmFibGUgYWNjZW50LWNvbG9yIGJ5
IGRlZmF1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNl
YzAzOTFmN2M3MzdhM2FmMTYyNDczNmJiODUxMmE1MmQ3YjFlNjUuLjgzM2Y1MWM4MmJmYTY3MmMy
N2Q5OThiNzVhZDdhNjc5NTg1YTU1NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTc5LDYgKzE3OSw3IEBACiAJCUUzMTQ5QTM4MjI4QkI0MkMwMEJGQTZD
NyAvKiBSZWZDb3VudGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZBNkYzOTAyMENDNjFFQjAwQTAzRENEIC8qIFJlZkNvdW50ZWRBcnJh
eS5jcHAgKi87IH07CiAJCUUzMTQ5QTM5MjI4QkI0MzUwMEJGQTZDNyAvKiBWZWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NUI2MzQyMENC
NTNDMTAwNDc5NjM1IC8qIFZlY3Rvci5jcHAgKi87IH07CiAJCUUzMTQ5QTNCMjI4QkRDQUMwMEJG
QTZDNyAvKiBDb25jdXJyZW50QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzMTQ5QTNBMjI4QkRDQUIwMEJGQTZDNyAvKiBDb25jdXJyZW50
QnVmZmVyLmNwcCAqLzsgfTsKKwkJRTMzNjY3NEEyNzIyNTUxMTAwMjU5MTIyIC8qIEludDEyOC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzM2Njc0
OTI3MjI1NTA5MDAyNTkxMjIgLyogSW50MTI4LmNwcCAqLzsgfTsKIAkJRTM3RTk2NTQyNzAyQUQw
QjAwRTFDMzZBIC8qIEFwcHJveGltYXRlVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzdFOTY1MjI3MDJBRDA3MDBFMUMzNkEgLyogQXBwcm94
aW1hdGVUaW1lLmNwcCAqLzsgfTsKIAkJRTM4ODg4NkYyMEM5MDk1MTAwRTYzMkJDIC8qIFdvcmtl
clBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTM4ODg4NkQyMEM5MDk1MTAwRTYzMkJDIC8qIFdvcmtlclBvb2wuY3BwICovOyB9OwogCQlFMzhD
NDEyODFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzhDNDEyNjFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BV
VGltZS5jcHAgKi87IH07CkBAIC0xOTEsNyArMTkyLDYgQEAKIAkJRTRBMEFEM0QxQTk2MjUzQzAw
NTM2REY2IC8qIFdvcmtRdWV1ZUNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTBBRDNDMUE5NjI1M0MwMDUzNkRGNiAvKiBXb3JrUXVldWVD
b2NvYS5jcHAgKi87IH07CiAJCUVCMkM4NkQ5MjY3QjI3NUQwMDUyQ0I5QSAvKiBDUFVUaW1lUE9T
SVguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUIy
Qzg2RDgyNjdCMjc1QzAwNTJDQjlBIC8qIENQVVRpbWVQT1NJWC5jcHAgKi87IH07CiAJCUVCNjFF
REM3MjQwOUNDQzEwMDFFRkUzNiAvKiBTeXN0ZW1UcmFjaW5nQ29jb2EuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUI2MUVEQzYyNDA5Q0NDMDAwMUVG
RTM2IC8qIFN5c3RlbVRyYWNpbmdDb2NvYS5jcHAgKi87IH07Ci0JCUY2RDY3RDM0MjZGOTAxNDMw
MDZFMDM0OSAvKiBMZWFkaW5nWmVyb0JpdENvdW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2RDY3RDMzMjZGOTAxNDMwMDZFMDM0OSAvKiBMZWFk
aW5nWmVyb0JpdENvdW50LmNwcCAqLzsgfTsKIAkJRkUwMzJBRDIyNDYzRTQzQjAwMTJEN0M3IC8q
IFdURkNvbmZpZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTAzMkFEMDI0NjNFNDNCMDAxMkQ3QzcgLyogV1RGQ29uZmlnLmNwcCAqLzsgfTsKIAkJ
RkUwNUZBRkYxRkU1MDA3NTAwMDkzMjMwIC8qIFdURkFzc2VydGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUwNUZBRkUxRkU1MDA3NTAwMDkz
MjMwIC8qIFdURkFzc2VydGlvbnMuY3BwICovOyB9OwogCQlGRTFFMkMzQjIyNDBDMDY2MDBGNkI3
MjkgLyogUHRyVGFnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFMUUyQzM5MjI0MEMwNTQwMEY2QjcyOSAvKiBQdHJUYWcuY3BwICovOyB9OwpAQCAt
NzU0LDYgKzc1NCw3IEBACiAJCUUzMjAwQUI0MUU5QTUzNkQwMDNCNTlEMiAvKiBQbGF0Zm9ybVJl
Z2lzdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVJlZ2lz
dGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzI1NjExMjI2MTFCNUI2MDBB
NzJDQzUgLyogUm9iaW5Ib29kSGFzaFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSb2Jpbkhvb2RIYXNo
U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMkEyMDczMjNDNTkwMkQwMDM0
QTA5MiAvKiBOYWtlZFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYWtl
ZFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzM2Njc0OTI3MjI1NTA5MDAy
NTkxMjIgLyogSW50MTI4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludDEyOC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzlDMTYzMjQ0QjRFODcwMDM1OURBOSAvKiBEYXRh
UmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFSZWYuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzRDVGODcxRkJFRDY2NzAwQkY2MjVFIC8qIFJlY3Vy
c2FibGVMYW1iZGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVjdXJzYWJs
ZUxhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzRDRDBEMDIyODEwQTAy
MDAyMEQyOTkgLyogUGFja2VkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhY2tlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzkxLDkgKzc5Miw3IEBACiAJCUVCOTVFMUVGMTYxQTcyNDEw
MDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZU9yZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCRkY2N0ZDMjQwRDdE
NjYwMDc4RkYxQiAvKiBPU1ZhcmlhbnRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gT1NWYXJpYW50U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVGN0Q2
Q0Q1OUQ4NjQyQThBMERBODZBRCAvKiBTdGFja1RyYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0YWNrVHJhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RjZENjdEMzEyNkY5MDE0MjAwNkUwMzQ5IC8qIExlYWRpbmdaZXJvQml0Q291bnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVhZGluZ1plcm9CaXRDb3VudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNkQ2N0QzMjI2RjkwMTQyMDA2RTAzNDkgLyogSW50MTI4
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDEyOC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGNkQ2N0QzMzI2RjkwMTQzMDA2RTAzNDkgLyogTGVhZGluZ1pl
cm9CaXRDb3VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWFk
aW5nWmVyb0JpdENvdW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjcyQkJE
QjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFMDMyQUQwMjQ2M0U0M0IwMDEyRDdDNyAvKiBXVEZDb25maWcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGQ29uZmlnLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUwMzJBRDEyNDYzRTQzQjAwMTJEN0M3IC8qIFdURkNvbmZpZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZDb25maWcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMjUsNiArMTEyNCw3IEBACiAJCQkJQThBNDcyQkMxNTFB
ODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5oICovLAogCQkJCUE3MERBMDgyMTc5OUYwNEQwMDUy
OUE5QiAvKiBJbnNlcnRpb24uaCAqLywKIAkJCQk1MTgyQzIyQzFGMkJDN0U2MDA1OUJBN0MgLyog
SW5zdGFuY2VDb3VudGVkLmggKi8sCisJCQkJRTMzNjY3NDkyNzIyNTUwOTAwMjU5MTIyIC8qIElu
dDEyOC5jcHAgKi8sCiAJCQkJRjZENjdEMzIyNkY5MDE0MjAwNkUwMzQ5IC8qIEludDEyOC5oICov
LAogCQkJCTMzRkQ0ODExMjY1Q0IzODAwMEFCRTRGNCAvKiBJbnRlcmZlcmVuY2VHcmFwaC5oICov
LAogCQkJCTBGN0VCODVCMUZBOEZGNDEwMEYxQUJDQiAvKiBJc29NYWxsb2MuaCAqLywKQEAgLTEx
MzgsOCArMTEzOCw2IEBACiAJCQkJN0M5NjkyOTQxRjY2MzA2RTAwMjY3QTlFIC8qIEtleVZhbHVl
UGFpci5oICovLAogCQkJCUMyQkNGQzNFMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5jcHAg
Ki8sCiAJCQkJQzJCQ0ZDM0YxRjYxRDEzMDAwQzkyMjJDIC8qIExhbmd1YWdlLmggKi8sCi0JCQkJ
RjZENjdEMzMyNkY5MDE0MzAwNkUwMzQ5IC8qIExlYWRpbmdaZXJvQml0Q291bnQuY3BwICovLAot
CQkJCUY2RDY3RDMxMjZGOTAxNDIwMDZFMDM0OSAvKiBMZWFkaW5nWmVyb0JpdENvdW50LmggKi8s
CiAJCQkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLywKIAkJCQkz
MzdCMkQ2ODI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQu
Y3BwICovLAogCQkJCTMzN0IyRDY5MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlEZW5zZVVuc2ln
bmVkSW50ZWdlclNldC5oICovLApAQCAtMTc3MywxMiArMTc3MSwxMiBAQAogCQkJCUE4QTQ3M0Q4
MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNC
NUI0NEUyMjEzRDYxNjAwNEI3QUE3IC8qIEhleE51bWJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFM0JFMDlBNzI0QTU4NTREMDA5REYyQjQgLyogSUNVSGVscGVycy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlFMzM2Njc0QTI3MjI1NTExMDAyNTkxMjIgLyogSW50MTI4LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdBMDUwOTNGMUZCOURDQzUwMEIzM0ZCOCAvKiBKU09OVmFsdWVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUzQTMyQkM0MUZDODMwRTIwMDdEN0U3NiAvKiBKU1ZhbHVlTWFsbG9j
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQkNGQzQwMUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5n
dWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkJDRkM0MjFGNjFENjE2MDBDOTIyMkMgLyog
TGFuZ3VhZ2VDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzUwM0JFNjIzQUFFMEFFMDA3MkU2
NkIgLyogTGFuZ3VhZ2VDb2NvYS5tbSBpbiBTb3VyY2VzICovLAotCQkJCUY2RDY3RDM0MjZGOTAx
NDMwMDZFMDM0OSAvKiBMZWFkaW5nWmVyb0JpdENvdW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMzN0IyRDZBMjY1NDZFQjMwMERERkQzRCAvKiBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFM0I4RTQxRDI0RTdDRTkyMDAzNjU1RDggLyogTGlu
ZUJyZWFrSXRlcmF0b3JQb29sSUNVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQkNGQzU1MUY2
MjFGM0YwMEM5MjIyQyAvKiBMaW5lRW5kaW5nLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAppbmRleCA0ZTM4YWFhOTMwZDQxMDcyN2VkMzc0OWIyYzc0MTIyMzhkNmFjYWI1Li5k
ZTFkYmY2NzMzYTU4N2Y5YWU5MjViN2VlM2JhYmZjODVmMWFiNDc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dApAQCAtMTE2LDcgKzExNiw2IEBAIHNldChXVEZfUFVCTElDX0hFQURFUlMKICAgICBLZXlW
YWx1ZVBhaXIuaAogICAgIExFQkRlY29kZXIuaAogICAgIExhbmd1YWdlLmgKLSAgICBMZWFkaW5n
WmVyb0JpdENvdW50LmgKICAgICBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oCiAgICAg
TGlzdER1bXAuaAogICAgIExpc3RIYXNoU2V0LmgKQEAgLTQyNSwxMCArNDI0LDEwIEBAIHNldChX
VEZfU09VUkNFUwogICAgIEdyZWdvcmlhbkRhdGVUaW1lLmNwcAogICAgIEhhc2hUYWJsZS5jcHAK
ICAgICBIZXhOdW1iZXIuY3BwCisgICAgSW50MTI4LmNwcAogICAgIEpTT05WYWx1ZXMuY3BwCiAg
ICAgSlNWYWx1ZU1hbGxvYy5jcHAKICAgICBMYW5ndWFnZS5jcHAKLSAgICBMZWFkaW5nWmVyb0Jp
dENvdW50LmNwcAogICAgIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNwcAogICAgIExv
Y2suY3BwCiAgICAgTG9ja2VkUHJpbnRTdHJlYW0uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9JbnQxMjguY3BwIGIvU291cmNlL1dURi93dGYvSW50MTI4LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
NDI5N2I5NTAxNTcxYTFjMTZhNjcxYWFjNzk2MjljODBmYWM2OTU0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvSW50MTI4LmNwcApAQCAtMCwwICsxLDM3MSBAQAorLy8gQ29weXJp
Z2h0IDIwMTcgVGhlIEFic2VpbCBBdXRob3JzLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBB
cGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBu
b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgor
Ly8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBo
dHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8g
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlIDx3dGYvSW50MTI4Lmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxj
YXNzZXJ0PgorI2luY2x1ZGUgPGlvbWFuaXA+CisjaW5jbHVkZSA8b3N0cmVhbT4gIC8vIE5PTElO
VChyZWFkYWJpbGl0eS9zdHJlYW1zKQorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3Ry
aW5nPgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCisvLyBSZXR1cm5zIHRoZSAwLWJh
c2VkIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHNldCBiaXQgKGkuZS4sIG1vc3Qgc2lnbmlmaWNhbnQg
Yml0KQorLy8gaW4gdGhlIGdpdmVuIFVJbnQxMjhJbXBsLiBUaGUgYXJndW1lbnQgaXMgbm90IDAu
CisvLworLy8gRm9yIGV4YW1wbGU6CisvLyAgIEdpdmVuOiA1IChkZWNpbWFsKSA9PSAxMDEgKGJp
bmFyeSkKKy8vICAgUmV0dXJuczogMgorc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IEZsczEyOChV
SW50MTI4SW1wbCBuKSB7CisgIGlmICh1aW50NjRfdCBoaSA9IFVJbnQxMjhIaWdoNjQobikpIHsK
KyAgICBBU1NFUlQoaGkgIT0gMCk7CisgICAgcmV0dXJuIDEyNyAtIGNseihoaSk7CisgIH0KKyAg
Y29uc3QgdWludDY0X3QgbG93ID0gVUludDEyOExvdzY0KG4pOworICBBU1NFUlQobG93ICE9IDAp
OworICByZXR1cm4gNjMgLSBjbHoobG93KTsKK30KKworLy8gTG9uZyBkaXZpc2lvbi9tb2R1bG8g
Zm9yIFVJbnQxMjhJbXBsIGltcGxlbWVudGVkIHVzaW5nIHRoZSBzaGlmdC1zdWJ0cmFjdAorLy8g
ZGl2aXNpb24gYWxnb3JpdGhtIGFkYXB0ZWQgZnJvbToKKy8vIGh0dHBzOi8vc3RhY2tvdmVyZmxv
dy5jb20vcXVlc3Rpb25zLzUzODYzNzcvZGl2aXNpb24td2l0aG91dC11c2luZworc3RhdGljIGlu
bGluZSB2b2lkIERpdk1vZEltcGwoVUludDEyOEltcGwgZGl2aWRlbmQsIFVJbnQxMjhJbXBsIGRp
dmlzb3IsIFVJbnQxMjhJbXBsKiBxdW90aWVudF9yZXQsIFVJbnQxMjhJbXBsKiByZW1haW5kZXJf
cmV0KSB7CisgIGFzc2VydChkaXZpc29yICE9IDApOworCisgIGlmIChkaXZpc29yID4gZGl2aWRl
bmQpIHsKKyAgICAqcXVvdGllbnRfcmV0ID0gMDsKKyAgICAqcmVtYWluZGVyX3JldCA9IGRpdmlk
ZW5kOworICAgIHJldHVybjsKKyAgfQorCisgIGlmIChkaXZpc29yID09IGRpdmlkZW5kKSB7Cisg
ICAgKnF1b3RpZW50X3JldCA9IDE7CisgICAgKnJlbWFpbmRlcl9yZXQgPSAwOworICAgIHJldHVy
bjsKKyAgfQorCisgIFVJbnQxMjhJbXBsIGRlbm9taW5hdG9yID0gZGl2aXNvcjsKKyAgVUludDEy
OEltcGwgcXVvdGllbnQgPSAwOworCisgIC8vIExlZnQgYWxpZ25zIHRoZSBNU0Igb2YgdGhlIGRl
bm9taW5hdG9yIGFuZCB0aGUgZGl2aWRlbmQuCisgIGNvbnN0IGludCBzaGlmdCA9IEZsczEyOChk
aXZpZGVuZCkgLSBGbHMxMjgoZGVub21pbmF0b3IpOworICBkZW5vbWluYXRvciA8PD0gc2hpZnQ7
CisKKyAgLy8gVXNlcyBzaGlmdC1zdWJ0cmFjdCBhbGdvcml0aG0gdG8gZGl2aWRlIGRpdmlkZW5k
IGJ5IGRlbm9taW5hdG9yLiBUaGUKKyAgLy8gcmVtYWluZGVyIHdpbGwgYmUgbGVmdCBpbiBkaXZp
ZGVuZC4KKyAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc2hpZnQ7ICsraSkgeworICAgIHF1b3RpZW50
IDw8PSAxOworICAgIGlmIChkaXZpZGVuZCA+PSBkZW5vbWluYXRvcikgeworICAgICAgZGl2aWRl
bmQgLT0gZGVub21pbmF0b3I7CisgICAgICBxdW90aWVudCB8PSAxOworICAgIH0KKyAgICBkZW5v
bWluYXRvciA+Pj0gMTsKKyAgfQorCisgICpxdW90aWVudF9yZXQgPSBxdW90aWVudDsKKyAgKnJl
bWFpbmRlcl9yZXQgPSBkaXZpZGVuZDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0
aWMgVUludDEyOEltcGwgTWFrZVVJbnQxMjhGcm9tRmxvYXQoVCB2KSB7CisgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUsICIiKTsKKworICAvLyBSb3VuZGlu
ZyBiZWhhdmlvciBpcyB0b3dhcmRzIHplcm8sIHNhbWUgYXMgZm9yIGJ1aWx0LWluIHR5cGVzLgor
CisgIC8vIFVuZGVmaW5lZCBiZWhhdmlvciBpZiB2IGlzIE5hTiBvciBjYW5ub3QgZml0IGludG8g
VUludDEyOEltcGwuCisgIGFzc2VydChzdGQ6OmlzZmluaXRlKHYpICYmIHYgPiAtMSAmJgorICAg
ICAgICAgKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heF9leHBvbmVudCA8PSAxMjggfHwKKyAg
ICAgICAgICB2IDwgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxUPigxKSwgMTI4KSkpOworCisgIGlm
ICh2ID49IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VD4oMSksIDY0KSkgeworICAgIHVpbnQ2NF90
IGhpID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bGRleHAodiwgLTY0KSk7CisgICAgdWlu
dDY0X3QgbG8gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odiAtIHN0ZDo6bGRleHAoc3RhdGljX2Nh
c3Q8VD4oaGkpLCA2NCkpOworICAgIHJldHVybiBNYWtlVUludDEyOChoaSwgbG8pOworICB9CisK
KyAgcmV0dXJuIE1ha2VVSW50MTI4KDAsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2KSk7Cit9CisK
KyNpZiBDT01QSUxFUihDTEFORykgJiYgIWRlZmluZWQoX19TU0UzX18pCisvLyBXb3JrYXJvdW5k
IGZvciBjbGFuZyBidWc6IGh0dHBzOi8vYnVncy5sbHZtLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzgy
ODkKKy8vIENhc3RpbmcgZnJvbSBsb25nIGRvdWJsZSB0byB1aW50NjRfdCBpcyBtaXNjb21waWxl
ZCBhbmQgZHJvcHMgYml0cy4KKy8vIEl0IGlzIG1vcmUgd29yaywgc28gb25seSB1c2Ugd2hlbiB3
ZSBuZWVkIHRoZSB3b3JrYXJvdW5kLgorc3RhdGljIFVJbnQxMjhJbXBsIE1ha2VVSW50MTI4RnJv
bUZsb2F0KGxvbmcgZG91YmxlIHYpIHsKKyAgLy8gR28gNTAgYml0cyBhdCBhIHRpbWUsIHRoYXQg
Zml0cyBpbiBhIGRvdWJsZQorICBzdGF0aWNfYXNzZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6ZGlnaXRzID49IDUwLCAiIik7CisgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xp
bWl0czxsb25nIGRvdWJsZT46OmRpZ2l0cyA8PSAxNTAsICIiKTsKKyAgLy8gVW5kZWZpbmVkIGJl
aGF2aW9yIGlmIHYgaXMgbm90IGZpbml0ZSBvciBjYW5ub3QgZml0IGludG8gVUludDEyOEltcGwu
CisgIGFzc2VydChzdGQ6OmlzZmluaXRlKHYpICYmIHYgPiAtMSAmJiB2IDwgc3RkOjpsZGV4cCgx
LjBMLCAxMjgpKTsKKworICB2ID0gc3RkOjpsZGV4cCh2LCAtMTAwKTsKKyAgdWludDY0X3QgdzAg
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6OnRydW5jKHYp
KSk7CisgIHYgPSBzdGQ6OmxkZXhwKHYgLSBzdGF0aWNfY2FzdDxkb3VibGU+KHcwKSwgNTApOwor
ICB1aW50NjRfdCB3MSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+
KHN0ZDo6dHJ1bmModikpKTsKKyAgdiA9IHN0ZDo6bGRleHAodiAtIHN0YXRpY19jYXN0PGRvdWJs
ZT4odzEpLCA1MCk7CisgIHVpbnQ2NF90IHcyID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3RkOjp0cnVuYyh2KSkpOworICByZXR1cm4gKHN0YXRpY19jYXN0PFVJ
bnQxMjhJbXBsPih3MCkgPDwgMTAwKSB8IChzdGF0aWNfY2FzdDxVSW50MTI4SW1wbD4odzEpIDw8
IDUwKSB8CisgICAgICAgICBzdGF0aWNfY2FzdDxVSW50MTI4SW1wbD4odzIpOworfQorI2VuZGlm
ICAvLyBDT01QSUxFUihDTEFORykgJiYgIV9fU1NFM19fCit9ICAvLyBuYW1lc3BhY2UKKworVUlu
dDEyOEltcGw6OlVJbnQxMjhJbXBsKGZsb2F0IHYpIDogVUludDEyOEltcGwoTWFrZVVJbnQxMjhG
cm9tRmxvYXQodikpIHt9CitVSW50MTI4SW1wbDo6VUludDEyOEltcGwoZG91YmxlIHYpIDogVUlu
dDEyOEltcGwoTWFrZVVJbnQxMjhGcm9tRmxvYXQodikpIHt9CitVSW50MTI4SW1wbDo6VUludDEy
OEltcGwobG9uZyBkb3VibGUgdikgOiBVSW50MTI4SW1wbChNYWtlVUludDEyOEZyb21GbG9hdCh2
KSkge30KKworVUludDEyOEltcGwgb3BlcmF0b3IvKFVJbnQxMjhJbXBsIGxocywgVUludDEyOElt
cGwgcmhzKSB7CisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKyAgVUludDEyOEltcGwgcmVt
YWluZGVyID0gMDsKKyAgRGl2TW9kSW1wbChsaHMsIHJocywgJnF1b3RpZW50LCAmcmVtYWluZGVy
KTsKKyAgcmV0dXJuIHF1b3RpZW50OworfQorCitVSW50MTI4SW1wbCBvcGVyYXRvciUoVUludDEy
OEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpIHsKKyAgVUludDEyOEltcGwgcXVvdGllbnQgPSAw
OworICBVSW50MTI4SW1wbCByZW1haW5kZXIgPSAwOworICBEaXZNb2RJbXBsKGxocywgcmhzLCAm
cXVvdGllbnQsICZyZW1haW5kZXIpOworICByZXR1cm4gcmVtYWluZGVyOworfQorCituYW1lc3Bh
Y2UgeworCitzdGF0aWMgc3RkOjpzdHJpbmcgVUludDEyOFRvRm9ybWF0dGVkU3RyaW5nKFVJbnQx
MjhJbXBsIHYsIHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzIGZsYWdzKSB7CisgIC8vIFNlbGVjdCBh
IGRpdmlzb3Igd2hpY2ggaXMgdGhlIGxhcmdlc3QgcG93ZXIgb2YgdGhlIGJhc2UgPCAyXjY0Lgor
ICBVSW50MTI4SW1wbCBkaXY7CisgIGludCBkaXZfYmFzZV9sb2c7CisgIHN3aXRjaCAoZmxhZ3Mg
JiBzdGQ6Omlvczo6YmFzZWZpZWxkKSB7CisgICAgY2FzZSBzdGQ6Omlvczo6aGV4OgorICAgICAg
ZGl2ID0gMHgxMDAwMDAwMDAwMDAwMDAwOyAgLy8gMTZeMTUKKyAgICAgIGRpdl9iYXNlX2xvZyA9
IDE1OworICAgICAgYnJlYWs7CisgICAgY2FzZSBzdGQ6Omlvczo6b2N0OgorICAgICAgZGl2ID0g
MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDA7ICAvLyA4XjIxCisgICAgICBkaXZfYmFzZV9sb2cgPSAy
MTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6ICAvLyBzdGQ6Omlvczo6ZGVjCisgICAgICBk
aXYgPSAxMDAwMDAwMDAwMDAwMDAwMDAwMHU7ICAvLyAxMF4xOQorICAgICAgZGl2X2Jhc2VfbG9n
ID0gMTk7CisgICAgICBicmVhazsKKyAgfQorCisgIC8vIE5vdyBwaWVjZSB0b2dldGhlciB0aGUg
VUludDEyOEltcGwgcmVwcmVzZW50YXRpb24gZnJvbSB0aHJlZSBjaHVua3Mgb2YgdGhlCisgIC8v
IG9yaWdpbmFsIHZhbHVlLCBlYWNoIGxlc3MgdGhhbiAiZGl2IiBhbmQgdGhlcmVmb3JlIHJlcHJl
c2VudGFibGUgYXMgYQorICAvLyB1aW50NjRfdC4KKyAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zOwor
ICBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyBjb3B5X21hc2sgPQorICAgICAgc3RkOjppb3M6OmJh
c2VmaWVsZCB8IHN0ZDo6aW9zOjpzaG93YmFzZSB8IHN0ZDo6aW9zOjp1cHBlcmNhc2U7CisgIG9z
LnNldGYoZmxhZ3MgJiBjb3B5X21hc2ssIGNvcHlfbWFzayk7CisgIFVJbnQxMjhJbXBsIGhpZ2gg
PSB2OworICBVSW50MTI4SW1wbCBsb3c7CisgIERpdk1vZEltcGwoaGlnaCwgZGl2LCAmaGlnaCwg
Jmxvdyk7CisgIFVJbnQxMjhJbXBsIG1pZDsKKyAgRGl2TW9kSW1wbChoaWdoLCBkaXYsICZoaWdo
LCAmbWlkKTsKKyAgaWYgKFVJbnQxMjhMb3c2NChoaWdoKSAhPSAwKSB7CisgICAgb3MgPDwgVUlu
dDEyOExvdzY0KGhpZ2gpOworICAgIG9zIDw8IHN0ZDo6bm9zaG93YmFzZSA8PCBzdGQ6OnNldGZp
bGwoJzAnKSA8PCBzdGQ6OnNldHcoZGl2X2Jhc2VfbG9nKTsKKyAgICBvcyA8PCBVSW50MTI4TG93
NjQobWlkKTsKKyAgICBvcyA8PCBzdGQ6OnNldHcoZGl2X2Jhc2VfbG9nKTsKKyAgfSBlbHNlIGlm
IChVSW50MTI4TG93NjQobWlkKSAhPSAwKSB7CisgICAgb3MgPDwgVUludDEyOExvdzY0KG1pZCk7
CisgICAgb3MgPDwgc3RkOjpub3Nob3diYXNlIDw8IHN0ZDo6c2V0ZmlsbCgnMCcpIDw8IHN0ZDo6
c2V0dyhkaXZfYmFzZV9sb2cpOworICB9CisgIG9zIDw8IFVJbnQxMjhMb3c2NChsb3cpOworICBy
ZXR1cm4gb3Muc3RyKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCitzdGQ6Om9zdHJlYW0mIG9w
ZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgVUludDEyOEltcGwgdikgeworICBzdGQ6Omlvc19i
YXNlOjpmbXRmbGFncyBmbGFncyA9IG9zLmZsYWdzKCk7CisgIHN0ZDo6c3RyaW5nIHJlcCA9IFVJ
bnQxMjhUb0Zvcm1hdHRlZFN0cmluZyh2LCBmbGFncyk7CisKKyAgLy8gQWRkIHRoZSByZXF1aXNp
dGUgcGFkZGluZy4KKyAgc3RkOjpzdHJlYW1zaXplIHdpZHRoID0gb3Mud2lkdGgoMCk7CisgIGlm
IChzdGF0aWNfY2FzdDxzaXplX3Q+KHdpZHRoKSA+IHJlcC5zaXplKCkpIHsKKyAgICBzdGQ6Omlv
czo6Zm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbGFncyAmIHN0ZDo6aW9zOjphZGp1c3RmaWVsZDsK
KyAgICBpZiAoYWRqdXN0ZmllbGQgPT0gc3RkOjppb3M6OmxlZnQpIHsKKyAgICAgIHJlcC5hcHBl
bmQod2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOworICAgIH0gZWxzZSBpZiAoYWRqdXN0
ZmllbGQgPT0gc3RkOjppb3M6OmludGVybmFsICYmCisgICAgICAgICAgICAgICAoZmxhZ3MgJiBz
dGQ6Omlvczo6c2hvd2Jhc2UpICYmCisgICAgICAgICAgICAgICAoZmxhZ3MgJiBzdGQ6Omlvczo6
YmFzZWZpZWxkKSA9PSBzdGQ6Omlvczo6aGV4ICYmIHYgIT0gMCkgeworICAgICAgcmVwLmluc2Vy
dCgyLCB3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
IHJlcC5pbnNlcnQoMCwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOworICAgIH0KKyAg
fQorCisgIHJldHVybiBvcyA8PCByZXA7Cit9CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBVSW50
MTI4SW1wbCBVbnNpZ25lZEFic29sdXRlVmFsdWUoSW50MTI4SW1wbCB2KSB7CisgIC8vIENhc3Qg
dG8gVUludDEyOEltcGwgYmVmb3JlIHBvc3NpYmx5IG5lZ2F0aW5nIGJlY2F1c2UgLUludDEyOE1p
bigpIGlzIHVuZGVmaW5lZC4KKyAgcmV0dXJuIEludDEyOEhpZ2g2NCh2KSA8IDAgPyAtVUludDEy
OEltcGwodikgOiBVSW50MTI4SW1wbCh2KTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK25hbWVz
cGFjZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIEludDEyOEltcGwgTWFrZUlu
dDEyOEZyb21GbG9hdChUIHYpIHsKKyAgLy8gQ29udmVyc2lvbiB3aGVuIHYgaXMgTmFOIG9yIGNh
bm5vdCBmaXQgaW50byBJbnQxMjhJbXBsIHdvdWxkIGJlIHVuZGVmaW5lZAorICAvLyBiZWhhdmlv
ciBpZiB1c2luZyBhbiBpbnRyaW5zaWMgMTI4LWJpdCBpbnRlZ2VyLgorICBhc3NlcnQoc3RkOjpp
c2Zpbml0ZSh2KSAmJiAoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4X2V4cG9uZW50IDw9IDEy
NyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYgPj0gLXN0ZDo6bGRleHAoc3Rh
dGljX2Nhc3Q8VD4oMSksIDEyNykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
IDwgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxUPigxKSwgMTI3KSkpKTsKKworICAvLyBXZSBtdXN0
IGNvbnZlcnQgdGhlIGFic29sdXRlIHZhbHVlIGFuZCB0aGVuIG5lZ2F0ZSBhcyBuZWVkZWQsIGJl
Y2F1c2UKKyAgLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXMgYXJlIHR5cGljYWxseSBzaWduLW1hZ25p
dHVkZS4gT3RoZXJ3aXNlLCB0aGUKKyAgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBoaWdoIGFu
ZCBsb3cgNjQgYml0cyB3aGVuIGludGVycHJldGVkIGFzIHR3bydzCisgIC8vIGNvbXBsZW1lbnQg
b3ZlcndoZWxtcyB0aGUgcHJlY2lzaW9uIG9mIHRoZSBtYW50aXNzYS4KKyAgVUludDEyOEltcGwg
cmVzdWx0ID0gdiA8IDAgPyAtTWFrZVVJbnQxMjhGcm9tRmxvYXQoLXYpIDogTWFrZVVJbnQxMjhG
cm9tRmxvYXQodik7CisgIHJldHVybiBNYWtlSW50MTI4KGludDEyOF9pbnRlcm5hbDo6Qml0Q2Fz
dFRvU2lnbmVkKFVJbnQxMjhIaWdoNjQocmVzdWx0KSksCisgICAgICAgICAgICAgICAgICAgIFVJ
bnQxMjhMb3c2NChyZXN1bHQpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK0ludDEyOEltcGw6
OkludDEyOEltcGwoZmxvYXQgdikgOiBJbnQxMjhJbXBsKE1ha2VJbnQxMjhGcm9tRmxvYXQodikp
IHt9CitJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGRvdWJsZSB2KSA6IEludDEyOEltcGwoTWFrZUlu
dDEyOEZyb21GbG9hdCh2KSkge30KK0ludDEyOEltcGw6OkludDEyOEltcGwobG9uZyBkb3VibGUg
dikgOiBJbnQxMjhJbXBsKE1ha2VJbnQxMjhGcm9tRmxvYXQodikpIHt9CisKK0ludDEyOEltcGwg
b3BlcmF0b3IvKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICBhc3NlcnQobGhz
ICE9IEludDEyOE1pbigpIHx8IHJocyAhPSAtMSk7ICAvLyBVQiBvbiB0d28ncyBjb21wbGVtZW50
LgorCisgIFVJbnQxMjhJbXBsIHF1b3RpZW50ID0gMDsKKyAgVUludDEyOEltcGwgcmVtYWluZGVy
ID0gMDsKKyAgRGl2TW9kSW1wbChVbnNpZ25lZEFic29sdXRlVmFsdWUobGhzKSwgVW5zaWduZWRB
YnNvbHV0ZVZhbHVlKHJocyksCisgICAgICAgICAgICAgJnF1b3RpZW50LCAmcmVtYWluZGVyKTsK
KyAgaWYgKChJbnQxMjhIaWdoNjQobGhzKSA8IDApICE9IChJbnQxMjhIaWdoNjQocmhzKSA8IDAp
KSBxdW90aWVudCA9IC1xdW90aWVudDsKKyAgcmV0dXJuIE1ha2VJbnQxMjgoaW50MTI4X2ludGVy
bmFsOjpCaXRDYXN0VG9TaWduZWQoVUludDEyOEhpZ2g2NChxdW90aWVudCkpLAorICAgICAgICAg
ICAgICAgICAgICBVSW50MTI4TG93NjQocXVvdGllbnQpKTsKK30KKworSW50MTI4SW1wbCBvcGVy
YXRvciUoSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIGFzc2VydChsaHMgIT0g
SW50MTI4TWluKCkgfHwgcmhzICE9IC0xKTsgIC8vIFVCIG9uIHR3bydzIGNvbXBsZW1lbnQuCisK
KyAgVUludDEyOEltcGwgcXVvdGllbnQgPSAwOworICBVSW50MTI4SW1wbCByZW1haW5kZXIgPSAw
OworICBEaXZNb2RJbXBsKFVuc2lnbmVkQWJzb2x1dGVWYWx1ZShsaHMpLCBVbnNpZ25lZEFic29s
dXRlVmFsdWUocmhzKSwKKyAgICAgICAgICAgICAmcXVvdGllbnQsICZyZW1haW5kZXIpOworICBp
ZiAoSW50MTI4SGlnaDY0KGxocykgPCAwKSByZW1haW5kZXIgPSAtcmVtYWluZGVyOworICByZXR1
cm4gTWFrZUludDEyOChpbnQxMjhfaW50ZXJuYWw6OkJpdENhc3RUb1NpZ25lZChVSW50MTI4SGln
aDY0KHJlbWFpbmRlcikpLAorICAgICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQocmVtYWlu
ZGVyKSk7Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBJ
bnQxMjhJbXBsIHYpIHsKKyAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgZmxhZ3MgPSBvcy5mbGFn
cygpOworICBzdGQ6OnN0cmluZyByZXA7CisKKyAgLy8gQWRkIHRoZSBzaWduIGlmIG5lZWRlZC4K
KyAgYm9vbCBwcmludF9hc19kZWNpbWFsID0KKyAgICAgIChmbGFncyAmIHN0ZDo6aW9zOjpiYXNl
ZmllbGQpID09IHN0ZDo6aW9zOjpkZWMgfHwKKyAgICAgIChmbGFncyAmIHN0ZDo6aW9zOjpiYXNl
ZmllbGQpID09IHN0ZDo6aW9zX2Jhc2U6OmZtdGZsYWdzKCk7CisgIGlmIChwcmludF9hc19kZWNp
bWFsKSB7CisgICAgaWYgKEludDEyOEhpZ2g2NCh2KSA8IDApIHsKKyAgICAgIHJlcCA9ICItIjsK
KyAgICB9IGVsc2UgaWYgKGZsYWdzICYgc3RkOjppb3M6OnNob3dwb3MpIHsKKyAgICAgIHJlcCA9
ICIrIjsKKyAgICB9CisgIH0KKworICByZXAuYXBwZW5kKFVJbnQxMjhUb0Zvcm1hdHRlZFN0cmlu
ZygKKyAgICAgIHByaW50X2FzX2RlY2ltYWwgPyBVbnNpZ25lZEFic29sdXRlVmFsdWUodikgOiBV
SW50MTI4SW1wbCh2KSwgb3MuZmxhZ3MoKSkpOworCisgIC8vIEFkZCB0aGUgcmVxdWlzaXRlIHBh
ZGRpbmcuCisgIHN0ZDo6c3RyZWFtc2l6ZSB3aWR0aCA9IG9zLndpZHRoKDApOworICBpZiAoc3Rh
dGljX2Nhc3Q8c2l6ZV90Pih3aWR0aCkgPiByZXAuc2l6ZSgpKSB7CisgICAgc3dpdGNoIChmbGFn
cyAmIHN0ZDo6aW9zOjphZGp1c3RmaWVsZCkgeworICAgICAgY2FzZSBzdGQ6Omlvczo6bGVmdDoK
KyAgICAgICAgcmVwLmFwcGVuZCh3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBzdGQ6Omlvczo6aW50ZXJuYWw6CisgICAgICAgIGlmIChw
cmludF9hc19kZWNpbWFsICYmIChyZXBbMF0gPT0gJysnIHx8IHJlcFswXSA9PSAnLScpKSB7Cisg
ICAgICAgICAgcmVwLmluc2VydCgxLCB3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoKGZsYWdzICYgc3RkOjppb3M6OmJhc2VmaWVsZCkgPT0gc3RkOjpp
b3M6OmhleCAmJgorICAgICAgICAgICAgICAgICAgIChmbGFncyAmIHN0ZDo6aW9zOjpzaG93YmFz
ZSkgJiYgdiAhPSAwKSB7CisgICAgICAgICAgcmVwLmluc2VydCgyLCB3aWR0aCAtIHJlcC5zaXpl
KCksIG9zLmZpbGwoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmVwLmluc2VydCgw
LCB3aWR0aCAtIHJlcC5zaXplKCksIG9zLmZpbGwoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBkZWZhdWx0OiAgLy8gc3RkOjppb3M6OnJpZ2h0CisgICAgICAgIHJlcC5pbnNl
cnQoMCwgd2lkdGggLSByZXAuc2l6ZSgpLCBvcy5maWxsKCkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgIH0KKworICByZXR1cm4gb3MgPDwgcmVwOworfQorCit9ICAvLyBuYW1lc3BhY2UgV1RG
CisKK25hbWVzcGFjZSBzdGQgeworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpV
SW50MTI4SW1wbD46OmlzX3NwZWNpYWxpemVkOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1p
dHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX3NpZ25lZDsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNf
bGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19pbnRlZ2VyOworY29uc3RleHByIGJvb2wgbnVt
ZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX2V4YWN0OworY29uc3RleHByIGJvb2wg
bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omhhc19pbmZpbml0eTsKK2NvbnN0ZXhw
ciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+OjpoYXNfcXVpZXRfTmFOOwor
Y29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omhhc19zaWdu
YWxpbmdfTmFOOworY29uc3RleHByIGZsb2F0X2Rlbm9ybV9zdHlsZSBudW1lcmljX2xpbWl0czxX
VEY6OlVJbnQxMjhJbXBsPjo6aGFzX2Rlbm9ybTsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGlt
aXRzPFdURjo6VUludDEyOEltcGw+OjpoYXNfZGVub3JtX2xvc3M7Citjb25zdGV4cHIgZmxvYXRf
cm91bmRfc3R5bGUgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OnJvdW5kX3N0eWxl
OworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OmlzX2ll
YzU1OTsKK2NvbnN0ZXhwciBib29sIG51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojpp
c19ib3VuZGVkOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1w
bD46OmlzX21vZHVsbzsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4
SW1wbD46OmRpZ2l0czsKK2NvbnN0ZXhwciBpbnQgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4
SW1wbD46OmRpZ2l0czEwOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OlVJbnQx
MjhJbXBsPjo6bWF4X2RpZ2l0czEwOworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6
OlVJbnQxMjhJbXBsPjo6cmFkaXg7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6
VUludDEyOEltcGw+OjptaW5fZXhwb25lbnQ7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRz
PFdURjo6VUludDEyOEltcGw+OjptaW5fZXhwb25lbnQxMDsKK2NvbnN0ZXhwciBpbnQgbnVtZXJp
Y19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heF9leHBvbmVudDsKK2NvbnN0ZXhwciBpbnQg
bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heF9leHBvbmVudDEwOworY29uc3Rl
eHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OnRyYXBzOworY29uc3Rl
eHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46OnRpbnluZXNzX2JlZm9y
ZTsKKworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNf
c3BlY2lhbGl6ZWQ7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOElt
cGw+Ojppc19zaWduZWQ7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEy
OEltcGw+Ojppc19pbnRlZ2VyOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJ
bnQxMjhJbXBsPjo6aXNfZXhhY3Q7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6
OkludDEyOEltcGw+OjpoYXNfaW5maW5pdHk7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0
czxXVEY6OkludDEyOEltcGw+OjpoYXNfcXVpZXRfTmFOOworY29uc3RleHByIGJvb2wgbnVtZXJp
Y19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aGFzX3NpZ25hbGluZ19OYU47Citjb25zdGV4cHIg
ZmxvYXRfZGVub3JtX3N0eWxlIG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Omhhc19k
ZW5vcm07Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojpo
YXNfZGVub3JtX2xvc3M7Citjb25zdGV4cHIgZmxvYXRfcm91bmRfc3R5bGUgbnVtZXJpY19saW1p
dHM8V1RGOjpJbnQxMjhJbXBsPjo6cm91bmRfc3R5bGU7Citjb25zdGV4cHIgYm9vbCBudW1lcmlj
X2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojppc19pZWM1NTk7Citjb25zdGV4cHIgYm9vbCBudW1l
cmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojppc19ib3VuZGVkOworY29uc3RleHByIGJvb2wg
bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6aXNfbW9kdWxvOworY29uc3RleHByIGlu
dCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjpkaWdpdHM7Citjb25zdGV4cHIgaW50
IG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmRpZ2l0czEwOworY29uc3RleHByIGlu
dCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjptYXhfZGlnaXRzMTA7Citjb25zdGV4
cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OnJhZGl4OworY29uc3RleHBy
IGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjptaW5fZXhwb25lbnQ7Citjb25z
dGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Om1pbl9leHBvbmVudDEw
OworY29uc3RleHByIGludCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOEltcGw+OjptYXhfZXhw
b25lbnQ7Citjb25zdGV4cHIgaW50IG51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Om1h
eF9leHBvbmVudDEwOworY29uc3RleHByIGJvb2wgbnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJ
bXBsPjo6dHJhcHM7Citjb25zdGV4cHIgYm9vbCBudW1lcmljX2xpbWl0czxXVEY6OkludDEyOElt
cGw+Ojp0aW55bmVzc19iZWZvcmU7Cit9ICAvLyBuYW1lc3BhY2Ugc3RkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9JbnQxMjguaCBiL1NvdXJjZS9XVEYvd3RmL0ludDEyOC5oCmluZGV4IDNi
ZGIwYTQ1ZWY1YzQ5YWZlZTJiOWRkZmQzMGE4YWMyNTIwZDYzZmEuLjQzNTdmNDc5YTFjMTVmNDJi
YWU2OTViOWNlN2NjOTI1ODkyZDUxYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ludDEy
OC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ludDEyOC5oCkBAIC0xLDI5MSArMSwxMjgxIEBACi0v
LyBUYWtlbiBmcm9tIExMVk0gUHJvamVjdCwgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAg
d2l0aCBMTFZNIEV4Y2VwdGlvbnMuCi0vLyBTZWUgU291cmNlL1dURi9MSUNFTlNFLUxMVk0udHh0
IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLgotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFw
YWNoZS0yLjAgV0lUSCBMTFZNLWV4Y2VwdGlvbgorLy8KKy8vIENvcHlyaWdodCAyMDE3IFRoZSBB
YnNlaWwgQXV0aG9ycy4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cHM6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgorLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGaWxlOiBJ
bnQxMjhJbXBsLmgKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhpcyBoZWFkZXIg
ZmlsZSBkZWZpbmVzIDEyOC1iaXQgaW50ZWdlciB0eXBlcywgYHVpbnQxMjhgIGFuZCBgSW50MTI4
SW1wbGAuCisvLworLy8gVE9ETyhhYnNsLXRlYW0pOiBUaGlzIG1vZHVsZSBpcyBpbmNvbnNpc3Rl
bnQgYXMgbWFueSBpbmxpbmUgYHVpbnQxMjhgIG1ldGhvZHMKKy8vIGFyZSBkZWZpbmVkIGluIHRo
aXMgZmlsZSwgd2hpbGUgbWFueSBpbmxpbmUgYEludDEyOEltcGxgIG1ldGhvZHMgYXJlIGRlZmlu
ZWQgaW4KKy8vIHRoZSBgaW50MTI4XypfaW50cmluc2ljLmluY2AgZmlsZXMuCisvLwogCi0vLyBQ
b3J0YWJsZSAxMjgtYml0IHVuc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYyBmb3IgdXNlIGluIGlt
cG92ZXJpc2hlZAotLy8gQysrIGltcGxlbWVudGF0aW9ucyBsYWNraW5nIF9fdWludDEyOF90Lgot
Ci0vLyBCYXNlZCBvbjoKLS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sbHZtL2xsdm0tcHJvamVjdC9i
bG9iL2Q0ODBmOTY4L2ZsYW5nL2luY2x1ZGUvZmxhbmcvQ29tbW9uL3VpbnQxMjguaAorLy8gSW50
MTI4LmggYW5kIEludDEyOC5jcHAgYXJlIGRlcml2ZWQgZnJvbSBhYnNlaWwtY3BwIChodHRwczov
L2dpdGh1Yi5jb20vYWJzZWlsL2Fic2VpbC1jcHApCisvLyBJbXBvcnRlZCByZXZpc2lvbiBpcyBk
ZGI4NDJmNTgzZTU2MGJiZGU0OTdiYzk2Y2ZlYmUyNWY5MDg5ZTExLgorLy8gV2UgYXBwbHkgdGhl
IGZvbGxvd2luZyBjaGFuZ2VzLgorLy8gMS4gVXNlIFdURiBtYWNyb3MgaW5zdGVhZCBvZiBBQlNM
IG1hY3Jvcy4KKy8vIDIuIFJlbW92ZSBhYnNlaWwgSGFzaFRhYmxlIGhhbmRsaW5nCisvLyAzLiBS
ZW1vdmUgX19pbnQxMjhfdCBoYW5kbGluZwogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGNh
c3NlcnQ+CisjaW5jbHVkZSA8Y21hdGg+CiAjaW5jbHVkZSA8Y3N0ZGludD4KLSNpbmNsdWRlIDx0
eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDx3dGYvTGVhZGluZ1plcm9CaXRDb3VudC5oPgorI2luY2x1
ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNs
dWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgQ09NUElMRVIo
TVNWQykKKy8vIEluIHZlcnkgb2xkIHZlcnNpb25zIG9mIE1TVkMgYW5kIHdoZW4gdGhlIC9aYzp3
Y2hhcl90IGZsYWcgaXMgb2ZmLCB3Y2hhcl90IGlzCisvLyBhIHR5cGVkZWYgZm9yIHVuc2lnbmVk
IHNob3J0LiAgT3RoZXJ3aXNlIHdjaGFyX3QgaXMgbWFwcGVkIHRvIHRoZSBfX3djaGFyX3QKKy8v
IGJ1aWx0aW4gdHlwZS4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIG5vdCB0byBkZWZpbmUgb3BlcmF0
b3Igd2NoYXJfdCgpCisvLyBhbG9uZ3NpZGUgb3BlcmF0b3IgdW5zaWduZWQgc2hvcnQoKSBpbiB0
aGVzZSBpbnN0YW5jZXMuCisjZGVmaW5lIEFCU0xfSU5URVJOQUxfV0NIQVJfVCBfX3djaGFyX3QK
KyNpZiBDUFUoWDg2XzY0KQorI2luY2x1ZGUgPGludHJpbi5oPgorI3ByYWdtYSBpbnRyaW5zaWMo
X3VtdWwxMjgpCisjZW5kaWYgIC8vIGRlZmluZWQoX01fWDY0KQorI2Vsc2UgICAvLyBkZWZpbmVk
KF9NU0NfVkVSKQorI2RlZmluZSBBQlNMX0lOVEVSTkFMX1dDSEFSX1Qgd2NoYXJfdAorI2VuZGlm
ICAvLyBkZWZpbmVkKF9NU0NfVkVSKQogCiBuYW1lc3BhY2UgV1RGIHsKIAotdGVtcGxhdGUgPGJv
b2wgSVNfU0lHTkVEID0gZmFsc2U+IGNsYXNzIEludDEyOEltcGwgewotcHVibGljOgotICAgIGNv
bnN0ZXhwciBJbnQxMjhJbXBsKCkgeyB9Ci0gICAgLy8gVGhpcyBtZWFucyBvZiBkZWZpbml0aW9u
IHByb3ZpZGVzIHNvbWUgcG9ydGFiaWxpdHkgZm9yCi0gICAgLy8gInNpemVfdCIgb3BlcmFuZHMu
Ci0gICAgY29uc3RleHByIEludDEyOEltcGwodW5zaWduZWQgbikgOiBsb3dfIHtufSB7IH0KLSAg
ICBjb25zdGV4cHIgSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIG4pIDogbG93XyB7bn0geyB9Ci0g
ICAgY29uc3RleHByIEludDEyOEltcGwodW5zaWduZWQgbG9uZyBsb25nIG4pIDogbG93XyB7bn0g
eyB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwoaW50IG4pCi0gICAgICAgIDogbG93XyB7c3Rh
dGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obil9Ci0gICAgICAgICwgaGlnaF8gey1zdGF0aWNfY2Fz
dDxzdGQ6OnVpbnQ2NF90PihuIDwgMCl9Ci0gICAgeyB9Ci0gICAgY29uc3RleHByIEludDEyOElt
cGwobG9uZyBuKQotICAgICAgICA6IGxvd18ge3N0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4p
fQotICAgICAgICAsIGhpZ2hfIHstc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obiA8IDApfQot
ICAgIHsgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGxvbmcgbG9uZyBuKQotICAgICAgICA6
IGxvd18ge3N0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pfQotICAgICAgICAsIGhpZ2hfIHst
c3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obiA8IDApfQotICAgIHsgfQotICAgIGNvbnN0ZXhw
ciBJbnQxMjhJbXBsKGNvbnN0IEludDEyOEltcGwgJikgPSBkZWZhdWx0OwotICAgIGNvbnN0ZXhw
ciBJbnQxMjhJbXBsKEludDEyOEltcGwgJiYpID0gZGVmYXVsdDsKLSAgICBjb25zdGV4cHIgSW50
MTI4SW1wbCAmb3BlcmF0b3I9KGNvbnN0IEludDEyOEltcGwgJikgPSBkZWZhdWx0OwotICAgIGNv
bnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvcj0oSW50MTI4SW1wbCAmJikgPSBkZWZhdWx0Owot
Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKCkgY29uc3QgeyByZXR1cm4gKnRo
aXM7IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcn4oKSBjb25zdCB7IHJldHVy
biB7fmhpZ2hfLCB+bG93X307IH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvci0o
KSBjb25zdCB7IHJldHVybiB+KnRoaXMgKyAxOyB9Ci0gICAgY29uc3RleHByIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gIWxvd18gJiYgIWhpZ2hfOyB9Ci0gICAgY29uc3RleHByIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBsb3dfIHx8IGhpZ2hfOyB9Ci0g
ICAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6dWludDY0X3QoKSBjb25zdCB7IHJl
dHVybiBsb3dfOyB9Ci0gICAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHN0ZDo6aW50NjRf
dCgpIGNvbnN0IHsgcmV0dXJuIGxvd187IH0KLSAgICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0
b3IgaW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb3dfKTsgfQotCi0gICAg
Y29uc3RleHByIHN0ZDo6dWludDY0X3QgaGlnaCgpIGNvbnN0IHsgcmV0dXJuIGhpZ2hfOyB9Ci0g
ICAgY29uc3RleHByIHN0ZDo6dWludDY0X3QgbG93KCkgY29uc3QgeyByZXR1cm4gbG93XzsgfQot
Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKygvKnByZWZpeCovKQotICAgIHsK
LSAgICAgICAgKnRoaXMgKz0gMTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBj
b25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcisrKGludCAvKnBvc3RmaXgqLykKLSAgICB7Ci0g
ICAgICAgIEludDEyOEltcGwgcmVzdWx0IHsqdGhpc307Ci0gICAgICAgICp0aGlzICs9IDE7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9w
ZXJhdG9yLS0oLypwcmVmaXgqLykKLSAgICB7Ci0gICAgICAgICp0aGlzIC09IDE7Ci0gICAgICAg
IHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3It
LShpbnQgLypwb3N0Zml4Ki8pCi0gICAgewotICAgICAgICBJbnQxMjhJbXBsIHJlc3VsdCB7KnRo
aXN9OwotICAgICAgICAqdGhpcyAtPSAxOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yJihJbnQxMjhJbXBsIHRoYXQpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4ge2hpZ2hfICYgdGhhdC5oaWdoXywgbG93XyAmIHRo
YXQubG93X307Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yIHwgKElu
dDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB7aGlnaF8gfCB0aGF0
LmhpZ2hfLCBsb3dfIHwgdGhhdC5sb3dffTsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOElt
cGwgb3BlcmF0b3JeKEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biB7aGlnaF8gXiB0aGF0LmhpZ2hfLCBsb3dfIF4gdGhhdC5sb3dffTsKLSAgICB9Ci0KLSAgICBj
b25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcjw8KEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGF0ID49IDEyOCkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgICAgIGlmICghdGhhdCkKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgc3Rk
Ojp1aW50NjRfdCBuIHt0aGF0Lmxvd199OwotICAgICAgICBpZiAobiA+PSA2NCkKLSAgICAgICAg
ICAgIHJldHVybiB7bG93XyA8PCAobiAtIDY0KSwgMH07Ci0gICAgICAgIHJldHVybiB7KGhpZ2hf
IDw8IG4pIHwgKGxvd18gPj4gKDY0IC0gbikpLCBsb3dfIDw8IG59OwotICAgIH0KLSAgICBjb25z
dGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcj4+KEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmICh0aGF0ID49IDEyOCkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgIGlmICghdGhhdCkKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgc3RkOjp1
aW50NjRfdCBuIHt0aGF0Lmxvd199OwotICAgICAgICBpZiAobiA+PSA2NCkKLSAgICAgICAgICAg
IHJldHVybiB7MCwgaGlnaF8gPj4gKG4gLSA2NCl9OwotICAgICAgICByZXR1cm4ge2hpZ2hfID4+
IG4sIChoaWdoXyA8PCAoNjQgLSBuKSkgfCAobG93XyA+PiBuKX07Ci0gICAgfQotCi0gICAgY29u
c3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHN0ZDo6dWludDY0X3QgbG93ZXIgeyhsb3dfICYgfnRvcEJpdCkgKyAodGhhdC5s
b3dfICYgfnRvcEJpdCl9OwotICAgICAgICBib29sIGNhcnJ5IHsoKGxvd2VyID4+IDYzKSArIChs
b3dfID4+IDYzKSArICh0aGF0Lmxvd18gPj4gNjMpKSA+IDF9OwotICAgICAgICByZXR1cm4ge2hp
Z2hfICsgdGhhdC5oaWdoXyArIGNhcnJ5LCBsb3dfICsgdGhhdC5sb3dffTsKLSAgICB9Ci0gICAg
Y29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3ItKEludDEyOEltcGwgdGhhdCkgY29uc3QgeyBy
ZXR1cm4gKnRoaXMgKyAtdGhhdDsgfQotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0
b3IqKEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN0ZDo6dWludDY0X3Qg
bWFzazMyIHsweGZmZmZmZmZmfTsKLSAgICAgICAgaWYgKCFoaWdoXyAmJiAhdGhhdC5oaWdoXykg
ewotICAgICAgICAgICAgc3RkOjp1aW50NjRfdCB4MCB7bG93XyAmIG1hc2szMn0sIHgxIHtsb3df
ID4+IDMyfTsKLSAgICAgICAgICAgIHN0ZDo6dWludDY0X3QgeTAge3RoYXQubG93XyAmIG1hc2sz
Mn0sIHkxIHt0aGF0Lmxvd18gPj4gMzJ9OwotICAgICAgICAgICAgSW50MTI4SW1wbCB4MHkwIHt4
MCAqIHkwfSwgeDB5MSB7eDAgKiB5MX07Ci0gICAgICAgICAgICBJbnQxMjhJbXBsIHgxeTAge3gx
ICogeTB9LCB4MXkxIHt4MSAqIHkxfTsKLSAgICAgICAgICAgIHJldHVybiB4MHkwICsgKCh4MHkx
ICsgeDF5MCkgPDwgMzIpICsgKHgxeTEgPDwgNjQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3Rk
Ojp1aW50NjRfdCB4MCB7bG93XyAmIG1hc2szMn0sIHgxIHtsb3dfID4+IDMyfSwgeDIge2hpZ2hf
ICYgbWFzazMyfSwKLSAgICAgICAgICAgIHgzIHtoaWdoXyA+PiAzMn07Ci0gICAgICAgIHN0ZDo6
dWludDY0X3QgeTAge3RoYXQubG93XyAmIG1hc2szMn0sIHkxIHt0aGF0Lmxvd18gPj4gMzJ9LAot
ICAgICAgICAgICAgeTIge3RoYXQuaGlnaF8gJiBtYXNrMzJ9LCB5MyB7dGhhdC5oaWdoXyA+PiAz
Mn07Ci0gICAgICAgIEludDEyOEltcGwgeDB5MCB7eDAgKiB5MH0sIHgweTEge3gwICogeTF9LCB4
MHkyIHt4MCAqIHkyfSwgeDB5MyB7eDAgKiB5M307Ci0gICAgICAgIEludDEyOEltcGwgeDF5MCB7
eDEgKiB5MH0sIHgxeTEge3gxICogeTF9LCB4MXkyIHt4MSAqIHkyfTsKLSAgICAgICAgSW50MTI4
SW1wbCB4MnkwIHt4MiAqIHkwfSwgeDJ5MSB7eDIgKiB5MX07Ci0gICAgICAgIEludDEyOEltcGwg
eDN5MCB7eDMgKiB5MH07Ci0gICAgICAgIHJldHVybiB4MHkwICsgKCh4MHkxICsgeDF5MCkgPDwg
MzIpICsgKCh4MHkyICsgeDF5MSArIHgyeTApIDw8IDY0KSArCi0gICAgICAgICAgICAoKHgweTMg
KyB4MXkyICsgeDJ5MSArIHgzeTApIDw8IDk2KTsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgSW50
MTI4SW1wbCBvcGVyYXRvci8oSW50MTI4SW1wbCB0aGF0KSBjb25zdAotICAgIHsKLSAgICAgICAg
aW50IGoge2xlYWRpbmdaZXJvZXMoKX07Ci0gICAgICAgIEludDEyOEltcGwgYml0cyB7KnRoaXN9
OwotICAgICAgICBiaXRzIDw8PSBqOwotICAgICAgICBJbnQxMjhJbXBsIG51bWVyYXRvciB7IH07
Ci0gICAgICAgIEludDEyOEltcGwgcXVvdGllbnQgeyB9OwotICAgICAgICBmb3IgKDsgaiA8IDEy
ODsgKytqKSB7Ci0gICAgICAgICAgICBudW1lcmF0b3IgPDw9IDE7Ci0gICAgICAgICAgICBpZiAo
Yml0cy5oaWdoXyAmIHRvcEJpdCkKLSAgICAgICAgICAgICAgICBudW1lcmF0b3IubG93XyB8PSAx
OwotICAgICAgICAgICAgYml0cyA8PD0gMTsKLSAgICAgICAgICAgIHF1b3RpZW50IDw8PSAxOwot
ICAgICAgICAgICAgaWYgKG51bWVyYXRvciA+PSB0aGF0KSB7Ci0gICAgICAgICAgICAgICAgKytx
dW90aWVudDsKLSAgICAgICAgICAgICAgICBudW1lcmF0b3IgLT0gdGhhdDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcXVvdGllbnQ7Ci0gICAgfQotCi0gICAgY29u
c3RleHByIEludDEyOEltcGwgb3BlcmF0b3IlKEludDEyOEltcGwgdGhhdCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGludCBqIHtsZWFkaW5nWmVyb2VzKCl9OwotICAgICAgICBJbnQxMjhJbXBsIGJp
dHMgeyp0aGlzfTsKLSAgICAgICAgYml0cyA8PD0gajsKLSAgICAgICAgSW50MTI4SW1wbCByZW1h
aW5kZXIgeyB9OwotICAgICAgICBmb3IgKDsgaiA8IDEyODsgKytqKSB7Ci0gICAgICAgICAgICBy
ZW1haW5kZXIgPDw9IDE7Ci0gICAgICAgICAgICBpZiAoYml0cy5oaWdoXyAmIHRvcEJpdCkKLSAg
ICAgICAgICAgICAgICByZW1haW5kZXIubG93XyB8PSAxOwotICAgICAgICAgICAgYml0cyA8PD0g
MTsKLSAgICAgICAgICAgIGlmIChyZW1haW5kZXIgPj0gdGhhdCkKLSAgICAgICAgICAgICAgICBy
ZW1haW5kZXIgLT0gdGhhdDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVtYWluZGVyOwot
ICAgIH0KLQotICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChJbnQxMjhJbXBsIHRoYXQpIGNv
bnN0Ci0gICAgewotICAgICAgICBpZiAoSVNfU0lHTkVEICYmIChoaWdoXyBeIHRoYXQuaGlnaF8p
ICYgdG9wQml0KQotICAgICAgICAgICAgcmV0dXJuICEhKGhpZ2hfICYgdG9wQml0KTsKLQotICAg
ICAgICByZXR1cm4gaGlnaF8gPCB0aGF0LmhpZ2hfIHx8IChoaWdoXyA9PSB0aGF0LmhpZ2hfICYm
IGxvd18gPCB0aGF0Lmxvd18pOwotICAgIH0KLSAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9
KEludDEyOEltcGwgdGhhdCkgY29uc3QgeyByZXR1cm4gISgqdGhpcyA+IHRoYXQpOyB9Ci0gICAg
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShJbnQxMjhJbXBsIHRoYXQpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbG93XyA9PSB0aGF0Lmxvd18gJiYgaGlnaF8gPT0gdGhhdC5oaWdoXzsK
LSAgICB9Ci0gICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShJbnQxMjhJbXBsIHRoYXQpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gdGhhdCk7IH0KLSAgICBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj49KEludDEyOEltcGwgdGhhdCkgY29uc3QgeyByZXR1cm4gdGhhdCA8PSAqdGhpczsgfQot
ICAgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihJbnQxMjhJbXBsIHRoYXQpIGNvbnN0IHsgcmV0
dXJuIHRoYXQgPCAqdGhpczsgfQotCi0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9y
Jj0oY29uc3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0gICAgICAgICp0aGlzID0gKnRoaXMg
JiB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQx
MjhJbXBsICZvcGVyYXRvcnw9KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAg
ICAqdGhpcyA9ICp0aGlzIHwgdGhhdDsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAg
ICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0b3JePShjb25zdCBJbnQxMjhJbXBsICZ0aGF0
KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhpcyBeIHRoYXQ7Ci0gICAgICAgIHJldHVybiAq
dGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yPDw9KGNvbnN0
IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzIDw8IHRoYXQ7
Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIEludDEyOEltcGwg
Jm9wZXJhdG9yPj49KGNvbnN0IEludDEyOEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhp
cyA9ICp0aGlzID4+IHRoYXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29u
c3RleHByIEludDEyOEltcGwgJm9wZXJhdG9yKz0oY29uc3QgSW50MTI4SW1wbCAmdGhhdCkKLSAg
ICB7Ci0gICAgICAgICp0aGlzID0gKnRoaXMgKyB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7
Ci0gICAgfQotICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvci09KGNvbnN0IEludDEy
OEltcGwgJnRoYXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzIC0gdGhhdDsKLSAgICAg
ICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbCAmb3BlcmF0
b3IqPShjb25zdCBJbnQxMjhJbXBsICZ0aGF0KQotICAgIHsKLSAgICAgICAgKnRoaXMgPSAqdGhp
cyAqIHRoYXQ7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgY29uc3RleHByIElu
dDEyOEltcGwgJm9wZXJhdG9yLz0oY29uc3QgSW50MTI4SW1wbCAmdGhhdCkKLSAgICB7Ci0gICAg
ICAgICp0aGlzID0gKnRoaXMgLyB0aGF0OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
ICAgIGNvbnN0ZXhwciBJbnQxMjhJbXBsICZvcGVyYXRvciU9KGNvbnN0IEludDEyOEltcGwgJnRo
YXQpCi0gICAgewotICAgICAgICAqdGhpcyA9ICp0aGlzICUgdGhhdDsKLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdGV4cHIgSW50MTI4SW1wbChzdGQ6
OnVpbnQ2NF90IGhpLCBzdGQ6OnVpbnQ2NF90IGxvKSA6IGxvd18ge2xvfSwgaGlnaF8ge2hpfSB7
IH0KLSAgICBjb25zdGV4cHIgaW50IGxlYWRpbmdaZXJvZXMoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKCFoaWdoXykKLSAgICAgICAgICAgIHJldHVybiA2NCArIGxlYWRpbmdaZXJvQml0Q291
bnQobG93Xyk7Ci0gICAgICAgIHJldHVybiBsZWFkaW5nWmVyb0JpdENvdW50KGhpZ2hfKTsKLSAg
ICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnVpbnQ2NF90IHRvcEJpdCB7c3RkOjp1aW50
NjRfdCB7MX0gPDwgNjN9OwotICAgIHN0ZDo6dWludDY0X3QgbG93XyB7MH0sIGhpZ2hfIHswfTsK
K2NsYXNzIEludDEyOEltcGw7CisKKy8vIFVJbnQxMjhJbXBsCisvLworLy8gQW4gdW5zaWduZWQg
MTI4LWJpdCBpbnRlZ2VyIHR5cGUuIFRoZSBBUEkgaXMgbWVhbnQgdG8gbWltaWMgYW4gaW50cmlu
c2ljIHR5cGUKKy8vIGFzIGNsb3NlbHkgYXMgaXMgcHJhY3RpY2FsLCBpbmNsdWRpbmcgZXhoaWJp
dGluZyB1bmRlZmluZWQgYmVoYXZpb3IgaW4KKy8vIGFuYWxvZ291cyBjYXNlcyAoZS5nLiBkaXZp
c2lvbiBieSB6ZXJvKS4gVGhpcyB0eXBlIGlzIGludGVuZGVkIHRvIGJlIGEKKy8vIGRyb3AtaW4g
cmVwbGFjZW1lbnQgb25jZSBDKysgc3VwcG9ydHMgYW4gaW50cmluc2ljIGB1aW50MTI4X3RgIHR5
cGU7IHdoZW4KKy8vIHRoYXQgb2NjdXJzLCBleGlzdGluZyB3ZWxsLWJlaGF2ZWQgdXNlcyBvZiBg
VUludDEyOEltcGxgIHdpbGwgY29udGludWUgdG8gd29yaworLy8gdXNpbmcgdGhhdCBuZXcgdHlw
ZS4KKy8vCisvLyBOb3RlOiBjb2RlIHdyaXR0ZW4gd2l0aCB0aGlzIHR5cGUgd2lsbCBjb250aW51
ZSB0byBjb21waWxlIG9uY2UgYHVpbnQxMjhfdGAKKy8vIGlzIGludHJvZHVjZWQsIHByb3ZpZGVk
IHRoZSByZXBsYWNlbWVudCBoZWxwZXIgZnVuY3Rpb25zCisvLyBgVUludDEyOEltcGwoTG93fEhp
Z2gpNjQoKWAgYW5kIGBNYWtlVUludDEyOCgpYCBhcmUgbWFkZS4KKy8vCisvLyBBIGBVSW50MTI4
SW1wbGAgc3VwcG9ydHMgdGhlIGZvbGxvd2luZzoKKy8vCisvLyAgICogSW1wbGljaXQgY29uc3Ry
dWN0aW9uIGZyb20gaW50ZWdyYWwgdHlwZXMKKy8vICAgKiBFeHBsaWNpdCBjb252ZXJzaW9uIHRv
IGludGVncmFsIHR5cGVzCisvLworLy8gSG93ZXZlciwgYSBgVUludDEyOEltcGxgIGRpZmZlcnMg
ZnJvbSBpbnRyaW5zaWMgaW50ZWdyYWwgdHlwZXMgaW4gdGhlIGZvbGxvd2luZworLy8gd2F5czoK
Ky8vCisvLyAgICogRXJyb3JzIG9uIGltcGxpY2l0IGNvbnZlcnNpb25zIHRoYXQgZG8gbm90IHBy
ZXNlcnZlIHZhbHVlIChzdWNoIGFzCisvLyAgICAgbG9zcyBvZiBwcmVjaXNpb24gd2hlbiBjb252
ZXJ0aW5nIHRvIGZsb2F0IHZhbHVlcykuCisvLyAgICogUmVxdWlyZXMgZXhwbGljaXQgY29uc3Ry
dWN0aW9uIGZyb20gYW5kIGNvbnZlcnNpb24gdG8gZmxvYXRpbmcgcG9pbnQKKy8vICAgICB0eXBl
cy4KKy8vICAgKiBDb252ZXJzaW9uIHRvIGludGVncmFsIHR5cGVzIHJlcXVpcmVzIGFuIGV4cGxp
Y2l0IHN0YXRpY19jYXN0KCkgdG8KKy8vICAgICBtaW1pYyB1c2Ugb2YgdGhlIGAtV25hcnJvd2lu
Z2AgY29tcGlsZXIgZmxhZy4KKy8vICAgKiBUaGUgYWxpZ25tZW50IHJlcXVpcmVtZW50IG9mIGBV
SW50MTI4SW1wbGAgbWF5IGRpZmZlciBmcm9tIHRoYXQgb2YgYW4KKy8vICAgICBpbnRyaW5zaWMg
MTI4LWJpdCBpbnRlZ2VyIHR5cGUgZGVwZW5kaW5nIG9uIHBsYXRmb3JtIGFuZCBidWlsZAorLy8g
ICAgIGNvbmZpZ3VyYXRpb24uCisvLworLy8gRXhhbXBsZToKKy8vCisvLyAgICAgZmxvYXQgeSA9
IFVJbnQxMjhNYXgoKTsgIC8vIEVycm9yLiBVSW50MTI4SW1wbCBjYW5ub3QgYmUgaW1wbGljaXRs
eQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0ZWQgdG8g
ZmxvYXQuCisvLworLy8gICAgIFVJbnQxMjhJbXBsIHY7CisvLyAgICAgdWludDY0X3QgaSA9IHY7
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVycm9yCisvLyAgICAgdWludDY0X3QgaSA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih2KTsgIC8vIE9LCisvLworY2xhc3MgYWxpZ25hcygxNikgVUlu
dDEyOEltcGwgeworIHB1YmxpYzoKKyAgVUludDEyOEltcGwoKSA9IGRlZmF1bHQ7CisKKyAgLy8g
Q29uc3RydWN0b3JzIGZyb20gYXJpdGhtZXRpYyB0eXBlcworICBjb25zdGV4cHIgVUludDEyOElt
cGwoaW50IHYpOyAgICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvZXhwbGljaXQpCisg
IGNvbnN0ZXhwciBVSW50MTI4SW1wbCh1bnNpZ25lZCBpbnQgdik7ICAgICAgICAvLyBOT0xJTlQo
cnVudGltZS9leHBsaWNpdCkKKyAgY29uc3RleHByIFVJbnQxMjhJbXBsKGxvbmcgdik7ICAgICAg
ICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgY29uc3RleHByIFVJbnQxMjhJbXBs
KHVuc2lnbmVkIGxvbmcgdik7ICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgY29uc3Rl
eHByIFVJbnQxMjhJbXBsKGxvbmcgbG9uZyB2KTsgICAgICAgICAgIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgY29uc3RleHByIFVJbnQxMjhJbXBsKHVuc2lnbmVkIGxvbmcgbG9uZyB2KTsgIC8v
IE5PTElOVChydW50aW1lL2ludCkKKyAgY29uc3RleHByIFVJbnQxMjhJbXBsKEludDEyOEltcGwg
dik7ICAvLyBOT0xJTlQocnVudGltZS9leHBsaWNpdCkKKyAgV1RGX0VYUE9SVF9QUklWQVRFIGV4
cGxpY2l0IFVJbnQxMjhJbXBsKGZsb2F0IHYpOworICBXVEZfRVhQT1JUX1BSSVZBVEUgZXhwbGlj
aXQgVUludDEyOEltcGwoZG91YmxlIHYpOworICBXVEZfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQg
VUludDEyOEltcGwobG9uZyBkb3VibGUgdik7CisKKyAgLy8gQXNzaWdubWVudCBvcGVyYXRvcnMg
ZnJvbSBhcml0aG1ldGljIHR5cGVzCisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj0oaW50IHYpOwor
ICBVSW50MTI4SW1wbCYgb3BlcmF0b3I9KHVuc2lnbmVkIGludCB2KTsKKyAgVUludDEyOEltcGwm
IG9wZXJhdG9yPShsb25nIHYpOyAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQp
CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvcj0odW5zaWduZWQgbG9uZyB2KTsgICAgICAgLy8gTk9M
SU5UKHJ1bnRpbWUvaW50KQorICBVSW50MTI4SW1wbCYgb3BlcmF0b3I9KGxvbmcgbG9uZyB2KTsg
ICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgVUludDEyOEltcGwmIG9wZXJhdG9y
PSh1bnNpZ25lZCBsb25nIGxvbmcgdik7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIFVJbnQx
MjhJbXBsJiBvcGVyYXRvcj0oSW50MTI4SW1wbCB2KTsKKworICAvLyBDb252ZXJzaW9uIG9wZXJh
dG9ycyB0byBvdGhlciBhcml0aG1ldGljIHR5cGVzCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyKCkg
Y29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzaWduZWQgY2hhcigpIGNvbnN0
OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgY2hhcigpIGNvbnN0Owor
ICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgY2hhcjE2X3QoKSBjb25zdDsKKyAgY29uc3Rl
eHByIGV4cGxpY2l0IG9wZXJhdG9yIGNoYXIzMl90KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBs
aWNpdCBvcGVyYXRvciBBQlNMX0lOVEVSTkFMX1dDSEFSX1QoKSBjb25zdDsKKyAgY29uc3RleHBy
IGV4cGxpY2l0IG9wZXJhdG9yIHNob3J0KCkgY29uc3Q7ICAvLyBOT0xJTlQocnVudGltZS9pbnQp
CisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICBjb25zdGV4cHIgZXhwbGljaXQg
b3BlcmF0b3IgdW5zaWduZWQgc2hvcnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9w
ZXJhdG9yIGludCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWdu
ZWQgaW50KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBsb25nKCkgY29u
c3Q7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUv
aW50KQorICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgdW5zaWduZWQgbG9uZygpIGNvbnN0
OworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4cGxpY2l0
IG9wZXJhdG9yIGxvbmcgbG9uZygpIGNvbnN0OworICAvLyBOT0xJTlRORVhUTElORShydW50aW1l
L2ludCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIGxvbmcgbG9uZygp
IGNvbnN0OworICBleHBsaWNpdCBvcGVyYXRvciBmbG9hdCgpIGNvbnN0OworICBleHBsaWNpdCBv
cGVyYXRvciBkb3VibGUoKSBjb25zdDsKKyAgZXhwbGljaXQgb3BlcmF0b3IgbG9uZyBkb3VibGUo
KSBjb25zdDsKKworICAvLyBUcml2aWFsIGNvcHkgY29uc3RydWN0b3IsIGFzc2lnbm1lbnQgb3Bl
cmF0b3IgYW5kIGRlc3RydWN0b3IuCisKKyAgLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMuCisgIFVJ
bnQxMjhJbXBsJiBvcGVyYXRvcis9KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAgVUludDEyOEltcGwm
IG9wZXJhdG9yLT0oVUludDEyOEltcGwgb3RoZXIpOworICBVSW50MTI4SW1wbCYgb3BlcmF0b3Iq
PShVSW50MTI4SW1wbCBvdGhlcik7CisgIC8vIExvbmcgZGl2aXNpb24vbW9kdWxvIGZvciBVSW50
MTI4SW1wbC4KKyAgVUludDEyOEltcGwmIG9wZXJhdG9yLz0oVUludDEyOEltcGwgb3RoZXIpOwor
ICBVSW50MTI4SW1wbCYgb3BlcmF0b3IlPShVSW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQxMjhJ
bXBsIG9wZXJhdG9yKysoaW50KTsKKyAgVUludDEyOEltcGwgb3BlcmF0b3ItLShpbnQpOworICBV
SW50MTI4SW1wbCYgb3BlcmF0b3I8PD0oaW50KTsKKyAgVUludDEyOEltcGwmIG9wZXJhdG9yPj49
KGludCk7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvciY9KFVJbnQxMjhJbXBsIG90aGVyKTsKKyAg
VUludDEyOEltcGwmIG9wZXJhdG9yfD0oVUludDEyOEltcGwgb3RoZXIpOworICBVSW50MTI4SW1w
bCYgb3BlcmF0b3JePShVSW50MTI4SW1wbCBvdGhlcik7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRv
cisrKCk7CisgIFVJbnQxMjhJbXBsJiBvcGVyYXRvci0tKCk7CisKKyAgLy8gVUludDEyOExvdzY0
KCkKKyAgLy8KKyAgLy8gUmV0dXJucyB0aGUgbG93ZXIgNjQtYml0IHZhbHVlIG9mIGEgYFVJbnQx
MjhJbXBsYCB2YWx1ZS4KKyAgZnJpZW5kIGNvbnN0ZXhwciB1aW50NjRfdCBVSW50MTI4TG93NjQo
VUludDEyOEltcGwgdik7CisKKyAgLy8gVUludDEyOEhpZ2g2NCgpCisgIC8vCisgIC8vIFJldHVy
bnMgdGhlIGhpZ2hlciA2NC1iaXQgdmFsdWUgb2YgYSBgVUludDEyOEltcGxgIHZhbHVlLgorICBm
cmllbmQgY29uc3RleHByIHVpbnQ2NF90IFVJbnQxMjhIaWdoNjQoVUludDEyOEltcGwgdik7CisK
KyAgLy8gTWFrZVVJbnQxMjgoKQorICAvLworICAvLyBDb25zdHJ1Y3RzIGEgYFVJbnQxMjhJbXBs
YCBudW1lcmljIHZhbHVlIGZyb20gdHdvIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4KKyAgLy8g
Tm90ZSB0aGF0IHRoaXMgZmFjdG9yeSBmdW5jdGlvbiBpcyB0aGUgb25seSB3YXkgdG8gY29uc3Ry
dWN0IGEgYFVJbnQxMjhJbXBsYAorICAvLyBmcm9tIGludGVnZXIgdmFsdWVzIGdyZWF0ZXIgdGhh
biAyXjY0LgorICAvLworICAvLyBFeGFtcGxlOgorICAvLworICAvLyAgIFVJbnQxMjhJbXBsIGJp
ZyA9IE1ha2VVSW50MTI4KDEsIDApOworICBmcmllbmQgY29uc3RleHByIFVJbnQxMjhJbXBsIE1h
a2VVSW50MTI4KHVpbnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdyk7CisKKyAgLy8gVUludDEyOE1h
eCgpCisgIC8vCisgIC8vIFJldHVybnMgdGhlIGhpZ2hlc3QgdmFsdWUgZm9yIGEgMTI4LWJpdCB1
bnNpZ25lZCBpbnRlZ2VyLgorICBmcmllbmQgY29uc3RleHByIFVJbnQxMjhJbXBsIFVJbnQxMjhN
YXgoKTsKKworIHByaXZhdGU6CisgIGNvbnN0ZXhwciBVSW50MTI4SW1wbCh1aW50NjRfdCBoaWdo
LCB1aW50NjRfdCBsb3cpOworCisgIC8vIFRPRE8oc3RyZWwpIFVwZGF0ZSBpbXBsZW1lbnRhdGlv
biB0byB1c2UgX19pbnQxMjggb25jZSBhbGwgdXNlcnMgb2YKKyAgLy8gVUludDEyOEltcGwgYXJl
IGZpeGVkIHRvIG5vdCBkZXBlbmQgb24gYWxpZ25vZihVSW50MTI4SW1wbCkgPT0gOC4gQWxzbyBh
ZGQKKyAgLy8gYWxpZ25hcygxNikgdG8gY2xhc3MgZGVmaW5pdGlvbiB0byBrZWVwIGFsaWdubWVu
dCBjb25zaXN0ZW50IGFjcm9zcworICAvLyBwbGF0Zm9ybXMuCisjaWYgQ1BVKExJVFRMRV9FTkRJ
QU4pCisgIHVpbnQ2NF90IGxvXzsKKyAgdWludDY0X3QgaGlfOworI2VsaWYgQ1BVKEJJR19FTkRJ
QU4pCisgIHVpbnQ2NF90IGhpXzsKKyAgdWludDY0X3QgbG9fOworI2Vsc2UgIC8vIGJ5dGUgb3Jk
ZXIKKyNlcnJvciAiVW5zdXBwb3J0ZWQgYnl0ZSBvcmRlcjogbXVzdCBiZSBsaXR0bGUtZW5kaWFu
IG9yIGJpZy1lbmRpYW4uIgorI2VuZGlmICAvLyBieXRlIG9yZGVyCit9OworCisvLyBhbGxvdyBV
SW50MTI4SW1wbCB0byBiZSBsb2dnZWQKK1dURl9FWFBPUlRfUFJJVkFURSBzdGQ6Om9zdHJlYW0m
IG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgVUludDEyOEltcGwgdik7CisKKy8vIFRPRE8o
c3RyZWwpIGFkZCBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYsIFVJbnQxMjhJbXBsKQorCitjb25z
dGV4cHIgVUludDEyOEltcGwgVUludDEyOE1heCgpIHsKKyAgcmV0dXJuIFVJbnQxMjhJbXBsKChz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpLAorICAgICAgICAgICAgICAgICAo
c3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSk7Cit9CisKK30gIC8vIG5hbWVz
cGFjZSBXVEYKKworLy8gU3BlY2lhbGl6ZWQgbnVtZXJpY19saW1pdHMgZm9yIFVJbnQxMjhJbXBs
LgorbmFtZXNwYWNlIHN0ZCB7Cit0ZW1wbGF0ZSA8PgorY2xhc3MgbnVtZXJpY19saW1pdHM8V1RG
OjpVSW50MTI4SW1wbD4geworIHB1YmxpYzoKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3NpZ25lZCA9IGZh
bHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CisgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc19leGFjdCA9IHRydWU7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc19zaWduYWxpbmdfTmFO
ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2ll
YzU1OSA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNfYm91bmRlZCA9IHRydWU7
CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19tb2R1bG8gPSB0cnVlOworICBzdGF0aWMgY29u
c3RleHByIGludCBkaWdpdHMgPSAxMjg7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IGRpZ2l0czEw
ID0gMzg7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9kaWdpdHMxMCA9IDA7CisgIHN0YXRp
YyBjb25zdGV4cHIgaW50IHJhZGl4ID0gMjsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluX2V4
cG9uZW50ID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwor
ICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZXhwb25lbnQgPSAwOworICBzdGF0aWMgY29uc3Rl
eHByIGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFw
cyA9IG51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6dHJhcHM7CisgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKworICBzdGF0aWMgY29uc3RleHByIFdURjo6
VUludDEyOEltcGwgKG1pbikoKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RG
OjpVSW50MTI4SW1wbCBsb3dlc3QoKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIg
V1RGOjpVSW50MTI4SW1wbCAobWF4KSgpIHsgcmV0dXJuIFdURjo6VUludDEyOE1heCgpOyB9Cisg
IHN0YXRpYyBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCBlcHNpbG9uKCkgeyByZXR1cm4gMDsg
fQorICBzdGF0aWMgY29uc3RleHByIFdURjo6VUludDEyOEltcGwgcm91bmRfZXJyb3IoKSB7IHJl
dHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCBpbmZpbml0eSgp
IHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBsIHF1aWV0
X05hTigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBs
IHNpZ25hbGluZ19OYU4oKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpV
SW50MTI4SW1wbCBkZW5vcm1fbWluKCkgeyByZXR1cm4gMDsgfQorfTsKK30gIC8vIG5hbWVzcGFj
ZSBzdGQKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEludDEyOEltcGwKKy8vCisvLyBBIHNpZ25l
ZCAxMjgtYml0IGludGVnZXIgdHlwZS4gVGhlIEFQSSBpcyBtZWFudCB0byBtaW1pYyBhbiBpbnRy
aW5zaWMKKy8vIGludGVncmFsIHR5cGUgYXMgY2xvc2VseSBhcyBpcyBwcmFjdGljYWwsIGluY2x1
ZGluZyBleGhpYml0aW5nIHVuZGVmaW5lZAorLy8gYmVoYXZpb3IgaW4gYW5hbG9nb3VzIGNhc2Vz
IChlLmcuIGRpdmlzaW9uIGJ5IHplcm8pLgorLy8KKy8vIEFuIGBJbnQxMjhJbXBsYCBzdXBwb3J0
cyB0aGUgZm9sbG93aW5nOgorLy8KKy8vICAgKiBJbXBsaWNpdCBjb25zdHJ1Y3Rpb24gZnJvbSBp
bnRlZ3JhbCB0eXBlcworLy8gICAqIEV4cGxpY2l0IGNvbnZlcnNpb24gdG8gaW50ZWdyYWwgdHlw
ZXMKKy8vCisvLyBIb3dldmVyLCBhbiBgSW50MTI4SW1wbGAgZGlmZmVycyBmcm9tIGludHJpbnNp
YyBpbnRlZ3JhbCB0eXBlcyBpbiB0aGUgZm9sbG93aW5nCisvLyB3YXlzOgorLy8KKy8vICAgKiBJ
dCBpcyBub3QgaW1wbGljaXRseSBjb252ZXJ0aWJsZSB0byBvdGhlciBpbnRlZ3JhbCB0eXBlcy4K
Ky8vICAgKiBSZXF1aXJlcyBleHBsaWNpdCBjb25zdHJ1Y3Rpb24gZnJvbSBhbmQgY29udmVyc2lv
biB0byBmbG9hdGluZyBwb2ludAorLy8gICAgIHR5cGVzLgorCisvLyBUaGUgZGVzaWduIGdvYWwg
Zm9yIGBJbnQxMjhJbXBsYCBpcyB0aGF0IGl0IHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIGEgZnV0
dXJlCisvLyBgaW50MTI4X3RgLCBpZiB0aGF0IHR5cGUgYmVjb21lcyBhIHBhcnQgb2YgdGhlIHN0
YW5kYXJkLgorLy8KKy8vIEV4YW1wbGU6CisvLworLy8gICAgIGZsb2F0IHkgPSBJbnQxMjhJbXBs
KDE3KTsgIC8vIEVycm9yLiBJbnQxMjhJbXBsIGNhbm5vdCBiZSBpbXBsaWNpdGx5CisvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0ZWQgdG8gZmxvYXQuCisvLwor
Ly8gICAgIEludDEyOEltcGwgdjsKKy8vICAgICBpbnQ2NF90IGkgPSB2OyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEVycm9yCisvLyAgICAgaW50NjRfdCBpID0gc3RhdGljX2Nhc3Q8aW50NjRf
dD4odik7ICAvLyBPSworLy8KK2NsYXNzIGFsaWduYXMoMTYpIEludDEyOEltcGwgeworIHB1Ymxp
YzoKKyAgSW50MTI4SW1wbCgpID0gZGVmYXVsdDsKKworICAvLyBDb25zdHJ1Y3RvcnMgZnJvbSBh
cml0aG1ldGljIHR5cGVzCisgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGludCB2KTsgICAgICAgICAg
ICAgICAgIC8vIE5PTElOVChydW50aW1lL2V4cGxpY2l0KQorICBjb25zdGV4cHIgSW50MTI4SW1w
bCh1bnNpZ25lZCBpbnQgdik7ICAgICAgICAvLyBOT0xJTlQocnVudGltZS9leHBsaWNpdCkKKyAg
Y29uc3RleHByIEludDEyOEltcGwobG9uZyB2KTsgICAgICAgICAgICAgICAgLy8gTk9MSU5UKHJ1
bnRpbWUvaW50KQorICBjb25zdGV4cHIgSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpOyAgICAg
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBJbnQxMjhJbXBsKGxvbmcgbG9u
ZyB2KTsgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgY29uc3RleHByIEludDEy
OEltcGwodW5zaWduZWQgbG9uZyBsb25nIHYpOyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICBj
b25zdGV4cHIgZXhwbGljaXQgSW50MTI4SW1wbChVSW50MTI4SW1wbCB2KTsKKyAgV1RGX0VYUE9S
VF9QUklWQVRFIGV4cGxpY2l0IEludDEyOEltcGwoZmxvYXQgdik7CisgIFdURl9FWFBPUlRfUFJJ
VkFURSBleHBsaWNpdCBJbnQxMjhJbXBsKGRvdWJsZSB2KTsKKyAgV1RGX0VYUE9SVF9QUklWQVRF
IGV4cGxpY2l0IEludDEyOEltcGwobG9uZyBkb3VibGUgdik7CisKKyAgLy8gQXNzaWdubWVudCBv
cGVyYXRvcnMgZnJvbSBhcml0aG1ldGljIHR5cGVzCisgIEludDEyOEltcGwmIG9wZXJhdG9yPShp
bnQgdik7CisgIEludDEyOEltcGwmIG9wZXJhdG9yPSh1bnNpZ25lZCBpbnQgdik7CisgIEludDEy
OEltcGwmIG9wZXJhdG9yPShsb25nIHYpOyAgICAgICAgICAgICAgICAvLyBOT0xJTlQocnVudGlt
ZS9pbnQpCisgIEludDEyOEltcGwmIG9wZXJhdG9yPSh1bnNpZ25lZCBsb25nIHYpOyAgICAgICAv
LyBOT0xJTlQocnVudGltZS9pbnQpCisgIEludDEyOEltcGwmIG9wZXJhdG9yPShsb25nIGxvbmcg
dik7ICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIEludDEyOEltcGwmIG9wZXJh
dG9yPSh1bnNpZ25lZCBsb25nIGxvbmcgdik7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisKKyAg
Ly8gQ29udmVyc2lvbiBvcGVyYXRvcnMgdG8gb3RoZXIgYXJpdGhtZXRpYyB0eXBlcworICBjb25z
dGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGlj
aXQgb3BlcmF0b3IgY2hhcigpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3Ig
c2lnbmVkIGNoYXIoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2ln
bmVkIGNoYXIoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGNoYXIxNl90
KCkgY29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjaGFyMzJfdCgpIGNvbnN0
OworICBjb25zdGV4cHIgZXhwbGljaXQgb3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UKCkg
Y29uc3Q7CisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBzaG9ydCgpIGNvbnN0OyAgLy8g
Tk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAg
Y29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkIHNob3J0KCkgY29uc3Q7CisgIGNv
bnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBpbnQoKSBjb25zdDsKKyAgY29uc3RleHByIGV4cGxp
Y2l0IG9wZXJhdG9yIHVuc2lnbmVkIGludCgpIGNvbnN0OworICBjb25zdGV4cHIgZXhwbGljaXQg
b3BlcmF0b3IgbG9uZygpIGNvbnN0OyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBOT0xJ
TlRORVhUTElORShydW50aW1lL2ludCkKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIHVu
c2lnbmVkIGxvbmcoKSBjb25zdDsKKyAgLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCisg
IGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBsb25nIGxvbmcoKSBjb25zdDsKKyAgLy8gTk9M
SU5UTkVYVExJTkUocnVudGltZS9pbnQpCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciB1
bnNpZ25lZCBsb25nIGxvbmcoKSBjb25zdDsKKyAgZXhwbGljaXQgb3BlcmF0b3IgZmxvYXQoKSBj
b25zdDsKKyAgZXhwbGljaXQgb3BlcmF0b3IgZG91YmxlKCkgY29uc3Q7CisgIGV4cGxpY2l0IG9w
ZXJhdG9yIGxvbmcgZG91YmxlKCkgY29uc3Q7CisKKyAgLy8gVHJpdmlhbCBjb3B5IGNvbnN0cnVj
dG9yLCBhc3NpZ25tZW50IG9wZXJhdG9yIGFuZCBkZXN0cnVjdG9yLgorCisgIC8vIEFyaXRobWV0
aWMgb3BlcmF0b3JzCisgIEludDEyOEltcGwmIG9wZXJhdG9yKz0oSW50MTI4SW1wbCBvdGhlcik7
CisgIEludDEyOEltcGwmIG9wZXJhdG9yLT0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOElt
cGwmIG9wZXJhdG9yKj0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9y
Lz0oSW50MTI4SW1wbCBvdGhlcik7CisgIEludDEyOEltcGwmIG9wZXJhdG9yJT0oSW50MTI4SW1w
bCBvdGhlcik7CisgIEludDEyOEltcGwgb3BlcmF0b3IrKyhpbnQpOyAgLy8gcG9zdGZpeCBpbmNy
ZW1lbnQ6IGkrKworICBJbnQxMjhJbXBsIG9wZXJhdG9yLS0oaW50KTsgIC8vIHBvc3RmaXggZGVj
cmVtZW50OiBpLS0KKyAgSW50MTI4SW1wbCYgb3BlcmF0b3IrKygpOyAgICAvLyBwcmVmaXggaW5j
cmVtZW50OiAgKytpCisgIEludDEyOEltcGwmIG9wZXJhdG9yLS0oKTsgICAgLy8gcHJlZml4IGRl
Y3JlbWVudDogIC0taQorICBJbnQxMjhJbXBsJiBvcGVyYXRvciY9KEludDEyOEltcGwgb3RoZXIp
OworICBJbnQxMjhJbXBsJiBvcGVyYXRvcnw9KEludDEyOEltcGwgb3RoZXIpOworICBJbnQxMjhJ
bXBsJiBvcGVyYXRvcl49KEludDEyOEltcGwgb3RoZXIpOworICBJbnQxMjhJbXBsJiBvcGVyYXRv
cjw8PShpbnQgYW1vdW50KTsKKyAgSW50MTI4SW1wbCYgb3BlcmF0b3I+Pj0oaW50IGFtb3VudCk7
CisKKyAgLy8gSW50MTI4TG93NjQoKQorICAvLworICAvLyBSZXR1cm5zIHRoZSBsb3dlciA2NC1i
aXQgdmFsdWUgb2YgYSBgSW50MTI4SW1wbGAgdmFsdWUuCisgIGZyaWVuZCBjb25zdGV4cHIgdWlu
dDY0X3QgSW50MTI4TG93NjQoSW50MTI4SW1wbCB2KTsKKworICAvLyBJbnQxMjhIaWdoNjQoKQor
ICAvLworICAvLyBSZXR1cm5zIHRoZSBoaWdoZXIgNjQtYml0IHZhbHVlIG9mIGEgYEludDEyOElt
cGxgIHZhbHVlLgorICBmcmllbmQgY29uc3RleHByIGludDY0X3QgSW50MTI4SGlnaDY0KEludDEy
OEltcGwgdik7CisKKyAgLy8gTWFrZUludDEyOCgpCisgIC8vCisgIC8vIENvbnN0cnVjdHMgYSBg
SW50MTI4SW1wbGAgbnVtZXJpYyB2YWx1ZSBmcm9tIHR3byA2NC1iaXQgaW50ZWdlcnMuIE5vdGUg
dGhhdAorICAvLyBzaWduZWRuZXNzIGlzIGNvbnZleWVkIGluIHRoZSB1cHBlciBgaGlnaGAgdmFs
dWUuCisgIC8vCisgIC8vICAgKEludDEyOEltcGwoMSkgPDwgNjQpICogaGlnaCArIGxvdworICAv
LworICAvLyBOb3RlIHRoYXQgdGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGlzIHRoZSBvbmx5IHdheSB0
byBjb25zdHJ1Y3QgYSBgSW50MTI4SW1wbGAKKyAgLy8gZnJvbSBpbnRlZ2VyIHZhbHVlcyBncmVh
dGVyIHRoYW4gMl42NCBvciBsZXNzIHRoYW4gLTJeNjQuCisgIC8vCisgIC8vIEV4YW1wbGU6Cisg
IC8vCisgIC8vICAgSW50MTI4SW1wbCBiaWcgPSBNYWtlSW50MTI4KDEsIDApOworICAvLyAgIElu
dDEyOEltcGwgYmlnX24gPSBNYWtlSW50MTI4KC0xLCAwKTsKKyAgZnJpZW5kIGNvbnN0ZXhwciBJ
bnQxMjhJbXBsIE1ha2VJbnQxMjgoaW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpOworCisgIC8v
IEludDEyOE1heCgpCisgIC8vCisgIC8vIFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUgZm9yIGEg
MTI4LWJpdCBzaWduZWQgaW50ZWdlci4KKyAgZnJpZW5kIGNvbnN0ZXhwciBJbnQxMjhJbXBsIElu
dDEyOE1heCgpOworCisgIC8vIEludDEyOE1pbigpCisgIC8vCisgIC8vIFJldHVybnMgdGhlIG1p
bmltdW0gdmFsdWUgZm9yIGEgMTI4LWJpdCBzaWduZWQgaW50ZWdlci4KKyAgZnJpZW5kIGNvbnN0
ZXhwciBJbnQxMjhJbXBsIEludDEyOE1pbigpOworCisgcHJpdmF0ZToKKyAgY29uc3RleHByIElu
dDEyOEltcGwoaW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpOworCisjaWYgQ1BVKExJVFRMRV9F
TkRJQU4pCisgIHVpbnQ2NF90IGxvXzsKKyAgaW50NjRfdCBoaV87CisjZWxpZiBDUFUoQklHX0VO
RElBTikKKyAgaW50NjRfdCBoaV87CisgIHVpbnQ2NF90IGxvXzsKKyNlbHNlICAvLyBieXRlIG9y
ZGVyCisjZXJyb3IgIlVuc3VwcG9ydGVkIGJ5dGUgb3JkZXI6IG11c3QgYmUgbGl0dGxlLWVuZGlh
biBvciBiaWctZW5kaWFuLiIKKyNlbmRpZiAgLy8gYnl0ZSBvcmRlcgogfTsKIAorV1RGX0VYUE9S
VF9QUklWQVRFIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBJbnQx
MjhJbXBsIHYpOworCisvLyBUT0RPKGFic2wtdGVhbSkgYWRkIG9wZXJhdG9yPj4oc3RkOjppc3Ry
ZWFtJiwgSW50MTI4SW1wbCkKKworY29uc3RleHByIEludDEyOEltcGwgSW50MTI4TWF4KCkgewor
ICByZXR1cm4gSW50MTI4SW1wbCgoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KSgp
LAorICAgICAgICAgICAgICAgIChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgp
KTsKK30KKworY29uc3RleHByIEludDEyOEltcGwgSW50MTI4TWluKCkgeworICByZXR1cm4gSW50
MTI4SW1wbCgoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKSgpLCAwKTsKK30KKwor
fSAgLy8gbmFtZXNwYWNlIFdURgorCisvLyBTcGVjaWFsaXplZCBudW1lcmljX2xpbWl0cyBmb3Ig
SW50MTI4SW1wbC4KK25hbWVzcGFjZSBzdGQgewordGVtcGxhdGUgPD4KK2NsYXNzIG51bWVyaWNf
bGltaXRzPFdURjo6SW50MTI4SW1wbD4geworIHB1YmxpYzoKKyAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX3Np
Z25lZCA9IHRydWU7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsK
KyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKKyAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aGFzX3F1aWV0X05hTiA9IGZhbHNlOworICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNf
ZGVub3JtX2xvc3MgPSBmYWxzZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOworICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNfaWVjNTU5ID0gZmFsc2U7CisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc19ib3VuZGVk
ID0gdHJ1ZTsKKyAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzX21vZHVsbyA9IGZhbHNlOworICBz
dGF0aWMgY29uc3RleHByIGludCBkaWdpdHMgPSAxMjc7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50
IGRpZ2l0czEwID0gMzg7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1heF9kaWdpdHMxMCA9IDA7
CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IHJhZGl4ID0gMjsKKyAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgbWluX2V4cG9uZW50ID0gMDsKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOworICBzdGF0aWMgY29uc3RleHByIGludCBtYXhfZXhwb25lbnQgPSAwOworICBzdGF0
aWMgY29uc3RleHByIGludCBtYXhfZXhwb25lbnQxMCA9IDA7CisgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB0cmFwcyA9IG51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6dHJhcHM7CisgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKKworICBzdGF0aWMgY29uc3Rl
eHByIFdURjo6SW50MTI4SW1wbCAobWluKSgpIHsgcmV0dXJuIFdURjo6SW50MTI4TWluKCk7IH0K
KyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6OkludDEyOEltcGwgbG93ZXN0KCkgeyByZXR1cm4gV1RG
OjpJbnQxMjhNaW4oKTsgfQorICBzdGF0aWMgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCAobWF4
KSgpIHsgcmV0dXJuIFdURjo6SW50MTI4TWF4KCk7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBXVEY6
OkludDEyOEltcGwgZXBzaWxvbigpIHsgcmV0dXJuIDA7IH0KKyAgc3RhdGljIGNvbnN0ZXhwciBX
VEY6OkludDEyOEltcGwgcm91bmRfZXJyb3IoKSB7IHJldHVybiAwOyB9CisgIHN0YXRpYyBjb25z
dGV4cHIgV1RGOjpJbnQxMjhJbXBsIGluZmluaXR5KCkgeyByZXR1cm4gMDsgfQorICBzdGF0aWMg
Y29uc3RleHByIFdURjo6SW50MTI4SW1wbCBxdWlldF9OYU4oKSB7IHJldHVybiAwOyB9CisgIHN0
YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIHNpZ25hbGluZ19OYU4oKSB7IHJldHVybiAw
OyB9CisgIHN0YXRpYyBjb25zdGV4cHIgV1RGOjpJbnQxMjhJbXBsIGRlbm9ybV9taW4oKSB7IHJl
dHVybiAwOyB9Cit9OworfSAgLy8gbmFtZXNwYWNlIHN0ZAorCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gICAgICAgICAgICAgICAgICAgICAgSW1wbGVtZW50YXRpb24gZGV0YWlscyBmb2xsb3cK
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCituYW1lc3BhY2UgV1RGIHsKKworY29uc3RleHByIFVJbnQx
MjhJbXBsIE1ha2VVSW50MTI4KHVpbnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykgeworICByZXR1
cm4gVUludDEyOEltcGwoaGlnaCwgbG93KTsKK30KKworLy8gQXNzaWdubWVudCBmcm9tIGludGVn
ZXIgdHlwZXMuCisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yPShp
bnQgdikgeyByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2KTsgfQorCitpbmxpbmUgVUludDEy
OEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcj0odW5zaWduZWQgaW50IHYpIHsKKyAgcmV0dXJu
ICp0aGlzID0gVUludDEyOEltcGwodik7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEy
OEltcGw6Om9wZXJhdG9yPShsb25nIHYpIHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0
dXJuICp0aGlzID0gVUludDEyOEltcGwodik7Cit9CisKKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRp
bWUvaW50KQoraW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KHVuc2ln
bmVkIGxvbmcgdikgeworICByZXR1cm4gKnRoaXMgPSBVSW50MTI4SW1wbCh2KTsKK30KKworLy8g
Tk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJ
bXBsOjpvcGVyYXRvcj0obG9uZyBsb25nIHYpIHsKKyAgcmV0dXJuICp0aGlzID0gVUludDEyOElt
cGwodik7Cit9CisKKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQoraW5saW5lIFVJbnQx
MjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgbG9uZyB2KSB7Cisg
IHJldHVybiAqdGhpcyA9IFVJbnQxMjhJbXBsKHYpOworfQorCitpbmxpbmUgVUludDEyOEltcGwm
IFVJbnQxMjhJbXBsOjpvcGVyYXRvcj0oSW50MTI4SW1wbCB2KSB7CisgIHJldHVybiAqdGhpcyA9
IFVJbnQxMjhJbXBsKHYpOworfQorCisvLyBBcml0aG1ldGljIG9wZXJhdG9ycy4KKworY29uc3Rl
eHByIFVJbnQxMjhJbXBsIG9wZXJhdG9yPDwoVUludDEyOEltcGwgbGhzLCBpbnQgYW1vdW50KTsK
K2NvbnN0ZXhwciBVSW50MTI4SW1wbCBvcGVyYXRvcj4+KFVJbnQxMjhJbXBsIGxocywgaW50IGFt
b3VudCk7Citjb25zdGV4cHIgVUludDEyOEltcGwgb3BlcmF0b3IrKFVJbnQxMjhJbXBsIGxocywg
VUludDEyOEltcGwgcmhzKTsKK2NvbnN0ZXhwciBVSW50MTI4SW1wbCBvcGVyYXRvci0oVUludDEy
OEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpOworVUludDEyOEltcGwgb3BlcmF0b3IqKFVJbnQx
MjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKTsKK1dURl9FWFBPUlRfUFJJVkFURSBVSW50MTI4
SW1wbCBvcGVyYXRvci8oVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpOworV1RGX0VY
UE9SVF9QUklWQVRFIFVJbnQxMjhJbXBsIG9wZXJhdG9yJShVSW50MTI4SW1wbCBsaHMsIFVJbnQx
MjhJbXBsIHJocyk7CisKK2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9y
PDw9KGludCBhbW91bnQpIHsKKyAgKnRoaXMgPSAqdGhpcyA8PCBhbW91bnQ7CisgIHJldHVybiAq
dGhpczsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3BlcmF0b3I+Pj0o
aW50IGFtb3VudCkgeworICAqdGhpcyA9ICp0aGlzID4+IGFtb3VudDsKKyAgcmV0dXJuICp0aGlz
OworfQorCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcis9KFVJbnQx
MjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgKyBvdGhlcjsKKyAgcmV0dXJuICp0aGlz
OworfQorCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvci09KFVJbnQx
MjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgLSBvdGhlcjsKKyAgcmV0dXJuICp0aGlz
OworfQorCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvcio9KFVJbnQx
MjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgKiBvdGhlcjsKKyAgcmV0dXJuICp0aGlz
OworfQorCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvci89KFVJbnQx
MjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgLyBvdGhlcjsKKyAgcmV0dXJuICp0aGlz
OworfQorCitpbmxpbmUgVUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvciU9KFVJbnQx
MjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgJSBvdGhlcjsKKyAgcmV0dXJuICp0aGlz
OworfQorCitjb25zdGV4cHIgdWludDY0X3QgVUludDEyOExvdzY0KFVJbnQxMjhJbXBsIHYpIHsg
cmV0dXJuIHYubG9fOyB9CisKK2NvbnN0ZXhwciB1aW50NjRfdCBVSW50MTI4SGlnaDY0KFVJbnQx
MjhJbXBsIHYpIHsgcmV0dXJuIHYuaGlfOyB9CisKKy8vIENvbnN0cnVjdG9ycyBmcm9tIGludGVn
ZXIgdHlwZXMuCisKKyNpZiBDUFUoTElUVExFX0VORElBTikKKworY29uc3RleHByIFVJbnQxMjhJ
bXBsOjpVSW50MTI4SW1wbCh1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpCisgICAgOiBsb197
bG93fSwgaGlfe2hpZ2h9IHt9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwo
aW50IHYpCisgICAgOiBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwKKyAgICAgIGhpX3t2
IDwgMCA/IChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpIDogMH0ge30KK2Nv
bnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwobG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRp
bWUvaW50KQorICAgIDogbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0sCisgICAgICBoaV97
diA8IDAgPyAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSA6IDB9IHt9Citj
b25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKGxvbmcgbG9uZyB2KSAgLy8gTk9MSU5U
KHJ1bnRpbWUvaW50KQorICAgIDogbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0sCisgICAg
ICBoaV97diA8IDAgPyAoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCkoKSA6IDB9
IHt9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwodW5zaWduZWQgaW50IHYp
IDogbG9fe3Z9LCBoaV97MH0ge30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29u
c3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIHYpIDogbG9fe3Z9
LCBoaV97MH0ge30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJ
bnQxMjhJbXBsOjpVSW50MTI4SW1wbCh1bnNpZ25lZCBsb25nIGxvbmcgdikgOiBsb197dn0sIGhp
X3swfSB7fQorCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKEludDEyOEltcGwg
dikKKyAgICA6IGxvX3tJbnQxMjhMb3c2NCh2KX0sIGhpX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4o
SW50MTI4SGlnaDY0KHYpKX0ge30KKworI2VsaWYgQ1BVKEJJR19FTkRJQU4pCisKK2NvbnN0ZXhw
ciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwodWludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KQor
ICAgIDogaGlfe2hpZ2h9LCBsb197bG93fSB7fQorCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJ
bnQxMjhJbXBsKGludCB2KQorICAgIDogaGlfe3YgPCAwID8gKHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDY0X3Q+OjptYXgpKCkgOiAwfSwKKyAgICAgIGxvX3tzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dil9IHt9Citjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKGxvbmcgdikgIC8vIE5P
TElOVChydW50aW1lL2ludCkKKyAgICA6IGhpX3t2IDwgMCA/IChzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ2NF90Pjo6bWF4KSgpIDogMH0sCisgICAgICBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHYpfSB7fQorY29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChsb25nIGxvbmcgdikg
IC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgICA6IGhpX3t2IDwgMCA/IChzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KSgpIDogMH0sCisgICAgICBsb197c3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHYpfSB7fQorCitjb25zdGV4cHIgVUludDEyOEltcGw6OlVJbnQxMjhJbXBsKHVuc2ln
bmVkIGludCB2KSA6IGhpX3swfSwgbG9fe3Z9IHt9CisvLyBOT0xJTlRORVhUTElORShydW50aW1l
L2ludCkKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwodW5zaWduZWQgbG9uZyB2
KSA6IGhpX3swfSwgbG9fe3Z9IHt9CisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2Nv
bnN0ZXhwciBVSW50MTI4SW1wbDo6VUludDEyOEltcGwodW5zaWduZWQgbG9uZyBsb25nIHYpIDog
aGlfezB9LCBsb197dn0ge30KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpVSW50MTI4SW1wbChJ
bnQxMjhJbXBsIHYpCisgICAgOiBoaV97c3RhdGljX2Nhc3Q8dWludDY0X3Q+KEludDEyOEhpZ2g2
NCh2KSl9LCBsb197SW50MTI4TG93NjQodil9IHt9CisKKyNlbHNlICAvLyBieXRlIG9yZGVyCisj
ZXJyb3IgIlVuc3VwcG9ydGVkIGJ5dGUgb3JkZXI6IG11c3QgYmUgbGl0dGxlLWVuZGlhbiBvciBi
aWctZW5kaWFuLiIKKyNlbmRpZiAgLy8gYnl0ZSBvcmRlcgorCisvLyBDb252ZXJzaW9uIG9wZXJh
dG9ycyB0byBpbnRlZ2VyIHR5cGVzLgorCitjb25zdGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBsb18gfHwgaGlfOyB9CisKK2NvbnN0ZXhwciBVSW50MTI4
SW1wbDo6b3BlcmF0b3IgY2hhcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KGxv
Xyk7IH0KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBzaWduZWQgY2hhcigpIGNv
bnN0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPihsb18pOworfQorCitjb25z
dGV4cHIgVUludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGNoYXIoKSBjb25zdCB7CisgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihsb18pOworfQorCitjb25zdGV4cHIgVUlu
dDEyOEltcGw6Om9wZXJhdG9yIGNoYXIxNl90KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y2hhcjE2X3Q+KGxvXyk7Cit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3Ig
Y2hhcjMyX3QoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyMzJfdD4obG9fKTsK
K30KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBBQlNMX0lOVEVSTkFMX1dDSEFS
X1QoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxBQlNMX0lOVEVSTkFMX1dDSEFSX1Q+
KGxvXyk7Cit9CisKKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIFVJ
bnQxMjhJbXBsOjpvcGVyYXRvciBzaG9ydCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNo
b3J0Pihsb18pOyB9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgdW5zaWduZWQg
c2hvcnQoKSBjb25zdCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4obG9fKTsgICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9p
bnQpCit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgaW50KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb18pOyB9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6
b3BlcmF0b3IgdW5zaWduZWQgaW50KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50Pihsb18pOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2Nv
bnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgbG9uZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmc+KGxvXyk7IH0KKworY29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciB1
bnNpZ25lZCBsb25nKCkgY29uc3QgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obG9fKTsgICAgICAgICAgICAvLyBOT0xJTlQocnVu
dGltZS9pbnQpCit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbDo6b3BlcmF0b3IgbG9uZyBsb25n
KCkgY29uc3QgeyAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihsb18pOyAgICAgICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKK30KKwor
Y29uc3RleHByIFVJbnQxMjhJbXBsOjpvcGVyYXRvciB1bnNpZ25lZCBsb25nIGxvbmcoKSBjb25z
dCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KGxvXyk7ICAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorfQor
CisvLyBDb252ZXJzaW9uIG9wZXJhdG9ycyB0byBmbG9hdGluZyBwb2ludCB0eXBlcy4KKworaW5s
aW5lIFVJbnQxMjhJbXBsOjpvcGVyYXRvciBmbG9hdCgpIGNvbnN0IHsKKyAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0Pihsb18pICsgc3RkOjpsZGV4cChzdGF0aWNfY2FzdDxmbG9hdD4oaGlfKSwg
NjQpOworfQorCitpbmxpbmUgVUludDEyOEltcGw6Om9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0IHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obG9fKSArIHN0ZDo6bGRleHAoc3RhdGljX2Nh
c3Q8ZG91YmxlPihoaV8pLCA2NCk7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbDo6b3BlcmF0b3Ig
bG9uZyBkb3VibGUoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4o
bG9fKSArCisgICAgICAgICBzdGQ6OmxkZXhwKHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPihoaV8p
LCA2NCk7Cit9CisKKy8vIENvbXBhcmlzb24gb3BlcmF0b3JzLgorCitjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KFVJbnQxMjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiAo
VUludDEyOExvdzY0KGxocykgPT0gVUludDEyOExvdzY0KHJocykgJiYKKyAgICAgICAgICBVSW50
MTI4SGlnaDY0KGxocykgPT0gVUludDEyOEhpZ2g2NChyaHMpKTsKK30KKworY29uc3RleHByIGJv
b2wgb3BlcmF0b3IhPShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeyByZXR1cm4g
IShsaHMgPT0gcmhzKTsgfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoVUludDEyOEltcGwg
bGhzLCBVSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIChVSW50MTI4SGlnaDY0KGxocykgPT0g
VUludDEyOEhpZ2g2NChyaHMpKQorICAgICAgICAgICAgID8gKFVJbnQxMjhMb3c2NChsaHMpIDwg
VUludDEyOExvdzY0KHJocykpCisgICAgICAgICAgICAgOiAoVUludDEyOEhpZ2g2NChsaHMpIDwg
VUludDEyOEhpZ2g2NChyaHMpKTsKK30KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KFVJbnQx
MjhJbXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7IHJldHVybiByaHMgPCBsaHM7IH0KKworY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8PShVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykg
eyByZXR1cm4gIShyaHMgPCBsaHMpOyB9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oVUlu
dDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCByaHMpIHsgcmV0dXJuICEobGhzIDwgcmhzKTsgfQor
CisvLyBVbmFyeSBvcGVyYXRvcnMuCisKK2NvbnN0ZXhwciBpbmxpbmUgVUludDEyOEltcGwgb3Bl
cmF0b3IrKFVJbnQxMjhJbXBsIHZhbCkgeworICByZXR1cm4gdmFsOworfQorCitjb25zdGV4cHIg
aW5saW5lIEludDEyOEltcGwgb3BlcmF0b3IrKEludDEyOEltcGwgdmFsKSB7CisgIHJldHVybiB2
YWw7Cit9CisKK2NvbnN0ZXhwciBVSW50MTI4SW1wbCBvcGVyYXRvci0oVUludDEyOEltcGwgdmFs
KSB7CisgIHJldHVybiBNYWtlVUludDEyOCgKKyAgICAgIH5VSW50MTI4SGlnaDY0KHZhbCkgKyBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihVSW50MTI4TG93NjQodmFsKSA9PSAwKSwKKyAgICAg
IH5VSW50MTI4TG93NjQodmFsKSArIDEpOworfQorCitjb25zdGV4cHIgaW5saW5lIGJvb2wgb3Bl
cmF0b3IhKFVJbnQxMjhJbXBsIHZhbCkgeworICByZXR1cm4gIVVJbnQxMjhIaWdoNjQodmFsKSAm
JiAhVUludDEyOExvdzY0KHZhbCk7Cit9CisKKy8vIExvZ2ljYWwgb3BlcmF0b3JzLgorCitjb25z
dGV4cHIgaW5saW5lIFVJbnQxMjhJbXBsIG9wZXJhdG9yfihVSW50MTI4SW1wbCB2YWwpIHsKKyAg
cmV0dXJuIE1ha2VVSW50MTI4KH5VSW50MTI4SGlnaDY0KHZhbCksIH5VSW50MTI4TG93NjQodmFs
KSk7Cit9CisKK2NvbnN0ZXhwciBpbmxpbmUgVUludDEyOEltcGwgb3BlcmF0b3J8KFVJbnQxMjhJ
bXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtlVUludDEyOChVSW50MTI4
SGlnaDY0KGxocykgfCBVSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICAgICBV
SW50MTI4TG93NjQobGhzKSB8IFVJbnQxMjhMb3c2NChyaHMpKTsKK30KKworY29uc3RleHByIGlu
bGluZSBVSW50MTI4SW1wbCBvcGVyYXRvciYoVUludDEyOEltcGwgbGhzLCBVSW50MTI4SW1wbCBy
aHMpIHsKKyAgcmV0dXJuIE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQobGhzKSAmIFVJbnQxMjhI
aWdoNjQocmhzKSwKKyAgICAgICAgICAgICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpICYgVUlu
dDEyOExvdzY0KHJocykpOworfQorCitjb25zdGV4cHIgaW5saW5lIFVJbnQxMjhJbXBsIG9wZXJh
dG9yXihVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gTWFrZVVJ
bnQxMjgoVUludDEyOEhpZ2g2NChsaHMpIF4gVUludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAg
ICAgICAgICAgICAgVUludDEyOExvdzY0KGxocykgXiBVSW50MTI4TG93NjQocmhzKSk7Cit9CisK
K2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yfD0oVUludDEyOEltcGwg
b3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyB8IG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisK
K2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yJj0oVUludDEyOEltcGwg
b3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyAmIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisK
K2lubGluZSBVSW50MTI4SW1wbCYgVUludDEyOEltcGw6Om9wZXJhdG9yXj0oVUludDEyOEltcGwg
b3RoZXIpIHsKKyAgKnRoaXMgPSAqdGhpcyBeIG90aGVyOworICByZXR1cm4gKnRoaXM7Cit9CisK
Ky8vIEFyaXRobWV0aWMgb3BlcmF0b3JzLgorCitjb25zdGV4cHIgVUludDEyOEltcGwgb3BlcmF0
b3I8PChVSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAgLy8gdWludDY0X3Qgc2hpZnRz
IG9mID49IDY0IGFyZSB1bmRlZmluZWQsIHNvIHdlIHdpbGwgbmVlZCBzb21lCisgIC8vIHNwZWNp
YWwtY2FzaW5nLgorICByZXR1cm4gYW1vdW50ID49IDY0ID8gTWFrZVVJbnQxMjgoVUludDEyOExv
dzY0KGxocykgPDwgKGFtb3VudCAtIDY0KSwgMCkKKyAgICAgICAgIDogYW1vdW50ID09IDAgPyBs
aHMKKyAgICAgICAgICAgICAgICAgICAgICAgOiBNYWtlVUludDEyOCgoVUludDEyOEhpZ2g2NChs
aHMpIDw8IGFtb3VudCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoVUludDEyOExvdzY0KGxocykgPj4gKDY0IC0gYW1vdW50KSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVUludDEyOExvdzY0KGxocykgPDwgYW1vdW50KTsKK30KKwor
Y29uc3RleHByIFVJbnQxMjhJbXBsIG9wZXJhdG9yPj4oVUludDEyOEltcGwgbGhzLCBpbnQgYW1v
dW50KSB7CisgIC8vIHVpbnQ2NF90IHNoaWZ0cyBvZiA+PSA2NCBhcmUgdW5kZWZpbmVkLCBzbyB3
ZSB3aWxsIG5lZWQgc29tZQorICAvLyBzcGVjaWFsLWNhc2luZy4KKyAgcmV0dXJuIGFtb3VudCA+
PSA2NCA/IE1ha2VVSW50MTI4KDAsIFVJbnQxMjhIaWdoNjQobGhzKSA+PiAoYW1vdW50IC0gNjQp
KQorICAgICAgICAgOiBhbW91bnQgPT0gMCA/IGxocworICAgICAgICAgICAgICAgICAgICAgICA6
IE1ha2VVSW50MTI4KFVJbnQxMjhIaWdoNjQobGhzKSA+PiBhbW91bnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKFVJbnQxMjhMb3c2NChsaHMpID4+IGFtb3VudCkgfAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVUludDEyOEhpZ2g2NChs
aHMpIDw8ICg2NCAtIGFtb3VudCkpKTsKK30KKworbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7
Citjb25zdGV4cHIgVUludDEyOEltcGwgQWRkUmVzdWx0KFVJbnQxMjhJbXBsIHJlc3VsdCwgVUlu
dDEyOEltcGwgbGhzKSB7CisgIC8vIGNoZWNrIGZvciBjYXJyeQorICByZXR1cm4gKFVJbnQxMjhM
b3c2NChyZXN1bHQpIDwgVUludDEyOExvdzY0KGxocykpCisgICAgICAgICAgICAgPyBNYWtlVUlu
dDEyOChVSW50MTI4SGlnaDY0KHJlc3VsdCkgKyAxLCBVSW50MTI4TG93NjQocmVzdWx0KSkKKyAg
ICAgICAgICAgICA6IHJlc3VsdDsKK30KK30gIC8vIG5hbWVzcGFjZSBpbnQxMjhfaW50ZXJuYWwK
KworY29uc3RleHByIFVJbnQxMjhJbXBsIG9wZXJhdG9yKyhVSW50MTI4SW1wbCBsaHMsIFVJbnQx
MjhJbXBsIHJocykgeworICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpBZGRSZXN1bHQoCisgICAg
ICBNYWtlVUludDEyOChVSW50MTI4SGlnaDY0KGxocykgKyBVSW50MTI4SGlnaDY0KHJocyksCisg
ICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQobGhzKSArIFVJbnQxMjhMb3c2NChyaHMpKSwK
KyAgICAgIGxocyk7Cit9CisKK25hbWVzcGFjZSBpbnQxMjhfaW50ZXJuYWwgeworY29uc3RleHBy
IFVJbnQxMjhJbXBsIFN1YnN0cnVjdFJlc3VsdChVSW50MTI4SW1wbCByZXN1bHQsIFVJbnQxMjhJ
bXBsIGxocywgVUludDEyOEltcGwgcmhzKSB7CisgIC8vIGNoZWNrIGZvciBjYXJyeQorICByZXR1
cm4gKFVJbnQxMjhMb3c2NChsaHMpIDwgVUludDEyOExvdzY0KHJocykpCisgICAgICAgICAgICAg
PyBNYWtlVUludDEyOChVSW50MTI4SGlnaDY0KHJlc3VsdCkgLSAxLCBVSW50MTI4TG93NjQocmVz
dWx0KSkKKyAgICAgICAgICAgICA6IHJlc3VsdDsKK30KK30gIC8vIG5hbWVzcGFjZSBpbnQxMjhf
aW50ZXJuYWwKKworY29uc3RleHByIFVJbnQxMjhJbXBsIG9wZXJhdG9yLShVSW50MTI4SW1wbCBs
aHMsIFVJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpTdWJzdHJ1
Y3RSZXN1bHQoCisgICAgICBNYWtlVUludDEyOChVSW50MTI4SGlnaDY0KGxocykgLSBVSW50MTI4
SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICBVSW50MTI4TG93NjQobGhzKSAtIFVJbnQx
MjhMb3c2NChyaHMpKSwKKyAgICAgIGxocywgcmhzKTsKK30KKworaW5saW5lIFVJbnQxMjhJbXBs
IG9wZXJhdG9yKihVSW50MTI4SW1wbCBsaHMsIFVJbnQxMjhJbXBsIHJocykgeworI2lmIENPTVBJ
TEVSKE1TVkMpICYmIENQVShYODZfNjQpCisgIHVpbnQ2NF90IGNhcnJ5OworICB1aW50NjRfdCBs
b3cgPSBfdW11bDEyOChVSW50MTI4TG93NjQobGhzKSwgVUludDEyOExvdzY0KHJocyksICZjYXJy
eSk7CisgIHJldHVybiBNYWtlVUludDEyOChVSW50MTI4TG93NjQobGhzKSAqIFVJbnQxMjhIaWdo
NjQocmhzKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgVUludDEyOEhpZ2g2NChsaHMpICog
VUludDEyOExvdzY0KHJocykgKyBjYXJyeSwKKyAgICAgICAgICAgICAgICAgICAgIGxvdyk7Cisj
ZWxzZQorICB1aW50NjRfdCBhMzIgPSBVSW50MTI4TG93NjQobGhzKSA+PiAzMjsKKyAgdWludDY0
X3QgYTAwID0gVUludDEyOExvdzY0KGxocykgJiAweGZmZmZmZmZmOworICB1aW50NjRfdCBiMzIg
PSBVSW50MTI4TG93NjQocmhzKSA+PiAzMjsKKyAgdWludDY0X3QgYjAwID0gVUludDEyOExvdzY0
KHJocykgJiAweGZmZmZmZmZmOworICBVSW50MTI4SW1wbCByZXN1bHQgPQorICAgICAgTWFrZVVJ
bnQxMjgoVUludDEyOEhpZ2g2NChsaHMpICogVUludDEyOExvdzY0KHJocykgKworICAgICAgICAg
ICAgICAgICAgICAgIFVJbnQxMjhMb3c2NChsaHMpICogVUludDEyOEhpZ2g2NChyaHMpICsgYTMy
ICogYjMyLAorICAgICAgICAgICAgICAgICAgYTAwICogYjAwKTsKKyAgcmVzdWx0ICs9IFVJbnQx
MjhJbXBsKGEzMiAqIGIwMCkgPDwgMzI7CisgIHJlc3VsdCArPSBVSW50MTI4SW1wbChhMDAgKiBi
MzIpIDw8IDMyOworICByZXR1cm4gcmVzdWx0OworI2VuZGlmCit9CisKKy8vIEluY3JlbWVudC9k
ZWNyZW1lbnQgb3BlcmF0b3JzLgorCitpbmxpbmUgVUludDEyOEltcGwgVUludDEyOEltcGw6Om9w
ZXJhdG9yKysoaW50KSB7CisgIFVJbnQxMjhJbXBsIHRtcCgqdGhpcyk7CisgICp0aGlzICs9IDE7
CisgIHJldHVybiB0bXA7Cit9CisKK2lubGluZSBVSW50MTI4SW1wbCBVSW50MTI4SW1wbDo6b3Bl
cmF0b3ItLShpbnQpIHsKKyAgVUludDEyOEltcGwgdG1wKCp0aGlzKTsKKyAgKnRoaXMgLT0gMTsK
KyAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIFVJbnQxMjhJbXBsJiBVSW50MTI4SW1wbDo6b3Bl
cmF0b3IrKygpIHsKKyAgKnRoaXMgKz0gMTsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUg
VUludDEyOEltcGwmIFVJbnQxMjhJbXBsOjpvcGVyYXRvci0tKCkgeworICAqdGhpcyAtPSAxOwor
ICByZXR1cm4gKnRoaXM7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIE1ha2VJbnQxMjgoaW50
NjRfdCBoaWdoLCB1aW50NjRfdCBsb3cpIHsKKyAgcmV0dXJuIEludDEyOEltcGwoaGlnaCwgbG93
KTsKK30KKworLy8gQXNzaWdubWVudCBmcm9tIGludGVnZXIgdHlwZXMuCitpbmxpbmUgSW50MTI4
SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KGludCB2KSB7CisgIHJldHVybiAqdGhpcyA9IElu
dDEyOEltcGwodik7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRv
cj0odW5zaWduZWQgaW50IHYpIHsKKyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2KTsKK30K
KworaW5saW5lIEludDEyOEltcGwmIEludDEyOEltcGw6Om9wZXJhdG9yPShsb25nIHYpIHsgIC8v
IE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0dXJuICp0aGlzID0gSW50MTI4SW1wbCh2KTsKK30K
KworLy8gTk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitpbmxpbmUgSW50MTI4SW1wbCYgSW50
MTI4SW1wbDo6b3BlcmF0b3I9KHVuc2lnbmVkIGxvbmcgdikgeworICByZXR1cm4gKnRoaXMgPSBJ
bnQxMjhJbXBsKHYpOworfQorCisvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKK2lubGlu
ZSBJbnQxMjhJbXBsJiBJbnQxMjhJbXBsOjpvcGVyYXRvcj0obG9uZyBsb25nIHYpIHsKKyAgcmV0
dXJuICp0aGlzID0gSW50MTI4SW1wbCh2KTsKK30KKworLy8gTk9MSU5UTkVYVExJTkUocnVudGlt
ZS9pbnQpCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I9KHVuc2lnbmVk
IGxvbmcgbG9uZyB2KSB7CisgIHJldHVybiAqdGhpcyA9IEludDEyOEltcGwodik7Cit9CisKKy8v
IEFyaXRobWV0aWMgb3BlcmF0b3JzLgorY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3ItKElu
dDEyOEltcGwgdik7Citjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcisoSW50MTI4SW1wbCBs
aHMsIEludDEyOEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yLShJbnQx
MjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworSW50MTI4SW1wbCBvcGVyYXRvciooSW50MTI4
SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsKK1dURl9FWFBPUlRfUFJJVkFURSBJbnQxMjhJbXBs
IG9wZXJhdG9yLyhJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpOworV1RGX0VYUE9SVF9Q
UklWQVRFIEludDEyOEltcGwgb3BlcmF0b3IlKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJo
cyk7Citjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcnwoSW50MTI4SW1wbCBsaHMsIEludDEy
OEltcGwgcmhzKTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yJihJbnQxMjhJbXBsIGxo
cywgSW50MTI4SW1wbCByaHMpOworY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3JeKEludDEy
OEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocyk7Citjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRv
cjw8KEludDEyOEltcGwgbGhzLCBpbnQgYW1vdW50KTsKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9w
ZXJhdG9yPj4oSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpOworCitpbmxpbmUgSW50MTI4SW1w
bCYgSW50MTI4SW1wbDo6b3BlcmF0b3IrPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0g
KnRoaXMgKyBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYg
SW50MTI4SW1wbDo6b3BlcmF0b3ItPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRo
aXMgLSBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50
MTI4SW1wbDo6b3BlcmF0b3IqPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMg
KiBvdGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4
SW1wbDo6b3BlcmF0b3IvPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgLyBv
dGhlcjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1w
bDo6b3BlcmF0b3IlPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgJSBvdGhl
cjsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6
b3BlcmF0b3J8PShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgfCBvdGhlcjsK
KyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3Bl
cmF0b3ImPShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgJiBvdGhlcjsKKyAg
cmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0
b3JePShJbnQxMjhJbXBsIG90aGVyKSB7CisgICp0aGlzID0gKnRoaXMgXiBvdGhlcjsKKyAgcmV0
dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I8
PD0oaW50IGFtb3VudCkgeworICAqdGhpcyA9ICp0aGlzIDw8IGFtb3VudDsKKyAgcmV0dXJuICp0
aGlzOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3I+Pj0oaW50
IGFtb3VudCkgeworICAqdGhpcyA9ICp0aGlzID4+IGFtb3VudDsKKyAgcmV0dXJuICp0aGlzOwor
fQorCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9uIGZvciBjb21wYXJpc29uIG9wZXJhdG9ycy4KK2Nv
bnN0ZXhwciBib29sIG9wZXJhdG9yIT0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKTsK
KworbmFtZXNwYWNlIGludDEyOF9pbnRlcm5hbCB7CisKKy8vIENhc3RzIGZyb20gdW5zaWduZWQg
dG8gc2lnbmVkIHdoaWxlIHByZXNlcnZpbmcgdGhlIHVuZGVybHlpbmcgYmluYXJ5CisvLyByZXBy
ZXNlbnRhdGlvbi4KK2NvbnN0ZXhwciBpbnQ2NF90IEJpdENhc3RUb1NpZ25lZCh1aW50NjRfdCB2
KSB7CisgIC8vIENhc3RpbmcgYW4gdW5zaWduZWQgaW50ZWdlciB0byBhIHNpZ25lZCBpbnRlZ2Vy
IG9mIHRoZSBzYW1lCisgIC8vIHdpZHRoIGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgYmVoYXZp
b3IgaWYgdGhlIHNvdXJjZSB2YWx1ZSB3b3VsZCBub3QgZml0CisgIC8vIGluIHRoZSBkZXN0aW5h
dGlvbiB0eXBlLiBXZSBzdGVwIGFyb3VuZCBpdCB3aXRoIGEgcm91bmR0cmlwIGJpdHdpc2Ugbm90
CisgIC8vIG9wZXJhdGlvbiB0byBtYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiByZW1haW5zIGNvbnN0
ZXhwci4gQ2xhbmcsIEdDQywgYW5kCisgIC8vIE1TVkMgb3B0aW1pemUgdGhpcyB0byBhIG5vLW9w
IG9uIHg4Ni02NC4KKyAgcmV0dXJuIHYgJiAodWludDY0X3R7MX0gPDwgNjMpID8gfnN0YXRpY19j
YXN0PGludDY0X3Q+KH52KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0
aWNfY2FzdDxpbnQ2NF90Pih2KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGludDEyOF9pbnRlcm5h
bAorCisvLyAjaW5jbHVkZSAiYWJzbC9udW1lcmljL2ludDEyOF9ub19pbnRyaW5zaWMuaW5jIiAg
Ly8gSVdZVSBwcmFnbWE6IGV4cG9ydAorCitjb25zdGV4cHIgdWludDY0X3QgSW50MTI4TG93NjQo
SW50MTI4SW1wbCB2KSB7IHJldHVybiB2LmxvXzsgfQorCitjb25zdGV4cHIgaW50NjRfdCBJbnQx
MjhIaWdoNjQoSW50MTI4SW1wbCB2KSB7IHJldHVybiB2LmhpXzsgfQorCisjaWYgQ1BVKExJVFRM
RV9FTkRJQU4pCisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGludDY0X3QgaGln
aCwgdWludDY0X3QgbG93KSA6CisgICAgbG9fKGxvdyksIGhpXyhoaWdoKSB7fQorCitjb25zdGV4
cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChpbnQgdikKKyAgICA6IGxvX3tzdGF0aWNfY2FzdDx1
aW50NjRfdD4odil9LCBoaV97diA8IDAgPyB+aW50NjRfdHswfSA6IDB9IHt9Citjb25zdGV4cHIg
SW50MTI4SW1wbDo6SW50MTI4SW1wbChsb25nIHYpICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisg
ICAgOiBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSwgaGlfe3YgPCAwID8gfmludDY0X3R7
MH0gOiAwfSB7fQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwobG9uZyBsb25nIHYp
ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgOiBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHYpfSwgaGlfe3YgPCAwID8gfmludDY0X3R7MH0gOiAwfSB7fQorCitjb25zdGV4cHIgSW50MTI4
SW1wbDo6SW50MTI4SW1wbCh1bnNpZ25lZCBpbnQgdikgOiBsb197dn0sIGhpX3swfSB7fQorLy8g
Tk9MSU5UTkVYVExJTkUocnVudGltZS9pbnQpCitjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4
SW1wbCh1bnNpZ25lZCBsb25nIHYpIDogbG9fe3Z9LCBoaV97MH0ge30KKy8vIE5PTElOVE5FWFRM
SU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwodW5zaWdu
ZWQgbG9uZyBsb25nIHYpIDogbG9fe3Z9LCBoaV97MH0ge30KKworY29uc3RleHByIEludDEyOElt
cGw6OkludDEyOEltcGwoVUludDEyOEltcGwgdikKKyAgICA6IGxvX3tVSW50MTI4TG93NjQodil9
LCBoaV97c3RhdGljX2Nhc3Q8aW50NjRfdD4oVUludDEyOEhpZ2g2NCh2KSl9IHt9CisKKyNlbGlm
IENQVShCSUdfRU5ESUFOKQorCitjb25zdGV4cHIgSW50MTI4SW1wbDo6SW50MTI4SW1wbChpbnQ2
NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykgOgorICAgIGhpX3toaWdofSwgbG9fe2xvd30ge30KKwor
Y29uc3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwoaW50IHYpCisgICAgOiBoaV97diA8IDAg
PyB+aW50NjRfdHswfSA6IDB9LCBsb197c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpfSB7fQorY29u
c3RleHByIEludDEyOEltcGw6OkludDEyOEltcGwobG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUv
aW50KQorICAgIDogaGlfe3YgPCAwID8gfmludDY0X3R7MH0gOiAwfSwgbG9fe3N0YXRpY19jYXN0
PHVpbnQ2NF90Pih2KX0ge30KK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBsKGxvbmcg
bG9uZyB2KSAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIDogaGlfe3YgPCAwID8gfmludDY0
X3R7MH0gOiAwfSwgbG9fe3N0YXRpY19jYXN0PHVpbnQ2NF90Pih2KX0ge30KKworY29uc3RleHBy
IEludDEyOEltcGw6OkludDEyOEltcGwodW5zaWduZWQgaW50IHYpIDogaGlfezB9LCBsb197dn0g
e30KKy8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorY29uc3RleHByIEludDEyOEltcGw6
OkludDEyOEltcGwodW5zaWduZWQgbG9uZyB2KSA6IGhpX3swfSwgbG9fe3Z9IHt9CisvLyBOT0xJ
TlRORVhUTElORShydW50aW1lL2ludCkKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpJbnQxMjhJbXBs
KHVuc2lnbmVkIGxvbmcgbG9uZyB2KSA6IGhpX3swfSwgbG9fe3Z9IHt9CisKK2NvbnN0ZXhwciBJ
bnQxMjhJbXBsOjpJbnQxMjhJbXBsKFVJbnQxMjhJbXBsIHYpCisgICAgOiBoaV97c3RhdGljX2Nh
c3Q8aW50NjRfdD4oVUludDEyOEhpZ2g2NCh2KSl9LCBsb197VUludDEyOExvdzY0KHYpfSB7fQor
CisjZWxzZSAgLy8gYnl0ZSBvcmRlcgorI2Vycm9yICJVbnN1cHBvcnRlZCBieXRlIG9yZGVyOiBt
dXN0IGJlIGxpdHRsZS1lbmRpYW4gb3IgYmlnLWVuZGlhbi4iCisjZW5kaWYgIC8vIGJ5dGUgb3Jk
ZXIKKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biBsb18gfHwgaGlfOyB9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyKCkg
Y29uc3QgeworICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNoYXI+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsKK30KKworY29uc3Rl
eHByIEludDEyOEltcGw6Om9wZXJhdG9yIHNpZ25lZCBjaGFyKCkgY29uc3QgeworICAvLyBOT0xJ
TlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFy
PihzdGF0aWNfY2FzdDxsb25nIGxvbmc+KCp0aGlzKSk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJ
bXBsOjpvcGVyYXRvciB1bnNpZ25lZCBjaGFyKCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4obG9fKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJh
dG9yIGNoYXIxNl90KCkgY29uc3QgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcjE2X3Q+KGxv
Xyk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBjaGFyMzJfdCgpIGNvbnN0
IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIzMl90Pihsb18pOworfQorCitjb25zdGV4cHIg
SW50MTI4SW1wbDo6b3BlcmF0b3IgQUJTTF9JTlRFUk5BTF9XQ0hBUl9UKCkgY29uc3QgeworICAv
LyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRpY19jYXN0PEFCU0xf
SU5URVJOQUxfV0NIQVJfVD4oc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigqdGhpcykpOworfQorCitj
b25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3Igc2hvcnQoKSBjb25zdCB7ICAvLyBOT0xJTlQo
cnVudGltZS9pbnQpCisgIC8vIE5PTElOVE5FWFRMSU5FKHJ1bnRpbWUvaW50KQorICByZXR1cm4g
c3RhdGljX2Nhc3Q8c2hvcnQ+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMpKTsKK30KKwor
Y29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIHNob3J0KCkgY29uc3QgeyAg
Ly8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KGxvXyk7ICAgICAgICAgICAvLyBOT0xJTlQocnVudGltZS9pbnQpCit9CisKK2NvbnN0ZXhw
ciBJbnQxMjhJbXBsOjpvcGVyYXRvciBpbnQoKSBjb25zdCB7CisgIC8vIE5PTElOVE5FWFRMSU5F
KHJ1bnRpbWUvaW50KQorICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KCp0aGlzKSk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciB1bnNp
Z25lZCBpbnQoKSBjb25zdCB7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGxv
Xyk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsOjpvcGVyYXRvciBsb25nKCkgY29uc3QgeyAg
Ly8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAvLyBOT0xJTlRORVhUTElORShydW50aW1lL2ludCkK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKnRoaXMp
KTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGxvbmcoKSBj
b25zdCB7ICAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nPihsb18pOyAgICAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorfQorCitj
b25zdGV4cHIgSW50MTI4SW1wbDo6b3BlcmF0b3IgbG9uZyBsb25nKCkgY29uc3QgeyAgLy8gTk9M
SU5UKHJ1bnRpbWUvaW50KQorICAvLyBXZSBkb24ndCBib3RoZXIgY2hlY2tpbmcgdGhlIHZhbHVl
IG9mIGhpXy4gSWYgKnRoaXMgPCAwLCBsb18ncyBoaWdoIGJpdAorICAvLyBtdXN0IGJlIHNldCBp
biBvcmRlciBmb3IgdGhlIHZhbHVlIHRvIGZpdCBpbnRvIGEgbG9uZyBsb25nLiBDb252ZXJzZWx5
LCBpZgorICAvLyBsb18ncyBoaWdoIGJpdCBpcyBzZXQsICp0aGlzIG11c3QgYmUgPCAwIGZvciB0
aGUgdmFsdWUgdG8gZml0LgorICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpCaXRDYXN0VG9TaWdu
ZWQobG9fKTsKK30KKworY29uc3RleHByIEludDEyOEltcGw6Om9wZXJhdG9yIHVuc2lnbmVkIGxv
bmcgbG9uZygpIGNvbnN0IHsgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obG9fKTsgICAgICAgICAgIC8vIE5PTElOVChydW50
aW1lL2ludCkKK30KKworaW5saW5lIEludDEyOEltcGw6Om9wZXJhdG9yIGZsb2F0KCkgY29uc3Qg
eworICAvLyBXZSBtdXN0IGNvbnZlcnQgdGhlIGFic29sdXRlIHZhbHVlIGFuZCB0aGVuIG5lZ2F0
ZSBhcyBuZWVkZWQsIGJlY2F1c2UKKyAgLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXMgYXJlIHR5cGlj
YWxseSBzaWduLW1hZ25pdHVkZS4gT3RoZXJ3aXNlLCB0aGUKKyAgLy8gZGlmZmVyZW5jZSBiZXR3
ZWVuIHRoZSBoaWdoIGFuZCBsb3cgNjQgYml0cyB3aGVuIGludGVycHJldGVkIGFzIHR3bydzCisg
IC8vIGNvbXBsZW1lbnQgb3ZlcndoZWxtcyB0aGUgcHJlY2lzaW9uIG9mIHRoZSBtYW50aXNzYS4K
KyAgLy8KKyAgLy8gQWxzbyBjaGVjayB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbmVnYXRlIEludDEy
OE1pbigpCisgIHJldHVybiBoaV8gPCAwICYmICp0aGlzICE9IEludDEyOE1pbigpCisgICAgICAg
ICAgICAgPyAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0qdGhpcykKKyAgICAgICAgICAgICA6IHN0YXRp
Y19jYXN0PGZsb2F0Pihsb18pICsKKyAgICAgICAgICAgICAgICAgICBzdGQ6OmxkZXhwKHN0YXRp
Y19jYXN0PGZsb2F0PihoaV8pLCA2NCk7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsOjpvcGVyYXRv
ciBkb3VibGUoKSBjb25zdCB7CisgIC8vIFNlZSBjb21tZW50IGluIEludDEyOEltcGw6Om9wZXJh
dG9yIGZsb2F0KCkgYWJvdmUuCisgIHJldHVybiBoaV8gPCAwICYmICp0aGlzICE9IEludDEyOE1p
bigpCisgICAgICAgICAgICAgPyAtc3RhdGljX2Nhc3Q8ZG91YmxlPigtKnRoaXMpCisgICAgICAg
ICAgICAgOiBzdGF0aWNfY2FzdDxkb3VibGU+KGxvXykgKworICAgICAgICAgICAgICAgICAgIHN0
ZDo6bGRleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihoaV8pLCA2NCk7Cit9CisKK2lubGluZSBJbnQx
MjhJbXBsOjpvcGVyYXRvciBsb25nIGRvdWJsZSgpIGNvbnN0IHsKKyAgLy8gU2VlIGNvbW1lbnQg
aW4gSW50MTI4SW1wbDo6b3BlcmF0b3IgZmxvYXQoKSBhYm92ZS4KKyAgcmV0dXJuIGhpXyA8IDAg
JiYgKnRoaXMgIT0gSW50MTI4TWluKCkKKyAgICAgICAgICAgICA/IC1zdGF0aWNfY2FzdDxsb25n
IGRvdWJsZT4oLSp0aGlzKQorICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+
KGxvXykgKworICAgICAgICAgICAgICAgICAgIHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8bG9uZyBk
b3VibGU+KGhpXyksIDY0KTsKK30KKworLy8gQ29tcGFyaXNvbiBvcGVyYXRvcnMuCisKK2NvbnN0
ZXhwciBib29sIG9wZXJhdG9yPT0oSW50MTI4SW1wbCBsaHMsIEludDEyOEltcGwgcmhzKSB7Cisg
IHJldHVybiAoSW50MTI4TG93NjQobGhzKSA9PSBJbnQxMjhMb3c2NChyaHMpICYmCisgICAgICAg
ICAgSW50MTI4SGlnaDY0KGxocykgPT0gSW50MTI4SGlnaDY0KHJocykpOworfQorCitjb25zdGV4
cHIgYm9vbCBvcGVyYXRvciE9KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeyByZXR1
cm4gIShsaHMgPT0gcmhzKTsgfQorCitjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoSW50MTI4SW1w
bCBsaHMsIEludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiAoSW50MTI4SGlnaDY0KGxocykgPT0g
SW50MTI4SGlnaDY0KHJocykpCisgICAgICAgICAgICAgPyAoSW50MTI4TG93NjQobGhzKSA8IElu
dDEyOExvdzY0KHJocykpCisgICAgICAgICAgICAgOiAoSW50MTI4SGlnaDY0KGxocykgPCBJbnQx
MjhIaWdoNjQocmhzKSk7Cit9CisKK2NvbnN0ZXhwciBib29sIG9wZXJhdG9yPihJbnQxMjhJbXBs
IGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIChJbnQxMjhIaWdoNjQobGhzKSA9PSBJ
bnQxMjhIaWdoNjQocmhzKSkKKyAgICAgICAgICAgICA/IChJbnQxMjhMb3c2NChsaHMpID4gSW50
MTI4TG93NjQocmhzKSkKKyAgICAgICAgICAgICA6IChJbnQxMjhIaWdoNjQobGhzKSA+IEludDEy
OEhpZ2g2NChyaHMpKTsKK30KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShJbnQxMjhJbXBs
IGxocywgSW50MTI4SW1wbCByaHMpIHsgcmV0dXJuICEobGhzID4gcmhzKTsgfQorCitjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcj49KEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeyByZXR1
cm4gIShsaHMgPCByaHMpOyB9CisKKy8vIFVuYXJ5IG9wZXJhdG9ycy4KKworY29uc3RleHByIElu
dDEyOEltcGwgb3BlcmF0b3ItKEludDEyOEltcGwgdikgeworICByZXR1cm4gTWFrZUludDEyOCh+
SW50MTI4SGlnaDY0KHYpICsgKEludDEyOExvdzY0KHYpID09IDApLAorICAgICAgICAgICAgICAg
ICAgICB+SW50MTI4TG93NjQodikgKyAxKTsKK30KKworY29uc3RleHByIGJvb2wgb3BlcmF0b3Ih
KEludDEyOEltcGwgdikgeworICByZXR1cm4gIUludDEyOExvdzY0KHYpICYmICFJbnQxMjhIaWdo
NjQodik7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yfihJbnQxMjhJbXBsIHZh
bCkgeworICByZXR1cm4gTWFrZUludDEyOCh+SW50MTI4SGlnaDY0KHZhbCksIH5JbnQxMjhMb3c2
NCh2YWwpKTsKK30KKworLy8gQXJpdGhtZXRpYyBvcGVyYXRvcnMuCisKK25hbWVzcGFjZSBpbnQx
MjhfaW50ZXJuYWwgeworY29uc3RleHByIEludDEyOEltcGwgU2lnbmVkQWRkUmVzdWx0KEludDEy
OEltcGwgcmVzdWx0LCBJbnQxMjhJbXBsIGxocykgeworICAvLyBjaGVjayBmb3IgY2FycnkKKyAg
cmV0dXJuIChJbnQxMjhMb3c2NChyZXN1bHQpIDwgSW50MTI4TG93NjQobGhzKSkKKyAgICAgICAg
ICAgICA/IE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KHJlc3VsdCkgKyAxLCBJbnQxMjhMb3c2NChy
ZXN1bHQpKQorICAgICAgICAgICAgIDogcmVzdWx0OworfQorfSAgLy8gbmFtZXNwYWNlIGludDEy
OF9pbnRlcm5hbAorY29uc3RleHByIEludDEyOEltcGwgb3BlcmF0b3IrKEludDEyOEltcGwgbGhz
LCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gaW50MTI4X2ludGVybmFsOjpTaWduZWRBZGRS
ZXN1bHQoCisgICAgICBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChsaHMpICsgSW50MTI4SGlnaDY0
KHJocyksCisgICAgICAgICAgICAgICAgIEludDEyOExvdzY0KGxocykgKyBJbnQxMjhMb3c2NChy
aHMpKSwKKyAgICAgIGxocyk7Cit9CisKK25hbWVzcGFjZSBpbnQxMjhfaW50ZXJuYWwgeworY29u
c3RleHByIEludDEyOEltcGwgU2lnbmVkU3Vic3RydWN0UmVzdWx0KEludDEyOEltcGwgcmVzdWx0
LCBJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgLy8gY2hlY2sgZm9yIGNhcnJ5
CisgIHJldHVybiAoSW50MTI4TG93NjQobGhzKSA8IEludDEyOExvdzY0KHJocykpCisgICAgICAg
ICAgICAgPyBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChyZXN1bHQpIC0gMSwgSW50MTI4TG93NjQo
cmVzdWx0KSkKKyAgICAgICAgICAgICA6IHJlc3VsdDsKK30KK30gIC8vIG5hbWVzcGFjZSBpbnQx
MjhfaW50ZXJuYWwKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yLShJbnQxMjhJbXBsIGxo
cywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIGludDEyOF9pbnRlcm5hbDo6U2lnbmVkU3Vi
c3RydWN0UmVzdWx0KAorICAgICAgTWFrZUludDEyOChJbnQxMjhIaWdoNjQobGhzKSAtIEludDEy
OEhpZ2g2NChyaHMpLAorICAgICAgICAgICAgICAgICBJbnQxMjhMb3c2NChsaHMpIC0gSW50MTI4
TG93NjQocmhzKSksCisgICAgICBsaHMsIHJocyk7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsIG9w
ZXJhdG9yKihJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMpIHsKKyAgcmV0dXJuIE1ha2VJ
bnQxMjgoCisgICAgICBpbnQxMjhfaW50ZXJuYWw6OkJpdENhc3RUb1NpZ25lZChVSW50MTI4SGln
aDY0KFVJbnQxMjhJbXBsKGxocykgKiByaHMpKSwKKyAgICAgIFVJbnQxMjhMb3c2NChVSW50MTI4
SW1wbChsaHMpICogcmhzKSk7Cit9CisKK2lubGluZSBJbnQxMjhJbXBsIEludDEyOEltcGw6Om9w
ZXJhdG9yKysoaW50KSB7CisgIEludDEyOEltcGwgdG1wKCp0aGlzKTsKKyAgKnRoaXMgKz0gMTsK
KyAgcmV0dXJuIHRtcDsKK30KKworaW5saW5lIEludDEyOEltcGwgSW50MTI4SW1wbDo6b3BlcmF0
b3ItLShpbnQpIHsKKyAgSW50MTI4SW1wbCB0bXAoKnRoaXMpOworICAqdGhpcyAtPSAxOworICBy
ZXR1cm4gdG1wOworfQorCitpbmxpbmUgSW50MTI4SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3Ir
KygpIHsKKyAgKnRoaXMgKz0gMTsKKyAgcmV0dXJuICp0aGlzOworfQorCitpbmxpbmUgSW50MTI4
SW1wbCYgSW50MTI4SW1wbDo6b3BlcmF0b3ItLSgpIHsKKyAgKnRoaXMgLT0gMTsKKyAgcmV0dXJu
ICp0aGlzOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcnwoSW50MTI4SW1wbCBs
aHMsIEludDEyOEltcGwgcmhzKSB7CisgIHJldHVybiBNYWtlSW50MTI4KEludDEyOEhpZ2g2NChs
aHMpIHwgSW50MTI4SGlnaDY0KHJocyksCisgICAgICAgICAgICAgICAgICAgIEludDEyOExvdzY0
KGxocykgfCBJbnQxMjhMb3c2NChyaHMpKTsKK30KKworY29uc3RleHByIEludDEyOEltcGwgb3Bl
cmF0b3ImKEludDEyOEltcGwgbGhzLCBJbnQxMjhJbXBsIHJocykgeworICByZXR1cm4gTWFrZUlu
dDEyOChJbnQxMjhIaWdoNjQobGhzKSAmIEludDEyOEhpZ2g2NChyaHMpLAorICAgICAgICAgICAg
ICAgICAgICBJbnQxMjhMb3c2NChsaHMpICYgSW50MTI4TG93NjQocmhzKSk7Cit9CisKK2NvbnN0
ZXhwciBJbnQxMjhJbXBsIG9wZXJhdG9yXihJbnQxMjhJbXBsIGxocywgSW50MTI4SW1wbCByaHMp
IHsKKyAgcmV0dXJuIE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KGxocykgXiBJbnQxMjhIaWdoNjQo
cmhzKSwKKyAgICAgICAgICAgICAgICAgICAgSW50MTI4TG93NjQobGhzKSBeIEludDEyOExvdzY0
KHJocykpOworfQorCitjb25zdGV4cHIgSW50MTI4SW1wbCBvcGVyYXRvcjw8KEludDEyOEltcGwg
bGhzLCBpbnQgYW1vdW50KSB7CisgIC8vIGludDY0X3Qgc2hpZnRzIG9mID49IDY0IGFyZSB1bmRl
ZmluZWQsIHNvIHdlIG5lZWQgc29tZSBzcGVjaWFsLWNhc2luZy4KKyAgcmV0dXJuIGFtb3VudCA+
PSA2NAorICAgICAgICAgICAgID8gTWFrZUludDEyOCgKKyAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ2NF90PihJbnQxMjhMb3c2NChsaHMpIDw8IChhbW91bnQgLSA2NCkpLCAwKQor
ICAgICAgICAgOiBhbW91bnQgPT0gMAorICAgICAgICAgICAgID8gbGhzCisgICAgICAgICAgICAg
OiBNYWtlSW50MTI4KAorICAgICAgICAgICAgICAgICAgIChJbnQxMjhIaWdoNjQobGhzKSA8PCBh
bW91bnQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50NjRfdD4oSW50
MTI4TG93NjQobGhzKSA+PiAoNjQgLSBhbW91bnQpKSwKKyAgICAgICAgICAgICAgICAgICBJbnQx
MjhMb3c2NChsaHMpIDw8IGFtb3VudCk7Cit9CisKK2NvbnN0ZXhwciBJbnQxMjhJbXBsIG9wZXJh
dG9yPj4oSW50MTI4SW1wbCBsaHMsIGludCBhbW91bnQpIHsKKyAgLy8gaW50NjRfdCBzaGlmdHMg
b2YgPj0gNjQgYXJlIHVuZGVmaW5lZCwgc28gd2UgbmVlZCBzb21lIHNwZWNpYWwtY2FzaW5nLgor
ICAvLyBUaGUgKEludDEyOEhpZ2g2NChsaHMpID4+IDMyKSA+PiAzMiAidHJpY2siIGNhdXNlcyB0
aGUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQKKyAgLy8gaW50NjQgdG8gYmUgaW5pdGl0aWFsaXplZCB3
aXRoIGFsbCB6ZXJvcyBvciBhbGwgb25lcyBjb3JyZWN0bHkuIEl0IHRha2VzCisgIC8vIGludG8g
YWNjb3VudCB3aGV0aGVyIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUgb3IgcG9zaXRpdmUsIGFuZCB3
aGV0aGVyIHRoZQorICAvLyBjdXJyZW50IGFyY2hpdGVjdHVyZSBkb2VzIGFyaXRobWV0aWMgb3Ig
bG9naWNhbCByaWdodCBzaGlmdHMgZm9yIG5lZ2F0aXZlCisgIC8vIG51bWJlcnMuCisgIHJldHVy
biBhbW91bnQgPj0gNjQKKyAgICAgICAgICAgICA/IE1ha2VJbnQxMjgoCisgICAgICAgICAgICAg
ICAgICAgKEludDEyOEhpZ2g2NChsaHMpID4+IDMyKSA+PiAzMiwKKyAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4SGlnaDY0KGxocykgPj4gKGFtb3VudCAtIDY0
KSkpCisgICAgICAgICA6IGFtb3VudCA9PSAwCisgICAgICAgICAgICAgPyBsaHMKKyAgICAgICAg
ICAgICA6IE1ha2VJbnQxMjgoSW50MTI4SGlnaDY0KGxocykgPj4gYW1vdW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAoSW50MTI4TG93NjQobGhzKSA+PiBhbW91bnQpIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oSW50MTI4SGlnaDY0
KGxocykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKDY0IC0gYW1vdW50KSkp
OworfQorCiAjaWYgSEFWRShJTlQxMjhfVCkKIHVzaW5nIFVJbnQxMjggPSBfX3VpbnQxMjhfdDsK
IHVzaW5nIEludDEyOCA9IF9faW50MTI4X3Q7CiAjZWxzZQotdXNpbmcgVUludDEyOCA9IEludDEy
OEltcGw8ZmFsc2U+OwotdXNpbmcgSW50MTI4ID0gSW50MTI4SW1wbDx0cnVlPjsKK3VzaW5nIFVJ
bnQxMjggPSBVSW50MTI4SW1wbDsKK3VzaW5nIEludDEyOCA9IEludDEyOEltcGw7CiAjZW5kaWYK
IAotdGVtcGxhdGUgPGludCBCSVRTPiBzdHJ1Y3QgSG9zdFVuc2lnbmVkSW50VHlwZUhlbHBlciB7
Ci0gICAgdXNpbmcgdHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDwoQklUUyA8PSA4KSwgc3RkOjp1
aW50OF90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gMTYpLCBzdGQ6OnVp
bnQxNl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gMzIpLCBzdGQ6OnVp
bnQzMl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJVFMgPD0gNjQpLCBzdGQ6OnVp
bnQ2NF90LCBVSW50MTI4Pj4+PjsKLX07Ci10ZW1wbGF0ZSA8aW50IEJJVFM+IHN0cnVjdCBIb3N0
U2lnbmVkSW50VHlwZUhlbHBlciB7Ci0gICAgdXNpbmcgdHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxf
dDwoQklUUyA8PSA4KSwgc3RkOjppbnQ4X3QsCi0gICAgICAgIHN0ZDo6Y29uZGl0aW9uYWxfdDwo
QklUUyA8PSAxNiksIHN0ZDo6aW50MTZfdCwKLSAgICAgICAgc3RkOjpjb25kaXRpb25hbF90PChC
SVRTIDw9IDMyKSwgc3RkOjppbnQzMl90LAotICAgICAgICBzdGQ6OmNvbmRpdGlvbmFsX3Q8KEJJ
VFMgPD0gNjQpLCBzdGQ6OmludDY0X3QsIEludDEyOD4+Pj47Ci19OwotdGVtcGxhdGUgPGludCBC
SVRTPgotdXNpbmcgSG9zdFVuc2lnbmVkSW50VHlwZSA9IHR5cGVuYW1lIEhvc3RVbnNpZ25lZElu
dFR5cGVIZWxwZXI8QklUUz46OnR5cGU7Ci10ZW1wbGF0ZSA8aW50IEJJVFM+Ci11c2luZyBIb3N0
U2lnbmVkSW50VHlwZSA9IHR5cGVuYW1lIEhvc3RTaWduZWRJbnRUeXBlSGVscGVyPEJJVFM+Ojp0
eXBlOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKK30gIC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcg
V1RGOjpJbnQxMjg7CiB1c2luZyBXVEY6OlVJbnQxMjg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9MZWFkaW5nWmVyb0JpdENvdW50LmNwcCBiL1NvdXJjZS9XVEYvd3RmL0xlYWRpbmdaZXJv
Qml0Q291bnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWY4YmU5OThlMzU4
NTkxMThkNWVlMDE4YzZjNWFiMzJlNWRiNzY1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL0xlYWRpbmdaZXJvQml0Q291bnQuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLy8gVGFrZW4gZnJvbSBMTFZNIFByb2pl
Y3QsIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wIHdpdGggTExWTSBFeGNlcHRpb25zLgot
Ly8gU2VlIFNvdXJjZS9XVEYvTElDRU5TRS1MTFZNLnR4dCBmb3IgbGljZW5zZSBpbmZvcm1hdGlv
bi4KLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIFdJVEggTExWTS1leGNl
cHRpb24KLQotLy8gQmFzZWQgb246Ci0vLyBodHRwczovL2dpdGh1Yi5jb20vbGx2bS9sbHZtLXBy
b2plY3QvYmxvYi9kNDgwZjk2OC9mbGFuZy9pbmNsdWRlL2ZsYW5nL0NvbW1vbi9sZWFkaW5nLXpl
cm8tYml0LWNvdW50LmgKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxlYWRpbmda
ZXJvQml0Q291bnQuaCIKLQotI2luY2x1ZGUgPGNpbnR0eXBlcz4KLQotbmFtZXNwYWNlIFdURiB7
Ci0KLWNvbnN0IHN0ZDo6dWludDhfdCBtYXBwaW5nWzY0XSB7NjMsIDAsIDU4LCAxLCA1OSwgNDcs
IDUzLCAyLCA2MCwgMzksCi0gICAgNDgsIDI3LCA1NCwgMzMsIDQyLCAzLCA2MSwgNTEsIDM3LCA0
MCwgNDksIDE4LCAyOCwgMjAsIDU1LCAzMCwgMzQsIDExLCA0MywKLSAgICAxNCwgMjIsIDQsIDYy
LCA1NywgNDYsIDUyLCAzOCwgMjYsIDMyLCA0MSwgNTAsIDM2LCAxNywgMTksIDI5LCAxMCwgMTMs
IDIxLAotICAgIDU2LCA0NSwgMjUsIDMxLCAzNSwgMTYsIDksIDEyLCA0NCwgMjQsIDE1LCA4LCAy
MywgNywgNiwgNX07Ci0KLWNvbnN0IHN0ZDo6dWludDhfdCBlaWdodEJpdExlYWRpbmdaZXJvQml0
Q291bnRbMjU2XSB7OCwgNywgNiwgNiwgNSwgNSwKLSAgICA1LCA1LCA0LCA0LCA0LCA0LCA0LCA0
LCA0LCA0LCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLAotICAg
IDMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIs
IDIsIDIsIDIsIDIsIDIsIDIsCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKLSAgICAxLCAxLCAxLCAx
LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAx
LCAxLCAxLAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAg
ICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvTGVhZGluZ1plcm9CaXRDb3VudC5oIGIvU291cmNlL1dURi93dGYvTGVhZGluZ1pl
cm9CaXRDb3VudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjdhMDFhNjJlNzZk
MzY4N2I1YjIwNjVkMzljMWYzYmNmNjIxYmQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL0xlYWRpbmdaZXJvQml0Q291bnQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8vIFRha2VuIGZyb20gTExWTSBQcm9qZWN0
LCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMCB3aXRoIExMVk0gRXhjZXB0aW9ucy4KLS8v
IFNlZSBTb3VyY2UvV1RGL0xJQ0VOU0UtTExWTS50eHQgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24u
Ci0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCBXSVRIIExMVk0tZXhjZXB0
aW9uCi0KLS8vIEJhc2VkIG9uOgotLy8gaHR0cHM6Ly9naXRodWIuY29tL2xsdm0vbGx2bS1wcm9q
ZWN0L2Jsb2IvZDQ4MGY5NjgvZmxhbmcvaW5jbHVkZS9mbGFuZy9Db21tb24vbGVhZGluZy16ZXJv
LWJpdC1jb3VudC5oCi0KLSNwcmFnbWEgb25jZQotCi0vLyBBIGZhc3QgYW5kIHBvcnRhYmxlIGZ1
bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBGb3J0cmFuJ3MgTEVBRFogaW50cmluc2ljCi0vLyBmdW5j
dGlvbiwgd2hpY2ggY291bnRzIHRoZSBudW1iZXIgb2YgbGVhZGluZyAobW9zdCBzaWduaWZpY2Fu
dCkgemVybyBiaXQKLS8vIHBvc2l0aW9ucyBpbiBhbiBpbnRlZ2VyIHZhbHVlLiAoSWYgdGhlIG1v
c3Qgc2lnbmlmaWNhbnQgYml0IGlzIHNldCwgdGhlCi0vLyBsZWFkaW5nIHplcm8gY291bnQgaXMg
emVybzsgaWYgbm8gYml0IGlzIHNldCwgdGhlIGxlYWRpbmcgemVybyBjb3VudCBpcyB0aGUKLS8v
IHdvcmQgc2l6ZSBpbiBiaXRzOyBvdGhlcndpc2UsIGl0J3MgdGhlIGxhcmdlc3QgbGVmdCBzaGlm
dCBjb3VudCB0aGF0Ci0vLyBkb2Vzbid0IHJlZHVjZSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhl
IHdvcmQgdGhhdCBhcmUgc2V0LikKLQotI2luY2x1ZGUgPGNpbnR0eXBlcz4KLQotbmFtZXNwYWNl
IFdURiB7Ci0KLS8vIFRoZSBmb2xsb3dpbmcgbWFnaWMgY29uc3RhbnQgaXMgYSBiaW5hcnkgZGVC
cnVpam4gc2VxdWVuY2UuCi0vLyBJdCBoYXMgdGhlIHJlbWFya2FibGUgcHJvcGVydHkgdGhhdCBp
ZiBvbmUgZXh0ZW5kcyBpdAotLy8gKHZpcnR1YWxseSkgb24gdGhlIHJpZ2h0IHdpdGggNSBtb3Jl
IHplcm8gYml0cywgdGhlbiBhbGwKLS8vIG9mIHRoZSA2NCBjb250aWd1b3VzIGZyYW1lZCBibG9j
a3Mgb2Ygc2l4IGJpdHMgaW4gdGhlCi0vLyBleHRlbmRlZCA2OS1iaXQgc2VxdWVuY2UgYXJlIGRp
c3RpbmN0LiBDb25zZXF1ZW50bHksCi0vLyBpZiBvbmUgc2hpZnRzIGl0IGxlZnQgYnkgYW55IHNo
aWZ0IGNvdW50IFswLi42M10gd2l0aAotLy8gdHJ1bmNhdGlvbiBhbmQgZXh0cmFjdHMgdGhlIHVw
cGVybW9zdCBzaXggYml0IGZpZWxkCi0vLyBvZiB0aGUgc2hpZnRlZCB2YWx1ZSwgZWFjaCBzaGlm
dCBjb3VudCBtYXBzIHRvIGEgZGlzdGluY3QKLS8vIGZpZWxkIHZhbHVlLiBUaGF0IG1lYW5zIHRo
YXQgd2UgY2FuIG1hcCB0aG9zZSA2NCBmaWVsZAotLy8gdmFsdWVzIGJhY2sgdG8gdGhlIHNoaWZ0
IGNvdW50cyB0aGF0IHByb2R1Y2UgdGhlbSwKLS8vIGFuZCAodGhlIHBvaW50KSB0aGlzIG1lYW5z
IHRoYXQgd2UgY2FuIHNoaWZ0IHRoaXMgdmFsdWUKLS8vIGJ5IGFuIHVua25vd24gYml0IGNvdW50
IGluIFswLi42M10gYW5kIHRoZW4gZmlndXJlIG91dAotLy8gd2hhdCB0aGF0IGNvdW50IG11c3Qg
aGF2ZSBiZWVuLgotLy8gICAgMCAgIDcgICBlICAgZCAgIGQgICA1ICAgZSAgIDUgICA5ICAgYSAg
IDQgICBlICAgMiAgIDggICBjICAgMgotLy8gMDAwMDAxMTExMTEwMTEwMTExMDEwMTAxMTExMDAx
MDExMDAxMTAxMDAxMDAxMTEwMDAxMDEwMDAxMTAwMDAxMAotc3RhdGljIGNvbnN0ZXhwciBzdGQ6
OnVpbnQ2NF90IGRlQnJ1aWpuIHsweDA3ZWRkNWU1OWE0ZTI4YzJ9OwotZXh0ZXJuIFdURl9FWFBP
UlRfUFJJVkFURSBjb25zdCBzdGQ6OnVpbnQ4X3QgbWFwcGluZ1s2NF07Ci0KLWV4dGVybiBXVEZf
RVhQT1JUX1BSSVZBVEUgY29uc3Qgc3RkOjp1aW50OF90IGVpZ2h0Qml0TGVhZGluZ1plcm9CaXRD
b3VudFsyNTZdOwotCi1pbmxpbmUgY29uc3RleHByIGludCBsZWFkaW5nWmVyb0JpdENvdW50KHN0
ZDo6dWludDY0X3QgeCkKLXsKLSAgICBpZiAoIXgpCi0gICAgICAgIHJldHVybiA2NDsKLQotICAg
IHggfD0geCA+PiAxOwotICAgIHggfD0geCA+PiAyOwotICAgIHggfD0geCA+PiA0OwotICAgIHgg
fD0geCA+PiA4OwotICAgIHggfD0geCA+PiAxNjsKLSAgICB4IHw9IHggPj4gMzI7Ci0gICAgLy8g
QWxsIG9mIHRoZSBiaXRzIGJlbG93IHRoZSB1cHBlcm1vc3Qgc2V0IGJpdCBhcmUgbm93IGFsc28g
c2V0LgotICAgIHggLT0geCA+PiAxOyAvLyBBbGwgb2YgdGhlIGJpdHMgYmVsb3cgdGhlIHVwcGVy
bW9zdCBhcmUgbm93IGNsZWFyLgotICAgIC8vIHggbm93IGhhcyBleGFjdGx5IG9uZSBiaXQgc2V0
LCBzbyBpdCBpcyBhIHBvd2VyIG9mIHR3bywgc28KLSAgICAvLyBtdWx0aXBsaWNhdGlvbiBieSB4
IGlzIGVxdWl2YWxlbnQgdG8gYSBsZWZ0IHNoaWZ0IGJ5IGl0cwotICAgIC8vIGJhc2UtMiBsb2dh
cml0aG0uIFdlIGNhbGN1bGF0ZSB0aGF0IHVua25vd24gYmFzZS0yIGxvZ2FyaXRobQotICAgIC8v
IGJ5IHNoaWZ0aW5nIHRoZSBkZUJydWlqbiBzZXF1ZW5jZSBhbmQgbWFwcGluZyB0aGUgZnJhbWVk
IHZhbHVlLgotICAgIGludCBiYXNlMkxvZyB7bWFwcGluZ1soeCAqIGRlQnJ1aWpuKSA+PiA1OF19
OwotICAgIHJldHVybiA2MyAtIGJhc2UyTG9nOyAvLyBjb252ZXJ0IHRvIGxlYWRpbmcgemVybyBj
b3VudAotfQotCi1pbmxpbmUgY29uc3RleHByIGludCBsZWFkaW5nWmVyb0JpdENvdW50KHN0ZDo6
dWludDMyX3QgeCkKLXsKLSAgICByZXR1cm4gbGVhZGluZ1plcm9CaXRDb3VudChzdGF0aWNfY2Fz
dDxzdGQ6OnVpbnQ2NF90Pih4KSkgLSAzMjsKLX0KLQotaW5saW5lIGNvbnN0ZXhwciBpbnQgbGVh
ZGluZ1plcm9CaXRDb3VudChzdGQ6OnVpbnQxNl90IHgpCi17Ci0gICAgcmV0dXJuIGxlYWRpbmda
ZXJvQml0Q291bnQoc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4oeCkpIC0gNDg7Ci19Ci0KLWlu
bGluZSBpbnQgbGVhZGluZ1plcm9CaXRDb3VudChzdGQ6OnVpbnQ4X3QgeCkKLXsKLSAgICByZXR1
cm4gZWlnaHRCaXRMZWFkaW5nWmVyb0JpdENvdW50W3hdOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgQT4gaW5saW5lIGNvbnN0ZXhwciBpbnQgYml0c05lZWRlZEZvcihBIHgpCi17Ci0gICAgcmV0
dXJuIDggKiBzaXplb2YgeCAtIGxlYWRpbmdaZXJvQml0Q291bnQoeCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotCi11c2luZyBXVEY6OmxlYWRpbmdaZXJvQml0Q291bnQ7Ci11c2luZyBXVEY6
OmJpdHNOZWVkZWRGb3I7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggY2NkOTE0Y2IzZDRlZGFjYThkZjUyZGM2NGY0Y2IyNjgxYzM0MzZkOC4uYTAw
Mjc2OTJjYzU3M2FmZjBhMzBhOWM2NWU4NjI0MTcyZTBjYzQ2ZiAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIxLTEw
LTIzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0g
UmVwbGFjZSBjdXJyZW50IExMVk0gZmxhbmcncyBJbnQxMjggd2l0aCBhYnNlaWwtY3BwJ3MgSW50
MTI4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzIx
MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvSW50MTI4LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRZUEVE
X1RFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpUb05hdGl2ZVVJbnQxMjgpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6RnJvbU5h
dGl2ZVVJbnQxMjgpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VG9OYXRpdmVJbnQxMjgpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6RnJvbU5hdGl2ZUludDEyOCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpUZXN0QmluYXJ5VUludDEyOCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
ZXN0QmluYXJ5SW50MTI4KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RWc05hdGl2ZVVJ
bnQxMjgpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdFZzTmF0aXZlSW50MTI4KToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RVbmFyeSk6IERlbGV0ZWQuCisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpUZXN0QmluYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRvTmF0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkZyb21OYXRpdmUp
OiBEZWxldGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdFZzTmF0aXZlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9MZWFkaW5nWmVyb0JpdENvdW50
LmNwcDogUmVtb3ZlZC4KKwogMjAyMS0xMC0yMSAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWJHTCBib3Qgc2hvdWxkIHJ1biB0ZXN0cyB3aXRoIEdQVSBQ
cm9jZXNzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0
cy50eHQgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CmluZGV4IGZkZGQ2YWMw
ZTA4NTRjZTU5ODQyMTM1ZjRmZThjOGNkZDRhZjQ1ZTIuLmU5ZDJkMWQxZWQ0YmFkZmQ5MWMyOTEy
NjQ1NTYxNWJjNmY0Mjg1OGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VM
aXN0cy50eHQKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dApAQCAtNTQs
NyArNTQsNiBAQCBzZXQoVGVzdFdURl9TT1VSQ0VTCiAgICAgVGVzdHMvV1RGL0l0ZXJhdG9yUmFu
Z2UuY3BwCiAgICAgVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAKICAgICBUZXN0cy9XVEYvTEVCRGVj
b2Rlci5jcHAKLSAgICBUZXN0cy9XVEYvTGVhZGluZ1plcm9CaXRDb3VudC5jcHAKICAgICBUZXN0
cy9XVEYvTGlmZWN5Y2xlTG9nZ2VyLmNwcAogICAgIFRlc3RzL1dURi9MaW5lRW5kaW5nLmNwcAog
ICAgIFRlc3RzL1dURi9MaXN0SGFzaFNldC5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
M2E5MTkxMTRiMzM3NDUyZTZmNTk5NzBkY2I0MDRiNTRlMDdlZmIwOS4uMWNhZDQxOTJjN2RhNzBl
YzM5NTQ0NmM5MmYyZmJkZmU4ODU4MzVhMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEz
MDksNyArMTMwOSw2IEBACiAJCUY2NjBBQTE1MTVBNjFBQkYwMDNBMTI0MyAvKiBJbmplY3RlZEJ1
bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFja1dpbnNfQnVuZGxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2NjBBQTE0MTVBNjFBQkYw
MDNBMTI0MyAvKiBJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFja1dp
bnNfQnVuZGxlLmNwcCAqLzsgfTsKIAkJRjZCN0JFOTUxNzQ2OTIxMjAwOEEzNDQ1IC8qIERpZEFz
c29jaWF0ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjZCN0JFOTIxNzQ2OTFFRjAwOEEzNDQ1IC8qIERpZEFzc29j
aWF0ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwICovOyB9OwogCQlGNkI3QkU5NzE3NDY5Qjk2MDA4
QTM0NDUgLyogYXNzb2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNkI3QkU5NjE3NDY5QjdFMDA4QTM0
NDUgLyogYXNzb2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbCAqLzsgfTsKLQkJRjZENjdEMzcyNkY5
MDIwNjAwNkUwMzQ5IC8qIExlYWRpbmdaZXJvQml0Q291bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjZENjdEMzUyNkY5MDIwNTAwNkUwMzQ5IC8q
IExlYWRpbmdaZXJvQml0Q291bnQuY3BwICovOyB9OwogCQlGNkQ2N0QzODI2RjkwMjA2MDA2RTAz
NDkgLyogSW50MTI4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY2RDY3RDM2MjZGOTAyMDYwMDZFMDM0OSAvKiBJbnQxMjguY3BwICovOyB9OwogCQlG
NkY0OUM2QjE1NTQ1Q0E3MDAwN0YzOUQgLyogRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5k
bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjZG
NDlDNjYxNTU0NUM4RDAwMDdGMzlEIC8qIERPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVfQnVuZGxl
LmNwcCAqLzsgfTsKIAkJRjZGRERERDYxNDI0MUM2RjAwNEYxNzI5IC8qIHB1c2gtc3RhdGUuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NkZERERENTE0MjQxQzQ4MDA0RjE3MjkgLyogcHVzaC1zdGF0ZS5odG1sICovOyB9OwpAQCAtMzIw
NSw3ICszMjA0LDYgQEAKIAkJRjZCN0JFOTIxNzQ2OTFFRjAwOEEzNDQ1IC8qIERpZEFzc29jaWF0
ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlkQXNzb2NpYXRl
Rm9ybUNvbnRyb2xzX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY2
QjdCRTkzMTc0NjkxRUYwMDhBMzQ0NSAvKiBEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjZCN0JFOTYxNzQ2OUI3RTAwOEEzNDQ1IC8qIGFzc29jaWF0
ZS1mb3JtLWNvbnRyb2xzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiYXNzb2NpYXRlLWZvcm0tY29udHJvbHMu
aHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY2RDY3RDM1MjZGOTAyMDUwMDZF
MDM0OSAvKiBMZWFkaW5nWmVyb0JpdENvdW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExlYWRpbmdaZXJvQml0Q291bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGNkQ2N0QzNjI2RjkwMjA2MDA2RTAzNDkgLyogSW50MTI4LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludDEyOC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUY2RjQ5QzY2MTU1NDVDOEQwMDA3RjM5RCAvKiBET01XaW5kb3dFeHRl
bnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUY2RjQ5QzY3MTU1NDVDOEQwMDA3RjM5RCAvKiBET01XaW5kb3dFeHRl
bnNpb25Ob0NhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERP
TVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNDU1Niw3ICs0NTU0LDYgQEAKIAkJCQkyNjZGQUZEMjE1RTU3NzUyMDBGNjFENUIgLyogSW50
ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgKi8sCiAJCQkJN0NFQjYyQTkyMjM2MDg2QzAwNjlD
QkIwIC8qIEl0ZXJhdG9yUmFuZ2UuY3BwICovLAogCQkJCTdBMDUwOTQwMUZCOUYwNDQwMEIzM0ZC
OCAvKiBKU09OVmFsdWUuY3BwICovLAotCQkJCUY2RDY3RDM1MjZGOTAyMDUwMDZFMDM0OSAvKiBM
ZWFkaW5nWmVyb0JpdENvdW50LmNwcCAqLywKIAkJCQk1MzFDMUQ4RDFERjhFRjcyMDA2RTk3OUYg
LyogTEVCRGVjb2Rlci5jcHAgKi8sCiAJCQkJQTU3RDU0RjcxRjMzOTdCNDAwQTk3QUE3IC8qIExp
ZmVjeWNsZUxvZ2dlci5jcHAgKi8sCiAJCQkJQTU3RDU0RjgxRjMzOTdCNDAwQTk3QUE3IC8qIExp
ZmVjeWNsZUxvZ2dlci5oICovLApAQCAtNTMzMyw3ICs1MzMwLDYgQEAKIAkJCQk1M0ZDREU2QjIy
OUVGRkI5MDA1OThFQ0YgLyogSXNvSGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0VCNjJB
QjIyMzYwOURFMDA2OUNCQjAgLyogSXRlcmF0b3JSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QTA1MDk0MTFGQjlGMDY0MDBCMzNGQjggLyogSlNPTlZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUY2RDY3RDM3MjZGOTAyMDYwMDZFMDM0OSAvKiBMZWFkaW5nWmVyb0JpdENvdW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNv
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0Q1NEY5MUYzMzk3QjQwMEE5N0FBNyAvKiBM
aWZlY3ljbGVMb2dnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNFMkM1NTUxRkQzMjA0MTAw
RTFERjZBIC8qIExpbmVFbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9JbnQxMjguY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvSW50MTI4LmNwcAppbmRleCA3NzViZjcxMTk0MGRkNDIyZmY0NzIxYjRjZGJj
NWU3ZmE3NjNmNDJjLi42YjhmZGQ0ZjNlMGFhNGM4NmJlNDA5Yjk4YjRkYTJiZTA1MGQ5NWY5IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9JbnQxMjguY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0ludDEyOC5jcHAKQEAgLTEsNCArMSwxOCBA
QAotLy8gVGFrZW4gZnJvbSBMTFZNIFByb2plY3QsIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2
Mi4wIHdpdGggTExWTSBFeGNlcHRpb25zLgorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIEFic2VpbCBB
dXRob3JzLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lv
biAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwczovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8v
IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuCisvLworLy8gU29tZSBvZiB0ZXN0cyBhcmUgdGFrZW4gZnJvbSBMTFZNIFByb2pl
Y3QsIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wIHdpdGggTExWTSBFeGNlcHRpb25zLgog
Ly8gU2VlIFNvdXJjZS9XVEYvTElDRU5TRS1MTFZNLnR4dCBmb3IgbGljZW5zZSBpbmZvcm1hdGlv
bi4KIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIFdJVEggTExWTS1leGNl
cHRpb24KIApAQCAtOCwzOSArMjIsMTIwOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgPHd0Zi9JbnQxMjguaD4KIAotI2luY2x1ZGUgPGNpbnR0eXBlcz4KKyNpbmNsdWRlIDxhbGdv
cml0aG0+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHJhbmRvbT4KKyNpbmNsdWRlIDx0
eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCi11c2luZyBOb25OYXRpdmVJbnQxMjggPSBXVEY6Oklu
dDEyOEltcGw8dHJ1ZT47Ci11c2luZyBOb25OYXRpdmVVSW50MTI4ID0gV1RGOjpJbnQxMjhJbXBs
PGZhbHNlPjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV1RGX1VJbnQxMjhJbnRlZ2Vy
VHJhaXRzVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworfTsKK3R5cGVkZWYgOjp0ZXN0
aW5nOjpUeXBlczxib29sLCBjaGFyLCBzaWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwgY2hhcjE2
X3QsCisgICAgY2hhcjMyX3QsIHdjaGFyX3QsCisgICAgc2hvcnQsIC8vIE5PTElOVChydW50aW1l
L2ludCkKKyAgICB1bnNpZ25lZCBzaG9ydCwgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgIGlu
dCwgdW5zaWduZWQgaW50LAorICAgIGxvbmcsIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgICB1
bnNpZ25lZCBsb25nLCAvLyBOT0xJTlQocnVudGltZS9pbnQpCisgICAgbG9uZyBsb25nLCAvLyBO
T0xJTlQocnVudGltZS9pbnQpCisgICAgdW5zaWduZWQgbG9uZyBsb25nPiAvLyBOT0xJTlQocnVu
dGltZS9pbnQpCisgICAgSW50ZWdlclR5cGVzOwogCi1zdGF0aWMgdm9pZCBUZXN0VW5hcnkoc3Rk
Ojp1aW50NjRfdCB4KQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBXVEZfVUludDEyOEZs
b2F0VHJhaXRzVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworfTsKK3R5cGVkZWYgOjp0
ZXN0aW5nOjpUeXBlczxmbG9hdCwgZG91YmxlLCBsb25nIGRvdWJsZT4gRmxvYXRpbmdQb2ludFR5
cGVzOworCitUWVBFRF9URVNUX1NVSVRFKFdURl9VSW50MTI4SW50ZWdlclRyYWl0c1Rlc3QsIElu
dGVnZXJUeXBlcyk7CisKK1RZUEVEX1RFU1QoV1RGX1VJbnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCwg
Q29uc3RydWN0QXNzaWduVGVzdCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3Ry
dWN0aWJsZTxXVEY6OlVJbnQxMjhJbXBsLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldU
Rjo6VUludDEyOEltcGwgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gVHlwZVBhcmFtIik7Cisg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Fzc2lnbmFibGU8V1RGOjpVSW50MTI4SW1wbCYsIFR5
cGVQYXJhbT46OnZhbHVlLAorICAgICAgICAiV1RGOjpVSW50MTI4SW1wbCBtdXN0IGJlIGFzc2ln
bmFibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fzc2ln
bmFibGU8VHlwZVBhcmFtJiwgV1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAiVHlw
ZVBhcmFtIG11c3Qgbm90IGJlIGFzc2lnbmFibGUgZnJvbSBXVEY6OlVJbnQxMjhJbXBsIik7Cit9
CisKK1RZUEVEX1RFU1RfU1VJVEUoV1RGX1VJbnQxMjhGbG9hdFRyYWl0c1Rlc3QsIEZsb2F0aW5n
UG9pbnRUeXBlcyk7CisKK1RZUEVEX1RFU1QoV1RGX1VJbnQxMjhGbG9hdFRyYWl0c1Rlc3QsIENv
bnN0cnVjdEFzc2lnblRlc3QpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVj
dGlibGU8V1RGOjpVSW50MTI4SW1wbCwgVHlwZVBhcmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6
OlVJbnQxMjhJbXBsIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIFR5cGVQYXJhbSIpOworICAg
IHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYXNzaWduYWJsZTxXVEY6OlVJbnQxMjhJbXBsJiwgVHlw
ZVBhcmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6OlVJbnQxMjhJbXBsIG11c3Qgbm90IGJlIGFz
c2lnbmFibGUgZnJvbSBUeXBlUGFyYW0iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Fz
c2lnbmFibGU8VHlwZVBhcmFtJiwgV1RGOjpVSW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAi
VHlwZVBhcmFtIG11c3Qgbm90IGJlIGFzc2lnbmFibGUgZnJvbSBXVEY6OlVJbnQxMjhJbXBsIik7
Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIFRyaXZpYWxUcmFpdHNUZXN0KQoreworICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPFdURjo6VUlu
dDEyOEltcGw+Ojp2YWx1ZSwKKyAgICAgICAgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1ZSwK
KyAgICAgICAgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weV9h
c3NpZ25hYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFdURjo6VUludDEyOEltcGw+Ojp2YWx1
ZSwgIiIpOworfQorCitURVNUKFdURl9VSW50MTI4LCBBbGxUZXN0cykKK3sKKyAgICBXVEY6OlVJ
bnQxMjhJbXBsIHplcm8gPSAwOworICAgIFdURjo6VUludDEyOEltcGwgb25lID0gMTsKKyAgICBX
VEY6OlVJbnQxMjhJbXBsIG9uZV8yYXJnID0gV1RGOjpNYWtlVUludDEyOCgwLCAxKTsKKyAgICBX
VEY6OlVJbnQxMjhJbXBsIHR3byA9IDI7CisgICAgV1RGOjpVSW50MTI4SW1wbCB0aHJlZSA9IDM7
CisgICAgV1RGOjpVSW50MTI4SW1wbCBiaWcgPSBXVEY6Ok1ha2VVSW50MTI4KDIwMDAsIDIpOwor
ICAgIFdURjo6VUludDEyOEltcGwgYmlnX21pbnVzX29uZSA9IFdURjo6TWFrZVVJbnQxMjgoMjAw
MCwgMSk7CisgICAgV1RGOjpVSW50MTI4SW1wbCBiaWdnZXIgPSBXVEY6Ok1ha2VVSW50MTI4KDIw
MDEsIDEpOworICAgIFdURjo6VUludDEyOEltcGwgYmlnZ2VzdCA9IFdURjo6VUludDEyOE1heCgp
OworICAgIFdURjo6VUludDEyOEltcGwgaGlnaF9sb3cgPSBXVEY6Ok1ha2VVSW50MTI4KDEsIDAp
OworICAgIFdURjo6VUludDEyOEltcGwgbG93X2hpZ2ggPSBXVEY6Ok1ha2VVSW50MTI4KDAsIHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSk7CisgICAgRVhQRUNUX0xUKG9uZSwg
dHdvKTsKKyAgICBFWFBFQ1RfR1QodHdvLCBvbmUpOworICAgIEVYUEVDVF9MVChvbmUsIGJpZyk7
CisgICAgRVhQRUNUX0xUKG9uZSwgYmlnKTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmVfMmFyZyk7
CisgICAgRVhQRUNUX05FKG9uZSwgdHdvKTsKKyAgICBFWFBFQ1RfR1QoYmlnLCBvbmUpOworICAg
IEVYUEVDVF9HRShiaWcsIHR3byk7CisgICAgRVhQRUNUX0dFKGJpZywgYmlnX21pbnVzX29uZSk7
CisgICAgRVhQRUNUX0dUKGJpZywgYmlnX21pbnVzX29uZSk7CisgICAgRVhQRUNUX0xUKGJpZ19t
aW51c19vbmUsIGJpZyk7CisgICAgRVhQRUNUX0xFKGJpZ19taW51c19vbmUsIGJpZyk7CisgICAg
RVhQRUNUX05FKGJpZ19taW51c19vbmUsIGJpZyk7CisgICAgRVhQRUNUX0xUKGJpZywgYmlnZ2Vz
dCk7CisgICAgRVhQRUNUX0xFKGJpZywgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0dUKGJpZ2dlc3Qs
IGJpZyk7CisgICAgRVhQRUNUX0dFKGJpZ2dlc3QsIGJpZyk7CisgICAgRVhQRUNUX0VRKGJpZywg
fn5iaWcpOworICAgIEVYUEVDVF9FUShvbmUsIG9uZSB8IG9uZSk7CisgICAgRVhQRUNUX0VRKGJp
ZywgYmlnIHwgYmlnKTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmUgfCB6ZXJvKTsKKyAgICBFWFBF
Q1RfRVEob25lLCBvbmUgJiBvbmUpOworICAgIEVYUEVDVF9FUShiaWcsIGJpZyAmIGJpZyk7Cisg
ICAgRVhQRUNUX0VRKHplcm8sIG9uZSAmIHplcm8pOworICAgIEVYUEVDVF9FUSh6ZXJvLCBiaWcg
JiB+YmlnKTsKKyAgICBFWFBFQ1RfRVEoemVybywgb25lIF4gb25lKTsKKyAgICBFWFBFQ1RfRVEo
emVybywgYmlnIF4gYmlnKTsKKyAgICBFWFBFQ1RfRVEob25lLCBvbmUgXiB6ZXJvKTsKKworICAg
IC8vIFNoaWZ0IG9wZXJhdG9ycy4KKyAgICBFWFBFQ1RfRVEoYmlnLCBiaWcgPDwgMCk7CisgICAg
RVhQRUNUX0VRKGJpZywgYmlnID4+IDApOworICAgIEVYUEVDVF9HVChiaWcgPDwgMSwgYmlnKTsK
KyAgICBFWFBFQ1RfTFQoYmlnID4+IDEsIGJpZyk7CisgICAgRVhQRUNUX0VRKGJpZywgKGJpZyA8
PCAxMCkgPj4gMTApOworICAgIEVYUEVDVF9FUShiaWcsIChiaWcgPj4gMSkgPDwgMSk7CisgICAg
RVhQRUNUX0VRKG9uZSwgKG9uZSA8PCA4MCkgPj4gODApOworICAgIEVYUEVDVF9FUSh6ZXJvLCAo
b25lID4+IDgwKSA8PCA4MCk7CisKKyAgICAvLyBTaGlmdCBhc3NpZ25tZW50cy4KKyAgICBXVEY6
OlVJbnQxMjhJbXBsIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPDwgMCwgYmln
X2NvcHkgPDw9IDApOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4g
MCwgYmlnX2NvcHkgPj49IDApOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShi
aWcgPDwgMSwgYmlnX2NvcHkgPDw9IDEpOworICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVD
VF9FUShiaWcgPj4gMSwgYmlnX2NvcHkgPj49IDEpOworICAgIGJpZ19jb3B5ID0gYmlnOworICAg
IEVYUEVDVF9FUShiaWcgPDwgMTAsIGJpZ19jb3B5IDw8PSAxMCk7CisgICAgYmlnX2NvcHkgPSBi
aWc7CisgICAgRVhQRUNUX0VRKGJpZyA+PiAxMCwgYmlnX2NvcHkgPj49IDEwKTsKKyAgICBiaWdf
Y29weSA9IGJpZzsKKyAgICBFWFBFQ1RfRVEoYmlnIDw8IDY0LCBiaWdfY29weSA8PD0gNjQpOwor
ICAgIGJpZ19jb3B5ID0gYmlnOworICAgIEVYUEVDVF9FUShiaWcgPj4gNjQsIGJpZ19jb3B5ID4+
PSA2NCk7CisgICAgYmlnX2NvcHkgPSBiaWc7CisgICAgRVhQRUNUX0VRKGJpZyA8PCA3MywgYmln
X2NvcHkgPDw9IDczKTsKKyAgICBiaWdfY29weSA9IGJpZzsKKyAgICBFWFBFQ1RfRVEoYmlnID4+
IDczLCBiaWdfY29weSA+Pj0gNzMpOworCisgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOEhpZ2g2
NChiaWdnZXN0KSwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKTsKKyAgICBF
WFBFQ1RfRVEoV1RGOjpVSW50MTI4TG93NjQoYmlnZ2VzdCksIHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDY0X3Q+OjptYXgoKSk7CisgICAgRVhQRUNUX0VRKHplcm8gKyBvbmUsIG9uZSk7CisgICAg
RVhQRUNUX0VRKG9uZSArIG9uZSwgdHdvKTsKKyAgICBFWFBFQ1RfRVEoYmlnX21pbnVzX29uZSAr
IG9uZSwgYmlnKTsKKyAgICBFWFBFQ1RfRVEob25lIC0gb25lLCB6ZXJvKTsKKyAgICBFWFBFQ1Rf
RVEob25lIC0gemVybywgb25lKTsKKyAgICBFWFBFQ1RfRVEoemVybyAtIG9uZSwgYmlnZ2VzdCk7
CisgICAgRVhQRUNUX0VRKGJpZyAtIGJpZywgemVybyk7CisgICAgRVhQRUNUX0VRKGJpZyAtIG9u
ZSwgYmlnX21pbnVzX29uZSk7CisgICAgRVhQRUNUX0VRKGJpZyArIHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDY0X3Q+OjptYXgoKSwgYmlnZ2VyKTsKKyAgICBFWFBFQ1RfRVEoYmlnZ2VzdCArIDEs
IHplcm8pOworICAgIEVYUEVDVF9FUSh6ZXJvIC0gMSwgYmlnZ2VzdCk7CisgICAgRVhQRUNUX0VR
KGhpZ2hfbG93IC0gb25lLCBsb3dfaGlnaCk7CisgICAgRVhQRUNUX0VRKGxvd19oaWdoICsgb25l
LCBoaWdoX2xvdyk7CisgICAgRVhQRUNUX0VRKFdURjo6VUludDEyOEhpZ2g2NCgoV1RGOjpVSW50
MTI4SW1wbCgxKSA8PCA2NCkgLSAxKSwgMFUpOworICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhM
b3c2NCgoV1RGOjpVSW50MTI4SW1wbCgxKSA8PCA2NCkgLSAxKSwKKyAgICAgICAgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKTsKKyAgICBFWFBFQ1RfVFJVRSghIW9uZSk7Cisg
ICAgRVhQRUNUX1RSVUUoISFoaWdoX2xvdyk7CisgICAgRVhQRUNUX0ZBTFNFKCEhemVybyk7Cisg
ICAgRVhQRUNUX0ZBTFNFKCFvbmUpOworICAgIEVYUEVDVF9GQUxTRSghaGlnaF9sb3cpOworICAg
IEVYUEVDVF9UUlVFKCF6ZXJvKTsKKyAgICBFWFBFQ1RfVFJVRSh6ZXJvID09IDApOyAvLyBOT0xJ
TlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgRVhQRUNUX0ZBTFNFKHplcm8gIT0gMCk7IC8vIE5P
TElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICBFWFBFQ1RfRkFMU0Uob25lID09IDApOyAvLyBO
T0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgRVhQRUNUX1RSVUUob25lICE9IDApOyAvLyBO
T0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgRVhQRUNUX0ZBTFNFKGhpZ2hfbG93ID09IDAp
OyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgRVhQRUNUX1RSVUUoaGlnaF9sb3cg
IT0gMCk7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKworICAgIFdURjo6VUludDEyOElt
cGwgdGVzdCA9IHplcm87CisgICAgRVhQRUNUX0VRKCsrdGVzdCwgb25lKTsKKyAgICBFWFBFQ1Rf
RVEodGVzdCwgb25lKTsKKyAgICBFWFBFQ1RfRVEodGVzdCsrLCBvbmUpOworICAgIEVYUEVDVF9F
USh0ZXN0LCB0d28pOworICAgIEVYUEVDVF9FUSh0ZXN0IC09IDIsIHplcm8pOworICAgIEVYUEVD
VF9FUSh0ZXN0LCB6ZXJvKTsKKyAgICBFWFBFQ1RfRVEodGVzdCArPSAyLCB0d28pOworICAgIEVY
UEVDVF9FUSh0ZXN0LCB0d28pOworICAgIEVYUEVDVF9FUSgtLXRlc3QsIG9uZSk7CisgICAgRVhQ
RUNUX0VRKHRlc3QsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QtLSwgb25lKTsKKyAgICBFWFBF
Q1RfRVEodGVzdCwgemVybyk7CisgICAgRVhQRUNUX0VRKHRlc3QgfD0gdGhyZWUsIHRocmVlKTsK
KyAgICBFWFBFQ1RfRVEodGVzdCAmPSBvbmUsIG9uZSk7CisgICAgRVhQRUNUX0VRKHRlc3QgXj0g
dGhyZWUsIHR3byk7CisgICAgRVhQRUNUX0VRKHRlc3QgPj49IDEsIG9uZSk7CisgICAgRVhQRUNU
X0VRKHRlc3QgPDw9IDEsIHR3byk7CisKKyAgICBFWFBFQ1RfRVEoYmlnLCArYmlnKTsKKyAgICBF
WFBFQ1RfRVEodHdvLCArdHdvKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50MTI4TWF4KCksICtX
VEY6OlVJbnQxMjhNYXgoKSk7CisgICAgRVhQRUNUX0VRKHplcm8sICt6ZXJvKTsKKworICAgIEVY
UEVDVF9FUShiaWcsIC0oLWJpZykpOworICAgIEVYUEVDVF9FUSh0d28sIC0oKC1vbmUpIC0gMSkp
OworICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhNYXgoKSwgLW9uZSk7CisgICAgRVhQRUNUX0VR
KHplcm8sIC16ZXJvKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBSaWdodFNoaWZ0T2ZOZWdhdGl2
ZU51bWJlcnMpCit7CisgICAgV1RGOjpJbnQxMjhJbXBsIG1pbnVzX3NpeCA9IC02OworICAgIFdU
Rjo6SW50MTI4SW1wbCBtaW51c190aHJlZSA9IC0zOworICAgIFdURjo6SW50MTI4SW1wbCBtaW51
c190d28gPSAtMjsKKyAgICBXVEY6OkludDEyOEltcGwgbWludXNfb25lID0gLTE7CisgICAgaWYg
KCgtNiA+PiAxKSA9PSAtMykgeworICAgICAgICAvLyBSaWdodCBzaGlmdCBpcyBhcml0aG1ldGlj
IChzaWduIHByb3BhZ2F0ZXMpCisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gMSwgbWlu
dXNfdGhyZWUpOworICAgICAgICBFWFBFQ1RfRVEobWludXNfc2l4ID4+IDIsIG1pbnVzX3R3byk7
CisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gNjUsIG1pbnVzX29uZSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gUmlnaHQgc2hpZnQgaXMgbG9naWNhbCAoemVyb3Mgc2hpZnRlZCBp
biBhdCBNU0IpCisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gMSwgV1RGOjpJbnQxMjhJ
bXBsKFdURjo6VUludDEyOEltcGwobWludXNfc2l4KSA+PiAxKSk7CisgICAgICAgIEVYUEVDVF9F
UShtaW51c19zaXggPj4gMiwgV1RGOjpJbnQxMjhJbXBsKFdURjo6VUludDEyOEltcGwobWludXNf
c2l4KSA+PiAyKSk7CisgICAgICAgIEVYUEVDVF9FUShtaW51c19zaXggPj4gNjUsIFdURjo6SW50
MTI4SW1wbChXVEY6OlVJbnQxMjhJbXBsKG1pbnVzX3NpeCkgPj4gNjUpKTsKKyAgICB9Cit9CisK
K1RFU1QoV1RGX1VJbnQxMjgsIENvbnZlcnNpb25UZXN0cykKK3sKKyAgICBFWFBFQ1RfVFJVRShX
VEY6Ok1ha2VVSW50MTI4KDEsIDApKTsKKworICAgIC8vIHZlcmlmeSB0aGF0IGFuIGludGVnZXIg
Z3JlYXRlciB0aGFuIDIqKjY0IHRoYXQgY2FuIGJlIHN0b3JlZCBwcmVjaXNlbHkKKyAgICAvLyBp
bnNpZGUgYSBkb3VibGUgaXMgY29udmVydGVkIHRvIGEgV1RGOjpVSW50MTI4SW1wbCB3aXRob3V0
IGxvc3Mgb2YKKyAgICAvLyBpbmZvcm1hdGlvbi4KKyAgICBkb3VibGUgcHJlY2lzZV9kb3VibGUg
PSAweDUzMGUgKiBzdGQ6OnBvdygyLjAsIDY0LjApICsgMHhkYTc0MDAwMDAwMDAwMDAwOworICAg
IFdURjo6VUludDEyOEltcGwgZnJvbV9wcmVjaXNlX2RvdWJsZShwcmVjaXNlX2RvdWJsZSk7Cisg
ICAgV1RGOjpVSW50MTI4SW1wbCBmcm9tX3ByZWNpc2VfaW50cyA9IFdURjo6TWFrZVVJbnQxMjgo
MHg1MzBlLCAweGRhNzQwMDAwMDAwMDAwMDApOworICAgIEVYUEVDVF9FUShmcm9tX3ByZWNpc2Vf
ZG91YmxlLCBmcm9tX3ByZWNpc2VfaW50cyk7CisgICAgRVhQRUNUX0RPVUJMRV9FUShzdGF0aWNf
Y2FzdDxkb3VibGU+KGZyb21fcHJlY2lzZV9pbnRzKSwgcHJlY2lzZV9kb3VibGUpOworCisgICAg
ZG91YmxlIGFwcHJveF9kb3VibGUgPSAweGZmZmZlZWVlZGRkZGNjY2MgKiBzdGQ6OnBvdygyLjAs
IDY0LjApICsgMHhiYmJiYWFhYTk5OTk4ODg4OworICAgIFdURjo6VUludDEyOEltcGwgZnJvbV9h
cHByb3hfZG91YmxlKGFwcHJveF9kb3VibGUpOworICAgIEVYUEVDVF9ET1VCTEVfRVEoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihmcm9tX2FwcHJveF9kb3VibGUpLCBhcHByb3hfZG91YmxlKTsKKworICAg
IGRvdWJsZSByb3VuZF90b196ZXJvID0gMC43OworICAgIGRvdWJsZSByb3VuZF90b19maXZlID0g
NS44OworICAgIGRvdWJsZSByb3VuZF90b19uaW5lID0gOS4zOworICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxXVEY6OlVJbnQxMjhJbXBsPihyb3VuZF90b196ZXJvKSwgMCk7CisgICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PFdURjo6VUludDEyOEltcGw+KHJvdW5kX3RvX2ZpdmUpLCA1KTsKKyAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4ocm91bmRfdG9fbmluZSks
IDkpOworCisgICAgV1RGOjpVSW50MTI4SW1wbCBoaWdoZXN0X3ByZWNpc2lvbl9pbl9sb25nX2Rv
dWJsZSA9IH5XVEY6OlVJbnQxMjhJbXBsIHt9ID4+ICgxMjggLSBzdGQ6Om51bWVyaWNfbGltaXRz
PGxvbmcgZG91YmxlPjo6ZGlnaXRzKTsKKyAgICBFWFBFQ1RfRVEoaGlnaGVzdF9wcmVjaXNpb25f
aW5fbG9uZ19kb3VibGUsCisgICAgICAgIHN0YXRpY19jYXN0PFdURjo6VUludDEyOEltcGw+KAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KGhpZ2hlc3RfcHJlY2lzaW9uX2lu
X2xvbmdfZG91YmxlKSkpOworICAgIC8vIEFwcGx5IGEgbWFzayBqdXN0IHRvIG1ha2Ugc3VyZSBh
bGwgdGhlIGJpdHMgYXJlIHRoZSByaWdodCBwbGFjZS4KKyAgICBjb25zdCBXVEY6OlVJbnQxMjhJ
bXBsIGFyYml0cmFyeV9tYXNrID0gV1RGOjpNYWtlVUludDEyOCgweGEyOWY2MjI2NzdkZWQ3NTEs
IDB4ZjhjYTY2YWRkMDc2ZjQ2OCk7CisgICAgRVhQRUNUX0VRKGhpZ2hlc3RfcHJlY2lzaW9uX2lu
X2xvbmdfZG91YmxlICYgYXJiaXRyYXJ5X21hc2ssCisgICAgICAgIHN0YXRpY19jYXN0PFdURjo6
VUludDEyOEltcGw+KHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigKKyAgICAgICAgICAgIGhpZ2hl
c3RfcHJlY2lzaW9uX2luX2xvbmdfZG91YmxlICYgYXJiaXRyYXJ5X21hc2spKSk7CisKKyAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8V1RGOjpVSW50MTI4SW1wbD4oLTAuMUwpLCAwKTsKK30KKwor
VEVTVChXVEZfVUludDEyOCwgT3BlcmF0b3JBc3NpZ25SZXR1cm5SZWYpCit7CisgICAgV1RGOjpV
SW50MTI4SW1wbCB2KDEpOworICAgICh2ICs9IDQpIC09IDM7CisgICAgRVhQRUNUX0VRKDIsIHYp
OworfQorCitURVNUKFdURl9VSW50MTI4LCBNdWx0aXBseSkKK3sKKyAgICBXVEY6OlVJbnQxMjhJ
bXBsIGEsIGIsIGM7CisKKyAgICAvLyBaZXJvIHRlc3QuCisgICAgYSA9IDA7CisgICAgYiA9IDA7
CisgICAgYyA9IGEgKiBiOworICAgIEVYUEVDVF9FUSgwLCBjKTsKKworICAgIC8vIE1heCBjYXJy
aWVzLgorICAgIGEgPSBXVEY6OlVJbnQxMjhJbXBsKDApIC0gMTsKKyAgICBiID0gV1RGOjpVSW50
MTI4SW1wbCgwKSAtIDE7CisgICAgYyA9IGEgKiBiOworICAgIEVYUEVDVF9FUSgxLCBjKTsKKwor
ICAgIC8vIFNlbGYtb3BlcmF0aW9uIHdpdGggbWF4IGNhcnJpZXMuCisgICAgYyA9IFdURjo6VUlu
dDEyOEltcGwoMCkgLSAxOworICAgIGMgKj0gYzsKKyAgICBFWFBFQ1RfRVEoMSwgYyk7CisKKyAg
ICAvLyAxLWJpdCB4IDEtYml0LgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7ICsraSkgewor
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDY0OyArK2opIHsKKyAgICAgICAgICAgIGEgPSBX
VEY6OlVJbnQxMjhJbXBsKDEpIDw8IGk7CisgICAgICAgICAgICBiID0gV1RGOjpVSW50MTI4SW1w
bCgxKSA8PCBqOworICAgICAgICAgICAgYyA9IGEgKiBiOworICAgICAgICAgICAgRVhQRUNUX0VR
KFdURjo6VUludDEyOEltcGwoMSkgPDwgKGkgKyBqKSwgYyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBWZXJpZmllZCB3aXRoIGRjLgorICAgIGEgPSBXVEY6Ok1ha2VVSW50MTI4KDB4ZmZm
ZmVlZWVkZGRkY2NjYywgMHhiYmJiYWFhYTk5OTk4ODg4KTsKKyAgICBiID0gV1RGOjpNYWtlVUlu
dDEyOCgweDc3Nzc2NjY2NTU1NTQ0NDQsIDB4MzMzMzIyMjIxMTExMDAwMCk7CisgICAgYyA9IGEg
KiBiOworICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VVSW50MTI4KDB4NTMwRURBNzQxQzcxRDRDMywg
MHhCRjI1OTc1MzE5MDgwMDAwKSwgYyk7CisgICAgRVhQRUNUX0VRKDAsIGMgLSBiICogYSk7Cisg
ICAgRVhQRUNUX0VRKGEgKiBhIC0gYiAqIGIsIChhICsgYikgKiAoYSAtIGIpKTsKKworICAgIC8v
IFZlcmlmaWVkIHdpdGggZGMuCisgICAgYSA9IFdURjo6TWFrZVVJbnQxMjgoMHgwMTIzNDU2Nzg5
YWJjZGVmLCAweGZlZGNiYTk4NzY1NDMyMTApOworICAgIGIgPSBXVEY6Ok1ha2VVSW50MTI4KDB4
MDI0NjhhY2UxMzU3OWJkZiwgMHhmZGI5NzUzMWVjYTg2NDIwKTsKKyAgICBjID0gYSAqIGI7Cisg
ICAgRVhQRUNUX0VRKFdURjo6TWFrZVVJbnQxMjgoMHg5N2E4N2Y0ZjI2MWJhM2YyLCAweDM0MmQw
YmJmNDg5NDgyMDApLCBjKTsKKyAgICBFWFBFQ1RfRVEoMCwgYyAtIGIgKiBhKTsKKyAgICBFWFBF
Q1RfRVEoYSAqIGEgLSBiICogYiwgKGEgKyBiKSAqIChhIC0gYikpOworfQorCitURVNUKFdURl9V
SW50MTI4LCBBbGlhc1Rlc3RzKQoreworICAgIFdURjo6VUludDEyOEltcGwgeDEgPSBXVEY6Ok1h
a2VVSW50MTI4KDEsIDIpOworICAgIFdURjo6VUludDEyOEltcGwgeDIgPSBXVEY6Ok1ha2VVSW50
MTI4KDIsIDQpOworICAgIHgxICs9IHgxOworICAgIEVYUEVDVF9FUSh4MiwgeDEpOworCisgICAg
V1RGOjpVSW50MTI4SW1wbCB4MyA9IFdURjo6TWFrZVVJbnQxMjgoMSwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KDEpIDw8IDYzKTsKKyAgICBXVEY6OlVJbnQxMjhJbXBsIHg0ID0gV1RGOjpNYWtlVUlu
dDEyOCgzLCAwKTsKKyAgICB4MyArPSB4MzsKKyAgICBFWFBFQ1RfRVEoeDQsIHgzKTsKK30KKwor
VEVTVChXVEZfVUludDEyOCwgRGl2aWRlQW5kTW9kKQoreworICAgIHVzaW5nIHN0ZDo6c3dhcDsK
KworICAgIC8vIGEgOj0gcSAqIGIgKyByCisgICAgV1RGOjpVSW50MTI4SW1wbCBhLCBiLCBxLCBy
OworCisgICAgLy8gWmVybyB0ZXN0LgorICAgIGEgPSAwOworICAgIGIgPSAxMjM7CisgICAgcSA9
IGEgLyBiOworICAgIHIgPSBhICUgYjsKKyAgICBFWFBFQ1RfRVEoMCwgcSk7CisgICAgRVhQRUNU
X0VRKDAsIHIpOworCisgICAgYSA9IFdURjo6TWFrZVVJbnQxMjgoMHg1MzBlZGE3NDFjNzFkNGMz
LCAweGJmMjU5NzUzMTkwODAwMDApOworICAgIHEgPSBXVEY6Ok1ha2VVSW50MTI4KDB4NGRlMmNh
YjA4MSwgMHgxNGMzNGFiNDY3NmU0YmFiKTsKKyAgICBiID0gV1RGOjpVSW50MTI4SW1wbCgweDEx
MTAwMDEpOworICAgIHIgPSBXVEY6OlVJbnQxMjhJbXBsKDB4M2ViNDU1KTsKKyAgICBBU1NFUlRf
RVEoYSwgcSAqIGIgKyByKTsgLy8gU2FuaXR5LWNoZWNrLgorCisgICAgV1RGOjpVSW50MTI4SW1w
bCByZXN1bHRfcSwgcmVzdWx0X3I7CisgICAgcmVzdWx0X3EgPSBhIC8gYjsKKyAgICByZXN1bHRf
ciA9IGEgJSBiOworICAgIEVYUEVDVF9FUShxLCByZXN1bHRfcSk7CisgICAgRVhQRUNUX0VRKHIs
IHJlc3VsdF9yKTsKKworICAgIC8vIFRyeSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgICBzd2Fw
KHEsIGIpOworICAgIHJlc3VsdF9xID0gYSAvIGI7CisgICAgcmVzdWx0X3IgPSBhICUgYjsKKyAg
ICBFWFBFQ1RfRVEocSwgcmVzdWx0X3EpOworICAgIEVYUEVDVF9FUShyLCByZXN1bHRfcik7Cisg
ICAgLy8gUmVzdG9yZS4KKyAgICBzd2FwKGIsIHEpOworCisgICAgLy8gRGl2aWRlbmQgPCBkaXZp
c29yOyByZXN1bHQgc2hvdWxkIGJlIHE6MCByOjxkaXZpZGVuZD4uCisgICAgc3dhcChhLCBiKTsK
KyAgICByZXN1bHRfcSA9IGEgLyBiOworICAgIHJlc3VsdF9yID0gYSAlIGI7CisgICAgRVhQRUNU
X0VRKDAsIHJlc3VsdF9xKTsKKyAgICBFWFBFQ1RfRVEoYSwgcmVzdWx0X3IpOworICAgIC8vIFRy
eSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgICBzd2FwKGEsIHEpOworICAgIHJlc3VsdF9xID0g
YSAvIGI7CisgICAgcmVzdWx0X3IgPSBhICUgYjsKKyAgICBFWFBFQ1RfRVEoMCwgcmVzdWx0X3Ep
OworICAgIEVYUEVDVF9FUShhLCByZXN1bHRfcik7CisgICAgLy8gUmVzdG9yZS4KKyAgICBzd2Fw
KHEsIGEpOworICAgIHN3YXAoYiwgYSk7CisKKyAgICAvLyBUcnkgYSBsYXJnZSByZW1haW5kZXIu
CisgICAgYiA9IGEgLyAyICsgMTsKKyAgICBXVEY6OlVJbnQxMjhJbXBsIGV4cGVjdGVkX3IgPSBX
VEY6Ok1ha2VVSW50MTI4KDB4Mjk4NzZkM2EwZTM4ZWE2MSwgMHhkZjkyY2JhOThjODNmZmZmKTsK
KyAgICAvLyBTYW5pdHkgY2hlY2tzLgorICAgIEFTU0VSVF9FUShhIC8gMiAtIDEsIGV4cGVjdGVk
X3IpOworICAgIEFTU0VSVF9FUShhLCBiICsgZXhwZWN0ZWRfcik7CisgICAgcmVzdWx0X3EgPSBh
IC8gYjsKKyAgICByZXN1bHRfciA9IGEgJSBiOworICAgIEVYUEVDVF9FUSgxLCByZXN1bHRfcSk7
CisgICAgRVhQRUNUX0VRKGV4cGVjdGVkX3IsIHJlc3VsdF9yKTsKK30KKworVEVTVChXVEZfVUlu
dDEyOCwgRGl2aWRlQW5kTW9kUmFuZG9tSW5wdXRzKQoreworICAgIGNvbnN0IGludCBrTnVtSXRl
cnMgPSAxIDw8IDE4OworICAgIHN0ZDo6bWluc3RkX3JhbmQgcmFuZG9tKHRlc3Rpbmc6OlVuaXRU
ZXN0OjpHZXRJbnN0YW5jZSgpLT5yYW5kb21fc2VlZCgpKTsKKyAgICBzdGQ6OnVuaWZvcm1faW50
X2Rpc3RyaWJ1dGlvbjx1aW50NjRfdD4gdW5pZm9ybV91aW50NjQ7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBrTnVtSXRlcnM7ICsraSkgeworICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBs
IGEgPSBXVEY6Ok1ha2VVSW50MTI4KHVuaWZvcm1fdWludDY0KHJhbmRvbSksIHVuaWZvcm1fdWlu
dDY0KHJhbmRvbSkpOworICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBsIGIgPSBXVEY6Ok1h
a2VVSW50MTI4KHVuaWZvcm1fdWludDY0KHJhbmRvbSksIHVuaWZvcm1fdWludDY0KHJhbmRvbSkp
OworICAgICAgICBpZiAoYiA9PSAwKSB7CisgICAgICAgICAgICBjb250aW51ZTsgLy8gQXZvaWQg
YSBkaXYtYnktemVyby4KKyAgICAgICAgfQorICAgICAgICBjb25zdCBXVEY6OlVJbnQxMjhJbXBs
IHEgPSBhIC8gYjsKKyAgICAgICAgY29uc3QgV1RGOjpVSW50MTI4SW1wbCByID0gYSAlIGI7Cisg
ICAgICAgIEFTU0VSVF9FUShhLCBiICogcSArIHIpOworICAgIH0KK30KKworVEVTVChXVEZfVUlu
dDEyOCwgQ29uc3RleHByVGVzdCkKK3sKKyAgICBjb25zdGV4cHIgV1RGOjpVSW50MTI4SW1wbCB6
ZXJvID0gV1RGOjpVSW50MTI4SW1wbCgpOworICAgIGNvbnN0ZXhwciBXVEY6OlVJbnQxMjhJbXBs
IG9uZSA9IDE7CisgICAgY29uc3RleHByIFdURjo6VUludDEyOEltcGwgbWludXNfdHdvID0gLTI7
CisgICAgRVhQRUNUX0VRKHplcm8sIFdURjo6VUludDEyOEltcGwoMCkpOworICAgIEVYUEVDVF9F
UShvbmUsIFdURjo6VUludDEyOEltcGwoMSkpOworICAgIEVYUEVDVF9FUShtaW51c190d28sIFdU
Rjo6TWFrZVVJbnQxMjgoLTEsIC0yKSk7Cit9CisKK1RFU1QoV1RGX1VJbnQxMjgsIE51bWVyaWNM
aW1pdHNUZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxXVEY6
OlVJbnQxMjhJbXBsPjo6aXNfc3BlY2lhbGl6ZWQsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFz
dGQ6Om51bWVyaWNfbGltaXRzPFdURjo6VUludDEyOEltcGw+Ojppc19zaWduZWQsICIiKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Omlz
X2ludGVnZXIsICIiKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PigxMjggKiBzdGQ6
OmxvZzEwKDIpKSwKKyAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxXVEY6OlVJbnQxMjhJbXBs
Pjo6ZGlnaXRzMTApOworICAgIEVYUEVDVF9FUSgwLCBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6
VUludDEyOEltcGw+OjptaW4oKSk7CisgICAgRVhQRUNUX0VRKDAsIHN0ZDo6bnVtZXJpY19saW1p
dHM8V1RGOjpVSW50MTI4SW1wbD46Omxvd2VzdCgpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpVSW50
MTI4TWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpVSW50MTI4SW1wbD46Om1heCgpKTsK
K30KKworVEVTVChXVEZfSW50MTI4VUludDEyOCwgQ29udmVyc2lvblRlc3QpCit7CisgICAgV1RG
OjpJbnQxMjhJbXBsIG5vbm5lZ2F0aXZlX3NpZ25lZF92YWx1ZXNbXSA9IHsKKyAgICAgICAgMCwK
KyAgICAgICAgMSwKKyAgICAgICAgMHhmZmVlZGRjY2JiYWE5OTg4LAorICAgICAgICBXVEY6Ok1h
a2VJbnQxMjgoMHg3NzY2NTU0NDMzMjIxMTAwLCAwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4
KDB4MTIzNDU2Nzg5MGFiY2RlZiwgMHhmZWRjYmEwOTg3NjU0MzIxKSwKKyAgICAgICAgV1RGOjpJ
bnQxMjhNYXgoKQorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiBub25u
ZWdhdGl2ZV9zaWduZWRfdmFsdWVzKSB7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgV1RGOjpJ
bnQxMjhJbXBsKFdURjo6VUludDEyOEltcGwodmFsdWUpKSk7CisKKyAgICAgICAgV1RGOjpVSW50
MTI4SW1wbCBhc3NpZ25lZF92YWx1ZTsKKyAgICAgICAgYXNzaWduZWRfdmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwoYXNzaWduZWRfdmFsdWUp
KTsKKyAgICB9CisKKyAgICBXVEY6OkludDEyOEltcGwgbmVnYXRpdmVfdmFsdWVzW10gPSB7Cisg
ICAgICAgIC0xLCAtMHgxMjM0NTY3ODkwYWJjZGVmLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgo
LTB4NTU0NDMzMjIxMWZmZWVkZCwgMCksCisgICAgICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHg3NjU0
MzIxMGZlZGNiYTk4LCAweGFiY2RlZjAxMjM0NTY3ODkpCisgICAgfTsKKyAgICBmb3IgKFdURjo6
SW50MTI4SW1wbCB2YWx1ZSA6IG5lZ2F0aXZlX3ZhbHVlcykgeworICAgICAgICBFWFBFQ1RfRVEo
V1RGOjpVSW50MTI4SW1wbCgtdmFsdWUpLCAtV1RGOjpVSW50MTI4SW1wbCh2YWx1ZSkpOworCisg
ICAgICAgIFdURjo6VUludDEyOEltcGwgYXNzaWduZWRfdmFsdWU7CisgICAgICAgIGFzc2lnbmVk
X3ZhbHVlID0gdmFsdWU7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OlVJbnQxMjhJbXBsKC12YWx1
ZSksIC1hc3NpZ25lZF92YWx1ZSk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFdURl9JbnQxMjhJbnRlZ2VyVHJhaXRzVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRl
c3QgeworfTsKKworVFlQRURfVEVTVF9TVUlURShXVEZfSW50MTI4SW50ZWdlclRyYWl0c1Rlc3Qs
IEludGVnZXJUeXBlcyk7CisKK1RZUEVEX1RFU1QoV1RGX0ludDEyOEludGVnZXJUcmFpdHNUZXN0
LCBDb25zdHJ1Y3RBc3NpZ25UZXN0KQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19jb25z
dHJ1Y3RpYmxlPFdURjo6SW50MTI4SW1wbCwgVHlwZVBhcmFtPjo6dmFsdWUsCisgICAgICAgICJX
VEY6OkludDEyOEltcGwgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gVHlwZVBhcmFtIik7Cisg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Fzc2lnbmFibGU8V1RGOjpJbnQxMjhJbXBsJiwgVHlw
ZVBhcmFtPjo6dmFsdWUsCisgICAgICAgICJXVEY6OkludDEyOEltcGwgbXVzdCBiZSBhc3NpZ25h
YmxlIGZyb20gVHlwZVBhcmFtIik7CisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19hc3NpZ25h
YmxlPFR5cGVQYXJhbSYsIFdURjo6SW50MTI4SW1wbD46OnZhbHVlLAorICAgICAgICAiVHlwZVBh
cmFtIG11c3Qgbm90IGJlIGFzc2lnbmFibGUgZnJvbSBXVEY6OkludDEyOEltcGwiKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBXVEZfSW50MTI4RmxvYXRUcmFpdHNUZXN0IDog
cHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9OworCitUWVBFRF9URVNUX1NVSVRFKFdURl9JbnQx
MjhGbG9hdFRyYWl0c1Rlc3QsIEZsb2F0aW5nUG9pbnRUeXBlcyk7CisKK1RZUEVEX1RFU1QoV1RG
X0ludDEyOEZsb2F0VHJhaXRzVGVzdCwgQ29uc3RydWN0QXNzaWduVGVzdCkKK3sKKyAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxXVEY6OkludDEyOEltcGwsIFR5cGVQYXJh
bT46OnZhbHVlLAorICAgICAgICAiV1RGOjpJbnQxMjhJbXBsIG11c3QgYmUgY29uc3RydWN0aWJs
ZSBmcm9tIFR5cGVQYXJhbSIpOworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYXNzaWduYWJs
ZTxXVEY6OkludDEyOEltcGwmLCBUeXBlUGFyYW0+Ojp2YWx1ZSwKKyAgICAgICAgIldURjo6SW50
MTI4SW1wbCBtdXN0IG5vdCBiZSBhc3NpZ25hYmxlIGZyb20gVHlwZVBhcmFtIik7CisgICAgc3Rh
dGljX2Fzc2VydCghc3RkOjppc19hc3NpZ25hYmxlPFR5cGVQYXJhbSYsIFdURjo6SW50MTI4SW1w
bD46OnZhbHVlLAorICAgICAgICAiVHlwZVBhcmFtIG11c3Qgbm90IGJlIGFzc2lnbmFibGUgZnJv
bSBXVEY6OkludDEyOEltcGwiKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBUcml2aWFsVHJhaXRz
VGVzdCkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2RlZmF1bHRfY29u
c3RydWN0aWJsZTxXVEY6OkludDEyOEltcGw+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlPFdURjo6SW50MTI4SW1wbD46
OnZhbHVlLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2Fz
c2lnbmFibGU8V1RGOjpJbnQxMjhJbXBsPjo6dmFsdWUsICIiKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxXVEY6OkludDEyOEltcGw+Ojp2YWx1ZSwg
IiIpOworfQorCitURVNUKFdURl9JbnQxMjgsIEJvb2xDb252ZXJzaW9uVGVzdCkKK3sKKyAgICBF
WFBFQ1RfRkFMU0UoV1RGOjpJbnQxMjhJbXBsKDApKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDY0OyArK2kpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjpNYWtlSW50MTI4KDAsIHVpbnQ2
NF90IHsgMSB9IDw8IGkpKTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2MzsgKytp
KSB7CisgICAgICAgIEVYUEVDVF9UUlVFKFdURjo6TWFrZUludDEyOChpbnQ2NF90IHsgMSB9IDw8
IGksIDApKTsKKyAgICB9CisgICAgRVhQRUNUX1RSVUUoV1RGOjpJbnQxMjhNaW4oKSk7CisKKyAg
ICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKDEpLCBXVEY6OkludDEyOEltcGwodHJ1ZSkpOwor
ICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoMCksIFdURjo6SW50MTI4SW1wbChmYWxzZSkp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFdURl9JbnQxMjhJbnRlZ2VyQ29u
dmVyc2lvblRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK307CisKK1RZUEVEX1RFU1Rf
U1VJVEUoV1RGX0ludDEyOEludGVnZXJDb252ZXJzaW9uVGVzdCwgSW50ZWdlclR5cGVzKTsKKwor
VFlQRURfVEVTVChXVEZfSW50MTI4SW50ZWdlckNvbnZlcnNpb25UZXN0LCBSb3VuZFRyaXBUZXN0
KQoreworICAgIEVYUEVDVF9FUShUeXBlUGFyYW0geyAwIH0sIHN0YXRpY19jYXN0PFR5cGVQYXJh
bT4oV1RGOjpJbnQxMjhJbXBsKDApKSk7CisgICAgRVhQRUNUX0VRKHN0ZDo6bnVtZXJpY19saW1p
dHM8VHlwZVBhcmFtPjo6bWluKCksCisgICAgICAgIHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oCisg
ICAgICAgICAgICBXVEY6OkludDEyOEltcGwoc3RkOjpudW1lcmljX2xpbWl0czxUeXBlUGFyYW0+
OjptaW4oKSkpKTsKKyAgICBFWFBFQ1RfRVEoc3RkOjpudW1lcmljX2xpbWl0czxUeXBlUGFyYW0+
OjptYXgoKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigKKyAgICAgICAgICAgIFdU
Rjo6SW50MTI4SW1wbChzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGVQYXJhbT46Om1heCgpKSkpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFdURl9JbnQxMjhGbG9hdENvbnZlcnNp
b25UZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Cit9OworCitUWVBFRF9URVNUX1NVSVRF
KFdURl9JbnQxMjhGbG9hdENvbnZlcnNpb25UZXN0LCBGbG9hdGluZ1BvaW50VHlwZXMpOworCitU
WVBFRF9URVNUKFdURl9JbnQxMjhGbG9hdENvbnZlcnNpb25UZXN0LCBDb25zdHJ1Y3RBbmRDYXN0
VGVzdCkKK3sKKyAgICAvLyBDb252ZXJzaW9ucyB3aGVyZSB0aGUgZmxvYXRpbmcgcG9pbnQgdmFs
dWVzIHNob3VsZCBiZSBleGFjdGx5IHRoZSBzYW1lLgorICAgIC8vIDB4OWY1YiBpcyBhIHJhbmRv
bWx5IGNob3NlbiBzbWFsbCB2YWx1ZS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDExMDsgKytp
KSB7IC8vIDExMCA9IDEyNiAtICNiaXRzIGluIDB4OWY1YgorICAgICAgICBTQ09QRURfVFJBQ0Uo
Ojp0ZXN0aW5nOjpNZXNzYWdlKCkgPDwgImkgPSAiIDw8IGkpOworCisgICAgICAgIFR5cGVQYXJh
bSBmbG9hdF92YWx1ZSA9IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigweDlmNWIp
LCBpKTsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGludF92YWx1ZSA9IFdURjo6SW50MTI4SW1w
bCgweDlmNWIpIDw8IGk7CisKKyAgICAgICAgRVhQRUNUX0VRKGZsb2F0X3ZhbHVlLCBzdGF0aWNf
Y2FzdDxUeXBlUGFyYW0+KGludF92YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoLWZsb2F0X3Zh
bHVlLCBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KC1pbnRfdmFsdWUpKTsKKyAgICAgICAgRVhQRUNU
X0VRKGludF92YWx1ZSwgV1RGOjpJbnQxMjhJbXBsKGZsb2F0X3ZhbHVlKSk7CisgICAgICAgIEVY
UEVDVF9FUSgtaW50X3ZhbHVlLCBXVEY6OkludDEyOEltcGwoLWZsb2F0X3ZhbHVlKSk7CisgICAg
fQorCisgICAgLy8gUm91bmQgdHJpcCBjb252ZXJzaW9ucyB3aXRoIGEgc21hbGwgc2FtcGxlIG9m
IHJhbmRvbWx5IGdlbmVyYXRlZCB1aW50NjRfdAorICAgIC8vIHZhbHVlcyAobGVzcyB0aGFuIGlu
dDY0X3QgbWF4IHNvIHRoYXQgdmFsdWUgKiAyXjY0IGZpdHMgaW50byBpbnQxMjgpLgorICAgIHVp
bnQ2NF90IHZhbHVlc1tdID0geyAweDZkNDQ5MmMyNGZiODYxOTksIDB4MjZlYWQ2NWU0Y2IzNTli
NSwKKyAgICAgICAgMHgyYzQzNDA3NDMzYmEzZmQxLCAweDNiNTc0ZWM2NjhkZjZiNTUsCisgICAg
ICAgIDB4MWM3NTBlNTVhMjlmNGYwZiB9OworICAgIGZvciAodWludDY0X3QgdmFsdWUgOiB2YWx1
ZXMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNjQ7ICsraSkgeworICAgICAgICAg
ICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpCisgICAgICAgICAgICAgICAgPDwg
InZhbHVlID0gIiA8PCB2YWx1ZSA8PCAiOyBpID0gIiA8PCBpKTsKKworICAgICAgICAgICAgVHlw
ZVBhcmFtIGZ2YWx1ZSA9IHN0ZDo6bGRleHAoc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPih2YWx1ZSks
IGkpOworICAgICAgICAgICAgRVhQRUNUX0RPVUJMRV9FUShmdmFsdWUsIHN0YXRpY19jYXN0PFR5
cGVQYXJhbT4oV1RGOjpJbnQxMjhJbXBsKGZ2YWx1ZSkpKTsKKyAgICAgICAgICAgIEVYUEVDVF9E
T1VCTEVfRVEoLWZ2YWx1ZSwgc3RhdGljX2Nhc3Q8VHlwZVBhcmFtPigtV1RGOjpJbnQxMjhJbXBs
KGZ2YWx1ZSkpKTsKKyAgICAgICAgICAgIEVYUEVDVF9ET1VCTEVfRVEoLWZ2YWx1ZSwgc3RhdGlj
X2Nhc3Q8VHlwZVBhcmFtPihXVEY6OkludDEyOEltcGwoLWZ2YWx1ZSkpKTsKKyAgICAgICAgICAg
IEVYUEVDVF9ET1VCTEVfRVEoZnZhbHVlLCBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KC1XVEY6Oklu
dDEyOEltcGwoLWZ2YWx1ZSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJvdW5kIHRy
aXAgY29udmVyc2lvbnMgd2l0aCBhIHNtYWxsIHNhbXBsZSBvZiByYW5kb20gbGFyZ2UgcG9zaXRp
dmUgdmFsdWVzLgorICAgIFdURjo6SW50MTI4SW1wbCBsYXJnZV92YWx1ZXNbXSA9IHsKKyAgICAg
ICAgV1RGOjpNYWtlSW50MTI4KDB4NWIwNjQwZDk2YzdiM2Q5ZiwgMHhiN2E3MTg5ZTUxZDE4NjIy
KSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4MzRiZWQwNDJjNmY2NTI3MCwgMHg3M2IyMzY1
NzA2NjlhMDg5KSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4NDNkZWJhOWU2ZGExMjcyNCwg
MHhmN2YwZjgzZGE2ODY3OTdkKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4NzFlOGQzODNi
ZTRlNTU4OSwgMHg3NWMzZjk2ZmIwMDc1MmI2KQorICAgIH07CisgICAgZm9yIChXVEY6OkludDEy
OEltcGwgdmFsdWUgOiBsYXJnZV92YWx1ZXMpIHsKKyAgICAgICAgLy8gTWFrZSB2YWx1ZSBoYXZl
IGFzIG1hbnkgc2lnbmlmaWNhbnQgYml0cyBhcyBjYW4gYmUgcmVwcmVzZW50ZWQgYnkKKyAgICAg
ICAgLy8gdGhlIG1hbnRpc3NhLCBhbHNvIG1ha2luZyBzdXJlIHRoZSBoaWdoZXN0IGFuZCBsb3dl
c3QgYml0IGluIHRoZSByYW5nZQorICAgICAgICAvLyBhcmUgc2V0LgorICAgICAgICB2YWx1ZSA+
Pj0gKDEyNyAtIHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZVBhcmFtPjo6ZGlnaXRzKTsKKyAgICAg
ICAgdmFsdWUgfD0gV1RGOjpJbnQxMjhJbXBsKDEpIDw8IChzdGQ6Om51bWVyaWNfbGltaXRzPFR5
cGVQYXJhbT46OmRpZ2l0cyAtIDEpOworICAgICAgICB2YWx1ZSB8PSAxOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDEyNyAtIHN0ZDo6bnVtZXJpY19saW1pdHM8VHlwZVBhcmFtPjo6ZGln
aXRzOyArK2kpIHsKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbCBpbnRfdmFsdWUgPSB2YWx1
ZSA8PCBpOworICAgICAgICAgICAgRVhQRUNUX0VRKGludF92YWx1ZSwKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxXVEY6OkludDEyOEltcGw+KHN0YXRpY19jYXN0PFR5cGVQYXJhbT4oaW50
X3ZhbHVlKSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKC1pbnRfdmFsdWUsCisgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8V1RGOjpJbnQxMjhJbXBsPihzdGF0aWNfY2FzdDxUeXBlUGFyYW0+
KC1pbnRfdmFsdWUpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTbWFsbCBzYW1wbGUg
b2YgY2hlY2tzIHRoYXQgcm91bmRpbmcgaXMgdG93YXJkIHplcm8KKyAgICBFWFBFQ1RfRVEoMCwg
V1RGOjpJbnQxMjhJbXBsKFR5cGVQYXJhbSgwLjEpKSk7CisgICAgRVhQRUNUX0VRKDE3LCBXVEY6
OkludDEyOEltcGwoVHlwZVBhcmFtKDE3LjgpKSk7CisgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50
MTI4SW1wbChUeXBlUGFyYW0oLTAuOCkpKTsKKyAgICBFWFBFQ1RfRVEoLTUzLCBXVEY6OkludDEy
OEltcGwoVHlwZVBhcmFtKC01My4xKSkpOworICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOElt
cGwoVHlwZVBhcmFtKDAuNSkpKTsKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKFR5
cGVQYXJhbSgtMC41KSkpOworICAgIFR5cGVQYXJhbSBqdXN0X2x0X29uZSA9IHN0ZDo6bmV4dHRv
d2FyZChUeXBlUGFyYW0oMSksIFR5cGVQYXJhbSgwKSk7CisgICAgRVhQRUNUX0VRKDAsIFdURjo6
SW50MTI4SW1wbChqdXN0X2x0X29uZSkpOworICAgIFR5cGVQYXJhbSBqdXN0X2d0X21pbnVzX29u
ZSA9IHN0ZDo6bmV4dHRvd2FyZChUeXBlUGFyYW0oLTEpLCBUeXBlUGFyYW0oMCkpOworICAgIEVY
UEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwoanVzdF9ndF9taW51c19vbmUpKTsKKworICAgIC8v
IENoZWNrIGxpbWl0cworICAgIEVYUEVDVF9ET1VCTEVfRVEoc3RkOjpsZGV4cChzdGF0aWNfY2Fz
dDxUeXBlUGFyYW0+KDEpLCAxMjcpLAorICAgICAgICBzdGF0aWNfY2FzdDxUeXBlUGFyYW0+KFdU
Rjo6SW50MTI4TWF4KCkpKTsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKC1zdGQ6OmxkZXhwKHN0YXRp
Y19jYXN0PFR5cGVQYXJhbT4oMSksIDEyNyksCisgICAgICAgIHN0YXRpY19jYXN0PFR5cGVQYXJh
bT4oV1RGOjpJbnQxMjhNaW4oKSkpOworfQorCitURVNUKFdURl9JbnQxMjgsIEZhY3RvcnlUZXN0
KQoreworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoLTEpLCBXVEY6Ok1ha2VJbnQxMjgo
LTEsIC0xKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbCgtMzEpLCBXVEY6Ok1ha2VJ
bnQxMjgoLTEsIC0zMSkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoLTEs
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpKSk7CisgICAgRVhQRUNUX0VRKFdU
Rjo6SW50MTI4SW1wbCgwKSwgV1RGOjpNYWtlSW50MTI4KDAsIDApKTsKKyAgICBFWFBFQ1RfRVEo
V1RGOjpJbnQxMjhJbXBsKDEpLCBXVEY6Ok1ha2VJbnQxMjgoMCwgMSkpOworICAgIEVYUEVDVF9F
UShXVEY6OkludDEyOEltcGwoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpLAor
ICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6
bWF4KCkpKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBIaWdoTG93VGVzdCkKK3sKKyAgICBzdHJ1
Y3QgSGlnaExvd1BhaXIgeworICAgICAgICBpbnQ2NF90IGhpZ2g7CisgICAgICAgIHVpbnQ2NF90
IGxvdzsKKyAgICB9OworICAgIEhpZ2hMb3dQYWlyIHZhbHVlc1tdIHsgeyAwLCAwIH0sIHsgMCwg
MSB9LCB7IDEsIDAgfSwgeyAxMjMsIDQ1NiB9LCB7IC02NTQsIDMyMSB9IH07CisgICAgZm9yIChj
b25zdCBIaWdoTG93UGFpciYgcGFpciA6IHZhbHVlcykgeworICAgICAgICBXVEY6OkludDEyOElt
cGwgdmFsdWUgPSBXVEY6Ok1ha2VJbnQxMjgocGFpci5oaWdoLCBwYWlyLmxvdyk7CisgICAgICAg
IEVYUEVDVF9FUShwYWlyLmxvdywgV1RGOjpJbnQxMjhMb3c2NCh2YWx1ZSkpOworICAgICAgICBF
WFBFQ1RfRVEocGFpci5oaWdoLCBXVEY6OkludDEyOEhpZ2g2NCh2YWx1ZSkpOworICAgIH0KK30K
KworVEVTVChXVEZfSW50MTI4LCBMaW1pdHNUZXN0KQoreworICAgIEVYUEVDVF9FUShXVEY6Ok1h
a2VJbnQxMjgoMHg3ZmZmZmZmZmZmZmZmZmZmLCAweGZmZmZmZmZmZmZmZmZmZmYpLAorICAgICAg
ICBXVEY6OkludDEyOE1heCgpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhNYXgoKSwgfldU
Rjo6SW50MTI4TWluKCkpOworfQorCitURVNUKFdURl9JbnQxMjgsIENvbnN0ZXhwclRlc3QpCit7
CisgICAgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCB6ZXJvID0gV1RGOjpJbnQxMjhJbXBsKCk7
CisgICAgY29uc3RleHByIFdURjo6SW50MTI4SW1wbCBvbmUgPSAxOworICAgIGNvbnN0ZXhwciBX
VEY6OkludDEyOEltcGwgbWludXNfdHdvID0gLTI7CisgICAgY29uc3RleHByIFdURjo6SW50MTI4
SW1wbCBtaW4gPSBXVEY6OkludDEyOE1pbigpOworICAgIGNvbnN0ZXhwciBXVEY6OkludDEyOElt
cGwgbWF4ID0gV1RGOjpJbnQxMjhNYXgoKTsKKyAgICBFWFBFQ1RfRVEoemVybywgV1RGOjpJbnQx
MjhJbXBsKDApKTsKKyAgICBFWFBFQ1RfRVEob25lLCBXVEY6OkludDEyOEltcGwoMSkpOworICAg
IEVYUEVDVF9FUShtaW51c190d28sIFdURjo6TWFrZUludDEyOCgtMSwgLTIpKTsKKyAgICBFWFBF
Q1RfR1QobWF4LCBvbmUpOworICAgIEVYUEVDVF9MVChtaW4sIG1pbnVzX3R3byk7Cit9CisKK1RF
U1QoV1RGX0ludDEyOCwgQ29tcGFyaXNvblRlc3QpCit7CisgICAgc3RydWN0IFRlc3RDYXNlIHsK
KyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIHNtYWxsZXI7CisgICAgICAgIFdURjo6SW50MTI4SW1w
bCBsYXJnZXI7CisgICAgfTsKKyAgICBUZXN0Q2FzZSBjYXNlc1tdID0geworICAgICAgICB7IFdU
Rjo6SW50MTI4SW1wbCgwKSwgV1RGOjpJbnQxMjhJbXBsKDEyMykgfSwKKyAgICAgICAgeyBXVEY6
Ok1ha2VJbnQxMjgoLTEyLCAzNCksIFdURjo6TWFrZUludDEyOCgxMiwgMzQpIH0sCisgICAgICAg
IHsgV1RGOjpNYWtlSW50MTI4KDEsIDEwMDApLCBXVEY6Ok1ha2VJbnQxMjgoMTAwMCwgMSkgfSwK
KyAgICAgICAgeyBXVEY6Ok1ha2VJbnQxMjgoLTEwMDAsIDEwMDApLCBXVEY6Ok1ha2VJbnQxMjgo
LTEsIDEpIH0sCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IFRlc3RDYXNlJiBwYWlyIDogY2FzZXMp
IHsKKyAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJwYWlyLnNt
YWxsZXIgPSAiIDw8IHBhaXIuc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPDwgIjsgcGFpci5sYXJnZXIgPSAiIDw8IHBhaXIubGFyZ2VyKTsKKworICAg
ICAgICBFWFBFQ1RfVFJVRShwYWlyLnNtYWxsZXIgPT0gcGFpci5zbWFsbGVyKTsgLy8gTk9MSU5U
KHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLmxhcmdlciA9PSBw
YWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKHBhaXIuc21hbGxlciA9PSBwYWlyLmxhcmdlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0
eS9jaGVjaykKKworICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLnNtYWxsZXIgIT0gcGFpci5sYXJn
ZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAgIEVYUEVDVF9GQUxTRShw
YWlyLnNtYWxsZXIgIT0gcGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNr
KQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5sYXJnZXIgIT0gcGFpci5sYXJnZXIpOyAvLyBO
T0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisKKyAgICAgICAgRVhQRUNUX1RSVUUocGFpci5zbWFs
bGVyIDwgcGFpci5sYXJnZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisgICAgICAg
IEVYUEVDVF9GQUxTRShwYWlyLmxhcmdlciA8IHBhaXIuc21hbGxlcik7IC8vIE5PTElOVChyZWFk
YWJpbGl0eS9jaGVjaykKKworICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLmxhcmdlciA+IHBhaXIu
c21hbGxlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKHBhaXIuc21hbGxlciA+IHBhaXIubGFyZ2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2No
ZWNrKQorCisgICAgICAgIEVYUEVDVF9UUlVFKHBhaXIuc21hbGxlciA8PSBwYWlyLmxhcmdlcik7
IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHBhaXIu
bGFyZ2VyIDw9IHBhaXIuc21hbGxlcik7IC8vIE5PTElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAg
ICAgICAgRVhQRUNUX1RSVUUocGFpci5zbWFsbGVyIDw9IHBhaXIuc21hbGxlcik7IC8vIE5PTElO
VChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICAgICAgRVhQRUNUX1RSVUUocGFpci5sYXJnZXIgPD0g
cGFpci5sYXJnZXIpOyAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2hlY2spCisKKyAgICAgICAgRVhQ
RUNUX1RSVUUocGFpci5sYXJnZXIgPj0gcGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmls
aXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfRkFMU0UocGFpci5zbWFsbGVyID49IHBhaXIubGFy
Z2VyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNrKQorICAgICAgICBFWFBFQ1RfVFJVRShw
YWlyLnNtYWxsZXIgPj0gcGFpci5zbWFsbGVyKTsgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2NoZWNr
KQorICAgICAgICBFWFBFQ1RfVFJVRShwYWlyLmxhcmdlciA+PSBwYWlyLmxhcmdlcik7IC8vIE5P
TElOVChyZWFkYWJpbGl0eS9jaGVjaykKKyAgICB9Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgVW5h
cnlQbHVzVGVzdCkKK3sKKyAgICBpbnQ2NF90IHZhbHVlczY0W10gPSB7IDAsIDEsIDEyMzQ1LCAw
eDQwMDAwMDAwMDAwMDAwMDAsCisgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46
Om1heCgpIH07CisgICAgZm9yIChpbnQ2NF90IHZhbHVlIDogdmFsdWVzNjQpIHsKKyAgICAgICAg
U0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJ2YWx1ZSA9ICIgPDwgdmFsdWUp
OworCisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwodmFsdWUpLCArV1RGOjpJbnQx
MjhJbXBsKHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoLXZhbHVl
KSwgK1dURjo6SW50MTI4SW1wbCgtdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFr
ZUludDEyOCh2YWx1ZSwgMCksICtXVEY6Ok1ha2VJbnQxMjgodmFsdWUsIDApKTsKKyAgICAgICAg
RVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgtdmFsdWUsIDApLCArV1RGOjpNYWtlSW50MTI4KC12
YWx1ZSwgMCkpOworICAgIH0KK30KKworVEVTVChXVEZfSW50MTI4LCBVbmFyeU5lZ2F0aW9uVGVz
dCkKIHsKLSAgICBOb25OYXRpdmVVSW50MTI4IG4geyB4IH07Ci0gICAgRVhQRUNUX0VRKHgsIHN0
YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+KG4pKTsKLSAgICBFWFBFQ1RfRVEofngsIHN0YXRpY19j
YXN0PHN0ZDo6dWludDY0X3Q+KH5uKSk7Ci0gICAgRVhQRUNUX0VRKC14LCBzdGF0aWNfY2FzdDxz
dGQ6OnVpbnQ2NF90PigtbikpOwotICAgIEVYUEVDVF9FUSgheCwgc3RhdGljX2Nhc3Q8c3RkOjp1
aW50NjRfdD4oIW4pKTsKLSAgICBFWFBFQ1RfVFJVRShuID09IG4pOwotICAgIEVYUEVDVF9UUlVF
KG4gKyBuID09IG4gKiBzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PigyKSk7Ci0gICAgRVhQ
RUNUX1RSVUUobiAtIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMCkpOwotICAg
IEVYUEVDVF9UUlVFKG4gKyBuID09IG4gPDwgc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4o
MSkpOwotICAgIEVYUEVDVF9UUlVFKG4gKyBuID09IG4gPDwgc3RhdGljX2Nhc3Q8Tm9uTmF0aXZl
VUludDEyOD4oMSkpOwotICAgIEVYUEVDVF9UUlVFKChuICsgbikgLSBuID09IG4pOwotICAgIEVY
UEVDVF9UUlVFKCgobiArIG4pID4+IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDEpKSA9
PSBuKTsKLSAgICBpZiAoeCkgewotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25O
YXRpdmVVSW50MTI4PigwKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4oMCkp
OwotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRpdmVVSW50MTI4PihuIC0g
MSkgLyBuID09IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDApKTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUoc3RhdGljX2Nhc3Q8Tm9uTmF0aXZlVUludDEyOD4obikgLyBuID09IHN0YXRpY19j
YXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDEpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoc3RhdGljX2Nh
c3Q8Tm9uTmF0aXZlVUludDEyOD4obiArIG4gLSAxKSAvIG4gPT0gc3RhdGljX2Nhc3Q8Tm9uTmF0
aXZlVUludDEyOD4oMSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxOb25OYXRp
dmVVSW50MTI4PihuICsgbikgLyBuID09IHN0YXRpY19jYXN0PE5vbk5hdGl2ZVVJbnQxMjg+KDIp
KTsKKyAgICBpbnQ2NF90IHZhbHVlczY0W10gPSB7IDAsIDEsIDEyMzQ1LCAweDQwMDAwMDAwMDAw
MDAwMDAsCisgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpIH07Cisg
ICAgZm9yIChpbnQ2NF90IHZhbHVlIDogdmFsdWVzNjQpIHsKKyAgICAgICAgU0NPUEVEX1RSQUNF
KDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJ2YWx1ZSA9ICIgPDwgdmFsdWUpOworCisgICAgICAg
IEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwoLXZhbHVlKSwgLVdURjo6SW50MTI4SW1wbCh2YWx1
ZSkpOworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHZhbHVlKSwgLVdURjo6SW50
MTI4SW1wbCgtdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgtdmFs
dWUsIDApLCAtV1RGOjpNYWtlSW50MTI4KHZhbHVlLCAwKSk7CisgICAgICAgIEVYUEVDVF9FUShX
VEY6Ok1ha2VJbnQxMjgodmFsdWUsIDApLCAtV1RGOjpNYWtlSW50MTI4KC12YWx1ZSwgMCkpOwor
ICAgIH0KK30KKworVEVTVChXVEZfSW50MTI4LCBMb2dpY2FsTm90VGVzdCkKK3sKKyAgICBFWFBF
Q1RfVFJVRSghV1RGOjpJbnQxMjhJbXBsKDApKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY0
OyArK2kpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKCFXVEY6Ok1ha2VJbnQxMjgoMCwgdWludDY0
X3QgeyAxIH0gPDwgaSkpOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDYzOyArK2kp
IHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKCFXVEY6Ok1ha2VJbnQxMjgoaW50NjRfdCB7IDEgfSA8
PCBpLCAwKSk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBUZXN0QmluYXJ5KHN0ZDo6dWludDY0
X3QgeCwgc3RkOjp1aW50NjRfdCB5KQorVEVTVChXVEZfSW50MTI4LCBBZGRpdGlvblN1YnRyYWN0
aW9uVGVzdCkKIHsKLSAgICBOb25OYXRpdmVVSW50MTI4IG0geyB4IH0sIG4geyB5IH07CisgICAg
Ly8gNjQgYml0IHBhaXJzIHRoYXQgd2lsbCBub3QgY2F1c2Ugb3ZlcmZsb3cgLyB1bmRlcmZsb3cu
IFRoZXNlIHRlc3QgbmVnYXRpdmUKKyAgICAvLyBjYXJyeTsgcG9zaXRpdmUgY2FycnkgbXVzdCBi
ZSBjaGVja2VkIHNlcGFyYXRlbHkuCisgICAgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+IGNh
c2VzW10geworICAgICAgICB7IDAsIDAgfSwgLy8gMCwgMAorICAgICAgICB7IDAsIDI5NDU3ODEy
OTA4MzQgfSwgLy8gMCwgKworICAgICAgICB7IDE5MDgzNTc2MTkyMzQsIDAgfSwgLy8gKywgMAor
ICAgICAgICB7IDAsIC0xMjA0ODk1OTE4MjQ1IH0sIC8vIDAsIC0KKyAgICAgICAgeyAtMjk1Nzky
ODUyMzU2MCwgMCB9LCAvLyAtLCAwCisgICAgICAgIHsgODkwMjM5ODIzMTI0NjEsIDk4MzQ2MDEy
NTY3MTM0IH0sIC8vICssICsKKyAgICAgICAgeyAtNjM0NTQyMzQ1NjgyMzksIC0yMzQ1NjIzNTIz
MDc3MyB9LCAvLyAtLCAtCisgICAgICAgIHsgOTgyNjM0NTcyNjM1MDIsIC0yMTQyODU2MTkzNTky
NSB9LCAvLyArLCAtCisgICAgICAgIHsgLTg4MjM1MjM3NDM4NDY3LCAxNTkyMzY1OTIzNDU3MyB9
LCAvLyAtLCArCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBjYXNlcykgewor
ICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkKKyAgICAgICAgICAgIDw8
ICJwYWlyID0geyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBhaXIuc2Vjb25kIDw8ICd9Jyk7
CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0ICsgcGFpci5z
ZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpICsgV1RGOjpJ
bnQxMjhJbXBsKHBhaXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOElt
cGwocGFpci5zZWNvbmQgKyBwYWlyLmZpcnN0KSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1w
bChwYWlyLnNlY29uZCkgKz0gV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpKTsKKworICAgICAg
ICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgLSBwYWlyLnNlY29uZCksCisg
ICAgICAgICAgICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgLSBXVEY6OkludDEyOEltcGwo
cGFpci5zZWNvbmQpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLnNl
Y29uZCAtIHBhaXIuZmlyc3QpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vj
b25kKSAtPSBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkpOworCisgICAgICAgIEVYUEVDVF9F
USgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCArIHBhaXIuZmlyc3Qs
IDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSArIFdURjo6
TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAg
ICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0ICsgcGFpci5zZWNvbmQsIDApLAorICAgICAg
ICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApICs9IFdURjo6TWFrZUludDEyOChw
YWlyLnNlY29uZCwgMCkpOworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6
TWFrZUludDEyOChwYWlyLnNlY29uZCAtIHBhaXIuZmlyc3QsIDApLAorICAgICAgICAgICAgV1RG
OjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSAtIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0
LCAwKSk7CisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChw
YWlyLmZpcnN0IC0gcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4
KHBhaXIuZmlyc3QsIDApIC09IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAg
IH0KKworICAgIC8vIGNoZWNrIHBvc2l0aXZlIGNhcnJ5CisgICAgRVhQRUNUX0VRKFdURjo6TWFr
ZUludDEyOCgzMSwgMCksCisgICAgICAgIFdURjo6TWFrZUludDEyOCgyMCwgMSkgKyBXVEY6Ok1h
a2VJbnQxMjgoMTAsIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpOworfQor
CitURVNUKFdURl9JbnQxMjgsIEluY3JlbWVudERlY3JlbWVudFRlc3QpCit7CisgICAgV1RGOjpJ
bnQxMjhJbXBsIHZhbHVlID0gMDsKKyAgICBFWFBFQ1RfRVEoMCwgdmFsdWUrKyk7CisgICAgRVhQ
RUNUX0VRKDEsIHZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoMSwgdmFsdWUtLSk7CisgICAgRVhQRUNU
X0VRKDAsIHZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoLTEsIC0tdmFsdWUpOworICAgIEVYUEVDVF9F
USgtMSwgdmFsdWUpOworICAgIEVYUEVDVF9FUSgwLCArK3ZhbHVlKTsKKyAgICBFWFBFQ1RfRVEo
MCwgdmFsdWUpOworfQorCitURVNUKFdURl9JbnQxMjgsIE11bHRpcGxpY2F0aW9uVGVzdCkKK3sK
KyAgICAvLyAxIGJpdCB4IDEgYml0LCBhbmQgbmVnYXRpdmUgY29tYmluYXRpb25zCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
MTI3IC0gaTsgKytqKSB7CisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNz
YWdlKCkgPDwgImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBXVEY6
OkludDEyOEltcGwgYSA9IFdURjo6SW50MTI4SW1wbCgxKSA8PCBpOworICAgICAgICAgICAgV1RG
OjpJbnQxMjhJbXBsIGIgPSBXVEY6OkludDEyOEltcGwoMSkgPDwgajsKKyAgICAgICAgICAgIFdU
Rjo6SW50MTI4SW1wbCBjID0gV1RGOjpJbnQxMjhJbXBsKDEpIDw8IChpICsgaik7CisKKyAgICAg
ICAgICAgIEVYUEVDVF9FUShjLCBhICogYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIC1h
ICogYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIGEgKiAtYik7CisgICAgICAgICAgICBF
WFBFQ1RfRVEoYywgLWEgKiAtYik7CisKKyAgICAgICAgICAgIEVYUEVDVF9FUShjLCBXVEY6Oklu
dDEyOEltcGwoYSkgKj0gYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIFdURjo6SW50MTI4
SW1wbCgtYSkgKj0gYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoLWMsIFdURjo6SW50MTI4SW1w
bChhKSAqPSAtYik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoYywgV1RGOjpJbnQxMjhJbXBsKC1h
KSAqPSAtYik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBQYWlycyBvZiByYW5kb20gdmFs
dWVzIHRoYXQgd2lsbCBub3Qgb3ZlcmZsb3cgc2lnbmVkIDY0LWJpdCBtdWx0aXBsaWNhdGlvbgor
ICAgIHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiBzbWFsbF92YWx1ZXNbXSA9IHsKKyAgICAg
ICAgeyAweDVlNjEsIDB4ZjI5Zjc5Y2ExNGI0IH0sIC8vICssICsKKyAgICAgICAgeyAweDNlMDMz
YiwgLTB4NjEyYzBlZTU0OSB9LCAvLyArLCAtCisgICAgICAgIHsgLTB4MDUyY2U3ZTgsIDB4N2M3
MjhmMGYgfSwgLy8gLSwgKworICAgICAgICB7IC0weDNhZjcwNTQ2MjYsIC0weGZiMWUxZCB9LCAv
LyAtLCAtCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90
PiYgcGFpciA6IHNtYWxsX3ZhbHVlcykgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5n
OjpNZXNzYWdlKCkKKyAgICAgICAgICAgIDw8ICJwYWlyID0geyIgPDwgcGFpci5maXJzdCA8PCAi
LCAiIDw8IHBhaXIuc2Vjb25kIDw8ICd9Jyk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50
MTI4SW1wbChwYWlyLmZpcnN0ICogcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQx
MjhJbXBsKHBhaXIuZmlyc3QpICogV1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSk7CisgICAg
ICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwocGFpci5maXJzdCAqIHBhaXIuc2Vjb25kKSwK
KyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0KSAqPSBXVEY6OkludDEyOElt
cGwocGFpci5zZWNvbmQpKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KHBh
aXIuZmlyc3QgKiBwYWlyLnNlY29uZCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgo
cGFpci5maXJzdCwgMCkgKiBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKyAgICAgICAg
RVhQRUNUX0VRKFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0ICogcGFpci5zZWNvbmQsIDApLAor
ICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QsIDApICo9IFdURjo6SW50MTI4
SW1wbChwYWlyLnNlY29uZCkpOworICAgIH0KKworICAgIC8vIFBhaXJzIG9mIHBvc2l0aXZlIHJh
bmRvbSB2YWx1ZXMgdGhhdCB3aWxsIG5vdCBvdmVyZmxvdyA2NC1iaXQKKyAgICAvLyBtdWx0aXBs
aWNhdGlvbiBhbmQgY2FuIGJlIGxlZnQgc2hpZnRlZCBieSAzMiB3aXRob3V0IG92ZXJmbG93Cisg
ICAgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+IHNtYWxsX3ZhbHVlczJbXSA9IHsKKyAgICAg
ICAgeyAweDFiYjBhMTEwLCAweDMxNDg3NjcxIH0sCisgICAgICAgIHsgMHg0NzkyNzg0ZSwgMHgy
OGFkZDdkNyB9LAorICAgICAgICB7IDB4N2I2NjU1M2EsIDB4MTFkZmY4ZWYgfSwKKyAgICB9Owor
ICAgIGZvciAoY29uc3Qgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+JiBwYWlyIDogc21hbGxf
dmFsdWVzMikgeworICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNzYWdlKCkKKyAg
ICAgICAgICAgIDw8ICJwYWlyID0geyIgPDwgcGFpci5maXJzdCA8PCAiLCAiIDw8IHBhaXIuc2Vj
b25kIDw8ICd9Jyk7CisKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGEgPSBXVEY6OkludDEyOElt
cGwocGFpci5maXJzdCA8PCAzMik7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBiID0gV1RGOjpJ
bnQxMjhJbXBsKHBhaXIuc2Vjb25kIDw8IDMyKTsKKyAgICAgICAgV1RGOjpJbnQxMjhJbXBsIGMg
PSBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCAqIHBhaXIuc2Vjb25kLCAwKTsKKworICAgICAg
ICBFWFBFQ1RfRVEoYywgYSAqIGIpOworICAgICAgICBFWFBFQ1RfRVEoLWMsIC1hICogYik7Cisg
ICAgICAgIEVYUEVDVF9FUSgtYywgYSAqIC1iKTsKKyAgICAgICAgRVhQRUNUX0VRKGMsIC1hICog
LWIpOworCisgICAgICAgIEVYUEVDVF9FUShjLCBXVEY6OkludDEyOEltcGwoYSkgKj0gYik7Cisg
ICAgICAgIEVYUEVDVF9FUSgtYywgV1RGOjpJbnQxMjhJbXBsKC1hKSAqPSBiKTsKKyAgICAgICAg
RVhQRUNUX0VRKC1jLCBXVEY6OkludDEyOEltcGwoYSkgKj0gLWIpOworICAgICAgICBFWFBFQ1Rf
RVEoYywgV1RGOjpJbnQxMjhJbXBsKC1hKSAqPSAtYik7CisgICAgfQorCisgICAgLy8gY2hlY2sg
MCwgMSwgYW5kIC0xIGJlaGF2aW9yIHdpdGggbGFyZ2UgdmFsdWVzCisgICAgV1RGOjpJbnQxMjhJ
bXBsIGxhcmdlX3ZhbHVlc1tdID0geworICAgICAgICB7IFdURjo6TWFrZUludDEyOCgweGQ2NmYw
NjFhZjAyZDA0MDgsIDB4NzI3ZDI4NDZjYjQ3NWI1MykgfSwKKyAgICAgICAgeyBXVEY6Ok1ha2VJ
bnQxMjgoMHgyN2I4ZDVlZDYxMDQ0NTJkLCAweDAzZjhhMzNiMGVlMWRmNGYpIH0sCisgICAgICAg
IHsgLVdURjo6TWFrZUludDEyOCgweDYyMWI2NjI2YjllOGQwNDIsIDB4MjczMTFhYzk5ZGYwMDkz
OCkgfSwKKyAgICAgICAgeyAtV1RGOjpNYWtlSW50MTI4KDB4MzRlMDY1NmYxZTk1ZmI2MCwgMHg0
MjgxY2ZkNzMxMjU3YTQ3KSB9LAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFs
dWUgOiBsYXJnZV92YWx1ZXMpIHsKKyAgICAgICAgRVhQRUNUX0VRKDAsIDAgKiB2YWx1ZSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgwLCB2YWx1ZSAqIDApOworICAgICAgICBFWFBFQ1RfRVEoMCwgV1RG
OjpJbnQxMjhJbXBsKDApICo9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHZhbHVlICo9
IDApOworCisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgMSAqIHZhbHVlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKHZhbHVlLCB2YWx1ZSAqIDEpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIFdURjo6
SW50MTI4SW1wbCgxKSAqPSB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUg
Kj0gMSk7CisKKyAgICAgICAgRVhQRUNUX0VRKC12YWx1ZSwgLTEgKiB2YWx1ZSk7CisgICAgICAg
IEVYUEVDVF9FUSgtdmFsdWUsIHZhbHVlICogLTEpOworICAgICAgICBFWFBFQ1RfRVEoLXZhbHVl
LCBXVEY6OkludDEyOEltcGwoLTEpICo9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKC12YWx1
ZSwgdmFsdWUgKj0gLTEpOworICAgIH0KKworICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0ZWQgcmFu
ZG9tIGxhcmdlIHZhbHVlIGNhc2VzCisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgweGNk
MGVmZDM0NDIyMTliYiwgMHhkZTQ3YzA1YmNkOWRmNmUxKSwKKyAgICAgICAgV1RGOjpNYWtlSW50
MTI4KDB4N2M2NDQ4LCAweDNiYzQyODVjNDdhOWQyNTMpICogMHgxYTYwMzc1MzdiKTsKKyAgICBF
WFBFQ1RfRVEoLVdURjo6TWFrZUludDEyOCgweDFmOGYxNDk4NTBiMWU1ZTYsIDB4MWU1MGQ2YjUy
ZDI3MmMzZSksCisgICAgICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHgyMywgMHgyZTY4YTUxM2NhMWI4
ODU5KSAqIDB4ZTVhNDM0Y2QxNDg2NmUpOworICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtlSW50MTI4
KDB4NTVjYWU3MzIwMjlkMWZjZSwgMHhjYTY0NzRiNjQyMzI2M2U0KSwKKyAgICAgICAgMHhhOWI5
OGE4ZGRmNjZiYyAqIC1XVEY6Ok1ha2VJbnQxMjgoMHg4MSwgMHg2NzJlNTgyMzFlMjQ2OWQ3KSk7
CisgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCgweDE5YzhiNzYyMGI1MDdkYzQsIDB4ZmVj
MDQyYjcxYTVmMjlhNCksCisgICAgICAgIC0weDNlMzkzNDExNDcgKiAtV1RGOjpNYWtlSW50MTI4
KDB4NmExNGIyLCAweDVlZDM0Y2NhNDIzMjdiM2MpKTsKKworICAgIEVYUEVDVF9FUShXVEY6Ok1h
a2VJbnQxMjgoMHhjZDBlZmQzNDQyMjE5YmIsIDB4ZGU0N2MwNWJjZDlkZjZlMSksCisgICAgICAg
IFdURjo6TWFrZUludDEyOCgweDdjNjQ0OCwgMHgzYmM0Mjg1YzQ3YTlkMjUzKSAqPSAweDFhNjAz
NzUzN2IpOworICAgIEVYUEVDVF9FUSgtV1RGOjpNYWtlSW50MTI4KDB4MWY4ZjE0OTg1MGIxZTVl
NiwgMHgxZTUwZDZiNTJkMjcyYzNlKSwKKyAgICAgICAgLVdURjo6TWFrZUludDEyOCgweDIzLCAw
eDJlNjhhNTEzY2ExYjg4NTkpICo9IDB4ZTVhNDM0Y2QxNDg2NmUpOworICAgIEVYUEVDVF9FUSgt
V1RGOjpNYWtlSW50MTI4KDB4NTVjYWU3MzIwMjlkMWZjZSwgMHhjYTY0NzRiNjQyMzI2M2U0KSwK
KyAgICAgICAgV1RGOjpJbnQxMjhJbXBsKDB4YTliOThhOGRkZjY2YmMpICo9IC1XVEY6Ok1ha2VJ
bnQxMjgoMHg4MSwgMHg2NzJlNTgyMzFlMjQ2OWQ3KSk7CisgICAgRVhQRUNUX0VRKFdURjo6TWFr
ZUludDEyOCgweDE5YzhiNzYyMGI1MDdkYzQsIDB4ZmVjMDQyYjcxYTVmMjlhNCksCisgICAgICAg
IFdURjo6SW50MTI4SW1wbCgtMHgzZTM5MzQxMTQ3KSAqPSAtV1RGOjpNYWtlSW50MTI4KDB4NmEx
NGIyLCAweDVlZDM0Y2NhNDIzMjdiM2MpKTsKK30KKworVEVTVChXVEZfSW50MTI4LCBEaXZpc2lv
bkFuZE1vZHVsb1Rlc3QpCit7CisgICAgLy8gQ2hlY2sgYWdhaW5zdCA2NCBiaXQgZGl2aXNpb24g
YW5kIG1vZHVsbyBvcGVyYXRvcnMgd2l0aCBhIHNhbXBsZSBvZgorICAgIC8vIHJhbmRvbWx5IGdl
bmVyYXRlZCBwYWlycy4KKyAgICBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gc21hbGxfcGFp
cnNbXSA9IHsKKyAgICAgICAgeyAweDE1ZjJhNjQxMzgsIDB4NjdkYTA1IH0sCisgICAgICAgIHsg
MHg1ZTU2ZDE5NGFmNDMwNDVmLCAweGNmMTU0M2ZiOTkgfSwKKyAgICAgICAgeyAweDE1ZTYxZWQw
NTIwMzZhLCAtMHhjOGU2IH0sCisgICAgICAgIHsgMHg4ODEyNWEzNDFlODUsIC0weGQyM2ZiNzc2
ODMgfSwKKyAgICAgICAgeyAtMHhjMDZlMjAsIDB4NWEgfSwKKyAgICAgICAgeyAtMHg0ZjEwMDIx
OWFlYTNlODVkLCAweGRjYzU2Y2I0ZWZlOTkzIH0sCisgICAgICAgIHsgLTB4MTY4ZDYyOTEwNSwg
LTB4YTcgfSwKKyAgICAgICAgeyAtMHg3YjQ0ZTkyZjAzYWIyMzc1LCAtMHg2NTE2IH0sCisgICAg
fTsKKyAgICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiYgcGFpciA6IHNt
YWxsX3BhaXJzKSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQor
ICAgICAgICAgICAgPDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5z
ZWNvbmQgPDwgJ30nKTsKKworICAgICAgICBXVEY6OkludDEyOEltcGwgZGl2aWRlbmQgPSBwYWly
LmZpcnN0OworICAgICAgICBXVEY6OkludDEyOEltcGwgZGl2aXNvciA9IHBhaXIuc2Vjb25kOwor
ICAgICAgICBpbnQ2NF90IHF1b3RpZW50ID0gcGFpci5maXJzdCAvIHBhaXIuc2Vjb25kOworICAg
ICAgICBpbnQ2NF90IHJlbWFpbmRlciA9IHBhaXIuZmlyc3QgJSBwYWlyLnNlY29uZDsKKworICAg
ICAgICBFWFBFQ1RfRVEocXVvdGllbnQsIGRpdmlkZW5kIC8gZGl2aXNvcik7CisgICAgICAgIEVY
UEVDVF9FUShxdW90aWVudCwgV1RGOjpJbnQxMjhJbXBsKGRpdmlkZW5kKSAvPSBkaXZpc29yKTsK
KyAgICAgICAgRVhQRUNUX0VRKHJlbWFpbmRlciwgZGl2aWRlbmQgJSBkaXZpc29yKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHJlbWFpbmRlciwgV1RGOjpJbnQxMjhJbXBsKGRpdmlkZW5kKSAlPSBkaXZp
c29yKTsKKyAgICB9CisKKyAgICAvLyBUZXN0IGJlaGF2aW9yIHdpdGggMCwgMSwgYW5kIC0xIHdp
dGggYSBzYW1wbGUgb2YgcmFuZG9tbHkgZ2VuZXJhdGVkIGxhcmdlCisgICAgLy8gdmFsdWVzLgor
ICAgIFdURjo6SW50MTI4SW1wbCB2YWx1ZXNbXSA9IHsKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4
KDB4NjNkMjZlZTY4OGE5NjJiMiwgMHg5ZTE0MTFhYmRhNWMxZDcwKSwKKyAgICAgICAgV1RGOjpN
YWtlSW50MTI4KDB4MTUyZjM4NTE1OWQ2Zjk4NiwgMHhiZjhkNDhlZjYzZGEzOTVkKSwKKyAgICAg
ICAgLVdURjo6TWFrZUludDEyOCgweDMwOThkNzU2NzAzMDAzOGMsIDB4MTRlN2E4YTA5OGRjMjE2
NCksCisgICAgICAgIC1XVEY6Ok1ha2VJbnQxMjgoMHg0OWEwMzdhY2EzNWM4MDlmLCAweGE2YTg3
NTI1NDgwZWYzMzApLAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFsdWUgOiB2
YWx1ZXMpIHsKKyAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJ2
YWx1ZSA9ICIgPDwgdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSgwLCAwIC8gdmFsdWUpOwor
ICAgICAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQxMjhJbXBsKDApIC89IHZhbHVlKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDAsIDAgJSB2YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBXVEY6Oklu
dDEyOEltcGwoMCkgJT0gdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUg
LyAxKTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOEltcGwodmFsdWUpIC89
IDEpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgJSAxKTsKKyAgICAgICAgRVhQRUNUX0VR
KDAsIFdURjo6SW50MTI4SW1wbCh2YWx1ZSkgJT0gMSk7CisKKyAgICAgICAgRVhQRUNUX0VRKC12
YWx1ZSwgdmFsdWUgLyAtMSk7CisgICAgICAgIEVYUEVDVF9FUSgtdmFsdWUsIFdURjo6SW50MTI4
SW1wbCh2YWx1ZSkgLz0gLTEpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdmFsdWUgJSAtMSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgwLCBXVEY6OkludDEyOEltcGwodmFsdWUpICU9IC0xKTsKKyAgICB9
CisKKyAgICAvLyBNaW4gYW5kIG1heCB2YWx1ZXMKKyAgICBFWFBFQ1RfRVEoMCwgV1RGOjpJbnQx
MjhNYXgoKSAvIFdURjo6SW50MTI4TWluKCkpOworICAgIEVYUEVDVF9FUShXVEY6OkludDEyOE1h
eCgpLCBXVEY6OkludDEyOE1heCgpICUgV1RGOjpJbnQxMjhNaW4oKSk7CisgICAgRVhQRUNUX0VR
KC0xLCBXVEY6OkludDEyOE1pbigpIC8gV1RGOjpJbnQxMjhNYXgoKSk7CisgICAgRVhQRUNUX0VR
KC0xLCBXVEY6OkludDEyOE1pbigpICUgV1RGOjpJbnQxMjhNYXgoKSk7CisKKyAgICAvLyBQb3dl
ciBvZiB0d28gZGl2aXNpb24gYW5kIG1vZHVsbyBvZiByYW5kb20gbGFyZ2UgZGl2aWRlbmRzCisg
ICAgV1RGOjpJbnQxMjhJbXBsIHBvc2l0aXZlX3ZhbHVlc1tdID0geworICAgICAgICBXVEY6Ok1h
a2VJbnQxMjgoMHgyMWUxYTFjYzY5NTc0NjIwLCAweGU3YWM0NDdmYWIyZmM4NjkpLAorICAgICAg
ICBXVEY6Ok1ha2VJbnQxMjgoMHgzMmMyZmYzYWI4OWU2NmU4LCAweDAzMzc5YTYxM2ZkMWNlNzQp
LAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHg2ZjMyY2E3ODYxODRkY2FmLCAweDA0NmY5Yzll
Y2IzYTljZTEpLAorICAgICAgICBXVEY6Ok1ha2VJbnQxMjgoMHgxYWViNDY5ZGQ5OTBlMGVlLCAw
eGRhMjc0MGYyNDNjZDM3ZWIpLAorICAgIH07CisgICAgZm9yIChXVEY6OkludDEyOEltcGwgdmFs
dWUgOiBwb3NpdGl2ZV92YWx1ZXMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMjc7
ICsraSkgeworICAgICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpCisg
ICAgICAgICAgICAgICAgPDwgInZhbHVlID0gIiA8PCB2YWx1ZSA8PCAiOyBpID0gIiA8PCBpKTsK
KyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbCBwb3dlcl9vZl90d28gPSBXVEY6OkludDEyOElt
cGwoMSkgPDwgaTsKKworICAgICAgICAgICAgRVhQRUNUX0VRKHZhbHVlID4+IGksIHZhbHVlIC8g
cG93ZXJfb2ZfdHdvKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSA+PiBpLCBXVEY6Oklu
dDEyOEltcGwodmFsdWUpIC89IHBvd2VyX29mX3R3byk7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
dmFsdWUgJiAocG93ZXJfb2ZfdHdvIC0gMSksIHZhbHVlICUgcG93ZXJfb2ZfdHdvKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9FUSh2YWx1ZSAmIChwb3dlcl9vZl90d28gLSAxKSwKKyAgICAgICAgICAg
ICAgICBXVEY6OkludDEyOEltcGwodmFsdWUpICU9IHBvd2VyX29mX3R3byk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBNYW51YWxseSBjYWxjdWxhdGVkIGNhc2VzIHdpdGggcmFuZG9tIGxh
cmdlIGRpdmlkZW5kcworICAgIHN0cnVjdCBEaXZpc2lvbk1vZENhc2UgeworICAgICAgICBXVEY6
OkludDEyOEltcGwgZGl2aWRlbmQ7CisgICAgICAgIFdURjo6SW50MTI4SW1wbCBkaXZpc29yOwor
ICAgICAgICBXVEY6OkludDEyOEltcGwgcXVvdGllbnQ7CisgICAgICAgIFdURjo6SW50MTI4SW1w
bCByZW1haW5kZXI7CisgICAgfTsKKyAgICBEaXZpc2lvbk1vZENhc2UgbWFudWFsX2Nhc2VzW10g
PSB7CisgICAgICAgIHsgV1RGOjpNYWtlSW50MTI4KDB4NmFkYTQ4ZDQ4OTAwNzk2NiwgMHgzYzlj
NWM5ODE1MGQ1ZDY5KSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCgweDhiYzMwOGZiLCAw
eDhjYjljYzlhM2I4MDMzNDQpLCAweGMzYjg3ZTA4LAorICAgICAgICAgICAgV1RGOjpNYWtlSW50
MTI4KDB4MWI3ZGI1ZTEsIDB4ZDllY2EzNGI3YWYwNGI0OSkgfSwKKyAgICAgICAgeyBXVEY6Ok1h
a2VJbnQxMjgoMHhkNjk0NjUxMWI1YiwgMHg0ODg2YzVjOTY1NDZiZjVmKSwKKyAgICAgICAgICAg
IC1XVEY6Ok1ha2VJbnQxMjgoMHgyNjNiLCAweGZkNTE2Mjc5ZWZjZmUyZGMpLCAtMHg1OWNiYWJm
MCwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOCgweDYyMiwgMHhmNDYyOTA5MTU1NjUxZDFm
KSB9LAorICAgICAgICB7IC1XVEY6Ok1ha2VJbnQxMjgoMHgzM2RiNzM0ZjllOGQxMzk5LCAweDg0
NDdhYzkyNDgyYmNhNGQpLCAweDM3NDk1MDc4MjQwLAorICAgICAgICAgICAgLVdURjo6TWFrZUlu
dDEyOCgweGYwMWYxLCAweGJjMDM2OGJmOWE3N2VhZTgpLCAtMHgyMWE1MDhmNDA0ZCB9LAorICAg
ICAgICB7IC1XVEY6Ok1ha2VJbnQxMjgoMHgxM2Y4MzdiNDA5YTA3ZTdkLCAweDdmYzhlMjQ4YTdk
NzM1NjApLCAtMHgxYjlmLAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4YjkxNTc1NTZk
NzI0LCAweGIxNGY2MzU3MTRkNzU2M2UpLCAtMHgxYWRlIH0sCisgICAgfTsKKyAgICBmb3IgKGNv
bnN0IERpdmlzaW9uTW9kQ2FzZSB0ZXN0X2Nhc2UgOiBtYW51YWxfY2FzZXMpIHsKKyAgICAgICAg
RVhQRUNUX0VRKHRlc3RfY2FzZS5xdW90aWVudCwgdGVzdF9jYXNlLmRpdmlkZW5kIC8gdGVzdF9j
YXNlLmRpdmlzb3IpOworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnF1b3RpZW50LAorICAg
ICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHRlc3RfY2FzZS5kaXZpZGVuZCkgLz0gdGVzdF9jYXNl
LmRpdmlzb3IpOworICAgICAgICBFWFBFQ1RfRVEodGVzdF9jYXNlLnJlbWFpbmRlciwgdGVzdF9j
YXNlLmRpdmlkZW5kICUgdGVzdF9jYXNlLmRpdmlzb3IpOworICAgICAgICBFWFBFQ1RfRVEodGVz
dF9jYXNlLnJlbWFpbmRlciwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbCh0ZXN0X2Nhc2Uu
ZGl2aWRlbmQpICU9IHRlc3RfY2FzZS5kaXZpc29yKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX0lu
dDEyOCwgQml0d2lzZUxvZ2ljVGVzdCkKK3sKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBs
KC0xKSwgfldURjo6SW50MTI4SW1wbCgwKSk7CisKKyAgICBXVEY6OkludDEyOEltcGwgdmFsdWVz
W10geworICAgICAgICAwLCAtMSwgMHhkZTQwMGJlZTA1YzNmZjZiLCBXVEY6Ok1ha2VJbnQxMjgo
MHg3ZjMyMTc4ZGQ4MWQ2MzRhLCAwKSwKKyAgICAgICAgV1RGOjpNYWtlSW50MTI4KDB4YWY1Mzkw
NTcwNTU2MTNhOSwgMHg3ZDEwNGQ3ZDk0NmMyZTRkKQorICAgIH07CisgICAgZm9yIChXVEY6Oklu
dDEyOEltcGwgdmFsdWUgOiB2YWx1ZXMpIHsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCB+fnZh
bHVlKTsKKworICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIHZhbHVlIHwgdmFsdWUpOworICAgICAg
ICBFWFBFQ1RfRVEodmFsdWUsIHZhbHVlICYgdmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoMCwg
dmFsdWUgXiB2YWx1ZSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEyOElt
cGwodmFsdWUpIHw9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLCBXVEY6OkludDEy
OEltcGwodmFsdWUpICY9IHZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFdURjo6SW50MTI4
SW1wbCh2YWx1ZSkgXj0gdmFsdWUpOworCisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgdmFsdWUg
fCAwKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHZhbHVlICYgMCk7CisgICAgICAgIEVYUEVDVF9F
USh2YWx1ZSwgdmFsdWUgXiAwKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBs
KC0xKSwgdmFsdWUgfCBXVEY6OkludDEyOEltcGwoLTEpKTsKKyAgICAgICAgRVhQRUNUX0VRKHZh
bHVlLCB2YWx1ZSAmIFdURjo6SW50MTI4SW1wbCgtMSkpOworICAgICAgICBFWFBFQ1RfRVEofnZh
bHVlLCB2YWx1ZSBeIFdURjo6SW50MTI4SW1wbCgtMSkpOworICAgIH0KKworICAgIC8vIHNtYWxs
IHNhbXBsZSBvZiByYW5kb21seSBnZW5lcmF0ZWQgaW50NjRfdCdzCisgICAgc3RkOjpwYWlyPGlu
dDY0X3QsIGludDY0X3Q+IHBhaXJzNjRbXSB7CisgICAgICAgIHsgMHg3Zjg2Nzk3ZjVlOTkxYWY0
LCAweDFlZTMwNDk0ZmIwMDdjOTcgfSwKKyAgICAgICAgeyAweDBiMjc4MjgyYmFjZjAxYWYsIDB4
NTg3ODBlMGE1N2E0OWU4NiB9LAorICAgICAgICB7IDB4MDU5ZjI2NmNjYjkzYTY2NiwgMHgzZDVi
NzMxYmFlOTI4NmY1IH0sCisgICAgICAgIHsgMHg2M2MwYzQ4MjBmMTIxMDhjLCAweDU4MTY2NzEz
YzEyZTFjM2EgfSwKKyAgICAgICAgeyAweDM4MTQ4OGJiMmVkMmE2NmUsIDB4MjIyMGEzZWI3NmEz
Njk4YyB9LAorICAgICAgICB7IDB4MmEwYTBkZmI4MWUwNmYyMSwgMHg0YjYwNTg1OTI3ZjU1MjNj
IH0sCisgICAgICAgIHsgMHg1NTViMWMzYTAzNjk4NTM3LCAweDI1NDc4Y2QxOWQ4ZTUzY2IgfSwK
KyAgICAgICAgeyAweDQ3NTBmNmYyN2Q3NzkyMjUsIDB4MTYzOTc1NTNjNmZmMDVmYyB9LAorICAg
IH07CisgICAgZm9yIChjb25zdCBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4mIHBhaXIgOiBw
YWlyczY0KSB7CisgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKQorICAg
ICAgICAgICAgPDwgInBhaXIgPSB7IiA8PCBwYWlyLmZpcnN0IDw8ICIsICIgPDwgcGFpci5zZWNv
bmQgPDwgJ30nKTsKKworICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4KH5wYWlyLmZp
cnN0LCB+cGFpci5zZWNvbmQpLAorICAgICAgICAgICAgfldURjo6TWFrZUludDEyOChwYWlyLmZp
cnN0LCBwYWlyLnNlY29uZCkpOworCisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwo
cGFpci5maXJzdCAmIHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChw
YWlyLmZpcnN0KSAmIFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOworICAgICAgICBFWFBF
Q1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgfCBwYWlyLnNlY29uZCksCisgICAgICAg
ICAgICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgfCBXVEY6OkludDEyOEltcGwocGFpci5z
ZWNvbmQpKTsKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4SW1wbChwYWlyLmZpcnN0IF4g
cGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QpIF4g
V1RGOjpJbnQxMjhJbXBsKHBhaXIuc2Vjb25kKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6
SW50MTI4SW1wbChwYWlyLmZpcnN0ICYgcGFpci5zZWNvbmQpLAorICAgICAgICAgICAgV1RGOjpJ
bnQxMjhJbXBsKHBhaXIuZmlyc3QpICY9IFdURjo6SW50MTI4SW1wbChwYWlyLnNlY29uZCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhJbXBsKHBhaXIuZmlyc3QgfCBwYWlyLnNlY29u
ZCksCisgICAgICAgICAgICBXVEY6OkludDEyOEltcGwocGFpci5maXJzdCkgfD0gV1RGOjpJbnQx
MjhJbXBsKHBhaXIuc2Vjb25kKSk7CisgICAgICAgIEVYUEVDVF9FUShXVEY6OkludDEyOEltcGwo
cGFpci5maXJzdCBeIHBhaXIuc2Vjb25kKSwKKyAgICAgICAgICAgIFdURjo6SW50MTI4SW1wbChw
YWlyLmZpcnN0KSBePSBXVEY6OkludDEyOEltcGwocGFpci5zZWNvbmQpKTsKKworICAgICAgICBF
WFBFQ1RfRVEoCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCAmIHBhaXIu
c2Vjb25kLCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSAm
IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoCisg
ICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCB8IHBhaXIuc2Vjb25kLCAwKSwK
KyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSB8IFdURjo6TWFrZUlu
dDEyOChwYWlyLnNlY29uZCwgMCkpOworICAgICAgICBFWFBFQ1RfRVEoCisgICAgICAgICAgICBX
VEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCBeIHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAgICAg
IFdURjo6TWFrZUludDEyOChwYWlyLmZpcnN0LCAwKSBeIFdURjo6TWFrZUludDEyOChwYWlyLnNl
Y29uZCwgMCkpOworCisgICAgICAgIEVYUEVDVF9FUSgKKyAgICAgICAgICAgIFdURjo6TWFrZUlu
dDEyOChwYWlyLmZpcnN0ICYgcGFpci5zZWNvbmQsIDApLAorICAgICAgICAgICAgV1RGOjpNYWtl
SW50MTI4KHBhaXIuZmlyc3QsIDApICY9IFdURjo6TWFrZUludDEyOChwYWlyLnNlY29uZCwgMCkp
OworICAgICAgICBFWFBFQ1RfRVEoCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5m
aXJzdCB8IHBhaXIuc2Vjb25kLCAwKSwKKyAgICAgICAgICAgIFdURjo6TWFrZUludDEyOChwYWly
LmZpcnN0LCAwKSB8PSBXVEY6Ok1ha2VJbnQxMjgocGFpci5zZWNvbmQsIDApKTsKKyAgICAgICAg
RVhQRUNUX0VRKAorICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHBhaXIuZmlyc3QgXiBwYWly
LnNlY29uZCwgMCksCisgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgocGFpci5maXJzdCwgMCkg
Xj0gV1RGOjpNYWtlSW50MTI4KHBhaXIuc2Vjb25kLCAwKSk7CisgICAgfQorfQorCitURVNUKFdU
Rl9JbnQxMjgsIEJpdHdpc2VTaGlmdFRlc3QpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2
NDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IGk7ICsraikgeworICAgICAg
ICAgICAgLy8gTGVmdCBzaGlmdCBmcm9tIGotdGggYml0IHRvIGktdGggYml0LgorICAgICAgICAg
ICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7
IGogPSAiIDw8IGopOworICAgICAgICAgICAgRVhQRUNUX0VRKHVpbnQ2NF90IHsgMSB9IDw8IGks
IFdURjo6SW50MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA8PCAoaSAtIGopKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9FUSh1aW50NjRfdCB7IDEgfSA8PCBpLCBXVEY6OkludDEyOEltcGwodWlu
dDY0X3QgeyAxIH0gPDwgaikgPDw9IChpIC0gaikpOworICAgICAgICB9CisgICAgfQorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNjM7ICsraSkgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IDY0OyArK2opIHsKKyAgICAgICAgICAgIC8vIExlZnQgc2hpZnQgZnJvbSBqLXRoIGJpdCB0byAo
aSArIDY0KS10aCBiaXQuCisgICAgICAgICAgICBTQ09QRURfVFJBQ0UoOjp0ZXN0aW5nOjpNZXNz
YWdlKCkgPDwgImkgPSAiIDw8IGkgPDwgIjsgaiA9ICIgPDwgaik7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8IGksIDApLAorICAgICAgICAg
ICAgICAgIFdURjo6SW50MTI4SW1wbCh1aW50NjRfdCB7IDEgfSA8PCBqKSA8PCAoaSArIDY0IC0g
aikpOworICAgICAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEg
fSA8PCBpLCAwKSwKKyAgICAgICAgICAgICAgICBXVEY6OkludDEyOEltcGwodWludDY0X3QgeyAx
IH0gPDwgaikgPDw9IChpICsgNjQgLSBqKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPD0gaTsgKytqKSB7CisgICAgICAgICAgICAvLyBMZWZ0IHNoaWZ0IGZyb20gKGog
KyA2NCktdGggYml0IHRvIChpICsgNjQpLXRoIGJpdC4KKyAgICAgICAgICAgIFNDT1BFRF9UUkFD
RSg6OnRlc3Rpbmc6Ok1lc3NhZ2UoKSA8PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBqKTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUShXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwg
aSwgMCksCisgICAgICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90IHsgMSB9IDw8
IGosIDApIDw8IChpIC0gaikpOworICAgICAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEy
OCh1aW50NjRfdCB7IDEgfSA8PCBpLCAwKSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQx
MjgodWludDY0X3QgeyAxIH0gPDwgaiwgMCkgPDw9IChpIC0gaikpOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIGZvciAoaW50
IGogPSBpOyBqIDwgNjQ7ICsraikgeworICAgICAgICAgICAgLy8gUmlnaHQgc2hpZnQgZnJvbSBq
LXRoIGJpdCB0byBpLXRoIGJpdC4KKyAgICAgICAgICAgIFNDT1BFRF9UUkFDRSg6OnRlc3Rpbmc6
Ok1lc3NhZ2UoKSA8PCAiaSA9ICIgPDwgaSA8PCAiOyBqID0gIiA8PCBqKTsKKyAgICAgICAgICAg
IEVYUEVDVF9FUSh1aW50NjRfdCB7IDEgfSA8PCBpLCBXVEY6OkludDEyOEltcGwodWludDY0X3Qg
eyAxIH0gPDwgaikgPj4gKGogLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEodWludDY0X3Qg
eyAxIH0gPDwgaSwgV1RGOjpJbnQxMjhJbXBsKHVpbnQ2NF90IHsgMSB9IDw8IGopID4+PSAoaiAt
IGkpKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDYzOyArK2opIHsK
KyAgICAgICAgICAgIC8vIFJpZ2h0IHNoaWZ0IGZyb20gKGogKyA2NCktdGggYml0IHRvIGktdGgg
Yml0LgorICAgICAgICAgICAgU0NPUEVEX1RSQUNFKDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJp
ID0gIiA8PCBpIDw8ICI7IGogPSAiIDw8IGopOworICAgICAgICAgICAgRVhQRUNUX0VRKHVpbnQ2
NF90IHsgMSB9IDw8IGksCisgICAgICAgICAgICAgICAgV1RGOjpNYWtlSW50MTI4KHVpbnQ2NF90
IHsgMSB9IDw8IGosIDApID4+IChqICsgNjQgLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
dWludDY0X3QgeyAxIH0gPDwgaSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWlu
dDY0X3QgeyAxIH0gPDwgaiwgMCkgPj49IChqICsgNjQgLSBpKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2MzsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGog
PSBpOyBqIDwgNjM7ICsraikgeworICAgICAgICAgICAgLy8gUmlnaHQgc2hpZnQgZnJvbSAoaiAr
IDY0KS10aCBiaXQgdG8gKGkgKyA2NCktdGggYml0LgorICAgICAgICAgICAgU0NPUEVEX1RSQUNF
KDo6dGVzdGluZzo6TWVzc2FnZSgpIDw8ICJpID0gIiA8PCBpIDw8ICI7IGogPSAiIDw8IGopOwor
ICAgICAgICAgICAgRVhQRUNUX0VRKFdURjo6TWFrZUludDEyOCh1aW50NjRfdCB7IDEgfSA8PCBp
LCAwKSwKKyAgICAgICAgICAgICAgICBXVEY6Ok1ha2VJbnQxMjgodWludDY0X3QgeyAxIH0gPDwg
aiwgMCkgPj4gKGogLSBpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoV1RGOjpNYWtlSW50MTI4
KHVpbnQ2NF90IHsgMSB9IDw8IGksIDApLAorICAgICAgICAgICAgICAgIFdURjo6TWFrZUludDEy
OCh1aW50NjRfdCB7IDEgfSA8PCBqLCAwKSA+Pj0gKGogLSBpKSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK1RFU1QoV1RGX0ludDEyOCwgTnVtZXJpY0xpbWl0c1Rlc3QpCit7CisgICAgc3RhdGlj
X2Fzc2VydChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46OmlzX3NwZWNpYWxp
emVkLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50
MTI4SW1wbD46OmlzX3NpZ25lZCwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmlj
X2xpbWl0czxXVEY6OkludDEyOEltcGw+Ojppc19pbnRlZ2VyLCAiIik7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PGludD4oMTI3ICogc3RkOjpsb2cxMCgyKSksCisgICAgICAgIHN0ZDo6bnVt
ZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6ZGlnaXRzMTApOworICAgIEVYUEVDVF9FUShX
VEY6OkludDEyOE1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPFdURjo6SW50MTI4SW1wbD46Om1p
bigpKTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpJbnQxMjhNaW4oKSwgc3RkOjpudW1lcmljX2xpbWl0
czxXVEY6OkludDEyOEltcGw+Ojpsb3dlc3QoKSk7CisgICAgRVhQRUNUX0VRKFdURjo6SW50MTI4
TWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8V1RGOjpJbnQxMjhJbXBsPjo6bWF4KCkpOworfQor
CisjaWYgSEFWRShJTlQxMjhfVCkKK3N0YXRpYyBfX3VpbnQxMjhfdCBUb05hdGl2ZVVJbnQxMjgo
V1RGOjpVSW50MTI4SW1wbCBuKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxfX3VpbnQxMjhf
dD4oc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obiA+PiA2NCkpIDw8IDY0IHwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obik7Cit9CisKK3N0YXRpYyBXVEY6OlVJbnQxMjhJ
bXBsIEZyb21OYXRpdmVVSW50MTI4KF9fdWludDEyOF90IG4pCit7CisgICAgcmV0dXJuIFdURjo6
VUludDEyOEltcGwgeyBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihuID4+IDY0KX0gPDwgNjQg
fCBXVEY6OlVJbnQxMjhJbXBsIHsgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obikgfTsKK30K
Kworc3RhdGljIF9faW50MTI4X3QgVG9OYXRpdmVJbnQxMjgoV1RGOjpJbnQxMjhJbXBsIG4pCit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9faW50MTI4X3Q+KFRvTmF0aXZlVUludDEyOChzdGF0
aWNfY2FzdDxXVEY6OlVJbnQxMjhJbXBsPihuKSkpOworfQorCitzdGF0aWMgV1RGOjpJbnQxMjhJ
bXBsIEZyb21OYXRpdmVJbnQxMjgoX19pbnQxMjhfdCBuKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXVEY6OkludDEyOEltcGw+KEZyb21OYXRpdmVVSW50MTI4KHN0YXRpY19jYXN0PF9fdWlu
dDEyOF90PihuKSkpOworfQorCitzdGF0aWMgdm9pZCBUZXN0QmluYXJ5VUludDEyOChzdGQ6OnVp
bnQ2NF90IHgsIHN0ZDo6dWludDY0X3QgeSkKK3sKKyAgICBXVEY6OlVJbnQxMjhJbXBsIG0geyB4
IH0sIG4geyB5IH07CiAgICAgRVhQRUNUX0VRKHgsIHN0YXRpY19jYXN0PHN0ZDo6dWludDY0X3Q+
KG0pKTsKICAgICBFWFBFQ1RfRVEoeSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obikpOwog
ICAgIEVYUEVDVF9FUSh4ICYgeSwgc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obSAmIG4pKTsK
QEAgLTUzLDkzICsxMjM2LDEzMSBAQCBzdGF0aWMgdm9pZCBUZXN0QmluYXJ5KHN0ZDo6dWludDY0
X3QgeCwgc3RkOjp1aW50NjRfdCB5KQogICAgICAgICBFWFBFQ1RfRVEoeCAvIHksIHN0YXRpY19j
YXN0PHN0ZDo6dWludDY0X3Q+KG0gLyBuKSk7CiB9CiAKLVRFU1QoV1RGX0ludDEyOCwgQmFzaWMp
Ci17Ci0gICAgZm9yIChzdGQ6OnVpbnQ2NF90IGogezB9OyBqIDwgNjQ7ICsraikgewotICAgICAg
ICBUZXN0VW5hcnkoaik7Ci0gICAgICAgIFRlc3RVbmFyeSh+aik7Ci0gICAgICAgIFRlc3RVbmFy
eShzdGQ6OnVpbnQ2NF90KDEpIDw8IGopOwotICAgICAgICBmb3IgKHN0ZDo6dWludDY0X3QgayB7
MH07IGsgPCA2NDsgKytrKQotICAgICAgICAgICAgVGVzdEJpbmFyeShqLCBrKTsKLSAgICB9Ci19
Ci0KLSNpZiBIQVZFKElOVDEyOF9UKQotc3RhdGljIF9fdWludDEyOF90IFRvTmF0aXZlKE5vbk5h
dGl2ZVVJbnQxMjggbikKK3N0YXRpYyB2b2lkIFRlc3RCaW5hcnlJbnQxMjgoc3RkOjppbnQ2NF90
IHgsIHN0ZDo6aW50NjRfdCB5KQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxfX3VpbnQxMjhf
dD4oc3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obiA+PiA2NCkpIDw8IDY0IHwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8c3RkOjp1aW50NjRfdD4obik7CisgICAgV1RGOjpJbnQxMjhJbXBsIG0geyB4
IH0sIG4geyB5IH07CisgICAgRVhQRUNUX0VRKHgsIHN0YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4o
bSkpOworICAgIEVYUEVDVF9FUSh5LCBzdGF0aWNfY2FzdDxzdGQ6OmludDY0X3Q+KG4pKTsKKyAg
ICBFWFBFQ1RfRVEoeCAmIHksIHN0YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4obSAmIG4pKTsKKyAg
ICBFWFBFQ1RfRVEoeCB8IHksIHN0YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4obSB8IG4pKTsKKyAg
ICBFWFBFQ1RfRVEoeCBeIHksIHN0YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4obSBeIG4pKTsKKyAg
ICBFWFBFQ1RfRVEoeCArIHksIHN0YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4obSArIG4pKTsKKyAg
ICBFWFBFQ1RfRVEoeCAtIHksIHN0YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4obSAtIG4pKTsKKyAg
ICBFWFBFQ1RfRVEoeCAqIHksIHN0YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4obSAqIG4pKTsKKyAg
ICBpZiAobikKKyAgICAgICAgRVhQRUNUX0VRKHggLyB5LCBzdGF0aWNfY2FzdDxzdGQ6OmludDY0
X3Q+KG0gLyBuKSk7CiB9CiAKLXN0YXRpYyBOb25OYXRpdmVVSW50MTI4IEZyb21OYXRpdmUoX191
aW50MTI4X3QgbikKK3N0YXRpYyB2b2lkIFRlc3RWc05hdGl2ZVVJbnQxMjgoX191aW50MTI4X3Qg
eCwgX191aW50MTI4X3QgeSkKIHsKLSAgICByZXR1cm4gTm9uTmF0aXZlVUludDEyOCB7IHN0YXRp
Y19jYXN0PHN0ZDo6dWludDY0X3Q+KG4gPj4gNjQpfSA8PCA2NCB8IE5vbk5hdGl2ZVVJbnQxMjgg
eyBzdGF0aWNfY2FzdDxzdGQ6OnVpbnQ2NF90PihuKSB9OworICAgIFdURjo6VUludDEyOEltcGwg
bSB7IEZyb21OYXRpdmVVSW50MTI4KHgpIH0sIG4geyBGcm9tTmF0aXZlVUludDEyOCh5KSB9Owor
ICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlVUludDEyOChtKSA9PSB4KTsKKyAgICBFWFBFQ1RfVFJV
RShUb05hdGl2ZVVJbnQxMjgobikgPT0geSk7CisgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmVVSW50
MTI4KH5tKSA9PSB+eCk7CisgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmVVSW50MTI4KC1tKSA9PSAt
eCk7CisgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmVVSW50MTI4KCFtKSA9PSAheCk7CisgICAgRVhQ
RUNUX1RSVUUoVG9OYXRpdmVVSW50MTI4KG0gPCBuKSA9PSAoeCA8IHkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShUb05hdGl2ZVVJbnQxMjgobSA8PSBuKSA9PSAoeCA8PSB5KSk7CisgICAgRVhQRUNUX1RS
VUUoVG9OYXRpdmVVSW50MTI4KG0gPT0gbikgPT0gKHggPT0geSkpOworICAgIEVYUEVDVF9UUlVF
KFRvTmF0aXZlVUludDEyOChtICE9IG4pID09ICh4ICE9IHkpKTsKKyAgICBFWFBFQ1RfVFJVRShU
b05hdGl2ZVVJbnQxMjgobSA+PSBuKSA9PSAoeCA+PSB5KSk7CisgICAgRVhQRUNUX1RSVUUoVG9O
YXRpdmVVSW50MTI4KG0gPiBuKSA9PSAoeCA+IHkpKTsKKyAgICBFWFBFQ1RfVFJVRShUb05hdGl2
ZVVJbnQxMjgobSAmIG4pID09ICh4ICYgeSkpOworICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlVUlu
dDEyOChtIHwgbikgPT0gKHggfCB5KSk7CisgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmVVSW50MTI4
KG0gXiBuKSA9PSAoeCBeIHkpKTsKKyAgICBpZiAoeSA8IDEyOCkgeworICAgICAgICBFWFBFQ1Rf
VFJVRShUb05hdGl2ZVVJbnQxMjgobSA8PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obikpID09ICh4
IDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih5KSkpIDw8IG47CisgICAgICAgIEVYUEVDVF9UUlVF
KFRvTmF0aXZlVUludDEyOChtID4+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihuKSkgPT0gKHggPj4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHkpKSkgPDwgbjsKKyAgICB9CisgICAgRVhQRUNUX1RSVUUo
VG9OYXRpdmVVSW50MTI4KG0gKyBuKSA9PSAoeCArIHkpKTsKKyAgICBFWFBFQ1RfVFJVRShUb05h
dGl2ZVVJbnQxMjgobSAtIG4pID09ICh4IC0geSkpOworICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZl
VUludDEyOChtICogbikgPT0gKHggKiB5KSk7CisgICAgaWYgKHkgPiAwKSB7CisgICAgICAgIEVY
UEVDVF9UUlVFKFRvTmF0aXZlVUludDEyOChtIC8gbikgPT0gKHggLyB5KSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKFRvTmF0aXZlVUludDEyOChtICUgbikgPT0gKHggJSB5KSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKFRvTmF0aXZlVUludDEyOChtIC0gbiAqIChtIC8gbikpID09ICh4ICUgeSkpOwor
ICAgIH0KIH0KIAotc3RhdGljIHZvaWQgVGVzdFZzTmF0aXZlKF9fdWludDEyOF90IHgsIF9fdWlu
dDEyOF90IHkpCitzdGF0aWMgdm9pZCBUZXN0VnNOYXRpdmVJbnQxMjgoX19pbnQxMjhfdCB4LCBf
X2ludDEyOF90IHkpCiB7Ci0gICAgTm9uTmF0aXZlVUludDEyOCBtIHsgRnJvbU5hdGl2ZSh4KSB9
LCBuIHsgRnJvbU5hdGl2ZSh5KSB9OwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0pID09IHgp
OwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG4pID09IHkpOwotICAgIEVYUEVDVF9UUlVFKFRv
TmF0aXZlKH5tKSA9PSB+eCk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUoLW0pID09IC14KTsK
LSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZSghbSkgPT0gIXgpOwotICAgIEVYUEVDVF9UUlVFKFRv
TmF0aXZlKG0gPCBuKSA9PSAoeCA8IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtIDw9
IG4pID09ICh4IDw9IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtID09IG4pID09ICh4
ID09IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtICE9IG4pID09ICh4ICE9IHkpKTsK
LSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtID49IG4pID09ICh4ID49IHkpKTsKLSAgICBFWFBF
Q1RfVFJVRShUb05hdGl2ZShtID4gbikgPT0gKHggPiB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9O
YXRpdmUobSAmIG4pID09ICh4ICYgeSkpOwotICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gfCBu
KSA9PSAoeCB8IHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtIF4gbikgPT0gKHggXiB5
KSk7Ci0gICAgaWYgKHkgPCAxMjgpIHsKLSAgICAgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSA8
PCBuKSA9PSAoeCA8PCB5KSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gPj4gbikg
PT0gKHggPj4geSkpOworICAgIFdURjo6SW50MTI4SW1wbCBtIHsgRnJvbU5hdGl2ZUludDEyOCh4
KSB9LCBuIHsgRnJvbU5hdGl2ZUludDEyOCh5KSB9OworICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZl
SW50MTI4KG0pID09IHgpOworICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlSW50MTI4KG4pID09IHkp
OworICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlSW50MTI4KH5tKSA9PSB+eCk7CisgICAgRVhQRUNU
X1RSVUUoVG9OYXRpdmVJbnQxMjgoLW0pID09IC14KTsKKyAgICBFWFBFQ1RfVFJVRShUb05hdGl2
ZUludDEyOCghbSkgPT0gIXgpOworICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlSW50MTI4KG0gPCBu
KSA9PSAoeCA8IHkpKTsKKyAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZUludDEyOChtIDw9IG4pID09
ICh4IDw9IHkpKTsKKyAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZUludDEyOChtID09IG4pID09ICh4
ID09IHkpKTsKKyAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZUludDEyOChtICE9IG4pID09ICh4ICE9
IHkpKTsKKyAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZUludDEyOChtID49IG4pID09ICh4ID49IHkp
KTsKKyAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZUludDEyOChtID4gbikgPT0gKHggPiB5KSk7Cisg
ICAgRVhQRUNUX1RSVUUoVG9OYXRpdmVJbnQxMjgobSAmIG4pID09ICh4ICYgeSkpOworICAgIEVY
UEVDVF9UUlVFKFRvTmF0aXZlSW50MTI4KG0gfCBuKSA9PSAoeCB8IHkpKTsKKyAgICBFWFBFQ1Rf
VFJVRShUb05hdGl2ZUludDEyOChtIF4gbikgPT0gKHggXiB5KSk7CisgICAgaWYgKHkgPCAxMjgg
JiYgeSA+PSAwKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlSW50MTI4KG0gPDwgc3Rh
dGljX2Nhc3Q8aW50PihuKSkgPT0gKHggPDwgc3RhdGljX2Nhc3Q8aW50Pih5KSkpIDw8IG47Cisg
ICAgICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlSW50MTI4KG0gPj4gc3RhdGljX2Nhc3Q8aW50Pihu
KSkgPT0gKHggPj4gc3RhdGljX2Nhc3Q8aW50Pih5KSkpIDw8IG47CiAgICAgfQotICAgIEVYUEVD
VF9UUlVFKFRvTmF0aXZlKG0gKyBuKSA9PSAoeCArIHkpKTsKLSAgICBFWFBFQ1RfVFJVRShUb05h
dGl2ZShtIC0gbikgPT0gKHggLSB5KSk7Ci0gICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAqIG4p
ID09ICh4ICogeSkpOworICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlSW50MTI4KG0gKyBuKSA9PSAo
eCArIHkpKTsKKyAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZUludDEyOChtIC0gbikgPT0gKHggLSB5
KSk7CisgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmVJbnQxMjgobSAqIG4pID09ICh4ICogeSkpOwog
ICAgIGlmICh5ID4gMCkgewotICAgICAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZShtIC8gbikgPT0g
KHggLyB5KSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlKG0gJSBuKSA9PSAoeCAlIHkp
KTsKLSAgICAgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmUobSAtIG4gKiAobSAvIG4pKSA9PSAoeCAl
IHkpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoVG9OYXRpdmVJbnQxMjgobSAvIG4pID09ICh4IC8g
eSkpOworICAgICAgICBFWFBFQ1RfVFJVRShUb05hdGl2ZUludDEyOChtICUgbikgPT0gKHggJSB5
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFRvTmF0aXZlSW50MTI4KG0gLSBuICogKG0gLyBuKSkg
PT0gKHggJSB5KSk7CiAgICAgfQogfQogCi1URVNUKFdURl9JbnQxMjgsIFZzTmF0aXZlKQorVEVT
VChXVEZfSW50MTI4LCBWc05hdGl2ZVVJbnQxMjgpCiB7Ci0gICAgR1RFU1RfTE9HXyhJTkZPKSA8
PCAiRW52aXJvbm1lbnQgaGFzIG5hdGl2ZSBfX3VpbnQxMjhfdCI7Ci0KLSAgICBmb3IgKGludCBq
IHswfTsgaiA8IDEyODsgKytqKSB7Ci0gICAgICAgIGZvciAoaW50IGsgezB9OyBrIDwgMTI4OyAr
K2spIHsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IDEyODsgKytqKSB7CisgICAgICAgIGZvciAo
aW50IGsgPSAwOyBrIDwgMTI4OyArK2spIHsKICAgICAgICAgICAgIF9fdWludDEyOF90IG0geyAx
IH0sIG4geyAxIH07CiAgICAgICAgICAgICBtIDw8PSBqOwogICAgICAgICAgICAgbiA8PD0gazsK
LSAgICAgICAgICAgIFRlc3RWc05hdGl2ZShtLCBuKTsKLSAgICAgICAgICAgIFRlc3RWc05hdGl2
ZSh+bSwgbik7Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUobSwgfm4pOwotICAgICAgICAgICAg
VGVzdFZzTmF0aXZlKH5tLCB+bik7Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUobSBeIG4sIG4p
OwotICAgICAgICAgICAgVGVzdFZzTmF0aXZlKG0sIG0gXiBuKTsKLSAgICAgICAgICAgIFRlc3RW
c05hdGl2ZShtIF4gfm4sIG4pOwotICAgICAgICAgICAgVGVzdFZzTmF0aXZlKG0sIH5tIF4gbik7
Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUobSBeIH5uLCBtIF4gbik7Ci0gICAgICAgICAgICBU
ZXN0VnNOYXRpdmUobSBeIG4sIH5tIF4gbik7Ci0gICAgICAgICAgICBUZXN0VnNOYXRpdmUobSBe
IH5uLCB+bSBeIG4pOwotICAgICAgICAgICAgVGVzdEJpbmFyeShtLCAxMDAwMDAwMDAwMDAwMDAw
MCk7IC8vIGltcG9ydGFudCBjYXNlIGZvciBkZWNpbWFsIGNvbnZlcnNpb24KLSAgICAgICAgICAg
IFRlc3RCaW5hcnkofm0sIDEwMDAwMDAwMDAwMDAwMDAwKTsKKyAgICAgICAgICAgIFRlc3RWc05h
dGl2ZVVJbnQxMjgobSwgbik7CisgICAgICAgICAgICBUZXN0VnNOYXRpdmVVSW50MTI4KH5tLCBu
KTsKKyAgICAgICAgICAgIFRlc3RWc05hdGl2ZVVJbnQxMjgobSwgfm4pOworICAgICAgICAgICAg
VGVzdFZzTmF0aXZlVUludDEyOCh+bSwgfm4pOworICAgICAgICAgICAgVGVzdFZzTmF0aXZlVUlu
dDEyOChtIF4gbiwgbik7CisgICAgICAgICAgICBUZXN0VnNOYXRpdmVVSW50MTI4KG0sIG0gXiBu
KTsKKyAgICAgICAgICAgIFRlc3RWc05hdGl2ZVVJbnQxMjgobSBeIH5uLCBuKTsKKyAgICAgICAg
ICAgIFRlc3RWc05hdGl2ZVVJbnQxMjgobSwgfm0gXiBuKTsKKyAgICAgICAgICAgIFRlc3RWc05h
dGl2ZVVJbnQxMjgobSBeIH5uLCBtIF4gbik7CisgICAgICAgICAgICBUZXN0VnNOYXRpdmVVSW50
MTI4KG0gXiBuLCB+bSBeIG4pOworICAgICAgICAgICAgVGVzdFZzTmF0aXZlVUludDEyOChtIF4g
fm4sIH5tIF4gbik7CisgICAgICAgICAgICBUZXN0QmluYXJ5VUludDEyOChtLCAxMDAwMDAwMDAw
MDAwMDAwMCk7IC8vIGltcG9ydGFudCBjYXNlIGZvciBkZWNpbWFsIGNvbnZlcnNpb24KKyAgICAg
ICAgICAgIFRlc3RCaW5hcnlVSW50MTI4KH5tLCAxMDAwMDAwMDAwMDAwMDAwMCk7CiAgICAgICAg
IH0KICAgICB9CiB9CiAKLSNlbHNlIC8vICFIQVZFKElOVDEyOF9UKQotCi1URVNUKFdURl9JbnQx
MjgsIFZzTmF0aXZlKQorVEVTVChXVEZfSW50MTI4LCBWc05hdGl2ZUludDEyOCkKIHsKLSAgICBH
VEVTVF9MT0dfKElORk8pIDw8ICJFbnZpcm9ubWVudCBsYWNrcyBuYXRpdmUgX191aW50MTI4X3Qi
OworICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTI4OyArK2opIHsKKyAgICAgICAgZm9yIChpbnQg
ayA9IDA7IGsgPCAxMjg7ICsraykgeworICAgICAgICAgICAgX19pbnQxMjhfdCBtIHsgMSB9LCBu
IHsgMSB9OworICAgICAgICAgICAgbSA8PD0gajsKKyAgICAgICAgICAgIG4gPDw9IGs7CisgICAg
ICAgICAgICBUZXN0VnNOYXRpdmVJbnQxMjgobSwgbik7CisgICAgICAgICAgICBUZXN0VnNOYXRp
dmVJbnQxMjgofm0sIG4pOworICAgICAgICAgICAgVGVzdFZzTmF0aXZlSW50MTI4KG0sIH5uKTsK
KyAgICAgICAgICAgIFRlc3RWc05hdGl2ZUludDEyOCh+bSwgfm4pOworICAgICAgICAgICAgVGVz
dFZzTmF0aXZlSW50MTI4KG0gXiBuLCBuKTsKKyAgICAgICAgICAgIFRlc3RWc05hdGl2ZUludDEy
OChtLCBtIF4gbik7CisgICAgICAgICAgICBUZXN0VnNOYXRpdmVJbnQxMjgobSBeIH5uLCBuKTsK
KyAgICAgICAgICAgIFRlc3RWc05hdGl2ZUludDEyOChtLCB+bSBeIG4pOworICAgICAgICAgICAg
VGVzdFZzTmF0aXZlSW50MTI4KG0gXiB+biwgbSBeIG4pOworICAgICAgICAgICAgVGVzdFZzTmF0
aXZlSW50MTI4KG0gXiBuLCB+bSBeIG4pOworICAgICAgICAgICAgVGVzdFZzTmF0aXZlSW50MTI4
KG0gXiB+biwgfm0gXiBuKTsKKyAgICAgICAgICAgIFRlc3RCaW5hcnlJbnQxMjgobSwgMTAwMDAw
MDAwMDAwMDAwMDApOyAvLyBpbXBvcnRhbnQgY2FzZSBmb3IgZGVjaW1hbCBjb252ZXJzaW9uCisg
ICAgICAgICAgICBUZXN0QmluYXJ5SW50MTI4KH5tLCAxMDAwMDAwMDAwMDAwMDAwMCk7CisgICAg
ICAgIH0KKyAgICB9CiB9CiAKLSNlbmRpZiAvLyAhSEFWRShJTlQxMjhfVCkKKyNlbmRpZgogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9MZWFkaW5nWmVyb0JpdENvdW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0xlYWRpbmdaZXJvQml0Q291bnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3NTljYzBiNzE4ZTQyMzg4NWM4ZTUyMWQ5MTA5MWFhZTRkNDAzMzAzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0xlYWRpbmdaZXJvQml0Q291bnQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDUgKzAsMCBAQAotLy8gVGFrZW4gZnJvbSBMTFZNIFByb2plY3QsIHVuZGVyIHRoZSBBcGFj
aGUgTGljZW5zZSB2Mi4wIHdpdGggTExWTSBFeGNlcHRpb25zLgotLy8gU2VlIFNvdXJjZS9XVEYv
TElDRU5TRS1MTFZNLnR4dCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4KLS8vIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIFdJVEggTExWTS1leGNlcHRpb24KLQotLy8gQmFzZWQg
b246Ci0vLyBodHRwczovL2dpdGh1Yi5jb20vbGx2bS9sbHZtLXByb2plY3QvYmxvYi9kNDgwZjk2
OC9mbGFuZy91bml0dGVzdHMvRXZhbHVhdGUvbGVhZGluZy16ZXJvLWJpdC1jb3VudC5jcHAKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPHd0Zi9MZWFkaW5nWmVyb0JpdENvdW50Lmg+
Ci0KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBJbnRUeXBlPgotc3Rh
dGljIGJvb2wgY291bnRXaXRoVHdvU2hpZnRlZEJpdHMoaW50IGosIGludCBrKQotewotICAgIElu
dFR5cGUgeCA9IChJbnRUeXBlIHsxfSA8PCBqKSB8IChJbnRUeXBlIHsxfSA8PCBrKTsKLSAgICBy
ZXR1cm4gbGVhZGluZ1plcm9CaXRDb3VudCh4KSA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPEludFR5
cGU+OjpkaWdpdHMgLSAxIC0gajsKLX0KLQotVEVTVChXVEZfTGVhZGluZ1plcm9CaXRDb3VudCwg
QmFzaWMpCi17Ci0gICAgRVhQRUNUX0VRKGxlYWRpbmdaZXJvQml0Q291bnQoc3RkOjp1aW50NjRf
dCB7MH0pLCA2NCk7Ci0gICAgZm9yIChpbnQgaiB7MH07IGogPCA2NDsgKytqKSB7Ci0gICAgICAg
IGZvciAoaW50IGsgezB9OyBrIDwgajsgKytrKQotICAgICAgICAgICAgRVhQRUNUX1BSRUQyKGNv
dW50V2l0aFR3b1NoaWZ0ZWRCaXRzPHN0ZDo6dWludDY0X3Q+LCBqLCBrKTsKLSAgICB9Ci0KLSAg
ICBFWFBFQ1RfRVEobGVhZGluZ1plcm9CaXRDb3VudChzdGQ6OnVpbnQzMl90IHswfSksIDMyKTsK
LSAgICBmb3IgKGludCBqIHswfTsgaiA8IDMyOyArK2opIHsKLSAgICAgICAgZm9yIChpbnQgayB7
MH07IGsgPCBqOyArK2spCi0gICAgICAgICAgICBFWFBFQ1RfUFJFRDIoY291bnRXaXRoVHdvU2hp
ZnRlZEJpdHM8c3RkOjp1aW50MzJfdD4sIGosIGspOwotICAgIH0KLQotICAgIEVYUEVDVF9FUShs
ZWFkaW5nWmVyb0JpdENvdW50KHN0ZDo6dWludDE2X3QgezB9KSwgMTYpOwotICAgIGZvciAoaW50
IGogezB9OyBqIDwgMTY7ICsraikgewotICAgICAgICBmb3IgKGludCBrIHswfTsgayA8IGo7ICsr
aykKLSAgICAgICAgICAgIEVYUEVDVF9QUkVEMihjb3VudFdpdGhUd29TaGlmdGVkQml0czxzdGQ6
OnVpbnQxNl90Piwgaiwgayk7Ci0gICAgfQotCi0gICAgRVhQRUNUX0VRKGxlYWRpbmdaZXJvQml0
Q291bnQoc3RkOjp1aW50OF90IHswfSksIDgpOwotICAgIGZvciAoaW50IGogezB9OyBqIDwgODsg
KytqKSB7Ci0gICAgICAgIGZvciAoaW50IGsgezB9OyBrIDwgajsgKytrKQotICAgICAgICAgICAg
RVhQRUNUX1BSRUQyKGNvdW50V2l0aFR3b1NoaWZ0ZWRCaXRzPHN0ZDo6dWludDhfdD4sIGosIGsp
OwotICAgIH0KLX0K
</data>

          </attachment>
      

    </bug>

</bugzilla>