<?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>240443</bug_id>
          
          <creation_ts>2022-05-15 21:46:36 -0700</creation_ts>
          <short_desc>Add ARM64 disassembler support for symbolic dumping of some well known constants.</short_desc>
          <delta_ts>2022-05-17 02:13:58 -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>JavaScriptCore</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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1869126</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-15 21:46:36 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869127</commentid>
    <comment_count>1</comment_count>
      <attachid>459388</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-15 21:47:22 -0700</bug_when>
    <thetext>Created attachment 459388
patch for EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869134</commentid>
    <comment_count>2</comment_count>
      <attachid>459393</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-15 22:22:05 -0700</bug_when>
    <thetext>Created attachment 459393
for EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869138</commentid>
    <comment_count>3</comment_count>
      <attachid>459397</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-15 22:43:06 -0700</bug_when>
    <thetext>Created attachment 459397
for EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869142</commentid>
    <comment_count>4</comment_count>
      <attachid>459399</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-15 23:01:36 -0700</bug_when>
    <thetext>Created attachment 459399
EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869143</commentid>
    <comment_count>5</comment_count>
      <attachid>459400</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-15 23:08:01 -0700</bug_when>
    <thetext>Created attachment 459400
EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869147</commentid>
    <comment_count>6</comment_count>
      <attachid>459404</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-15 23:22:49 -0700</bug_when>
    <thetext>Created attachment 459404
EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869149</commentid>
    <comment_count>7</comment_count>
      <attachid>459405</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-15 23:27:23 -0700</bug_when>
    <thetext>Created attachment 459405
EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869150</commentid>
    <comment_count>8</comment_count>
      <attachid>459406</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-15 23:37:44 -0700</bug_when>
    <thetext>Created attachment 459406
EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869388</commentid>
    <comment_count>9</comment_count>
      <attachid>459451</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-16 13:30:14 -0700</bug_when>
    <thetext>Created attachment 459451
EWS testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869516</commentid>
    <comment_count>10</comment_count>
      <attachid>459468</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-16 17:46:06 -0700</bug_when>
    <thetext>Created attachment 459468
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869525</commentid>
    <comment_count>11</comment_count>
      <attachid>459468</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-05-16 18:09:57 -0700</bug_when>
    <thetext>Comment on attachment 459468
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:119
&gt; +        7. Enhanced the Integrity::isSanePointer() check to reject pointer values that
&gt; +           are less than 4G on CPU(ADDRESS64) targets.  No sane pointer should be in the
&gt; +           lowest 4G address region.
&gt; +
&gt; +           This also helps the disassembler more quickly filter out constant values that
&gt; +           aren&apos;t pointers.
&gt; +
&gt; +           This change affects DFG&apos;s speculationFromCell(), which is the only place that
&gt; +           may affect user facing performance.  However, I think the impact should be
&gt; +           insignificant (since the added check is cheap).

Is it true for all supported OSes (Windows, Linux, FreeBSD)? Or, should we have `OS(DARWIN)` guard?

&gt; Source/JavaScriptCore/disassembler/Disassembler.cpp:52
&gt; +using LabelMap = HashMap&lt;void*, std::variant&lt;CString, const char*&gt;&gt;;
&gt; +LazyNeverDestroyed&lt;LabelMap&gt; labelMap;
&gt; +
&gt; +static LabelMap&amp; ensureLabelMap()
&gt; +{
&gt; +    static std::once_flag onceKey;
&gt; +    std::call_once(onceKey, [] {
&gt; +        labelMap.construct();
&gt; +    });
&gt; +    return labelMap.get();
&gt; +}

We need a lock around access to this hashmap since concurrent compilers &amp; concurrent VMs on workers can put things into this hashmap.

&gt; Source/WTF/ChangeLog:13
&gt; +USE(APPLE_INTERNAL_SDK) &amp;&amp; ENABLE(DISASSEMBLER) &amp;&amp; CPU(ARM64E)

Is it a typo?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869529</commentid>
    <comment_count>12</comment_count>
      <attachid>459468</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-16 18:19:04 -0700</bug_when>
    <thetext>Comment on attachment 459468
proposed patch.

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

Thanks for the review.

&gt;&gt; Source/JavaScriptCore/ChangeLog:119
&gt;&gt; +           insignificant (since the added check is cheap).
&gt; 
&gt; Is it true for all supported OSes (Windows, Linux, FreeBSD)? Or, should we have `OS(DARWIN)` guard?

I recall that this is true, but maybe I might have remembered wrongly.  I&apos;ll add the OS(DARWIN) guard to be safe.

&gt;&gt; Source/JavaScriptCore/disassembler/Disassembler.cpp:52
&gt;&gt; +}
&gt; 
&gt; We need a lock around access to this hashmap since concurrent compilers &amp; concurrent VMs on workers can put things into this hashmap.

I was thinking that all initialization happens at boot, but that&apos;s actually not true.  Thunks can be added lazily IIRC.  I&apos;ll add a lock.

&gt;&gt; Source/WTF/ChangeLog:13
&gt;&gt; +USE(APPLE_INTERNAL_SDK) &amp;&amp; ENABLE(DISASSEMBLER) &amp;&amp; CPU(ARM64E)
&gt; 
&gt; Is it a typo?

Fixed.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869540</commentid>
    <comment_count>13</comment_count>
      <attachid>459471</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-16 18:46:27 -0700</bug_when>
    <thetext>Created attachment 459471
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869577</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-05-16 22:22:35 -0700</bug_when>
    <thetext>Landed in r294287: &lt;http://trac.webkit.org/r294287&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1869578</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-05-16 22:23:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/93398681&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459388</attachid>
            <date>2022-05-15 21:47:22 -0700</date>
            <delta_ts>2022-05-15 22:22:05 -0700</delta_ts>
            <desc>patch for EWS testing.</desc>
            <filename>wip-disassemble-operations2.patch</filename>
            <type>text/plain</type>
            <size>42410</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1NiwxMCArMzc1Niw4IEBA
IGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVybiBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCBf
X2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsIF9fYXNt
KCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7Ci0jZW5kaWYKIAogaW50IGpz
Y21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpAQCAtMzc4Myw2ICszNzgxLDExIEBAIGlu
dCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVy
c0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCwgJmVuZE9mSklUT3BlcmF0
aW9uc0luU2hlbGwpOwogI2VuZGlmCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlND
OjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigm
c3RhcnRPZkpJVE9wZXJhdGlvbnNJblNoZWxsLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7
CisjZW5kaWYKKwogICAgIGluaXRpYWxpemVUaW1lb3V0SWZOZWVkZWQoKTsKIAogI2lmIE9TKERB
UldJTikgfHwgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0pJVE9wZXJhdGlvbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSklUT3BlcmF0aW9uTGlzdC5oIgogCisjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5j
bHVkZSAiR2F0ZS5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvblZhbGlkYXRpb24uaCIKICNpbmNs
dWRlICJMTEludERhdGEuaCIKQEAgLTMzLDEzICszNCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCi0KIExhenlOZXZlckRlc3Ry
b3llZDxKSVRPcGVyYXRpb25MaXN0PiBqaXRPcGVyYXRpb25MaXN0OwogCiBleHRlcm4gY29uc3Qg
SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luSlNDIF9fYXNtKCJz
ZWN0aW9uJHN0YXJ0JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKSVRP
cGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9uc0luSlNDIF9fYXNtKCJzZWN0aW9u
JGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQorCiB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OmluaXRpYWxpemUoKQogewog
ICAgIGppdE9wZXJhdGlvbkxpc3QuY29uc3RydWN0KCk7CkBAIC04NSw5ICs4NiwxMyBAQCB2b2lk
IEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJCiAgICAgc3RkOjpjYWxsX29uY2Uo
b25jZUtleSwgW10gewogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgICAg
ICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2ludGVycygmc3RhcnRPZkpJVE9wZXJhdGlvbnNJbkpT
QywgJmVuZE9mSklUT3BlcmF0aW9uc0luSlNDKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlv
bnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgICAgICBwb3B1bGF0ZURpc2Fz
c2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgpOwogICAgIH0pOwogfQogCisjZW5kaWYgLy8g
RU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKwogTExJTlRfREVDTEFSRV9ST1VUSU5F
X1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xB
UkVfUk9VVElORV9WQUxJREFURShsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3Vl
KTsKIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9hcml0eV9jaGVjayk7CkBAIC0xMDQsMzEgKzEwOSw0MyBAQCBMTElOVF9ERUNMQVJFX1JPVVRJ
TkVfVkFMSURBVEUoY2hlY2twb2luCiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUobm9y
bWFsX29zcl9leGl0X3RyYW1wb2xpbmUpOwogTExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRF
KGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQpOwogCi12b2lkIEpJVE9wZXJhdGlv
bkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKQotewotICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VL
ZXksIFtdIHsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2RlZmluZSBM
TElOVF9PUF9FWFRSQVModmFsaWRhdGVMYWJlbCwgbmFtZVN0cikgYml0d2lzZV9jYXN0PHZvaWQq
Pih2YWxpZGF0ZUxhYmVsKSwgbmFtZVN0cgorI2Vsc2UKKyNkZWZpbmUgTExJTlRfT1BfRVhUUkFT
KHZhbGlkYXRlTGFiZWwsIG5hbWVTdHIpIG5hbWVTdHIKKyNlbmRpZgogCiAjZGVmaW5lIExMSU5U
X1JPVVRJTkUoZnVuY3Rpb25OYW1lKSB7IFwKICAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihM
TEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4oZnVuY3Rpb25OYW1lKSks
IFwKLSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9ST1VUSU5FX1ZBTElEQVRFKGZ1
bmN0aW9uTmFtZSkpIFwKKyAgICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JPVVRJTkVfVkFM
SURBVEUoZnVuY3Rpb25OYW1lKSwgI2Z1bmN0aW9uTmFtZSkgXAogICAgIH0sCiAKICNkZWZpbmUg
TExJTlRfT1AobmFtZSkgeyBcCiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6Omdl
dENvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9WQUxJREFURShuYW1lKSkgXAorICAgICAgICBM
TElOVF9PUF9FWFRSQVMoTExJTlRfUkVUVVJOX1ZBTElEQVRFKG5hbWUpLCAjbmFtZSkgXAogICAg
IH0sIHsgXAogICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMTZDb2Rl
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKLSAgICAgICAgYml0d2lzZV9j
YXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lERTE2X1ZBTElEQVRFKG5hbWUpKSBcCisgICAgICAg
IExMSU5UX09QX0VYVFJBUyhMTElOVF9SRVRVUk5fV0lERTE2X1ZBTElEQVRFKG5hbWUpLCAjbmFt
ZSAiIFt3aWRlMTZdIikgXAogICAgIH0sIHsgXAogICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KExMSW50OjpnZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSks
IFwKLSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lERTMyX1ZBTElE
QVRFKG5hbWUpKSBcCisgICAgICAgIExMSU5UX09QX0VYVFJBUyhMTElOVF9SRVRVUk5fV0lERTMy
X1ZBTElEQVRFKG5hbWUpLCAjbmFtZSAiIFt3aWRlMzJdIikgXAogICAgIH0sCiAKICNkZWZpbmUg
TExJTlRfUkVUVVJOX0xPQ0FUSU9OKG5hbWUsIC4uLikgXAogICAgIExMSU5UX09QKG5hbWUjI19y
ZXR1cm5fbG9jYXRpb24pCiAKLSAgICAgICAgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBv
cGVyYXRpb25zW10gPSB7CitzdHJ1Y3QgTExJbnRPcGVyYXRpb25zIHsKKyAgICBjb25zdCBKSVRP
cGVyYXRpb25Bbm5vdGF0aW9uKiBvcGVyYXRpb25zOworICAgIHNpemVfdCBudW1iZXJPZk9wZXJh
dGlvbnM7Cit9OworCitzdGF0aWMgTExJbnRPcGVyYXRpb25zIGxsaW50T3BlcmF0aW9ucygpCit7
CisgICAgc3RhdGljIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIG9wZXJhdGlvbnMgPSBu
dWxscHRyOworICAgIHN0YXRpYyBzaXplX3QgbnVtYmVyT2ZPcGVyYXRpb25zID0gMDsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5
LCBbJl0geworICAgICAgICBzdGF0aWMgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBvcGVy
YXRpb25zU3RvcmFnZVtdID0gewogICAgICAgICAgICAgTExJTlRfUk9VVElORShsbGludF9mdW5j
dGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJTkUobGxpbnRf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJ
TkUobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spCkBAIC0xNjAsMTUgKzE3Nywz
MyBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJCiAgICAgICAgICAg
ICBKU0NfSlNfR0FURV9PUENPREVTKExMSU5UX1JFVFVSTl9MT0NBVElPTikKICAgICAgICAgICAg
IEpTQ19XQVNNX0dBVEVfT1BDT0RFUyhMTElOVF9SRVRVUk5fTE9DQVRJT04pCiAgICAgICAgIH07
Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGppdE9wZXJhdGlv
bkxpc3QtPmFkZFBvaW50ZXJzKG9wZXJhdGlvbnMsIG9wZXJhdGlvbnMgKyBXVEZfQVJSQVlfTEVO
R1RIKG9wZXJhdGlvbnMpKTsKKyAgICAgICAgb3BlcmF0aW9ucyA9IG9wZXJhdGlvbnNTdG9yYWdl
OworICAgICAgICBudW1iZXJPZk9wZXJhdGlvbnMgPSBXVEZfQVJSQVlfTEVOR1RIKG9wZXJhdGlv
bnNTdG9yYWdlKTsKKyAgICB9KTsKKyAgICByZXR1cm4geyBvcGVyYXRpb25zLCBudW1iZXJPZk9w
ZXJhdGlvbnMgfTsKK30KKwogI3VuZGVmIExMSU5UX1JPVVRJTkUKICN1bmRlZiBMTElOVF9PUAog
I3VuZGVmIExMSU5UX1JFVFVSTl9MT0NBVElPTgorI3VuZGVmIExMSU5UX09QX0VYVFJBUworCisj
aWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKwordm9pZCBKSVRPcGVyYXRpb25M
aXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5
LCBbXSB7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgeworICAgICAgICAgICAgYXV0
byBsaXN0ID0gbGxpbnRPcGVyYXRpb25zKCk7CisgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0
LT5hZGRQb2ludGVycyhsaXN0Lm9wZXJhdGlvbnMsIGxpc3Qub3BlcmF0aW9ucyArIGxpc3QubnVt
YmVyT2ZPcGVyYXRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICAgICAgSklUT3BlcmF0aW9u
TGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgp
OwogICAgIH0pOwogfQogCi0KIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVy
c0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25z
LCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKQogewogICAgIGlm
IChPcHRpb25zOjp1c2VKSVQoKSkKQEAgLTE3Nyw0ICsyMTIsNjEgQEAgdm9pZCBKSVRPcGVyYXRp
b25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJ
T05fVkFMSURBVElPTikKIAorU1VQUFJFU1NfQVNBTiB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OmFk
ZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luLCBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpCit7CisjaWYgRU5BQkxFKERJU0FTU0VN
QkxFUikKKyAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0
KCkpOworICAgIGZvciAoY29uc3QgYXV0byogY3VycmVudCA9IGJlZ2luOyBjdXJyZW50ICE9IGVu
ZDsgKytjdXJyZW50KSB7CisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKyAg
ICAgICAgYXV0byogb3BlcmF0aW9uID0gY3VycmVudC0+b3BlcmF0aW9uV2l0aFZhbGlkYXRpb247
CisjZWxzZQorICAgICAgICBhdXRvKiBvcGVyYXRpb24gPSBjdXJyZW50LT5vcGVyYXRpb247Cisj
ZW5kaWYKKyAgICAgICAgcmVnaXN0ZXJMYWJlbChyZW1vdmVDb2RlUHRyVGFnKG9wZXJhdGlvbiks
IGN1cnJlbnQtPm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJlZ2luKTsK
KyAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyNlbmRpZiAvLyBFTkFCTEUoRElTQVNTRU1CTEVSKQor
fQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkph
dmFTY3JpcHRDb3JlKCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQorICAgIEFTU0VSVChP
cHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpOworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAg
aWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICAgICAgaml0T3BlcmF0aW9uTGlzdC0+YWRk
RGlzYXNzZW1ibHlMYWJlbHMoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5KU0MsICZlbmRPZkpJVE9w
ZXJhdGlvbnNJbkpTQyk7CisgICAgfSk7CisjZW5kaWYKK30KKwordm9pZCBKSVRPcGVyYXRpb25M
aXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkK
K3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQorICAgIEFTU0VSVChPcHRpb25zOjpuZWVkRGlz
YXNzZW1ibHlTdXBwb3J0KCkpOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5Owor
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUpJVCgpKSB7CisgICAgICAgICAgICBhdXRvIGxpc3QgPSBsbGludE9wZXJhdGlvbnMoKTsKKyAg
ICAgICAgICAgIGppdE9wZXJhdGlvbkxpc3QtPmFkZERpc2Fzc2VtYmx5TGFiZWxzKGxpc3Qub3Bl
cmF0aW9ucywgbGlzdC5vcGVyYXRpb25zICsgbGlzdC5udW1iZXJPZk9wZXJhdGlvbnMpOworICAg
ICAgICB9CisgICAgfSk7CisjZW5kaWYKK30KKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1
bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0
aW9uKiBiZWdpbk9wZXJhdGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZE9w
ZXJhdGlvbnMpCit7CisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBpZiAoTElLRUxZKCFP
cHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGREaXNh
c3NlbWJseUxhYmVscyhiZWdpbk9wZXJhdGlvbnMsIGVuZE9wZXJhdGlvbnMpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oYmVnaW5PcGVyYXRpb25zKTsKKyAgICBVTlVTRURfUEFSQU0oZW5kT3Bl
cmF0aW9ucyk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAkocmV2
aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRPcGVy
YXRpb25MaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK3N0cnVjdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uOworCiAjaWYgRU5BQkxF
KEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIAogLy8gVGhpcyBpbmRpcmVjdGlvbiBpcyBwcm92
aWRlZCBzbyB0aGF0IHdlIGNhbiBtYW51YWxseSBmb3JjZSBvbiBhc3NlcnRpb25zIGZvcgogLy8g
dGVzdGluZyBldmVuIG9uIHJlbGVhc2UgYnVpbGRzLgogI2RlZmluZSBKSVRfT1BFUkFUSU9OX1ZB
TElEQVRJT05fQVNTRVJUX0VOQUJMRUQgQVNTRVJUX0VOQUJMRUQKIAotc3RydWN0IEpJVE9wZXJh
dGlvbkFubm90YXRpb247Ci0KIGNsYXNzIEpJVE9wZXJhdGlvbkxpc3QgewogcHVibGljOgogICAg
IHN0YXRpYyBKSVRPcGVyYXRpb25MaXN0JiBpbnN0YW5jZSgpOwpAQCAtNjQsNiArNjQsOCBAQCBw
dWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50
ZXJzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9wZXJhdGlv
bnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpOwogCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0lu
RW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKTsKKwogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklUT3BlcmF0aW9uKFQgZnVuY3Rp
b24pCiAgICAgewogICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb24pOwpAQCAtODEsNyArODMs
MTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0
ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgpOworICAgIHN0YXRpYyB2b2lkIHBv
cHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKTsKKwogICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBhZGRQb2ludGVycyhjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0
aW9uKiBiZWdpbiwgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kKTsKKyAgICB2b2lk
IGFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2lu
LCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpOwogCiAjaWYgSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OX0FTU0VSVF9FTkFCTEVECiAgICAgdm9pZCBhZGRJbnZlcnNlTWFwKHZvaWQq
IHZhbGlkYXRpb25FbnRyeSwgdm9pZCogcG9pbnRlcik7CkBAIC0xMDYsMTEgKzExMiwyNyBAQCBj
bGFzcyBKSVRPcGVyYXRpb25MaXN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFs
aXplKCkgeyB9CiAKLSAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0
Q29yZSgpIHsgfQotICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRD
b3JlRm9yTExJbnQoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5KYXZh
U2NyaXB0Q29yZSgpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVlZERp
c2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgICAgIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJl
bHNJbkphdmFTY3JpcHRDb3JlKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9p
bnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgICAgICBwb3B1
bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCk7CisgICAgfQor
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxh
YmVsc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRp
b25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKTsKIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklUT3BlcmF0aW9uKFQp
IHsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklUT3Bl
cmF0aW9uV2l0aFZhbGlkYXRpb24oVCkgeyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQg
cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmUoKTsKKyAgICBzdGF0aWMg
dm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCk7
CisKKyAgICB2b2lkIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90
YXRpb24qIGJlZ2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpOwogfTsKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvblZhbGlkYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvblZhbGlk
YXRpb24uaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsMTMgKzQ3LDE2
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKLQogc3RydWN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24gewogICAgIHZvaWQqIG9wZXJh
dGlvbjsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogICAgIHZvaWQqIG9w
ZXJhdGlvbldpdGhWYWxpZGF0aW9uOworI2VuZGlmCisgICAgY29uc3QgY2hhciogbmFtZTsKIH07
CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiAjaWZuZGVmIEpTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTgogI2RlZmluZSBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OX1ZBTElEQVRJT04oZnVuY3Rpb25OYW1lKQogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI5
NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDEzICs4MiwxNCBAQCBMaW5rQnVmZmVyOjpDb2RlUmVmPExp
bmtCdWZmZXJQdHJUYWc+IExpCiAgICAgICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSB2c25wcmlu
dGYobnVsbHB0ciwgMCwgZm9ybWF0LCBwcmVmbGlnaHRBcmdzKTsKICAgICAgICAgdmFfZW5kKHBy
ZWZsaWdodEFyZ3MpOwogCisgICAgICAgIGNvbnN0IGNoYXIgcHJlZml4W10gPSAidGh1bms6ICI7
CiAgICAgICAgIGNoYXIqIGJ1ZmZlciA9IDA7Ci0gICAgICAgIENTdHJpbmcgbGFiZWwgPSBDU3Ry
aW5nOjpuZXdVbmluaXRpYWxpemVkKHN0cmluZ0xlbmd0aCArIDEsIGJ1ZmZlcik7Ci0gICAgICAg
IHZzbnByaW50ZihidWZmZXIsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7Ci0g
ICAgICAgIGJ1ZmZlcltzdHJpbmdMZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgQ1N0cmluZyBsYWJl
bCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoc3RyaW5nTGVuZ3RoICsgc2l6ZW9mKHByZWZp
eCksIGJ1ZmZlcik7CisgICAgICAgIHN0cm5jcHkoYnVmZmVyLCBwcmVmaXgsIHNpemVvZihwcmVm
aXgpIC0gMSk7CisgICAgICAgIHZzbnByaW50ZihidWZmZXIgKyBzaXplb2YocHJlZml4KSAtIDEs
IHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7CiAgICAgICAgIG91dC5wcmludGYo
IiVzIiwgYnVmZmVyKTsKIAotICAgICAgICByZWdpc3RlclRodW5rTGFiZWwocmVzdWx0LmNvZGUo
KS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUobGFiZWwpKTsKKyAgICAgICAg
cmVnaXN0ZXJMYWJlbChyZXN1bHQuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSwg
V1RGTW92ZShsYWJlbCkpOwogICAgIH0gZWxzZQogICAgICAgICBvdXQudnByaW50Zihmb3JtYXQs
IGFyZ0xpc3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5jcHAJKHJl
dmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC05MDMsMTAgKzkwMyw4IEBAIHN0YXRpYyB2b2lkIHJ1bihjb25z
dCBjaGFyKikKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCiAKLSNpZiBFTkFCTEUoSklUX09Q
RVJBVElPTl9WQUxJREFUSU9OKQogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3Rh
dGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luVGVzdEIzIF9fYXNtKCJzZWN0aW9uJHN0YXJ0JF9f
REFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJhdGlvbkFu
bm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMgX19hc20oInNlY3Rpb24kZW5kJF9f
REFUQV9DT05TVCRfX2pzY19vcHMiKTsKLSNlbmRpZgogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCiB7CkBAIC05MzAsNyArOTI4LDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogICAgIEpTQzo6
SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRP
cGVyYXRpb25zSW5UZXN0QjMsICZlbmRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMyk7CiAjZW5kaWYK
LSAgICAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQorICAgIGlmIChVTkxJS0VMWShKU0M6Ok9w
dGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgIEpTQzo6SklUT3BlcmF0
aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRP
cGVyYXRpb25zSW5UZXN0QjMsICZlbmRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMyk7CisjZW5kaWYK
KwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gMjsgKytpKSB7CiAgICAgICAgIEpTQzo6
T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA9IGk7CiAgICAgICAgIHJ1bihmaWx0ZXIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNz
ZW1ibGVyLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKKyNpbmNsdWRlIDx2YXJpYW50PgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24u
aD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAt
MzYsOCArMzcsMjEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXVzaW5nIFRodW5rTGFiZWxNYXAg
PSBIYXNoTWFwPHZvaWQqLCBDU3RyaW5nPjsKLUxhenlOZXZlckRlc3Ryb3llZDxUaHVua0xhYmVs
TWFwPiB0aHVua0xhYmVsTWFwOworbmFtZXNwYWNlIERpc2Fzc2VtYmxlciB7CisKK3VzaW5nIExh
YmVsTWFwID0gSGFzaE1hcDx2b2lkKiwgc3RkOjp2YXJpYW50PENTdHJpbmcsIGNvbnN0IGNoYXIq
Pj47CitMYXp5TmV2ZXJEZXN0cm95ZWQ8TGFiZWxNYXA+IGxhYmVsTWFwOworCitzdGF0aWMgTGFi
ZWxNYXAmIGVuc3VyZUxhYmVsTWFwKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIGxhYmVsTWFw
LmNvbnN0cnVjdCgpOworICAgIH0pOworICAgIHJldHVybiBsYWJlbE1hcC5nZXQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgRGlzYXNzZW1ibGVyCiAKIHZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90IHNp
emUsIHZvaWQqIGNvZGVTdGFydCwgdm9pZCogY29kZUVuZCwgY29uc3QgY2hhciogcHJlZml4LCBQ
cmludFN0cmVhbSYgb3V0KQogewpAQCAtMTU3LDI3ICsxNzEsMjUgQEAgdm9pZCB3YWl0Rm9yQXN5
bmNocm9ub3VzRGlzYXNzZW1ibHkoKQogICAgIGFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlcigpLndh
aXRVbnRpbEVtcHR5KCk7CiB9CiAKLXN0YXRpYyBUaHVua0xhYmVsTWFwJiBlbnN1cmVUaHVua0xh
YmVsTWFwKCkKK3ZvaWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJpbmcm
JiBsYWJlbCkKIHsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKLSAgICBzdGQ6
OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Ci0gICAgICAgIHRodW5rTGFiZWxNYXAuY29uc3RydWN0
KCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRodW5rTGFiZWxNYXAuZ2V0KCk7CisgICAgRGlzYXNz
ZW1ibGVyOjplbnN1cmVMYWJlbE1hcCgpLmFkZCh0aHVua0FkZHJlc3MsIFdURk1vdmUobGFiZWwp
KTsKIH0KIAotdm9pZCByZWdpc3RlclRodW5rTGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3Ry
aW5nJiYgbGFiZWwpCit2b2lkIHJlZ2lzdGVyTGFiZWwodm9pZCogYWRkcmVzcywgY29uc3QgY2hh
ciogbGFiZWwpCiB7Ci0gICAgZW5zdXJlVGh1bmtMYWJlbE1hcCgpLmFkZCh0aHVua0FkZHJlc3Ms
IFdURk1vdmUobGFiZWwpKTsKKyAgICBEaXNhc3NlbWJsZXI6OmVuc3VyZUxhYmVsTWFwKCkuYWRk
KGFkZHJlc3MsIGxhYmVsKTsKIH0KIAotY29uc3QgY2hhciogbGFiZWxGb3JUaHVuayh2b2lkKiB0
aHVua0FkZHJlc3MpCitjb25zdCBjaGFyKiBsYWJlbEZvcih2b2lkKiB0aHVua0FkZHJlc3MpCiB7
Ci0gICAgYXV0byYgbWFwID0gZW5zdXJlVGh1bmtMYWJlbE1hcCgpOworICAgIGF1dG8mIG1hcCA9
IERpc2Fzc2VtYmxlcjo6ZW5zdXJlTGFiZWxNYXAoKTsKICAgICBhdXRvIGl0ID0gbWFwLmZpbmQo
dGh1bmtBZGRyZXNzKTsKICAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gaXQtPnZhbHVlLmRhdGEoKTsKKyAgICBpZiAoc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxDU3RyaW5nPihpdC0+dmFsdWUpKQorICAgICAgICByZXR1cm4gc3RkOjpn
ZXQ8Q1N0cmluZz4oaXQtPnZhbHVlKS5kYXRhKCk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PGNvbnN0
IGNoYXIqPihpdC0+dmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAkocmV2
aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNh
c3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsOCBAQCB2b2lkIGRpc2Fzc2Vt
YmxlQXN5bmNocm9ub3VzbHkoCiAKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd2FpdEZvckFzeW5j
aHJvbm91c0Rpc2Fzc2VtYmx5KCk7CiAKLXZvaWQgcmVnaXN0ZXJUaHVua0xhYmVsKHZvaWQqIHRo
dW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVsKTsKLWNvbnN0IGNoYXIqIGxhYmVsRm9yVGh1bmso
dm9pZCogdGh1bmtBZGRyZXNzKTsKK3ZvaWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiB0aHVua0FkZHJl
c3MsIENTdHJpbmcmJiBsYWJlbCk7Cit2b2lkIHJlZ2lzdGVyTGFiZWwodm9pZCogdGh1bmtBZGRy
ZXNzLCBjb25zdCBjaGFyKiBsYWJlbCk7Citjb25zdCBjaGFyKiBsYWJlbEZvcih2b2lkKiB0aHVu
a0FkZHJlc3MpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bjb2RlLmNwcAkocmV2
aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02
NC9BNjRET3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDE2IEBACiAjaW5j
bHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJJbnRlZ3JpdHkuaCIKKyNpbmNsdWRlICJK
U0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTExJbnRQQ1Jhbmdlcy5oIgorI2luY2x1ZGUgIlB1cmVO
YU4uaCIKKyNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2lu
Y2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL1B0clRh
Zy5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEFSTTY0RGlzYXNzZW1ibGVyIHsKIApAQCAtMjAxLDEyICsyMDcsMTIgQEAgdm9pZCBBNjRET3Bj
b2RlOjphcHBlbmRQQ1JlbGF0aXZlT2Zmc2V0KAogICAgICAgICB0YXJnZXRJbmZvID0gIiI7CiAg
ICAgZWxzZSBpZiAodGFyZ2V0UEMgPj0gbV9zdGFydFBDICYmIHRhcmdldFBDIDwgbV9lbmRQQykK
ICAgICAgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJTaXplIC0gMSwgIiAtPiA8JXU+Iiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KCh0YXJnZXRQQyAtIG1fc3RhcnRQQykgKiBzaXplb2YodWludDMy
X3QpKSk7Ci0gICAgZWxzZSBpZiAoY29uc3QgY2hhciogdGh1bmtMYWJlbCA9IGxhYmVsRm9yVGh1
bmsodGFyZ2V0UEMpKQotICAgICAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlclNpemUgLSAxLCAi
IC0+IDx0aHVuazogJXM+IiwgdGh1bmtMYWJlbCk7CisgICAgZWxzZSBpZiAoY29uc3QgY2hhciog
bGFiZWwgPSBsYWJlbEZvcih0YXJnZXRQQykpCisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVm
ZmVyU2l6ZSAtIDEsICIgLT4gJXMiLCBsYWJlbCk7CiAgICAgZWxzZSBpZiAoaXNKSVRQQyh0YXJn
ZXRQQykpCi0gICAgICAgIHRhcmdldEluZm8gPSAiIC0+IDxKSVQgUEM+IjsKKyAgICAgICAgdGFy
Z2V0SW5mbyA9ICIgLT4gSklUIFBDIjsKICAgICBlbHNlIGlmIChMTEludDo6aXNMTEludFBDKHRh
cmdldFBDKSkKLSAgICAgICAgdGFyZ2V0SW5mbyA9ICIgLT4gPExMSW50IFBDPiI7CisgICAgICAg
IHRhcmdldEluZm8gPSAiIC0+IExMSW50IFBDIjsKICAgICBlbHNlCiAgICAgICAgIHRhcmdldElu
Zm8gPSAiIC0+IDx1bmtub3duPiI7CiAKQEAgLTE1NzAsMTIgKzE1NzYsMTI3IEBAIGNvbnN0IGNo
YXIqIEE2NERPcGNvZGVMb2dpY2FsSW1tZWRpYXRlOjoKIAogY29uc3QgY2hhciogY29uc3QgQTY0
RE9wY29kZU1vdmVXaWRlOjpzX29wTmFtZXNbNF0gPSB7ICJtb3ZuIiwgMCwgIm1vdnoiLCAibW92
ayIgfTsKIAotY29uc3QgY2hhciogQTY0RE9wY29kZU1vdmVXaWRlOjpmb3JtYXQoKQorY2xhc3Mg
TW92ZVdpZGVGb3JtYXRUcmFpdCB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzdWx0VHlwZSA9IGNv
bnN0IGNoYXIqOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXR1cm5FYXJseUlmQWNjZXB0
ZWQgPSBmYWxzZTsKKworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0IGNoYXIqIHJlamVj
dGVkUmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSogb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUtPmJh
c2VGb3JtYXQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0IGNoYXIqIGFjY2Vw
dGVkUmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSogb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUtPmZv
cm1hdEJ1ZmZlcigpOyB9Cit9OworCitjbGFzcyBNb3ZlV2lkZUlzVmFsaWRUcmFpdCB7CitwdWJs
aWM6CisgICAgdXNpbmcgUmVzdWx0VHlwZSA9IGJvb2w7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHJldHVybkVhcmx5SWZBY2NlcHRlZCA9IHRydWU7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgcmVqZWN0ZWRSZXN1bHQoQTY0RE9wY29kZU1vdmVXaWRlKikgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgYWNjZXB0ZWRSZXN1bHQoQTY0RE9wY29kZU1v
dmVXaWRlKikgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworYm9vbCBBNjRET3Bjb2RlTW92ZVdpZGU6
OmhhbmRsZVBvdGVudGlhbERhdGFQb2ludGVyKHZvaWQqIHB0cikKK3sKKyAgICBBU1NFUlQoSW50
ZWdyaXR5Ojppc1NhbmVQb2ludGVyKHB0cikpOworCisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7
CisgICAgVk1JbnNwZWN0b3I6OmZvckVhY2hWTShbJl0gKFZNJiB2bSkgeworICAgICAgICBpZiAo
cHRyID09ICZ2bSkgeworICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgdm0iKTsKKyAgICAgICAg
ICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6
RG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdm0uaXNJblNlcnZpY2UoKSkKKyAgICAg
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworCisgICAgICAgIGF1dG8q
IHZtU3RhcnQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdm0pOworICAgICAgICBhdXRv
KiB2bUVuZCA9IHZtU3RhcnQgKyBzaXplb2YoVk0pOworICAgICAgICBhdXRvKiB1OFB0ciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHB0cik7CisgICAgICAgIFJhbmdlIHZtUmFuZ2Uodm1T
dGFydCwgdm1FbmQpOworICAgICAgICBpZiAodm1SYW5nZS5jb250YWlucyh1OFB0cikpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHU4UHRyIC0gdm1TdGFydDsKKyAgICAgICAgICAg
IGJ1ZmZlclByaW50ZigiIHZtICsldSIsIG9mZnNldCk7CisKKyAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGRlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gJnZtLnRv
cENhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS50b3BDYWxsRnJh
bWUiOworICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0ID09IFZNOjp0b3BFbnRyeUZyYW1lT2Zm
c2V0KCkpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0udG9wRW50cnlGcmFtZSI7
CisgICAgICAgICAgICBlbHNlIGlmIChvZmZzZXQgPT0gVk06OmV4Y2VwdGlvbk9mZnNldCgpKQor
ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1fZXhjZXB0aW9uIjsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKG9mZnNldCA9PSBWTTo6b2Zmc2V0T2ZIZWFwQmFycmllclRocmVzaG9sZCgp
KQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLmhlYXAubV9iYXJyaWVyVGhyZXNo
b2xkIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNldCA9PSBWTTo6Y2FsbEZyYW1lRm9yQ2F0
Y2hPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5jYWxsRnJhbWVG
b3JDYXRjaCI7CisgICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gdm0uYWRkcmVzc09mU29mdFN0
YWNrTGltaXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5tX3NvZnRTdGFj
a0xpbWl0IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSAmdm0ub3NyRXhpdEluZGV4KQor
ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm9zckV4aXRJbmRleCI7CisgICAgICAg
ICAgICBlbHNlIGlmIChwdHIgPT0gJnZtLm9zckV4aXRKdW1wRGVzdGluYXRpb24pCisgICAgICAg
ICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlvbiI7CisgICAg
ICAgICAgICBlbHNlIGlmIChwdHIgPT0gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0
cmluZ3MoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5zbWFsbFN0cmluZ3Mu
bV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSAm
dm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24g
PSAidm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3ciOworICAgICAgICAgICAgZWxzZSBpZiAocHRy
ID09IHZtLnRyYXBzKCkudHJhcEJpdHNBZGRyZXNzKCkpCisgICAgICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSAidm0ubV90cmFwcy5tX3RyYXBCaXRzIjsKKyNpZiBFTkFCTEUoREZHX0RPRVNfR0Nf
VkFMSURBVElPTikKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSB2bS5hZGRyZXNzT2ZEb2Vz
R0MoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5tX2RvZXNHQyI7CisjZW5k
aWYKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICBidWZmZXJQ
cmludGYoIjogJXMiLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh2bS5pc1NjcmF0Y2hCdWZmZXIocHRyKSkgeworICAgICAgICAgICAgYnVm
ZmVyUHJpbnRmKCIgdm0gc2NyYXRjaEJ1ZmZlci5tX2J1ZmZlciIpOworICAgICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAg
IH0pOworICAgIHJldHVybiBoYW5kbGVkOworfQorCisjaWYgQ1BVKEFSTTY0RSkKK2Jvb2wgQTY0
RE9wY29kZU1vdmVXaWRlOjpoYW5kbGVQb3RlbnRpYWxQdHJUYWcodWludHB0cl90IHZhbHVlKQor
eworICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPiAweGZmZmYpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFB0clRhZyB0YWcgPSBzdGF0aWNfY2FzdDxQdHJUYWc+KHZhbHVlKTsKKyNpZiBF
TkFCTEUoUFRSVEFHX0RFQlVHR0lORykKKyAgICBjb25zdCBjaGFyKiBuYW1lID0gV1RGOjpwdHJU
YWdOYW1lKHRhZyk7CisgICAgaWYgKG5hbWVbMF0gPT0gJzwnKQorICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIE9ubHkgcmVzdWx0IHRoYXQgc3RhcnRzIHdpdGggJzwnIGlzICI8dW5rbm93bj4iLgor
I2Vsc2UKKyAgICAvLyBXaXRob3V0IEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKSwgbm90IGFsbCBQ
dHJUYWdzIGFyZSByZWdpc3RlcmVkZiBmb3IKKyAgICAvLyBwcmludGluZy4gU28sIHdlJ2xsIGp1
c3QgZG8gdGhlIG1pbmltdW0gd2l0aCBvbmx5IHRoZSBKU0Mgc3BlY2lmaWMgdGFncy4KKyAgICBj
b25zdCBjaGFyKiBuYW1lID0gcHRyVGFnTmFtZSh0YWcpOworICAgIGlmICghbmFtZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAgICAvLyBBbHNvIHByaW50ICc/JyB0byBpbmRp
Y2F0ZSB0aGF0IHRoaXMgaXMgYSBtYXliZS4gV2UgZG8gbm90IGtub3cgZm9yIGNlcnRhaW4KKyAg
ICAvLyBpZiB0aGUgY29uc3RhbnQgaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBhIFB0clRhZy4KKyAg
ICBidWZmZXJQcmludGYoIiAtPiAlcCAlcyA/IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFs
dWUpLCBuYW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUcmFpdD4KK3R5cGVuYW1lIFRyYWl0OjpSZXN1bHRUeXBlIEE2NERPcGNvZGVNb3ZlV2lk
ZTo6cGFyc2UoKQogewogICAgIGlmIChvcGMoKSA9PSAxKQotICAgICAgICByZXR1cm4gQTY0RE9w
Y29kZTo6Zm9ybWF0KCk7CisgICAgICAgIHJldHVybiBUcmFpdDo6cmVqZWN0ZWRSZXN1bHQodGhp
cyk7CiAgICAgaWYgKCFpczY0Qml0KCkgJiYgaHcoKSA+PSAyKQotICAgICAgICByZXR1cm4gQTY0
RE9wY29kZTo6Zm9ybWF0KCk7CisgICAgICAgIHJldHVybiBUcmFpdDo6cmVqZWN0ZWRSZXN1bHQo
dGhpcyk7CisKKyAgICBpZiBjb25zdGV4cHIgKFRyYWl0OjpyZXR1cm5FYXJseUlmQWNjZXB0ZWQp
CisgICAgICAgIHJldHVybiBUcmFpdDo6YWNjZXB0ZWRSZXN1bHQodGhpcyk7CiAKICAgICBpZiAo
IW9wYygpICYmICghaW1tZWRpYXRlMTYoKSB8fCAhaHcoKSkgJiYgKGlzNjRCaXQoKSB8fCBpbW1l
ZGlhdGUxNigpICE9IDB4ZmZmZikpIHsKICAgICAgICAgLy8gTU9WIHBzZXVkbyBvcCBmb3IgTU9W
TgpAQCAtMTU4NywxMCArMTcwOCwxMiBAQCBjb25zdCBjaGFyKiBBNjRET3Bjb2RlTW92ZVdpZGU6
OmZvcm1hdCgpCiAgICAgICAgICAgICBpbnQ2NF90IGFtb3VudCA9IGltbWVkaWF0ZTE2KCkgPDwg
KGh3KCkgKiAxNik7CiAgICAgICAgICAgICBhbW91bnQgPSB+YW1vdW50OwogICAgICAgICAgICAg
YXBwZW5kU2lnbmVkSW1tZWRpYXRlNjQoYW1vdW50KTsKKyAgICAgICAgICAgIG1fYnVpbHRDb25z
dGFudCA9IHN0YXRpY19jYXN0PGludHB0cl90PihhbW91bnQpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgaW50MzJfdCBhbW91bnQgPSBpbW1lZGlhdGUxNigpIDw8IChodygpICogMTYp
OwogICAgICAgICAgICAgYW1vdW50ID0gfmFtb3VudDsKICAgICAgICAgICAgIGFwcGVuZFNpZ25l
ZEltbWVkaWF0ZShhbW91bnQpOworICAgICAgICAgICAgbV9idWlsdENvbnN0YW50ID0gc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KGFtb3VudCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAg
ICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCkpOwpAQCAtMTYwMSwxMSArMTcyNCw2NSBA
QCBjb25zdCBjaGFyKiBBNjRET3Bjb2RlTW92ZVdpZGU6OmZvcm1hdCgpCiAgICAgICAgICAgICBh
cHBlbmRTZXBhcmF0b3IoKTsKICAgICAgICAgICAgIGFwcGVuZFNoaWZ0QW1vdW50KGh3KCkpOwog
ICAgICAgICB9Ci0gICAgfQogCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworICAgICAgICBp
ZiAob3BjKCkgPT0gMikgLy8gRW5jb2RpbmcgZm9yIG1vdnoKKyAgICAgICAgICAgIG1fYnVpbHRD
b25zdGFudCA9IDA7CisKKyAgICAgICAgdW5zaWduZWQgc2hpZnQgPSBodygpICogMTY7CisgICAg
ICAgIHVpbnRwdHJfdCB2YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oaW1tZWRpYXRlMTYo
KSkgPDwgc2hpZnQ7CisgICAgICAgIHVpbnRwdHJfdCBtYXNrID0gfihzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KDB4ZmZmZikgPDwgc2hpZnQpOworICAgICAgICBtX2J1aWx0Q29uc3RhbnQgJj0gbWFz
azsKKyAgICAgICAgbV9idWlsdENvbnN0YW50IHw9IHZhbHVlOworICAgIH0KKworICAgIGF1dG8g
ZHVtcENvbnN0YW50RGF0YSA9IFsmXSB7CisgICAgICAgIHVpbnQzMl90KiBuZXh0UEMgPSBtX2N1
cnJlbnRQQyArIDE7CisgICAgICAgIGlmIChuZXh0UEMgPj0gbV9lbmRQQykKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBBNjRET3Bjb2RlIG5leHRCYXNlT3Bjb2RlKG1fc3RhcnRQQywg
bV9lbmRQQyk7CisgICAgICAgIEE2NERPcGNvZGVNb3ZlV2lkZSYgbmV4dE9wY29kZSA9ICpyZWlu
dGVycHJldF9jYXN0PEE2NERPcGNvZGVNb3ZlV2lkZSo+KCZuZXh0QmFzZU9wY29kZSk7CisgICAg
ICAgIG5leHRPcGNvZGUuc2V0UENBbmRPcGNvZGUobmV4dFBDLCAqbmV4dFBDKTsKKworICAgICAg
ICBib29sIG5leHRJc01vdmVXaWRlR3JvdXAgPSBvcGNvZGVHcm91cE51bWJlcihtX29wY29kZSkg
PT0gb3Bjb2RlR3JvdXBOdW1iZXIoKm5leHRQQyk7CisKKyAgICAgICAgaWYgKG5leHRJc01vdmVX
aWRlR3JvdXAgJiYgbmV4dE9wY29kZS5pc1ZhbGlkKCkgJiYgbmV4dE9wY29kZS5yZCgpID09IHJk
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdm9pZCogcHRyID0gcmVtb3ZlQ29k
ZVB0clRhZyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYnVpbHRDb25zdGFudCkpOworICAgICAgICBp
ZiAoIXB0cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoSW50ZWdyaXR5Ojpp
c1NhbmVQb2ludGVyKHB0cikpIHsKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIC0+ICVwIiwg
cHRyKTsKKyAgICAgICAgICAgIGlmIChjb25zdCBjaGFyKiBsYWJlbCA9IGxhYmVsRm9yKHB0cikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclByaW50ZigiICVzIiwgbGFiZWwpOworICAg
ICAgICAgICAgaWYgKGlzSklUUEMocHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVy
UHJpbnRmKCIgSklUIFBDIik7CisgICAgICAgICAgICBpZiAoTExJbnQ6OmlzTExJbnRQQyhwdHIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJQcmludGYoIiBMTEludCBQQyIpOworICAg
ICAgICAgICAgaGFuZGxlUG90ZW50aWFsRGF0YVBvaW50ZXIocHRyKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorI2lmIENQVShBUk02NEUpCisgICAgICAgIGlmIChoYW5kbGVQb3Rl
bnRpYWxQdHJUYWcobV9idWlsdENvbnN0YW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKyNlbmRp
ZgorICAgICAgICBpZiAobV9idWlsdENvbnN0YW50IDwgMHgxMDAwMCkKKyAgICAgICAgICAgIGJ1
ZmZlclByaW50ZigiIC0+ICV1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fYnVpbHRDb25zdGFu
dCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWZmZXJQcmludGYoIiAtPiAlcCIsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fYnVpbHRDb25zdGFudCkpOworICAgIH07CisKKyAgICBp
ZiAobV9zdGFydFBDKQorICAgICAgICBkdW1wQ29uc3RhbnREYXRhKCk7CisKKyAgICByZXR1cm4g
VHJhaXQ6OmFjY2VwdGVkUmVzdWx0KHRoaXMpOwogfQogCitjb25zdCBjaGFyKiBBNjRET3Bjb2Rl
TW92ZVdpZGU6OmZvcm1hdCgpIHsgcmV0dXJuIHBhcnNlPE1vdmVXaWRlRm9ybWF0VHJhaXQ+KCk7
IH0KK2Jvb2wgQTY0RE9wY29kZU1vdmVXaWRlOjppc1ZhbGlkKCkgeyByZXR1cm4gcGFyc2U8TW92
ZVdpZGVJc1ZhbGlkVHJhaXQ+KCk7IH0KKwogY29uc3QgY2hhciogQTY0RE9wY29kZVRlc3RBbmRC
cmFuY2hJbW1lZGlhdGU6OmZvcm1hdCgpCiB7CiAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKG9w
Qml0KCkgPyAidGJueiIgOiAidGJ6Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAkocmV2aXNpb24gMjk0MjIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bjb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IGJ1ZmZlclByaW50ZigibHNsICMldSIsIDE2ICogYW1vdW50KTsKICAgICB9CiAKLSAgICBzdGF0
aWMgY29uc3RleHByIGludCBidWZmZXJTaXplID0gODE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgYnVmZmVyU2l6ZSA9IDEwMTsKIAogICAgIGNoYXIgbV9mb3JtYXRCdWZmZXJbYnVmZmVyU2l6
ZV07CiAgICAgdWludDMyX3QqIG1fc3RhcnRQQzsKQEAgLTIwMiw2ICsyMDIsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdWludDMyX3QqIG1fY3VycmVudFBDOwogICAgIHVpbnQzMl90IG1fb3Bjb2RlOwog
ICAgIGludCBtX2J1ZmZlck9mZnNldDsKKyAgICB1aW50cHRyX3QgbV9idWlsdENvbnN0YW50IHsg
MCB9OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBPcGNvZGVHcm91cCogb3Bjb2RlVGFibGVbMzJd
OwpAQCAtODcyLDExICs4NzMsMjQgQEAgcHVibGljOgogICAgIERFRklORV9TVEFUSUNfRk9STUFU
KEE2NERPcGNvZGVNb3ZlV2lkZSwgdGhpc09iaik7CiAKICAgICBjb25zdCBjaGFyKiBmb3JtYXQo
KTsKKyAgICBib29sIGlzVmFsaWQoKTsKIAogICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0
dXJuIHNfb3BOYW1lc1tvcGMoKV07IH0KICAgICB1bnNpZ25lZCBvcGMoKSB7IHJldHVybiAobV9v
cGNvZGUgPj4gMjkpICYgMHgzOyB9CiAgICAgdW5zaWduZWQgaHcoKSB7IHJldHVybiAobV9vcGNv
ZGUgPj4gMjEpICYgMHgzOyB9CiAgICAgdW5zaWduZWQgaW1tZWRpYXRlMTYoKSB7IHJldHVybiAo
bV9vcGNvZGUgPj4gNSkgJiAweGZmZmY7IH0KKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUcmFpdD4gdHlwZW5hbWUgVHJhaXQ6OlJlc3VsdFR5cGUgcGFyc2UoKTsKKyAgICBib29s
IGhhbmRsZVBvdGVudGlhbERhdGFQb2ludGVyKHZvaWQqKTsKKyAgICBib29sIGhhbmRsZVBvdGVu
dGlhbFB0clRhZyh1aW50cHRyX3QpOworCisgICAgLy8gVGhlc2UgZm9yd2FyZGluZyBmdW5jdGlv
bnMgYXJlIG5lZWRlZCBmb3IgTW92ZVdpZGVGb3JtYXRUcmFpdCBvbmx5LgorICAgIGNvbnN0IGNo
YXIqIGJhc2VGb3JtYXQoKSB7IHJldHVybiBBNjRET3Bjb2RlOjpmb3JtYXQoKTsgfQorICAgIGNv
bnN0IGNoYXIqIGZvcm1hdEJ1ZmZlcigpIHsgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOyB9CisKKyAg
ICBmcmllbmQgY2xhc3MgTW92ZVdpZGVGb3JtYXRUcmFpdDsKKyAgICBmcmllbmQgY2xhc3MgTW92
ZVdpZGVJc1ZhbGlkVHJhaXQ7CiB9OwogCiBjbGFzcyBBNjRET3Bjb2RlVGVzdEFuZEJyYW5jaElt
bWVkaWF0ZSA6IHB1YmxpYyBBNjRET3Bjb2RlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ1B0clRhZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDUHRyVGFnLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2
LDggKzM2LDE5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgQ1BVKEFSTTY0RSkgJiYgRU5B
QkxFKFBUUlRBR19ERUJVR0dJTkcpCisjaWYgQ1BVKEFSTTY0RSkKKworY29uc3QgY2hhciogcHRy
VGFnTmFtZShQdHJUYWcgdGFnKQoreworI2RlZmluZSBSRVRVUk5fUFRSVEFHX05BTUUoX3RhZ05h
bWUsIGNhbGxlZVR5cGUsIGNhbGxlclR5cGUpIGNhc2UgX3RhZ05hbWU6IHJldHVybiAjX3RhZ05h
bWU7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGFnKSkgeworICAgICAgICBG
T1JfRUFDSF9KU0NfUFRSVEFHKFJFVFVSTl9QVFJUQUdfTkFNRSkKKyAgICB9CisjdW5kZWYgUkVU
VVJOX1BUUlRBR19OQU1FCisgICAgcmV0dXJuIG51bGxwdHI7IC8vIE1hdGNoaW5nIHRhZyBub3Qg
Zm91bmQuCit9CiAKKyNpZiBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykKIHN0YXRpYyBjb25zdCBj
aGFyKiB0YWdGb3JQdHIoY29uc3Qgdm9pZCogcHRyKQogewogI2RlZmluZSBSRVRVUk5fTkFNRV9J
Rl9UQUdfTUFUQ0hFUyh0YWcsIGNhbGxlZVR5cGUsIGNhbGxlclR5cGUpIFwKQEAgLTUwLDI0ICs2
MSwxNCBAQCBzdGF0aWMgY29uc3QgY2hhciogdGFnRm9yUHRyKGNvbnN0IHZvaWQqCiAgICAgcmV0
dXJuIG51bGxwdHI7IC8vIE1hdGNoaW5nIHRhZyBub3QgZm91bmQuCiB9CiAKLXN0YXRpYyBjb25z
dCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0YWcpCi17Ci0jZGVmaW5lIFJFVFVSTl9QVFJUQUdf
TkFNRShfdGFnTmFtZSwgY2FsbGVlVHlwZSwgY2FsbGVyVHlwZSkgY2FzZSBfdGFnTmFtZTogcmV0
dXJuICNfdGFnTmFtZTsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0YWcpKSB7
Ci0gICAgICAgIEZPUl9FQUNIX0pTQ19QVFJUQUcoUkVUVVJOX1BUUlRBR19OQU1FKQotICAgIH0K
LSN1bmRlZiBSRVRVUk5fUFRSVEFHX05BTUUKLSAgICByZXR1cm4gbnVsbHB0cjsgLy8gTWF0Y2hp
bmcgdGFnIG5vdCBmb3VuZC4KLX0KLQogdm9pZCBpbml0aWFsaXplUHRyVGFnTG9va3VwKCkKIHsK
ICAgICBXVEY6OlB0clRhZ0xvb2t1cCYgbG9va3VwID0gZ19qc2NDb25maWcucHRyVGFnTG9va3Vw
UmVjb3JkOwogICAgIGxvb2t1cC5pbml0aWFsaXplKHRhZ0ZvclB0ciwgcHRyVGFnTmFtZSk7CiAg
ICAgV1RGOjpyZWdpc3RlclB0clRhZ0xvb2t1cCgmbG9va3VwKTsKIH0KLQotI2VuZGlmIC8vIENQ
VShBUk02NEUpICYmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQorI2VuZGlmIC8vIEVOQUJMRShQ
VFJUQUdfREVCVUdHSU5HKQorI2VuZGlmIC8vIENQVShBUk02NEUpCiAKICNpZiBDUFUoQVJNNjRF
KQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuaAkocmV2
aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFn
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDIsMTIgKzI0MiwxNiBAQCBpbmxpbmUgUHRyVHlwZSB1
bnRhZ0FkZHJlc3NEaXZlcnNpZmllZENvCiAjZW5kaWYKIH0KIAotI2lmIENQVShBUk02NEUpICYm
IEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQorI2lmIENQVShBUk02NEUpCisjaWYgRU5BQkxFKFBU
UlRBR19ERUJVR0dJTkcpCiB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29rdXAoKTsKICNlbHNlCiBp
bmxpbmUgdm9pZCBpbml0aWFsaXplUHRyVGFnTG9va3VwKCkgeyB9CiAjZW5kaWYKIAorY29uc3Qg
Y2hhciogcHRyVGFnTmFtZShQdHJUYWcpOworI2VuZGlmIC8vIENQVShBUk02NEUpCisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogbmFtZXNwYWNlIFdURiB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDEw
ICs0NjUsMTggQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKAogICAg
IGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSkKICAgICAgICAgT3B0aW9uczo6dXNlRmFz
dFRMU0Zvcldhc21Db250ZXh0KCkgPSBmYWxzZTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6bG9n
SklUKCkKLSAgICAgICAgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkKKyAgICBpZiAoT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkKKyAgICAgICAgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3Nl
bWJseSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpCiAgICAgICAg
IHx8IE9wdGlvbnM6OmR1bXBGVExEaXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmR1
bXBSZWdFeHBEaXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNz
ZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wQkJRRGlzYXNzZW1ibHkoKQorICAgICAg
ICB8fCBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgT3B0aW9uczo6bmVl
ZERpc2Fzc2VtYmx5U3VwcG9ydCgpID0gdHJ1ZTsKKworICAgIGlmIChPcHRpb25zOjpsb2dKSVQo
KQorICAgICAgICB8fCBPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkKICAgICAgICAg
fHwgT3B0aW9uczo6ZHVtcEJ5dGVjb2RlQXRERkdUaW1lKCkKICAgICAgICAgfHwgT3B0aW9uczo6
ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wREZHR3JhcGhB
dEVhY2hQaGFzZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNyBAQCBib29s
IGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIFwKICAgICB2KEJvb2wsIHVzZU9T
TG9nLCBmYWxzZSwgTm9ybWFsLCAiTG9nIGRhdGFMb2coKXMgdG8gb3NfbG9nIGluc3RlYWQgb2Yg
c3RkZXJyIikgXAogICAgIC8qIGR1bXBEaXNhc3NlbWJseSBpbXBsaWVzIGR1bXBERkdEaXNhc3Nl
bWJseS4gKi8gXAorICAgIHYoQm9vbCwgbmVlZERpc2Fzc2VtYmx5U3VwcG9ydCwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZHVtcERpc2Fzc2VtYmx5LCBmYWxzZSwgTm9y
bWFsLCAiZHVtcHMgZGlzYXNzZW1ibHkgb2YgYWxsIEpJVCBjb21waWxlZCBjb2RlIHVwb24gY29t
cGlsYXRpb24iKSBcCiAgICAgdihCb29sLCBhc3luY0Rpc2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihCb29sLCBsb2dKSVQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI5NDIy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQwOSw2ICsxNDA5LDE2IEBAIHZvaWQgVk06OmNsZWFyU2NyYXRjaEJ1ZmZlcnMoKQog
ICAgICAgICBzY3JhdGNoQnVmZmVyLT5zZXRBY3RpdmVMZW5ndGgoMCk7CiB9CiAKK2Jvb2wgVk06
OmlzU2NyYXRjaEJ1ZmZlcih2b2lkKiBwdHIpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fc2Ny
YXRjaEJ1ZmZlckxvY2sgfTsKKyAgICBmb3IgKGF1dG8qIHNjcmF0Y2hCdWZmZXIgOiBtX3NjcmF0
Y2hCdWZmZXJzKSB7CisgICAgICAgIGlmIChzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkgPT0g
cHRyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwogdm9pZCBWTTo6ZW5zdXJlU2hhZG93Q2hpY2tlbigpCiB7CiAgICAgaWYgKG1fc2hhZG93
Q2hpY2tlbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjk0
MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtNjg1LDYgKzY4NSw3IEBAIHB1YmxpYzoKICAgICAvLyAtIFlvdSBjYW4gb25seSB3cml0
ZSB0byBlbnRyaWVzIGluIHRoZSBTY3JhdGNoQnVmZmVyIGZyb20gdGhlIG1haW4gdGhyZWFkLgog
ICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVfdCBzaXplKTsKICAg
ICB2b2lkIGNsZWFyU2NyYXRjaEJ1ZmZlcnMoKTsKKyAgICBib29sIGlzU2NyYXRjaEJ1ZmZlcih2
b2lkKik7CiAKICAgICBFbmNvZGVkSlNWYWx1ZSogZXhjZXB0aW9uRnV6emluZ0J1ZmZlcihzaXpl
X3Qgc2l6ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdy
aXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0
eS5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50
ZWdyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDggQEAgQUxXQVlTX0lOTElORSBz
dGF0aWMgYm9vbCBpc1NhbmVQb2ludGVyKAogICAgIHVpbnRwdHJfdCBwb2ludGVyQXNJbnQgPSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90Pihwb2ludGVyKTsKICAgICB1aW50cHRyX3QgY2Fub25pY2Fs
UG9pbnRlckJpdHMgPSBwb2ludGVyQXNJbnQgPDwgKDY0IC0gT1NfQ09OU1RBTlQoRUZGRUNUSVZF
X0FERFJFU1NfV0lEVEgpKTsKICAgICB1aW50cHRyX3Qgbm9uQ2Fub25pY2FsUG9pbnRlckJpdHMg
PSBwb2ludGVyQXNJbnQgPj4gT1NfQ09OU1RBTlQoRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpOwot
ICAgIHJldHVybiAhbm9uQ2Fub25pY2FsUG9pbnRlckJpdHMgJiYgY2Fub25pY2FsUG9pbnRlckJp
dHM7CisgICAgdWludHB0cl90IGxvd2VyNEcgPSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8
PCAzMikgLSAxOworICAgIHJldHVybiAhbm9uQ2Fub25pY2FsUG9pbnRlckJpdHMgJiYgY2Fub25p
Y2FsUG9pbnRlckJpdHMgJiYgcG9pbnRlckFzSW50ID4gbG93ZXI0RzsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHBvaW50ZXIpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm1DYWxsaW5nQ29udmVudGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUNhbGxpbmdDb252ZW50aW9ucy5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBT
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNhbGxpbmdDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTg1LDggKzg1LDEz
IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjZGVm
aW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0VYVFJBUyh2YWxpZGF0ZUZ1bmN0aW9uLCBu
YW1lKSAodm9pZCopdmFsaWRhdGVGdW5jdGlvbiwgbmFtZQorI2Vsc2UKKyNkZWZpbmUgSlNDX0FO
Tk9UQVRFX0pJVF9PUEVSQVRJT05fRVhUUkFTKHZhbGlkYXRlRnVuY3Rpb24sIG5hbWUpIG5hbWUK
KyNlbmRpZgorCiAjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1
bmN0aW9uKSBcCi0gICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBfSklU
VGFyZ2V0SURfIyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9uKCJfX0RBVEFf
Q09OU1QsX19qc2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCAodm9pZCopZnVuY3Rpb24j
I1ZhbGlkYXRlIH07CisgICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBf
SklUVGFyZ2V0SURfIyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9uKCJfX0RB
VEFfQ09OU1QsX19qc2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCBKU0NfQU5OT1RBVEVf
SklUX09QRVJBVElPTl9FWFRSQVMoZnVuY3Rpb24jI1ZhbGlkYXRlLCAjZnVuY3Rpb24pIH07CiAK
ICNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT04oZnVuY3Rpb24pIFwKICAgICBKU0Nf
REVDTEFSRV9BTkRfREVGSU5FX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTihmdW5jdGlvbik7IFwK
QEAgLTEwMCwxMiArMTA1LDYgQEAKICAgICBKU0NfREVDTEFSRV9BTkRfREVGSU5FX0pJVF9PUEVS
QVRJT05fUkVUVVJOX1ZBTElEQVRJT04oZnVuY3Rpb24pOyBcCiAgICAgSlNDX0FOTk9UQVRFX0pJ
VF9PUEVSQVRJT05fSU5URVJOQUwoZnVuY3Rpb24pCiAKLSNlbHNlCi0jZGVmaW5lIEpTQ19BTk5P
VEFURV9KSVRfT1BFUkFUSU9OKGZ1bmN0aW9uKQotI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09Q
RVJBVElPTl9QUk9CRShmdW5jdGlvbikKLSNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJ
T05fUkVUVVJOKGZ1bmN0aW9uKQotI2VuZGlmCi0KIAogI2RlZmluZSBKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT05fV0lUSE9VVF9WQVJJQUJMRShmdW5jdGlvbk5hbWUsIHJldHVyblR5cGUsIHBhcmFt
ZXRlcnMpIFwKICAgICByZXR1cm5UeXBlIEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyBmdW5jdGlv
bk5hbWUgcGFyYW1ldGVycwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZUpJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsMTAgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVO
QUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVy
YXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlIF9fYXNtKCJzZWN0
aW9uJHN0YXJ0JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKU0M6OkpJ
VE9wZXJhdGlvbkFubm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlIF9fYXNtKCJz
ZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiAKKyNpZiBFTkFCTEUoSklUX09Q
RVJBVElPTl9WQUxJREFUSU9OKQorCiB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpCiB7CiAg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CkBAIC00Myw0ICs0NCwxNCBAQCB2b2lk
IHBvcHVsYXRlSklUT3BlcmF0aW9ucygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJ
T05fVkFMSURBVElPTikKIAorI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCit2b2lkIHBvcHVsYXRl
RGlzYXNzZW1ibHlMYWJlbHMoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5
OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgSlNDOjpKSVRPcGVy
YXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigmc3RhcnRPZkpJ
VE9wZXJhdGlvbnNJbldlYkNvcmUsICZlbmRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmUpOworICAg
IH0pOworfQorI2VuZGlmIC8vIEVOQUJMRShESVNBU1NFTUJMRVIpCisKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpJVE9wZXJhdGlvbnMuaAkocmV2
aXNpb24gMjk0MjIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpJVE9w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEwICsyNywxNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQorV0VCQ09SRV9FWFBPUlQg
dm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCk7CisjZWxzZQoraW5saW5lIHZvaWQgcG9w
dWxhdGVEaXNhc3NlbWJseUxhYmVscygpIHsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSklUX09Q
RVJBVElPTl9WQUxJREFUSU9OKQogV0VCQ09SRV9FWFBPUlQgdm9pZCBwb3B1bGF0ZUpJVE9wZXJh
dGlvbnMoKTsKICNlbHNlCi1pbmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IH0K
K2lubGluZSB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIHsgcG9wdWxhdGVEaXNhc3NlbWJs
eUxhYmVscygpOyB9CiAjZW5kaWYKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9q
cy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291
cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNDEsMTAgKzI0MSwxMSBAQCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzRm9yCiB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZB
TElEQVRJT04pCiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0
T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQgX19hc20oInNlY3Rpb24kc3RhcnQk
X19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9u
QW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCBfX2FzbSgi
c2VjdGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogCisjaWYgRU5BQkxFKEpJVF9P
UEVSQVRJT05fVkFMSURBVElPTikKKwogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogewog
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwpAQCAtMjU0LDQgKzI1NSwxNCBAQCB2
b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVS
QVRJT05fVkFMSURBVElPTikKIAorI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCit2b2lkIHBvcHVs
YXRlRGlzYXNzZW1ibHlMYWJlbHMoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
S2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgSlNDOjpKSVRP
cGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigmc3RhcnRP
ZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCwgJmVuZE9mSklUT3BlcmF0aW9uc0lu
V2ViQ29yZVRlc3RTdXBwb3J0KTsKKyAgICB9KTsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoRElTQVNT
RU1CTEVSKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlVGVzdFN1cHBvcnQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuaAkocmV2aXNpb24g
Mjk0MjIwKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsMTAgKzY3LDE2IEBAIHZvaWQgc2V0dXBOZXds
eUNyZWF0ZWRTZXJ2aWNlV29ya2VyKHVpbnQKICAgICAKIHZvaWQgc2V0QWRkaXRpb25hbFN1cHBv
cnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpIFRFU1RfU1VQUE9SVF9FWFBP
UlQ7CiAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQordm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5
TGFiZWxzKCkgVEVTVF9TVVBQT1JUX0VYUE9SVDsKKyNlbHNlCitpbmxpbmUgdm9pZCBwb3B1bGF0
ZURpc2Fzc2VtYmx5TGFiZWxzKCkgeyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShKSVRfT1BFUkFU
SU9OX1ZBTElEQVRJT04pCiB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIFRFU1RfU1VQUE9S
VF9FWFBPUlQ7CiAjZWxzZQotaW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyB9
CitpbmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IHBvcHVsYXRlRGlzYXNzZW1i
bHlMYWJlbHMoKTsgfQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVUZXN0U3VwcG9y
dAo=
</data>
<flag name="commit-queue"
          id="488485"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459393</attachid>
            <date>2022-05-15 22:22:05 -0700</date>
            <delta_ts>2022-05-15 22:43:06 -0700</delta_ts>
            <desc>for EWS testing.</desc>
            <filename>wip-disassemble-operations2.1.patch</filename>
            <type>text/plain</type>
            <size>42429</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1NiwxMCArMzc1Niw4IEBA
IGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVybiBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCBf
X2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsIF9fYXNt
KCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7Ci0jZW5kaWYKIAogaW50IGpz
Y21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpAQCAtMzc4Myw2ICszNzgxLDExIEBAIGlu
dCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVy
c0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCwgJmVuZE9mSklUT3BlcmF0
aW9uc0luU2hlbGwpOwogI2VuZGlmCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlND
OjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigm
c3RhcnRPZkpJVE9wZXJhdGlvbnNJblNoZWxsLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7
CisjZW5kaWYKKwogICAgIGluaXRpYWxpemVUaW1lb3V0SWZOZWVkZWQoKTsKIAogI2lmIE9TKERB
UldJTikgfHwgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0pJVE9wZXJhdGlvbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwyMCArMjYsMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKSVRPcGVyYXRpb25MaXN0LmgiCiAKKyNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJHYXRlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIk9wdGlv
bnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShE
SVNBU1NFTUJMRVIpCiAKIExhenlOZXZlckRlc3Ryb3llZDxKSVRPcGVyYXRpb25MaXN0PiBqaXRP
cGVyYXRpb25MaXN0OwogCiBleHRlcm4gY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFy
dE9mSklUT3BlcmF0aW9uc0luSlNDIF9fYXNtKCJzZWN0aW9uJHN0YXJ0JF9fREFUQV9DT05TVCRf
X2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklU
T3BlcmF0aW9uc0luSlNDIF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3Bz
Iik7CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiB2b2lkIEpJVE9w
ZXJhdGlvbkxpc3Q6OmluaXRpYWxpemUoKQogewogICAgIGppdE9wZXJhdGlvbkxpc3QuY29uc3Ry
dWN0KCk7CkBAIC04NSw5ICs4OSwxMyBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRl
UG9pbnRlcnNJCiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewogICAgICAgICBpZiAo
T3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2lu
dGVycygmc3RhcnRPZkpJVE9wZXJhdGlvbnNJbkpTQywgJmVuZE9mSklUT3BlcmF0aW9uc0luSlND
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQo
KSkpCisgICAgICAgICAgICBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29y
ZSgpOwogICAgIH0pOwogfQogCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKKwogTExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xBUkVfUk9VVElORV9W
QUxJREFURShsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayk7CkBAIC0xMDQsMzEg
KzExMiw0MyBAQCBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUoY2hlY2twb2luCiBMTElO
VF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUobm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmUpOwog
TExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9s
b29wX2hpbnQpOwogCi12b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkph
dmFTY3JpcHRDb3JlRm9yTExJbnQoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
S2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyNpZiBFTkFCTEUoSklUX09Q
RVJBVElPTl9WQUxJREFUSU9OKQorI2RlZmluZSBMTElOVF9PUF9FWFRSQVModmFsaWRhdGVMYWJl
bCwgbmFtZVN0cikgYml0d2lzZV9jYXN0PHZvaWQqPih2YWxpZGF0ZUxhYmVsKSwgbmFtZVN0cgor
I2Vsc2UKKyNkZWZpbmUgTExJTlRfT1BfRVhUUkFTKHZhbGlkYXRlTGFiZWwsIG5hbWVTdHIpIG5h
bWVTdHIKKyNlbmRpZgogCiAjZGVmaW5lIExMSU5UX1JPVVRJTkUoZnVuY3Rpb25OYW1lKSB7IFwK
ICAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4oZnVuY3Rpb25OYW1lKSksIFwKLSAgICAgICAgYml0d2lzZV9jYXN0PHZv
aWQqPihMTElOVF9ST1VUSU5FX1ZBTElEQVRFKGZ1bmN0aW9uTmFtZSkpIFwKKyAgICAgICAgTExJ
TlRfT1BfRVhUUkFTKExMSU5UX1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1lKSwgI2Z1bmN0
aW9uTmFtZSkgXAogICAgIH0sCiAKICNkZWZpbmUgTExJTlRfT1AobmFtZSkgeyBcCiAgICAgICAg
IGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JFVFVS
Tl9WQUxJREFURShuYW1lKSkgXAorICAgICAgICBMTElOVF9PUF9FWFRSQVMoTExJTlRfUkVUVVJO
X1ZBTElEQVRFKG5hbWUpLCAjbmFtZSkgXAogICAgIH0sIHsgXAogICAgICAgICBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PihuYW1lKSksIFwKLSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lE
RTE2X1ZBTElEQVRFKG5hbWUpKSBcCisgICAgICAgIExMSU5UX09QX0VYVFJBUyhMTElOVF9SRVRV
Uk5fV0lERTE2X1ZBTElEQVRFKG5hbWUpLCAjbmFtZSAiIFt3aWRlMTZdIikgXAogICAgIH0sIHsg
XAogICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMzJDb2RlRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKLSAgICAgICAgYml0d2lzZV9jYXN0PHZv
aWQqPihMTElOVF9SRVRVUk5fV0lERTMyX1ZBTElEQVRFKG5hbWUpKSBcCisgICAgICAgIExMSU5U
X09QX0VYVFJBUyhMTElOVF9SRVRVUk5fV0lERTMyX1ZBTElEQVRFKG5hbWUpLCAjbmFtZSAiIFt3
aWRlMzJdIikgXAogICAgIH0sCiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG5hbWUs
IC4uLikgXAogICAgIExMSU5UX09QKG5hbWUjI19yZXR1cm5fbG9jYXRpb24pCiAKLSAgICAgICAg
Y29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBvcGVyYXRpb25zW10gPSB7CitzdHJ1Y3QgTExJ
bnRPcGVyYXRpb25zIHsKKyAgICBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBvcGVyYXRp
b25zOworICAgIHNpemVfdCBudW1iZXJPZk9wZXJhdGlvbnM7Cit9OworCitzdGF0aWMgTExJbnRP
cGVyYXRpb25zIGxsaW50T3BlcmF0aW9ucygpCit7CisgICAgc3RhdGljIGNvbnN0IEpJVE9wZXJh
dGlvbkFubm90YXRpb24qIG9wZXJhdGlvbnMgPSBudWxscHRyOworICAgIHN0YXRpYyBzaXplX3Qg
bnVtYmVyT2ZPcGVyYXRpb25zID0gMDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtl
eTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbJl0geworICAgICAgICBzdGF0aWMgY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBvcGVyYXRpb25zU3RvcmFnZVtdID0gewogICAgICAg
ICAgICAgTExJTlRfUk9VVElORShsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSkKICAg
ICAgICAgICAgIExMSU5UX1JPVVRJTkUobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9s
b2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJTkUobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxf
YXJpdHlfY2hlY2spCkBAIC0xNjAsMTUgKzE4MCwzMyBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6
OnBvcHVsYXRlUG9pbnRlcnNJCiAgICAgICAgICAgICBKU0NfSlNfR0FURV9PUENPREVTKExMSU5U
X1JFVFVSTl9MT0NBVElPTikKICAgICAgICAgICAgIEpTQ19XQVNNX0dBVEVfT1BDT0RFUyhMTElO
VF9SRVRVUk5fTE9DQVRJT04pCiAgICAgICAgIH07Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VK
SVQoKSkKLSAgICAgICAgICAgIGppdE9wZXJhdGlvbkxpc3QtPmFkZFBvaW50ZXJzKG9wZXJhdGlv
bnMsIG9wZXJhdGlvbnMgKyBXVEZfQVJSQVlfTEVOR1RIKG9wZXJhdGlvbnMpKTsKKyAgICAgICAg
b3BlcmF0aW9ucyA9IG9wZXJhdGlvbnNTdG9yYWdlOworICAgICAgICBudW1iZXJPZk9wZXJhdGlv
bnMgPSBXVEZfQVJSQVlfTEVOR1RIKG9wZXJhdGlvbnNTdG9yYWdlKTsKKyAgICB9KTsKKyAgICBy
ZXR1cm4geyBvcGVyYXRpb25zLCBudW1iZXJPZk9wZXJhdGlvbnMgfTsKK30KKwogI3VuZGVmIExM
SU5UX1JPVVRJTkUKICN1bmRlZiBMTElOVF9PUAogI3VuZGVmIExMSU5UX1JFVFVSTl9MT0NBVElP
TgorI3VuZGVmIExMSU5UX09QX0VYVFJBUworCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSW5KYXZh
U2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtl
eTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIGlmIChPcHRpb25z
Ojp1c2VKSVQoKSkgeworICAgICAgICAgICAgYXV0byBsaXN0ID0gbGxpbnRPcGVyYXRpb25zKCk7
CisgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2ludGVycyhsaXN0Lm9wZXJhdGlv
bnMsIGxpc3Qub3BlcmF0aW9ucyArIGxpc3QubnVtYmVyT2ZPcGVyYXRpb25zKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0
KCkpKQorICAgICAgICAgICAgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxh
YmVsc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpOwogICAgIH0pOwogfQogCi0KIHZvaWQgSklU
T3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0
aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0
aW9uKiBlbmRPcGVyYXRpb25zKQogewogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKQEAgLTE3
Nyw0ICsyMTUsNjMgQEAgdm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSQog
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIAorU1VQUFJFU1Nf
QVNBTiB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OmFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJ
VE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9u
KiBlbmQpCit7CisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBSRUxFQVNFX0FTU0VSVChP
cHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpOworICAgIGZvciAoY29uc3QgYXV0byog
Y3VycmVudCA9IGJlZ2luOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KSB7CisjaWYgRU5BQkxF
KEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKyAgICAgICAgYXV0byogb3BlcmF0aW9uID0gY3Vy
cmVudC0+b3BlcmF0aW9uV2l0aFZhbGlkYXRpb247CisjZWxzZQorICAgICAgICBhdXRvKiBvcGVy
YXRpb24gPSBjdXJyZW50LT5vcGVyYXRpb247CisjZW5kaWYKKyAgICAgICAgcmVnaXN0ZXJMYWJl
bChyZW1vdmVDb2RlUHRyVGFnKG9wZXJhdGlvbiksIGN1cnJlbnQtPm5hbWUpOworICAgIH0KKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGJlZ2luKTsKKyAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyNl
bmRpZiAvLyBFTkFCTEUoRElTQVNTRU1CTEVSKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9P
UEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5BQkxFKERJU0FTU0VNQkxFUikKKwordm9pZCBKSVRP
cGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgp
Cit7CisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBBU1NFUlQoT3B0aW9uczo6bmVlZERp
c2Fzc2VtYmx5U3VwcG9ydCgpKTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIGlmIChPcHRpb25zOjp1
c2VKSVQoKSkKKyAgICAgICAgICAgIGppdE9wZXJhdGlvbkxpc3QtPmFkZERpc2Fzc2VtYmx5TGFi
ZWxzKCZzdGFydE9mSklUT3BlcmF0aW9uc0luSlNDLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5KU0Mp
OworICAgIH0pOworI2VuZGlmCit9CisKK3ZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVE
aXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpCit7CisjaWYgRU5BQkxF
KERJU0FTU0VNQkxFUikKKyAgICBBU1NFUlQoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9y
dCgpKTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgeworICAg
ICAgICAgICAgYXV0byBsaXN0ID0gbGxpbnRPcGVyYXRpb25zKCk7CisgICAgICAgICAgICBqaXRP
cGVyYXRpb25MaXN0LT5hZGREaXNhc3NlbWJseUxhYmVscyhsaXN0Lm9wZXJhdGlvbnMsIGxpc3Qu
b3BlcmF0aW9ucyArIGxpc3QubnVtYmVyT2ZPcGVyYXRpb25zKTsKKyAgICAgICAgfQorICAgIH0p
OworI2VuZGlmCit9CisKK3ZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJs
eUxhYmVsc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVy
YXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKQorewor
I2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCisgICAgaWYgKExJS0VMWSghT3B0aW9uczo6bmVlZERp
c2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChPcHRpb25zOjp1
c2VKSVQoKSkKKyAgICAgICAgaml0T3BlcmF0aW9uTGlzdC0+YWRkRGlzYXNzZW1ibHlMYWJlbHMo
YmVnaW5PcGVyYXRpb25zLCBlbmRPcGVyYXRpb25zKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGJlZ2luT3BlcmF0aW9ucyk7CisgICAgVU5VU0VEX1BBUkFNKGVuZE9wZXJhdGlvbnMpOworI2Vu
ZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9KSVRPcGVyYXRpb25MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRpb25MaXN0LmgJKHJldmlzaW9uIDI5NDIyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzIsMTQgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitz
dHJ1Y3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbjsKKwogI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9O
X1ZBTElEQVRJT04pCiAKIC8vIFRoaXMgaW5kaXJlY3Rpb24gaXMgcHJvdmlkZWQgc28gdGhhdCB3
ZSBjYW4gbWFudWFsbHkgZm9yY2Ugb24gYXNzZXJ0aW9ucyBmb3IKIC8vIHRlc3RpbmcgZXZlbiBv
biByZWxlYXNlIGJ1aWxkcy4KICNkZWZpbmUgSklUX09QRVJBVElPTl9WQUxJREFUSU9OX0FTU0VS
VF9FTkFCTEVEIEFTU0VSVF9FTkFCTEVECiAKLXN0cnVjdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9u
OwotCiBjbGFzcyBKSVRPcGVyYXRpb25MaXN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSklUT3Bl
cmF0aW9uTGlzdCYgaW5zdGFuY2UoKTsKQEAgLTY0LDYgKzY0LDggQEAgcHVibGljOgogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxhdGVQb2ludGVyc0luRW1iZWRkZXIo
Y29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRP
cGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKTsKIAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVyKGNvbnN0
IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luT3BlcmF0aW9ucywgY29uc3QgSklUT3BlcmF0
aW9uQW5ub3RhdGlvbiogZW5kT3BlcmF0aW9ucyk7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGF0aWMgdm9pZCBhc3NlcnRJc0pJVE9wZXJhdGlvbihUIGZ1bmN0aW9uKQogICAgIHsKICAg
ICAgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uKTsKQEAgLTgxLDcgKzgzLDExIEBAIHB1YmxpYzoK
ICAgICB9CiAKIHByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxh
YmVsc0luSmF2YVNjcmlwdENvcmUoKTsKKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2Vt
Ymx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCk7CisKICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYWRkUG9pbnRlcnMoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW4sIGNv
bnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZCk7CisgICAgdm9pZCBhZGREaXNhc3NlbWJs
eUxhYmVscyhjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3Bl
cmF0aW9uQW5ub3RhdGlvbiogZW5kKTsKIAogI2lmIEpJVF9PUEVSQVRJT05fVkFMSURBVElPTl9B
U1NFUlRfRU5BQkxFRAogICAgIHZvaWQgYWRkSW52ZXJzZU1hcCh2b2lkKiB2YWxpZGF0aW9uRW50
cnksIHZvaWQqIHBvaW50ZXIpOwpAQCAtMTA2LDExICsxMTIsMjcgQEAgY2xhc3MgSklUT3BlcmF0
aW9uTGlzdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQogCi0g
ICAgc3RhdGljIHZvaWQgcG9wdWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmUoKSB7IH0KLSAg
ICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkg
eyB9CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmUoKQor
ICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBv
cnQoKSkpCisgICAgICAgICAgICBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0
Q29yZSgpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2Ny
aXB0Q29yZUZvckxMSW50KCkKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpu
ZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICAgICAgcG9wdWxhdGVEaXNhc3NlbWJs
eUxhYmVsc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpOworICAgIH0KKworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVy
KGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luT3BlcmF0aW9ucywgY29uc3QgSklU
T3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kT3BlcmF0aW9ucyk7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdGF0aWMgdm9pZCBhc3NlcnRJc0pJVE9wZXJhdGlvbihUKSB7IH0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBhc3NlcnRJc0pJVE9wZXJhdGlvbldpdGhWYWxp
ZGF0aW9uKFQpIHsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlRGlzYXNz
ZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlKCk7CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVE
aXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpOworCisgICAgdm9pZCBh
ZGREaXNhc3NlbWJseUxhYmVscyhjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbiwg
Y29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kKTsKIH07CiAKICNlbmRpZiAvLyBFTkFC
TEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgJKHJldmlz
aW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0
aW9uVmFsaWRhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDEzICs0NywxNiBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCi0KIHN0cnVj
dCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHsKICAgICB2b2lkKiBvcGVyYXRpb247CisjaWYgRU5B
QkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKICAgICB2b2lkKiBvcGVyYXRpb25XaXRoVmFs
aWRhdGlvbjsKKyNlbmRpZgorICAgIGNvbnN0IGNoYXIqIG5hbWU7CiB9OwogCisjaWYgRU5BQkxF
KEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKwogI2lmbmRlZiBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OX1ZBTElEQVRJT04KICNkZWZpbmUgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKGZ1bmN0aW9uTmFtZSkKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MiwxMyArODIsMTQgQEAgTGlua0J1ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFn
PiBMaQogICAgICAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoID0gdnNucHJpbnRmKG51bGxwdHIsIDAs
IGZvcm1hdCwgcHJlZmxpZ2h0QXJncyk7CiAgICAgICAgIHZhX2VuZChwcmVmbGlnaHRBcmdzKTsK
IAorICAgICAgICBjb25zdCBjaGFyIHByZWZpeFtdID0gInRodW5rOiAiOwogICAgICAgICBjaGFy
KiBidWZmZXIgPSAwOwotICAgICAgICBDU3RyaW5nIGxhYmVsID0gQ1N0cmluZzo6bmV3VW5pbml0
aWFsaXplZChzdHJpbmdMZW5ndGggKyAxLCBidWZmZXIpOwotICAgICAgICB2c25wcmludGYoYnVm
ZmVyLCBzdHJpbmdMZW5ndGggKyAxLCBmb3JtYXQsIGFyZ0xpc3QpOwotICAgICAgICBidWZmZXJb
c3RyaW5nTGVuZ3RoXSA9ICdcMCc7CisgICAgICAgIENTdHJpbmcgbGFiZWwgPSBDU3RyaW5nOjpu
ZXdVbmluaXRpYWxpemVkKHN0cmluZ0xlbmd0aCArIHNpemVvZihwcmVmaXgpLCBidWZmZXIpOwor
ICAgICAgICBzdHJuY3B5KGJ1ZmZlciwgcHJlZml4LCBzaXplb2YocHJlZml4KSAtIDEpOworICAg
ICAgICB2c25wcmludGYoYnVmZmVyICsgc2l6ZW9mKHByZWZpeCkgLSAxLCBzdHJpbmdMZW5ndGgg
KyAxLCBmb3JtYXQsIGFyZ0xpc3QpOwogICAgICAgICBvdXQucHJpbnRmKCIlcyIsIGJ1ZmZlcik7
CiAKLSAgICAgICAgcmVnaXN0ZXJUaHVua0xhYmVsKHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVj
dXRhYmxlQWRkcmVzcygpLCBXVEZNb3ZlKGxhYmVsKSk7CisgICAgICAgIHJlZ2lzdGVyTGFiZWwo
cmVzdWx0LmNvZGUoKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUobGFiZWwp
KTsKICAgICB9IGVsc2UKICAgICAgICAgb3V0LnZwcmludGYoZm9ybWF0LCBhcmdMaXN0KTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18xLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3BwCShyZXZpc2lvbiAyOTQyMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtOTAzLDEwICs5MDMsOCBAQCBzdGF0aWMgdm9pZCBydW4oY29uc3QgY2hhciopCiAKICNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gc3RhcnRPZkpJ
VE9wZXJhdGlvbnNJblRlc3RCMyBfX2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19q
c2Nfb3BzIik7CiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9m
SklUT3BlcmF0aW9uc0luVGVzdEIzIF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19q
c2Nfb3BzIik7Ci0jZW5kaWYKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpA
QCAtOTMwLDcgKzkyOCwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAjaWYg
RU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKICAgICBKU0M6OkpJVE9wZXJhdGlvbkxp
c3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luVGVz
dEIzLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMpOwogI2VuZGlmCi0gICAgCisjaWYgRU5B
QkxFKERJU0FTU0VNQkxFUikKKyAgICBpZiAoVU5MSUtFTFkoSlNDOjpPcHRpb25zOjpuZWVkRGlz
YXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVs
YXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luVGVz
dEIzLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMpOworI2VuZGlmCisKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDw9IDI7ICsraSkgewogICAgICAgICBKU0M6Ok9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPSBpOwogICAgICAgICBydW4oZmlsdGVyKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAJKHJl
dmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlz
YXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IkRpc2Fzc2VtYmxlci5oIgogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisj
aW5jbHVkZSA8dmFyaWFudD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTM2LDggKzM3LDIxIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi11c2luZyBUaHVua0xhYmVsTWFwID0gSGFzaE1hcDx2b2lk
KiwgQ1N0cmluZz47Ci1MYXp5TmV2ZXJEZXN0cm95ZWQ8VGh1bmtMYWJlbE1hcD4gdGh1bmtMYWJl
bE1hcDsKK25hbWVzcGFjZSBEaXNhc3NlbWJsZXIgeworCit1c2luZyBMYWJlbE1hcCA9IEhhc2hN
YXA8dm9pZCosIHN0ZDo6dmFyaWFudDxDU3RyaW5nLCBjb25zdCBjaGFyKj4+OworTGF6eU5ldmVy
RGVzdHJveWVkPExhYmVsTWFwPiBsYWJlbE1hcDsKKworc3RhdGljIExhYmVsTWFwJiBlbnN1cmVM
YWJlbE1hcCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBsYWJlbE1hcC5jb25zdHJ1Y3QoKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gbGFiZWxNYXAuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IERpc2Fzc2VtYmxlcgogCiB2b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiBjb2Rl
U3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91
dCkKIHsKQEAgLTE1NywyNyArMTcxLDI1IEBAIHZvaWQgd2FpdEZvckFzeW5jaHJvbm91c0Rpc2Fz
c2VtYmx5KCkKICAgICBhc3luY2hyb25vdXNEaXNhc3NlbWJsZXIoKS53YWl0VW50aWxFbXB0eSgp
OwogfQogCi1zdGF0aWMgVGh1bmtMYWJlbE1hcCYgZW5zdXJlVGh1bmtMYWJlbE1hcCgpCit2b2lk
IHJlZ2lzdGVyTGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3RyaW5nJiYgbGFiZWwpCiB7Ci0g
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25j
ZUtleSwgW10gewotICAgICAgICB0aHVua0xhYmVsTWFwLmNvbnN0cnVjdCgpOwotICAgIH0pOwot
ICAgIHJldHVybiB0aHVua0xhYmVsTWFwLmdldCgpOworICAgIERpc2Fzc2VtYmxlcjo6ZW5zdXJl
TGFiZWxNYXAoKS5hZGQodGh1bmtBZGRyZXNzLCBXVEZNb3ZlKGxhYmVsKSk7CiB9CiAKLXZvaWQg
cmVnaXN0ZXJUaHVua0xhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVsKQor
dm9pZCByZWdpc3RlckxhYmVsKHZvaWQqIGFkZHJlc3MsIGNvbnN0IGNoYXIqIGxhYmVsKQogewot
ICAgIGVuc3VyZVRodW5rTGFiZWxNYXAoKS5hZGQodGh1bmtBZGRyZXNzLCBXVEZNb3ZlKGxhYmVs
KSk7CisgICAgRGlzYXNzZW1ibGVyOjplbnN1cmVMYWJlbE1hcCgpLmFkZChhZGRyZXNzLCBsYWJl
bCk7CiB9CiAKLWNvbnN0IGNoYXIqIGxhYmVsRm9yVGh1bmsodm9pZCogdGh1bmtBZGRyZXNzKQor
Y29uc3QgY2hhciogbGFiZWxGb3Iodm9pZCogdGh1bmtBZGRyZXNzKQogewotICAgIGF1dG8mIG1h
cCA9IGVuc3VyZVRodW5rTGFiZWxNYXAoKTsKKyAgICBhdXRvJiBtYXAgPSBEaXNhc3NlbWJsZXI6
OmVuc3VyZUxhYmVsTWFwKCk7CiAgICAgYXV0byBpdCA9IG1hcC5maW5kKHRodW5rQWRkcmVzcyk7
CiAgICAgaWYgKGl0ID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGl0LT52YWx1ZS5kYXRhKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
Q1N0cmluZz4oaXQtPnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PENTdHJpbmc+KGl0
LT52YWx1ZSkuZGF0YSgpOworICAgIHJldHVybiBzdGQ6OmdldDxjb25zdCBjaGFyKj4oaXQtPnZh
bHVlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgJKHJldmlzaW9uIDI5NDIyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDggQEAgdm9pZCBkaXNhc3NlbWJsZUFzeW5jaHJvbm91
c2x5KAogCiBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHdhaXRGb3JBc3luY2hyb25vdXNEaXNhc3Nl
bWJseSgpOwogCi12b2lkIHJlZ2lzdGVyVGh1bmtMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENT
dHJpbmcmJiBsYWJlbCk7Ci1jb25zdCBjaGFyKiBsYWJlbEZvclRodW5rKHZvaWQqIHRodW5rQWRk
cmVzcyk7Cit2b2lkIHJlZ2lzdGVyTGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3RyaW5nJiYg
bGFiZWwpOwordm9pZCByZWdpc3RlckxhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgY29uc3QgY2hh
ciogbGFiZWwpOworY29uc3QgY2hhciogbGFiZWxGb3Iodm9pZCogdGh1bmtBZGRyZXNzKTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5jcHAJKHJldmlzaW9uIDI5NDIyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiwxNiBAQAogI2luY2x1ZGUgIkRpc2Fzc2Vt
Ymxlci5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJHUFJJ
bmZvLmgiCisjaW5jbHVkZSAiSW50ZWdyaXR5LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgog
I2luY2x1ZGUgIkxMSW50UENSYW5nZXMuaCIKKyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVk
ZSAiVk1JbnNwZWN0b3IuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpbnQu
aD4KICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9QdHJUYWcuaD4KKyNpbmNsdWRl
IDx3dGYvUmFuZ2UuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBBUk02NERpc2Fzc2Vt
YmxlciB7CiAKQEAgLTIwMSwxMiArMjA3LDEyIEBAIHZvaWQgQTY0RE9wY29kZTo6YXBwZW5kUENS
ZWxhdGl2ZU9mZnNldCgKICAgICAgICAgdGFyZ2V0SW5mbyA9ICIiOwogICAgIGVsc2UgaWYgKHRh
cmdldFBDID49IG1fc3RhcnRQQyAmJiB0YXJnZXRQQyA8IG1fZW5kUEMpCiAgICAgICAgIHNucHJp
bnRmKGJ1ZmZlciwgYnVmZmVyU2l6ZSAtIDEsICIgLT4gPCV1PiIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPigodGFyZ2V0UEMgLSBtX3N0YXJ0UEMpICogc2l6ZW9mKHVpbnQzMl90KSkpOwotICAgIGVs
c2UgaWYgKGNvbnN0IGNoYXIqIHRodW5rTGFiZWwgPSBsYWJlbEZvclRodW5rKHRhcmdldFBDKSkK
LSAgICAgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJTaXplIC0gMSwgIiAtPiA8dGh1bms6ICVz
PiIsIHRodW5rTGFiZWwpOworICAgIGVsc2UgaWYgKGNvbnN0IGNoYXIqIGxhYmVsID0gbGFiZWxG
b3IodGFyZ2V0UEMpKQorICAgICAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlclNpemUgLSAxLCAi
IC0+ICVzIiwgbGFiZWwpOwogICAgIGVsc2UgaWYgKGlzSklUUEModGFyZ2V0UEMpKQotICAgICAg
ICB0YXJnZXRJbmZvID0gIiAtPiA8SklUIFBDPiI7CisgICAgICAgIHRhcmdldEluZm8gPSAiIC0+
IEpJVCBQQyI7CiAgICAgZWxzZSBpZiAoTExJbnQ6OmlzTExJbnRQQyh0YXJnZXRQQykpCi0gICAg
ICAgIHRhcmdldEluZm8gPSAiIC0+IDxMTEludCBQQz4iOworICAgICAgICB0YXJnZXRJbmZvID0g
IiAtPiBMTEludCBQQyI7CiAgICAgZWxzZQogICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiA8dW5r
bm93bj4iOwogCkBAIC0xNTcwLDEyICsxNTc2LDEyNyBAQCBjb25zdCBjaGFyKiBBNjRET3Bjb2Rl
TG9naWNhbEltbWVkaWF0ZTo6CiAKIGNvbnN0IGNoYXIqIGNvbnN0IEE2NERPcGNvZGVNb3ZlV2lk
ZTo6c19vcE5hbWVzWzRdID0geyAibW92biIsIDAsICJtb3Z6IiwgIm1vdmsiIH07CiAKLWNvbnN0
IGNoYXIqIEE2NERPcGNvZGVNb3ZlV2lkZTo6Zm9ybWF0KCkKK2NsYXNzIE1vdmVXaWRlRm9ybWF0
VHJhaXQgeworcHVibGljOgorICAgIHVzaW5nIFJlc3VsdFR5cGUgPSBjb25zdCBjaGFyKjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgcmV0dXJuRWFybHlJZkFjY2VwdGVkID0gZmFsc2U7CisK
KyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdCBjaGFyKiByZWplY3RlZFJlc3VsdChBNjRE
T3Bjb2RlTW92ZVdpZGUqIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlLT5iYXNlRm9ybWF0KCk7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdCBjaGFyKiBhY2NlcHRlZFJlc3VsdChBNjRE
T3Bjb2RlTW92ZVdpZGUqIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlLT5mb3JtYXRCdWZmZXIoKTsg
fQorfTsKKworY2xhc3MgTW92ZVdpZGVJc1ZhbGlkVHJhaXQgeworcHVibGljOgorICAgIHVzaW5n
IFJlc3VsdFR5cGUgPSBib29sOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXR1cm5FYXJs
eUlmQWNjZXB0ZWQgPSB0cnVlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHJlamVjdGVk
UmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGFjY2VwdGVkUmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSopIHsgcmV0
dXJuIHRydWU7IH0KK307CisKK2Jvb2wgQTY0RE9wY29kZU1vdmVXaWRlOjpoYW5kbGVQb3RlbnRp
YWxEYXRhUG9pbnRlcih2b2lkKiBwdHIpCit7CisgICAgQVNTRVJUKEludGVncml0eTo6aXNTYW5l
UG9pbnRlcihwdHIpKTsKKworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIFZNSW5zcGVj
dG9yOjpmb3JFYWNoVk0oWyZdIChWTSYgdm0pIHsKKyAgICAgICAgaWYgKHB0ciA9PSAmdm0pIHsK
KyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIHZtIik7CisgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXZtLmlzSW5TZXJ2aWNlKCkpCisgICAgICAgICAgICByZXR1cm4g
SXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKworICAgICAgICBhdXRvKiB2bVN0YXJ0ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnZtKTsKKyAgICAgICAgYXV0byogdm1FbmQgPSB2bVN0
YXJ0ICsgc2l6ZW9mKFZNKTsKKyAgICAgICAgYXV0byogdThQdHIgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihwdHIpOworICAgICAgICBSYW5nZSB2bVJhbmdlKHZtU3RhcnQsIHZtRW5kKTsK
KyAgICAgICAgaWYgKHZtUmFuZ2UuY29udGFpbnModThQdHIpKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSB1OFB0ciAtIHZtU3RhcnQ7CisgICAgICAgICAgICBidWZmZXJQcmludGYo
IiB2bSArJXUiLCBvZmZzZXQpOworCisgICAgICAgICAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlv
biA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAocHRyID09ICZ2bS50b3BDYWxsRnJhbWUpCisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0udG9wQ2FsbEZyYW1lIjsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKG9mZnNldCA9PSBWTTo6dG9wRW50cnlGcmFtZU9mZnNldCgpKQorICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnRvcEVudHJ5RnJhbWUiOworICAgICAgICAgICAg
ZWxzZSBpZiAob2Zmc2V0ID09IFZNOjpleGNlcHRpb25PZmZzZXQoKSkKKyAgICAgICAgICAgICAg
ICBkZXNjcmlwdGlvbiA9ICJ2bS5tX2V4Y2VwdGlvbiI7CisgICAgICAgICAgICBlbHNlIGlmIChv
ZmZzZXQgPT0gVk06Om9mZnNldE9mSGVhcEJhcnJpZXJUaHJlc2hvbGQoKSkKKyAgICAgICAgICAg
ICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5oZWFwLm1fYmFycmllclRocmVzaG9sZCI7CisgICAgICAg
ICAgICBlbHNlIGlmIChvZmZzZXQgPT0gVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpCisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0uY2FsbEZyYW1lRm9yQ2F0Y2giOworICAg
ICAgICAgICAgZWxzZSBpZiAocHRyID09IHZtLmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpCisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0ubV9zb2Z0U3RhY2tMaW1pdCI7CisgICAg
ICAgICAgICBlbHNlIGlmIChwdHIgPT0gJnZtLm9zckV4aXRJbmRleCkKKyAgICAgICAgICAgICAg
ICBkZXNjcmlwdGlvbiA9ICJ2bS5vc3JFeGl0SW5kZXgiOworICAgICAgICAgICAgZWxzZSBpZiAo
cHRyID09ICZ2bS5vc3JFeGl0SnVtcERlc3RpbmF0aW9uKQorICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uID0gInZtLm9zckV4aXRKdW1wRGVzdGluYXRpb24iOworICAgICAgICAgICAgZWxzZSBp
ZiAocHRyID09IHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpCisgICAg
ICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0uc21hbGxTdHJpbmdzLm1fc2luZ2xlQ2hhcmFj
dGVyU3RyaW5ncyI7CisgICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gJnZtLnRhcmdldE1hY2hp
bmVQQ0ZvclRocm93KQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnRhcmdldE1h
Y2hpbmVQQ0ZvclRocm93IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSB2bS50cmFwcygp
LnRyYXBCaXRzQWRkcmVzcygpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1f
dHJhcHMubV90cmFwQml0cyI7CisjaWYgRU5BQkxFKERGR19ET0VTX0dDX1ZBTElEQVRJT04pCisg
ICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gdm0uYWRkcmVzc09mRG9lc0dDKCkpCisgICAgICAg
ICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0ubV9kb2VzR0MiOworI2VuZGlmCisgICAgICAgICAg
ICBpZiAoZGVzY3JpcHRpb24pCisgICAgICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCI6ICVzIiwg
ZGVzY3JpcHRpb24pOworCisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
dm0uaXNTY3JhdGNoQnVmZmVyKHB0cikpIHsKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIHZt
IHNjcmF0Y2hCdWZmZXIubV9idWZmZXIiKTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICB9KTsKKyAgICByZXR1
cm4gaGFuZGxlZDsKK30KKworI2lmIENQVShBUk02NEUpCitib29sIEE2NERPcGNvZGVNb3ZlV2lk
ZTo6aGFuZGxlUG90ZW50aWFsUHRyVGFnKHVpbnRwdHJfdCB2YWx1ZSkKK3sKKyAgICBpZiAoIXZh
bHVlIHx8IHZhbHVlID4gMHhmZmZmKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQdHJU
YWcgdGFnID0gc3RhdGljX2Nhc3Q8UHRyVGFnPih2YWx1ZSk7CisjaWYgRU5BQkxFKFBUUlRBR19E
RUJVR0dJTkcpCisgICAgY29uc3QgY2hhciogbmFtZSA9IFdURjo6cHRyVGFnTmFtZSh0YWcpOwor
ICAgIGlmIChuYW1lWzBdID09ICc8JykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPbmx5IHJl
c3VsdCB0aGF0IHN0YXJ0cyB3aXRoICc8JyBpcyAiPHVua25vd24+Ii4KKyNlbHNlCisgICAgLy8g
V2l0aG91dCBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORyksIG5vdCBhbGwgUHRyVGFncyBhcmUgcmVn
aXN0ZXJlZGYgZm9yCisgICAgLy8gcHJpbnRpbmcuIFNvLCB3ZSdsbCBqdXN0IGRvIHRoZSBtaW5p
bXVtIHdpdGggb25seSB0aGUgSlNDIHNwZWNpZmljIHRhZ3MuCisgICAgY29uc3QgY2hhciogbmFt
ZSA9IHB0clRhZ05hbWUodGFnKTsKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorCisgICAgLy8gQWxzbyBwcmludCAnPycgdG8gaW5kaWNhdGUgdGhhdCB0aGlz
IGlzIGEgbWF5YmUuIFdlIGRvIG5vdCBrbm93IGZvciBjZXJ0YWluCisgICAgLy8gaWYgdGhlIGNv
bnN0YW50IGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgYSBQdHJUYWcuCisgICAgYnVmZmVyUHJpbnRm
KCIgLT4gJXAgJXMgPyIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKSwgbmFtZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordGVtcGxhdGU8dHlwZW5hbWUgVHJhaXQ+Cit0
eXBlbmFtZSBUcmFpdDo6UmVzdWx0VHlwZSBBNjRET3Bjb2RlTW92ZVdpZGU6OnBhcnNlKCkKIHsK
ICAgICBpZiAob3BjKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1hdCgp
OworICAgICAgICByZXR1cm4gVHJhaXQ6OnJlamVjdGVkUmVzdWx0KHRoaXMpOwogICAgIGlmICgh
aXM2NEJpdCgpICYmIGh3KCkgPj0gMikKLSAgICAgICAgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1h
dCgpOworICAgICAgICByZXR1cm4gVHJhaXQ6OnJlamVjdGVkUmVzdWx0KHRoaXMpOworCisgICAg
aWYgY29uc3RleHByIChUcmFpdDo6cmV0dXJuRWFybHlJZkFjY2VwdGVkKQorICAgICAgICByZXR1
cm4gVHJhaXQ6OmFjY2VwdGVkUmVzdWx0KHRoaXMpOwogCiAgICAgaWYgKCFvcGMoKSAmJiAoIWlt
bWVkaWF0ZTE2KCkgfHwgIWh3KCkpICYmIChpczY0Qml0KCkgfHwgaW1tZWRpYXRlMTYoKSAhPSAw
eGZmZmYpKSB7CiAgICAgICAgIC8vIE1PViBwc2V1ZG8gb3AgZm9yIE1PVk4KQEAgLTE1ODcsMTAg
KzE3MDgsMTIgQEAgY29uc3QgY2hhciogQTY0RE9wY29kZU1vdmVXaWRlOjpmb3JtYXQoKQogICAg
ICAgICAgICAgaW50NjRfdCBhbW91bnQgPSBpbW1lZGlhdGUxNigpIDw8IChodygpICogMTYpOwog
ICAgICAgICAgICAgYW1vdW50ID0gfmFtb3VudDsKICAgICAgICAgICAgIGFwcGVuZFNpZ25lZElt
bWVkaWF0ZTY0KGFtb3VudCk7CisgICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oYW1vdW50KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlu
dDMyX3QgYW1vdW50ID0gaW1tZWRpYXRlMTYoKSA8PCAoaHcoKSAqIDE2KTsKICAgICAgICAgICAg
IGFtb3VudCA9IH5hbW91bnQ7CiAgICAgICAgICAgICBhcHBlbmRTaWduZWRJbW1lZGlhdGUoYW1v
dW50KTsKKyAgICAgICAgICAgIG1fYnVpbHRDb25zdGFudCA9IHN0YXRpY19jYXN0PGludHB0cl90
PihhbW91bnQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXBwZW5kSW5zdHJ1
Y3Rpb25OYW1lKG9wTmFtZSgpKTsKQEAgLTE2MDEsMTEgKzE3MjQsNjUgQEAgY29uc3QgY2hhciog
QTY0RE9wY29kZU1vdmVXaWRlOjpmb3JtYXQoKQogICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9y
KCk7CiAgICAgICAgICAgICBhcHBlbmRTaGlmdEFtb3VudChodygpKTsKICAgICAgICAgfQotICAg
IH0KIAotICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKKyAgICAgICAgaWYgKG9wYygpID09IDIp
IC8vIEVuY29kaW5nIGZvciBtb3Z6CisgICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSAwOwor
CisgICAgICAgIHVuc2lnbmVkIHNoaWZ0ID0gaHcoKSAqIDE2OworICAgICAgICB1aW50cHRyX3Qg
dmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGltbWVkaWF0ZTE2KCkpIDw8IHNoaWZ0Owor
ICAgICAgICB1aW50cHRyX3QgbWFzayA9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigweGZmZmYp
IDw8IHNoaWZ0KTsKKyAgICAgICAgbV9idWlsdENvbnN0YW50ICY9IG1hc2s7CisgICAgICAgIG1f
YnVpbHRDb25zdGFudCB8PSB2YWx1ZTsKKyAgICB9CisKKyAgICBhdXRvIGR1bXBDb25zdGFudERh
dGEgPSBbJl0geworICAgICAgICB1aW50MzJfdCogbmV4dFBDID0gbV9jdXJyZW50UEMgKyAxOwor
ICAgICAgICBpZiAobmV4dFBDID49IG1fZW5kUEMpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgQTY0RE9wY29kZSBuZXh0QmFzZU9wY29kZShtX3N0YXJ0UEMsIG1fZW5kUEMpOworICAg
ICAgICBBNjRET3Bjb2RlTW92ZVdpZGUmIG5leHRPcGNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxB
NjRET3Bjb2RlTW92ZVdpZGUqPigmbmV4dEJhc2VPcGNvZGUpOworICAgICAgICBuZXh0T3Bjb2Rl
LnNldFBDQW5kT3Bjb2RlKG5leHRQQywgKm5leHRQQyk7CisKKyAgICAgICAgYm9vbCBuZXh0SXNN
b3ZlV2lkZUdyb3VwID0gb3Bjb2RlR3JvdXBOdW1iZXIobV9vcGNvZGUpID09IG9wY29kZUdyb3Vw
TnVtYmVyKCpuZXh0UEMpOworCisgICAgICAgIGlmIChuZXh0SXNNb3ZlV2lkZUdyb3VwICYmIG5l
eHRPcGNvZGUuaXNWYWxpZCgpICYmIG5leHRPcGNvZGUucmQoKSA9PSByZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHZvaWQqIHB0ciA9IHJlbW92ZUNvZGVQdHJUYWcoYml0d2lz
ZV9jYXN0PHZvaWQqPihtX2J1aWx0Q29uc3RhbnQpKTsKKyAgICAgICAgaWYgKCFwdHIpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKEludGVncml0eTo6aXNTYW5lUG9pbnRlcihw
dHIpKSB7CisgICAgICAgICAgICBidWZmZXJQcmludGYoIiAtPiAlcCIsIHB0cik7CisgICAgICAg
ICAgICBpZiAoY29uc3QgY2hhciogbGFiZWwgPSBsYWJlbEZvcihwdHIpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBidWZmZXJQcmludGYoIiAlcyIsIGxhYmVsKTsKKyAgICAgICAgICAgIGlmIChp
c0pJVFBDKHB0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclByaW50ZigiIEpJVCBQ
QyIpOworICAgICAgICAgICAgaWYgKExMSW50Ojppc0xMSW50UEMocHRyKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnVmZmVyUHJpbnRmKCIgTExJbnQgUEMiKTsKKyAgICAgICAgICAgIGhhbmRs
ZVBvdGVudGlhbERhdGFQb2ludGVyKHB0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICBpZiAoaGFuZGxlUG90ZW50aWFsUHRyVGFnKG1f
YnVpbHRDb25zdGFudCkpCisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICAgICAgaWYg
KG1fYnVpbHRDb25zdGFudCA8IDB4MTAwMDApCisgICAgICAgICAgICBidWZmZXJQcmludGYoIiAt
PiAldSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2J1aWx0Q29uc3RhbnQpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgLT4gJXAiLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihtX2J1aWx0Q29uc3RhbnQpKTsKKyAgICB9OworCisgICAgaWYgKG1fc3RhcnRQQykK
KyAgICAgICAgZHVtcENvbnN0YW50RGF0YSgpOworCisgICAgcmV0dXJuIFRyYWl0OjphY2NlcHRl
ZFJlc3VsdCh0aGlzKTsKIH0KIAorY29uc3QgY2hhciogQTY0RE9wY29kZU1vdmVXaWRlOjpmb3Jt
YXQoKSB7IHJldHVybiBwYXJzZTxNb3ZlV2lkZUZvcm1hdFRyYWl0PigpOyB9Citib29sIEE2NERP
cGNvZGVNb3ZlV2lkZTo6aXNWYWxpZCgpIHsgcmV0dXJuIHBhcnNlPE1vdmVXaWRlSXNWYWxpZFRy
YWl0PigpOyB9CisKIGNvbnN0IGNoYXIqIEE2NERPcGNvZGVUZXN0QW5kQnJhbmNoSW1tZWRpYXRl
Ojpmb3JtYXQoKQogewogICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShvcEJpdCgpID8gInRibnoi
IDogInRieiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02
NC9BNjRET3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fz
c2VtYmxlci9BUk02NC9BNjRET3Bjb2RlLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTQsNyArMTk0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBidWZmZXJQcmludGYo
ImxzbCAjJXUiLCAxNiAqIGFtb3VudCk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBp
bnQgYnVmZmVyU2l6ZSA9IDgxOworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGJ1ZmZlclNpemUg
PSAxMDE7CiAKICAgICBjaGFyIG1fZm9ybWF0QnVmZmVyW2J1ZmZlclNpemVdOwogICAgIHVpbnQz
Ml90KiBtX3N0YXJ0UEM7CkBAIC0yMDIsNiArMjAyLDcgQEAgcHJvdGVjdGVkOgogICAgIHVpbnQz
Ml90KiBtX2N1cnJlbnRQQzsKICAgICB1aW50MzJfdCBtX29wY29kZTsKICAgICBpbnQgbV9idWZm
ZXJPZmZzZXQ7CisgICAgdWludHB0cl90IG1fYnVpbHRDb25zdGFudCB7IDAgfTsKIAogcHJpdmF0
ZToKICAgICBzdGF0aWMgT3Bjb2RlR3JvdXAqIG9wY29kZVRhYmxlWzMyXTsKQEAgLTg3MiwxMSAr
ODczLDI0IEBAIHB1YmxpYzoKICAgICBERUZJTkVfU1RBVElDX0ZPUk1BVChBNjRET3Bjb2RlTW92
ZVdpZGUsIHRoaXNPYmopOwogCiAgICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisgICAgYm9vbCBp
c1ZhbGlkKCk7CiAKICAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBzX29wTmFtZXNb
b3BjKCldOyB9CiAgICAgdW5zaWduZWQgb3BjKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDI5KSAm
IDB4MzsgfQogICAgIHVuc2lnbmVkIGh3KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDIxKSAmIDB4
MzsgfQogICAgIHVuc2lnbmVkIGltbWVkaWF0ZTE2KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDUp
ICYgMHhmZmZmOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXQ+IHR5
cGVuYW1lIFRyYWl0OjpSZXN1bHRUeXBlIHBhcnNlKCk7CisgICAgYm9vbCBoYW5kbGVQb3RlbnRp
YWxEYXRhUG9pbnRlcih2b2lkKik7CisgICAgYm9vbCBoYW5kbGVQb3RlbnRpYWxQdHJUYWcodWlu
dHB0cl90KTsKKworICAgIC8vIFRoZXNlIGZvcndhcmRpbmcgZnVuY3Rpb25zIGFyZSBuZWVkZWQg
Zm9yIE1vdmVXaWRlRm9ybWF0VHJhaXQgb25seS4KKyAgICBjb25zdCBjaGFyKiBiYXNlRm9ybWF0
KCkgeyByZXR1cm4gQTY0RE9wY29kZTo6Zm9ybWF0KCk7IH0KKyAgICBjb25zdCBjaGFyKiBmb3Jt
YXRCdWZmZXIoKSB7IHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsgfQorCisgICAgZnJpZW5kIGNsYXNz
IE1vdmVXaWRlRm9ybWF0VHJhaXQ7CisgICAgZnJpZW5kIGNsYXNzIE1vdmVXaWRlSXNWYWxpZFRy
YWl0OwogfTsKIAogY2xhc3MgQTY0RE9wY29kZVRlc3RBbmRCcmFuY2hJbW1lZGlhdGUgOiBwdWJs
aWMgQTY0RE9wY29kZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQ
dHJUYWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q1B0clRhZy5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ1B0clRhZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw4ICszNiwxOSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShQVFJUQUdfREVC
VUdHSU5HKQorI2lmIENQVShBUk02NEUpCisKK2NvbnN0IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFn
IHRhZykKK3sKKyNkZWZpbmUgUkVUVVJOX1BUUlRBR19OQU1FKF90YWdOYW1lLCBjYWxsZWVUeXBl
LCBjYWxsZXJUeXBlKSBjYXNlIF90YWdOYW1lOiByZXR1cm4gI190YWdOYW1lOworICAgIHN3aXRj
aCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRhZykpIHsKKyAgICAgICAgRk9SX0VBQ0hfSlNDX1BU
UlRBRyhSRVRVUk5fUFRSVEFHX05BTUUpCisgICAgfQorI3VuZGVmIFJFVFVSTl9QVFJUQUdfTkFN
RQorICAgIHJldHVybiBudWxscHRyOyAvLyBNYXRjaGluZyB0YWcgbm90IGZvdW5kLgorfQogCisj
aWYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCiBzdGF0aWMgY29uc3QgY2hhciogdGFnRm9yUHRy
KGNvbnN0IHZvaWQqIHB0cikKIHsKICNkZWZpbmUgUkVUVVJOX05BTUVfSUZfVEFHX01BVENIRVMo
dGFnLCBjYWxsZWVUeXBlLCBjYWxsZXJUeXBlKSBcCkBAIC01MCwyNCArNjEsMTQgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIHRhZ0ZvclB0cihjb25zdCB2b2lkKgogICAgIHJldHVybiBudWxscHRyOyAv
LyBNYXRjaGluZyB0YWcgbm90IGZvdW5kLgogfQogCi1zdGF0aWMgY29uc3QgY2hhciogcHRyVGFn
TmFtZShQdHJUYWcgdGFnKQotewotI2RlZmluZSBSRVRVUk5fUFRSVEFHX05BTUUoX3RhZ05hbWUs
IGNhbGxlZVR5cGUsIGNhbGxlclR5cGUpIGNhc2UgX3RhZ05hbWU6IHJldHVybiAjX3RhZ05hbWU7
Ci0gICAgc3dpdGNoIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGFnKSkgewotICAgICAgICBGT1Jf
RUFDSF9KU0NfUFRSVEFHKFJFVFVSTl9QVFJUQUdfTkFNRSkKLSAgICB9Ci0jdW5kZWYgUkVUVVJO
X1BUUlRBR19OQU1FCi0gICAgcmV0dXJuIG51bGxwdHI7IC8vIE1hdGNoaW5nIHRhZyBub3QgZm91
bmQuCi19Ci0KIHZvaWQgaW5pdGlhbGl6ZVB0clRhZ0xvb2t1cCgpCiB7CiAgICAgV1RGOjpQdHJU
YWdMb29rdXAmIGxvb2t1cCA9IGdfanNjQ29uZmlnLnB0clRhZ0xvb2t1cFJlY29yZDsKICAgICBs
b29rdXAuaW5pdGlhbGl6ZSh0YWdGb3JQdHIsIHB0clRhZ05hbWUpOwogICAgIFdURjo6cmVnaXN0
ZXJQdHJUYWdMb29rdXAoJmxvb2t1cCk7CiB9Ci0KLSNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBF
TkFCTEUoUFRSVEFHX0RFQlVHR0lORykKKyNlbmRpZiAvLyBFTkFCTEUoUFRSVEFHX0RFQlVHR0lO
RykKKyNlbmRpZiAvLyBDUFUoQVJNNjRFKQogCiAjaWYgQ1BVKEFSTTY0RSkKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmgJKHJldmlzaW9uIDI5NDIyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjQ4LDYgKzI0OCwxMCBAQCB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29rdXAoKTsK
IGlubGluZSB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29rdXAoKSB7IH0KICNlbmRpZgogCisjaWYg
Q1BVKEFSTTY0RSkKK2NvbnN0IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFnKTsKKyNlbmRpZiAvLyBD
UFUoQVJNNjRFKQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIG5hbWVzcGFjZSBXVEYgewogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjk0
MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2NSwxMCArNDY1LDE4IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVw
ZW5kZW50T3B0aW9ucygKICAgICBpZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5KCkpCiAgICAg
ICAgIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpID0gZmFsc2U7CiAgICAgCi0g
ICAgaWYgKE9wdGlvbnM6OmxvZ0pJVCgpCi0gICAgICAgIHx8IE9wdGlvbnM6OmR1bXBEaXNhc3Nl
bWJseSgpCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9w
dGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wREZHRGlz
YXNzZW1ibHkoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wRlRMRGlzYXNzZW1ibHkoKQorICAg
ICAgICB8fCBPcHRpb25zOjpkdW1wUmVnRXhwRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRp
b25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkKKyAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEJCUURp
c2Fzc2VtYmx5KCkKKyAgICAgICAgfHwgT3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2VtYmx5KCkpCisg
ICAgICAgIE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSA9IHRydWU7CisKKyAgICBp
ZiAoT3B0aW9uczo6bG9nSklUKCkKKyAgICAgICAgfHwgT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5
U3VwcG9ydCgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBCeXRlY29kZUF0REZHVGltZSgpCiAg
ICAgICAgIHx8IE9wdGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNlKCkKICAgICAgICAgfHwgT3B0
aW9uczo6ZHVtcERGR0dyYXBoQXRFYWNoUGhhc2UoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcsNiArMTI3LDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICBc
CiAgICAgdihCb29sLCB1c2VPU0xvZywgZmFsc2UsIE5vcm1hbCwgIkxvZyBkYXRhTG9nKClzIHRv
IG9zX2xvZyBpbnN0ZWFkIG9mIHN0ZGVyciIpIFwKICAgICAvKiBkdW1wRGlzYXNzZW1ibHkgaW1w
bGllcyBkdW1wREZHRGlzYXNzZW1ibHkuICovIFwKKyAgICB2KEJvb2wsIG5lZWREaXNhc3NlbWJs
eVN1cHBvcnQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGR1bXBEaXNh
c3NlbWJseSwgZmFsc2UsIE5vcm1hbCwgImR1bXBzIGRpc2Fzc2VtYmx5IG9mIGFsbCBKSVQgY29t
cGlsZWQgY29kZSB1cG9uIGNvbXBpbGF0aW9uIikgXAogICAgIHYoQm9vbCwgYXN5bmNEaXNhc3Nl
bWJseSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgbG9nSklULCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDksNiArMTQwOSwxNiBAQCB2b2lkIFZNOjpjbGVh
clNjcmF0Y2hCdWZmZXJzKCkKICAgICAgICAgc2NyYXRjaEJ1ZmZlci0+c2V0QWN0aXZlTGVuZ3Ro
KDApOwogfQogCitib29sIFZNOjppc1NjcmF0Y2hCdWZmZXIodm9pZCogcHRyKQoreworICAgIExv
Y2tlciBsb2NrZXIgeyBtX3NjcmF0Y2hCdWZmZXJMb2NrIH07CisgICAgZm9yIChhdXRvKiBzY3Jh
dGNoQnVmZmVyIDogbV9zY3JhdGNoQnVmZmVycykgeworICAgICAgICBpZiAoc2NyYXRjaEJ1ZmZl
ci0+ZGF0YUJ1ZmZlcigpID09IHB0cikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgVk06OmVuc3VyZVNoYWRvd0NoaWNrZW4oKQog
ewogICAgIGlmIChtX3NoYWRvd0NoaWNrZW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4NSw2ICs2ODUsNyBAQCBwdWJsaWM6CiAgICAgLy8g
LSBZb3UgY2FuIG9ubHkgd3JpdGUgdG8gZW50cmllcyBpbiB0aGUgU2NyYXRjaEJ1ZmZlciBmcm9t
IHRoZSBtYWluIHRocmVhZC4KICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyRm9yU2l6
ZShzaXplX3Qgc2l6ZSk7CiAgICAgdm9pZCBjbGVhclNjcmF0Y2hCdWZmZXJzKCk7CisgICAgYm9v
bCBpc1NjcmF0Y2hCdWZmZXIodm9pZCopOwogCiAgICAgRW5jb2RlZEpTVmFsdWUqIGV4Y2VwdGlv
bkZ1enppbmdCdWZmZXIoc2l6ZV90IHNpemUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9JbnRlZ3JpdHkuaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw4
IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNTYW5lUG9pbnRlcigKICAgICB1aW50cHRy
X3QgcG9pbnRlckFzSW50ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcik7CiAgICAg
dWludHB0cl90IGNhbm9uaWNhbFBvaW50ZXJCaXRzID0gcG9pbnRlckFzSW50IDw8ICg2NCAtIE9T
X0NPTlNUQU5UKEVGRkVDVElWRV9BRERSRVNTX1dJRFRIKSk7CiAgICAgdWludHB0cl90IG5vbkNh
bm9uaWNhbFBvaW50ZXJCaXRzID0gcG9pbnRlckFzSW50ID4+IE9TX0NPTlNUQU5UKEVGRkVDVElW
RV9BRERSRVNTX1dJRFRIKTsKLSAgICByZXR1cm4gIW5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzICYm
IGNhbm9uaWNhbFBvaW50ZXJCaXRzOworICAgIHVpbnRwdHJfdCBsb3dlcjRHID0gKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMSkgPDwgMzIpIC0gMTsKKyAgICByZXR1cm4gIW5vbkNhbm9uaWNhbFBv
aW50ZXJCaXRzICYmIGNhbm9uaWNhbFBvaW50ZXJCaXRzICYmIHBvaW50ZXJBc0ludCA+IGxvd2Vy
NEc7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwb2ludGVyKTsKICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ2FsbGluZ0NvbnZlbnRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1DYWxsaW5nQ29udmVudGlvbnMuaAkocmV2
aXNpb24gMjk0MjIwKQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1DYWxsaW5nQ29udmVudGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCkBAIC04NSw4ICs4NSwxMyBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQorI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9FWFRSQVMo
dmFsaWRhdGVGdW5jdGlvbiwgbmFtZSkgKHZvaWQqKXZhbGlkYXRlRnVuY3Rpb24sIG5hbWUKKyNl
bHNlCisjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0VYVFJBUyh2YWxpZGF0ZUZ1
bmN0aW9uLCBuYW1lKSBuYW1lCisjZW5kaWYKKwogI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09Q
RVJBVElPTl9JTlRFUk5BTChmdW5jdGlvbikgXAotICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJh
dGlvbkFubm90YXRpb24gX0pJVFRhcmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNl
ZCwgc2VjdGlvbigiX19EQVRBX0NPTlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlv
biwgKHZvaWQqKWZ1bmN0aW9uIyNWYWxpZGF0ZSB9OworICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9w
ZXJhdGlvbkFubm90YXRpb24gX0pJVFRhcmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygo
dXNlZCwgc2VjdGlvbigiX19EQVRBX0NPTlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5j
dGlvbiwgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fRVhUUkFTKGZ1bmN0aW9uIyNWYWxpZGF0
ZSwgI2Z1bmN0aW9uKSB9OwogCiAjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OKGZ1
bmN0aW9uKSBcCiAgICAgSlNDX0RFQ0xBUkVfQU5EX0RFRklORV9KSVRfT1BFUkFUSU9OX1ZBTElE
QVRJT04oZnVuY3Rpb24pOyBcCkBAIC0xMDAsMTIgKzEwNSw2IEBACiAgICAgSlNDX0RFQ0xBUkVf
QU5EX0RFRklORV9KSVRfT1BFUkFUSU9OX1JFVFVSTl9WQUxJREFUSU9OKGZ1bmN0aW9uKTsgXAog
ICAgIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKQogCi0jZWxz
ZQotI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTihmdW5jdGlvbikKLSNkZWZpbmUg
SlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fUFJPQkUoZnVuY3Rpb24pCi0jZGVmaW5lIEpTQ19B
Tk5PVEFURV9KSVRfT1BFUkFUSU9OX1JFVFVSTihmdW5jdGlvbikKLSNlbmRpZgotCiAKICNkZWZp
bmUgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OX1dJVEhPVVRfVkFSSUFCTEUoZnVuY3Rpb25OYW1l
LCByZXR1cm5UeXBlLCBwYXJhbWV0ZXJzKSBcCiAgICAgcmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9O
X0FUVFJJQlVURVMgZnVuY3Rpb25OYW1lIHBhcmFtZXRlcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICszMCwxMSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogZXh0ZXJu
IGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0lu
V2ViQ29yZSBfX2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBl
eHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9u
c0luV2ViQ29yZSBfX2FzbSgic2VjdGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwog
CisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKwogdm9pZCBwb3B1bGF0ZUpJ
VE9wZXJhdGlvbnMoKQogewogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwpAQCAt
NDMsNCArNDQsMTQgQEAgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogfQogI2VuZGlmIC8v
IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKKyNpZiBFTkFCTEUoRElTQVNTRU1C
TEVSKQordm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Cisg
ICAgICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0lu
RW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlLCAmZW5kT2ZKSVRPcGVyYXRp
b25zSW5XZWJDb3JlKTsKKyAgICB9KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRElTQVNTRU1CTEVS
KQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVK
SVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMCAr
MjcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKERJU0FTU0VNQkxF
UikKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpOworI2Vs
c2UKK2lubGluZSB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKSB7IH0KKyNlbmRpZgor
CiAjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCk7CiAjZWxzZQotaW5saW5lIHZvaWQgcG9wdWxhdGVK
SVRPcGVyYXRpb25zKCkgeyB9CitpbmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7
IHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKTsgfQogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJldmlz
aW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBw
b3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQxLDEwICsyNDEsMTEgQEAgdm9pZCBz
ZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvcgogfQogI2VuZGlmCiAKLSNpZiBFTkFC
TEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0
aW9uQW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0IF9f
YXNtKCJzZWN0aW9uJHN0YXJ0JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25z
dCBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3Jl
VGVzdFN1cHBvcnQgX19hc20oInNlY3Rpb24kZW5kJF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsK
IAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisKIHZvaWQgcG9wdWxhdGVK
SVRPcGVyYXRpb25zKCkKIHsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKQEAg
LTI1NCw0ICsyNTUsMTQgQEAgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogfQogI2VuZGlm
IC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKKyNpZiBFTkFCTEUoRElTQVNT
RU1CTEVSKQordm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7
CisgICAgICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVs
c0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQsICZl
bmRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCk7CisgICAgfSk7CiB9CisjZW5k
aWYgLy8gRU5BQkxFKERJU0FTU0VNQkxFUikKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZVRlc3RT
dXBwb3J0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9y
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RT
dXBwb3J0LmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMv
V2ViQ29yZVRlc3RTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDEwICs2Nywx
NiBAQCB2b2lkIHNldHVwTmV3bHlDcmVhdGVkU2VydmljZVdvcmtlcih1aW50CiAgICAgCiB2b2lk
IHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcm
KSBURVNUX1NVUFBPUlRfRVhQT1JUOwogCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKK3ZvaWQg
cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpIFRFU1RfU1VQUE9SVF9FWFBPUlQ7CisjZWxzZQor
aW5saW5lIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpIHsgfQorI2VuZGlmCisKICNp
ZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogdm9pZCBwb3B1bGF0ZUpJVE9wZXJh
dGlvbnMoKSBURVNUX1NVUFBPUlRfRVhQT1JUOwogI2Vsc2UKLWlubGluZSB2b2lkIHBvcHVsYXRl
SklUT3BlcmF0aW9ucygpIHsgfQoraW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkg
eyBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCk7IH0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlVGVzdFN1cHBvcnQK
</data>
<flag name="commit-queue"
          id="488486"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459397</attachid>
            <date>2022-05-15 22:43:06 -0700</date>
            <delta_ts>2022-05-15 23:01:36 -0700</delta_ts>
            <desc>for EWS testing</desc>
            <filename>wip-disassemble-operations2.2.patch</filename>
            <type>text/plain</type>
            <size>44508</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1NiwxMCArMzc1Niw4IEBA
IGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVybiBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCBf
X2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsIF9fYXNt
KCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7Ci0jZW5kaWYKIAogaW50IGpz
Y21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpAQCAtMzc4Myw2ICszNzgxLDExIEBAIGlu
dCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVy
c0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCwgJmVuZE9mSklUT3BlcmF0
aW9uc0luU2hlbGwpOwogI2VuZGlmCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlND
OjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigm
c3RhcnRPZkpJVE9wZXJhdGlvbnNJblNoZWxsLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7
CisjZW5kaWYKKwogICAgIGluaXRpYWxpemVUaW1lb3V0SWZOZWVkZWQoKTsKIAogI2lmIE9TKERB
UldJTikgfHwgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0pJVE9wZXJhdGlvbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwyMCArMjYsMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKSVRPcGVyYXRpb25MaXN0LmgiCiAKKyNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJHYXRlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIk9wdGlv
bnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShE
SVNBU1NFTUJMRVIpCiAKIExhenlOZXZlckRlc3Ryb3llZDxKSVRPcGVyYXRpb25MaXN0PiBqaXRP
cGVyYXRpb25MaXN0OwogCiBleHRlcm4gY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFy
dE9mSklUT3BlcmF0aW9uc0luSlNDIF9fYXNtKCJzZWN0aW9uJHN0YXJ0JF9fREFUQV9DT05TVCRf
X2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklU
T3BlcmF0aW9uc0luSlNDIF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3Bz
Iik7CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiB2b2lkIEpJVE9w
ZXJhdGlvbkxpc3Q6OmluaXRpYWxpemUoKQogewogICAgIGppdE9wZXJhdGlvbkxpc3QuY29uc3Ry
dWN0KCk7CkBAIC04NSw5ICs4OSwxMyBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRl
UG9pbnRlcnNJCiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewogICAgICAgICBpZiAo
T3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2lu
dGVycygmc3RhcnRPZkpJVE9wZXJhdGlvbnNJbkpTQywgJmVuZE9mSklUT3BlcmF0aW9uc0luSlND
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQo
KSkpCisgICAgICAgICAgICBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29y
ZSgpOwogICAgIH0pOwogfQogCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKKwogTExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xBUkVfUk9VVElORV9W
QUxJREFURShsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayk7CkBAIC0xMDQsMzEg
KzExMiw3NyBAQCBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUoY2hlY2twb2luCiBMTElO
VF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUobm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmUpOwog
TExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9s
b29wX2hpbnQpOwogCi12b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkph
dmFTY3JpcHRDb3JlRm9yTExJbnQoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
S2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKy8vI2lmIEVOQUJMRShKSVRf
T1BFUkFUSU9OX1ZBTElEQVRJT04pCisvLyNkZWZpbmUgTExJTlRfT1BfRVhUUkFTKHZhbGlkYXRl
TGFiZWwsIG5hbWVTdHIpIGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsaWRhdGVMYWJlbCksIG5hbWVT
dHIKKy8vI2Vsc2UKKy8vI2RlZmluZSBMTElOVF9PUF9FWFRSQVModmFsaWRhdGVMYWJlbCwgbmFt
ZVN0cikgbmFtZVN0cgorLy8jZW5kaWYKKy8vCisvLyNkZWZpbmUgTExJTlRfUk9VVElORShmdW5j
dGlvbk5hbWUpIHsgXAorLy8gICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENv
ZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KGZ1bmN0aW9uTmFtZSkpLCBcCisvLyAgICAg
ICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1lKSwg
I2Z1bmN0aW9uTmFtZSkgXAorLy8gICAgfSwKKy8vCisvLyNkZWZpbmUgTExJTlRfT1AobmFtZSkg
eyBcCisvLyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBcCisvLyAgICAgICAgTExJTlRfT1BfRVhUUkFT
KExMSU5UX1JFVFVSTl9WQUxJREFURShuYW1lKSwgI25hbWUpIFwKKy8vICAgIH0sIHsgXAorLy8g
ICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUxNkNvZGVGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorLy8gICAgICAgIExMSU5UX09QX0VYVFJBUyhM
TElOVF9SRVRVUk5fV0lERTE2X1ZBTElEQVRFKG5hbWUpLCAjbmFtZSAiIFt3aWRlMTZdIikgXAor
Ly8gICAgfSwgeyBcCisvLyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0V2lk
ZTMyQ29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBcCisvLyAgICAgICAg
TExJTlRfT1BfRVhUUkFTKExMSU5UX1JFVFVSTl9XSURFMzJfVkFMSURBVEUobmFtZSksICNuYW1l
ICIgW3dpZGUzMl0iKSBcCisvLyAgICB9LAogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKKyNkZWZpbmUgTExJTlRfUk9VVElORShmdW5jdGlvbk5hbWUpIHsgXAorICAgICAg
ICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPihmdW5jdGlvbk5hbWUpKSwgXAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExM
SU5UX1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1lKSwgI2Z1bmN0aW9uTmFtZSBcCisgICAg
fSwKKworI2RlZmluZSBMTElOVF9PUChuYW1lKSB7IFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZv
aWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBc
CisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJTlRfUkVUVVJOX1ZBTElEQVRFKG5hbWUp
KSwgI25hbWUgXAorICAgIH0sIHsgXAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50
OjpnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKKyAg
ICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lERTE2X1ZBTElEQVRFKG5h
bWUpKSwgI25hbWUgIiBbd2lkZTE2XSIgXAorICAgIH0sIHsgXAorICAgICAgICBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PihuYW1lKSksIFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lE
RTMyX1ZBTElEQVRFKG5hbWUpKSwgI25hbWUgIiBbd2lkZTMyXSIgXAorICAgIH0sCisjZWxzZSAv
LyBub3QgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKICNkZWZpbmUgTExJTlRfUk9V
VElORShmdW5jdGlvbk5hbWUpIHsgXAogICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50
OjpnZXRDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihmdW5jdGlvbk5hbWUpKSwgXAot
ICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rp
b25OYW1lKSkgXAorICAgICAgICAjZnVuY3Rpb25OYW1lKSBcCiAgICAgfSwKIAogI2RlZmluZSBM
TElOVF9PUChuYW1lKSB7IFwKICAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0
Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBcCi0gICAgICAgIGJpdHdp
c2VfY2FzdDx2b2lkKj4oTExJTlRfUkVUVVJOX1ZBTElEQVRFKG5hbWUpKSBcCisgICAgICAgICNu
YW1lKSBcCiAgICAgfSwgeyBcCiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6Omdl
dFdpZGUxNkNvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAg
ICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9XSURFMTZfVkFMSURBVEUobmFtZSkp
IFwKKyAgICAgICAgI25hbWUgIiBbd2lkZTE2XSIpIFwKICAgICB9LCB7IFwKICAgICAgICAgYml0
d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0V2lkZTMyQ29kZUZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4obmFtZSkpLCBcCi0gICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJTlRfUkVU
VVJOX1dJREUzMl9WQUxJREFURShuYW1lKSkgXAorICAgICAgICAjbmFtZSAiIFt3aWRlMzJdIikg
XAogICAgIH0sCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIAog
I2RlZmluZSBMTElOVF9SRVRVUk5fTE9DQVRJT04obmFtZSwgLi4uKSBcCiAgICAgTExJTlRfT1Ao
bmFtZSMjX3JldHVybl9sb2NhdGlvbikKIAotICAgICAgICBjb25zdCBKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uIG9wZXJhdGlvbnNbXSA9IHsKK3N0cnVjdCBMTEludE9wZXJhdGlvbnMgeworICAgIGNv
bnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIG9wZXJhdGlvbnM7CisgICAgc2l6ZV90IG51bWJl
ck9mT3BlcmF0aW9uczsKK307CisKK3N0YXRpYyBMTEludE9wZXJhdGlvbnMgbGxpbnRPcGVyYXRp
b25zKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogb3BlcmF0
aW9ucyA9IG51bGxwdHI7CisgICAgc3RhdGljIHNpemVfdCBudW1iZXJPZk9wZXJhdGlvbnMgPSAw
OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VLZXksIFsmXSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0
aW9uIG9wZXJhdGlvbnNTdG9yYWdlW10gPSB7CiAgICAgICAgICAgICBMTElOVF9ST1VUSU5FKGxs
aW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKQogICAgICAgICAgICAgTExJTlRfUk9VVElO
RShsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKQogICAgICAgICAgICAgTExJ
TlRfUk9VVElORShsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjaykKQEAgLTE2MCwx
NSArMjE0LDMzIEBAIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0kKICAg
ICAgICAgICAgIEpTQ19KU19HQVRFX09QQ09ERVMoTExJTlRfUkVUVVJOX0xPQ0FUSU9OKQogICAg
ICAgICAgICAgSlNDX1dBU01fR0FURV9PUENPREVTKExMSU5UX1JFVFVSTl9MT0NBVElPTikKICAg
ICAgICAgfTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQotICAgICAgICAgICAgaml0
T3BlcmF0aW9uTGlzdC0+YWRkUG9pbnRlcnMob3BlcmF0aW9ucywgb3BlcmF0aW9ucyArIFdURl9B
UlJBWV9MRU5HVEgob3BlcmF0aW9ucykpOworICAgICAgICBvcGVyYXRpb25zID0gb3BlcmF0aW9u
c1N0b3JhZ2U7CisgICAgICAgIG51bWJlck9mT3BlcmF0aW9ucyA9IFdURl9BUlJBWV9MRU5HVEgo
b3BlcmF0aW9uc1N0b3JhZ2UpOworICAgIH0pOworICAgIHJldHVybiB7IG9wZXJhdGlvbnMsIG51
bWJlck9mT3BlcmF0aW9ucyB9OworfQorCiAjdW5kZWYgTExJTlRfUk9VVElORQogI3VuZGVmIExM
SU5UX09QCiAjdW5kZWYgTExJTlRfUkVUVVJOX0xPQ0FUSU9OCisjdW5kZWYgTExJTlRfT1BfRVhU
UkFTCisKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCit2b2lkIEpJVE9w
ZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKQor
eworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CisgICAgICAg
ICAgICBhdXRvIGxpc3QgPSBsbGludE9wZXJhdGlvbnMoKTsKKyAgICAgICAgICAgIGppdE9wZXJh
dGlvbkxpc3QtPmFkZFBvaW50ZXJzKGxpc3Qub3BlcmF0aW9ucywgbGlzdC5vcGVyYXRpb25zICsg
bGlzdC5udW1iZXJPZk9wZXJhdGlvbnMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFVOTElL
RUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgICAgICBKSVRP
cGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZv
ckxMSW50KCk7CiAgICAgfSk7CiB9CiAKLQogdm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0
ZVBvaW50ZXJzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9w
ZXJhdGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpCiB7
CiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpAQCAtMTc3LDQgKzI0OSw2MyBAQCB2b2lkIEpJ
VE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKQogCitTVVBQUkVTU19BU0FOIHZvaWQgSklUT3BlcmF0aW9u
TGlzdDo6YWRkRGlzYXNzZW1ibHlMYWJlbHMoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiog
YmVnaW4sIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZCkKK3sKKyNpZiBFTkFCTEUo
RElTQVNTRU1CTEVSKQorICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJs
eVN1cHBvcnQoKSk7CisgICAgZm9yIChjb25zdCBhdXRvKiBjdXJyZW50ID0gYmVnaW47IGN1cnJl
bnQgIT0gZW5kOyArK2N1cnJlbnQpIHsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFU
SU9OKQorICAgICAgICBhdXRvKiBvcGVyYXRpb24gPSBjdXJyZW50LT5vcGVyYXRpb25XaXRoVmFs
aWRhdGlvbjsKKyNlbHNlCisgICAgICAgIGF1dG8qIG9wZXJhdGlvbiA9IGN1cnJlbnQtPm9wZXJh
dGlvbjsKKyNlbmRpZgorICAgICAgICByZWdpc3RlckxhYmVsKHJlbW92ZUNvZGVQdHJUYWcob3Bl
cmF0aW9uKSwgY3VycmVudC0+bmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
YmVnaW4pOworICAgIFVOVVNFRF9QQVJBTShlbmQpOworI2VuZGlmIC8vIEVOQUJMRShESVNBU1NF
TUJMRVIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8
fCBFTkFCTEUoRElTQVNTRU1CTEVSKQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRl
RGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlKCkKK3sKKyNpZiBFTkFCTEUoRElTQVNT
RU1CTEVSKQorICAgIEFTU0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpOwor
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICAgICAg
aml0T3BlcmF0aW9uTGlzdC0+YWRkRGlzYXNzZW1ibHlMYWJlbHMoJnN0YXJ0T2ZKSVRPcGVyYXRp
b25zSW5KU0MsICZlbmRPZkpJVE9wZXJhdGlvbnNJbkpTQyk7CisgICAgfSk7CisjZW5kaWYKK30K
Kwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZh
U2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQorICAgIEFT
U0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpOworICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CisgICAgICAgICAgICBhdXRvIGxpc3QgPSBs
bGludE9wZXJhdGlvbnMoKTsKKyAgICAgICAgICAgIGppdE9wZXJhdGlvbkxpc3QtPmFkZERpc2Fz
c2VtYmx5TGFiZWxzKGxpc3Qub3BlcmF0aW9ucywgbGlzdC5vcGVyYXRpb25zICsgbGlzdC5udW1i
ZXJPZk9wZXJhdGlvbnMpOworICAgICAgICB9CisgICAgfSk7CisjZW5kaWYKK30KKwordm9pZCBK
SVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcihjb25z
dCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9wZXJhdGlvbnMsIGNvbnN0IEpJVE9wZXJh
dGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpCit7CisjaWYgRU5BQkxFKERJU0FTU0VNQkxF
UikKKyAgICBpZiAoTElLRUxZKCFPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICBqaXRP
cGVyYXRpb25MaXN0LT5hZGREaXNhc3NlbWJseUxhYmVscyhiZWdpbk9wZXJhdGlvbnMsIGVuZE9w
ZXJhdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYmVnaW5PcGVyYXRpb25zKTsKKyAg
ICBVTlVTRURfUEFSQU0oZW5kT3BlcmF0aW9ucyk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlv
bkxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJ
VE9wZXJhdGlvbkxpc3QuaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRpb25MaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwx
NCArMzIsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uOworCiAjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIAogLy8gVGhp
cyBpbmRpcmVjdGlvbiBpcyBwcm92aWRlZCBzbyB0aGF0IHdlIGNhbiBtYW51YWxseSBmb3JjZSBv
biBhc3NlcnRpb25zIGZvcgogLy8gdGVzdGluZyBldmVuIG9uIHJlbGVhc2UgYnVpbGRzLgogI2Rl
ZmluZSBKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT05fQVNTRVJUX0VOQUJMRUQgQVNTRVJUX0VOQUJM
RUQKIAotc3RydWN0IEpJVE9wZXJhdGlvbkFubm90YXRpb247Ci0KIGNsYXNzIEpJVE9wZXJhdGlv
bkxpc3QgewogcHVibGljOgogICAgIHN0YXRpYyBKSVRPcGVyYXRpb25MaXN0JiBpbnN0YW5jZSgp
OwpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uKiBiZWdpbk9wZXJhdGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVu
ZE9wZXJhdGlvbnMpOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxh
dGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlv
biogYmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVy
YXRpb25zKTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElz
SklUT3BlcmF0aW9uKFQgZnVuY3Rpb24pCiAgICAgewogICAgICAgICBVTlVTRURfUEFSQU0oZnVu
Y3Rpb24pOwpAQCAtODEsNyArODMsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAg
ICBzdGF0aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgp
OworICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRD
b3JlRm9yTExJbnQoKTsKKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGRQb2ludGVycyhjb25z
dCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3BlcmF0aW9uQW5ub3Rh
dGlvbiogZW5kKTsKKyAgICB2b2lkIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJh
dGlvbkFubm90YXRpb24qIGJlZ2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQp
OwogCiAjaWYgSklUX09QRVJBVElPTl9WQUxJREFUSU9OX0FTU0VSVF9FTkFCTEVECiAgICAgdm9p
ZCBhZGRJbnZlcnNlTWFwKHZvaWQqIHZhbGlkYXRpb25FbnRyeSwgdm9pZCogcG9pbnRlcik7CkBA
IC0xMDYsMTEgKzExMiwyNyBAQCBjbGFzcyBKSVRPcGVyYXRpb25MaXN0IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCkgeyB9CiAKLSAgICBzdGF0aWMgdm9pZCBwb3B1bGF0
ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZSgpIHsgfQotICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRl
UG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBw
b3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZSgpCisgICAgeworICAgICAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgICAgIHBv
cHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlKCk7CisgICAgfQorICAgIHN0
YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKQorICAg
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQo
KSkpCisgICAgICAgICAgICBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29y
ZUZvckxMSW50KCk7CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5u
b3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBl
bmRPcGVyYXRpb25zKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFz
c2VydElzSklUT3BlcmF0aW9uKFQpIHsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRp
YyB2b2lkIGFzc2VydElzSklUT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oVCkgeyB9CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlw
dENvcmUoKTsKKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZh
U2NyaXB0Q29yZUZvckxMSW50KCk7CisKKyAgICB2b2lkIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGNv
bnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uKiBlbmQpOwogfTsKIAogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElE
QVRJT04pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlv
blZhbGlkYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0pJVE9wZXJhdGlvblZhbGlkYXRpb24uaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDcsMTMgKzQ3LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgRU5BQkxF
KEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKLQogc3RydWN0IEpJVE9wZXJhdGlvbkFubm90YXRp
b24gewogICAgIHZvaWQqIG9wZXJhdGlvbjsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQogICAgIHZvaWQqIG9wZXJhdGlvbldpdGhWYWxpZGF0aW9uOworI2VuZGlmCisgICAg
Y29uc3QgY2hhciogbmFtZTsKIH07CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFU
SU9OKQorCiAjaWZuZGVmIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTgogI2Rl
ZmluZSBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04oZnVuY3Rpb25OYW1lKQog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEzICs4MiwxNCBAQCBM
aW5rQnVmZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IExpCiAgICAgICAgIHNpemVfdCBz
dHJpbmdMZW5ndGggPSB2c25wcmludGYobnVsbHB0ciwgMCwgZm9ybWF0LCBwcmVmbGlnaHRBcmdz
KTsKICAgICAgICAgdmFfZW5kKHByZWZsaWdodEFyZ3MpOwogCisgICAgICAgIGNvbnN0IGNoYXIg
cHJlZml4W10gPSAidGh1bms6ICI7CiAgICAgICAgIGNoYXIqIGJ1ZmZlciA9IDA7Ci0gICAgICAg
IENTdHJpbmcgbGFiZWwgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKHN0cmluZ0xlbmd0aCAr
IDEsIGJ1ZmZlcik7Ci0gICAgICAgIHZzbnByaW50ZihidWZmZXIsIHN0cmluZ0xlbmd0aCArIDEs
IGZvcm1hdCwgYXJnTGlzdCk7Ci0gICAgICAgIGJ1ZmZlcltzdHJpbmdMZW5ndGhdID0gJ1wwJzsK
KyAgICAgICAgQ1N0cmluZyBsYWJlbCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoc3RyaW5n
TGVuZ3RoICsgc2l6ZW9mKHByZWZpeCksIGJ1ZmZlcik7CisgICAgICAgIHN0cm5jcHkoYnVmZmVy
LCBwcmVmaXgsIHNpemVvZihwcmVmaXgpIC0gMSk7CisgICAgICAgIHZzbnByaW50ZihidWZmZXIg
KyBzaXplb2YocHJlZml4KSAtIDEsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7
CiAgICAgICAgIG91dC5wcmludGYoIiVzIiwgYnVmZmVyKTsKIAotICAgICAgICByZWdpc3RlclRo
dW5rTGFiZWwocmVzdWx0LmNvZGUoKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1v
dmUobGFiZWwpKTsKKyAgICAgICAgcmVnaXN0ZXJMYWJlbChyZXN1bHQuY29kZSgpLnVudGFnZ2Vk
RXhlY3V0YWJsZUFkZHJlc3MoKSwgV1RGTW92ZShsYWJlbCkpOwogICAgIH0gZWxzZQogICAgICAg
ICBvdXQudnByaW50Zihmb3JtYXQsIGFyZ0xpc3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjNfMS5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjNfMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MDMsMTAgKzkwMyw4IEBA
IHN0YXRpYyB2b2lkIHJ1bihjb25zdCBjaGFyKikKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogZXh0ZXJuIGNvbnN0IEpT
Qzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luVGVzdEIzIF9f
YXNtKCJzZWN0aW9uJHN0YXJ0JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25z
dCBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMg
X19hc20oInNlY3Rpb24kZW5kJF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKLSNlbmRpZgogCiBp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CkBAIC05MzAsNyArOTI4LDExIEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9W
QUxJREFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0lu
RW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMsICZlbmRPZkpJVE9wZXJhdGlv
bnNJblRlc3RCMyk7CiAjZW5kaWYKLSAgICAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQorICAg
IGlmIChVTkxJS0VMWShKU0M6Ok9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisg
ICAgICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0lu
RW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMsICZlbmRPZkpJVE9wZXJhdGlv
bnNJblRlc3RCMyk7CisjZW5kaWYKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gMjsg
KytpKSB7CiAgICAgICAgIEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA9IGk7CiAg
ICAgICAgIHJ1bihmaWx0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9EaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlIDx2YXJpYW50PgogI2lu
Y2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgpAQCAtMzYsOCArMzcsMjEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXVzaW5nIFRodW5rTGFiZWxNYXAgPSBIYXNoTWFwPHZvaWQqLCBDU3RyaW5nPjsKLUxhenlOZXZl
ckRlc3Ryb3llZDxUaHVua0xhYmVsTWFwPiB0aHVua0xhYmVsTWFwOworbmFtZXNwYWNlIERpc2Fz
c2VtYmxlciB7CisKK3VzaW5nIExhYmVsTWFwID0gSGFzaE1hcDx2b2lkKiwgc3RkOjp2YXJpYW50
PENTdHJpbmcsIGNvbnN0IGNoYXIqPj47CitMYXp5TmV2ZXJEZXN0cm95ZWQ8TGFiZWxNYXA+IGxh
YmVsTWFwOworCitzdGF0aWMgTGFiZWxNYXAmIGVuc3VyZUxhYmVsTWFwKCkKK3sKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CisgICAgICAgIGxhYmVsTWFwLmNvbnN0cnVjdCgpOworICAgIH0pOworICAgIHJldHVybiBs
YWJlbE1hcC5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlzYXNzZW1ibGVyCiAKIHZvaWQg
ZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFn
PiYgY29kZVB0ciwgc2l6ZV90IHNpemUsIHZvaWQqIGNvZGVTdGFydCwgdm9pZCogY29kZUVuZCwg
Y29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewpAQCAtMTU3LDI3ICsxNzEs
MjUgQEAgdm9pZCB3YWl0Rm9yQXN5bmNocm9ub3VzRGlzYXNzZW1ibHkoKQogICAgIGFzeW5jaHJv
bm91c0Rpc2Fzc2VtYmxlcigpLndhaXRVbnRpbEVtcHR5KCk7CiB9CiAKLXN0YXRpYyBUaHVua0xh
YmVsTWFwJiBlbnN1cmVUaHVua0xhYmVsTWFwKCkKK3ZvaWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiB0
aHVua0FkZHJlc3MsIENTdHJpbmcmJiBsYWJlbCkKIHsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Ci0gICAgICAgIHRo
dW5rTGFiZWxNYXAuY29uc3RydWN0KCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRodW5rTGFiZWxN
YXAuZ2V0KCk7CisgICAgRGlzYXNzZW1ibGVyOjplbnN1cmVMYWJlbE1hcCgpLmFkZCh0aHVua0Fk
ZHJlc3MsIFdURk1vdmUobGFiZWwpKTsKIH0KIAotdm9pZCByZWdpc3RlclRodW5rTGFiZWwodm9p
ZCogdGh1bmtBZGRyZXNzLCBDU3RyaW5nJiYgbGFiZWwpCit2b2lkIHJlZ2lzdGVyTGFiZWwodm9p
ZCogYWRkcmVzcywgY29uc3QgY2hhciogbGFiZWwpCiB7Ci0gICAgZW5zdXJlVGh1bmtMYWJlbE1h
cCgpLmFkZCh0aHVua0FkZHJlc3MsIFdURk1vdmUobGFiZWwpKTsKKyAgICBEaXNhc3NlbWJsZXI6
OmVuc3VyZUxhYmVsTWFwKCkuYWRkKGFkZHJlc3MsIGxhYmVsKTsKIH0KIAotY29uc3QgY2hhciog
bGFiZWxGb3JUaHVuayh2b2lkKiB0aHVua0FkZHJlc3MpCitjb25zdCBjaGFyKiBsYWJlbEZvcih2
b2lkKiB0aHVua0FkZHJlc3MpCiB7Ci0gICAgYXV0byYgbWFwID0gZW5zdXJlVGh1bmtMYWJlbE1h
cCgpOworICAgIGF1dG8mIG1hcCA9IERpc2Fzc2VtYmxlcjo6ZW5zdXJlTGFiZWxNYXAoKTsKICAg
ICBhdXRvIGl0ID0gbWFwLmZpbmQodGh1bmtBZGRyZXNzKTsKICAgICBpZiAoaXQgPT0gbWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gaXQtPnZhbHVlLmRhdGEo
KTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDU3RyaW5nPihpdC0+dmFsdWUpKQor
ICAgICAgICByZXR1cm4gc3RkOjpnZXQ8Q1N0cmluZz4oaXQtPnZhbHVlKS5kYXRhKCk7CisgICAg
cmV0dXJuIHN0ZDo6Z2V0PGNvbnN0IGNoYXIqPihpdC0+dmFsdWUpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNz
ZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxl
ci9EaXNhc3NlbWJsZXIuaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyAr
NjEsOCBAQCB2b2lkIGRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkoCiAKIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgd2FpdEZvckFzeW5jaHJvbm91c0Rpc2Fzc2VtYmx5KCk7CiAKLXZvaWQgcmVnaXN0
ZXJUaHVua0xhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVsKTsKLWNvbnN0
IGNoYXIqIGxhYmVsRm9yVGh1bmsodm9pZCogdGh1bmtBZGRyZXNzKTsKK3ZvaWQgcmVnaXN0ZXJM
YWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJpbmcmJiBsYWJlbCk7Cit2b2lkIHJlZ2lzdGVy
TGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBjb25zdCBjaGFyKiBsYWJlbCk7Citjb25zdCBjaGFy
KiBsYWJlbEZvcih2b2lkKiB0aHVua0FkZHJlc3MpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02
NC9BNjRET3Bjb2RlLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTAgKzMyLDE2IEBACiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiRXhl
Y3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJJbnRl
Z3JpdHkuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTExJbnRQQ1Jhbmdl
cy5oIgorI2luY2x1ZGUgIlB1cmVOYU4uaCIKKyNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgogI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8d3RmL1B0clRhZy5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEFSTTY0RGlzYXNzZW1ibGVyIHsKIApAQCAtMjAxLDEyICsy
MDcsMTIgQEAgdm9pZCBBNjRET3Bjb2RlOjphcHBlbmRQQ1JlbGF0aXZlT2Zmc2V0KAogICAgICAg
ICB0YXJnZXRJbmZvID0gIiI7CiAgICAgZWxzZSBpZiAodGFyZ2V0UEMgPj0gbV9zdGFydFBDICYm
IHRhcmdldFBDIDwgbV9lbmRQQykKICAgICAgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJTaXpl
IC0gMSwgIiAtPiA8JXU+Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCh0YXJnZXRQQyAtIG1fc3Rh
cnRQQykgKiBzaXplb2YodWludDMyX3QpKSk7Ci0gICAgZWxzZSBpZiAoY29uc3QgY2hhciogdGh1
bmtMYWJlbCA9IGxhYmVsRm9yVGh1bmsodGFyZ2V0UEMpKQotICAgICAgICBzbnByaW50ZihidWZm
ZXIsIGJ1ZmZlclNpemUgLSAxLCAiIC0+IDx0aHVuazogJXM+IiwgdGh1bmtMYWJlbCk7CisgICAg
ZWxzZSBpZiAoY29uc3QgY2hhciogbGFiZWwgPSBsYWJlbEZvcih0YXJnZXRQQykpCisgICAgICAg
IHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyU2l6ZSAtIDEsICIgLT4gJXMiLCBsYWJlbCk7CiAgICAg
ZWxzZSBpZiAoaXNKSVRQQyh0YXJnZXRQQykpCi0gICAgICAgIHRhcmdldEluZm8gPSAiIC0+IDxK
SVQgUEM+IjsKKyAgICAgICAgdGFyZ2V0SW5mbyA9ICIgLT4gSklUIFBDIjsKICAgICBlbHNlIGlm
IChMTEludDo6aXNMTEludFBDKHRhcmdldFBDKSkKLSAgICAgICAgdGFyZ2V0SW5mbyA9ICIgLT4g
PExMSW50IFBDPiI7CisgICAgICAgIHRhcmdldEluZm8gPSAiIC0+IExMSW50IFBDIjsKICAgICBl
bHNlCiAgICAgICAgIHRhcmdldEluZm8gPSAiIC0+IDx1bmtub3duPiI7CiAKQEAgLTE1NzAsMTIg
KzE1NzYsMTI3IEBAIGNvbnN0IGNoYXIqIEE2NERPcGNvZGVMb2dpY2FsSW1tZWRpYXRlOjoKIAog
Y29uc3QgY2hhciogY29uc3QgQTY0RE9wY29kZU1vdmVXaWRlOjpzX29wTmFtZXNbNF0gPSB7ICJt
b3ZuIiwgMCwgIm1vdnoiLCAibW92ayIgfTsKIAotY29uc3QgY2hhciogQTY0RE9wY29kZU1vdmVX
aWRlOjpmb3JtYXQoKQorY2xhc3MgTW92ZVdpZGVGb3JtYXRUcmFpdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgUmVzdWx0VHlwZSA9IGNvbnN0IGNoYXIqOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCByZXR1cm5FYXJseUlmQWNjZXB0ZWQgPSBmYWxzZTsKKworICAgIEFMV0FZU19JTkxJTkUgc3Rh
dGljIGNvbnN0IGNoYXIqIHJlamVjdGVkUmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSogb3Bjb2Rl
KSB7IHJldHVybiBvcGNvZGUtPmJhc2VGb3JtYXQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgc3Rh
dGljIGNvbnN0IGNoYXIqIGFjY2VwdGVkUmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSogb3Bjb2Rl
KSB7IHJldHVybiBvcGNvZGUtPmZvcm1hdEJ1ZmZlcigpOyB9Cit9OworCitjbGFzcyBNb3ZlV2lk
ZUlzVmFsaWRUcmFpdCB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzdWx0VHlwZSA9IGJvb2w7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHJldHVybkVhcmx5SWZBY2NlcHRlZCA9IHRydWU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgcmVqZWN0ZWRSZXN1bHQoQTY0RE9wY29kZU1vdmVX
aWRlKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgYWNjZXB0
ZWRSZXN1bHQoQTY0RE9wY29kZU1vdmVXaWRlKikgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworYm9v
bCBBNjRET3Bjb2RlTW92ZVdpZGU6OmhhbmRsZVBvdGVudGlhbERhdGFQb2ludGVyKHZvaWQqIHB0
cikKK3sKKyAgICBBU1NFUlQoSW50ZWdyaXR5Ojppc1NhbmVQb2ludGVyKHB0cikpOworCisgICAg
Ym9vbCBoYW5kbGVkID0gZmFsc2U7CisgICAgVk1JbnNwZWN0b3I6OmZvckVhY2hWTShbJl0gKFZN
JiB2bSkgeworICAgICAgICBpZiAocHRyID09ICZ2bSkgeworICAgICAgICAgICAgYnVmZmVyUHJp
bnRmKCIgdm0iKTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdm0u
aXNJblNlcnZpY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRp
bnVlOworCisgICAgICAgIGF1dG8qIHZtU3RhcnQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
Pigmdm0pOworICAgICAgICBhdXRvKiB2bUVuZCA9IHZtU3RhcnQgKyBzaXplb2YoVk0pOworICAg
ICAgICBhdXRvKiB1OFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHB0cik7CisgICAg
ICAgIFJhbmdlIHZtUmFuZ2Uodm1TdGFydCwgdm1FbmQpOworICAgICAgICBpZiAodm1SYW5nZS5j
b250YWlucyh1OFB0cikpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHU4UHRyIC0g
dm1TdGFydDsKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIHZtICsldSIsIG9mZnNldCk7CisK
KyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIGlmIChwdHIgPT0gJnZtLnRvcENhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBkZXNjcmlw
dGlvbiA9ICJ2bS50b3BDYWxsRnJhbWUiOworICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0ID09
IFZNOjp0b3BFbnRyeUZyYW1lT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24g
PSAidm0udG9wRW50cnlGcmFtZSI7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZzZXQgPT0gVk06
OmV4Y2VwdGlvbk9mZnNldCgpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1f
ZXhjZXB0aW9uIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNldCA9PSBWTTo6b2Zmc2V0T2ZI
ZWFwQmFycmllclRocmVzaG9sZCgpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZt
LmhlYXAubV9iYXJyaWVyVGhyZXNob2xkIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNldCA9
PSBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlw
dGlvbiA9ICJ2bS5jYWxsRnJhbWVGb3JDYXRjaCI7CisgICAgICAgICAgICBlbHNlIGlmIChwdHIg
PT0gdm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlw
dGlvbiA9ICJ2bS5tX3NvZnRTdGFja0xpbWl0IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9
PSAmdm0ub3NyRXhpdEluZGV4KQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm9z
ckV4aXRJbmRleCI7CisgICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gJnZtLm9zckV4aXRKdW1w
RGVzdGluYXRpb24pCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0ub3NyRXhpdEp1
bXBEZXN0aW5hdGlvbiI7CisgICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gdm0uc21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlv
biA9ICJ2bS5zbWFsbFN0cmluZ3MubV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzIjsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHB0ciA9PSAmdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpCisgICAgICAg
ICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3ciOworICAg
ICAgICAgICAgZWxzZSBpZiAocHRyID09IHZtLnRyYXBzKCkudHJhcEJpdHNBZGRyZXNzKCkpCisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0ubV90cmFwcy5tX3RyYXBCaXRzIjsKKyNp
ZiBFTkFCTEUoREZHX0RPRVNfR0NfVkFMSURBVElPTikKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0
ciA9PSB2bS5hZGRyZXNzT2ZEb2VzR0MoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9
ICJ2bS5tX2RvZXNHQyI7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikKKyAg
ICAgICAgICAgICAgICBidWZmZXJQcmludGYoIjogJXMiLCBkZXNjcmlwdGlvbik7CisKKyAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6RG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2bS5pc1NjcmF0Y2hCdWZmZXIocHRy
KSkgeworICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgdm0gc2NyYXRjaEJ1ZmZlci5tX2J1ZmZl
ciIpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gSXRl
cmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkNvbnRpbnVlOworICAgIH0pOworICAgIHJldHVybiBoYW5kbGVkOworfQorCisjaWYg
Q1BVKEFSTTY0RSkKK2Jvb2wgQTY0RE9wY29kZU1vdmVXaWRlOjpoYW5kbGVQb3RlbnRpYWxQdHJU
YWcodWludHB0cl90IHZhbHVlKQoreworICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPiAweGZmZmYp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFB0clRhZyB0YWcgPSBzdGF0aWNfY2FzdDxQ
dHJUYWc+KHZhbHVlKTsKKyNpZiBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykKKyAgICBjb25zdCBj
aGFyKiBuYW1lID0gV1RGOjpwdHJUYWdOYW1lKHRhZyk7CisgICAgaWYgKG5hbWVbMF0gPT0gJzwn
KQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE9ubHkgcmVzdWx0IHRoYXQgc3RhcnRzIHdpdGgg
JzwnIGlzICI8dW5rbm93bj4iLgorI2Vsc2UKKyAgICAvLyBXaXRob3V0IEVOQUJMRShQVFJUQUdf
REVCVUdHSU5HKSwgbm90IGFsbCBQdHJUYWdzIGFyZSByZWdpc3RlcmVkZiBmb3IKKyAgICAvLyBw
cmludGluZy4gU28sIHdlJ2xsIGp1c3QgZG8gdGhlIG1pbmltdW0gd2l0aCBvbmx5IHRoZSBKU0Mg
c3BlY2lmaWMgdGFncy4KKyAgICBjb25zdCBjaGFyKiBuYW1lID0gcHRyVGFnTmFtZSh0YWcpOwor
ICAgIGlmICghbmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAgICAvLyBB
bHNvIHByaW50ICc/JyB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgaXMgYSBtYXliZS4gV2UgZG8gbm90
IGtub3cgZm9yIGNlcnRhaW4KKyAgICAvLyBpZiB0aGUgY29uc3RhbnQgaXMgbWVhbnQgdG8gYmUg
dXNlZCBhcyBhIFB0clRhZy4KKyAgICBidWZmZXJQcmludGYoIiAtPiAlcCAlcyA/IiwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4odmFsdWUpLCBuYW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNl
bmRpZgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdD4KK3R5cGVuYW1lIFRyYWl0OjpSZXN1bHRU
eXBlIEE2NERPcGNvZGVNb3ZlV2lkZTo6cGFyc2UoKQogewogICAgIGlmIChvcGMoKSA9PSAxKQot
ICAgICAgICByZXR1cm4gQTY0RE9wY29kZTo6Zm9ybWF0KCk7CisgICAgICAgIHJldHVybiBUcmFp
dDo6cmVqZWN0ZWRSZXN1bHQodGhpcyk7CiAgICAgaWYgKCFpczY0Qml0KCkgJiYgaHcoKSA+PSAy
KQotICAgICAgICByZXR1cm4gQTY0RE9wY29kZTo6Zm9ybWF0KCk7CisgICAgICAgIHJldHVybiBU
cmFpdDo6cmVqZWN0ZWRSZXN1bHQodGhpcyk7CisKKyAgICBpZiBjb25zdGV4cHIgKFRyYWl0Ojpy
ZXR1cm5FYXJseUlmQWNjZXB0ZWQpCisgICAgICAgIHJldHVybiBUcmFpdDo6YWNjZXB0ZWRSZXN1
bHQodGhpcyk7CiAKICAgICBpZiAoIW9wYygpICYmICghaW1tZWRpYXRlMTYoKSB8fCAhaHcoKSkg
JiYgKGlzNjRCaXQoKSB8fCBpbW1lZGlhdGUxNigpICE9IDB4ZmZmZikpIHsKICAgICAgICAgLy8g
TU9WIHBzZXVkbyBvcCBmb3IgTU9WTgpAQCAtMTU4NywxMCArMTcwOCwxMiBAQCBjb25zdCBjaGFy
KiBBNjRET3Bjb2RlTW92ZVdpZGU6OmZvcm1hdCgpCiAgICAgICAgICAgICBpbnQ2NF90IGFtb3Vu
dCA9IGltbWVkaWF0ZTE2KCkgPDwgKGh3KCkgKiAxNik7CiAgICAgICAgICAgICBhbW91bnQgPSB+
YW1vdW50OwogICAgICAgICAgICAgYXBwZW5kU2lnbmVkSW1tZWRpYXRlNjQoYW1vdW50KTsKKyAg
ICAgICAgICAgIG1fYnVpbHRDb25zdGFudCA9IHN0YXRpY19jYXN0PGludHB0cl90PihhbW91bnQp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW50MzJfdCBhbW91bnQgPSBpbW1lZGlh
dGUxNigpIDw8IChodygpICogMTYpOwogICAgICAgICAgICAgYW1vdW50ID0gfmFtb3VudDsKICAg
ICAgICAgICAgIGFwcGVuZFNpZ25lZEltbWVkaWF0ZShhbW91bnQpOworICAgICAgICAgICAgbV9i
dWlsdENvbnN0YW50ID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGFtb3VudCk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCkpOwpA
QCAtMTYwMSwxMSArMTcyNCw2NSBAQCBjb25zdCBjaGFyKiBBNjRET3Bjb2RlTW92ZVdpZGU6OmZv
cm1hdCgpCiAgICAgICAgICAgICBhcHBlbmRTZXBhcmF0b3IoKTsKICAgICAgICAgICAgIGFwcGVu
ZFNoaWZ0QW1vdW50KGh3KCkpOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgcmV0dXJuIG1fZm9y
bWF0QnVmZmVyOworICAgICAgICBpZiAob3BjKCkgPT0gMikgLy8gRW5jb2RpbmcgZm9yIG1vdnoK
KyAgICAgICAgICAgIG1fYnVpbHRDb25zdGFudCA9IDA7CisKKyAgICAgICAgdW5zaWduZWQgc2hp
ZnQgPSBodygpICogMTY7CisgICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oaW1tZWRpYXRlMTYoKSkgPDwgc2hpZnQ7CisgICAgICAgIHVpbnRwdHJfdCBtYXNr
ID0gfihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDB4ZmZmZikgPDwgc2hpZnQpOworICAgICAgICBt
X2J1aWx0Q29uc3RhbnQgJj0gbWFzazsKKyAgICAgICAgbV9idWlsdENvbnN0YW50IHw9IHZhbHVl
OworICAgIH0KKworICAgIGF1dG8gZHVtcENvbnN0YW50RGF0YSA9IFsmXSB7CisgICAgICAgIHVp
bnQzMl90KiBuZXh0UEMgPSBtX2N1cnJlbnRQQyArIDE7CisgICAgICAgIGlmIChuZXh0UEMgPj0g
bV9lbmRQQykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBNjRET3Bjb2RlIG5leHRC
YXNlT3Bjb2RlKG1fc3RhcnRQQywgbV9lbmRQQyk7CisgICAgICAgIEE2NERPcGNvZGVNb3ZlV2lk
ZSYgbmV4dE9wY29kZSA9ICpyZWludGVycHJldF9jYXN0PEE2NERPcGNvZGVNb3ZlV2lkZSo+KCZu
ZXh0QmFzZU9wY29kZSk7CisgICAgICAgIG5leHRPcGNvZGUuc2V0UENBbmRPcGNvZGUobmV4dFBD
LCAqbmV4dFBDKTsKKworICAgICAgICBib29sIG5leHRJc01vdmVXaWRlR3JvdXAgPSBvcGNvZGVH
cm91cE51bWJlcihtX29wY29kZSkgPT0gb3Bjb2RlR3JvdXBOdW1iZXIoKm5leHRQQyk7CisKKyAg
ICAgICAgaWYgKG5leHRJc01vdmVXaWRlR3JvdXAgJiYgbmV4dE9wY29kZS5pc1ZhbGlkKCkgJiYg
bmV4dE9wY29kZS5yZCgpID09IHJkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dm9pZCogcHRyID0gcmVtb3ZlQ29kZVB0clRhZyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYnVpbHRD
b25zdGFudCkpOworICAgICAgICBpZiAoIXB0cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoSW50ZWdyaXR5Ojppc1NhbmVQb2ludGVyKHB0cikpIHsKKyAgICAgICAgICAgIGJ1
ZmZlclByaW50ZigiIC0+ICVwIiwgcHRyKTsKKyAgICAgICAgICAgIGlmIChjb25zdCBjaGFyKiBs
YWJlbCA9IGxhYmVsRm9yKHB0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclByaW50
ZigiICVzIiwgbGFiZWwpOworICAgICAgICAgICAgaWYgKGlzSklUUEMocHRyKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnVmZmVyUHJpbnRmKCIgSklUIFBDIik7CisgICAgICAgICAgICBpZiAo
TExJbnQ6OmlzTExJbnRQQyhwdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJQcmlu
dGYoIiBMTEludCBQQyIpOworICAgICAgICAgICAgaGFuZGxlUG90ZW50aWFsRGF0YVBvaW50ZXIo
cHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2lmIENQVShBUk02NEUpCisg
ICAgICAgIGlmIChoYW5kbGVQb3RlbnRpYWxQdHJUYWcobV9idWlsdENvbnN0YW50KSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgICAgICBpZiAobV9idWlsdENvbnN0YW50IDwgMHgx
MDAwMCkKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIC0+ICV1Iiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fYnVpbHRDb25zdGFudCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWZm
ZXJQcmludGYoIiAtPiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fYnVpbHRDb25zdGFu
dCkpOworICAgIH07CisKKyAgICBpZiAobV9zdGFydFBDKQorICAgICAgICBkdW1wQ29uc3RhbnRE
YXRhKCk7CisKKyAgICByZXR1cm4gVHJhaXQ6OmFjY2VwdGVkUmVzdWx0KHRoaXMpOwogfQogCitj
b25zdCBjaGFyKiBBNjRET3Bjb2RlTW92ZVdpZGU6OmZvcm1hdCgpIHsgcmV0dXJuIHBhcnNlPE1v
dmVXaWRlRm9ybWF0VHJhaXQ+KCk7IH0KK2Jvb2wgQTY0RE9wY29kZU1vdmVXaWRlOjppc1ZhbGlk
KCkgeyByZXR1cm4gcGFyc2U8TW92ZVdpZGVJc1ZhbGlkVHJhaXQ+KCk7IH0KKwogY29uc3QgY2hh
ciogQTY0RE9wY29kZVRlc3RBbmRCcmFuY2hJbW1lZGlhdGU6OmZvcm1hdCgpCiB7CiAgICAgYXBw
ZW5kSW5zdHJ1Y3Rpb25OYW1lKG9wQml0KCkgPyAidGJueiIgOiAidGJ6Iik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNv
ZGUuaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9BUk02NC9BNjRET3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIGJ1ZmZlclByaW50ZigibHNsICMldSIsIDE2ICogYW1vdW50
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBidWZmZXJTaXplID0gODE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgYnVmZmVyU2l6ZSA9IDEwMTsKIAogICAgIGNoYXIgbV9m
b3JtYXRCdWZmZXJbYnVmZmVyU2l6ZV07CiAgICAgdWludDMyX3QqIG1fc3RhcnRQQzsKQEAgLTIw
Miw2ICsyMDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdWludDMyX3QqIG1fY3VycmVudFBDOwogICAg
IHVpbnQzMl90IG1fb3Bjb2RlOwogICAgIGludCBtX2J1ZmZlck9mZnNldDsKKyAgICB1aW50cHRy
X3QgbV9idWlsdENvbnN0YW50IHsgMCB9OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBPcGNvZGVH
cm91cCogb3Bjb2RlVGFibGVbMzJdOwpAQCAtODcyLDExICs4NzMsMjQgQEAgcHVibGljOgogICAg
IERFRklORV9TVEFUSUNfRk9STUFUKEE2NERPcGNvZGVNb3ZlV2lkZSwgdGhpc09iaik7CiAKICAg
ICBjb25zdCBjaGFyKiBmb3JtYXQoKTsKKyAgICBib29sIGlzVmFsaWQoKTsKIAogICAgIGNvbnN0
IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuIHNfb3BOYW1lc1tvcGMoKV07IH0KICAgICB1bnNpZ25l
ZCBvcGMoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMjkpICYgMHgzOyB9CiAgICAgdW5zaWduZWQg
aHcoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gMjEpICYgMHgzOyB9CiAgICAgdW5zaWduZWQgaW1t
ZWRpYXRlMTYoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gNSkgJiAweGZmZmY7IH0KKworcHJpdmF0
ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdD4gdHlwZW5hbWUgVHJhaXQ6OlJlc3VsdFR5
cGUgcGFyc2UoKTsKKyAgICBib29sIGhhbmRsZVBvdGVudGlhbERhdGFQb2ludGVyKHZvaWQqKTsK
KyAgICBib29sIGhhbmRsZVBvdGVudGlhbFB0clRhZyh1aW50cHRyX3QpOworCisgICAgLy8gVGhl
c2UgZm9yd2FyZGluZyBmdW5jdGlvbnMgYXJlIG5lZWRlZCBmb3IgTW92ZVdpZGVGb3JtYXRUcmFp
dCBvbmx5LgorICAgIGNvbnN0IGNoYXIqIGJhc2VGb3JtYXQoKSB7IHJldHVybiBBNjRET3Bjb2Rl
Ojpmb3JtYXQoKTsgfQorICAgIGNvbnN0IGNoYXIqIGZvcm1hdEJ1ZmZlcigpIHsgcmV0dXJuIG1f
Zm9ybWF0QnVmZmVyOyB9CisKKyAgICBmcmllbmQgY2xhc3MgTW92ZVdpZGVGb3JtYXRUcmFpdDsK
KyAgICBmcmllbmQgY2xhc3MgTW92ZVdpZGVJc1ZhbGlkVHJhaXQ7CiB9OwogCiBjbGFzcyBBNjRE
T3Bjb2RlVGVzdEFuZEJyYW5jaEltbWVkaWF0ZSA6IHB1YmxpYyBBNjRET3Bjb2RlIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmNwcAkocmV2aXNpb24g
Mjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDggKzM2LDE5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0j
aWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCisjaWYgQ1BVKEFSTTY0
RSkKKworY29uc3QgY2hhciogcHRyVGFnTmFtZShQdHJUYWcgdGFnKQoreworI2RlZmluZSBSRVRV
Uk5fUFRSVEFHX05BTUUoX3RhZ05hbWUsIGNhbGxlZVR5cGUsIGNhbGxlclR5cGUpIGNhc2UgX3Rh
Z05hbWU6IHJldHVybiAjX3RhZ05hbWU7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odGFnKSkgeworICAgICAgICBGT1JfRUFDSF9KU0NfUFRSVEFHKFJFVFVSTl9QVFJUQUdfTkFN
RSkKKyAgICB9CisjdW5kZWYgUkVUVVJOX1BUUlRBR19OQU1FCisgICAgcmV0dXJuIG51bGxwdHI7
IC8vIE1hdGNoaW5nIHRhZyBub3QgZm91bmQuCit9CiAKKyNpZiBFTkFCTEUoUFRSVEFHX0RFQlVH
R0lORykKIHN0YXRpYyBjb25zdCBjaGFyKiB0YWdGb3JQdHIoY29uc3Qgdm9pZCogcHRyKQogewog
I2RlZmluZSBSRVRVUk5fTkFNRV9JRl9UQUdfTUFUQ0hFUyh0YWcsIGNhbGxlZVR5cGUsIGNhbGxl
clR5cGUpIFwKQEAgLTUwLDI0ICs2MSwxNCBAQCBzdGF0aWMgY29uc3QgY2hhciogdGFnRm9yUHRy
KGNvbnN0IHZvaWQqCiAgICAgcmV0dXJuIG51bGxwdHI7IC8vIE1hdGNoaW5nIHRhZyBub3QgZm91
bmQuCiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0YWcpCi17Ci0j
ZGVmaW5lIFJFVFVSTl9QVFJUQUdfTkFNRShfdGFnTmFtZSwgY2FsbGVlVHlwZSwgY2FsbGVyVHlw
ZSkgY2FzZSBfdGFnTmFtZTogcmV0dXJuICNfdGFnTmFtZTsKLSAgICBzd2l0Y2ggKHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0YWcpKSB7Ci0gICAgICAgIEZPUl9FQUNIX0pTQ19QVFJUQUcoUkVUVVJO
X1BUUlRBR19OQU1FKQotICAgIH0KLSN1bmRlZiBSRVRVUk5fUFRSVEFHX05BTUUKLSAgICByZXR1
cm4gbnVsbHB0cjsgLy8gTWF0Y2hpbmcgdGFnIG5vdCBmb3VuZC4KLX0KLQogdm9pZCBpbml0aWFs
aXplUHRyVGFnTG9va3VwKCkKIHsKICAgICBXVEY6OlB0clRhZ0xvb2t1cCYgbG9va3VwID0gZ19q
c2NDb25maWcucHRyVGFnTG9va3VwUmVjb3JkOwogICAgIGxvb2t1cC5pbml0aWFsaXplKHRhZ0Zv
clB0ciwgcHRyVGFnTmFtZSk7CiAgICAgV1RGOjpyZWdpc3RlclB0clRhZ0xvb2t1cCgmbG9va3Vw
KTsKIH0KLQotI2VuZGlmIC8vIENQVShBUk02NEUpICYmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5H
KQorI2VuZGlmIC8vIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQorI2VuZGlmIC8vIENQVShBUk02
NEUpCiAKICNpZiBDUFUoQVJNNjRFKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NQdHJUYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NQdHJUYWcuaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDUHRyVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDgsNiArMjQ4LDEw
IEBAIHZvaWQgaW5pdGlhbGl6ZVB0clRhZ0xvb2t1cCgpOwogaW5saW5lIHZvaWQgaW5pdGlhbGl6
ZVB0clRhZ0xvb2t1cCgpIHsgfQogI2VuZGlmCiAKKyNpZiBDUFUoQVJNNjRFKQorY29uc3QgY2hh
ciogcHRyVGFnTmFtZShQdHJUYWcpOworI2VuZGlmIC8vIENQVShBUk02NEUpCisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogbmFtZXNwYWNlIFdURiB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDEwICs0
NjUsMTggQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKAogICAgIGlm
ICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSkKICAgICAgICAgT3B0aW9uczo6dXNlRmFzdFRM
U0Zvcldhc21Db250ZXh0KCkgPSBmYWxzZTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6bG9nSklU
KCkKLSAgICAgICAgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkKKyAgICBpZiAoT3B0aW9u
czo6ZHVtcERpc2Fzc2VtYmx5KCkKKyAgICAgICAgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJs
eSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8
IE9wdGlvbnM6OmR1bXBGVExEaXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBS
ZWdFeHBEaXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1i
bHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wQkJRRGlzYXNzZW1ibHkoKQorICAgICAgICB8
fCBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1ibHkoKSkKKyAgICAgICAgT3B0aW9uczo6bmVlZERp
c2Fzc2VtYmx5U3VwcG9ydCgpID0gdHJ1ZTsKKworICAgIGlmIChPcHRpb25zOjpsb2dKSVQoKQor
ICAgICAgICB8fCBPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkKICAgICAgICAgfHwg
T3B0aW9uczo6ZHVtcEJ5dGVjb2RlQXRERkdUaW1lKCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVt
cEdyYXBoQXRFYWNoUGhhc2UoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wREZHR3JhcGhBdEVh
Y2hQaGFzZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNyBAQCBib29sIGNh
blVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwogICAgIFwKICAgICB2KEJvb2wsIHVzZU9TTG9n
LCBmYWxzZSwgTm9ybWFsLCAiTG9nIGRhdGFMb2coKXMgdG8gb3NfbG9nIGluc3RlYWQgb2Ygc3Rk
ZXJyIikgXAogICAgIC8qIGR1bXBEaXNhc3NlbWJseSBpbXBsaWVzIGR1bXBERkdEaXNhc3NlbWJs
eS4gKi8gXAorICAgIHYoQm9vbCwgbmVlZERpc2Fzc2VtYmx5U3VwcG9ydCwgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZHVtcERpc2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFs
LCAiZHVtcHMgZGlzYXNzZW1ibHkgb2YgYWxsIEpJVCBjb21waWxlZCBjb2RlIHVwb24gY29tcGls
YXRpb24iKSBcCiAgICAgdihCb29sLCBhc3luY0Rpc2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihCb29sLCBsb2dKSVQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI5NDIyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQwOSw2ICsxNDA5LDE2IEBAIHZvaWQgVk06OmNsZWFyU2NyYXRjaEJ1ZmZlcnMoKQogICAg
ICAgICBzY3JhdGNoQnVmZmVyLT5zZXRBY3RpdmVMZW5ndGgoMCk7CiB9CiAKK2Jvb2wgVk06Omlz
U2NyYXRjaEJ1ZmZlcih2b2lkKiBwdHIpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fc2NyYXRj
aEJ1ZmZlckxvY2sgfTsKKyAgICBmb3IgKGF1dG8qIHNjcmF0Y2hCdWZmZXIgOiBtX3NjcmF0Y2hC
dWZmZXJzKSB7CisgICAgICAgIGlmIChzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkgPT0gcHRy
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kwogdm9pZCBWTTo6ZW5zdXJlU2hhZG93Q2hpY2tlbigpCiB7CiAgICAgaWYgKG1fc2hhZG93Q2hp
Y2tlbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjk0MjIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpA
QCAtNjg1LDYgKzY4NSw3IEBAIHB1YmxpYzoKICAgICAvLyAtIFlvdSBjYW4gb25seSB3cml0ZSB0
byBlbnRyaWVzIGluIHRoZSBTY3JhdGNoQnVmZmVyIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAg
IFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVfdCBzaXplKTsKICAgICB2
b2lkIGNsZWFyU2NyYXRjaEJ1ZmZlcnMoKTsKKyAgICBib29sIGlzU2NyYXRjaEJ1ZmZlcih2b2lk
Kik7CiAKICAgICBFbmNvZGVkSlNWYWx1ZSogZXhjZXB0aW9uRnV6emluZ0J1ZmZlcihzaXplX3Qg
c2l6ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5o
CShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdy
aXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDggQEAgQUxXQVlTX0lOTElORSBzdGF0
aWMgYm9vbCBpc1NhbmVQb2ludGVyKAogICAgIHVpbnRwdHJfdCBwb2ludGVyQXNJbnQgPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pihwb2ludGVyKTsKICAgICB1aW50cHRyX3QgY2Fub25pY2FsUG9p
bnRlckJpdHMgPSBwb2ludGVyQXNJbnQgPDwgKDY0IC0gT1NfQ09OU1RBTlQoRUZGRUNUSVZFX0FE
RFJFU1NfV0lEVEgpKTsKICAgICB1aW50cHRyX3Qgbm9uQ2Fub25pY2FsUG9pbnRlckJpdHMgPSBw
b2ludGVyQXNJbnQgPj4gT1NfQ09OU1RBTlQoRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpOwotICAg
IHJldHVybiAhbm9uQ2Fub25pY2FsUG9pbnRlckJpdHMgJiYgY2Fub25pY2FsUG9pbnRlckJpdHM7
CisgICAgdWludHB0cl90IGxvd2VyNEcgPSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAz
MikgLSAxOworICAgIHJldHVybiAhbm9uQ2Fub25pY2FsUG9pbnRlckJpdHMgJiYgY2Fub25pY2Fs
UG9pbnRlckJpdHMgJiYgcG9pbnRlckFzSW50ID4gbG93ZXI0RzsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKHBvaW50ZXIpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dURi93dGYv
UGxhdGZvcm1DYWxsaW5nQ29udmVudGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUNhbGxpbmdDb252ZW50aW9ucy5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUNhbGxpbmdDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTg0LDkgKzg0LDIyIEBA
CiAjZGVmaW5lIEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUwogI2VuZGlmCiAKKy8vI2lmIEVOQUJM
RShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisvLyNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9P
UEVSQVRJT05fRVhUUkFTKHZhbGlkYXRlRnVuY3Rpb24sIG5hbWUpICh2b2lkKil2YWxpZGF0ZUZ1
bmN0aW9uLCBuYW1lCisvLyNlbHNlCisvLyNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJ
T05fRVhUUkFTKHZhbGlkYXRlRnVuY3Rpb24sIG5hbWUpIG5hbWUKKy8vI2VuZGlmCisvLworLy8j
ZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKSBcCisv
LyAgICBjb25zdGV4cHIgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIF9KSVRUYXJnZXRJRF8j
I2Z1bmN0aW9uIF9fYXR0cmlidXRlX18oKHVzZWQsIHNlY3Rpb24oIl9fREFUQV9DT05TVCxfX2pz
Y19vcHMiKSkpID0geyAodm9pZCopZnVuY3Rpb24sIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9O
X0VYVFJBUyhmdW5jdGlvbiMjVmFsaWRhdGUsICNmdW5jdGlvbikgfTsKKwogI2lmIEVOQUJMRShK
SVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFU
SU9OX0lOVEVSTkFMKGZ1bmN0aW9uKSBcCi0gICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9u
QW5ub3RhdGlvbiBfSklUVGFyZ2V0SURfIyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBz
ZWN0aW9uKCJfX0RBVEFfQ09OU1QsX19qc2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCAo
dm9pZCopZnVuY3Rpb24jI1ZhbGlkYXRlIH07CisgICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0
aW9uQW5ub3RhdGlvbiBfSklUVGFyZ2V0SURfIyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2Vk
LCBzZWN0aW9uKCJfX0RBVEFfQ09OU1QsX19qc2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9u
LCAodm9pZCopZnVuY3Rpb24jI1ZhbGlkYXRlLCAjZnVuY3Rpb24gfTsKKyNlbHNlCisjZGVmaW5l
IEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKSBcCisgICAgY29u
c3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBfSklUVGFyZ2V0SURfIyNmdW5jdGlv
biBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9uKCJfX0RBVEFfQ09OU1QsX19qc2Nfb3BzIikp
KSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCAjZnVuY3Rpb24gfTsKKyNlbmRpZgogCiAjZGVmaW5lIEpT
Q19BTk5PVEFURV9KSVRfT1BFUkFUSU9OKGZ1bmN0aW9uKSBcCiAgICAgSlNDX0RFQ0xBUkVfQU5E
X0RFRklORV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04oZnVuY3Rpb24pOyBcCkBAIC0xMDAsMTIg
KzExMyw2IEBACiAgICAgSlNDX0RFQ0xBUkVfQU5EX0RFRklORV9KSVRfT1BFUkFUSU9OX1JFVFVS
Tl9WQUxJREFUSU9OKGZ1bmN0aW9uKTsgXAogICAgIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9O
X0lOVEVSTkFMKGZ1bmN0aW9uKQogCi0jZWxzZQotI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09Q
RVJBVElPTihmdW5jdGlvbikKLSNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fUFJP
QkUoZnVuY3Rpb24pCi0jZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX1JFVFVSTihm
dW5jdGlvbikKLSNlbmRpZgotCiAKICNkZWZpbmUgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OX1dJ
VEhPVVRfVkFSSUFCTEUoZnVuY3Rpb25OYW1lLCByZXR1cm5UeXBlLCBwYXJhbWV0ZXJzKSBcCiAg
ICAgcmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgZnVuY3Rpb25OYW1lIHBhcmFt
ZXRlcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
SklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMw
LDEwICszMCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoSklUX09Q
RVJBVElPTl9WQUxJREFUSU9OKQogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3Rh
dGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSBfX2FzbSgic2VjdGlvbiRzdGFydCRf
X0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25B
bm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSBfX2FzbSgic2VjdGlvbiRlbmQk
X19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKKwogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogewogICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwpAQCAtNDMsNCArNDQsMTQgQEAgdm9pZCBwb3B1bGF0ZUpJ
VE9wZXJhdGlvbnMoKQogfQogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJ
T04pCiAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQordm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5
TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6
cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25z
SW5XZWJDb3JlLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlKTsKKyAgICB9KTsKK30KKyNl
bmRpZiAvLyBFTkFCTEUoRElTQVNTRU1CTEVSKQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI5NDIy
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNywxMCArMjcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcG9wdWxh
dGVEaXNhc3NlbWJseUxhYmVscygpOworI2Vsc2UKK2lubGluZSB2b2lkIHBvcHVsYXRlRGlzYXNz
ZW1ibHlMYWJlbHMoKSB7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCk7CiAj
ZWxzZQotaW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyB9CitpbmxpbmUgdm9p
ZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKTsg
fQogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRl
c3RTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dl
YkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjQxLDEwICsyNDEsMTEgQEAgdm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBl
c0ZvcgogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQog
ZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0
aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0IF9fYXNtKCJzZWN0aW9uJHN0YXJ0JF9fREFUQV9DT05T
VCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24g
ZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQgX19hc20oInNlY3Rpb24kZW5k
JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZB
TElEQVRJT04pCisKIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkKIHsKICAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKQEAgLTI1NCw0ICsyNTUsMTQgQEAgdm9pZCBwb3B1bGF0
ZUpJVE9wZXJhdGlvbnMoKQogfQogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElE
QVRJT04pCiAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQordm9pZCBwb3B1bGF0ZURpc2Fzc2Vt
Ymx5TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBz
dGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIEpTQzo6SklUT3BlcmF0aW9uTGlz
dDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRp
b25zSW5XZWJDb3JlVGVzdFN1cHBvcnQsICZlbmRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0
U3VwcG9ydCk7CisgICAgfSk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKERJU0FTU0VNQkxFUikKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBwb3J0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgJKHJldmlzaW9uIDI5NDIyMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY3LDEwICs2NywxNiBAQCB2b2lkIHNldHVwTmV3bHlDcmVhdGVkU2Vy
dmljZVdvcmtlcih1aW50CiAgICAgCiB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKSBURVNUX1NVUFBPUlRfRVhQT1JUOwogCisjaWYg
RU5BQkxFKERJU0FTU0VNQkxFUikKK3ZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpIFRF
U1RfU1VQUE9SVF9FWFBPUlQ7CisjZWxzZQoraW5saW5lIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJs
eUxhYmVscygpIHsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFU
SU9OKQogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSBURVNUX1NVUFBPUlRfRVhQT1JUOwog
I2Vsc2UKLWlubGluZSB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIHsgfQoraW5saW5lIHZv
aWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCk7
IH0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlVGVzdFN1cHBvcnQK
</data>
<flag name="commit-queue"
          id="488488"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459399</attachid>
            <date>2022-05-15 23:01:36 -0700</date>
            <delta_ts>2022-05-15 23:08:01 -0700</delta_ts>
            <desc>EWS testing.</desc>
            <filename>wip-disassemble-operations2.2.patch</filename>
            <type>text/plain</type>
            <size>44517</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1NiwxMCArMzc1Niw4IEBA
IGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVybiBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCBf
X2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsIF9fYXNt
KCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7Ci0jZW5kaWYKIAogaW50IGpz
Y21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpAQCAtMzc4Myw2ICszNzgxLDExIEBAIGlu
dCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVy
c0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCwgJmVuZE9mSklUT3BlcmF0
aW9uc0luU2hlbGwpOwogI2VuZGlmCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlND
OjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigm
c3RhcnRPZkpJVE9wZXJhdGlvbnNJblNoZWxsLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7
CisjZW5kaWYKKwogICAgIGluaXRpYWxpemVUaW1lb3V0SWZOZWVkZWQoKTsKIAogI2lmIE9TKERB
UldJTikgfHwgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0pJVE9wZXJhdGlvbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwyMCArMjYsMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKSVRPcGVyYXRpb25MaXN0LmgiCiAKKyNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJHYXRlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIk9wdGlv
bnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShE
SVNBU1NFTUJMRVIpCiAKIExhenlOZXZlckRlc3Ryb3llZDxKSVRPcGVyYXRpb25MaXN0PiBqaXRP
cGVyYXRpb25MaXN0OwogCiBleHRlcm4gY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFy
dE9mSklUT3BlcmF0aW9uc0luSlNDIF9fYXNtKCJzZWN0aW9uJHN0YXJ0JF9fREFUQV9DT05TVCRf
X2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklU
T3BlcmF0aW9uc0luSlNDIF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3Bz
Iik7CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiB2b2lkIEpJVE9w
ZXJhdGlvbkxpc3Q6OmluaXRpYWxpemUoKQogewogICAgIGppdE9wZXJhdGlvbkxpc3QuY29uc3Ry
dWN0KCk7CkBAIC04NSw5ICs4OSwxMyBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRl
UG9pbnRlcnNJCiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewogICAgICAgICBpZiAo
T3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2lu
dGVycygmc3RhcnRPZkpJVE9wZXJhdGlvbnNJbkpTQywgJmVuZE9mSklUT3BlcmF0aW9uc0luSlND
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQo
KSkpCisgICAgICAgICAgICBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29y
ZSgpOwogICAgIH0pOwogfQogCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKKwogTExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xBUkVfUk9VVElORV9W
QUxJREFURShsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayk7CkBAIC0xMDQsMzEg
KzExMiw3NyBAQCBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUoY2hlY2twb2luCiBMTElO
VF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUobm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmUpOwog
TExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9s
b29wX2hpbnQpOwogCi12b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkph
dmFTY3JpcHRDb3JlRm9yTExJbnQoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
S2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKy8vI2lmIEVOQUJMRShKSVRf
T1BFUkFUSU9OX1ZBTElEQVRJT04pCisvLyNkZWZpbmUgTExJTlRfT1BfRVhUUkFTKHZhbGlkYXRl
TGFiZWwsIG5hbWVTdHIpIGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsaWRhdGVMYWJlbCksIG5hbWVT
dHIKKy8vI2Vsc2UKKy8vI2RlZmluZSBMTElOVF9PUF9FWFRSQVModmFsaWRhdGVMYWJlbCwgbmFt
ZVN0cikgbmFtZVN0cgorLy8jZW5kaWYKKy8vCisvLyNkZWZpbmUgTExJTlRfUk9VVElORShmdW5j
dGlvbk5hbWUpIHsgXAorLy8gICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENv
ZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KGZ1bmN0aW9uTmFtZSkpLCBcCisvLyAgICAg
ICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1lKSwg
I2Z1bmN0aW9uTmFtZSkgXAorLy8gICAgfSwKKy8vCisvLyNkZWZpbmUgTExJTlRfT1AobmFtZSkg
eyBcCisvLyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBcCisvLyAgICAgICAgTExJTlRfT1BfRVhUUkFT
KExMSU5UX1JFVFVSTl9WQUxJREFURShuYW1lKSwgI25hbWUpIFwKKy8vICAgIH0sIHsgXAorLy8g
ICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUxNkNvZGVGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorLy8gICAgICAgIExMSU5UX09QX0VYVFJBUyhM
TElOVF9SRVRVUk5fV0lERTE2X1ZBTElEQVRFKG5hbWUpLCAjbmFtZSAiIFt3aWRlMTZdIikgXAor
Ly8gICAgfSwgeyBcCisvLyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0V2lk
ZTMyQ29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBcCisvLyAgICAgICAg
TExJTlRfT1BfRVhUUkFTKExMSU5UX1JFVFVSTl9XSURFMzJfVkFMSURBVEUobmFtZSksICNuYW1l
ICIgW3dpZGUzMl0iKSBcCisvLyAgICB9LAogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKKyNkZWZpbmUgTExJTlRfUk9VVElORShmdW5jdGlvbk5hbWUpIHsgXAorICAgICAg
ICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPihmdW5jdGlvbk5hbWUpKSwgXAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExM
SU5UX1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1lKSksICNmdW5jdGlvbk5hbWUgXAorICAg
IH0sCisKKyNkZWZpbmUgTExJTlRfT1AobmFtZSkgeyBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2
b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwg
XAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9WQUxJREFURShuYW1l
KSksICNuYW1lIFwKKyAgICB9LCB7IFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElu
dDo6Z2V0V2lkZTE2Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBcCisg
ICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJTlRfUkVUVVJOX1dJREUxNl9WQUxJREFURShu
YW1lKSksICNuYW1lICIgW3dpZGUxNl0iIFwKKyAgICB9LCB7IFwKKyAgICAgICAgYml0d2lzZV9j
YXN0PHZvaWQqPihMTEludDo6Z2V0V2lkZTMyQ29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4obmFtZSkpLCBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJTlRfUkVUVVJOX1dJ
REUzMl9WQUxJREFURShuYW1lKSksICNuYW1lICIgW3dpZGUzMl0iIFwKKyAgICB9LAorI2Vsc2Ug
Ly8gbm90IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAjZGVmaW5lIExMSU5UX1JP
VVRJTkUoZnVuY3Rpb25OYW1lKSB7IFwKICAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElu
dDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4oZnVuY3Rpb25OYW1lKSksIFwK
LSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9ST1VUSU5FX1ZBTElEQVRFKGZ1bmN0
aW9uTmFtZSkpIFwKKyAgICAgICAgI2Z1bmN0aW9uTmFtZSkgXAogICAgIH0sCiAKICNkZWZpbmUg
TExJTlRfT1AobmFtZSkgeyBcCiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6Omdl
dENvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9WQUxJREFURShuYW1lKSkgXAorICAgICAgICAj
bmFtZSkgXAogICAgIH0sIHsgXAogICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50Ojpn
ZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKLSAgICAg
ICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lERTE2X1ZBTElEQVRFKG5hbWUp
KSBcCisgICAgICAgICNuYW1lICIgW3dpZGUxNl0iKSBcCiAgICAgfSwgeyBcCiAgICAgICAgIGJp
dHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUzMkNvZGVGdW5jdGlvblB0cjxDRnVuY3Rp
b25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JF
VFVSTl9XSURFMzJfVkFMSURBVEUobmFtZSkpIFwKKyAgICAgICAgI25hbWUgIiBbd2lkZTMyXSIp
IFwKICAgICB9LAorI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAK
ICNkZWZpbmUgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG5hbWUsIC4uLikgXAogICAgIExMSU5UX09Q
KG5hbWUjI19yZXR1cm5fbG9jYXRpb24pCiAKLSAgICAgICAgY29uc3QgSklUT3BlcmF0aW9uQW5u
b3RhdGlvbiBvcGVyYXRpb25zW10gPSB7CitzdHJ1Y3QgTExJbnRPcGVyYXRpb25zIHsKKyAgICBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBvcGVyYXRpb25zOworICAgIHNpemVfdCBudW1i
ZXJPZk9wZXJhdGlvbnM7Cit9OworCitzdGF0aWMgTExJbnRPcGVyYXRpb25zIGxsaW50T3BlcmF0
aW9ucygpCit7CisgICAgc3RhdGljIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIG9wZXJh
dGlvbnMgPSBudWxscHRyOworICAgIHN0YXRpYyBzaXplX3QgbnVtYmVyT2ZPcGVyYXRpb25zID0g
MDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlS2V5LCBbJl0geworICAgICAgICBzdGF0aWMgY29uc3QgSklUT3BlcmF0aW9uQW5ub3Rh
dGlvbiBvcGVyYXRpb25zU3RvcmFnZVtdID0gewogICAgICAgICAgICAgTExJTlRfUk9VVElORShs
bGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJ
TkUobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExM
SU5UX1JPVVRJTkUobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spCkBAIC0xNjAs
MTUgKzIxNCwzMyBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJCiAg
ICAgICAgICAgICBKU0NfSlNfR0FURV9PUENPREVTKExMSU5UX1JFVFVSTl9MT0NBVElPTikKICAg
ICAgICAgICAgIEpTQ19XQVNNX0dBVEVfT1BDT0RFUyhMTElOVF9SRVRVUk5fTE9DQVRJT04pCiAg
ICAgICAgIH07Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGpp
dE9wZXJhdGlvbkxpc3QtPmFkZFBvaW50ZXJzKG9wZXJhdGlvbnMsIG9wZXJhdGlvbnMgKyBXVEZf
QVJSQVlfTEVOR1RIKG9wZXJhdGlvbnMpKTsKKyAgICAgICAgb3BlcmF0aW9ucyA9IG9wZXJhdGlv
bnNTdG9yYWdlOworICAgICAgICBudW1iZXJPZk9wZXJhdGlvbnMgPSBXVEZfQVJSQVlfTEVOR1RI
KG9wZXJhdGlvbnNTdG9yYWdlKTsKKyAgICB9KTsKKyAgICByZXR1cm4geyBvcGVyYXRpb25zLCBu
dW1iZXJPZk9wZXJhdGlvbnMgfTsKK30KKwogI3VuZGVmIExMSU5UX1JPVVRJTkUKICN1bmRlZiBM
TElOVF9PUAogI3VuZGVmIExMSU5UX1JFVFVSTl9MT0NBVElPTgorI3VuZGVmIExMSU5UX09QX0VY
VFJBUworCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKwordm9pZCBKSVRP
cGVyYXRpb25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkK
K3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlS2V5LCBbXSB7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgeworICAgICAg
ICAgICAgYXV0byBsaXN0ID0gbGxpbnRPcGVyYXRpb25zKCk7CisgICAgICAgICAgICBqaXRPcGVy
YXRpb25MaXN0LT5hZGRQb2ludGVycyhsaXN0Lm9wZXJhdGlvbnMsIGxpc3Qub3BlcmF0aW9ucyAr
IGxpc3QubnVtYmVyT2ZPcGVyYXRpb25zKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICAgICAgSklU
T3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmVG
b3JMTEludCgpOwogICAgIH0pOwogfQogCi0KIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxh
dGVQb2ludGVyc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5P
cGVyYXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKQog
ewogICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKQEAgLTE3Nyw0ICsyNDksNjMgQEAgdm9pZCBK
SVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VF9PUEVSQVRJT05fVkFMSURBVElPTikKIAorU1VQUFJFU1NfQVNBTiB2b2lkIEpJVE9wZXJhdGlv
bkxpc3Q6OmFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24q
IGJlZ2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpCit7CisjaWYgRU5BQkxF
KERJU0FTU0VNQkxFUikKKyAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1i
bHlTdXBwb3J0KCkpOworICAgIGZvciAoY29uc3QgYXV0byogY3VycmVudCA9IGJlZ2luOyBjdXJy
ZW50ICE9IGVuZDsgKytjdXJyZW50KSB7CisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKKyAgICAgICAgYXV0byogb3BlcmF0aW9uID0gY3VycmVudC0+b3BlcmF0aW9uV2l0aFZh
bGlkYXRpb247CisjZWxzZQorICAgICAgICBhdXRvKiBvcGVyYXRpb24gPSBjdXJyZW50LT5vcGVy
YXRpb247CisjZW5kaWYKKyAgICAgICAgcmVnaXN0ZXJMYWJlbChyZW1vdmVDb2RlUHRyVGFnKG9w
ZXJhdGlvbiksIGN1cnJlbnQtPm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGJlZ2luKTsKKyAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyNlbmRpZiAvLyBFTkFCTEUoRElTQVNT
RU1CTEVSKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikg
fHwgRU5BQkxFKERJU0FTU0VNQkxFUikKKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0
ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgpCit7CisjaWYgRU5BQkxFKERJU0FT
U0VNQkxFUikKKyAgICBBU1NFUlQoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKTsK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShv
bmNlS2V5LCBbXSB7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgICAg
IGppdE9wZXJhdGlvbkxpc3QtPmFkZERpc2Fzc2VtYmx5TGFiZWxzKCZzdGFydE9mSklUT3BlcmF0
aW9uc0luSlNDLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5KU0MpOworICAgIH0pOworI2VuZGlmCit9
CisKK3ZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2
YVNjcmlwdENvcmVGb3JMTEludCgpCit7CisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBB
U1NFUlQoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKTsKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Cisg
ICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgeworICAgICAgICAgICAgYXV0byBsaXN0ID0g
bGxpbnRPcGVyYXRpb25zKCk7CisgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGREaXNh
c3NlbWJseUxhYmVscyhsaXN0Lm9wZXJhdGlvbnMsIGxpc3Qub3BlcmF0aW9ucyArIGxpc3QubnVt
YmVyT2ZPcGVyYXRpb25zKTsKKyAgICAgICAgfQorICAgIH0pOworI2VuZGlmCit9CisKK3ZvaWQg
SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRPcGVy
YXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKQoreworI2lmIEVOQUJMRShESVNBU1NFTUJM
RVIpCisgICAgaWYgKExJS0VMWSghT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgaml0
T3BlcmF0aW9uTGlzdC0+YWRkRGlzYXNzZW1ibHlMYWJlbHMoYmVnaW5PcGVyYXRpb25zLCBlbmRP
cGVyYXRpb25zKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJlZ2luT3BlcmF0aW9ucyk7Cisg
ICAgVU5VU0VEX1BBUkFNKGVuZE9wZXJhdGlvbnMpOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRp
b25MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9K
SVRPcGVyYXRpb25MaXN0LmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIs
MTQgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdHJ1Y3QgSklUT3BlcmF0aW9uQW5u
b3RhdGlvbjsKKwogI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKIC8vIFRo
aXMgaW5kaXJlY3Rpb24gaXMgcHJvdmlkZWQgc28gdGhhdCB3ZSBjYW4gbWFudWFsbHkgZm9yY2Ug
b24gYXNzZXJ0aW9ucyBmb3IKIC8vIHRlc3RpbmcgZXZlbiBvbiByZWxlYXNlIGJ1aWxkcy4KICNk
ZWZpbmUgSklUX09QRVJBVElPTl9WQUxJREFUSU9OX0FTU0VSVF9FTkFCTEVEIEFTU0VSVF9FTkFC
TEVECiAKLXN0cnVjdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uOwotCiBjbGFzcyBKSVRPcGVyYXRp
b25MaXN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSklUT3BlcmF0aW9uTGlzdCYgaW5zdGFuY2Uo
KTsKQEAgLTY0LDYgKzY0LDggQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgcG9wdWxhdGVQb2ludGVyc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5u
b3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBl
bmRPcGVyYXRpb25zKTsKIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHBvcHVs
YXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVyKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRp
b24qIGJlZ2luT3BlcmF0aW9ucywgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kT3Bl
cmF0aW9ucyk7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBhc3NlcnRJ
c0pJVE9wZXJhdGlvbihUIGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAgVU5VU0VEX1BBUkFNKGZ1
bmN0aW9uKTsKQEAgLTgxLDcgKzgzLDExIEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Cisg
ICAgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmUo
KTsKKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0
Q29yZUZvckxMSW50KCk7CisKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkUG9pbnRlcnMoY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW4sIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90
YXRpb24qIGVuZCk7CisgICAgdm9pZCBhZGREaXNhc3NlbWJseUxhYmVscyhjb25zdCBKSVRPcGVy
YXRpb25Bbm5vdGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5k
KTsKIAogI2lmIEpJVF9PUEVSQVRJT05fVkFMSURBVElPTl9BU1NFUlRfRU5BQkxFRAogICAgIHZv
aWQgYWRkSW52ZXJzZU1hcCh2b2lkKiB2YWxpZGF0aW9uRW50cnksIHZvaWQqIHBvaW50ZXIpOwpA
QCAtMTA2LDExICsxMTIsMjcgQEAgY2xhc3MgSklUT3BlcmF0aW9uTGlzdCB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQogCi0gICAgc3RhdGljIHZvaWQgcG9wdWxh
dGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmUoKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBwb3B1bGF0
ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkgeyB9CisgICAgc3RhdGljIHZvaWQg
cG9wdWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmUoKQorICAgIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgICAgICBw
b3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgpOworICAgIH0KKyAgICBz
dGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkKKyAg
ICB7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0
KCkpKQorICAgICAgICAgICAgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENv
cmVGb3JMTEludCgpOworICAgIH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVyKGNvbnN0IEpJVE9wZXJhdGlvbkFu
bm90YXRpb24qIGJlZ2luT3BlcmF0aW9ucywgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiog
ZW5kT3BlcmF0aW9ucyk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBh
c3NlcnRJc0pJVE9wZXJhdGlvbihUKSB7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0
aWMgdm9pZCBhc3NlcnRJc0pJVE9wZXJhdGlvbldpdGhWYWxpZGF0aW9uKFQpIHsgfQorCitwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3Jp
cHRDb3JlKCk7CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2
YVNjcmlwdENvcmVGb3JMTEludCgpOworCisgICAgdm9pZCBhZGREaXNhc3NlbWJseUxhYmVscyhj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3BlcmF0aW9uQW5u
b3RhdGlvbiogZW5kKTsKIH07CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRp
b25WYWxpZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQ3LDEzICs0NywxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIEVOQUJM
RShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCi0KIHN0cnVjdCBKSVRPcGVyYXRpb25Bbm5vdGF0
aW9uIHsKICAgICB2b2lkKiBvcGVyYXRpb247CisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKICAgICB2b2lkKiBvcGVyYXRpb25XaXRoVmFsaWRhdGlvbjsKKyNlbmRpZgorICAg
IGNvbnN0IGNoYXIqIG5hbWU7CiB9OwogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKKwogI2lmbmRlZiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04KICNk
ZWZpbmUgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTl9WQUxJREFUSU9OKGZ1bmN0aW9uTmFtZSkK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMyArODIsMTQgQEAg
TGlua0J1ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBMaQogICAgICAgICBzaXplX3Qg
c3RyaW5nTGVuZ3RoID0gdnNucHJpbnRmKG51bGxwdHIsIDAsIGZvcm1hdCwgcHJlZmxpZ2h0QXJn
cyk7CiAgICAgICAgIHZhX2VuZChwcmVmbGlnaHRBcmdzKTsKIAorICAgICAgICBjb25zdCBjaGFy
IHByZWZpeFtdID0gInRodW5rOiAiOwogICAgICAgICBjaGFyKiBidWZmZXIgPSAwOwotICAgICAg
ICBDU3RyaW5nIGxhYmVsID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChzdHJpbmdMZW5ndGgg
KyAxLCBidWZmZXIpOwotICAgICAgICB2c25wcmludGYoYnVmZmVyLCBzdHJpbmdMZW5ndGggKyAx
LCBmb3JtYXQsIGFyZ0xpc3QpOwotICAgICAgICBidWZmZXJbc3RyaW5nTGVuZ3RoXSA9ICdcMCc7
CisgICAgICAgIENTdHJpbmcgbGFiZWwgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKHN0cmlu
Z0xlbmd0aCArIHNpemVvZihwcmVmaXgpLCBidWZmZXIpOworICAgICAgICBzdHJuY3B5KGJ1ZmZl
ciwgcHJlZml4LCBzaXplb2YocHJlZml4KSAtIDEpOworICAgICAgICB2c25wcmludGYoYnVmZmVy
ICsgc2l6ZW9mKHByZWZpeCkgLSAxLCBzdHJpbmdMZW5ndGggKyAxLCBmb3JtYXQsIGFyZ0xpc3Qp
OwogICAgICAgICBvdXQucHJpbnRmKCIlcyIsIGJ1ZmZlcik7CiAKLSAgICAgICAgcmVnaXN0ZXJU
aHVua0xhYmVsKHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBXVEZN
b3ZlKGxhYmVsKSk7CisgICAgICAgIHJlZ2lzdGVyTGFiZWwocmVzdWx0LmNvZGUoKS51bnRhZ2dl
ZEV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUobGFiZWwpKTsKICAgICB9IGVsc2UKICAgICAg
ICAgb3V0LnZwcmludGYoZm9ybWF0LCBhcmdMaXN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiM18xLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzXzEuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAzLDEwICs5MDMsOCBA
QCBzdGF0aWMgdm9pZCBydW4oY29uc3QgY2hhciopCiAKICNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVybiBjb25zdCBK
U0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gc3RhcnRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMyBf
X2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29u
c3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9uc0luVGVzdEIz
IF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7Ci0jZW5kaWYKIAog
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpAQCAtOTMwLDcgKzkyOCwxMSBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05f
VkFMSURBVElPTikKICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJ
bkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luVGVzdEIzLCAmZW5kT2ZKSVRPcGVyYXRp
b25zSW5UZXN0QjMpOwogI2VuZGlmCi0gICAgCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAg
ICBpZiAoVU5MSUtFTFkoSlNDOjpPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQor
ICAgICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJ
bkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luVGVzdEIzLCAmZW5kT2ZKSVRPcGVyYXRp
b25zSW5UZXN0QjMpOworI2VuZGlmCisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IDI7
ICsraSkgewogICAgICAgICBKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPSBpOwog
ICAgICAgICBydW4oZmlsdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3Nl
bWJsZXIvRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogCiAj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSA8dmFyaWFudD4KICNp
bmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KQEAgLTM2LDggKzM3LDIxIEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci11c2luZyBUaHVua0xhYmVsTWFwID0gSGFzaE1hcDx2b2lkKiwgQ1N0cmluZz47Ci1MYXp5TmV2
ZXJEZXN0cm95ZWQ8VGh1bmtMYWJlbE1hcD4gdGh1bmtMYWJlbE1hcDsKK25hbWVzcGFjZSBEaXNh
c3NlbWJsZXIgeworCit1c2luZyBMYWJlbE1hcCA9IEhhc2hNYXA8dm9pZCosIHN0ZDo6dmFyaWFu
dDxDU3RyaW5nLCBjb25zdCBjaGFyKj4+OworTGF6eU5ldmVyRGVzdHJveWVkPExhYmVsTWFwPiBs
YWJlbE1hcDsKKworc3RhdGljIExhYmVsTWFwJiBlbnN1cmVMYWJlbE1hcCgpCit7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwg
W10geworICAgICAgICBsYWJlbE1hcC5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
bGFiZWxNYXAuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc2Fzc2VtYmxlcgogCiB2b2lk
IGRpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRh
Zz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQs
IGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKQEAgLTE1NywyNyArMTcx
LDI1IEBAIHZvaWQgd2FpdEZvckFzeW5jaHJvbm91c0Rpc2Fzc2VtYmx5KCkKICAgICBhc3luY2hy
b25vdXNEaXNhc3NlbWJsZXIoKS53YWl0VW50aWxFbXB0eSgpOwogfQogCi1zdGF0aWMgVGh1bmtM
YWJlbE1hcCYgZW5zdXJlVGh1bmtMYWJlbE1hcCgpCit2b2lkIHJlZ2lzdGVyTGFiZWwodm9pZCog
dGh1bmtBZGRyZXNzLCBDU3RyaW5nJiYgbGFiZWwpCiB7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2VLZXk7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewotICAgICAgICB0
aHVua0xhYmVsTWFwLmNvbnN0cnVjdCgpOwotICAgIH0pOwotICAgIHJldHVybiB0aHVua0xhYmVs
TWFwLmdldCgpOworICAgIERpc2Fzc2VtYmxlcjo6ZW5zdXJlTGFiZWxNYXAoKS5hZGQodGh1bmtB
ZGRyZXNzLCBXVEZNb3ZlKGxhYmVsKSk7CiB9CiAKLXZvaWQgcmVnaXN0ZXJUaHVua0xhYmVsKHZv
aWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVsKQordm9pZCByZWdpc3RlckxhYmVsKHZv
aWQqIGFkZHJlc3MsIGNvbnN0IGNoYXIqIGxhYmVsKQogewotICAgIGVuc3VyZVRodW5rTGFiZWxN
YXAoKS5hZGQodGh1bmtBZGRyZXNzLCBXVEZNb3ZlKGxhYmVsKSk7CisgICAgRGlzYXNzZW1ibGVy
OjplbnN1cmVMYWJlbE1hcCgpLmFkZChhZGRyZXNzLCBsYWJlbCk7CiB9CiAKLWNvbnN0IGNoYXIq
IGxhYmVsRm9yVGh1bmsodm9pZCogdGh1bmtBZGRyZXNzKQorY29uc3QgY2hhciogbGFiZWxGb3Io
dm9pZCogdGh1bmtBZGRyZXNzKQogewotICAgIGF1dG8mIG1hcCA9IGVuc3VyZVRodW5rTGFiZWxN
YXAoKTsKKyAgICBhdXRvJiBtYXAgPSBEaXNhc3NlbWJsZXI6OmVuc3VyZUxhYmVsTWFwKCk7CiAg
ICAgYXV0byBpdCA9IG1hcC5maW5kKHRodW5rQWRkcmVzcyk7CiAgICAgaWYgKGl0ID09IG1hcC5l
bmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGl0LT52YWx1ZS5kYXRh
KCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q1N0cmluZz4oaXQtPnZhbHVlKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PENTdHJpbmc+KGl0LT52YWx1ZSkuZGF0YSgpOworICAg
IHJldHVybiBzdGQ6OmdldDxjb25zdCBjaGFyKj4oaXQtPnZhbHVlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fz
c2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvRGlzYXNzZW1ibGVyLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcg
KzYxLDggQEAgdm9pZCBkaXNhc3NlbWJsZUFzeW5jaHJvbm91c2x5KAogCiBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHdhaXRGb3JBc3luY2hyb25vdXNEaXNhc3NlbWJseSgpOwogCi12b2lkIHJlZ2lz
dGVyVGh1bmtMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJpbmcmJiBsYWJlbCk7Ci1jb25z
dCBjaGFyKiBsYWJlbEZvclRodW5rKHZvaWQqIHRodW5rQWRkcmVzcyk7Cit2b2lkIHJlZ2lzdGVy
TGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3RyaW5nJiYgbGFiZWwpOwordm9pZCByZWdpc3Rl
ckxhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgY29uc3QgY2hhciogbGFiZWwpOworY29uc3QgY2hh
ciogbGFiZWxGb3Iodm9pZCogdGh1bmtBZGRyZXNzKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJN
NjQvQTY0RE9wY29kZS5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDEwICszMiwxNiBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkV4
ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiSW50
ZWdyaXR5LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkxMSW50UENSYW5n
ZXMuaCIKKyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIKICNp
bmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRpby5o
PgorI2luY2x1ZGUgPHd0Zi9QdHJUYWcuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBBUk02NERpc2Fzc2VtYmxlciB7CiAKQEAgLTIwMSwxMiAr
MjA3LDEyIEBAIHZvaWQgQTY0RE9wY29kZTo6YXBwZW5kUENSZWxhdGl2ZU9mZnNldCgKICAgICAg
ICAgdGFyZ2V0SW5mbyA9ICIiOwogICAgIGVsc2UgaWYgKHRhcmdldFBDID49IG1fc3RhcnRQQyAm
JiB0YXJnZXRQQyA8IG1fZW5kUEMpCiAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyU2l6
ZSAtIDEsICIgLT4gPCV1PiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigodGFyZ2V0UEMgLSBtX3N0
YXJ0UEMpICogc2l6ZW9mKHVpbnQzMl90KSkpOwotICAgIGVsc2UgaWYgKGNvbnN0IGNoYXIqIHRo
dW5rTGFiZWwgPSBsYWJlbEZvclRodW5rKHRhcmdldFBDKSkKLSAgICAgICAgc25wcmludGYoYnVm
ZmVyLCBidWZmZXJTaXplIC0gMSwgIiAtPiA8dGh1bms6ICVzPiIsIHRodW5rTGFiZWwpOworICAg
IGVsc2UgaWYgKGNvbnN0IGNoYXIqIGxhYmVsID0gbGFiZWxGb3IodGFyZ2V0UEMpKQorICAgICAg
ICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlclNpemUgLSAxLCAiIC0+ICVzIiwgbGFiZWwpOwogICAg
IGVsc2UgaWYgKGlzSklUUEModGFyZ2V0UEMpKQotICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiA8
SklUIFBDPiI7CisgICAgICAgIHRhcmdldEluZm8gPSAiIC0+IEpJVCBQQyI7CiAgICAgZWxzZSBp
ZiAoTExJbnQ6OmlzTExJbnRQQyh0YXJnZXRQQykpCi0gICAgICAgIHRhcmdldEluZm8gPSAiIC0+
IDxMTEludCBQQz4iOworICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiBMTEludCBQQyI7CiAgICAg
ZWxzZQogICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiA8dW5rbm93bj4iOwogCkBAIC0xNTcwLDEy
ICsxNTc2LDEyNyBAQCBjb25zdCBjaGFyKiBBNjRET3Bjb2RlTG9naWNhbEltbWVkaWF0ZTo6CiAK
IGNvbnN0IGNoYXIqIGNvbnN0IEE2NERPcGNvZGVNb3ZlV2lkZTo6c19vcE5hbWVzWzRdID0geyAi
bW92biIsIDAsICJtb3Z6IiwgIm1vdmsiIH07CiAKLWNvbnN0IGNoYXIqIEE2NERPcGNvZGVNb3Zl
V2lkZTo6Zm9ybWF0KCkKK2NsYXNzIE1vdmVXaWRlRm9ybWF0VHJhaXQgeworcHVibGljOgorICAg
IHVzaW5nIFJlc3VsdFR5cGUgPSBjb25zdCBjaGFyKjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgcmV0dXJuRWFybHlJZkFjY2VwdGVkID0gZmFsc2U7CisKKyAgICBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBjb25zdCBjaGFyKiByZWplY3RlZFJlc3VsdChBNjRET3Bjb2RlTW92ZVdpZGUqIG9wY29k
ZSkgeyByZXR1cm4gb3Bjb2RlLT5iYXNlRm9ybWF0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBjb25zdCBjaGFyKiBhY2NlcHRlZFJlc3VsdChBNjRET3Bjb2RlTW92ZVdpZGUqIG9wY29k
ZSkgeyByZXR1cm4gb3Bjb2RlLT5mb3JtYXRCdWZmZXIoKTsgfQorfTsKKworY2xhc3MgTW92ZVdp
ZGVJc1ZhbGlkVHJhaXQgeworcHVibGljOgorICAgIHVzaW5nIFJlc3VsdFR5cGUgPSBib29sOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXR1cm5FYXJseUlmQWNjZXB0ZWQgPSB0cnVlOwor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHJlamVjdGVkUmVzdWx0KEE2NERPcGNvZGVNb3Zl
V2lkZSopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGFjY2Vw
dGVkUmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSopIHsgcmV0dXJuIHRydWU7IH0KK307CisKK2Jv
b2wgQTY0RE9wY29kZU1vdmVXaWRlOjpoYW5kbGVQb3RlbnRpYWxEYXRhUG9pbnRlcih2b2lkKiBw
dHIpCit7CisgICAgQVNTRVJUKEludGVncml0eTo6aXNTYW5lUG9pbnRlcihwdHIpKTsKKworICAg
IGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIFZNSW5zcGVjdG9yOjpmb3JFYWNoVk0oWyZdIChW
TSYgdm0pIHsKKyAgICAgICAgaWYgKHB0ciA9PSAmdm0pIHsKKyAgICAgICAgICAgIGJ1ZmZlclBy
aW50ZigiIHZtIik7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZt
LmlzSW5TZXJ2aWNlKCkpCisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKKworICAgICAgICBhdXRvKiB2bVN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oJnZtKTsKKyAgICAgICAgYXV0byogdm1FbmQgPSB2bVN0YXJ0ICsgc2l6ZW9mKFZNKTsKKyAg
ICAgICAgYXV0byogdThQdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihwdHIpOworICAg
ICAgICBSYW5nZSB2bVJhbmdlKHZtU3RhcnQsIHZtRW5kKTsKKyAgICAgICAgaWYgKHZtUmFuZ2Uu
Y29udGFpbnModThQdHIpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1OFB0ciAt
IHZtU3RhcnQ7CisgICAgICAgICAgICBidWZmZXJQcmludGYoIiB2bSArJXUiLCBvZmZzZXQpOwor
CisgICAgICAgICAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgICAg
ICAgICBpZiAocHRyID09ICZ2bS50b3BDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSAidm0udG9wQ2FsbEZyYW1lIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNldCA9
PSBWTTo6dG9wRW50cnlGcmFtZU9mZnNldCgpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
ID0gInZtLnRvcEVudHJ5RnJhbWUiOworICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0ID09IFZN
OjpleGNlcHRpb25PZmZzZXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5t
X2V4Y2VwdGlvbiI7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZzZXQgPT0gVk06Om9mZnNldE9m
SGVhcEJhcnJpZXJUaHJlc2hvbGQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2
bS5oZWFwLm1fYmFycmllclRocmVzaG9sZCI7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZzZXQg
PT0gVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSAidm0uY2FsbEZyYW1lRm9yQ2F0Y2giOworICAgICAgICAgICAgZWxzZSBpZiAocHRy
ID09IHZtLmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpCisgICAgICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSAidm0ubV9zb2Z0U3RhY2tMaW1pdCI7CisgICAgICAgICAgICBlbHNlIGlmIChwdHIg
PT0gJnZtLm9zckV4aXRJbmRleCkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5v
c3JFeGl0SW5kZXgiOworICAgICAgICAgICAgZWxzZSBpZiAocHRyID09ICZ2bS5vc3JFeGl0SnVt
cERlc3RpbmF0aW9uKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm9zckV4aXRK
dW1wRGVzdGluYXRpb24iOworICAgICAgICAgICAgZWxzZSBpZiAocHRyID09IHZtLnNtYWxsU3Ry
aW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRp
b24gPSAidm0uc21hbGxTdHJpbmdzLm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncyI7CisgICAgICAg
ICAgICBlbHNlIGlmIChwdHIgPT0gJnZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KQorICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93IjsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSB2bS50cmFwcygpLnRyYXBCaXRzQWRkcmVzcygpKQor
ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1fdHJhcHMubV90cmFwQml0cyI7Cisj
aWYgRU5BQkxFKERGR19ET0VTX0dDX1ZBTElEQVRJT04pCisgICAgICAgICAgICBlbHNlIGlmIChw
dHIgPT0gdm0uYWRkcmVzc09mRG9lc0dDKCkpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24g
PSAidm0ubV9kb2VzR0MiOworI2VuZGlmCisgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pCisg
ICAgICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCI6ICVzIiwgZGVzY3JpcHRpb24pOworCisgICAg
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodm0uaXNTY3JhdGNoQnVmZmVyKHB0
cikpIHsKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIHZtIHNjcmF0Y2hCdWZmZXIubV9idWZm
ZXIiKTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIEl0
ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKworI2lm
IENQVShBUk02NEUpCitib29sIEE2NERPcGNvZGVNb3ZlV2lkZTo6aGFuZGxlUG90ZW50aWFsUHRy
VGFnKHVpbnRwdHJfdCB2YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID4gMHhmZmZm
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQdHJUYWcgdGFnID0gc3RhdGljX2Nhc3Q8
UHRyVGFnPih2YWx1ZSk7CisjaWYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCisgICAgY29uc3Qg
Y2hhciogbmFtZSA9IFdURjo6cHRyVGFnTmFtZSh0YWcpOworICAgIGlmIChuYW1lWzBdID09ICc8
JykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPbmx5IHJlc3VsdCB0aGF0IHN0YXJ0cyB3aXRo
ICc8JyBpcyAiPHVua25vd24+Ii4KKyNlbHNlCisgICAgLy8gV2l0aG91dCBFTkFCTEUoUFRSVEFH
X0RFQlVHR0lORyksIG5vdCBhbGwgUHRyVGFncyBhcmUgcmVnaXN0ZXJlZGYgZm9yCisgICAgLy8g
cHJpbnRpbmcuIFNvLCB3ZSdsbCBqdXN0IGRvIHRoZSBtaW5pbXVtIHdpdGggb25seSB0aGUgSlND
IHNwZWNpZmljIHRhZ3MuCisgICAgY29uc3QgY2hhciogbmFtZSA9IHB0clRhZ05hbWUodGFnKTsK
KyAgICBpZiAoIW5hbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisgICAgLy8g
QWxzbyBwcmludCAnPycgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGEgbWF5YmUuIFdlIGRvIG5v
dCBrbm93IGZvciBjZXJ0YWluCisgICAgLy8gaWYgdGhlIGNvbnN0YW50IGlzIG1lYW50IHRvIGJl
IHVzZWQgYXMgYSBQdHJUYWcuCisgICAgYnVmZmVyUHJpbnRmKCIgLT4gJXAgJXMgPyIsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKSwgbmFtZSk7CisgICAgcmV0dXJuIHRydWU7Cit9Cisj
ZW5kaWYKKwordGVtcGxhdGU8dHlwZW5hbWUgVHJhaXQ+Cit0eXBlbmFtZSBUcmFpdDo6UmVzdWx0
VHlwZSBBNjRET3Bjb2RlTW92ZVdpZGU6OnBhcnNlKCkKIHsKICAgICBpZiAob3BjKCkgPT0gMSkK
LSAgICAgICAgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1hdCgpOworICAgICAgICByZXR1cm4gVHJh
aXQ6OnJlamVjdGVkUmVzdWx0KHRoaXMpOwogICAgIGlmICghaXM2NEJpdCgpICYmIGh3KCkgPj0g
MikKLSAgICAgICAgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1hdCgpOworICAgICAgICByZXR1cm4g
VHJhaXQ6OnJlamVjdGVkUmVzdWx0KHRoaXMpOworCisgICAgaWYgY29uc3RleHByIChUcmFpdDo6
cmV0dXJuRWFybHlJZkFjY2VwdGVkKQorICAgICAgICByZXR1cm4gVHJhaXQ6OmFjY2VwdGVkUmVz
dWx0KHRoaXMpOwogCiAgICAgaWYgKCFvcGMoKSAmJiAoIWltbWVkaWF0ZTE2KCkgfHwgIWh3KCkp
ICYmIChpczY0Qml0KCkgfHwgaW1tZWRpYXRlMTYoKSAhPSAweGZmZmYpKSB7CiAgICAgICAgIC8v
IE1PViBwc2V1ZG8gb3AgZm9yIE1PVk4KQEAgLTE1ODcsMTAgKzE3MDgsMTIgQEAgY29uc3QgY2hh
ciogQTY0RE9wY29kZU1vdmVXaWRlOjpmb3JtYXQoKQogICAgICAgICAgICAgaW50NjRfdCBhbW91
bnQgPSBpbW1lZGlhdGUxNigpIDw8IChodygpICogMTYpOwogICAgICAgICAgICAgYW1vdW50ID0g
fmFtb3VudDsKICAgICAgICAgICAgIGFwcGVuZFNpZ25lZEltbWVkaWF0ZTY0KGFtb3VudCk7Cisg
ICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYW1vdW50
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGludDMyX3QgYW1vdW50ID0gaW1tZWRp
YXRlMTYoKSA8PCAoaHcoKSAqIDE2KTsKICAgICAgICAgICAgIGFtb3VudCA9IH5hbW91bnQ7CiAg
ICAgICAgICAgICBhcHBlbmRTaWduZWRJbW1lZGlhdGUoYW1vdW50KTsKKyAgICAgICAgICAgIG1f
YnVpbHRDb25zdGFudCA9IHN0YXRpY19jYXN0PGludHB0cl90PihhbW91bnQpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKG9wTmFtZSgpKTsK
QEAgLTE2MDEsMTEgKzE3MjQsNjUgQEAgY29uc3QgY2hhciogQTY0RE9wY29kZU1vdmVXaWRlOjpm
b3JtYXQoKQogICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CiAgICAgICAgICAgICBhcHBl
bmRTaGlmdEFtb3VudChodygpKTsKICAgICAgICAgfQotICAgIH0KIAotICAgIHJldHVybiBtX2Zv
cm1hdEJ1ZmZlcjsKKyAgICAgICAgaWYgKG9wYygpID09IDIpIC8vIEVuY29kaW5nIGZvciBtb3Z6
CisgICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSAwOworCisgICAgICAgIHVuc2lnbmVkIHNo
aWZ0ID0gaHcoKSAqIDE2OworICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KGltbWVkaWF0ZTE2KCkpIDw8IHNoaWZ0OworICAgICAgICB1aW50cHRyX3QgbWFz
ayA9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigweGZmZmYpIDw8IHNoaWZ0KTsKKyAgICAgICAg
bV9idWlsdENvbnN0YW50ICY9IG1hc2s7CisgICAgICAgIG1fYnVpbHRDb25zdGFudCB8PSB2YWx1
ZTsKKyAgICB9CisKKyAgICBhdXRvIGR1bXBDb25zdGFudERhdGEgPSBbJl0geworICAgICAgICB1
aW50MzJfdCogbmV4dFBDID0gbV9jdXJyZW50UEMgKyAxOworICAgICAgICBpZiAobmV4dFBDID49
IG1fZW5kUEMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQTY0RE9wY29kZSBuZXh0
QmFzZU9wY29kZShtX3N0YXJ0UEMsIG1fZW5kUEMpOworICAgICAgICBBNjRET3Bjb2RlTW92ZVdp
ZGUmIG5leHRPcGNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxBNjRET3Bjb2RlTW92ZVdpZGUqPigm
bmV4dEJhc2VPcGNvZGUpOworICAgICAgICBuZXh0T3Bjb2RlLnNldFBDQW5kT3Bjb2RlKG5leHRQ
QywgKm5leHRQQyk7CisKKyAgICAgICAgYm9vbCBuZXh0SXNNb3ZlV2lkZUdyb3VwID0gb3Bjb2Rl
R3JvdXBOdW1iZXIobV9vcGNvZGUpID09IG9wY29kZUdyb3VwTnVtYmVyKCpuZXh0UEMpOworCisg
ICAgICAgIGlmIChuZXh0SXNNb3ZlV2lkZUdyb3VwICYmIG5leHRPcGNvZGUuaXNWYWxpZCgpICYm
IG5leHRPcGNvZGUucmQoKSA9PSByZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHZvaWQqIHB0ciA9IHJlbW92ZUNvZGVQdHJUYWcoYml0d2lzZV9jYXN0PHZvaWQqPihtX2J1aWx0
Q29uc3RhbnQpKTsKKyAgICAgICAgaWYgKCFwdHIpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgaWYgKEludGVncml0eTo6aXNTYW5lUG9pbnRlcihwdHIpKSB7CisgICAgICAgICAgICBi
dWZmZXJQcmludGYoIiAtPiAlcCIsIHB0cik7CisgICAgICAgICAgICBpZiAoY29uc3QgY2hhciog
bGFiZWwgPSBsYWJlbEZvcihwdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJQcmlu
dGYoIiAlcyIsIGxhYmVsKTsKKyAgICAgICAgICAgIGlmIChpc0pJVFBDKHB0cikpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJ1ZmZlclByaW50ZigiIEpJVCBQQyIpOworICAgICAgICAgICAgaWYg
KExMSW50Ojppc0xMSW50UEMocHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyUHJp
bnRmKCIgTExJbnQgUEMiKTsKKyAgICAgICAgICAgIGhhbmRsZVBvdGVudGlhbERhdGFQb2ludGVy
KHB0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZiBDUFUoQVJNNjRFKQor
ICAgICAgICBpZiAoaGFuZGxlUG90ZW50aWFsUHRyVGFnKG1fYnVpbHRDb25zdGFudCkpCisgICAg
ICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICAgICAgaWYgKG1fYnVpbHRDb25zdGFudCA8IDB4
MTAwMDApCisgICAgICAgICAgICBidWZmZXJQcmludGYoIiAtPiAldSIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX2J1aWx0Q29uc3RhbnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnVm
ZmVyUHJpbnRmKCIgLT4gJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtX2J1aWx0Q29uc3Rh
bnQpKTsKKyAgICB9OworCisgICAgaWYgKG1fc3RhcnRQQykKKyAgICAgICAgZHVtcENvbnN0YW50
RGF0YSgpOworCisgICAgcmV0dXJuIFRyYWl0OjphY2NlcHRlZFJlc3VsdCh0aGlzKTsKIH0KIAor
Y29uc3QgY2hhciogQTY0RE9wY29kZU1vdmVXaWRlOjpmb3JtYXQoKSB7IHJldHVybiBwYXJzZTxN
b3ZlV2lkZUZvcm1hdFRyYWl0PigpOyB9Citib29sIEE2NERPcGNvZGVNb3ZlV2lkZTo6aXNWYWxp
ZCgpIHsgcmV0dXJuIHBhcnNlPE1vdmVXaWRlSXNWYWxpZFRyYWl0PigpOyB9CisKIGNvbnN0IGNo
YXIqIEE2NERPcGNvZGVUZXN0QW5kQnJhbmNoSW1tZWRpYXRlOjpmb3JtYXQoKQogewogICAgIGFw
cGVuZEluc3RydWN0aW9uTmFtZShvcEJpdCgpID8gInRibnoiIDogInRieiIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bjb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bj
b2RlLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3Nl
bWJsZXIvQVJNNjQvQTY0RE9wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDcg
QEAgcHJvdGVjdGVkOgogICAgICAgICBidWZmZXJQcmludGYoImxzbCAjJXUiLCAxNiAqIGFtb3Vu
dCk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgYnVmZmVyU2l6ZSA9IDgxOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGJ1ZmZlclNpemUgPSAxMDE7CiAKICAgICBjaGFyIG1f
Zm9ybWF0QnVmZmVyW2J1ZmZlclNpemVdOwogICAgIHVpbnQzMl90KiBtX3N0YXJ0UEM7CkBAIC0y
MDIsNiArMjAyLDcgQEAgcHJvdGVjdGVkOgogICAgIHVpbnQzMl90KiBtX2N1cnJlbnRQQzsKICAg
ICB1aW50MzJfdCBtX29wY29kZTsKICAgICBpbnQgbV9idWZmZXJPZmZzZXQ7CisgICAgdWludHB0
cl90IG1fYnVpbHRDb25zdGFudCB7IDAgfTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgT3Bjb2Rl
R3JvdXAqIG9wY29kZVRhYmxlWzMyXTsKQEAgLTg3MiwxMSArODczLDI0IEBAIHB1YmxpYzoKICAg
ICBERUZJTkVfU1RBVElDX0ZPUk1BVChBNjRET3Bjb2RlTW92ZVdpZGUsIHRoaXNPYmopOwogCiAg
ICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisgICAgYm9vbCBpc1ZhbGlkKCk7CiAKICAgICBjb25z
dCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBzX29wTmFtZXNbb3BjKCldOyB9CiAgICAgdW5zaWdu
ZWQgb3BjKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDI5KSAmIDB4MzsgfQogICAgIHVuc2lnbmVk
IGh3KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDIxKSAmIDB4MzsgfQogICAgIHVuc2lnbmVkIGlt
bWVkaWF0ZTE2KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDUpICYgMHhmZmZmOyB9CisKK3ByaXZh
dGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXQ+IHR5cGVuYW1lIFRyYWl0OjpSZXN1bHRU
eXBlIHBhcnNlKCk7CisgICAgYm9vbCBoYW5kbGVQb3RlbnRpYWxEYXRhUG9pbnRlcih2b2lkKik7
CisgICAgYm9vbCBoYW5kbGVQb3RlbnRpYWxQdHJUYWcodWludHB0cl90KTsKKworICAgIC8vIFRo
ZXNlIGZvcndhcmRpbmcgZnVuY3Rpb25zIGFyZSBuZWVkZWQgZm9yIE1vdmVXaWRlRm9ybWF0VHJh
aXQgb25seS4KKyAgICBjb25zdCBjaGFyKiBiYXNlRm9ybWF0KCkgeyByZXR1cm4gQTY0RE9wY29k
ZTo6Zm9ybWF0KCk7IH0KKyAgICBjb25zdCBjaGFyKiBmb3JtYXRCdWZmZXIoKSB7IHJldHVybiBt
X2Zvcm1hdEJ1ZmZlcjsgfQorCisgICAgZnJpZW5kIGNsYXNzIE1vdmVXaWRlRm9ybWF0VHJhaXQ7
CisgICAgZnJpZW5kIGNsYXNzIE1vdmVXaWRlSXNWYWxpZFRyYWl0OwogfTsKIAogY2xhc3MgQTY0
RE9wY29kZVRlc3RBbmRCcmFuY2hJbW1lZGlhdGUgOiBwdWJsaWMgQTY0RE9wY29kZSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5jcHAJKHJldmlzaW9u
IDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNiw4ICszNiwxOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
I2lmIENQVShBUk02NEUpICYmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQorI2lmIENQVShBUk02
NEUpCisKK2NvbnN0IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFnIHRhZykKK3sKKyNkZWZpbmUgUkVU
VVJOX1BUUlRBR19OQU1FKF90YWdOYW1lLCBjYWxsZWVUeXBlLCBjYWxsZXJUeXBlKSBjYXNlIF90
YWdOYW1lOiByZXR1cm4gI190YWdOYW1lOworICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHRhZykpIHsKKyAgICAgICAgRk9SX0VBQ0hfSlNDX1BUUlRBRyhSRVRVUk5fUFRSVEFHX05B
TUUpCisgICAgfQorI3VuZGVmIFJFVFVSTl9QVFJUQUdfTkFNRQorICAgIHJldHVybiBudWxscHRy
OyAvLyBNYXRjaGluZyB0YWcgbm90IGZvdW5kLgorfQogCisjaWYgRU5BQkxFKFBUUlRBR19ERUJV
R0dJTkcpCiBzdGF0aWMgY29uc3QgY2hhciogdGFnRm9yUHRyKGNvbnN0IHZvaWQqIHB0cikKIHsK
ICNkZWZpbmUgUkVUVVJOX05BTUVfSUZfVEFHX01BVENIRVModGFnLCBjYWxsZWVUeXBlLCBjYWxs
ZXJUeXBlKSBcCkBAIC01MCwyNCArNjEsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHRhZ0ZvclB0
cihjb25zdCB2b2lkKgogICAgIHJldHVybiBudWxscHRyOyAvLyBNYXRjaGluZyB0YWcgbm90IGZv
dW5kLgogfQogCi1zdGF0aWMgY29uc3QgY2hhciogcHRyVGFnTmFtZShQdHJUYWcgdGFnKQotewot
I2RlZmluZSBSRVRVUk5fUFRSVEFHX05BTUUoX3RhZ05hbWUsIGNhbGxlZVR5cGUsIGNhbGxlclR5
cGUpIGNhc2UgX3RhZ05hbWU6IHJldHVybiAjX3RhZ05hbWU7Ci0gICAgc3dpdGNoIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odGFnKSkgewotICAgICAgICBGT1JfRUFDSF9KU0NfUFRSVEFHKFJFVFVS
Tl9QVFJUQUdfTkFNRSkKLSAgICB9Ci0jdW5kZWYgUkVUVVJOX1BUUlRBR19OQU1FCi0gICAgcmV0
dXJuIG51bGxwdHI7IC8vIE1hdGNoaW5nIHRhZyBub3QgZm91bmQuCi19Ci0KIHZvaWQgaW5pdGlh
bGl6ZVB0clRhZ0xvb2t1cCgpCiB7CiAgICAgV1RGOjpQdHJUYWdMb29rdXAmIGxvb2t1cCA9IGdf
anNjQ29uZmlnLnB0clRhZ0xvb2t1cFJlY29yZDsKICAgICBsb29rdXAuaW5pdGlhbGl6ZSh0YWdG
b3JQdHIsIHB0clRhZ05hbWUpOwogICAgIFdURjo6cmVnaXN0ZXJQdHJUYWdMb29rdXAoJmxvb2t1
cCk7CiB9Ci0KLSNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoUFRSVEFHX0RFQlVHR0lO
RykKKyNlbmRpZiAvLyBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykKKyNlbmRpZiAvLyBDUFUoQVJN
NjRFKQogCiAjaWYgQ1BVKEFSTTY0RSkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDUHRyVGFnLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ4LDYgKzI0OCwx
MCBAQCB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29rdXAoKTsKIGlubGluZSB2b2lkIGluaXRpYWxp
emVQdHJUYWdMb29rdXAoKSB7IH0KICNlbmRpZgogCisjaWYgQ1BVKEFSTTY0RSkKK2NvbnN0IGNo
YXIqIHB0clRhZ05hbWUoUHRyVGFnKTsKKyNlbmRpZiAvLyBDUFUoQVJNNjRFKQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIG5hbWVzcGFjZSBXVEYgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NSwxMCAr
NDY1LDE4IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygKICAgICBp
ZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5KCkpCiAgICAgICAgIE9wdGlvbnM6OnVzZUZhc3RU
TFNGb3JXYXNtQ29udGV4dCgpID0gZmFsc2U7CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0pJ
VCgpCi0gICAgICAgIHx8IE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpCisgICAgaWYgKE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1i
bHkoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKQogICAgICAgICB8
fCBPcHRpb25zOjpkdW1wRlRMRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1w
UmVnRXhwRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2Vt
Ymx5KCkKKyAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEJCUURpc2Fzc2VtYmx5KCkKKyAgICAgICAg
fHwgT3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIE9wdGlvbnM6Om5lZWRE
aXNhc3NlbWJseVN1cHBvcnQoKSA9IHRydWU7CisKKyAgICBpZiAoT3B0aW9uczo6bG9nSklUKCkK
KyAgICAgICAgfHwgT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpCiAgICAgICAgIHx8
IE9wdGlvbnM6OmR1bXBCeXRlY29kZUF0REZHVGltZSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1
bXBHcmFwaEF0RWFjaFBoYXNlKCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcERGR0dyYXBoQXRF
YWNoUGhhc2UoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDcgQEAgYm9vbCBj
YW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICBcCiAgICAgdihCb29sLCB1c2VPU0xv
ZywgZmFsc2UsIE5vcm1hbCwgIkxvZyBkYXRhTG9nKClzIHRvIG9zX2xvZyBpbnN0ZWFkIG9mIHN0
ZGVyciIpIFwKICAgICAvKiBkdW1wRGlzYXNzZW1ibHkgaW1wbGllcyBkdW1wREZHRGlzYXNzZW1i
bHkuICovIFwKKyAgICB2KEJvb2wsIG5lZWREaXNhc3NlbWJseVN1cHBvcnQsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGR1bXBEaXNhc3NlbWJseSwgZmFsc2UsIE5vcm1h
bCwgImR1bXBzIGRpc2Fzc2VtYmx5IG9mIGFsbCBKSVQgY29tcGlsZWQgY29kZSB1cG9uIGNvbXBp
bGF0aW9uIikgXAogICAgIHYoQm9vbCwgYXN5bmNEaXNhc3NlbWJseSwgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoQm9vbCwgbG9nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyOTQyMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MDksNiArMTQwOSwxNiBAQCB2b2lkIFZNOjpjbGVhclNjcmF0Y2hCdWZmZXJzKCkKICAg
ICAgICAgc2NyYXRjaEJ1ZmZlci0+c2V0QWN0aXZlTGVuZ3RoKDApOwogfQogCitib29sIFZNOjpp
c1NjcmF0Y2hCdWZmZXIodm9pZCogcHRyKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX3NjcmF0
Y2hCdWZmZXJMb2NrIH07CisgICAgZm9yIChhdXRvKiBzY3JhdGNoQnVmZmVyIDogbV9zY3JhdGNo
QnVmZmVycykgeworICAgICAgICBpZiAoc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpID09IHB0
cikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIHZvaWQgVk06OmVuc3VyZVNoYWRvd0NoaWNrZW4oKQogewogICAgIGlmIChtX3NoYWRvd0No
aWNrZW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI5NDIy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY4NSw2ICs2ODUsNyBAQCBwdWJsaWM6CiAgICAgLy8gLSBZb3UgY2FuIG9ubHkgd3JpdGUg
dG8gZW50cmllcyBpbiB0aGUgU2NyYXRjaEJ1ZmZlciBmcm9tIHRoZSBtYWluIHRocmVhZC4KICAg
ICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplX3Qgc2l6ZSk7CiAgICAg
dm9pZCBjbGVhclNjcmF0Y2hCdWZmZXJzKCk7CisgICAgYm9vbCBpc1NjcmF0Y2hCdWZmZXIodm9p
ZCopOwogCiAgICAgRW5jb2RlZEpTVmFsdWUqIGV4Y2VwdGlvbkZ1enppbmdCdWZmZXIoc2l6ZV90
IHNpemUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHku
aAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVn
cml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw4IEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIGJvb2wgaXNTYW5lUG9pbnRlcigKICAgICB1aW50cHRyX3QgcG9pbnRlckFzSW50ID0gYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcik7CiAgICAgdWludHB0cl90IGNhbm9uaWNhbFBv
aW50ZXJCaXRzID0gcG9pbnRlckFzSW50IDw8ICg2NCAtIE9TX0NPTlNUQU5UKEVGRkVDVElWRV9B
RERSRVNTX1dJRFRIKSk7CiAgICAgdWludHB0cl90IG5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzID0g
cG9pbnRlckFzSW50ID4+IE9TX0NPTlNUQU5UKEVGRkVDVElWRV9BRERSRVNTX1dJRFRIKTsKLSAg
ICByZXR1cm4gIW5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzICYmIGNhbm9uaWNhbFBvaW50ZXJCaXRz
OworICAgIHVpbnRwdHJfdCBsb3dlcjRHID0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwg
MzIpIC0gMTsKKyAgICByZXR1cm4gIW5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzICYmIGNhbm9uaWNh
bFBvaW50ZXJCaXRzICYmIHBvaW50ZXJBc0ludCA+IGxvd2VyNEc7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShwb2ludGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtQ2FsbGluZ0NvbnZlbnRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvUGxhdGZvcm1DYWxsaW5nQ29udmVudGlvbnMuaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291
cmNlL1dURi93dGYvUGxhdGZvcm1DYWxsaW5nQ29udmVudGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3Jj
aCBNb2JpbGUsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC04NCw5ICs4NCwyNCBA
QAogI2RlZmluZSBKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMKICNlbmRpZgogCisvKgorLy8jaWYg
RU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKy8vI2RlZmluZSBKU0NfQU5OT1RBVEVf
SklUX09QRVJBVElPTl9FWFRSQVModmFsaWRhdGVGdW5jdGlvbiwgbmFtZSkgKHZvaWQqKXZhbGlk
YXRlRnVuY3Rpb24sIG5hbWUKKy8vI2Vsc2UKKy8vI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09Q
RVJBVElPTl9FWFRSQVModmFsaWRhdGVGdW5jdGlvbiwgbmFtZSkgbmFtZQorLy8jZW5kaWYKKy8v
CisvLyNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fSU5URVJOQUwoZnVuY3Rpb24p
IFwKKy8vICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gX0pJVFRhcmdl
dElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwgc2VjdGlvbigiX19EQVRBX0NPTlNU
LF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwgSlNDX0FOTk9UQVRFX0pJVF9PUEVS
QVRJT05fRVhUUkFTKGZ1bmN0aW9uIyNWYWxpZGF0ZSwgI2Z1bmN0aW9uKSB9OworKi8KKwogI2lm
IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAjZGVmaW5lIEpTQ19BTk5PVEFURV9K
SVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKSBcCi0gICAgY29uc3RleHByIEpTQzo6SklU
T3BlcmF0aW9uQW5ub3RhdGlvbiBfSklUVGFyZ2V0SURfIyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9f
KCh1c2VkLCBzZWN0aW9uKCJfX0RBVEFfQ09OU1QsX19qc2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1
bmN0aW9uLCAodm9pZCopZnVuY3Rpb24jI1ZhbGlkYXRlIH07CisgICAgY29uc3RleHByIEpTQzo6
SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBfSklUVGFyZ2V0SURfIyNmdW5jdGlvbiBfX2F0dHJpYnV0
ZV9fKCh1c2VkLCBzZWN0aW9uKCJfX0RBVEFfQ09OU1QsX19qc2Nfb3BzIikpKSA9IHsgKHZvaWQq
KWZ1bmN0aW9uLCAodm9pZCopZnVuY3Rpb24jI1ZhbGlkYXRlLCAjZnVuY3Rpb24gfTsKKyNlbHNl
CisjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKSBc
CisgICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBfSklUVGFyZ2V0SURf
IyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9uKCJfX0RBVEFfQ09OU1QsX19q
c2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCAjZnVuY3Rpb24gfTsKKyNlbmRpZgogCiAj
ZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OKGZ1bmN0aW9uKSBcCiAgICAgSlNDX0RF
Q0xBUkVfQU5EX0RFRklORV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04oZnVuY3Rpb24pOyBcCkBA
IC0xMDAsMTIgKzExNSw2IEBACiAgICAgSlNDX0RFQ0xBUkVfQU5EX0RFRklORV9KSVRfT1BFUkFU
SU9OX1JFVFVSTl9WQUxJREFUSU9OKGZ1bmN0aW9uKTsgXAogICAgIEpTQ19BTk5PVEFURV9KSVRf
T1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKQogCi0jZWxzZQotI2RlZmluZSBKU0NfQU5OT1RB
VEVfSklUX09QRVJBVElPTihmdW5jdGlvbikKLSNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVS
QVRJT05fUFJPQkUoZnVuY3Rpb24pCi0jZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9O
X1JFVFVSTihmdW5jdGlvbikKLSNlbmRpZgotCiAKICNkZWZpbmUgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OX1dJVEhPVVRfVkFSSUFCTEUoZnVuY3Rpb25OYW1lLCByZXR1cm5UeXBlLCBwYXJhbWV0
ZXJzKSBcCiAgICAgcmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgZnVuY3Rpb25O
YW1lIHBhcmFtZXRlcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVK
SVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMwLDEwICszMCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFC
TEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0
aW9uQW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSBfX2FzbSgic2VjdGlv
biRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29uc3QgSlNDOjpKSVRP
cGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSBfX2FzbSgic2Vj
dGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogCisjaWYgRU5BQkxFKEpJVF9PUEVS
QVRJT05fVkFMSURBVElPTikKKwogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogewogICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwpAQCAtNDMsNCArNDQsMTQgQEAgdm9pZCBw
b3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogfQogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9O
X1ZBTElEQVRJT04pCiAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQordm9pZCBwb3B1bGF0ZURp
c2Fzc2VtYmx5TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIEpTQzo6SklUT3BlcmF0
aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRP
cGVyYXRpb25zSW5XZWJDb3JlLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlKTsKKyAgICB9
KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRElTQVNTRU1CTEVSKQorCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmgJKHJldmlz
aW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMCArMjcsMTYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKK1dFQkNPUkVfRVhQT1JUIHZv
aWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpOworI2Vsc2UKK2lubGluZSB2b2lkIHBvcHVs
YXRlRGlzYXNzZW1ibHlMYWJlbHMoKSB7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKEpJVF9PUEVS
QVRJT05fVkFMSURBVElPTikKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRp
b25zKCk7CiAjZWxzZQotaW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyB9Citp
bmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IHBvcHVsYXRlRGlzYXNzZW1ibHlM
YWJlbHMoKTsgfQogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMv
V2ViQ29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjQxLDEwICsyNDEsMTEgQEAgdm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlc0ZvcgogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFydE9m
SklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0IF9fYXNtKCJzZWN0aW9uJHN0YXJ0JF9f
REFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJhdGlvbkFu
bm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQgX19hc20oInNl
Y3Rpb24kZW5kJF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIAorI2lmIEVOQUJMRShKSVRfT1BF
UkFUSU9OX1ZBTElEQVRJT04pCisKIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkKIHsKICAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKQEAgLTI1NCw0ICsyNTUsMTQgQEAgdm9p
ZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogfQogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFU
SU9OX1ZBTElEQVRJT04pCiAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQordm9pZCBwb3B1bGF0
ZURpc2Fzc2VtYmx5TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtl
eTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIEpTQzo6SklUT3Bl
cmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoJnN0YXJ0T2ZK
SVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQsICZlbmRPZkpJVE9wZXJhdGlvbnNJbldl
YkNvcmVUZXN0U3VwcG9ydCk7CisgICAgfSk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKERJU0FTU0VN
QkxFUikKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBwb3J0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgJKHJldmlzaW9uIDI5
NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDE1IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDEwICs2NywxNiBAQCB2b2lkIHNldHVwTmV3bHlD
cmVhdGVkU2VydmljZVdvcmtlcih1aW50CiAgICAgCiB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKSBURVNUX1NVUFBPUlRfRVhQT1JU
OwogCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKK3ZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxh
YmVscygpIFRFU1RfU1VQUE9SVF9FWFBPUlQ7CisjZWxzZQoraW5saW5lIHZvaWQgcG9wdWxhdGVE
aXNhc3NlbWJseUxhYmVscygpIHsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSBURVNUX1NVUFBPUlRf
RVhQT1JUOwogI2Vsc2UKLWlubGluZSB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIHsgfQor
aW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyBwb3B1bGF0ZURpc2Fzc2VtYmx5
TGFiZWxzKCk7IH0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlVGVzdFN1cHBvcnQK
</data>
<flag name="commit-queue"
          id="488491"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459400</attachid>
            <date>2022-05-15 23:08:01 -0700</date>
            <delta_ts>2022-05-15 23:22:49 -0700</delta_ts>
            <desc>EWS testing.</desc>
            <filename>wip-disassemble-operations2.2.patch</filename>
            <type>text/plain</type>
            <size>44463</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1NiwxMCArMzc1Niw4IEBA
IGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVybiBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCBf
X2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsIF9fYXNt
KCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7Ci0jZW5kaWYKIAogaW50IGpz
Y21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpAQCAtMzc4Myw2ICszNzgxLDExIEBAIGlu
dCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVy
c0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCwgJmVuZE9mSklUT3BlcmF0
aW9uc0luU2hlbGwpOwogI2VuZGlmCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlND
OjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigm
c3RhcnRPZkpJVE9wZXJhdGlvbnNJblNoZWxsLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7
CisjZW5kaWYKKwogICAgIGluaXRpYWxpemVUaW1lb3V0SWZOZWVkZWQoKTsKIAogI2lmIE9TKERB
UldJTikgfHwgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0pJVE9wZXJhdGlvbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwyMCArMjYsMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKSVRPcGVyYXRpb25MaXN0LmgiCiAKKyNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJHYXRlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIk9wdGlv
bnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShE
SVNBU1NFTUJMRVIpCiAKIExhenlOZXZlckRlc3Ryb3llZDxKSVRPcGVyYXRpb25MaXN0PiBqaXRP
cGVyYXRpb25MaXN0OwogCiBleHRlcm4gY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFy
dE9mSklUT3BlcmF0aW9uc0luSlNDIF9fYXNtKCJzZWN0aW9uJHN0YXJ0JF9fREFUQV9DT05TVCRf
X2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklU
T3BlcmF0aW9uc0luSlNDIF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3Bz
Iik7CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiB2b2lkIEpJVE9w
ZXJhdGlvbkxpc3Q6OmluaXRpYWxpemUoKQogewogICAgIGppdE9wZXJhdGlvbkxpc3QuY29uc3Ry
dWN0KCk7CkBAIC04NSw5ICs4OSwxMyBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRl
UG9pbnRlcnNJCiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewogICAgICAgICBpZiAo
T3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2lu
dGVycygmc3RhcnRPZkpJVE9wZXJhdGlvbnNJbkpTQywgJmVuZE9mSklUT3BlcmF0aW9uc0luSlND
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQo
KSkpCisgICAgICAgICAgICBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29y
ZSgpOwogICAgIH0pOwogfQogCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKKwogTExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zv
cl9jYWxsX3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xBUkVfUk9VVElORV9W
QUxJREFURShsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayk7CkBAIC0xMDQsMzEg
KzExMiw3OSBAQCBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUoY2hlY2twb2luCiBMTElO
VF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUobm9ybWFsX29zcl9leGl0X3RyYW1wb2xpbmUpOwog
TExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9s
b29wX2hpbnQpOwogCi12b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkph
dmFTY3JpcHRDb3JlRm9yTExJbnQoKQotewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
S2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKy8qCisjaWYgRU5BQkxFKEpJ
VF9PUEVSQVRJT05fVkFMSURBVElPTikKKyNkZWZpbmUgTExJTlRfT1BfRVhUUkFTKHZhbGlkYXRl
TGFiZWwsIG5hbWVTdHIpIGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsaWRhdGVMYWJlbCksIG5hbWVT
dHIKKyNlbHNlCisjZGVmaW5lIExMSU5UX09QX0VYVFJBUyh2YWxpZGF0ZUxhYmVsLCBuYW1lU3Ry
KSBuYW1lU3RyCisjZW5kaWYKKworI2RlZmluZSBMTElOVF9ST1VUSU5FKGZ1bmN0aW9uTmFtZSkg
eyBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+KGZ1bmN0aW9uTmFtZSkpLCBcCisgICAgICAgIExMSU5UX09QX0VY
VFJBUyhMTElOVF9ST1VUSU5FX1ZBTElEQVRFKGZ1bmN0aW9uTmFtZSksICNmdW5jdGlvbk5hbWUp
IFwKKyAgICB9LAorCisjZGVmaW5lIExMSU5UX09QKG5hbWUpIHsgXAorICAgICAgICBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihu
YW1lKSksIFwKKyAgICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JFVFVSTl9WQUxJREFURShu
YW1lKSwgI25hbWUpIFwKKyAgICB9LCB7IFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihM
TEludDo6Z2V0V2lkZTE2Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBc
CisgICAgICAgIExMSU5UX09QX0VYVFJBUyhMTElOVF9SRVRVUk5fV0lERTE2X1ZBTElEQVRFKG5h
bWUpLCAjbmFtZSAiIFt3aWRlMTZdIikgXAorICAgIH0sIHsgXAorICAgICAgICBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PihuYW1lKSksIFwKKyAgICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JFVFVSTl9XSURFMzJf
VkFMSURBVEUobmFtZSksICNuYW1lICIgW3dpZGUzMl0iKSBcCisgICAgfSwKKyovCiAKKyNpZiBF
TkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2RlZmluZSBMTElOVF9ST1VUSU5FKGZ1
bmN0aW9uTmFtZSkgeyBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENv
ZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KGZ1bmN0aW9uTmFtZSkpLCBcCisgICAgICAg
IGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJTlRfUk9VVElORV9WQUxJREFURShmdW5jdGlvbk5hbWUp
KSwgI2Z1bmN0aW9uTmFtZSBcCisgICAgfSwKKworI2RlZmluZSBMTElOVF9PUChuYW1lKSB7IFwK
KyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4obmFtZSkpLCBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJ
TlRfUkVUVVJOX1ZBTElEQVRFKG5hbWUpKSwgI25hbWUgXAorICAgIH0sIHsgXAorICAgICAgICBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9S
RVRVUk5fV0lERTE2X1ZBTElEQVRFKG5hbWUpKSwgI25hbWUgIiBbd2lkZTE2XSIgXAorICAgIH0s
IHsgXAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMzJDb2RlRnVu
Y3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgYml0d2lzZV9jYXN0
PHZvaWQqPihMTElOVF9SRVRVUk5fV0lERTMyX1ZBTElEQVRFKG5hbWUpKSwgI25hbWUgIiBbd2lk
ZTMyXSIgXAorICAgIH0sCisjZWxzZSAvLyBub3QgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKICNkZWZpbmUgTExJTlRfUk9VVElORShmdW5jdGlvbk5hbWUpIHsgXAogICAgICAgICBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPihmdW5jdGlvbk5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5U
X1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1lKSkgXAorICAgICAgICAjZnVuY3Rpb25OYW1l
IFwKICAgICB9LAogCiAjZGVmaW5lIExMSU5UX09QKG5hbWUpIHsgXAogICAgICAgICBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihu
YW1lKSksIFwKLSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fVkFMSURB
VEUobmFtZSkpIFwKKyAgICAgICAgI25hbWUgXAogICAgIH0sIHsgXAogICAgICAgICBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPihuYW1lKSksIFwKLSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5f
V0lERTE2X1ZBTElEQVRFKG5hbWUpKSBcCisgICAgICAgICNuYW1lICIgW3dpZGUxNl0iIFwKICAg
ICB9LCB7IFwKICAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0V2lkZTMyQ29k
ZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBcCi0gICAgICAgIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oTExJTlRfUkVUVVJOX1dJREUzMl9WQUxJREFURShuYW1lKSkgXAorICAgICAg
ICAjbmFtZSAiIFt3aWRlMzJdIiBcCiAgICAgfSwKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJB
VElPTl9WQUxJREFUSU9OKQogCiAjZGVmaW5lIExMSU5UX1JFVFVSTl9MT0NBVElPTihuYW1lLCAu
Li4pIFwKICAgICBMTElOVF9PUChuYW1lIyNfcmV0dXJuX2xvY2F0aW9uKQogCi0gICAgICAgIGNv
bnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24gb3BlcmF0aW9uc1tdID0geworc3RydWN0IExMSW50
T3BlcmF0aW9ucyB7CisgICAgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogb3BlcmF0aW9u
czsKKyAgICBzaXplX3QgbnVtYmVyT2ZPcGVyYXRpb25zOworfTsKKworc3RhdGljIExMSW50T3Bl
cmF0aW9ucyBsbGludE9wZXJhdGlvbnMoKQoreworICAgIHN0YXRpYyBjb25zdCBKSVRPcGVyYXRp
b25Bbm5vdGF0aW9uKiBvcGVyYXRpb25zID0gbnVsbHB0cjsKKyAgICBzdGF0aWMgc2l6ZV90IG51
bWJlck9mT3BlcmF0aW9ucyA9IDA7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7
CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgWyZdIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IEpJVE9wZXJhdGlvbkFubm90YXRpb24gb3BlcmF0aW9uc1N0b3JhZ2VbXSA9IHsKICAgICAgICAg
ICAgIExMSU5UX1JPVVRJTkUobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpCiAgICAg
ICAgICAgICBMTElOVF9ST1VUSU5FKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9n
dWUpCiAgICAgICAgICAgICBMTElOVF9ST1VUSU5FKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2Fy
aXR5X2NoZWNrKQpAQCAtMTYwLDE1ICsyMTYsMzMgQEAgdm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpw
b3B1bGF0ZVBvaW50ZXJzSQogICAgICAgICAgICAgSlNDX0pTX0dBVEVfT1BDT0RFUyhMTElOVF9S
RVRVUk5fTE9DQVRJT04pCiAgICAgICAgICAgICBKU0NfV0FTTV9HQVRFX09QQ09ERVMoTExJTlRf
UkVUVVJOX0xPQ0FUSU9OKQogICAgICAgICB9OwotICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklU
KCkpCi0gICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2ludGVycyhvcGVyYXRpb25z
LCBvcGVyYXRpb25zICsgV1RGX0FSUkFZX0xFTkdUSChvcGVyYXRpb25zKSk7CisgICAgICAgIG9w
ZXJhdGlvbnMgPSBvcGVyYXRpb25zU3RvcmFnZTsKKyAgICAgICAgbnVtYmVyT2ZPcGVyYXRpb25z
ID0gV1RGX0FSUkFZX0xFTkdUSChvcGVyYXRpb25zU3RvcmFnZSk7CisgICAgfSk7CisgICAgcmV0
dXJuIHsgb3BlcmF0aW9ucywgbnVtYmVyT2ZPcGVyYXRpb25zIH07Cit9CisKICN1bmRlZiBMTElO
VF9ST1VUSU5FCiAjdW5kZWYgTExJTlRfT1AKICN1bmRlZiBMTElOVF9SRVRVUk5fTE9DQVRJT04K
KyN1bmRlZiBMTElOVF9PUF9FWFRSQVMKKworI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElE
QVRJT04pCisKK3ZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luSmF2YVNj
cmlwdENvcmVGb3JMTEludCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7
CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBpZiAoT3B0aW9uczo6
dXNlSklUKCkpIHsKKyAgICAgICAgICAgIGF1dG8gbGlzdCA9IGxsaW50T3BlcmF0aW9ucygpOwor
ICAgICAgICAgICAgaml0T3BlcmF0aW9uTGlzdC0+YWRkUG9pbnRlcnMobGlzdC5vcGVyYXRpb25z
LCBsaXN0Lm9wZXJhdGlvbnMgKyBsaXN0Lm51bWJlck9mT3BlcmF0aW9ucyk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgp
KSkKKyAgICAgICAgICAgIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJl
bHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKTsKICAgICB9KTsKIH0KIAotCiB2b2lkIEpJVE9w
ZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkVtYmVkZGVyKGNvbnN0IEpJVE9wZXJhdGlv
bkFubm90YXRpb24qIGJlZ2luT3BlcmF0aW9ucywgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlv
biogZW5kT3BlcmF0aW9ucykKIHsKICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCkBAIC0xNzcs
NCArMjUxLDYzIEBAIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0kKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKK1NVUFBSRVNTX0FT
QU4gdm9pZCBKSVRPcGVyYXRpb25MaXN0OjphZGREaXNhc3NlbWJseUxhYmVscyhjb25zdCBKSVRP
cGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiog
ZW5kKQoreworI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCisgICAgUkVMRUFTRV9BU1NFUlQoT3B0
aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIGN1
cnJlbnQgPSBiZWdpbjsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkgeworI2lmIEVOQUJMRShK
SVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisgICAgICAgIGF1dG8qIG9wZXJhdGlvbiA9IGN1cnJl
bnQtPm9wZXJhdGlvbldpdGhWYWxpZGF0aW9uOworI2Vsc2UKKyAgICAgICAgYXV0byogb3BlcmF0
aW9uID0gY3VycmVudC0+b3BlcmF0aW9uOworI2VuZGlmCisgICAgICAgIHJlZ2lzdGVyTGFiZWwo
cmVtb3ZlQ29kZVB0clRhZyhvcGVyYXRpb24pLCBjdXJyZW50LT5uYW1lKTsKKyAgICB9CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShiZWdpbik7CisgICAgVU5VU0VEX1BBUkFNKGVuZCk7CisjZW5k
aWYgLy8gRU5BQkxFKERJU0FTU0VNQkxFUikKK30KKworI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BF
UkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShESVNBU1NFTUJMRVIpCisKK3ZvaWQgSklUT3Bl
cmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmUoKQor
eworI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCisgICAgQVNTRVJUKE9wdGlvbnM6Om5lZWREaXNh
c3NlbWJseVN1cHBvcnQoKSk7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Cisg
ICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBpZiAoT3B0aW9uczo6dXNl
SklUKCkpCisgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGREaXNhc3NlbWJseUxhYmVs
cygmc3RhcnRPZkpJVE9wZXJhdGlvbnNJbkpTQywgJmVuZE9mSklUT3BlcmF0aW9uc0luSlNDKTsK
KyAgICB9KTsKKyNlbmRpZgorfQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlz
YXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKQoreworI2lmIEVOQUJMRShE
SVNBU1NFTUJMRVIpCisgICAgQVNTRVJUKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQo
KSk7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29u
Y2Uob25jZUtleSwgW10geworICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gbGlzdCA9IGxsaW50T3BlcmF0aW9ucygpOworICAgICAgICAgICAgaml0T3Bl
cmF0aW9uTGlzdC0+YWRkRGlzYXNzZW1ibHlMYWJlbHMobGlzdC5vcGVyYXRpb25zLCBsaXN0Lm9w
ZXJhdGlvbnMgKyBsaXN0Lm51bWJlck9mT3BlcmF0aW9ucyk7CisgICAgICAgIH0KKyAgICB9KTsK
KyNlbmRpZgorfQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlM
YWJlbHNJbkVtYmVkZGVyKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luT3BlcmF0
aW9ucywgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kT3BlcmF0aW9ucykKK3sKKyNp
ZiBFTkFCTEUoRElTQVNTRU1CTEVSKQorICAgIGlmIChMSUtFTFkoIU9wdGlvbnM6Om5lZWREaXNh
c3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoT3B0aW9uczo6dXNl
SklUKCkpCisgICAgICAgIGppdE9wZXJhdGlvbkxpc3QtPmFkZERpc2Fzc2VtYmx5TGFiZWxzKGJl
Z2luT3BlcmF0aW9ucywgZW5kT3BlcmF0aW9ucyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShi
ZWdpbk9wZXJhdGlvbnMpOworICAgIFVOVVNFRF9QQVJBTShlbmRPcGVyYXRpb25zKTsKKyNlbmRp
ZgorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5oCShyZXZpc2lvbiAyOTQyMjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMyLDE0ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3Ry
dWN0IEpJVE9wZXJhdGlvbkFubm90YXRpb247CisKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9W
QUxJREFUSU9OKQogCiAvLyBUaGlzIGluZGlyZWN0aW9uIGlzIHByb3ZpZGVkIHNvIHRoYXQgd2Ug
Y2FuIG1hbnVhbGx5IGZvcmNlIG9uIGFzc2VydGlvbnMgZm9yCiAvLyB0ZXN0aW5nIGV2ZW4gb24g
cmVsZWFzZSBidWlsZHMuCiAjZGVmaW5lIEpJVF9PUEVSQVRJT05fVkFMSURBVElPTl9BU1NFUlRf
RU5BQkxFRCBBU1NFUlRfRU5BQkxFRAogCi1zdHJ1Y3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbjsK
LQogY2xhc3MgSklUT3BlcmF0aW9uTGlzdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIEpJVE9wZXJh
dGlvbkxpc3QmIGluc3RhbmNlKCk7CkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkVtYmVkZGVyKGNv
bnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luT3BlcmF0aW9ucywgY29uc3QgSklUT3Bl
cmF0aW9uQW5ub3RhdGlvbiogZW5kT3BlcmF0aW9ucyk7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcihjb25zdCBK
SVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9wZXJhdGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlv
bkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RhdGljIHZvaWQgYXNzZXJ0SXNKSVRPcGVyYXRpb24oVCBmdW5jdGlvbikKICAgICB7CiAgICAg
ICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbik7CkBAIC04MSw3ICs4MywxMSBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJl
bHNJbkphdmFTY3JpcHRDb3JlKCk7CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJs
eUxhYmVsc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpOworCiAgICAgQUxXQVlTX0lOTElORSB2
b2lkIGFkZFBvaW50ZXJzKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luLCBjb25z
dCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpOworICAgIHZvaWQgYWRkRGlzYXNzZW1ibHlM
YWJlbHMoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW4sIGNvbnN0IEpJVE9wZXJh
dGlvbkFubm90YXRpb24qIGVuZCk7CiAKICNpZiBKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT05fQVNT
RVJUX0VOQUJMRUQKICAgICB2b2lkIGFkZEludmVyc2VNYXAodm9pZCogdmFsaWRhdGlvbkVudHJ5
LCB2b2lkKiBwb2ludGVyKTsKQEAgLTEwNiwxMSArMTEyLDI3IEBAIGNsYXNzIEpJVE9wZXJhdGlv
bkxpc3QgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKSB7IH0KIAotICAg
IHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlKCkgeyB9Ci0gICAg
c3RhdGljIHZvaWQgcG9wdWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpIHsg
fQorICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlKCkKKyAg
ICB7CisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0
KCkpKQorICAgICAgICAgICAgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENv
cmUoKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVQb2ludGVyc0luSmF2YVNjcmlw
dENvcmVGb3JMTEludCgpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVl
ZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgICAgIHBvcHVsYXRlRGlzYXNzZW1ibHlM
YWJlbHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKTsKKyAgICB9CisKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcihj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9wZXJhdGlvbnMsIGNvbnN0IEpJVE9w
ZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RhdGljIHZvaWQgYXNzZXJ0SXNKSVRPcGVyYXRpb24oVCkgeyB9CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgYXNzZXJ0SXNKSVRPcGVyYXRpb25XaXRoVmFsaWRh
dGlvbihUKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2Vt
Ymx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgpOworICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlRGlz
YXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKTsKKworICAgIHZvaWQgYWRk
RGlzYXNzZW1ibHlMYWJlbHMoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW4sIGNv
bnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZCk7CiB9OwogCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oCShyZXZpc2lv
biAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlv
blZhbGlkYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NywxMyArNDcsMTYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQotCiBzdHJ1Y3Qg
SklUT3BlcmF0aW9uQW5ub3RhdGlvbiB7CiAgICAgdm9pZCogb3BlcmF0aW9uOworI2lmIEVOQUJM
RShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAgICAgdm9pZCogb3BlcmF0aW9uV2l0aFZhbGlk
YXRpb247CisjZW5kaWYKKyAgICBjb25zdCBjaGFyKiBuYW1lOwogfTsKIAorI2lmIEVOQUJMRShK
SVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisKICNpZm5kZWYgSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTl9WQUxJREFUSU9OCiAjZGVmaW5lIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT05fVkFMSURB
VElPTihmdW5jdGlvbk5hbWUpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODIsMTMgKzgyLDE0IEBAIExpbmtCdWZmZXI6OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4g
TGkKICAgICAgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IHZzbnByaW50ZihudWxscHRyLCAwLCBm
b3JtYXQsIHByZWZsaWdodEFyZ3MpOwogICAgICAgICB2YV9lbmQocHJlZmxpZ2h0QXJncyk7CiAK
KyAgICAgICAgY29uc3QgY2hhciBwcmVmaXhbXSA9ICJ0aHVuazogIjsKICAgICAgICAgY2hhciog
YnVmZmVyID0gMDsKLSAgICAgICAgQ1N0cmluZyBsYWJlbCA9IENTdHJpbmc6Om5ld1VuaW5pdGlh
bGl6ZWQoc3RyaW5nTGVuZ3RoICsgMSwgYnVmZmVyKTsKLSAgICAgICAgdnNucHJpbnRmKGJ1ZmZl
ciwgc3RyaW5nTGVuZ3RoICsgMSwgZm9ybWF0LCBhcmdMaXN0KTsKLSAgICAgICAgYnVmZmVyW3N0
cmluZ0xlbmd0aF0gPSAnXDAnOworICAgICAgICBDU3RyaW5nIGxhYmVsID0gQ1N0cmluZzo6bmV3
VW5pbml0aWFsaXplZChzdHJpbmdMZW5ndGggKyBzaXplb2YocHJlZml4KSwgYnVmZmVyKTsKKyAg
ICAgICAgc3RybmNweShidWZmZXIsIHByZWZpeCwgc2l6ZW9mKHByZWZpeCkgLSAxKTsKKyAgICAg
ICAgdnNucHJpbnRmKGJ1ZmZlciArIHNpemVvZihwcmVmaXgpIC0gMSwgc3RyaW5nTGVuZ3RoICsg
MSwgZm9ybWF0LCBhcmdMaXN0KTsKICAgICAgICAgb3V0LnByaW50ZigiJXMiLCBidWZmZXIpOwog
Ci0gICAgICAgIHJlZ2lzdGVyVGh1bmtMYWJlbChyZXN1bHQuY29kZSgpLnVudGFnZ2VkRXhlY3V0
YWJsZUFkZHJlc3MoKSwgV1RGTW92ZShsYWJlbCkpOworICAgICAgICByZWdpc3RlckxhYmVsKHJl
c3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBXVEZNb3ZlKGxhYmVsKSk7
CiAgICAgfSBlbHNlCiAgICAgICAgIG91dC52cHJpbnRmKGZvcm1hdCwgYXJnTGlzdCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18xLmNwcAkocmV2aXNpb24gMjk0MjIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18xLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTkwMywxMCArOTAzLDggQEAgc3RhdGljIHZvaWQgcnVuKGNvbnN0IGNoYXIqKQogCiAjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKIAotI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJ
T04pCiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRP
cGVyYXRpb25zSW5UZXN0QjMgX19hc20oInNlY3Rpb24kc3RhcnQkX19EQVRBX0NPTlNUJF9fanNj
X29wcyIpOwogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJ
VE9wZXJhdGlvbnNJblRlc3RCMyBfX2FzbSgic2VjdGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNj
X29wcyIpOwotI2VuZGlmCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKQEAg
LTkzMCw3ICs5MjgsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogI2lmIEVO
QUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0
Ojpwb3B1bGF0ZVBvaW50ZXJzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlvbnNJblRlc3RC
MywgJmVuZE9mSklUT3BlcmF0aW9uc0luVGVzdEIzKTsKICNlbmRpZgotICAgIAorI2lmIEVOQUJM
RShESVNBU1NFTUJMRVIpCisgICAgaWYgKFVOTElLRUxZKEpTQzo6T3B0aW9uczo6bmVlZERpc2Fz
c2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0
ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlvbnNJblRlc3RC
MywgJmVuZE9mSklUT3BlcmF0aW9uc0luVGVzdEIzKTsKKyNlbmRpZgorCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8PSAyOyArK2kpIHsKICAgICAgICAgSlNDOjpPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpID0gaTsKICAgICAgICAgcnVuKGZpbHRlcik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCShyZXZp
c2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fz
c2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJE
aXNhc3NlbWJsZXIuaCIKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2lu
Y2x1ZGUgPHZhcmlhbnQ+CiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC0zNiw4ICszNywyMSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotdXNpbmcgVGh1bmtMYWJlbE1hcCA9IEhhc2hNYXA8dm9pZCos
IENTdHJpbmc+OwotTGF6eU5ldmVyRGVzdHJveWVkPFRodW5rTGFiZWxNYXA+IHRodW5rTGFiZWxN
YXA7CituYW1lc3BhY2UgRGlzYXNzZW1ibGVyIHsKKwordXNpbmcgTGFiZWxNYXAgPSBIYXNoTWFw
PHZvaWQqLCBzdGQ6OnZhcmlhbnQ8Q1N0cmluZywgY29uc3QgY2hhcio+PjsKK0xhenlOZXZlckRl
c3Ryb3llZDxMYWJlbE1hcD4gbGFiZWxNYXA7CisKK3N0YXRpYyBMYWJlbE1hcCYgZW5zdXJlTGFi
ZWxNYXAoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6
Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgbGFiZWxNYXAuY29uc3RydWN0KCk7Cisg
ICAgfSk7CisgICAgcmV0dXJuIGxhYmVsTWFwLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBE
aXNhc3NlbWJsZXIKIAogdm9pZCBkaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCogY29kZVN0
YXJ0LCB2b2lkKiBjb2RlRW5kLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQp
CiB7CkBAIC0xNTcsMjcgKzE3MSwyNSBAQCB2b2lkIHdhaXRGb3JBc3luY2hyb25vdXNEaXNhc3Nl
bWJseSgpCiAgICAgYXN5bmNocm9ub3VzRGlzYXNzZW1ibGVyKCkud2FpdFVudGlsRW1wdHkoKTsK
IH0KIAotc3RhdGljIFRodW5rTGFiZWxNYXAmIGVuc3VyZVRodW5rTGFiZWxNYXAoKQordm9pZCBy
ZWdpc3RlckxhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVsKQogewotICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VL
ZXksIFtdIHsKLSAgICAgICAgdGh1bmtMYWJlbE1hcC5jb25zdHJ1Y3QoKTsKLSAgICB9KTsKLSAg
ICByZXR1cm4gdGh1bmtMYWJlbE1hcC5nZXQoKTsKKyAgICBEaXNhc3NlbWJsZXI6OmVuc3VyZUxh
YmVsTWFwKCkuYWRkKHRodW5rQWRkcmVzcywgV1RGTW92ZShsYWJlbCkpOwogfQogCi12b2lkIHJl
Z2lzdGVyVGh1bmtMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJpbmcmJiBsYWJlbCkKK3Zv
aWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiBhZGRyZXNzLCBjb25zdCBjaGFyKiBsYWJlbCkKIHsKLSAg
ICBlbnN1cmVUaHVua0xhYmVsTWFwKCkuYWRkKHRodW5rQWRkcmVzcywgV1RGTW92ZShsYWJlbCkp
OworICAgIERpc2Fzc2VtYmxlcjo6ZW5zdXJlTGFiZWxNYXAoKS5hZGQoYWRkcmVzcywgbGFiZWwp
OwogfQogCi1jb25zdCBjaGFyKiBsYWJlbEZvclRodW5rKHZvaWQqIHRodW5rQWRkcmVzcykKK2Nv
bnN0IGNoYXIqIGxhYmVsRm9yKHZvaWQqIHRodW5rQWRkcmVzcykKIHsKLSAgICBhdXRvJiBtYXAg
PSBlbnN1cmVUaHVua0xhYmVsTWFwKCk7CisgICAgYXV0byYgbWFwID0gRGlzYXNzZW1ibGVyOjpl
bnN1cmVMYWJlbE1hcCgpOwogICAgIGF1dG8gaXQgPSBtYXAuZmluZCh0aHVua0FkZHJlc3MpOwog
ICAgIGlmIChpdCA9PSBtYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBpdC0+dmFsdWUuZGF0YSgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENT
dHJpbmc+KGl0LT52YWx1ZSkpCisgICAgICAgIHJldHVybiBzdGQ6OmdldDxDU3RyaW5nPihpdC0+
dmFsdWUpLmRhdGEoKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8Y29uc3QgY2hhcio+KGl0LT52YWx1
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyOTQyMjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw3ICs2MSw4IEBAIHZvaWQgZGlzYXNzZW1ibGVBc3luY2hyb25vdXNs
eSgKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3YWl0Rm9yQXN5bmNocm9ub3VzRGlzYXNzZW1i
bHkoKTsKIAotdm9pZCByZWdpc3RlclRodW5rTGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3Ry
aW5nJiYgbGFiZWwpOwotY29uc3QgY2hhciogbGFiZWxGb3JUaHVuayh2b2lkKiB0aHVua0FkZHJl
c3MpOwordm9pZCByZWdpc3RlckxhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxh
YmVsKTsKK3ZvaWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIGNvbnN0IGNoYXIq
IGxhYmVsKTsKK2NvbnN0IGNoYXIqIGxhYmVsRm9yKHZvaWQqIHRodW5rQWRkcmVzcyk7CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxl
ci9BUk02NC9BNjRET3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwCShyZXZpc2lvbiAyOTQyMjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTYgQEAKICNpbmNsdWRlICJEaXNhc3NlbWJs
ZXIuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiR1BSSW5m
by5oIgorI2luY2x1ZGUgIkludGVncml0eS5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNp
bmNsdWRlICJMTEludFBDUmFuZ2VzLmgiCisjaW5jbHVkZSAiUHVyZU5hTi5oIgorI2luY2x1ZGUg
IlZNSW5zcGVjdG9yLmgiCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+
CiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvUHRyVGFnLmg+CisjaW5jbHVkZSA8
d3RmL1JhbmdlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQVJNNjREaXNhc3NlbWJs
ZXIgewogCkBAIC0yMDEsMTIgKzIwNywxMiBAQCB2b2lkIEE2NERPcGNvZGU6OmFwcGVuZFBDUmVs
YXRpdmVPZmZzZXQoCiAgICAgICAgIHRhcmdldEluZm8gPSAiIjsKICAgICBlbHNlIGlmICh0YXJn
ZXRQQyA+PSBtX3N0YXJ0UEMgJiYgdGFyZ2V0UEMgPCBtX2VuZFBDKQogICAgICAgICBzbnByaW50
ZihidWZmZXIsIGJ1ZmZlclNpemUgLSAxLCAiIC0+IDwldT4iLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oKHRhcmdldFBDIC0gbV9zdGFydFBDKSAqIHNpemVvZih1aW50MzJfdCkpKTsKLSAgICBlbHNl
IGlmIChjb25zdCBjaGFyKiB0aHVua0xhYmVsID0gbGFiZWxGb3JUaHVuayh0YXJnZXRQQykpCi0g
ICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyU2l6ZSAtIDEsICIgLT4gPHRodW5rOiAlcz4i
LCB0aHVua0xhYmVsKTsKKyAgICBlbHNlIGlmIChjb25zdCBjaGFyKiBsYWJlbCA9IGxhYmVsRm9y
KHRhcmdldFBDKSkKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJTaXplIC0gMSwgIiAt
PiAlcyIsIGxhYmVsKTsKICAgICBlbHNlIGlmIChpc0pJVFBDKHRhcmdldFBDKSkKLSAgICAgICAg
dGFyZ2V0SW5mbyA9ICIgLT4gPEpJVCBQQz4iOworICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiBK
SVQgUEMiOwogICAgIGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEModGFyZ2V0UEMpKQotICAgICAg
ICB0YXJnZXRJbmZvID0gIiAtPiA8TExJbnQgUEM+IjsKKyAgICAgICAgdGFyZ2V0SW5mbyA9ICIg
LT4gTExJbnQgUEMiOwogICAgIGVsc2UKICAgICAgICAgdGFyZ2V0SW5mbyA9ICIgLT4gPHVua25v
d24+IjsKIApAQCAtMTU3MCwxMiArMTU3NiwxMjcgQEAgY29uc3QgY2hhciogQTY0RE9wY29kZUxv
Z2ljYWxJbW1lZGlhdGU6OgogCiBjb25zdCBjaGFyKiBjb25zdCBBNjRET3Bjb2RlTW92ZVdpZGU6
OnNfb3BOYW1lc1s0XSA9IHsgIm1vdm4iLCAwLCAibW92eiIsICJtb3ZrIiB9OwogCi1jb25zdCBj
aGFyKiBBNjRET3Bjb2RlTW92ZVdpZGU6OmZvcm1hdCgpCitjbGFzcyBNb3ZlV2lkZUZvcm1hdFRy
YWl0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gY29uc3QgY2hhcio7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHJldHVybkVhcmx5SWZBY2NlcHRlZCA9IGZhbHNlOworCisg
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogcmVqZWN0ZWRSZXN1bHQoQTY0RE9w
Y29kZU1vdmVXaWRlKiBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZS0+YmFzZUZvcm1hdCgpOyB9Cisg
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogYWNjZXB0ZWRSZXN1bHQoQTY0RE9w
Y29kZU1vdmVXaWRlKiBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZS0+Zm9ybWF0QnVmZmVyKCk7IH0K
K307CisKK2NsYXNzIE1vdmVXaWRlSXNWYWxpZFRyYWl0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBS
ZXN1bHRUeXBlID0gYm9vbDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgcmV0dXJuRWFybHlJ
ZkFjY2VwdGVkID0gdHJ1ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZWplY3RlZFJl
c3VsdChBNjRET3Bjb2RlTW92ZVdpZGUqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBhY2NlcHRlZFJlc3VsdChBNjRET3Bjb2RlTW92ZVdpZGUqKSB7IHJldHVy
biB0cnVlOyB9Cit9OworCitib29sIEE2NERPcGNvZGVNb3ZlV2lkZTo6aGFuZGxlUG90ZW50aWFs
RGF0YVBvaW50ZXIodm9pZCogcHRyKQoreworICAgIEFTU0VSVChJbnRlZ3JpdHk6OmlzU2FuZVBv
aW50ZXIocHRyKSk7CisKKyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyAgICBWTUluc3BlY3Rv
cjo6Zm9yRWFjaFZNKFsmXSAoVk0mIHZtKSB7CisgICAgICAgIGlmIChwdHIgPT0gJnZtKSB7Cisg
ICAgICAgICAgICBidWZmZXJQcmludGYoIiB2bSIpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCF2bS5pc0luU2VydmljZSgpKQorICAgICAgICAgICAgcmV0dXJuIEl0
ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisKKyAgICAgICAgYXV0byogdm1TdGFydCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2bSk7CisgICAgICAgIGF1dG8qIHZtRW5kID0gdm1TdGFy
dCArIHNpemVvZihWTSk7CisgICAgICAgIGF1dG8qIHU4UHRyID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4ocHRyKTsKKyAgICAgICAgUmFuZ2Ugdm1SYW5nZSh2bVN0YXJ0LCB2bUVuZCk7Cisg
ICAgICAgIGlmICh2bVJhbmdlLmNvbnRhaW5zKHU4UHRyKSkgeworICAgICAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gdThQdHIgLSB2bVN0YXJ0OworICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIg
dm0gKyV1Iiwgb2Zmc2V0KTsKKworICAgICAgICAgICAgY29uc3QgY2hhciogZGVzY3JpcHRpb24g
PSBudWxscHRyOworICAgICAgICAgICAgaWYgKHB0ciA9PSAmdm0udG9wQ2FsbEZyYW1lKQorICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnRvcENhbGxGcmFtZSI7CisgICAgICAgICAg
ICBlbHNlIGlmIChvZmZzZXQgPT0gVk06OnRvcEVudHJ5RnJhbWVPZmZzZXQoKSkKKyAgICAgICAg
ICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS50b3BFbnRyeUZyYW1lIjsKKyAgICAgICAgICAgIGVs
c2UgaWYgKG9mZnNldCA9PSBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAg
ZGVzY3JpcHRpb24gPSAidm0ubV9leGNlcHRpb24iOworICAgICAgICAgICAgZWxzZSBpZiAob2Zm
c2V0ID09IFZNOjpvZmZzZXRPZkhlYXBCYXJyaWVyVGhyZXNob2xkKCkpCisgICAgICAgICAgICAg
ICAgZGVzY3JpcHRpb24gPSAidm0uaGVhcC5tX2JhcnJpZXJUaHJlc2hvbGQiOworICAgICAgICAg
ICAgZWxzZSBpZiAob2Zmc2V0ID09IFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKQorICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLmNhbGxGcmFtZUZvckNhdGNoIjsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHB0ciA9PSB2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKQorICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1fc29mdFN0YWNrTGltaXQiOworICAgICAg
ICAgICAgZWxzZSBpZiAocHRyID09ICZ2bS5vc3JFeGl0SW5kZXgpCisgICAgICAgICAgICAgICAg
ZGVzY3JpcHRpb24gPSAidm0ub3NyRXhpdEluZGV4IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0
ciA9PSAmdm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlvbikKKyAgICAgICAgICAgICAgICBkZXNjcmlw
dGlvbiA9ICJ2bS5vc3JFeGl0SnVtcERlc3RpbmF0aW9uIjsKKyAgICAgICAgICAgIGVsc2UgaWYg
KHB0ciA9PSB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKQorICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnNtYWxsU3RyaW5ncy5tX3NpbmdsZUNoYXJhY3Rl
clN0cmluZ3MiOworICAgICAgICAgICAgZWxzZSBpZiAocHRyID09ICZ2bS50YXJnZXRNYWNoaW5l
UENGb3JUaHJvdykKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS50YXJnZXRNYWNo
aW5lUENGb3JUaHJvdyI7CisgICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gdm0udHJhcHMoKS50
cmFwQml0c0FkZHJlc3MoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5tX3Ry
YXBzLm1fdHJhcEJpdHMiOworI2lmIEVOQUJMRShERkdfRE9FU19HQ19WQUxJREFUSU9OKQorICAg
ICAgICAgICAgZWxzZSBpZiAocHRyID09IHZtLmFkZHJlc3NPZkRvZXNHQygpKQorICAgICAgICAg
ICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1fZG9lc0dDIjsKKyNlbmRpZgorICAgICAgICAgICAg
aWYgKGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiOiAlcyIsIGRl
c2NyaXB0aW9uKTsKKworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZt
LmlzU2NyYXRjaEJ1ZmZlcihwdHIpKSB7CisgICAgICAgICAgICBidWZmZXJQcmludGYoIiB2bSBz
Y3JhdGNoQnVmZmVyLm1fYnVmZmVyIik7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgfSk7CisgICAgcmV0dXJu
IGhhbmRsZWQ7Cit9CisKKyNpZiBDUFUoQVJNNjRFKQorYm9vbCBBNjRET3Bjb2RlTW92ZVdpZGU6
OmhhbmRsZVBvdGVudGlhbFB0clRhZyh1aW50cHRyX3QgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1
ZSB8fCB2YWx1ZSA+IDB4ZmZmZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUHRyVGFn
IHRhZyA9IHN0YXRpY19jYXN0PFB0clRhZz4odmFsdWUpOworI2lmIEVOQUJMRShQVFJUQUdfREVC
VUdHSU5HKQorICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBXVEY6OnB0clRhZ05hbWUodGFnKTsKKyAg
ICBpZiAobmFtZVswXSA9PSAnPCcpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gT25seSByZXN1
bHQgdGhhdCBzdGFydHMgd2l0aCAnPCcgaXMgIjx1bmtub3duPiIuCisjZWxzZQorICAgIC8vIFdp
dGhvdXQgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpLCBub3QgYWxsIFB0clRhZ3MgYXJlIHJlZ2lz
dGVyZWRmIGZvcgorICAgIC8vIHByaW50aW5nLiBTbywgd2UnbGwganVzdCBkbyB0aGUgbWluaW11
bSB3aXRoIG9ubHkgdGhlIEpTQyBzcGVjaWZpYyB0YWdzLgorICAgIGNvbnN0IGNoYXIqIG5hbWUg
PSBwdHJUYWdOYW1lKHRhZyk7CisgICAgaWYgKCFuYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKKworICAgIC8vIEFsc28gcHJpbnQgJz8nIHRvIGluZGljYXRlIHRoYXQgdGhpcyBp
cyBhIG1heWJlLiBXZSBkbyBub3Qga25vdyBmb3IgY2VydGFpbgorICAgIC8vIGlmIHRoZSBjb25z
dGFudCBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGEgUHRyVGFnLgorICAgIGJ1ZmZlclByaW50Zigi
IC0+ICVwICVzID8iLCByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSksIG5hbWUpOworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYWl0PgordHlw
ZW5hbWUgVHJhaXQ6OlJlc3VsdFR5cGUgQTY0RE9wY29kZU1vdmVXaWRlOjpwYXJzZSgpCiB7CiAg
ICAgaWYgKG9wYygpID09IDEpCi0gICAgICAgIHJldHVybiBBNjRET3Bjb2RlOjpmb3JtYXQoKTsK
KyAgICAgICAgcmV0dXJuIFRyYWl0OjpyZWplY3RlZFJlc3VsdCh0aGlzKTsKICAgICBpZiAoIWlz
NjRCaXQoKSAmJiBodygpID49IDIpCi0gICAgICAgIHJldHVybiBBNjRET3Bjb2RlOjpmb3JtYXQo
KTsKKyAgICAgICAgcmV0dXJuIFRyYWl0OjpyZWplY3RlZFJlc3VsdCh0aGlzKTsKKworICAgIGlm
IGNvbnN0ZXhwciAoVHJhaXQ6OnJldHVybkVhcmx5SWZBY2NlcHRlZCkKKyAgICAgICAgcmV0dXJu
IFRyYWl0OjphY2NlcHRlZFJlc3VsdCh0aGlzKTsKIAogICAgIGlmICghb3BjKCkgJiYgKCFpbW1l
ZGlhdGUxNigpIHx8ICFodygpKSAmJiAoaXM2NEJpdCgpIHx8IGltbWVkaWF0ZTE2KCkgIT0gMHhm
ZmZmKSkgewogICAgICAgICAvLyBNT1YgcHNldWRvIG9wIGZvciBNT1ZOCkBAIC0xNTg3LDEwICsx
NzA4LDEyIEBAIGNvbnN0IGNoYXIqIEE2NERPcGNvZGVNb3ZlV2lkZTo6Zm9ybWF0KCkKICAgICAg
ICAgICAgIGludDY0X3QgYW1vdW50ID0gaW1tZWRpYXRlMTYoKSA8PCAoaHcoKSAqIDE2KTsKICAg
ICAgICAgICAgIGFtb3VudCA9IH5hbW91bnQ7CiAgICAgICAgICAgICBhcHBlbmRTaWduZWRJbW1l
ZGlhdGU2NChhbW91bnQpOworICAgICAgICAgICAgbV9idWlsdENvbnN0YW50ID0gc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KGFtb3VudCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpbnQz
Ml90IGFtb3VudCA9IGltbWVkaWF0ZTE2KCkgPDwgKGh3KCkgKiAxNik7CiAgICAgICAgICAgICBh
bW91bnQgPSB+YW1vdW50OwogICAgICAgICAgICAgYXBwZW5kU2lnbmVkSW1tZWRpYXRlKGFtb3Vu
dCk7CisgICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
YW1vdW50KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGFwcGVuZEluc3RydWN0
aW9uTmFtZShvcE5hbWUoKSk7CkBAIC0xNjAxLDExICsxNzI0LDY1IEBAIGNvbnN0IGNoYXIqIEE2
NERPcGNvZGVNb3ZlV2lkZTo6Zm9ybWF0KCkKICAgICAgICAgICAgIGFwcGVuZFNlcGFyYXRvcigp
OwogICAgICAgICAgICAgYXBwZW5kU2hpZnRBbW91bnQoaHcoKSk7CiAgICAgICAgIH0KLSAgICB9
CiAKLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7CisgICAgICAgIGlmIChvcGMoKSA9PSAyKSAv
LyBFbmNvZGluZyBmb3IgbW92egorICAgICAgICAgICAgbV9idWlsdENvbnN0YW50ID0gMDsKKwor
ICAgICAgICB1bnNpZ25lZCBzaGlmdCA9IGh3KCkgKiAxNjsKKyAgICAgICAgdWludHB0cl90IHZh
bHVlID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihpbW1lZGlhdGUxNigpKSA8PCBzaGlmdDsKKyAg
ICAgICAgdWludHB0cl90IG1hc2sgPSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMHhmZmZmKSA8
PCBzaGlmdCk7CisgICAgICAgIG1fYnVpbHRDb25zdGFudCAmPSBtYXNrOworICAgICAgICBtX2J1
aWx0Q29uc3RhbnQgfD0gdmFsdWU7CisgICAgfQorCisgICAgYXV0byBkdW1wQ29uc3RhbnREYXRh
ID0gWyZdIHsKKyAgICAgICAgdWludDMyX3QqIG5leHRQQyA9IG1fY3VycmVudFBDICsgMTsKKyAg
ICAgICAgaWYgKG5leHRQQyA+PSBtX2VuZFBDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIEE2NERPcGNvZGUgbmV4dEJhc2VPcGNvZGUobV9zdGFydFBDLCBtX2VuZFBDKTsKKyAgICAg
ICAgQTY0RE9wY29kZU1vdmVXaWRlJiBuZXh0T3Bjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8QTY0
RE9wY29kZU1vdmVXaWRlKj4oJm5leHRCYXNlT3Bjb2RlKTsKKyAgICAgICAgbmV4dE9wY29kZS5z
ZXRQQ0FuZE9wY29kZShuZXh0UEMsICpuZXh0UEMpOworCisgICAgICAgIGJvb2wgbmV4dElzTW92
ZVdpZGVHcm91cCA9IG9wY29kZUdyb3VwTnVtYmVyKG1fb3Bjb2RlKSA9PSBvcGNvZGVHcm91cE51
bWJlcigqbmV4dFBDKTsKKworICAgICAgICBpZiAobmV4dElzTW92ZVdpZGVHcm91cCAmJiBuZXh0
T3Bjb2RlLmlzVmFsaWQoKSAmJiBuZXh0T3Bjb2RlLnJkKCkgPT0gcmQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB2b2lkKiBwdHIgPSByZW1vdmVDb2RlUHRyVGFnKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4obV9idWlsdENvbnN0YW50KSk7CisgICAgICAgIGlmICghcHRyKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChJbnRlZ3JpdHk6OmlzU2FuZVBvaW50ZXIocHRy
KSkgeworICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgLT4gJXAiLCBwdHIpOworICAgICAgICAg
ICAgaWYgKGNvbnN0IGNoYXIqIGxhYmVsID0gbGFiZWxGb3IocHRyKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYnVmZmVyUHJpbnRmKCIgJXMiLCBsYWJlbCk7CisgICAgICAgICAgICBpZiAoaXNK
SVRQQyhwdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJQcmludGYoIiBKSVQgUEMi
KTsKKyAgICAgICAgICAgIGlmIChMTEludDo6aXNMTEludFBDKHB0cikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGJ1ZmZlclByaW50ZigiIExMSW50IFBDIik7CisgICAgICAgICAgICBoYW5kbGVQ
b3RlbnRpYWxEYXRhUG9pbnRlcihwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgaWYgKGhhbmRsZVBvdGVudGlhbFB0clRhZyhtX2J1
aWx0Q29uc3RhbnQpKQorICAgICAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgICAgIGlmICht
X2J1aWx0Q29uc3RhbnQgPCAweDEwMDAwKQorICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgLT4g
JXUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9idWlsdENvbnN0YW50KSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIC0+ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4obV9idWlsdENvbnN0YW50KSk7CisgICAgfTsKKworICAgIGlmIChtX3N0YXJ0UEMpCisg
ICAgICAgIGR1bXBDb25zdGFudERhdGEoKTsKKworICAgIHJldHVybiBUcmFpdDo6YWNjZXB0ZWRS
ZXN1bHQodGhpcyk7CiB9CiAKK2NvbnN0IGNoYXIqIEE2NERPcGNvZGVNb3ZlV2lkZTo6Zm9ybWF0
KCkgeyByZXR1cm4gcGFyc2U8TW92ZVdpZGVGb3JtYXRUcmFpdD4oKTsgfQorYm9vbCBBNjRET3Bj
b2RlTW92ZVdpZGU6OmlzVmFsaWQoKSB7IHJldHVybiBwYXJzZTxNb3ZlV2lkZUlzVmFsaWRUcmFp
dD4oKTsgfQorCiBjb25zdCBjaGFyKiBBNjRET3Bjb2RlVGVzdEFuZEJyYW5jaEltbWVkaWF0ZTo6
Zm9ybWF0KCkKIHsKICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BCaXQoKSA/ICJ0Ym56IiA6
ICJ0YnoiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQv
QTY0RE9wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3Nl
bWJsZXIvQVJNNjQvQTY0RE9wY29kZS5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTk0LDcgKzE5NCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYnVmZmVyUHJpbnRmKCJs
c2wgIyV1IiwgMTYgKiBhbW91bnQpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdGV4cHIgaW50
IGJ1ZmZlclNpemUgPSA4MTsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBidWZmZXJTaXplID0g
MTAxOwogCiAgICAgY2hhciBtX2Zvcm1hdEJ1ZmZlcltidWZmZXJTaXplXTsKICAgICB1aW50MzJf
dCogbV9zdGFydFBDOwpAQCAtMjAyLDYgKzIwMiw3IEBAIHByb3RlY3RlZDoKICAgICB1aW50MzJf
dCogbV9jdXJyZW50UEM7CiAgICAgdWludDMyX3QgbV9vcGNvZGU7CiAgICAgaW50IG1fYnVmZmVy
T2Zmc2V0OworICAgIHVpbnRwdHJfdCBtX2J1aWx0Q29uc3RhbnQgeyAwIH07CiAKIHByaXZhdGU6
CiAgICAgc3RhdGljIE9wY29kZUdyb3VwKiBvcGNvZGVUYWJsZVszMl07CkBAIC04NzIsMTEgKzg3
MywyNCBAQCBwdWJsaWM6CiAgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQoQTY0RE9wY29kZU1vdmVX
aWRlLCB0aGlzT2JqKTsKIAogICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworICAgIGJvb2wgaXNW
YWxpZCgpOwogCiAgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzW29w
YygpXTsgfQogICAgIHVuc2lnbmVkIG9wYygpIHsgcmV0dXJuIChtX29wY29kZSA+PiAyOSkgJiAw
eDM7IH0KICAgICB1bnNpZ25lZCBodygpIHsgcmV0dXJuIChtX29wY29kZSA+PiAyMSkgJiAweDM7
IH0KICAgICB1bnNpZ25lZCBpbW1lZGlhdGUxNigpIHsgcmV0dXJuIChtX29wY29kZSA+PiA1KSAm
IDB4ZmZmZjsgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0PiB0eXBl
bmFtZSBUcmFpdDo6UmVzdWx0VHlwZSBwYXJzZSgpOworICAgIGJvb2wgaGFuZGxlUG90ZW50aWFs
RGF0YVBvaW50ZXIodm9pZCopOworICAgIGJvb2wgaGFuZGxlUG90ZW50aWFsUHRyVGFnKHVpbnRw
dHJfdCk7CisKKyAgICAvLyBUaGVzZSBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBhcmUgbmVlZGVkIGZv
ciBNb3ZlV2lkZUZvcm1hdFRyYWl0IG9ubHkuCisgICAgY29uc3QgY2hhciogYmFzZUZvcm1hdCgp
IHsgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1hdCgpOyB9CisgICAgY29uc3QgY2hhciogZm9ybWF0
QnVmZmVyKCkgeyByZXR1cm4gbV9mb3JtYXRCdWZmZXI7IH0KKworICAgIGZyaWVuZCBjbGFzcyBN
b3ZlV2lkZUZvcm1hdFRyYWl0OworICAgIGZyaWVuZCBjbGFzcyBNb3ZlV2lkZUlzVmFsaWRUcmFp
dDsKIH07CiAKIGNsYXNzIEE2NERPcGNvZGVUZXN0QW5kQnJhbmNoSW1tZWRpYXRlIDogcHVibGlj
IEE2NERPcGNvZGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRy
VGFnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQ
dHJUYWcuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NQdHJUYWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsOCArMzYsMTkgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoUFRSVEFHX0RFQlVH
R0lORykKKyNpZiBDUFUoQVJNNjRFKQorCitjb25zdCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0
YWcpCit7CisjZGVmaW5lIFJFVFVSTl9QVFJUQUdfTkFNRShfdGFnTmFtZSwgY2FsbGVlVHlwZSwg
Y2FsbGVyVHlwZSkgY2FzZSBfdGFnTmFtZTogcmV0dXJuICNfdGFnTmFtZTsKKyAgICBzd2l0Y2gg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPih0YWcpKSB7CisgICAgICAgIEZPUl9FQUNIX0pTQ19QVFJU
QUcoUkVUVVJOX1BUUlRBR19OQU1FKQorICAgIH0KKyN1bmRlZiBSRVRVUk5fUFRSVEFHX05BTUUK
KyAgICByZXR1cm4gbnVsbHB0cjsgLy8gTWF0Y2hpbmcgdGFnIG5vdCBmb3VuZC4KK30KIAorI2lm
IEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQogc3RhdGljIGNvbnN0IGNoYXIqIHRhZ0ZvclB0cihj
b25zdCB2b2lkKiBwdHIpCiB7CiAjZGVmaW5lIFJFVFVSTl9OQU1FX0lGX1RBR19NQVRDSEVTKHRh
ZywgY2FsbGVlVHlwZSwgY2FsbGVyVHlwZSkgXApAQCAtNTAsMjQgKzYxLDE0IEBAIHN0YXRpYyBj
b25zdCBjaGFyKiB0YWdGb3JQdHIoY29uc3Qgdm9pZCoKICAgICByZXR1cm4gbnVsbHB0cjsgLy8g
TWF0Y2hpbmcgdGFnIG5vdCBmb3VuZC4KIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIHB0clRhZ05h
bWUoUHRyVGFnIHRhZykKLXsKLSNkZWZpbmUgUkVUVVJOX1BUUlRBR19OQU1FKF90YWdOYW1lLCBj
YWxsZWVUeXBlLCBjYWxsZXJUeXBlKSBjYXNlIF90YWdOYW1lOiByZXR1cm4gI190YWdOYW1lOwot
ICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRhZykpIHsKLSAgICAgICAgRk9SX0VB
Q0hfSlNDX1BUUlRBRyhSRVRVUk5fUFRSVEFHX05BTUUpCi0gICAgfQotI3VuZGVmIFJFVFVSTl9Q
VFJUQUdfTkFNRQotICAgIHJldHVybiBudWxscHRyOyAvLyBNYXRjaGluZyB0YWcgbm90IGZvdW5k
LgotfQotCiB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29rdXAoKQogewogICAgIFdURjo6UHRyVGFn
TG9va3VwJiBsb29rdXAgPSBnX2pzY0NvbmZpZy5wdHJUYWdMb29rdXBSZWNvcmQ7CiAgICAgbG9v
a3VwLmluaXRpYWxpemUodGFnRm9yUHRyLCBwdHJUYWdOYW1lKTsKICAgICBXVEY6OnJlZ2lzdGVy
UHRyVGFnTG9va3VwKCZsb29rdXApOwogfQotCi0jZW5kaWYgLy8gQ1BVKEFSTTY0RSkgJiYgRU5B
QkxFKFBUUlRBR19ERUJVR0dJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcp
CisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkKIAogI2lmIENQVShBUk02NEUpCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCShyZXZpc2lvbiAyOTQyMjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI0OCw2ICsyNDgsMTAgQEAgdm9pZCBpbml0aWFsaXplUHRyVGFnTG9va3VwKCk7CiBp
bmxpbmUgdm9pZCBpbml0aWFsaXplUHRyVGFnTG9va3VwKCkgeyB9CiAjZW5kaWYKIAorI2lmIENQ
VShBUk02NEUpCitjb25zdCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyk7CisjZW5kaWYgLy8gQ1BV
KEFSTTY0RSkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiBuYW1lc3BhY2UgV1RGIHsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI5NDIy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NjUsMTAgKzQ2NSwxOCBAQCB2b2lkIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVu
ZGVudE9wdGlvbnMoCiAgICAgaWYgKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseSgpKQogICAgICAg
ICBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQoKSA9IGZhbHNlOwogICAgIAotICAg
IGlmIChPcHRpb25zOjpsb2dKSVQoKQotICAgICAgICB8fCBPcHRpb25zOjpkdW1wRGlzYXNzZW1i
bHkoKQorICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRp
b25zOjphc3luY0Rpc2Fzc2VtYmx5KCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcERGR0Rpc2Fz
c2VtYmx5KCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEZUTERpc2Fzc2VtYmx5KCkKKyAgICAg
ICAgfHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCkKKyAgICAgICAgfHwgT3B0aW9u
czo6ZHVtcFdhc21EaXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBCQlFEaXNh
c3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBPTUdEaXNhc3NlbWJseSgpKQorICAg
ICAgICBPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkgPSB0cnVlOworCisgICAgaWYg
KE9wdGlvbnM6OmxvZ0pJVCgpCisgICAgICAgIHx8IE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1
cHBvcnQoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wQnl0ZWNvZGVBdERGR1RpbWUoKQogICAg
ICAgICB8fCBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpCiAgICAgICAgIHx8IE9wdGlv
bnM6OmR1bXBERkdHcmFwaEF0RWFjaFBoYXNlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3
LDYgKzEyNyw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAgXAog
ICAgIHYoQm9vbCwgdXNlT1NMb2csIGZhbHNlLCBOb3JtYWwsICJMb2cgZGF0YUxvZygpcyB0byBv
c19sb2cgaW5zdGVhZCBvZiBzdGRlcnIiKSBcCiAgICAgLyogZHVtcERpc2Fzc2VtYmx5IGltcGxp
ZXMgZHVtcERGR0Rpc2Fzc2VtYmx5LiAqLyBcCisgICAgdihCb29sLCBuZWVkRGlzYXNzZW1ibHlT
dXBwb3J0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBkdW1wRGlzYXNz
ZW1ibHksIGZhbHNlLCBOb3JtYWwsICJkdW1wcyBkaXNhc3NlbWJseSBvZiBhbGwgSklUIGNvbXBp
bGVkIGNvZGUgdXBvbiBjb21waWxhdGlvbiIpIFwKICAgICB2KEJvb2wsIGFzeW5jRGlzYXNzZW1i
bHksIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGxvZ0pJVCwgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA5LDYgKzE0MDksMTYgQEAgdm9pZCBWTTo6Y2xlYXJT
Y3JhdGNoQnVmZmVycygpCiAgICAgICAgIHNjcmF0Y2hCdWZmZXItPnNldEFjdGl2ZUxlbmd0aCgw
KTsKIH0KIAorYm9vbCBWTTo6aXNTY3JhdGNoQnVmZmVyKHZvaWQqIHB0cikKK3sKKyAgICBMb2Nr
ZXIgbG9ja2VyIHsgbV9zY3JhdGNoQnVmZmVyTG9jayB9OworICAgIGZvciAoYXV0byogc2NyYXRj
aEJ1ZmZlciA6IG1fc2NyYXRjaEJ1ZmZlcnMpIHsKKyAgICAgICAgaWYgKHNjcmF0Y2hCdWZmZXIt
PmRhdGFCdWZmZXIoKSA9PSBwdHIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFZNOjplbnN1cmVTaGFkb3dDaGlja2VuKCkKIHsK
ICAgICBpZiAobV9zaGFkb3dDaGlja2VuKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODUsNiArNjg1LDcgQEAgcHVibGljOgogICAgIC8vIC0g
WW91IGNhbiBvbmx5IHdyaXRlIHRvIGVudHJpZXMgaW4gdGhlIFNjcmF0Y2hCdWZmZXIgZnJvbSB0
aGUgbWFpbiB0aHJlYWQuCiAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlckZvclNpemUo
c2l6ZV90IHNpemUpOwogICAgIHZvaWQgY2xlYXJTY3JhdGNoQnVmZmVycygpOworICAgIGJvb2wg
aXNTY3JhdGNoQnVmZmVyKHZvaWQqKTsKIAogICAgIEVuY29kZWRKU1ZhbHVlKiBleGNlcHRpb25G
dXp6aW5nQnVmZmVyKHNpemVfdCBzaXplKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9JbnRlZ3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvSW50ZWdyaXR5LmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9JbnRlZ3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsOCBA
QCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlzU2FuZVBvaW50ZXIoCiAgICAgdWludHB0cl90
IHBvaW50ZXJBc0ludCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpOwogICAgIHVp
bnRwdHJfdCBjYW5vbmljYWxQb2ludGVyQml0cyA9IHBvaW50ZXJBc0ludCA8PCAoNjQgLSBPU19D
T05TVEFOVChFRkZFQ1RJVkVfQUREUkVTU19XSURUSCkpOwogICAgIHVpbnRwdHJfdCBub25DYW5v
bmljYWxQb2ludGVyQml0cyA9IHBvaW50ZXJBc0ludCA+PiBPU19DT05TVEFOVChFRkZFQ1RJVkVf
QUREUkVTU19XSURUSCk7Ci0gICAgcmV0dXJuICFub25DYW5vbmljYWxQb2ludGVyQml0cyAmJiBj
YW5vbmljYWxQb2ludGVyQml0czsKKyAgICB1aW50cHRyX3QgbG93ZXI0RyA9IChzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDEpIDw8IDMyKSAtIDE7CisgICAgcmV0dXJuICFub25DYW5vbmljYWxQb2lu
dGVyQml0cyAmJiBjYW5vbmljYWxQb2ludGVyQml0cyAmJiBwb2ludGVyQXNJbnQgPiBsb3dlcjRH
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocG9pbnRlcik7CiAgICAgcmV0dXJuIHRydWU7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNhbGxpbmdDb252ZW50aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ2FsbGluZ0NvbnZlbnRpb25zLmgJKHJldmlz
aW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ2FsbGluZ0NvbnZlbnRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgpAQCAtODQsOSArODQsMjQgQEAKICNkZWZpbmUgSklUX09QRVJBVElPTl9BVFRSSUJVVEVTCiAj
ZW5kaWYKIAorLyoKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2RlZmlu
ZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9FWFRSQVModmFsaWRhdGVGdW5jdGlvbiwgbmFt
ZSkgKHZvaWQqKXZhbGlkYXRlRnVuY3Rpb24sIG5hbWUKKyNlbHNlCisjZGVmaW5lIEpTQ19BTk5P
VEFURV9KSVRfT1BFUkFUSU9OX0VYVFJBUyh2YWxpZGF0ZUZ1bmN0aW9uLCBuYW1lKSBuYW1lCisj
ZW5kaWYKKwogI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9JTlRFUk5BTChmdW5j
dGlvbikgXAotICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gX0pJVFRh
cmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwgc2VjdGlvbigiX19EQVRBX0NP
TlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwgKHZvaWQqKWZ1bmN0aW9uIyNW
YWxpZGF0ZSB9OworICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gX0pJ
VFRhcmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwgc2VjdGlvbigiX19EQVRB
X0NPTlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwgSlNDX0FOTk9UQVRFX0pJ
VF9PUEVSQVRJT05fRVhUUkFTKGZ1bmN0aW9uIyNWYWxpZGF0ZSwgI2Z1bmN0aW9uKSB9OworKi8K
KworI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjZGVmaW5lIEpTQ19BTk5P
VEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKSBcCisgICAgY29uc3RleHByIEpT
Qzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBfSklUVGFyZ2V0SURfIyNmdW5jdGlvbiBfX2F0dHJp
YnV0ZV9fKCh1c2VkLCBzZWN0aW9uKCJfX0RBVEFfQ09OU1QsX19qc2Nfb3BzIikpKSA9IHsgKHZv
aWQqKWZ1bmN0aW9uLCAodm9pZCopZnVuY3Rpb24jI1ZhbGlkYXRlLCAjZnVuY3Rpb24gfTsKKyNl
bHNlCisjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9u
KSBcCisgICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBfSklUVGFyZ2V0
SURfIyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9uKCJfX0RBVEFfQ09OU1Qs
X19qc2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCAjZnVuY3Rpb24gfTsKKyNlbmRpZgog
CiAjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OKGZ1bmN0aW9uKSBcCiAgICAgSlND
X0RFQ0xBUkVfQU5EX0RFRklORV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04oZnVuY3Rpb24pOyBc
CkBAIC0xMDAsMTIgKzExNSw2IEBACiAgICAgSlNDX0RFQ0xBUkVfQU5EX0RFRklORV9KSVRfT1BF
UkFUSU9OX1JFVFVSTl9WQUxJREFUSU9OKGZ1bmN0aW9uKTsgXAogICAgIEpTQ19BTk5PVEFURV9K
SVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKQogCi0jZWxzZQotI2RlZmluZSBKU0NfQU5O
T1RBVEVfSklUX09QRVJBVElPTihmdW5jdGlvbikKLSNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9P
UEVSQVRJT05fUFJPQkUoZnVuY3Rpb24pCi0jZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFU
SU9OX1JFVFVSTihmdW5jdGlvbikKLSNlbmRpZgotCiAKICNkZWZpbmUgSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OX1dJVEhPVVRfVkFSSUFCTEUoZnVuY3Rpb25OYW1lLCByZXR1cm5UeXBlLCBwYXJh
bWV0ZXJzKSBcCiAgICAgcmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgZnVuY3Rp
b25OYW1lIHBhcmFtZXRlcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVKSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDEwICszMCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBF
TkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3Bl
cmF0aW9uQW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSBfX2FzbSgic2Vj
dGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29uc3QgSlNDOjpK
SVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSBfX2FzbSgi
c2VjdGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogCisjaWYgRU5BQkxFKEpJVF9P
UEVSQVRJT05fVkFMSURBVElPTikKKwogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogewog
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwpAQCAtNDMsNCArNDQsMTQgQEAgdm9p
ZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogfQogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFU
SU9OX1ZBTElEQVRJT04pCiAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQordm9pZCBwb3B1bGF0
ZURpc2Fzc2VtYmx5TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtl
eTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIEpTQzo6SklUT3Bl
cmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoJnN0YXJ0T2ZK
SVRPcGVyYXRpb25zSW5XZWJDb3JlLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlKTsKKyAg
ICB9KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRElTQVNTRU1CTEVSKQorCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRP
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMCArMjcsMTYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKK1dFQkNPUkVfRVhQT1JU
IHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpOworI2Vsc2UKK2lubGluZSB2b2lkIHBv
cHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKSB7IH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKEpJVF9P
UEVSQVRJT05fVkFMSURBVElPTikKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcG9wdWxhdGVKSVRPcGVy
YXRpb25zKCk7CiAjZWxzZQotaW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyB9
CitpbmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IHBvcHVsYXRlRGlzYXNzZW1i
bHlMYWJlbHMoKTsgfQogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
anMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjQxLDEwICsyNDEsMTEgQEAgdm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9y
dGVkSW1hZ2VUeXBlc0ZvcgogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9W
QUxJREFUSU9OKQogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFy
dE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0IF9fYXNtKCJzZWN0aW9uJHN0YXJ0
JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJhdGlv
bkFubm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQgX19hc20o
InNlY3Rpb24kZW5kJF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIAorI2lmIEVOQUJMRShKSVRf
T1BFUkFUSU9OX1ZBTElEQVRJT04pCisKIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkKIHsK
ICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKQEAgLTI1NCw0ICsyNTUsMTQgQEAg
dm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogfQogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BF
UkFUSU9OX1ZBTElEQVRJT04pCiAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQordm9pZCBwb3B1
bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIEpTQzo6SklU
T3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoJnN0YXJ0
T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQsICZlbmRPZkpJVE9wZXJhdGlvbnNJ
bldlYkNvcmVUZXN0U3VwcG9ydCk7CisgICAgfSk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKERJU0FT
U0VNQkxFUikKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBwb3J0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgJKHJldmlzaW9u
IDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDE1IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDEwICs2NywxNiBAQCB2b2lkIHNldHVwTmV3
bHlDcmVhdGVkU2VydmljZVdvcmtlcih1aW50CiAgICAgCiB2b2lkIHNldEFkZGl0aW9uYWxTdXBw
b3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKSBURVNUX1NVUFBPUlRfRVhQ
T1JUOwogCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKK3ZvaWQgcG9wdWxhdGVEaXNhc3NlbWJs
eUxhYmVscygpIFRFU1RfU1VQUE9SVF9FWFBPUlQ7CisjZWxzZQoraW5saW5lIHZvaWQgcG9wdWxh
dGVEaXNhc3NlbWJseUxhYmVscygpIHsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSklUX09QRVJB
VElPTl9WQUxJREFUSU9OKQogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSBURVNUX1NVUFBP
UlRfRVhQT1JUOwogI2Vsc2UKLWlubGluZSB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIHsg
fQoraW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyBwb3B1bGF0ZURpc2Fzc2Vt
Ymx5TGFiZWxzKCk7IH0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlVGVzdFN1cHBv
cnQK
</data>
<flag name="commit-queue"
          id="488492"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459404</attachid>
            <date>2022-05-15 23:22:49 -0700</date>
            <delta_ts>2022-05-15 23:27:23 -0700</delta_ts>
            <desc>EWS testing</desc>
            <filename>wip-disassemble-operations2.2.patch</filename>
            <type>text/plain</type>
            <size>44653</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1NiwxMCArMzc1Niw4IEBA
IGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVybiBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCBf
X2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsIF9fYXNt
KCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7Ci0jZW5kaWYKIAogaW50IGpz
Y21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpAQCAtMzc4Myw2ICszNzgxLDExIEBAIGlu
dCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVy
c0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCwgJmVuZE9mSklUT3BlcmF0
aW9uc0luU2hlbGwpOwogI2VuZGlmCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlND
OjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigm
c3RhcnRPZkpJVE9wZXJhdGlvbnNJblNoZWxsLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7
CisjZW5kaWYKKwogICAgIGluaXRpYWxpemVUaW1lb3V0SWZOZWVkZWQoKTsKIAogI2lmIE9TKERB
UldJTikgfHwgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0pJVE9wZXJhdGlvbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwyMCArMjYsMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKSVRPcGVyYXRpb25MaXN0LmgiCiAKKyNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJHYXRlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIk9wdGlv
bnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IChFTkFCTEUo
RElTQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjRFKSkKIAogTGF6eU5ldmVyRGVzdHJveWVkPEpJVE9w
ZXJhdGlvbkxpc3Q+IGppdE9wZXJhdGlvbkxpc3Q7CiAKIGV4dGVybiBjb25zdCBKSVRPcGVyYXRp
b25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5KU0MgX19hc20oInNlY3Rpb24kc3Rh
cnQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0IEpJVE9wZXJhdGlvbkFu
bm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5KU0MgX19hc20oInNlY3Rpb24kZW5kJF9fREFU
QV9DT05TVCRfX2pzY19vcHMiKTsKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJ
T04pCisKIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgaml0T3Bl
cmF0aW9uTGlzdC5jb25zdHJ1Y3QoKTsKQEAgLTg1LDkgKzg5LDEzIEBAIHZvaWQgSklUT3BlcmF0
aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0kKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAgIGppdE9wZXJh
dGlvbkxpc3QtPmFkZFBvaW50ZXJzKCZzdGFydE9mSklUT3BlcmF0aW9uc0luSlNDLCAmZW5kT2ZK
SVRPcGVyYXRpb25zSW5KU0MpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVlZERp
c2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgICAgIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJl
bHNJbkphdmFTY3JpcHRDb3JlKCk7CiAgICAgfSk7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKQorCiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUo
bGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwogTExJTlRfREVDTEFSRV9ST1VUSU5F
X1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpOwogTExJTlRf
REVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2No
ZWNrKTsKQEAgLTEwNCwzMSArMTEyLDc5IEBAIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFU
RShjaGVja3BvaW4KIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShub3JtYWxfb3NyX2V4
aXRfdHJhbXBvbGluZSk7CiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUoZnV6emVyX3Jl
dHVybl9lYXJseV9mcm9tX2xvb3BfaGludCk7CiAKLXZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9w
dWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpCi17Ci0gICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VLZXk7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewor
LyoKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2RlZmluZSBMTElOVF9P
UF9FWFRSQVModmFsaWRhdGVMYWJlbCwgbmFtZVN0cikgYml0d2lzZV9jYXN0PHZvaWQqPih2YWxp
ZGF0ZUxhYmVsKSwgbmFtZVN0cgorI2Vsc2UKKyNkZWZpbmUgTExJTlRfT1BfRVhUUkFTKHZhbGlk
YXRlTGFiZWwsIG5hbWVTdHIpIG5hbWVTdHIKKyNlbmRpZgorCisjZGVmaW5lIExMSU5UX1JPVVRJ
TkUoZnVuY3Rpb25OYW1lKSB7IFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6
Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4oZnVuY3Rpb25OYW1lKSksIFwKKyAg
ICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1l
KSwgI2Z1bmN0aW9uTmFtZSkgXAorICAgIH0sCisKKyNkZWZpbmUgTExJTlRfT1AobmFtZSkgeyBc
CisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAgICAgICBMTElOVF9PUF9FWFRSQVMoTExJTlRf
UkVUVVJOX1ZBTElEQVRFKG5hbWUpLCAjbmFtZSkgXAorICAgIH0sIHsgXAorICAgICAgICBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JFVFVSTl9X
SURFMTZfVkFMSURBVEUobmFtZSksICNuYW1lICIgW3dpZGUxNl0iKSBcCisgICAgfSwgeyBcCisg
ICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUzMkNvZGVGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAgICAgICBMTElOVF9PUF9FWFRSQVMoTExJ
TlRfUkVUVVJOX1dJREUzMl9WQUxJREFURShuYW1lKSwgI25hbWUgIiBbd2lkZTMyXSIpIFwKKyAg
ICB9LAorKi8KIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjZGVmaW5l
IExMSU5UX1JPVVRJTkUoZnVuY3Rpb25OYW1lKSB7IFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZv
aWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4oZnVuY3Rpb25O
YW1lKSksIFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9ST1VUSU5FX1ZBTElE
QVRFKGZ1bmN0aW9uTmFtZSkpLCAjZnVuY3Rpb25OYW1lIFwKKyAgICB9LAorCisjZGVmaW5lIExM
SU5UX09QKG5hbWUpIHsgXAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRD
b2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgYml0d2lz
ZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fVkFMSURBVEUobmFtZSkpLCAjbmFtZSBcCisgICAg
fSwgeyBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUxNkNvZGVG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAgICAgICBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9XSURFMTZfVkFMSURBVEUobmFtZSkpLCAjbmFtZSAiIFt3
aWRlMTZdIiBcCisgICAgfSwgeyBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6
OmdldFdpZGUzMkNvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAg
ICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9XSURFMzJfVkFMSURBVEUobmFt
ZSkpLCAjbmFtZSAiIFt3aWRlMzJdIiBcCisgICAgfSwKKyNlbHNlIC8vIG5vdCBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKQogI2RlZmluZSBMTElOVF9ST1VUSU5FKGZ1bmN0aW9uTmFt
ZSkgeyBcCiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KGZ1bmN0aW9uTmFtZSkpLCBcCi0gICAgICAgIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oTExJTlRfUk9VVElORV9WQUxJREFURShmdW5jdGlvbk5hbWUpKSBcCisgICAg
ICAgICNmdW5jdGlvbk5hbWUgXAogICAgIH0sCiAKICNkZWZpbmUgTExJTlRfT1AobmFtZSkgeyBc
CiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExM
SU5UX1JFVFVSTl9WQUxJREFURShuYW1lKSkgXAorICAgICAgICAjbmFtZSBcCiAgICAgfSwgeyBc
CiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUxNkNvZGVGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KExMSU5UX1JFVFVSTl9XSURFMTZfVkFMSURBVEUobmFtZSkpIFwKKyAgICAgICAgI25hbWUg
IiBbd2lkZTE2XSIgXAogICAgIH0sIHsgXAogICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExM
SW50OjpnZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwK
LSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lERTMyX1ZBTElEQVRF
KG5hbWUpKSBcCisgICAgICAgICNuYW1lICIgW3dpZGUzMl0iIFwKICAgICB9LAorI2VuZGlmIC8v
IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKICNkZWZpbmUgTExJTlRfUkVUVVJO
X0xPQ0FUSU9OKG5hbWUsIC4uLikgXAogICAgIExMSU5UX09QKG5hbWUjI19yZXR1cm5fbG9jYXRp
b24pCiAKLSAgICAgICAgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBvcGVyYXRpb25zW10g
PSB7CitzdHJ1Y3QgTExJbnRPcGVyYXRpb25zIHsKKyAgICBjb25zdCBKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uKiBvcGVyYXRpb25zOworICAgIHNpemVfdCBudW1iZXJPZk9wZXJhdGlvbnM7Cit9Owor
CitzdGF0aWMgTExJbnRPcGVyYXRpb25zIGxsaW50T3BlcmF0aW9ucygpCit7CisgICAgc3RhdGlj
IGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIG9wZXJhdGlvbnMgPSBudWxscHRyOworICAg
IHN0YXRpYyBzaXplX3QgbnVtYmVyT2ZPcGVyYXRpb25zID0gMDsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbJl0geworICAg
ICAgICBzdGF0aWMgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBvcGVyYXRpb25zU3RvcmFn
ZVtdID0gewogICAgICAgICAgICAgTExJTlRfUk9VVElORShsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJTkUobGxpbnRfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJTkUobGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spCkBAIC0xNjAsMjEgKzIxNiw5OCBAQCB2b2lkIEpJ
VE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJCiAgICAgICAgICAgICBKU0NfSlNfR0FU
RV9PUENPREVTKExMSU5UX1JFVFVSTl9MT0NBVElPTikKICAgICAgICAgICAgIEpTQ19XQVNNX0dB
VEVfT1BDT0RFUyhMTElOVF9SRVRVUk5fTE9DQVRJT04pCiAgICAgICAgIH07Ci0gICAgICAgIGlm
IChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGppdE9wZXJhdGlvbkxpc3QtPmFkZFBv
aW50ZXJzKG9wZXJhdGlvbnMsIG9wZXJhdGlvbnMgKyBXVEZfQVJSQVlfTEVOR1RIKG9wZXJhdGlv
bnMpKTsKKyAgICAgICAgb3BlcmF0aW9ucyA9IG9wZXJhdGlvbnNTdG9yYWdlOworICAgICAgICBu
dW1iZXJPZk9wZXJhdGlvbnMgPSBXVEZfQVJSQVlfTEVOR1RIKG9wZXJhdGlvbnNTdG9yYWdlKTsK
KyAgICB9KTsKKyAgICByZXR1cm4geyBvcGVyYXRpb25zLCBudW1iZXJPZk9wZXJhdGlvbnMgfTsK
K30KKwogI3VuZGVmIExMSU5UX1JPVVRJTkUKICN1bmRlZiBMTElOVF9PUAogI3VuZGVmIExMSU5U
X1JFVFVSTl9MT0NBVElPTgorI3VuZGVmIExMSU5UX09QX0VYVFJBUworCisjaWYgRU5BQkxFKEpJ
VF9PUEVSQVRJT05fVkFMSURBVElPTikKKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0
ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgeworICAgICAgICAgICAgYXV0byBsaXN0ID0gbGxp
bnRPcGVyYXRpb25zKCk7CisgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2ludGVy
cyhsaXN0Lm9wZXJhdGlvbnMsIGxpc3Qub3BlcmF0aW9ucyArIGxpc3QubnVtYmVyT2ZPcGVyYXRp
b25zKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpuZWVkRGlz
YXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICAgICAgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxh
dGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpOwogICAgIH0pOwog
fQogCi0KIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luRW1iZWRkZXIo
Y29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRP
cGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKQogewogICAgIGlmIChPcHRpb25zOjp1
c2VKSVQoKSkKICAgICAgICAgaml0T3BlcmF0aW9uTGlzdC0+YWRkUG9pbnRlcnMoYmVnaW5PcGVy
YXRpb25zLCBlbmRPcGVyYXRpb25zKTsKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFU
SU9OX1ZBTElEQVRJT04pCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElP
TikgfHwgKEVOQUJMRShESVNBU1NFTUJMRVIpICYmIENQVShBUk02NEUpKQorCitTVVBQUkVTU19B
U0FOIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6YWRkRGlzYXNzZW1ibHlMYWJlbHMoY29uc3QgSklU
T3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW4sIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24q
IGVuZCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjRFKQorICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSk7CisgICAgZm9y
IChjb25zdCBhdXRvKiBjdXJyZW50ID0gYmVnaW47IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
IHsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorICAgICAgICBhdXRvKiBv
cGVyYXRpb24gPSBjdXJyZW50LT5vcGVyYXRpb25XaXRoVmFsaWRhdGlvbjsKKyNlbHNlCisgICAg
ICAgIGF1dG8qIG9wZXJhdGlvbiA9IGN1cnJlbnQtPm9wZXJhdGlvbjsKKyNlbmRpZgorICAgICAg
ICByZWdpc3RlckxhYmVsKHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uKSwgY3VycmVudC0+bmFt
ZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYmVnaW4pOworICAgIFVOVVNFRF9Q
QVJBTShlbmQpOworI2VuZGlmIC8vIEVOQUJMRShESVNBU1NFTUJMRVIpICYmIENQVShBUk02NEUp
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFC
TEUoRElTQVNTRU1CTEVSKQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNz
ZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlKCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVS
KSAmJiBDUFUoQVJNNjRFKQorICAgIEFTU0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBw
b3J0KCkpOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAg
ICAgICAgICAgaml0T3BlcmF0aW9uTGlzdC0+YWRkRGlzYXNzZW1ibHlMYWJlbHMoJnN0YXJ0T2ZK
SVRPcGVyYXRpb25zSW5KU0MsICZlbmRPZkpJVE9wZXJhdGlvbnNJbkpTQyk7CisgICAgfSk7Cisj
ZW5kaWYKK30KKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFi
ZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVS
KSAmJiBDUFUoQVJNNjRFKQorICAgIEFTU0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBw
b3J0KCkpOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7Cisg
ICAgICAgICAgICBhdXRvIGxpc3QgPSBsbGludE9wZXJhdGlvbnMoKTsKKyAgICAgICAgICAgIGpp
dE9wZXJhdGlvbkxpc3QtPmFkZERpc2Fzc2VtYmx5TGFiZWxzKGxpc3Qub3BlcmF0aW9ucywgbGlz
dC5vcGVyYXRpb25zICsgbGlzdC5udW1iZXJPZk9wZXJhdGlvbnMpOworICAgICAgICB9CisgICAg
fSk7CisjZW5kaWYKK30KKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2Vt
Ymx5TGFiZWxzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9w
ZXJhdGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpCit7
CisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikgJiYgQ1BVKEFSTTY0RSkKKyAgICBpZiAoTElLRUxZ
KCFPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRE
aXNhc3NlbWJseUxhYmVscyhiZWdpbk9wZXJhdGlvbnMsIGVuZE9wZXJhdGlvbnMpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oYmVnaW5PcGVyYXRpb25zKTsKKyAgICBVTlVTRURfUEFSQU0oZW5k
T3BlcmF0aW9ucyk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAko
cmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRP
cGVyYXRpb25MaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uOworCiAjaWYgRU5B
QkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIAogLy8gVGhpcyBpbmRpcmVjdGlvbiBpcyBw
cm92aWRlZCBzbyB0aGF0IHdlIGNhbiBtYW51YWxseSBmb3JjZSBvbiBhc3NlcnRpb25zIGZvcgog
Ly8gdGVzdGluZyBldmVuIG9uIHJlbGVhc2UgYnVpbGRzLgogI2RlZmluZSBKSVRfT1BFUkFUSU9O
X1ZBTElEQVRJT05fQVNTRVJUX0VOQUJMRUQgQVNTRVJUX0VOQUJMRUQKIAotc3RydWN0IEpJVE9w
ZXJhdGlvbkFubm90YXRpb247Ci0KIGNsYXNzIEpJVE9wZXJhdGlvbkxpc3QgewogcHVibGljOgog
ICAgIHN0YXRpYyBKSVRPcGVyYXRpb25MaXN0JiBpbnN0YW5jZSgpOwpAQCAtNjQsNiArNjQsOCBA
QCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBv
aW50ZXJzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9wZXJh
dGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpOwogCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVs
c0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25z
LCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKTsKKwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklUT3BlcmF0aW9uKFQgZnVu
Y3Rpb24pCiAgICAgewogICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb24pOwpAQCAtODEsNyAr
ODMsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBwb3B1
bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgpOworICAgIHN0YXRpYyB2b2lk
IHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKTsKKwog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGRQb2ludGVycyhjb25zdCBKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kKTsKKyAgICB2
b2lkIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJl
Z2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpOwogCiAjaWYgSklUX09QRVJB
VElPTl9WQUxJREFUSU9OX0FTU0VSVF9FTkFCTEVECiAgICAgdm9pZCBhZGRJbnZlcnNlTWFwKHZv
aWQqIHZhbGlkYXRpb25FbnRyeSwgdm9pZCogcG9pbnRlcik7CkBAIC0xMDYsMTEgKzExMiwyNyBA
QCBjbGFzcyBKSVRPcGVyYXRpb25MaXN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplKCkgeyB9CiAKLSAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2Ny
aXB0Q29yZSgpIHsgfQotICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3Jp
cHRDb3JlRm9yTExJbnQoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5K
YXZhU2NyaXB0Q29yZSgpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVl
ZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgICAgIHBvcHVsYXRlRGlzYXNzZW1ibHlM
YWJlbHNJbkphdmFTY3JpcHRDb3JlKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRl
UG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKQorICAgIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgICAgICBw
b3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCk7CisgICAg
fQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJs
eUxhYmVsc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVy
YXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklUT3BlcmF0aW9u
KFQpIHsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklU
T3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oVCkgeyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZv
aWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmUoKTsKKyAgICBzdGF0
aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50
KCk7CisKKyAgICB2b2lkIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFu
bm90YXRpb24qIGJlZ2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpOwogfTsK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvblZhbGlkYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvblZh
bGlkYXRpb24uaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsMTMgKzQ3
LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKLQogc3RydWN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24gewogICAgIHZvaWQqIG9w
ZXJhdGlvbjsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogICAgIHZvaWQq
IG9wZXJhdGlvbldpdGhWYWxpZGF0aW9uOworI2VuZGlmCisgICAgY29uc3QgY2hhciogbmFtZTsK
IH07CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiAjaWZuZGVmIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTgogI2RlZmluZSBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OX1ZBTElEQVRJT04oZnVuY3Rpb25OYW1lKQogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9u
IDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEzICs4MiwxNCBAQCBMaW5rQnVmZmVyOjpDb2RlUmVm
PExpbmtCdWZmZXJQdHJUYWc+IExpCiAgICAgICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSB2c25w
cmludGYobnVsbHB0ciwgMCwgZm9ybWF0LCBwcmVmbGlnaHRBcmdzKTsKICAgICAgICAgdmFfZW5k
KHByZWZsaWdodEFyZ3MpOwogCisgICAgICAgIGNvbnN0IGNoYXIgcHJlZml4W10gPSAidGh1bms6
ICI7CiAgICAgICAgIGNoYXIqIGJ1ZmZlciA9IDA7Ci0gICAgICAgIENTdHJpbmcgbGFiZWwgPSBD
U3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKHN0cmluZ0xlbmd0aCArIDEsIGJ1ZmZlcik7Ci0gICAg
ICAgIHZzbnByaW50ZihidWZmZXIsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7
Ci0gICAgICAgIGJ1ZmZlcltzdHJpbmdMZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgQ1N0cmluZyBs
YWJlbCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoc3RyaW5nTGVuZ3RoICsgc2l6ZW9mKHBy
ZWZpeCksIGJ1ZmZlcik7CisgICAgICAgIHN0cm5jcHkoYnVmZmVyLCBwcmVmaXgsIHNpemVvZihw
cmVmaXgpIC0gMSk7CisgICAgICAgIHZzbnByaW50ZihidWZmZXIgKyBzaXplb2YocHJlZml4KSAt
IDEsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7CiAgICAgICAgIG91dC5wcmlu
dGYoIiVzIiwgYnVmZmVyKTsKIAotICAgICAgICByZWdpc3RlclRodW5rTGFiZWwocmVzdWx0LmNv
ZGUoKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUobGFiZWwpKTsKKyAgICAg
ICAgcmVnaXN0ZXJMYWJlbChyZXN1bHQuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3Mo
KSwgV1RGTW92ZShsYWJlbCkpOwogICAgIH0gZWxzZQogICAgICAgICBvdXQudnByaW50Zihmb3Jt
YXQsIGFyZ0xpc3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5jcHAJ
KHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC05MDMsMTAgKzkwMyw4IEBAIHN0YXRpYyB2b2lkIHJ1bihj
b25zdCBjaGFyKikKIAogI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCiAKLSNpZiBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKQogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5u
b3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luVGVzdEIzIF9fYXNtKCJzZWN0aW9uJHN0YXJ0
JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJhdGlv
bkFubm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMgX19hc20oInNlY3Rpb24kZW5k
JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKLSNlbmRpZgogCiBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiB7CkBAIC05MzAsNyArOTI4LDExIEBAIGludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogICAgIEpT
Qzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luRW1iZWRkZXIoJnN0YXJ0T2ZK
SVRPcGVyYXRpb25zSW5UZXN0QjMsICZlbmRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMyk7CiAjZW5k
aWYKLSAgICAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQorICAgIGlmIChVTkxJS0VMWShKU0M6
Ok9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgIEpTQzo6SklUT3Bl
cmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoJnN0YXJ0T2ZK
SVRPcGVyYXRpb25zSW5UZXN0QjMsICZlbmRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMyk7CisjZW5k
aWYKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gMjsgKytpKSB7CiAgICAgICAgIEpT
Qzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA9IGk7CiAgICAgICAgIHJ1bihmaWx0ZXIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlz
YXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlIDx2YXJpYW50PgogI2luY2x1ZGUgPHd0Zi9Db25kaXRp
b24uaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgpA
QCAtMzYsOCArMzcsMjEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXVzaW5nIFRodW5rTGFiZWxN
YXAgPSBIYXNoTWFwPHZvaWQqLCBDU3RyaW5nPjsKLUxhenlOZXZlckRlc3Ryb3llZDxUaHVua0xh
YmVsTWFwPiB0aHVua0xhYmVsTWFwOworbmFtZXNwYWNlIERpc2Fzc2VtYmxlciB7CisKK3VzaW5n
IExhYmVsTWFwID0gSGFzaE1hcDx2b2lkKiwgc3RkOjp2YXJpYW50PENTdHJpbmcsIGNvbnN0IGNo
YXIqPj47CitMYXp5TmV2ZXJEZXN0cm95ZWQ8TGFiZWxNYXA+IGxhYmVsTWFwOworCitzdGF0aWMg
TGFiZWxNYXAmIGVuc3VyZUxhYmVsTWFwKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIGxhYmVs
TWFwLmNvbnN0cnVjdCgpOworICAgIH0pOworICAgIHJldHVybiBsYWJlbE1hcC5nZXQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgRGlzYXNzZW1ibGVyCiAKIHZvaWQgZGlzYXNzZW1ibGUoY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPERpc2Fzc2VtYmx5UHRyVGFnPiYgY29kZVB0ciwgc2l6ZV90
IHNpemUsIHZvaWQqIGNvZGVTdGFydCwgdm9pZCogY29kZUVuZCwgY29uc3QgY2hhciogcHJlZml4
LCBQcmludFN0cmVhbSYgb3V0KQogewpAQCAtMTU3LDI3ICsxNzEsMjUgQEAgdm9pZCB3YWl0Rm9y
QXN5bmNocm9ub3VzRGlzYXNzZW1ibHkoKQogICAgIGFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlcigp
LndhaXRVbnRpbEVtcHR5KCk7CiB9CiAKLXN0YXRpYyBUaHVua0xhYmVsTWFwJiBlbnN1cmVUaHVu
a0xhYmVsTWFwKCkKK3ZvaWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJp
bmcmJiBsYWJlbCkKIHsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKLSAgICBz
dGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Ci0gICAgICAgIHRodW5rTGFiZWxNYXAuY29uc3Ry
dWN0KCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRodW5rTGFiZWxNYXAuZ2V0KCk7CisgICAgRGlz
YXNzZW1ibGVyOjplbnN1cmVMYWJlbE1hcCgpLmFkZCh0aHVua0FkZHJlc3MsIFdURk1vdmUobGFi
ZWwpKTsKIH0KIAotdm9pZCByZWdpc3RlclRodW5rTGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBD
U3RyaW5nJiYgbGFiZWwpCit2b2lkIHJlZ2lzdGVyTGFiZWwodm9pZCogYWRkcmVzcywgY29uc3Qg
Y2hhciogbGFiZWwpCiB7Ci0gICAgZW5zdXJlVGh1bmtMYWJlbE1hcCgpLmFkZCh0aHVua0FkZHJl
c3MsIFdURk1vdmUobGFiZWwpKTsKKyAgICBEaXNhc3NlbWJsZXI6OmVuc3VyZUxhYmVsTWFwKCku
YWRkKGFkZHJlc3MsIGxhYmVsKTsKIH0KIAotY29uc3QgY2hhciogbGFiZWxGb3JUaHVuayh2b2lk
KiB0aHVua0FkZHJlc3MpCitjb25zdCBjaGFyKiBsYWJlbEZvcih2b2lkKiB0aHVua0FkZHJlc3Mp
CiB7Ci0gICAgYXV0byYgbWFwID0gZW5zdXJlVGh1bmtMYWJlbE1hcCgpOworICAgIGF1dG8mIG1h
cCA9IERpc2Fzc2VtYmxlcjo6ZW5zdXJlTGFiZWxNYXAoKTsKICAgICBhdXRvIGl0ID0gbWFwLmZp
bmQodGh1bmtBZGRyZXNzKTsKICAgICBpZiAoaXQgPT0gbWFwLmVuZCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gaXQtPnZhbHVlLmRhdGEoKTsKKyAgICBpZiAoc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxDU3RyaW5nPihpdC0+dmFsdWUpKQorICAgICAgICByZXR1cm4gc3Rk
OjpnZXQ8Q1N0cmluZz4oaXQtPnZhbHVlKS5kYXRhKCk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PGNv
bnN0IGNoYXIqPihpdC0+dmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAko
cmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9E
aXNhc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsOCBAQCB2b2lkIGRpc2Fz
c2VtYmxlQXN5bmNocm9ub3VzbHkoCiAKIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgd2FpdEZvckFz
eW5jaHJvbm91c0Rpc2Fzc2VtYmx5KCk7CiAKLXZvaWQgcmVnaXN0ZXJUaHVua0xhYmVsKHZvaWQq
IHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVsKTsKLWNvbnN0IGNoYXIqIGxhYmVsRm9yVGh1
bmsodm9pZCogdGh1bmtBZGRyZXNzKTsKK3ZvaWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiB0aHVua0Fk
ZHJlc3MsIENTdHJpbmcmJiBsYWJlbCk7Cit2b2lkIHJlZ2lzdGVyTGFiZWwodm9pZCogdGh1bmtB
ZGRyZXNzLCBjb25zdCBjaGFyKiBsYWJlbCk7Citjb25zdCBjaGFyKiBsYWJlbEZvcih2b2lkKiB0
aHVua0FkZHJlc3MpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bjb2RlLmNwcAko
cmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9B
Uk02NC9BNjRET3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDE2IEBACiAj
aW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJJbnRlZ3JpdHkuaCIKKyNpbmNsdWRl
ICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiTExJbnRQQ1Jhbmdlcy5oIgorI2luY2x1ZGUgIlB1
cmVOYU4uaCIKKyNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgogI2luY2x1ZGUgPHN0ZGFyZy5oPgog
I2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL1B0
clRhZy5oPgorI2luY2x1ZGUgPHd0Zi9SYW5nZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEFSTTY0RGlzYXNzZW1ibGVyIHsKIApAQCAtMjAxLDEyICsyMDcsMTIgQEAgdm9pZCBBNjRE
T3Bjb2RlOjphcHBlbmRQQ1JlbGF0aXZlT2Zmc2V0KAogICAgICAgICB0YXJnZXRJbmZvID0gIiI7
CiAgICAgZWxzZSBpZiAodGFyZ2V0UEMgPj0gbV9zdGFydFBDICYmIHRhcmdldFBDIDwgbV9lbmRQ
QykKICAgICAgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJTaXplIC0gMSwgIiAtPiA8JXU+Iiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCh0YXJnZXRQQyAtIG1fc3RhcnRQQykgKiBzaXplb2YodWlu
dDMyX3QpKSk7Ci0gICAgZWxzZSBpZiAoY29uc3QgY2hhciogdGh1bmtMYWJlbCA9IGxhYmVsRm9y
VGh1bmsodGFyZ2V0UEMpKQotICAgICAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlclNpemUgLSAx
LCAiIC0+IDx0aHVuazogJXM+IiwgdGh1bmtMYWJlbCk7CisgICAgZWxzZSBpZiAoY29uc3QgY2hh
ciogbGFiZWwgPSBsYWJlbEZvcih0YXJnZXRQQykpCisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwg
YnVmZmVyU2l6ZSAtIDEsICIgLT4gJXMiLCBsYWJlbCk7CiAgICAgZWxzZSBpZiAoaXNKSVRQQyh0
YXJnZXRQQykpCi0gICAgICAgIHRhcmdldEluZm8gPSAiIC0+IDxKSVQgUEM+IjsKKyAgICAgICAg
dGFyZ2V0SW5mbyA9ICIgLT4gSklUIFBDIjsKICAgICBlbHNlIGlmIChMTEludDo6aXNMTEludFBD
KHRhcmdldFBDKSkKLSAgICAgICAgdGFyZ2V0SW5mbyA9ICIgLT4gPExMSW50IFBDPiI7CisgICAg
ICAgIHRhcmdldEluZm8gPSAiIC0+IExMSW50IFBDIjsKICAgICBlbHNlCiAgICAgICAgIHRhcmdl
dEluZm8gPSAiIC0+IDx1bmtub3duPiI7CiAKQEAgLTE1NzAsMTIgKzE1NzYsMTI3IEBAIGNvbnN0
IGNoYXIqIEE2NERPcGNvZGVMb2dpY2FsSW1tZWRpYXRlOjoKIAogY29uc3QgY2hhciogY29uc3Qg
QTY0RE9wY29kZU1vdmVXaWRlOjpzX29wTmFtZXNbNF0gPSB7ICJtb3ZuIiwgMCwgIm1vdnoiLCAi
bW92ayIgfTsKIAotY29uc3QgY2hhciogQTY0RE9wY29kZU1vdmVXaWRlOjpmb3JtYXQoKQorY2xh
c3MgTW92ZVdpZGVGb3JtYXRUcmFpdCB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzdWx0VHlwZSA9
IGNvbnN0IGNoYXIqOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXR1cm5FYXJseUlmQWNj
ZXB0ZWQgPSBmYWxzZTsKKworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0IGNoYXIqIHJl
amVjdGVkUmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSogb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUt
PmJhc2VGb3JtYXQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0IGNoYXIqIGFj
Y2VwdGVkUmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSogb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUt
PmZvcm1hdEJ1ZmZlcigpOyB9Cit9OworCitjbGFzcyBNb3ZlV2lkZUlzVmFsaWRUcmFpdCB7Citw
dWJsaWM6CisgICAgdXNpbmcgUmVzdWx0VHlwZSA9IGJvb2w7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHJldHVybkVhcmx5SWZBY2NlcHRlZCA9IHRydWU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgcmVqZWN0ZWRSZXN1bHQoQTY0RE9wY29kZU1vdmVXaWRlKikgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgYWNjZXB0ZWRSZXN1bHQoQTY0RE9wY29k
ZU1vdmVXaWRlKikgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworYm9vbCBBNjRET3Bjb2RlTW92ZVdp
ZGU6OmhhbmRsZVBvdGVudGlhbERhdGFQb2ludGVyKHZvaWQqIHB0cikKK3sKKyAgICBBU1NFUlQo
SW50ZWdyaXR5Ojppc1NhbmVQb2ludGVyKHB0cikpOworCisgICAgYm9vbCBoYW5kbGVkID0gZmFs
c2U7CisgICAgVk1JbnNwZWN0b3I6OmZvckVhY2hWTShbJl0gKFZNJiB2bSkgeworICAgICAgICBp
ZiAocHRyID09ICZ2bSkgeworICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgdm0iKTsKKyAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6RG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdm0uaXNJblNlcnZpY2UoKSkKKyAg
ICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworCisgICAgICAgIGF1
dG8qIHZtU3RhcnQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmdm0pOworICAgICAgICBh
dXRvKiB2bUVuZCA9IHZtU3RhcnQgKyBzaXplb2YoVk0pOworICAgICAgICBhdXRvKiB1OFB0ciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHB0cik7CisgICAgICAgIFJhbmdlIHZtUmFuZ2Uo
dm1TdGFydCwgdm1FbmQpOworICAgICAgICBpZiAodm1SYW5nZS5jb250YWlucyh1OFB0cikpIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHU4UHRyIC0gdm1TdGFydDsKKyAgICAgICAg
ICAgIGJ1ZmZlclByaW50ZigiIHZtICsldSIsIG9mZnNldCk7CisKKyAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGRlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gJnZt
LnRvcENhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS50b3BDYWxs
RnJhbWUiOworICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0ID09IFZNOjp0b3BFbnRyeUZyYW1l
T2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0udG9wRW50cnlGcmFt
ZSI7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZzZXQgPT0gVk06OmV4Y2VwdGlvbk9mZnNldCgp
KQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1fZXhjZXB0aW9uIjsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG9mZnNldCA9PSBWTTo6b2Zmc2V0T2ZIZWFwQmFycmllclRocmVzaG9s
ZCgpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLmhlYXAubV9iYXJyaWVyVGhy
ZXNob2xkIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNldCA9PSBWTTo6Y2FsbEZyYW1lRm9y
Q2F0Y2hPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5jYWxsRnJh
bWVGb3JDYXRjaCI7CisgICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gdm0uYWRkcmVzc09mU29m
dFN0YWNrTGltaXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5tX3NvZnRT
dGFja0xpbWl0IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSAmdm0ub3NyRXhpdEluZGV4
KQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm9zckV4aXRJbmRleCI7CisgICAg
ICAgICAgICBlbHNlIGlmIChwdHIgPT0gJnZtLm9zckV4aXRKdW1wRGVzdGluYXRpb24pCisgICAg
ICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlvbiI7Cisg
ICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3Rl
clN0cmluZ3MoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5zbWFsbFN0cmlu
Z3MubV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9
PSAmdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRp
b24gPSAidm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3ciOworICAgICAgICAgICAgZWxzZSBpZiAo
cHRyID09IHZtLnRyYXBzKCkudHJhcEJpdHNBZGRyZXNzKCkpCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24gPSAidm0ubV90cmFwcy5tX3RyYXBCaXRzIjsKKyNpZiBFTkFCTEUoREZHX0RPRVNf
R0NfVkFMSURBVElPTikKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSB2bS5hZGRyZXNzT2ZE
b2VzR0MoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5tX2RvZXNHQyI7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICBidWZm
ZXJQcmludGYoIjogJXMiLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICh2bS5pc1NjcmF0Y2hCdWZmZXIocHRyKSkgeworICAgICAgICAgICAg
YnVmZmVyUHJpbnRmKCIgdm0gc2NyYXRjaEJ1ZmZlci5tX2J1ZmZlciIpOworICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25l
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwor
ICAgIH0pOworICAgIHJldHVybiBoYW5kbGVkOworfQorCisjaWYgQ1BVKEFSTTY0RSkKK2Jvb2wg
QTY0RE9wY29kZU1vdmVXaWRlOjpoYW5kbGVQb3RlbnRpYWxQdHJUYWcodWludHB0cl90IHZhbHVl
KQoreworICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPiAweGZmZmYpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFB0clRhZyB0YWcgPSBzdGF0aWNfY2FzdDxQdHJUYWc+KHZhbHVlKTsKKyNp
ZiBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykKKyAgICBjb25zdCBjaGFyKiBuYW1lID0gV1RGOjpw
dHJUYWdOYW1lKHRhZyk7CisgICAgaWYgKG5hbWVbMF0gPT0gJzwnKQorICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIE9ubHkgcmVzdWx0IHRoYXQgc3RhcnRzIHdpdGggJzwnIGlzICI8dW5rbm93bj4i
LgorI2Vsc2UKKyAgICAvLyBXaXRob3V0IEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKSwgbm90IGFs
bCBQdHJUYWdzIGFyZSByZWdpc3RlcmVkZiBmb3IKKyAgICAvLyBwcmludGluZy4gU28sIHdlJ2xs
IGp1c3QgZG8gdGhlIG1pbmltdW0gd2l0aCBvbmx5IHRoZSBKU0Mgc3BlY2lmaWMgdGFncy4KKyAg
ICBjb25zdCBjaGFyKiBuYW1lID0gcHRyVGFnTmFtZSh0YWcpOworICAgIGlmICghbmFtZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAgICAvLyBBbHNvIHByaW50ICc/JyB0byBp
bmRpY2F0ZSB0aGF0IHRoaXMgaXMgYSBtYXliZS4gV2UgZG8gbm90IGtub3cgZm9yIGNlcnRhaW4K
KyAgICAvLyBpZiB0aGUgY29uc3RhbnQgaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBhIFB0clRhZy4K
KyAgICBidWZmZXJQcmludGYoIiAtPiAlcCAlcyA/IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
dmFsdWUpLCBuYW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUcmFpdD4KK3R5cGVuYW1lIFRyYWl0OjpSZXN1bHRUeXBlIEE2NERPcGNvZGVNb3Zl
V2lkZTo6cGFyc2UoKQogewogICAgIGlmIChvcGMoKSA9PSAxKQotICAgICAgICByZXR1cm4gQTY0
RE9wY29kZTo6Zm9ybWF0KCk7CisgICAgICAgIHJldHVybiBUcmFpdDo6cmVqZWN0ZWRSZXN1bHQo
dGhpcyk7CiAgICAgaWYgKCFpczY0Qml0KCkgJiYgaHcoKSA+PSAyKQotICAgICAgICByZXR1cm4g
QTY0RE9wY29kZTo6Zm9ybWF0KCk7CisgICAgICAgIHJldHVybiBUcmFpdDo6cmVqZWN0ZWRSZXN1
bHQodGhpcyk7CisKKyAgICBpZiBjb25zdGV4cHIgKFRyYWl0OjpyZXR1cm5FYXJseUlmQWNjZXB0
ZWQpCisgICAgICAgIHJldHVybiBUcmFpdDo6YWNjZXB0ZWRSZXN1bHQodGhpcyk7CiAKICAgICBp
ZiAoIW9wYygpICYmICghaW1tZWRpYXRlMTYoKSB8fCAhaHcoKSkgJiYgKGlzNjRCaXQoKSB8fCBp
bW1lZGlhdGUxNigpICE9IDB4ZmZmZikpIHsKICAgICAgICAgLy8gTU9WIHBzZXVkbyBvcCBmb3Ig
TU9WTgpAQCAtMTU4NywxMCArMTcwOCwxMiBAQCBjb25zdCBjaGFyKiBBNjRET3Bjb2RlTW92ZVdp
ZGU6OmZvcm1hdCgpCiAgICAgICAgICAgICBpbnQ2NF90IGFtb3VudCA9IGltbWVkaWF0ZTE2KCkg
PDwgKGh3KCkgKiAxNik7CiAgICAgICAgICAgICBhbW91bnQgPSB+YW1vdW50OwogICAgICAgICAg
ICAgYXBwZW5kU2lnbmVkSW1tZWRpYXRlNjQoYW1vdW50KTsKKyAgICAgICAgICAgIG1fYnVpbHRD
b25zdGFudCA9IHN0YXRpY19jYXN0PGludHB0cl90PihhbW91bnQpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaW50MzJfdCBhbW91bnQgPSBpbW1lZGlhdGUxNigpIDw8IChodygpICog
MTYpOwogICAgICAgICAgICAgYW1vdW50ID0gfmFtb3VudDsKICAgICAgICAgICAgIGFwcGVuZFNp
Z25lZEltbWVkaWF0ZShhbW91bnQpOworICAgICAgICAgICAgbV9idWlsdENvbnN0YW50ID0gc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KGFtb3VudCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAg
ICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BOYW1lKCkpOwpAQCAtMTYwMSwxMSArMTcyNCw2
NSBAQCBjb25zdCBjaGFyKiBBNjRET3Bjb2RlTW92ZVdpZGU6OmZvcm1hdCgpCiAgICAgICAgICAg
ICBhcHBlbmRTZXBhcmF0b3IoKTsKICAgICAgICAgICAgIGFwcGVuZFNoaWZ0QW1vdW50KGh3KCkp
OwogICAgICAgICB9Ci0gICAgfQogCi0gICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworICAgICAg
ICBpZiAob3BjKCkgPT0gMikgLy8gRW5jb2RpbmcgZm9yIG1vdnoKKyAgICAgICAgICAgIG1fYnVp
bHRDb25zdGFudCA9IDA7CisKKyAgICAgICAgdW5zaWduZWQgc2hpZnQgPSBodygpICogMTY7Cisg
ICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oaW1tZWRpYXRl
MTYoKSkgPDwgc2hpZnQ7CisgICAgICAgIHVpbnRwdHJfdCBtYXNrID0gfihzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KDB4ZmZmZikgPDwgc2hpZnQpOworICAgICAgICBtX2J1aWx0Q29uc3RhbnQgJj0g
bWFzazsKKyAgICAgICAgbV9idWlsdENvbnN0YW50IHw9IHZhbHVlOworICAgIH0KKworICAgIGF1
dG8gZHVtcENvbnN0YW50RGF0YSA9IFsmXSB7CisgICAgICAgIHVpbnQzMl90KiBuZXh0UEMgPSBt
X2N1cnJlbnRQQyArIDE7CisgICAgICAgIGlmIChuZXh0UEMgPj0gbV9lbmRQQykKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBBNjRET3Bjb2RlIG5leHRCYXNlT3Bjb2RlKG1fc3RhcnRQ
QywgbV9lbmRQQyk7CisgICAgICAgIEE2NERPcGNvZGVNb3ZlV2lkZSYgbmV4dE9wY29kZSA9ICpy
ZWludGVycHJldF9jYXN0PEE2NERPcGNvZGVNb3ZlV2lkZSo+KCZuZXh0QmFzZU9wY29kZSk7Cisg
ICAgICAgIG5leHRPcGNvZGUuc2V0UENBbmRPcGNvZGUobmV4dFBDLCAqbmV4dFBDKTsKKworICAg
ICAgICBib29sIG5leHRJc01vdmVXaWRlR3JvdXAgPSBvcGNvZGVHcm91cE51bWJlcihtX29wY29k
ZSkgPT0gb3Bjb2RlR3JvdXBOdW1iZXIoKm5leHRQQyk7CisKKyAgICAgICAgaWYgKG5leHRJc01v
dmVXaWRlR3JvdXAgJiYgbmV4dE9wY29kZS5pc1ZhbGlkKCkgJiYgbmV4dE9wY29kZS5yZCgpID09
IHJkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdm9pZCogcHRyID0gcmVtb3Zl
Q29kZVB0clRhZyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYnVpbHRDb25zdGFudCkpOworICAgICAg
ICBpZiAoIXB0cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoSW50ZWdyaXR5
Ojppc1NhbmVQb2ludGVyKHB0cikpIHsKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIC0+ICVw
IiwgcHRyKTsKKyAgICAgICAgICAgIGlmIChjb25zdCBjaGFyKiBsYWJlbCA9IGxhYmVsRm9yKHB0
cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclByaW50ZigiICVzIiwgbGFiZWwpOwor
ICAgICAgICAgICAgaWYgKGlzSklUUEMocHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVm
ZmVyUHJpbnRmKCIgSklUIFBDIik7CisgICAgICAgICAgICBpZiAoTExJbnQ6OmlzTExJbnRQQyhw
dHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJQcmludGYoIiBMTEludCBQQyIpOwor
ICAgICAgICAgICAgaGFuZGxlUG90ZW50aWFsRGF0YVBvaW50ZXIocHRyKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorI2lmIENQVShBUk02NEUpCisgICAgICAgIGlmIChoYW5kbGVQ
b3RlbnRpYWxQdHJUYWcobV9idWlsdENvbnN0YW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKyNl
bmRpZgorICAgICAgICBpZiAobV9idWlsdENvbnN0YW50IDwgMHgxMDAwMCkKKyAgICAgICAgICAg
IGJ1ZmZlclByaW50ZigiIC0+ICV1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fYnVpbHRDb25z
dGFudCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWZmZXJQcmludGYoIiAtPiAlcCIs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fYnVpbHRDb25zdGFudCkpOworICAgIH07CisKKyAg
ICBpZiAobV9zdGFydFBDKQorICAgICAgICBkdW1wQ29uc3RhbnREYXRhKCk7CisKKyAgICByZXR1
cm4gVHJhaXQ6OmFjY2VwdGVkUmVzdWx0KHRoaXMpOwogfQogCitjb25zdCBjaGFyKiBBNjRET3Bj
b2RlTW92ZVdpZGU6OmZvcm1hdCgpIHsgcmV0dXJuIHBhcnNlPE1vdmVXaWRlRm9ybWF0VHJhaXQ+
KCk7IH0KK2Jvb2wgQTY0RE9wY29kZU1vdmVXaWRlOjppc1ZhbGlkKCkgeyByZXR1cm4gcGFyc2U8
TW92ZVdpZGVJc1ZhbGlkVHJhaXQ+KCk7IH0KKwogY29uc3QgY2hhciogQTY0RE9wY29kZVRlc3RB
bmRCcmFuY2hJbW1lZGlhdGU6OmZvcm1hdCgpCiB7CiAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1l
KG9wQml0KCkgPyAidGJueiIgOiAidGJ6Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAkocmV2aXNpb24gMjk0
MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bj
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIGJ1ZmZlclByaW50ZigibHNsICMldSIsIDE2ICogYW1vdW50KTsKICAgICB9CiAKLSAgICBz
dGF0aWMgY29uc3RleHByIGludCBidWZmZXJTaXplID0gODE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgYnVmZmVyU2l6ZSA9IDEwMTsKIAogICAgIGNoYXIgbV9mb3JtYXRCdWZmZXJbYnVmZmVy
U2l6ZV07CiAgICAgdWludDMyX3QqIG1fc3RhcnRQQzsKQEAgLTIwMiw2ICsyMDIsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdWludDMyX3QqIG1fY3VycmVudFBDOwogICAgIHVpbnQzMl90IG1fb3Bjb2Rl
OwogICAgIGludCBtX2J1ZmZlck9mZnNldDsKKyAgICB1aW50cHRyX3QgbV9idWlsdENvbnN0YW50
IHsgMCB9OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBPcGNvZGVHcm91cCogb3Bjb2RlVGFibGVb
MzJdOwpAQCAtODcyLDExICs4NzMsMjQgQEAgcHVibGljOgogICAgIERFRklORV9TVEFUSUNfRk9S
TUFUKEE2NERPcGNvZGVNb3ZlV2lkZSwgdGhpc09iaik7CiAKICAgICBjb25zdCBjaGFyKiBmb3Jt
YXQoKTsKKyAgICBib29sIGlzVmFsaWQoKTsKIAogICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsg
cmV0dXJuIHNfb3BOYW1lc1tvcGMoKV07IH0KICAgICB1bnNpZ25lZCBvcGMoKSB7IHJldHVybiAo
bV9vcGNvZGUgPj4gMjkpICYgMHgzOyB9CiAgICAgdW5zaWduZWQgaHcoKSB7IHJldHVybiAobV9v
cGNvZGUgPj4gMjEpICYgMHgzOyB9CiAgICAgdW5zaWduZWQgaW1tZWRpYXRlMTYoKSB7IHJldHVy
biAobV9vcGNvZGUgPj4gNSkgJiAweGZmZmY7IH0KKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUcmFpdD4gdHlwZW5hbWUgVHJhaXQ6OlJlc3VsdFR5cGUgcGFyc2UoKTsKKyAgICBi
b29sIGhhbmRsZVBvdGVudGlhbERhdGFQb2ludGVyKHZvaWQqKTsKKyAgICBib29sIGhhbmRsZVBv
dGVudGlhbFB0clRhZyh1aW50cHRyX3QpOworCisgICAgLy8gVGhlc2UgZm9yd2FyZGluZyBmdW5j
dGlvbnMgYXJlIG5lZWRlZCBmb3IgTW92ZVdpZGVGb3JtYXRUcmFpdCBvbmx5LgorICAgIGNvbnN0
IGNoYXIqIGJhc2VGb3JtYXQoKSB7IHJldHVybiBBNjRET3Bjb2RlOjpmb3JtYXQoKTsgfQorICAg
IGNvbnN0IGNoYXIqIGZvcm1hdEJ1ZmZlcigpIHsgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOyB9CisK
KyAgICBmcmllbmQgY2xhc3MgTW92ZVdpZGVGb3JtYXRUcmFpdDsKKyAgICBmcmllbmQgY2xhc3Mg
TW92ZVdpZGVJc1ZhbGlkVHJhaXQ7CiB9OwogCiBjbGFzcyBBNjRET3Bjb2RlVGVzdEFuZEJyYW5j
aEltbWVkaWF0ZSA6IHB1YmxpYyBBNjRET3Bjb2RlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDggKzM2LDE5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgQ1BVKEFSTTY0RSkgJiYg
RU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCisjaWYgQ1BVKEFSTTY0RSkKKworY29uc3QgY2hhciog
cHRyVGFnTmFtZShQdHJUYWcgdGFnKQoreworI2RlZmluZSBSRVRVUk5fUFRSVEFHX05BTUUoX3Rh
Z05hbWUsIGNhbGxlZVR5cGUsIGNhbGxlclR5cGUpIGNhc2UgX3RhZ05hbWU6IHJldHVybiAjX3Rh
Z05hbWU7CisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGFnKSkgeworICAgICAg
ICBGT1JfRUFDSF9KU0NfUFRSVEFHKFJFVFVSTl9QVFJUQUdfTkFNRSkKKyAgICB9CisjdW5kZWYg
UkVUVVJOX1BUUlRBR19OQU1FCisgICAgcmV0dXJuIG51bGxwdHI7IC8vIE1hdGNoaW5nIHRhZyBu
b3QgZm91bmQuCit9CiAKKyNpZiBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykKIHN0YXRpYyBjb25z
dCBjaGFyKiB0YWdGb3JQdHIoY29uc3Qgdm9pZCogcHRyKQogewogI2RlZmluZSBSRVRVUk5fTkFN
RV9JRl9UQUdfTUFUQ0hFUyh0YWcsIGNhbGxlZVR5cGUsIGNhbGxlclR5cGUpIFwKQEAgLTUwLDI0
ICs2MSwxNCBAQCBzdGF0aWMgY29uc3QgY2hhciogdGFnRm9yUHRyKGNvbnN0IHZvaWQqCiAgICAg
cmV0dXJuIG51bGxwdHI7IC8vIE1hdGNoaW5nIHRhZyBub3QgZm91bmQuCiB9CiAKLXN0YXRpYyBj
b25zdCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyB0YWcpCi17Ci0jZGVmaW5lIFJFVFVSTl9QVFJU
QUdfTkFNRShfdGFnTmFtZSwgY2FsbGVlVHlwZSwgY2FsbGVyVHlwZSkgY2FzZSBfdGFnTmFtZTog
cmV0dXJuICNfdGFnTmFtZTsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0YWcp
KSB7Ci0gICAgICAgIEZPUl9FQUNIX0pTQ19QVFJUQUcoUkVUVVJOX1BUUlRBR19OQU1FKQotICAg
IH0KLSN1bmRlZiBSRVRVUk5fUFRSVEFHX05BTUUKLSAgICByZXR1cm4gbnVsbHB0cjsgLy8gTWF0
Y2hpbmcgdGFnIG5vdCBmb3VuZC4KLX0KLQogdm9pZCBpbml0aWFsaXplUHRyVGFnTG9va3VwKCkK
IHsKICAgICBXVEY6OlB0clRhZ0xvb2t1cCYgbG9va3VwID0gZ19qc2NDb25maWcucHRyVGFnTG9v
a3VwUmVjb3JkOwogICAgIGxvb2t1cC5pbml0aWFsaXplKHRhZ0ZvclB0ciwgcHRyVGFnTmFtZSk7
CiAgICAgV1RGOjpyZWdpc3RlclB0clRhZ0xvb2t1cCgmbG9va3VwKTsKIH0KLQotI2VuZGlmIC8v
IENQVShBUk02NEUpICYmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQorI2VuZGlmIC8vIEVOQUJM
RShQVFJUQUdfREVCVUdHSU5HKQorI2VuZGlmIC8vIENQVShBUk02NEUpCiAKICNpZiBDUFUoQVJN
NjRFKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuaAko
cmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRy
VGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDgsNiArMjQ4LDEwIEBAIHZvaWQgaW5pdGlhbGl6
ZVB0clRhZ0xvb2t1cCgpOwogaW5saW5lIHZvaWQgaW5pdGlhbGl6ZVB0clRhZ0xvb2t1cCgpIHsg
fQogI2VuZGlmCiAKKyNpZiBDUFUoQVJNNjRFKQorY29uc3QgY2hhciogcHRyVGFnTmFtZShQdHJU
YWcpOworI2VuZGlmIC8vIENQVShBUk02NEUpCisKIH0gLy8gbmFtZXNwYWNlIEpTQwogbmFtZXNw
YWNlIFdURiB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDEwICs0NjUsMTggQEAgdm9pZCBPcHRp
b25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKAogICAgIGlmICghT3B0aW9uczo6dXNlV2Vi
QXNzZW1ibHkoKSkKICAgICAgICAgT3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCkg
PSBmYWxzZTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6bG9nSklUKCkKLSAgICAgICAgfHwgT3B0
aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkKKyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5
KCkKKyAgICAgICAgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9w
dGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBGVExE
aXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBSZWdFeHBEaXNhc3NlbWJseSgp
CisgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBP
cHRpb25zOjpkdW1wQkJRRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wT01H
RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgp
ID0gdHJ1ZTsKKworICAgIGlmIChPcHRpb25zOjpsb2dKSVQoKQorICAgICAgICB8fCBPcHRpb25z
OjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEJ5dGVj
b2RlQXRERkdUaW1lKCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2Uo
KQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wREZHR3JhcGhBdEVhY2hQaGFzZSgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI5
NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFz
dE1lbW9yeSgpOwogICAgIFwKICAgICB2KEJvb2wsIHVzZU9TTG9nLCBmYWxzZSwgTm9ybWFsLCAi
TG9nIGRhdGFMb2coKXMgdG8gb3NfbG9nIGluc3RlYWQgb2Ygc3RkZXJyIikgXAogICAgIC8qIGR1
bXBEaXNhc3NlbWJseSBpbXBsaWVzIGR1bXBERkdEaXNhc3NlbWJseS4gKi8gXAorICAgIHYoQm9v
bCwgbmVlZERpc2Fzc2VtYmx5U3VwcG9ydCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoQm9vbCwgZHVtcERpc2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFsLCAiZHVtcHMgZGlzYXNzZW1i
bHkgb2YgYWxsIEpJVCBjb21waWxlZCBjb2RlIHVwb24gY29tcGlsYXRpb24iKSBcCiAgICAgdihC
b29sLCBhc3luY0Rpc2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihC
b29sLCBsb2dKSVQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwOSw2ICsxNDA5LDE2
IEBAIHZvaWQgVk06OmNsZWFyU2NyYXRjaEJ1ZmZlcnMoKQogICAgICAgICBzY3JhdGNoQnVmZmVy
LT5zZXRBY3RpdmVMZW5ndGgoMCk7CiB9CiAKK2Jvb2wgVk06OmlzU2NyYXRjaEJ1ZmZlcih2b2lk
KiBwdHIpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fc2NyYXRjaEJ1ZmZlckxvY2sgfTsKKyAg
ICBmb3IgKGF1dG8qIHNjcmF0Y2hCdWZmZXIgOiBtX3NjcmF0Y2hCdWZmZXJzKSB7CisgICAgICAg
IGlmIChzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkgPT0gcHRyKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBWTTo6ZW5zdXJl
U2hhZG93Q2hpY2tlbigpCiB7CiAgICAgaWYgKG1fc2hhZG93Q2hpY2tlbikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNjg1LDYgKzY4NSw3IEBA
IHB1YmxpYzoKICAgICAvLyAtIFlvdSBjYW4gb25seSB3cml0ZSB0byBlbnRyaWVzIGluIHRoZSBT
Y3JhdGNoQnVmZmVyIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAgIFNjcmF0Y2hCdWZmZXIqIHNj
cmF0Y2hCdWZmZXJGb3JTaXplKHNpemVfdCBzaXplKTsKICAgICB2b2lkIGNsZWFyU2NyYXRjaEJ1
ZmZlcnMoKTsKKyAgICBib29sIGlzU2NyYXRjaEJ1ZmZlcih2b2lkKik7CiAKICAgICBFbmNvZGVk
SlNWYWx1ZSogZXhjZXB0aW9uRnV6emluZ0J1ZmZlcihzaXplX3Qgc2l6ZSkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCShyZXZpc2lvbiAyOTQyMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk2LDcgKzk2LDggQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBpc1NhbmVQb2lu
dGVyKAogICAgIHVpbnRwdHJfdCBwb2ludGVyQXNJbnQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pihwb2ludGVyKTsKICAgICB1aW50cHRyX3QgY2Fub25pY2FsUG9pbnRlckJpdHMgPSBwb2ludGVy
QXNJbnQgPDwgKDY0IC0gT1NfQ09OU1RBTlQoRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpKTsKICAg
ICB1aW50cHRyX3Qgbm9uQ2Fub25pY2FsUG9pbnRlckJpdHMgPSBwb2ludGVyQXNJbnQgPj4gT1Nf
Q09OU1RBTlQoRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpOwotICAgIHJldHVybiAhbm9uQ2Fub25p
Y2FsUG9pbnRlckJpdHMgJiYgY2Fub25pY2FsUG9pbnRlckJpdHM7CisgICAgdWludHB0cl90IGxv
d2VyNEcgPSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAzMikgLSAxOworICAgIHJldHVy
biAhbm9uQ2Fub25pY2FsUG9pbnRlckJpdHMgJiYgY2Fub25pY2FsUG9pbnRlckJpdHMgJiYgcG9p
bnRlckFzSW50ID4gbG93ZXI0RzsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBvaW50ZXIpOwog
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm1DYWxsaW5nQ29u
dmVudGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNhbGxpbmdD
b252ZW50aW9ucy5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bUNhbGxpbmdDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTg0LDkgKzg0LDI0IEBACiAjZGVmaW5lIEpJVF9PUEVS
QVRJT05fQVRUUklCVVRFUwogI2VuZGlmCiAKKy8qCiAjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05f
VkFMSURBVElPTikKKyNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fRVhUUkFTKHZh
bGlkYXRlRnVuY3Rpb24sIG5hbWUpICh2b2lkKil2YWxpZGF0ZUZ1bmN0aW9uLCBuYW1lCisjZWxz
ZQorI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9FWFRSQVModmFsaWRhdGVGdW5j
dGlvbiwgbmFtZSkgbmFtZQorI2VuZGlmCisKICNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVS
QVRJT05fSU5URVJOQUwoZnVuY3Rpb24pIFwKLSAgICBjb25zdGV4cHIgSlNDOjpKSVRPcGVyYXRp
b25Bbm5vdGF0aW9uIF9KSVRUYXJnZXRJRF8jI2Z1bmN0aW9uIF9fYXR0cmlidXRlX18oKHVzZWQs
IHNlY3Rpb24oIl9fREFUQV9DT05TVCxfX2pzY19vcHMiKSkpID0geyAodm9pZCopZnVuY3Rpb24s
ICh2b2lkKilmdW5jdGlvbiMjVmFsaWRhdGUgfTsKKyAgICBjb25zdGV4cHIgSlNDOjpKSVRPcGVy
YXRpb25Bbm5vdGF0aW9uIF9KSVRUYXJnZXRJRF8jI2Z1bmN0aW9uIF9fYXR0cmlidXRlX18oKHVz
ZWQsIHNlY3Rpb24oIl9fREFUQV9DT05TVCxfX2pzY19vcHMiKSkpID0geyAodm9pZCopZnVuY3Rp
b24sIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0VYVFJBUyhmdW5jdGlvbiMjVmFsaWRhdGUs
ICNmdW5jdGlvbikgfTsKKyovCisKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9O
KQorI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9JTlRFUk5BTChmdW5jdGlvbikg
XAorICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gX0pJVFRhcmdldElE
XyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwgc2VjdGlvbigiX19EQVRBX0NPTlNULF9f
anNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwgKHZvaWQqKWZ1bmN0aW9uIyNWYWxpZGF0
ZSwgI2Z1bmN0aW9uIH07CisjZWxzZQorI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElP
Tl9JTlRFUk5BTChmdW5jdGlvbikgXAorICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlvbkFu
bm90YXRpb24gX0pJVFRhcmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwgc2Vj
dGlvbigiX19EQVRBX0NPTlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwgI2Z1
bmN0aW9uIH07CisjZW5kaWYKIAogI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTihm
dW5jdGlvbikgXAogICAgIEpTQ19ERUNMQVJFX0FORF9ERUZJTkVfSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKGZ1bmN0aW9uKTsgXApAQCAtMTAwLDEyICsxMTUsNiBAQAogICAgIEpTQ19ERUNMQVJF
X0FORF9ERUZJTkVfSklUX09QRVJBVElPTl9SRVRVUk5fVkFMSURBVElPTihmdW5jdGlvbik7IFwK
ICAgICBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9JTlRFUk5BTChmdW5jdGlvbikKIAotI2Vs
c2UKLSNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT04oZnVuY3Rpb24pCi0jZGVmaW5l
IEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX1BST0JFKGZ1bmN0aW9uKQotI2RlZmluZSBKU0Nf
QU5OT1RBVEVfSklUX09QRVJBVElPTl9SRVRVUk4oZnVuY3Rpb24pCi0jZW5kaWYKLQogCiAjZGVm
aW5lIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTl9XSVRIT1VUX1ZBUklBQkxFKGZ1bmN0aW9uTmFt
ZSwgcmV0dXJuVHlwZSwgcGFyYW1ldGVycykgXAogICAgIHJldHVyblR5cGUgSklUX09QRVJBVElP
Tl9BVFRSSUJVVEVTIGZ1bmN0aW9uTmFtZSBwYXJhbWV0ZXJzCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyOTQyMjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzAsMTEgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVy
biBjb25zdCBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gc3RhcnRPZkpJVE9wZXJhdGlvbnNJ
bldlYkNvcmUgX19hc20oInNlY3Rpb24kc3RhcnQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwog
ZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlv
bnNJbldlYkNvcmUgX19hc20oInNlY3Rpb24kZW5kJF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsK
IAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisKIHZvaWQgcG9wdWxhdGVK
SVRPcGVyYXRpb25zKCkKIHsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKQEAg
LTQzLDQgKzQ0LDE0IEBAIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkKIH0KICNlbmRpZiAv
LyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogCisjaWYgRU5BQkxFKERJU0FTU0VN
QkxFUikKK3ZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpCit7CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewor
ICAgICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJ
bkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSwgJmVuZE9mSklUT3BlcmF0
aW9uc0luV2ViQ29yZSk7CisgICAgfSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKERJU0FTU0VNQkxF
UikKKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpJVE9wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
SklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTAg
KzI3LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIEVOQUJMRShESVNBU1NFTUJM
RVIpCitXRUJDT1JFX0VYUE9SVCB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKTsKKyNl
bHNlCitpbmxpbmUgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkgeyB9CisjZW5kaWYK
KwogI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiBXRUJDT1JFX0VYUE9SVCB2
b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpOwogI2Vsc2UKLWlubGluZSB2b2lkIHBvcHVsYXRl
SklUT3BlcmF0aW9ucygpIHsgfQoraW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkg
eyBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCk7IH0KICNlbmRpZgogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCShyZXZp
c2lvbiAyOTQyMjApCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3Vw
cG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDE1IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0MSwxMCArMjQxLDExIEBAIHZvaWQg
c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3IKIH0KICNlbmRpZgogCi0jaWYgRU5B
QkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJh
dGlvbkFubm90YXRpb24gc3RhcnRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCBf
X2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29u
c3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9uc0luV2ViQ29y
ZVRlc3RTdXBwb3J0IF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7
CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiB2b2lkIHBvcHVsYXRl
SklUT3BlcmF0aW9ucygpCiB7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CkBA
IC0yNTQsNCArMjU1LDE0IEBAIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogCisjaWYgRU5BQkxFKERJU0FT
U0VNQkxFUikKK3ZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpCit7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10g
eworICAgICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJl
bHNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0LCAm
ZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQpOworICAgIH0pOwogfQorI2Vu
ZGlmIC8vIEVOQUJMRShESVNBU1NFTUJMRVIpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmVUZXN0
U3VwcG9ydApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBv
cnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0
U3VwcG9ydC5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pz
L1dlYkNvcmVUZXN0U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NywxMCArNjcs
MTYgQEAgdm9pZCBzZXR1cE5ld2x5Q3JlYXRlZFNlcnZpY2VXb3JrZXIodWludAogICAgIAogdm9p
ZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3RpbmcoY29uc3QgU3RyaW5n
JikgVEVTVF9TVVBQT1JUX0VYUE9SVDsKIAorI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCit2b2lk
IHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKSBURVNUX1NVUFBPUlRfRVhQT1JUOworI2Vsc2UK
K2lubGluZSB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKSB7IH0KKyNlbmRpZgorCiAj
aWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIHZvaWQgcG9wdWxhdGVKSVRPcGVy
YXRpb25zKCkgVEVTVF9TVVBQT1JUX0VYUE9SVDsKICNlbHNlCi1pbmxpbmUgdm9pZCBwb3B1bGF0
ZUpJVE9wZXJhdGlvbnMoKSB7IH0KK2lubGluZSB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygp
IHsgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpOyB9CiAjZW5kaWYKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZVRlc3RTdXBwb3J0Cg==
</data>
<flag name="commit-queue"
          id="488497"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459405</attachid>
            <date>2022-05-15 23:27:23 -0700</date>
            <delta_ts>2022-05-15 23:37:44 -0700</delta_ts>
            <desc>EWS testing</desc>
            <filename>wip-disassemble-operations2.2.patch</filename>
            <type>text/plain</type>
            <size>44649</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1NiwxMCArMzc1Niw4IEBA
IGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVybiBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCBf
X2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsIF9fYXNt
KCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7Ci0jZW5kaWYKIAogaW50IGpz
Y21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpAQCAtMzc4Myw2ICszNzgxLDExIEBAIGlu
dCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVy
c0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCwgJmVuZE9mSklUT3BlcmF0
aW9uc0luU2hlbGwpOwogI2VuZGlmCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlND
OjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigm
c3RhcnRPZkpJVE9wZXJhdGlvbnNJblNoZWxsLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7
CisjZW5kaWYKKwogICAgIGluaXRpYWxpemVUaW1lb3V0SWZOZWVkZWQoKTsKIAogI2lmIE9TKERB
UldJTikgfHwgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0pJVE9wZXJhdGlvbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwyMCArMjYsMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKSVRPcGVyYXRpb25MaXN0LmgiCiAKKyNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJHYXRlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIk9wdGlv
bnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IChFTkFCTEUo
RElTQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjRFKSkKIAogTGF6eU5ldmVyRGVzdHJveWVkPEpJVE9w
ZXJhdGlvbkxpc3Q+IGppdE9wZXJhdGlvbkxpc3Q7CiAKIGV4dGVybiBjb25zdCBKSVRPcGVyYXRp
b25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5KU0MgX19hc20oInNlY3Rpb24kc3Rh
cnQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0IEpJVE9wZXJhdGlvbkFu
bm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5KU0MgX19hc20oInNlY3Rpb24kZW5kJF9fREFU
QV9DT05TVCRfX2pzY19vcHMiKTsKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJ
T04pCisKIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgaml0T3Bl
cmF0aW9uTGlzdC5jb25zdHJ1Y3QoKTsKQEAgLTg1LDkgKzg5LDEzIEBAIHZvaWQgSklUT3BlcmF0
aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0kKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAgIGppdE9wZXJh
dGlvbkxpc3QtPmFkZFBvaW50ZXJzKCZzdGFydE9mSklUT3BlcmF0aW9uc0luSlNDLCAmZW5kT2ZK
SVRPcGVyYXRpb25zSW5KU0MpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVlZERp
c2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgICAgIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJl
bHNJbkphdmFTY3JpcHRDb3JlKCk7CiAgICAgfSk7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKQorCiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUo
bGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwogTExJTlRfREVDTEFSRV9ST1VUSU5F
X1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpOwogTExJTlRf
REVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2No
ZWNrKTsKQEAgLTEwNCwzMSArMTEyLDc5IEBAIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFU
RShjaGVja3BvaW4KIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShub3JtYWxfb3NyX2V4
aXRfdHJhbXBvbGluZSk7CiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUoZnV6emVyX3Jl
dHVybl9lYXJseV9mcm9tX2xvb3BfaGludCk7CiAKLXZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9w
dWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpCi17Ci0gICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VLZXk7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewor
LyoKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2RlZmluZSBMTElOVF9P
UF9FWFRSQVModmFsaWRhdGVMYWJlbCwgbmFtZVN0cikgYml0d2lzZV9jYXN0PHZvaWQqPih2YWxp
ZGF0ZUxhYmVsKSwgbmFtZVN0cgorI2Vsc2UKKyNkZWZpbmUgTExJTlRfT1BfRVhUUkFTKHZhbGlk
YXRlTGFiZWwsIG5hbWVTdHIpIG5hbWVTdHIKKyNlbmRpZgorCisjZGVmaW5lIExMSU5UX1JPVVRJ
TkUoZnVuY3Rpb25OYW1lKSB7IFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6
Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4oZnVuY3Rpb25OYW1lKSksIFwKKyAg
ICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1l
KSwgI2Z1bmN0aW9uTmFtZSkgXAorICAgIH0sCisKKyNkZWZpbmUgTExJTlRfT1AobmFtZSkgeyBc
CisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAgICAgICBMTElOVF9PUF9FWFRSQVMoTExJTlRf
UkVUVVJOX1ZBTElEQVRFKG5hbWUpLCAjbmFtZSkgXAorICAgIH0sIHsgXAorICAgICAgICBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JFVFVSTl9X
SURFMTZfVkFMSURBVEUobmFtZSksICNuYW1lICIgW3dpZGUxNl0iKSBcCisgICAgfSwgeyBcCisg
ICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUzMkNvZGVGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAgICAgICBMTElOVF9PUF9FWFRSQVMoTExJ
TlRfUkVUVVJOX1dJREUzMl9WQUxJREFURShuYW1lKSwgI25hbWUgIiBbd2lkZTMyXSIpIFwKKyAg
ICB9LAorKi8KIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjZGVmaW5l
IExMSU5UX1JPVVRJTkUoZnVuY3Rpb25OYW1lKSB7IFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZv
aWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4oZnVuY3Rpb25O
YW1lKSksIFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9ST1VUSU5FX1ZBTElE
QVRFKGZ1bmN0aW9uTmFtZSkpLCAjZnVuY3Rpb25OYW1lIFwKKyAgICB9LAorCisjZGVmaW5lIExM
SU5UX09QKG5hbWUpIHsgXAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRD
b2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgYml0d2lz
ZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fVkFMSURBVEUobmFtZSkpLCAjbmFtZSBcCisgICAg
fSwgeyBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUxNkNvZGVG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAgICAgICBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9XSURFMTZfVkFMSURBVEUobmFtZSkpLCAjbmFtZSAiIFt3
aWRlMTZdIiBcCisgICAgfSwgeyBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6
OmdldFdpZGUzMkNvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAg
ICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9XSURFMzJfVkFMSURBVEUobmFt
ZSkpLCAjbmFtZSAiIFt3aWRlMzJdIiBcCisgICAgfSwKKyNlbHNlIC8vIG5vdCBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKQogI2RlZmluZSBMTElOVF9ST1VUSU5FKGZ1bmN0aW9uTmFt
ZSkgeyBcCiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KGZ1bmN0aW9uTmFtZSkpLCBcCi0gICAgICAgIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oTExJTlRfUk9VVElORV9WQUxJREFURShmdW5jdGlvbk5hbWUpKSBcCisgICAg
ICAgICNmdW5jdGlvbk5hbWUgXAogICAgIH0sCiAKICNkZWZpbmUgTExJTlRfT1AobmFtZSkgeyBc
CiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExM
SU5UX1JFVFVSTl9WQUxJREFURShuYW1lKSkgXAorICAgICAgICAjbmFtZSBcCiAgICAgfSwgeyBc
CiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUxNkNvZGVGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KExMSU5UX1JFVFVSTl9XSURFMTZfVkFMSURBVEUobmFtZSkpIFwKKyAgICAgICAgI25hbWUg
IiBbd2lkZTE2XSIgXAogICAgIH0sIHsgXAogICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExM
SW50OjpnZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwK
LSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lERTMyX1ZBTElEQVRF
KG5hbWUpKSBcCisgICAgICAgICNuYW1lICIgW3dpZGUzMl0iIFwKICAgICB9LAorI2VuZGlmIC8v
IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKICNkZWZpbmUgTExJTlRfUkVUVVJO
X0xPQ0FUSU9OKG5hbWUsIC4uLikgXAogICAgIExMSU5UX09QKG5hbWUjI19yZXR1cm5fbG9jYXRp
b24pCiAKLSAgICAgICAgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBvcGVyYXRpb25zW10g
PSB7CitzdHJ1Y3QgTExJbnRPcGVyYXRpb25zIHsKKyAgICBjb25zdCBKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uKiBvcGVyYXRpb25zOworICAgIHNpemVfdCBudW1iZXJPZk9wZXJhdGlvbnM7Cit9Owor
CitzdGF0aWMgTExJbnRPcGVyYXRpb25zIGxsaW50T3BlcmF0aW9ucygpCit7CisgICAgc3RhdGlj
IGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIG9wZXJhdGlvbnMgPSBudWxscHRyOworICAg
IHN0YXRpYyBzaXplX3QgbnVtYmVyT2ZPcGVyYXRpb25zID0gMDsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbJl0geworICAg
ICAgICBzdGF0aWMgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBvcGVyYXRpb25zU3RvcmFn
ZVtdID0gewogICAgICAgICAgICAgTExJTlRfUk9VVElORShsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJTkUobGxpbnRfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJTkUobGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spCkBAIC0xNjAsMjEgKzIxNiw5OCBAQCB2b2lkIEpJ
VE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJCiAgICAgICAgICAgICBKU0NfSlNfR0FU
RV9PUENPREVTKExMSU5UX1JFVFVSTl9MT0NBVElPTikKICAgICAgICAgICAgIEpTQ19XQVNNX0dB
VEVfT1BDT0RFUyhMTElOVF9SRVRVUk5fTE9DQVRJT04pCiAgICAgICAgIH07Ci0gICAgICAgIGlm
IChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGppdE9wZXJhdGlvbkxpc3QtPmFkZFBv
aW50ZXJzKG9wZXJhdGlvbnMsIG9wZXJhdGlvbnMgKyBXVEZfQVJSQVlfTEVOR1RIKG9wZXJhdGlv
bnMpKTsKKyAgICAgICAgb3BlcmF0aW9ucyA9IG9wZXJhdGlvbnNTdG9yYWdlOworICAgICAgICBu
dW1iZXJPZk9wZXJhdGlvbnMgPSBXVEZfQVJSQVlfTEVOR1RIKG9wZXJhdGlvbnNTdG9yYWdlKTsK
KyAgICB9KTsKKyAgICByZXR1cm4geyBvcGVyYXRpb25zLCBudW1iZXJPZk9wZXJhdGlvbnMgfTsK
K30KKwogI3VuZGVmIExMSU5UX1JPVVRJTkUKICN1bmRlZiBMTElOVF9PUAogI3VuZGVmIExMSU5U
X1JFVFVSTl9MT0NBVElPTgorI3VuZGVmIExMSU5UX09QX0VYVFJBUworCisjaWYgRU5BQkxFKEpJ
VF9PUEVSQVRJT05fVkFMSURBVElPTikKKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0
ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgeworICAgICAgICAgICAgYXV0byBsaXN0ID0gbGxp
bnRPcGVyYXRpb25zKCk7CisgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2ludGVy
cyhsaXN0Lm9wZXJhdGlvbnMsIGxpc3Qub3BlcmF0aW9ucyArIGxpc3QubnVtYmVyT2ZPcGVyYXRp
b25zKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpuZWVkRGlz
YXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICAgICAgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxh
dGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpOwogICAgIH0pOwog
fQogCi0KIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luRW1iZWRkZXIo
Y29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRP
cGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKQogewogICAgIGlmIChPcHRpb25zOjp1
c2VKSVQoKSkKICAgICAgICAgaml0T3BlcmF0aW9uTGlzdC0+YWRkUG9pbnRlcnMoYmVnaW5PcGVy
YXRpb25zLCBlbmRPcGVyYXRpb25zKTsKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFU
SU9OX1ZBTElEQVRJT04pCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElP
TikgfHwgKEVOQUJMRShESVNBU1NFTUJMRVIpICYmIENQVShBUk02NEUpKQorCitTVVBQUkVTU19B
U0FOIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6YWRkRGlzYXNzZW1ibHlMYWJlbHMoY29uc3QgSklU
T3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW4sIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24q
IGVuZCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjRFKQorICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSk7CisgICAgZm9y
IChjb25zdCBhdXRvKiBjdXJyZW50ID0gYmVnaW47IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
IHsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorICAgICAgICBhdXRvKiBv
cGVyYXRpb24gPSBjdXJyZW50LT5vcGVyYXRpb25XaXRoVmFsaWRhdGlvbjsKKyNlbHNlCisgICAg
ICAgIGF1dG8qIG9wZXJhdGlvbiA9IGN1cnJlbnQtPm9wZXJhdGlvbjsKKyNlbmRpZgorICAgICAg
ICByZWdpc3RlckxhYmVsKHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uKSwgY3VycmVudC0+bmFt
ZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYmVnaW4pOworICAgIFVOVVNFRF9Q
QVJBTShlbmQpOworI2VuZGlmIC8vIEVOQUJMRShESVNBU1NFTUJMRVIpICYmIENQVShBUk02NEUp
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFC
TEUoRElTQVNTRU1CTEVSKQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNz
ZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlKCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVS
KSAmJiBDUFUoQVJNNjRFKQorICAgIEFTU0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBw
b3J0KCkpOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAg
ICAgICAgICAgaml0T3BlcmF0aW9uTGlzdC0+YWRkRGlzYXNzZW1ibHlMYWJlbHMoJnN0YXJ0T2ZK
SVRPcGVyYXRpb25zSW5KU0MsICZlbmRPZkpJVE9wZXJhdGlvbnNJbkpTQyk7CisgICAgfSk7Cisj
ZW5kaWYKK30KKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFi
ZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVS
KSAmJiBDUFUoQVJNNjRFKQorICAgIEFTU0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBw
b3J0KCkpOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7Cisg
ICAgICAgICAgICBhdXRvIGxpc3QgPSBsbGludE9wZXJhdGlvbnMoKTsKKyAgICAgICAgICAgIGpp
dE9wZXJhdGlvbkxpc3QtPmFkZERpc2Fzc2VtYmx5TGFiZWxzKGxpc3Qub3BlcmF0aW9ucywgbGlz
dC5vcGVyYXRpb25zICsgbGlzdC5udW1iZXJPZk9wZXJhdGlvbnMpOworICAgICAgICB9CisgICAg
fSk7CisjZW5kaWYKK30KKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2Vt
Ymx5TGFiZWxzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9w
ZXJhdGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpCit7
CisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikgJiYgQ1BVKEFSTTY0RSkKKyAgICBpZiAoTElLRUxZ
KCFPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRE
aXNhc3NlbWJseUxhYmVscyhiZWdpbk9wZXJhdGlvbnMsIGVuZE9wZXJhdGlvbnMpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oYmVnaW5PcGVyYXRpb25zKTsKKyAgICBVTlVTRURfUEFSQU0oZW5k
T3BlcmF0aW9ucyk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAko
cmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRP
cGVyYXRpb25MaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uOworCiAjaWYgRU5B
QkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIAogLy8gVGhpcyBpbmRpcmVjdGlvbiBpcyBw
cm92aWRlZCBzbyB0aGF0IHdlIGNhbiBtYW51YWxseSBmb3JjZSBvbiBhc3NlcnRpb25zIGZvcgog
Ly8gdGVzdGluZyBldmVuIG9uIHJlbGVhc2UgYnVpbGRzLgogI2RlZmluZSBKSVRfT1BFUkFUSU9O
X1ZBTElEQVRJT05fQVNTRVJUX0VOQUJMRUQgQVNTRVJUX0VOQUJMRUQKIAotc3RydWN0IEpJVE9w
ZXJhdGlvbkFubm90YXRpb247Ci0KIGNsYXNzIEpJVE9wZXJhdGlvbkxpc3QgewogcHVibGljOgog
ICAgIHN0YXRpYyBKSVRPcGVyYXRpb25MaXN0JiBpbnN0YW5jZSgpOwpAQCAtNjQsNiArNjQsOCBA
QCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBv
aW50ZXJzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9wZXJh
dGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpOwogCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVs
c0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25z
LCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKTsKKwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklUT3BlcmF0aW9uKFQgZnVu
Y3Rpb24pCiAgICAgewogICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb24pOwpAQCAtODEsNyAr
ODMsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBwb3B1
bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgpOworICAgIHN0YXRpYyB2b2lk
IHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKTsKKwog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGRQb2ludGVycyhjb25zdCBKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kKTsKKyAgICB2
b2lkIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJl
Z2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpOwogCiAjaWYgSklUX09QRVJB
VElPTl9WQUxJREFUSU9OX0FTU0VSVF9FTkFCTEVECiAgICAgdm9pZCBhZGRJbnZlcnNlTWFwKHZv
aWQqIHZhbGlkYXRpb25FbnRyeSwgdm9pZCogcG9pbnRlcik7CkBAIC0xMDYsMTEgKzExMiwyNyBA
QCBjbGFzcyBKSVRPcGVyYXRpb25MaXN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplKCkgeyB9CiAKLSAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2Ny
aXB0Q29yZSgpIHsgfQotICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3Jp
cHRDb3JlRm9yTExJbnQoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5K
YXZhU2NyaXB0Q29yZSgpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVl
ZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgICAgIHBvcHVsYXRlRGlzYXNzZW1ibHlM
YWJlbHNJbkphdmFTY3JpcHRDb3JlKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRl
UG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKQorICAgIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgICAgICBw
b3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCk7CisgICAg
fQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJs
eUxhYmVsc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVy
YXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklUT3BlcmF0aW9u
KFQpIHsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklU
T3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oVCkgeyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZv
aWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmUoKTsKKyAgICBzdGF0
aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50
KCk7CisKKyAgICB2b2lkIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFu
bm90YXRpb24qIGJlZ2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpOwogfTsK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvblZhbGlkYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvblZh
bGlkYXRpb24uaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsMTMgKzQ3
LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKLQogc3RydWN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24gewogICAgIHZvaWQqIG9w
ZXJhdGlvbjsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogICAgIHZvaWQq
IG9wZXJhdGlvbldpdGhWYWxpZGF0aW9uOworI2VuZGlmCisgICAgY29uc3QgY2hhciogbmFtZTsK
IH07CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiAjaWZuZGVmIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTgogI2RlZmluZSBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OX1ZBTElEQVRJT04oZnVuY3Rpb25OYW1lKQogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9u
IDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEzICs4MiwxNCBAQCBMaW5rQnVmZmVyOjpDb2RlUmVm
PExpbmtCdWZmZXJQdHJUYWc+IExpCiAgICAgICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSB2c25w
cmludGYobnVsbHB0ciwgMCwgZm9ybWF0LCBwcmVmbGlnaHRBcmdzKTsKICAgICAgICAgdmFfZW5k
KHByZWZsaWdodEFyZ3MpOwogCisgICAgICAgIGNvbnN0IGNoYXIgcHJlZml4W10gPSAidGh1bms6
ICI7CiAgICAgICAgIGNoYXIqIGJ1ZmZlciA9IDA7Ci0gICAgICAgIENTdHJpbmcgbGFiZWwgPSBD
U3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKHN0cmluZ0xlbmd0aCArIDEsIGJ1ZmZlcik7Ci0gICAg
ICAgIHZzbnByaW50ZihidWZmZXIsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7
Ci0gICAgICAgIGJ1ZmZlcltzdHJpbmdMZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgQ1N0cmluZyBs
YWJlbCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoc3RyaW5nTGVuZ3RoICsgc2l6ZW9mKHBy
ZWZpeCksIGJ1ZmZlcik7CisgICAgICAgIHN0cm5jcHkoYnVmZmVyLCBwcmVmaXgsIHNpemVvZihw
cmVmaXgpKTsKKyAgICAgICAgdnNucHJpbnRmKGJ1ZmZlciArIHNpemVvZihwcmVmaXgpIC0gMSwg
c3RyaW5nTGVuZ3RoICsgMSwgZm9ybWF0LCBhcmdMaXN0KTsKICAgICAgICAgb3V0LnByaW50Zigi
JXMiLCBidWZmZXIpOwogCi0gICAgICAgIHJlZ2lzdGVyVGh1bmtMYWJlbChyZXN1bHQuY29kZSgp
LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSwgV1RGTW92ZShsYWJlbCkpOworICAgICAgICBy
ZWdpc3RlckxhYmVsKHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBX
VEZNb3ZlKGxhYmVsKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG91dC52cHJpbnRmKGZvcm1hdCwg
YXJnTGlzdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18xLmNwcAkocmV2
aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18xLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTkwMywxMCArOTAzLDggQEAgc3RhdGljIHZvaWQgcnVuKGNvbnN0
IGNoYXIqKQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKIAotI2lmIEVOQUJMRShKSVRfT1BF
UkFUSU9OX1ZBTElEQVRJT04pCiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0
aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMgX19hc20oInNlY3Rpb24kc3RhcnQkX19E
QVRBX0NPTlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5u
b3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMyBfX2FzbSgic2VjdGlvbiRlbmQkX19E
QVRBX0NPTlNUJF9fanNjX29wcyIpOwotI2VuZGlmCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKIHsKQEAgLTkzMCw3ICs5MjgsMTEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQogI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAgICAgSlNDOjpK
SVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9w
ZXJhdGlvbnNJblRlc3RCMywgJmVuZE9mSklUT3BlcmF0aW9uc0luVGVzdEIzKTsKICNlbmRpZgot
ICAgIAorI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCisgICAgaWYgKFVOTElLRUxZKEpTQzo6T3B0
aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlNDOjpKSVRPcGVyYXRp
b25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9w
ZXJhdGlvbnNJblRlc3RCMywgJmVuZE9mSklUT3BlcmF0aW9uc0luVGVzdEIzKTsKKyNlbmRpZgor
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSAyOyArK2kpIHsKICAgICAgICAgSlNDOjpP
cHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpID0gaTsKICAgICAgICAgcnVuKGZpbHRlcik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3Nl
bWJsZXIuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oIgorI2luY2x1ZGUgPHZhcmlhbnQ+CiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC0z
Niw4ICszNywyMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdXNpbmcgVGh1bmtMYWJlbE1hcCA9
IEhhc2hNYXA8dm9pZCosIENTdHJpbmc+OwotTGF6eU5ldmVyRGVzdHJveWVkPFRodW5rTGFiZWxN
YXA+IHRodW5rTGFiZWxNYXA7CituYW1lc3BhY2UgRGlzYXNzZW1ibGVyIHsKKwordXNpbmcgTGFi
ZWxNYXAgPSBIYXNoTWFwPHZvaWQqLCBzdGQ6OnZhcmlhbnQ8Q1N0cmluZywgY29uc3QgY2hhcio+
PjsKK0xhenlOZXZlckRlc3Ryb3llZDxMYWJlbE1hcD4gbGFiZWxNYXA7CisKK3N0YXRpYyBMYWJl
bE1hcCYgZW5zdXJlTGFiZWxNYXAoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
S2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgbGFiZWxNYXAu
Y29uc3RydWN0KCk7CisgICAgfSk7CisgICAgcmV0dXJuIGxhYmVsTWFwLmdldCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBEaXNhc3NlbWJsZXIKIAogdm9pZCBkaXNhc3NlbWJsZShjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6
ZSwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2RlRW5kLCBjb25zdCBjaGFyKiBwcmVmaXgsIFBy
aW50U3RyZWFtJiBvdXQpCiB7CkBAIC0xNTcsMjcgKzE3MSwyNSBAQCB2b2lkIHdhaXRGb3JBc3lu
Y2hyb25vdXNEaXNhc3NlbWJseSgpCiAgICAgYXN5bmNocm9ub3VzRGlzYXNzZW1ibGVyKCkud2Fp
dFVudGlsRW1wdHkoKTsKIH0KIAotc3RhdGljIFRodW5rTGFiZWxNYXAmIGVuc3VyZVRodW5rTGFi
ZWxNYXAoKQordm9pZCByZWdpc3RlckxhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYm
IGxhYmVsKQogewotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwotICAgIHN0ZDo6
Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKLSAgICAgICAgdGh1bmtMYWJlbE1hcC5jb25zdHJ1Y3Qo
KTsKLSAgICB9KTsKLSAgICByZXR1cm4gdGh1bmtMYWJlbE1hcC5nZXQoKTsKKyAgICBEaXNhc3Nl
bWJsZXI6OmVuc3VyZUxhYmVsTWFwKCkuYWRkKHRodW5rQWRkcmVzcywgV1RGTW92ZShsYWJlbCkp
OwogfQogCi12b2lkIHJlZ2lzdGVyVGh1bmtMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJp
bmcmJiBsYWJlbCkKK3ZvaWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiBhZGRyZXNzLCBjb25zdCBjaGFy
KiBsYWJlbCkKIHsKLSAgICBlbnN1cmVUaHVua0xhYmVsTWFwKCkuYWRkKHRodW5rQWRkcmVzcywg
V1RGTW92ZShsYWJlbCkpOworICAgIERpc2Fzc2VtYmxlcjo6ZW5zdXJlTGFiZWxNYXAoKS5hZGQo
YWRkcmVzcywgbGFiZWwpOwogfQogCi1jb25zdCBjaGFyKiBsYWJlbEZvclRodW5rKHZvaWQqIHRo
dW5rQWRkcmVzcykKK2NvbnN0IGNoYXIqIGxhYmVsRm9yKHZvaWQqIHRodW5rQWRkcmVzcykKIHsK
LSAgICBhdXRvJiBtYXAgPSBlbnN1cmVUaHVua0xhYmVsTWFwKCk7CisgICAgYXV0byYgbWFwID0g
RGlzYXNzZW1ibGVyOjplbnN1cmVMYWJlbE1hcCgpOwogICAgIGF1dG8gaXQgPSBtYXAuZmluZCh0
aHVua0FkZHJlc3MpOwogICAgIGlmIChpdCA9PSBtYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIHJldHVybiBpdC0+dmFsdWUuZGF0YSgpOworICAgIGlmIChzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPENTdHJpbmc+KGl0LT52YWx1ZSkpCisgICAgICAgIHJldHVybiBzdGQ6Omdl
dDxDU3RyaW5nPihpdC0+dmFsdWUpLmRhdGEoKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8Y29uc3Qg
Y2hhcio+KGl0LT52YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCShyZXZp
c2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fz
c2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw4IEBAIHZvaWQgZGlzYXNzZW1i
bGVBc3luY2hyb25vdXNseSgKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3YWl0Rm9yQXN5bmNo
cm9ub3VzRGlzYXNzZW1ibHkoKTsKIAotdm9pZCByZWdpc3RlclRodW5rTGFiZWwodm9pZCogdGh1
bmtBZGRyZXNzLCBDU3RyaW5nJiYgbGFiZWwpOwotY29uc3QgY2hhciogbGFiZWxGb3JUaHVuayh2
b2lkKiB0aHVua0FkZHJlc3MpOwordm9pZCByZWdpc3RlckxhYmVsKHZvaWQqIHRodW5rQWRkcmVz
cywgQ1N0cmluZyYmIGxhYmVsKTsKK3ZvaWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiB0aHVua0FkZHJl
c3MsIGNvbnN0IGNoYXIqIGxhYmVsKTsKK2NvbnN0IGNoYXIqIGxhYmVsRm9yKHZvaWQqIHRodW5r
QWRkcmVzcyk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwCShyZXZp
c2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0
L0E2NERPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTYgQEAKICNpbmNs
dWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAj
aW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIkludGVncml0eS5oIgorI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKICNpbmNsdWRlICJMTEludFBDUmFuZ2VzLmgiCisjaW5jbHVkZSAiUHVyZU5h
Ti5oIgorI2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgiCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5j
bHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvUHRyVGFn
Lmg+CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QVJNNjREaXNhc3NlbWJsZXIgewogCkBAIC0yMDEsMTIgKzIwNywxMiBAQCB2b2lkIEE2NERPcGNv
ZGU6OmFwcGVuZFBDUmVsYXRpdmVPZmZzZXQoCiAgICAgICAgIHRhcmdldEluZm8gPSAiIjsKICAg
ICBlbHNlIGlmICh0YXJnZXRQQyA+PSBtX3N0YXJ0UEMgJiYgdGFyZ2V0UEMgPCBtX2VuZFBDKQog
ICAgICAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlclNpemUgLSAxLCAiIC0+IDwldT4iLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oKHRhcmdldFBDIC0gbV9zdGFydFBDKSAqIHNpemVvZih1aW50MzJf
dCkpKTsKLSAgICBlbHNlIGlmIChjb25zdCBjaGFyKiB0aHVua0xhYmVsID0gbGFiZWxGb3JUaHVu
ayh0YXJnZXRQQykpCi0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyU2l6ZSAtIDEsICIg
LT4gPHRodW5rOiAlcz4iLCB0aHVua0xhYmVsKTsKKyAgICBlbHNlIGlmIChjb25zdCBjaGFyKiBs
YWJlbCA9IGxhYmVsRm9yKHRhcmdldFBDKSkKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBidWZm
ZXJTaXplIC0gMSwgIiAtPiAlcyIsIGxhYmVsKTsKICAgICBlbHNlIGlmIChpc0pJVFBDKHRhcmdl
dFBDKSkKLSAgICAgICAgdGFyZ2V0SW5mbyA9ICIgLT4gPEpJVCBQQz4iOworICAgICAgICB0YXJn
ZXRJbmZvID0gIiAtPiBKSVQgUEMiOwogICAgIGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEModGFy
Z2V0UEMpKQotICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiA8TExJbnQgUEM+IjsKKyAgICAgICAg
dGFyZ2V0SW5mbyA9ICIgLT4gTExJbnQgUEMiOwogICAgIGVsc2UKICAgICAgICAgdGFyZ2V0SW5m
byA9ICIgLT4gPHVua25vd24+IjsKIApAQCAtMTU3MCwxMiArMTU3NiwxMjcgQEAgY29uc3QgY2hh
ciogQTY0RE9wY29kZUxvZ2ljYWxJbW1lZGlhdGU6OgogCiBjb25zdCBjaGFyKiBjb25zdCBBNjRE
T3Bjb2RlTW92ZVdpZGU6OnNfb3BOYW1lc1s0XSA9IHsgIm1vdm4iLCAwLCAibW92eiIsICJtb3Zr
IiB9OwogCi1jb25zdCBjaGFyKiBBNjRET3Bjb2RlTW92ZVdpZGU6OmZvcm1hdCgpCitjbGFzcyBN
b3ZlV2lkZUZvcm1hdFRyYWl0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gY29u
c3QgY2hhcio7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHJldHVybkVhcmx5SWZBY2NlcHRl
ZCA9IGZhbHNlOworCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogcmVqZWN0
ZWRSZXN1bHQoQTY0RE9wY29kZU1vdmVXaWRlKiBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZS0+YmFz
ZUZvcm1hdCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogYWNjZXB0
ZWRSZXN1bHQoQTY0RE9wY29kZU1vdmVXaWRlKiBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZS0+Zm9y
bWF0QnVmZmVyKCk7IH0KK307CisKK2NsYXNzIE1vdmVXaWRlSXNWYWxpZFRyYWl0IHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gYm9vbDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgcmV0dXJuRWFybHlJZkFjY2VwdGVkID0gdHJ1ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCByZWplY3RlZFJlc3VsdChBNjRET3Bjb2RlTW92ZVdpZGUqKSB7IHJldHVybiBmYWxzZTsg
fQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBhY2NlcHRlZFJlc3VsdChBNjRET3Bjb2RlTW92
ZVdpZGUqKSB7IHJldHVybiB0cnVlOyB9Cit9OworCitib29sIEE2NERPcGNvZGVNb3ZlV2lkZTo6
aGFuZGxlUG90ZW50aWFsRGF0YVBvaW50ZXIodm9pZCogcHRyKQoreworICAgIEFTU0VSVChJbnRl
Z3JpdHk6OmlzU2FuZVBvaW50ZXIocHRyKSk7CisKKyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsK
KyAgICBWTUluc3BlY3Rvcjo6Zm9yRWFjaFZNKFsmXSAoVk0mIHZtKSB7CisgICAgICAgIGlmIChw
dHIgPT0gJnZtKSB7CisgICAgICAgICAgICBidWZmZXJQcmludGYoIiB2bSIpOworICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpE
b25lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF2bS5pc0luU2VydmljZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisKKyAgICAgICAgYXV0byog
dm1TdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ2bSk7CisgICAgICAgIGF1dG8q
IHZtRW5kID0gdm1TdGFydCArIHNpemVvZihWTSk7CisgICAgICAgIGF1dG8qIHU4UHRyID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocHRyKTsKKyAgICAgICAgUmFuZ2Ugdm1SYW5nZSh2bVN0
YXJ0LCB2bUVuZCk7CisgICAgICAgIGlmICh2bVJhbmdlLmNvbnRhaW5zKHU4UHRyKSkgeworICAg
ICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdThQdHIgLSB2bVN0YXJ0OworICAgICAgICAgICAg
YnVmZmVyUHJpbnRmKCIgdm0gKyV1Iiwgb2Zmc2V0KTsKKworICAgICAgICAgICAgY29uc3QgY2hh
ciogZGVzY3JpcHRpb24gPSBudWxscHRyOworICAgICAgICAgICAgaWYgKHB0ciA9PSAmdm0udG9w
Q2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnRvcENhbGxGcmFt
ZSI7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZzZXQgPT0gVk06OnRvcEVudHJ5RnJhbWVPZmZz
ZXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS50b3BFbnRyeUZyYW1lIjsK
KyAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNldCA9PSBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpCisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0ubV9leGNlcHRpb24iOworICAgICAgICAg
ICAgZWxzZSBpZiAob2Zmc2V0ID09IFZNOjpvZmZzZXRPZkhlYXBCYXJyaWVyVGhyZXNob2xkKCkp
CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0uaGVhcC5tX2JhcnJpZXJUaHJlc2hv
bGQiOworICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0ID09IFZNOjpjYWxsRnJhbWVGb3JDYXRj
aE9mZnNldCgpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLmNhbGxGcmFtZUZv
ckNhdGNoIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSB2bS5hZGRyZXNzT2ZTb2Z0U3Rh
Y2tMaW1pdCgpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1fc29mdFN0YWNr
TGltaXQiOworICAgICAgICAgICAgZWxzZSBpZiAocHRyID09ICZ2bS5vc3JFeGl0SW5kZXgpCisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAidm0ub3NyRXhpdEluZGV4IjsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHB0ciA9PSAmdm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlvbikKKyAgICAgICAg
ICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5vc3JFeGl0SnVtcERlc3RpbmF0aW9uIjsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHB0ciA9PSB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5ncygpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnNtYWxsU3RyaW5ncy5t
X3NpbmdsZUNoYXJhY3RlclN0cmluZ3MiOworICAgICAgICAgICAgZWxzZSBpZiAocHRyID09ICZ2
bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdykKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9
ICJ2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyI7CisgICAgICAgICAgICBlbHNlIGlmIChwdHIg
PT0gdm0udHJhcHMoKS50cmFwQml0c0FkZHJlc3MoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlw
dGlvbiA9ICJ2bS5tX3RyYXBzLm1fdHJhcEJpdHMiOworI2lmIEVOQUJMRShERkdfRE9FU19HQ19W
QUxJREFUSU9OKQorICAgICAgICAgICAgZWxzZSBpZiAocHRyID09IHZtLmFkZHJlc3NPZkRvZXNH
QygpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1fZG9lc0dDIjsKKyNlbmRp
ZgorICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgIGJ1ZmZlclBy
aW50ZigiOiAlcyIsIGRlc2NyaXB0aW9uKTsKKworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHZtLmlzU2NyYXRjaEJ1ZmZlcihwdHIpKSB7CisgICAgICAgICAgICBidWZm
ZXJQcmludGYoIiB2bSBzY3JhdGNoQnVmZmVyLm1fYnVmZmVyIik7CisgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAg
fSk7CisgICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisKKyNpZiBDUFUoQVJNNjRFKQorYm9vbCBBNjRE
T3Bjb2RlTW92ZVdpZGU6OmhhbmRsZVBvdGVudGlhbFB0clRhZyh1aW50cHRyX3QgdmFsdWUpCit7
CisgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA+IDB4ZmZmZikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUHRyVGFnIHRhZyA9IHN0YXRpY19jYXN0PFB0clRhZz4odmFsdWUpOworI2lmIEVO
QUJMRShQVFJUQUdfREVCVUdHSU5HKQorICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBXVEY6OnB0clRh
Z05hbWUodGFnKTsKKyAgICBpZiAobmFtZVswXSA9PSAnPCcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gT25seSByZXN1bHQgdGhhdCBzdGFydHMgd2l0aCAnPCcgaXMgIjx1bmtub3duPiIuCisj
ZWxzZQorICAgIC8vIFdpdGhvdXQgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpLCBub3QgYWxsIFB0
clRhZ3MgYXJlIHJlZ2lzdGVyZWRmIGZvcgorICAgIC8vIHByaW50aW5nLiBTbywgd2UnbGwganVz
dCBkbyB0aGUgbWluaW11bSB3aXRoIG9ubHkgdGhlIEpTQyBzcGVjaWZpYyB0YWdzLgorICAgIGNv
bnN0IGNoYXIqIG5hbWUgPSBwdHJUYWdOYW1lKHRhZyk7CisgICAgaWYgKCFuYW1lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIC8vIEFsc28gcHJpbnQgJz8nIHRvIGluZGlj
YXRlIHRoYXQgdGhpcyBpcyBhIG1heWJlLiBXZSBkbyBub3Qga25vdyBmb3IgY2VydGFpbgorICAg
IC8vIGlmIHRoZSBjb25zdGFudCBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGEgUHRyVGFnLgorICAg
IGJ1ZmZlclByaW50ZigiIC0+ICVwICVzID8iLCByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1
ZSksIG5hbWUpOworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFRyYWl0PgordHlwZW5hbWUgVHJhaXQ6OlJlc3VsdFR5cGUgQTY0RE9wY29kZU1vdmVXaWRl
OjpwYXJzZSgpCiB7CiAgICAgaWYgKG9wYygpID09IDEpCi0gICAgICAgIHJldHVybiBBNjRET3Bj
b2RlOjpmb3JtYXQoKTsKKyAgICAgICAgcmV0dXJuIFRyYWl0OjpyZWplY3RlZFJlc3VsdCh0aGlz
KTsKICAgICBpZiAoIWlzNjRCaXQoKSAmJiBodygpID49IDIpCi0gICAgICAgIHJldHVybiBBNjRE
T3Bjb2RlOjpmb3JtYXQoKTsKKyAgICAgICAgcmV0dXJuIFRyYWl0OjpyZWplY3RlZFJlc3VsdCh0
aGlzKTsKKworICAgIGlmIGNvbnN0ZXhwciAoVHJhaXQ6OnJldHVybkVhcmx5SWZBY2NlcHRlZCkK
KyAgICAgICAgcmV0dXJuIFRyYWl0OjphY2NlcHRlZFJlc3VsdCh0aGlzKTsKIAogICAgIGlmICgh
b3BjKCkgJiYgKCFpbW1lZGlhdGUxNigpIHx8ICFodygpKSAmJiAoaXM2NEJpdCgpIHx8IGltbWVk
aWF0ZTE2KCkgIT0gMHhmZmZmKSkgewogICAgICAgICAvLyBNT1YgcHNldWRvIG9wIGZvciBNT1ZO
CkBAIC0xNTg3LDEwICsxNzA4LDEyIEBAIGNvbnN0IGNoYXIqIEE2NERPcGNvZGVNb3ZlV2lkZTo6
Zm9ybWF0KCkKICAgICAgICAgICAgIGludDY0X3QgYW1vdW50ID0gaW1tZWRpYXRlMTYoKSA8PCAo
aHcoKSAqIDE2KTsKICAgICAgICAgICAgIGFtb3VudCA9IH5hbW91bnQ7CiAgICAgICAgICAgICBh
cHBlbmRTaWduZWRJbW1lZGlhdGU2NChhbW91bnQpOworICAgICAgICAgICAgbV9idWlsdENvbnN0
YW50ID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGFtb3VudCk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBpbnQzMl90IGFtb3VudCA9IGltbWVkaWF0ZTE2KCkgPDwgKGh3KCkgKiAxNik7
CiAgICAgICAgICAgICBhbW91bnQgPSB+YW1vdW50OwogICAgICAgICAgICAgYXBwZW5kU2lnbmVk
SW1tZWRpYXRlKGFtb3VudCk7CisgICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oYW1vdW50KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IGFwcGVuZEluc3RydWN0aW9uTmFtZShvcE5hbWUoKSk7CkBAIC0xNjAxLDExICsxNzI0LDY1IEBA
IGNvbnN0IGNoYXIqIEE2NERPcGNvZGVNb3ZlV2lkZTo6Zm9ybWF0KCkKICAgICAgICAgICAgIGFw
cGVuZFNlcGFyYXRvcigpOwogICAgICAgICAgICAgYXBwZW5kU2hpZnRBbW91bnQoaHcoKSk7CiAg
ICAgICAgIH0KLSAgICB9CiAKLSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7CisgICAgICAgIGlm
IChvcGMoKSA9PSAyKSAvLyBFbmNvZGluZyBmb3IgbW92egorICAgICAgICAgICAgbV9idWlsdENv
bnN0YW50ID0gMDsKKworICAgICAgICB1bnNpZ25lZCBzaGlmdCA9IGh3KCkgKiAxNjsKKyAgICAg
ICAgdWludHB0cl90IHZhbHVlID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihpbW1lZGlhdGUxNigp
KSA8PCBzaGlmdDsKKyAgICAgICAgdWludHB0cl90IG1hc2sgPSB+KHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oMHhmZmZmKSA8PCBzaGlmdCk7CisgICAgICAgIG1fYnVpbHRDb25zdGFudCAmPSBtYXNr
OworICAgICAgICBtX2J1aWx0Q29uc3RhbnQgfD0gdmFsdWU7CisgICAgfQorCisgICAgYXV0byBk
dW1wQ29uc3RhbnREYXRhID0gWyZdIHsKKyAgICAgICAgdWludDMyX3QqIG5leHRQQyA9IG1fY3Vy
cmVudFBDICsgMTsKKyAgICAgICAgaWYgKG5leHRQQyA+PSBtX2VuZFBDKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIEE2NERPcGNvZGUgbmV4dEJhc2VPcGNvZGUobV9zdGFydFBDLCBt
X2VuZFBDKTsKKyAgICAgICAgQTY0RE9wY29kZU1vdmVXaWRlJiBuZXh0T3Bjb2RlID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8QTY0RE9wY29kZU1vdmVXaWRlKj4oJm5leHRCYXNlT3Bjb2RlKTsKKyAgICAg
ICAgbmV4dE9wY29kZS5zZXRQQ0FuZE9wY29kZShuZXh0UEMsICpuZXh0UEMpOworCisgICAgICAg
IGJvb2wgbmV4dElzTW92ZVdpZGVHcm91cCA9IG9wY29kZUdyb3VwTnVtYmVyKG1fb3Bjb2RlKSA9
PSBvcGNvZGVHcm91cE51bWJlcigqbmV4dFBDKTsKKworICAgICAgICBpZiAobmV4dElzTW92ZVdp
ZGVHcm91cCAmJiBuZXh0T3Bjb2RlLmlzVmFsaWQoKSAmJiBuZXh0T3Bjb2RlLnJkKCkgPT0gcmQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2b2lkKiBwdHIgPSByZW1vdmVDb2Rl
UHRyVGFnKGJpdHdpc2VfY2FzdDx2b2lkKj4obV9idWlsdENvbnN0YW50KSk7CisgICAgICAgIGlm
ICghcHRyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChJbnRlZ3JpdHk6Omlz
U2FuZVBvaW50ZXIocHRyKSkgeworICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgLT4gJXAiLCBw
dHIpOworICAgICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIGxhYmVsID0gbGFiZWxGb3IocHRyKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyUHJpbnRmKCIgJXMiLCBsYWJlbCk7CisgICAg
ICAgICAgICBpZiAoaXNKSVRQQyhwdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJQ
cmludGYoIiBKSVQgUEMiKTsKKyAgICAgICAgICAgIGlmIChMTEludDo6aXNMTEludFBDKHB0cikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclByaW50ZigiIExMSW50IFBDIik7CisgICAg
ICAgICAgICBoYW5kbGVQb3RlbnRpYWxEYXRhUG9pbnRlcihwdHIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgaWYgKGhhbmRsZVBvdGVu
dGlhbFB0clRhZyhtX2J1aWx0Q29uc3RhbnQpKQorICAgICAgICAgICAgcmV0dXJuOworI2VuZGlm
CisgICAgICAgIGlmIChtX2J1aWx0Q29uc3RhbnQgPCAweDEwMDAwKQorICAgICAgICAgICAgYnVm
ZmVyUHJpbnRmKCIgLT4gJXUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9idWlsdENvbnN0YW50
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIC0+ICVwIiwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4obV9idWlsdENvbnN0YW50KSk7CisgICAgfTsKKworICAgIGlm
IChtX3N0YXJ0UEMpCisgICAgICAgIGR1bXBDb25zdGFudERhdGEoKTsKKworICAgIHJldHVybiBU
cmFpdDo6YWNjZXB0ZWRSZXN1bHQodGhpcyk7CiB9CiAKK2NvbnN0IGNoYXIqIEE2NERPcGNvZGVN
b3ZlV2lkZTo6Zm9ybWF0KCkgeyByZXR1cm4gcGFyc2U8TW92ZVdpZGVGb3JtYXRUcmFpdD4oKTsg
fQorYm9vbCBBNjRET3Bjb2RlTW92ZVdpZGU6OmlzVmFsaWQoKSB7IHJldHVybiBwYXJzZTxNb3Zl
V2lkZUlzVmFsaWRUcmFpdD4oKTsgfQorCiBjb25zdCBjaGFyKiBBNjRET3Bjb2RlVGVzdEFuZEJy
YW5jaEltbWVkaWF0ZTo6Zm9ybWF0KCkKIHsKICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BC
aXQoKSA/ICJ0Ym56IiA6ICJ0YnoiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNh
c3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5oCShyZXZpc2lvbiAyOTQyMjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAg
YnVmZmVyUHJpbnRmKCJsc2wgIyV1IiwgMTYgKiBhbW91bnQpOwogICAgIH0KIAotICAgIHN0YXRp
YyBjb25zdGV4cHIgaW50IGJ1ZmZlclNpemUgPSA4MTsKKyAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBidWZmZXJTaXplID0gMTAxOwogCiAgICAgY2hhciBtX2Zvcm1hdEJ1ZmZlcltidWZmZXJTaXpl
XTsKICAgICB1aW50MzJfdCogbV9zdGFydFBDOwpAQCAtMjAyLDYgKzIwMiw3IEBAIHByb3RlY3Rl
ZDoKICAgICB1aW50MzJfdCogbV9jdXJyZW50UEM7CiAgICAgdWludDMyX3QgbV9vcGNvZGU7CiAg
ICAgaW50IG1fYnVmZmVyT2Zmc2V0OworICAgIHVpbnRwdHJfdCBtX2J1aWx0Q29uc3RhbnQgeyAw
IH07CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIE9wY29kZUdyb3VwKiBvcGNvZGVUYWJsZVszMl07
CkBAIC04NzIsMTEgKzg3MywyNCBAQCBwdWJsaWM6CiAgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQo
QTY0RE9wY29kZU1vdmVXaWRlLCB0aGlzT2JqKTsKIAogICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgp
OworICAgIGJvb2wgaXNWYWxpZCgpOwogCiAgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1
cm4gc19vcE5hbWVzW29wYygpXTsgfQogICAgIHVuc2lnbmVkIG9wYygpIHsgcmV0dXJuIChtX29w
Y29kZSA+PiAyOSkgJiAweDM7IH0KICAgICB1bnNpZ25lZCBodygpIHsgcmV0dXJuIChtX29wY29k
ZSA+PiAyMSkgJiAweDM7IH0KICAgICB1bnNpZ25lZCBpbW1lZGlhdGUxNigpIHsgcmV0dXJuICht
X29wY29kZSA+PiA1KSAmIDB4ZmZmZjsgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFRyYWl0PiB0eXBlbmFtZSBUcmFpdDo6UmVzdWx0VHlwZSBwYXJzZSgpOworICAgIGJvb2wg
aGFuZGxlUG90ZW50aWFsRGF0YVBvaW50ZXIodm9pZCopOworICAgIGJvb2wgaGFuZGxlUG90ZW50
aWFsUHRyVGFnKHVpbnRwdHJfdCk7CisKKyAgICAvLyBUaGVzZSBmb3J3YXJkaW5nIGZ1bmN0aW9u
cyBhcmUgbmVlZGVkIGZvciBNb3ZlV2lkZUZvcm1hdFRyYWl0IG9ubHkuCisgICAgY29uc3QgY2hh
ciogYmFzZUZvcm1hdCgpIHsgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1hdCgpOyB9CisgICAgY29u
c3QgY2hhciogZm9ybWF0QnVmZmVyKCkgeyByZXR1cm4gbV9mb3JtYXRCdWZmZXI7IH0KKworICAg
IGZyaWVuZCBjbGFzcyBNb3ZlV2lkZUZvcm1hdFRyYWl0OworICAgIGZyaWVuZCBjbGFzcyBNb3Zl
V2lkZUlzVmFsaWRUcmFpdDsKIH07CiAKIGNsYXNzIEE2NERPcGNvZGVUZXN0QW5kQnJhbmNoSW1t
ZWRpYXRlIDogcHVibGljIEE2NERPcGNvZGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDUHRyVGFnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NQdHJUYWcuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYs
OCArMzYsMTkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBDUFUoQVJNNjRFKSAmJiBFTkFC
TEUoUFRSVEFHX0RFQlVHR0lORykKKyNpZiBDUFUoQVJNNjRFKQorCitjb25zdCBjaGFyKiBwdHJU
YWdOYW1lKFB0clRhZyB0YWcpCit7CisjZGVmaW5lIFJFVFVSTl9QVFJUQUdfTkFNRShfdGFnTmFt
ZSwgY2FsbGVlVHlwZSwgY2FsbGVyVHlwZSkgY2FzZSBfdGFnTmFtZTogcmV0dXJuICNfdGFnTmFt
ZTsKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0YWcpKSB7CisgICAgICAgIEZP
Ul9FQUNIX0pTQ19QVFJUQUcoUkVUVVJOX1BUUlRBR19OQU1FKQorICAgIH0KKyN1bmRlZiBSRVRV
Uk5fUFRSVEFHX05BTUUKKyAgICByZXR1cm4gbnVsbHB0cjsgLy8gTWF0Y2hpbmcgdGFnIG5vdCBm
b3VuZC4KK30KIAorI2lmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQogc3RhdGljIGNvbnN0IGNo
YXIqIHRhZ0ZvclB0cihjb25zdCB2b2lkKiBwdHIpCiB7CiAjZGVmaW5lIFJFVFVSTl9OQU1FX0lG
X1RBR19NQVRDSEVTKHRhZywgY2FsbGVlVHlwZSwgY2FsbGVyVHlwZSkgXApAQCAtNTAsMjQgKzYx
LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB0YWdGb3JQdHIoY29uc3Qgdm9pZCoKICAgICByZXR1
cm4gbnVsbHB0cjsgLy8gTWF0Y2hpbmcgdGFnIG5vdCBmb3VuZC4KIH0KIAotc3RhdGljIGNvbnN0
IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFnIHRhZykKLXsKLSNkZWZpbmUgUkVUVVJOX1BUUlRBR19O
QU1FKF90YWdOYW1lLCBjYWxsZWVUeXBlLCBjYWxsZXJUeXBlKSBjYXNlIF90YWdOYW1lOiByZXR1
cm4gI190YWdOYW1lOwotICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRhZykpIHsK
LSAgICAgICAgRk9SX0VBQ0hfSlNDX1BUUlRBRyhSRVRVUk5fUFRSVEFHX05BTUUpCi0gICAgfQot
I3VuZGVmIFJFVFVSTl9QVFJUQUdfTkFNRQotICAgIHJldHVybiBudWxscHRyOyAvLyBNYXRjaGlu
ZyB0YWcgbm90IGZvdW5kLgotfQotCiB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29rdXAoKQogewog
ICAgIFdURjo6UHRyVGFnTG9va3VwJiBsb29rdXAgPSBnX2pzY0NvbmZpZy5wdHJUYWdMb29rdXBS
ZWNvcmQ7CiAgICAgbG9va3VwLmluaXRpYWxpemUodGFnRm9yUHRyLCBwdHJUYWdOYW1lKTsKICAg
ICBXVEY6OnJlZ2lzdGVyUHRyVGFnTG9va3VwKCZsb29rdXApOwogfQotCi0jZW5kaWYgLy8gQ1BV
KEFSTTY0RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFBU
UlRBR19ERUJVR0dJTkcpCisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkKIAogI2lmIENQVShBUk02NEUp
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCShyZXZp
c2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0OCw2ICsyNDgsMTAgQEAgdm9pZCBpbml0aWFsaXplUHRy
VGFnTG9va3VwKCk7CiBpbmxpbmUgdm9pZCBpbml0aWFsaXplUHRyVGFnTG9va3VwKCkgeyB9CiAj
ZW5kaWYKIAorI2lmIENQVShBUk02NEUpCitjb25zdCBjaGFyKiBwdHJUYWdOYW1lKFB0clRhZyk7
CisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiBuYW1lc3BhY2Ug
V1RGIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJ
KHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjUsMTAgKzQ2NSwxOCBAQCB2b2lkIE9wdGlvbnM6
OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoCiAgICAgaWYgKCFPcHRpb25zOjp1c2VXZWJBc3Nl
bWJseSgpKQogICAgICAgICBPcHRpb25zOjp1c2VGYXN0VExTRm9yV2FzbUNvbnRleHQoKSA9IGZh
bHNlOwogICAgIAotICAgIGlmIChPcHRpb25zOjpsb2dKSVQoKQotICAgICAgICB8fCBPcHRpb25z
OjpkdW1wRGlzYXNzZW1ibHkoKQorICAgIGlmIChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKQor
ICAgICAgICB8fCBPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCkKICAgICAgICAgfHwgT3B0aW9u
czo6ZHVtcERGR0Rpc2Fzc2VtYmx5KCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEZUTERpc2Fz
c2VtYmx5KCkKKyAgICAgICAgfHwgT3B0aW9uczo6ZHVtcFJlZ0V4cERpc2Fzc2VtYmx5KCkKKyAg
ICAgICAgfHwgT3B0aW9uczo6ZHVtcFdhc21EaXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlv
bnM6OmR1bXBCQlFEaXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBPTUdEaXNh
c3NlbWJseSgpKQorICAgICAgICBPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkgPSB0
cnVlOworCisgICAgaWYgKE9wdGlvbnM6OmxvZ0pJVCgpCisgICAgICAgIHx8IE9wdGlvbnM6Om5l
ZWREaXNhc3NlbWJseVN1cHBvcnQoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wQnl0ZWNvZGVB
dERGR1RpbWUoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpCiAg
ICAgICAgIHx8IE9wdGlvbnM6OmR1bXBERkdHcmFwaEF0RWFjaFBoYXNlKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjk0MjIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI3LDYgKzEyNyw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVt
b3J5KCk7CiAgICAgXAogICAgIHYoQm9vbCwgdXNlT1NMb2csIGZhbHNlLCBOb3JtYWwsICJMb2cg
ZGF0YUxvZygpcyB0byBvc19sb2cgaW5zdGVhZCBvZiBzdGRlcnIiKSBcCiAgICAgLyogZHVtcERp
c2Fzc2VtYmx5IGltcGxpZXMgZHVtcERGR0Rpc2Fzc2VtYmx5LiAqLyBcCisgICAgdihCb29sLCBu
ZWVkRGlzYXNzZW1ibHlTdXBwb3J0LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihC
b29sLCBkdW1wRGlzYXNzZW1ibHksIGZhbHNlLCBOb3JtYWwsICJkdW1wcyBkaXNhc3NlbWJseSBv
ZiBhbGwgSklUIGNvbXBpbGVkIGNvZGUgdXBvbiBjb21waWxhdGlvbiIpIFwKICAgICB2KEJvb2ws
IGFzeW5jRGlzYXNzZW1ibHksIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2ws
IGxvZ0pJVCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA5LDYgKzE0MDksMTYgQEAg
dm9pZCBWTTo6Y2xlYXJTY3JhdGNoQnVmZmVycygpCiAgICAgICAgIHNjcmF0Y2hCdWZmZXItPnNl
dEFjdGl2ZUxlbmd0aCgwKTsKIH0KIAorYm9vbCBWTTo6aXNTY3JhdGNoQnVmZmVyKHZvaWQqIHB0
cikKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9zY3JhdGNoQnVmZmVyTG9jayB9OworICAgIGZv
ciAoYXV0byogc2NyYXRjaEJ1ZmZlciA6IG1fc2NyYXRjaEJ1ZmZlcnMpIHsKKyAgICAgICAgaWYg
KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSA9PSBwdHIpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFZNOjplbnN1cmVTaGFk
b3dDaGlja2VuKCkKIHsKICAgICBpZiAobV9zaGFkb3dDaGlja2VuKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC02ODUsNiArNjg1LDcgQEAgcHVi
bGljOgogICAgIC8vIC0gWW91IGNhbiBvbmx5IHdyaXRlIHRvIGVudHJpZXMgaW4gdGhlIFNjcmF0
Y2hCdWZmZXIgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlckZvclNpemUoc2l6ZV90IHNpemUpOwogICAgIHZvaWQgY2xlYXJTY3JhdGNoQnVmZmVy
cygpOworICAgIGJvb2wgaXNTY3JhdGNoQnVmZmVyKHZvaWQqKTsKIAogICAgIEVuY29kZWRKU1Zh
bHVlKiBleGNlcHRpb25GdXp6aW5nQnVmZmVyKHNpemVfdCBzaXplKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgJKHJldmlzaW9uIDI5NDIyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHkuaAkod29ya2luZyBjb3B5KQpA
QCAtOTYsNyArOTYsOCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlzU2FuZVBvaW50ZXIo
CiAgICAgdWludHB0cl90IHBvaW50ZXJBc0ludCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHBv
aW50ZXIpOwogICAgIHVpbnRwdHJfdCBjYW5vbmljYWxQb2ludGVyQml0cyA9IHBvaW50ZXJBc0lu
dCA8PCAoNjQgLSBPU19DT05TVEFOVChFRkZFQ1RJVkVfQUREUkVTU19XSURUSCkpOwogICAgIHVp
bnRwdHJfdCBub25DYW5vbmljYWxQb2ludGVyQml0cyA9IHBvaW50ZXJBc0ludCA+PiBPU19DT05T
VEFOVChFRkZFQ1RJVkVfQUREUkVTU19XSURUSCk7Ci0gICAgcmV0dXJuICFub25DYW5vbmljYWxQ
b2ludGVyQml0cyAmJiBjYW5vbmljYWxQb2ludGVyQml0czsKKyAgICB1aW50cHRyX3QgbG93ZXI0
RyA9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IDMyKSAtIDE7CisgICAgcmV0dXJuICFu
b25DYW5vbmljYWxQb2ludGVyQml0cyAmJiBjYW5vbmljYWxQb2ludGVyQml0cyAmJiBwb2ludGVy
QXNJbnQgPiBsb3dlcjRHOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocG9pbnRlcik7CiAgICAg
cmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNhbGxpbmdDb252ZW50
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ2FsbGluZ0NvbnZl
bnRpb25zLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ2Fs
bGluZ0NvbnZlbnRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgpAQCAtODQsOSArODQsMjQgQEAKICNkZWZpbmUgSklUX09QRVJBVElP
Tl9BVFRSSUJVVEVTCiAjZW5kaWYKIAorLyoKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQorI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9FWFRSQVModmFsaWRh
dGVGdW5jdGlvbiwgbmFtZSkgKHZvaWQqKXZhbGlkYXRlRnVuY3Rpb24sIG5hbWUKKyNlbHNlCisj
ZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0VYVFJBUyh2YWxpZGF0ZUZ1bmN0aW9u
LCBuYW1lKSBuYW1lCisjZW5kaWYKKwogI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElP
Tl9JTlRFUk5BTChmdW5jdGlvbikgXAotICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlvbkFu
bm90YXRpb24gX0pJVFRhcmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwgc2Vj
dGlvbigiX19EQVRBX0NPTlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwgKHZv
aWQqKWZ1bmN0aW9uIyNWYWxpZGF0ZSB9OworICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlv
bkFubm90YXRpb24gX0pJVFRhcmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwg
c2VjdGlvbigiX19EQVRBX0NPTlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwg
SlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fRVhUUkFTKGZ1bmN0aW9uIyNWYWxpZGF0ZSwgI2Z1
bmN0aW9uKSB9OworKi8KKworI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisj
ZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKSBcCisg
ICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBfSklUVGFyZ2V0SURfIyNm
dW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9uKCJfX0RBVEFfQ09OU1QsX19qc2Nf
b3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCAodm9pZCopZnVuY3Rpb24jI1ZhbGlkYXRlLCAj
ZnVuY3Rpb24gfTsKKyNlbHNlCisjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lO
VEVSTkFMKGZ1bmN0aW9uKSBcCisgICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3Rh
dGlvbiBfSklUVGFyZ2V0SURfIyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9u
KCJfX0RBVEFfQ09OU1QsX19qc2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCAjZnVuY3Rp
b24gfTsKKyNlbmRpZgogCiAjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OKGZ1bmN0
aW9uKSBcCiAgICAgSlNDX0RFQ0xBUkVfQU5EX0RFRklORV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJ
T04oZnVuY3Rpb24pOyBcCkBAIC0xMDAsMTIgKzExNSw2IEBACiAgICAgSlNDX0RFQ0xBUkVfQU5E
X0RFRklORV9KSVRfT1BFUkFUSU9OX1JFVFVSTl9WQUxJREFUSU9OKGZ1bmN0aW9uKTsgXAogICAg
IEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKQogCi0jZWxzZQot
I2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTihmdW5jdGlvbikKLSNkZWZpbmUgSlND
X0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fUFJPQkUoZnVuY3Rpb24pCi0jZGVmaW5lIEpTQ19BTk5P
VEFURV9KSVRfT1BFUkFUSU9OX1JFVFVSTihmdW5jdGlvbikKLSNlbmRpZgotCiAKICNkZWZpbmUg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OX1dJVEhPVVRfVkFSSUFCTEUoZnVuY3Rpb25OYW1lLCBy
ZXR1cm5UeXBlLCBwYXJhbWV0ZXJzKSBcCiAgICAgcmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OX0FU
VFJJQlVURVMgZnVuY3Rpb25OYW1lIHBhcmFtZXRlcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI5
NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEwICszMCwxMSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogZXh0ZXJuIGNv
bnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luV2Vi
Q29yZSBfX2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRl
cm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9uc0lu
V2ViQ29yZSBfX2FzbSgic2VjdGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogCisj
aWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKwogdm9pZCBwb3B1bGF0ZUpJVE9w
ZXJhdGlvbnMoKQogewogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwpAQCAtNDMs
NCArNDQsMTQgQEAgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogfQogI2VuZGlmIC8vIEVO
QUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVS
KQordm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAg
ICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1i
ZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlLCAmZW5kT2ZKSVRPcGVyYXRpb25z
SW5XZWJDb3JlKTsKKyAgICB9KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRElTQVNTRU1CTEVSKQor
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRP
cGVyYXRpb25zLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMCArMjcs
MTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikK
K1dFQkNPUkVfRVhQT1JUIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpOworI2Vsc2UK
K2lubGluZSB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKSB7IH0KKyNlbmRpZgorCiAj
aWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cG9wdWxhdGVKSVRPcGVyYXRpb25zKCk7CiAjZWxzZQotaW5saW5lIHZvaWQgcG9wdWxhdGVKSVRP
cGVyYXRpb25zKCkgeyB9CitpbmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IHBv
cHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKTsgfQogI2VuZGlmCiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJldmlzaW9u
IDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQxLDEwICsyNDEsMTEgQEAgdm9pZCBzZXRB
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvcgogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
SklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9u
QW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0IF9fYXNt
KCJzZWN0aW9uJHN0YXJ0JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBK
U0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVz
dFN1cHBvcnQgX19hc20oInNlY3Rpb24kZW5kJF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIAor
I2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisKIHZvaWQgcG9wdWxhdGVKSVRP
cGVyYXRpb25zKCkKIHsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKQEAgLTI1
NCw0ICsyNTUsMTQgQEAgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogfQogI2VuZGlmIC8v
IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKKyNpZiBFTkFCTEUoRElTQVNTRU1C
TEVSKQordm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7Cisg
ICAgICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0lu
RW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQsICZlbmRP
ZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCk7CisgICAgfSk7CiB9CisjZW5kaWYg
Ly8gRU5BQkxFKERJU0FTU0VNQkxFUikKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBw
b3J0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBw
b3J0LmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2Vi
Q29yZVRlc3RTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDEwICs2NywxNiBA
QCB2b2lkIHNldHVwTmV3bHlDcmVhdGVkU2VydmljZVdvcmtlcih1aW50CiAgICAgCiB2b2lkIHNl
dEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBTdHJpbmcmKSBU
RVNUX1NVUFBPUlRfRVhQT1JUOwogCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKK3ZvaWQgcG9w
dWxhdGVEaXNhc3NlbWJseUxhYmVscygpIFRFU1RfU1VQUE9SVF9FWFBPUlQ7CisjZWxzZQoraW5s
aW5lIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpIHsgfQorI2VuZGlmCisKICNpZiBF
TkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlv
bnMoKSBURVNUX1NVUFBPUlRfRVhQT1JUOwogI2Vsc2UKLWlubGluZSB2b2lkIHBvcHVsYXRlSklU
T3BlcmF0aW9ucygpIHsgfQoraW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyBw
b3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCk7IH0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlVGVzdFN1cHBvcnQK
</data>
<flag name="commit-queue"
          id="488498"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459406</attachid>
            <date>2022-05-15 23:37:44 -0700</date>
            <delta_ts>2022-05-16 13:30:14 -0700</delta_ts>
            <desc>EWS testing</desc>
            <filename>wip-disassemble-operations2.2.patch</filename>
            <type>text/plain</type>
            <size>44681</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1NiwxMCArMzc1Niw4IEBA
IGludCBydW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVybiBj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCBf
X2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsIF9fYXNt
KCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7Ci0jZW5kaWYKIAogaW50IGpz
Y21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpAQCAtMzc4Myw2ICszNzgxLDExIEBAIGlu
dCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVy
c0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5TaGVsbCwgJmVuZE9mSklUT3BlcmF0
aW9uc0luU2hlbGwpOwogI2VuZGlmCisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKKyAgICBpZiAo
VU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlND
OjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigm
c3RhcnRPZkpJVE9wZXJhdGlvbnNJblNoZWxsLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7
CisjZW5kaWYKKwogICAgIGluaXRpYWxpemVUaW1lb3V0SWZOZWVkZWQoKTsKIAogI2lmIE9TKERB
UldJTikgfHwgT1MoTElOVVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0pJVE9wZXJhdGlvbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwyMCArMjYsMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKSVRPcGVyYXRpb25MaXN0LmgiCiAKKyNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNp
bmNsdWRlICJHYXRlLmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIk9wdGlv
bnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IChFTkFCTEUo
RElTQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjRFKSkKIAogTGF6eU5ldmVyRGVzdHJveWVkPEpJVE9w
ZXJhdGlvbkxpc3Q+IGppdE9wZXJhdGlvbkxpc3Q7CiAKIGV4dGVybiBjb25zdCBKSVRPcGVyYXRp
b25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5KU0MgX19hc20oInNlY3Rpb24kc3Rh
cnQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0IEpJVE9wZXJhdGlvbkFu
bm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5KU0MgX19hc20oInNlY3Rpb24kZW5kJF9fREFU
QV9DT05TVCRfX2pzY19vcHMiKTsKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJ
T04pCisKIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgaml0T3Bl
cmF0aW9uTGlzdC5jb25zdHJ1Y3QoKTsKQEAgLTg1LDkgKzg5LDEzIEBAIHZvaWQgSklUT3BlcmF0
aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0kKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
XSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAgIGppdE9wZXJh
dGlvbkxpc3QtPmFkZFBvaW50ZXJzKCZzdGFydE9mSklUT3BlcmF0aW9uc0luSlNDLCAmZW5kT2ZK
SVRPcGVyYXRpb25zSW5KU0MpOworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVlZERp
c2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgICAgIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJl
bHNJbkphdmFTY3JpcHRDb3JlKCk7CiAgICAgfSk7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKQorCiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUo
bGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwogTExJTlRfREVDTEFSRV9ST1VUSU5F
X1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpOwogTExJTlRf
REVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2No
ZWNrKTsKQEAgLTEwNCwzMSArMTEyLDc5IEBAIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFU
RShjaGVja3BvaW4KIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShub3JtYWxfb3NyX2V4
aXRfdHJhbXBvbGluZSk7CiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUoZnV6emVyX3Jl
dHVybl9lYXJseV9mcm9tX2xvb3BfaGludCk7CiAKLXZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9w
dWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpCi17Ci0gICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VLZXk7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewor
LyoKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2RlZmluZSBMTElOVF9P
UF9FWFRSQVModmFsaWRhdGVMYWJlbCwgbmFtZVN0cikgYml0d2lzZV9jYXN0PHZvaWQqPih2YWxp
ZGF0ZUxhYmVsKSwgbmFtZVN0cgorI2Vsc2UKKyNkZWZpbmUgTExJTlRfT1BfRVhUUkFTKHZhbGlk
YXRlTGFiZWwsIG5hbWVTdHIpIG5hbWVTdHIKKyNlbmRpZgorCisjZGVmaW5lIExMSU5UX1JPVVRJ
TkUoZnVuY3Rpb25OYW1lKSB7IFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6
Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4oZnVuY3Rpb25OYW1lKSksIFwKKyAg
ICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1l
KSwgI2Z1bmN0aW9uTmFtZSkgXAorICAgIH0sCisKKyNkZWZpbmUgTExJTlRfT1AobmFtZSkgeyBc
CisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAgICAgICBMTElOVF9PUF9FWFRSQVMoTExJTlRf
UkVUVVJOX1ZBTElEQVRFKG5hbWUpLCAjbmFtZSkgXAorICAgIH0sIHsgXAorICAgICAgICBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JFVFVSTl9X
SURFMTZfVkFMSURBVEUobmFtZSksICNuYW1lICIgW3dpZGUxNl0iKSBcCisgICAgfSwgeyBcCisg
ICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUzMkNvZGVGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAgICAgICBMTElOVF9PUF9FWFRSQVMoTExJ
TlRfUkVUVVJOX1dJREUzMl9WQUxJREFURShuYW1lKSwgI25hbWUgIiBbd2lkZTMyXSIpIFwKKyAg
ICB9LAorKi8KIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjZGVmaW5l
IExMSU5UX1JPVVRJTkUoZnVuY3Rpb25OYW1lKSB7IFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZv
aWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4oZnVuY3Rpb25O
YW1lKSksIFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9ST1VUSU5FX1ZBTElE
QVRFKGZ1bmN0aW9uTmFtZSkpLCAjZnVuY3Rpb25OYW1lIFwKKyAgICB9LAorCisjZGVmaW5lIExM
SU5UX09QKG5hbWUpIHsgXAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRD
b2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgYml0d2lz
ZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fVkFMSURBVEUobmFtZSkpLCAjbmFtZSBcCisgICAg
fSwgeyBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUxNkNvZGVG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAgICAgICBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9XSURFMTZfVkFMSURBVEUobmFtZSkpLCAjbmFtZSAiIFt3
aWRlMTZdIiBcCisgICAgfSwgeyBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6
OmdldFdpZGUzMkNvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAorICAg
ICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9XSURFMzJfVkFMSURBVEUobmFt
ZSkpLCAjbmFtZSAiIFt3aWRlMzJdIiBcCisgICAgfSwKKyNlbHNlIC8vIG5vdCBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKQogI2RlZmluZSBMTElOVF9ST1VUSU5FKGZ1bmN0aW9uTmFt
ZSkgeyBcCiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KGZ1bmN0aW9uTmFtZSkpLCBcCi0gICAgICAgIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oTExJTlRfUk9VVElORV9WQUxJREFURShmdW5jdGlvbk5hbWUpKSBcCisgICAg
ICAgICNmdW5jdGlvbk5hbWUgXAogICAgIH0sCiAKICNkZWZpbmUgTExJTlRfT1AobmFtZSkgeyBc
CiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExM
SU5UX1JFVFVSTl9WQUxJREFURShuYW1lKSkgXAorICAgICAgICAjbmFtZSBcCiAgICAgfSwgeyBc
CiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUxNkNvZGVGdW5jdGlv
blB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KExMSU5UX1JFVFVSTl9XSURFMTZfVkFMSURBVEUobmFtZSkpIFwKKyAgICAgICAgI25hbWUg
IiBbd2lkZTE2XSIgXAogICAgIH0sIHsgXAogICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExM
SW50OjpnZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwK
LSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lERTMyX1ZBTElEQVRF
KG5hbWUpKSBcCisgICAgICAgICNuYW1lICIgW3dpZGUzMl0iIFwKICAgICB9LAorI2VuZGlmIC8v
IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKICNkZWZpbmUgTExJTlRfUkVUVVJO
X0xPQ0FUSU9OKG5hbWUsIC4uLikgXAogICAgIExMSU5UX09QKG5hbWUjI19yZXR1cm5fbG9jYXRp
b24pCiAKLSAgICAgICAgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBvcGVyYXRpb25zW10g
PSB7CitzdHJ1Y3QgTExJbnRPcGVyYXRpb25zIHsKKyAgICBjb25zdCBKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uKiBvcGVyYXRpb25zOworICAgIHNpemVfdCBudW1iZXJPZk9wZXJhdGlvbnM7Cit9Owor
CitzdGF0aWMgTExJbnRPcGVyYXRpb25zIGxsaW50T3BlcmF0aW9ucygpCit7CisgICAgc3RhdGlj
IGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIG9wZXJhdGlvbnMgPSBudWxscHRyOworICAg
IHN0YXRpYyBzaXplX3QgbnVtYmVyT2ZPcGVyYXRpb25zID0gMDsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbJl0geworICAg
ICAgICBzdGF0aWMgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBvcGVyYXRpb25zU3RvcmFn
ZVtdID0gewogICAgICAgICAgICAgTExJTlRfUk9VVElORShsbGludF9mdW5jdGlvbl9mb3JfY2Fs
bF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJTkUobGxpbnRfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJTkUobGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spCkBAIC0xNjAsMjEgKzIxNiw5OCBAQCB2b2lkIEpJ
VE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJCiAgICAgICAgICAgICBKU0NfSlNfR0FU
RV9PUENPREVTKExMSU5UX1JFVFVSTl9MT0NBVElPTikKICAgICAgICAgICAgIEpTQ19XQVNNX0dB
VEVfT1BDT0RFUyhMTElOVF9SRVRVUk5fTE9DQVRJT04pCiAgICAgICAgIH07Ci0gICAgICAgIGlm
IChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGppdE9wZXJhdGlvbkxpc3QtPmFkZFBv
aW50ZXJzKG9wZXJhdGlvbnMsIG9wZXJhdGlvbnMgKyBXVEZfQVJSQVlfTEVOR1RIKG9wZXJhdGlv
bnMpKTsKKyAgICAgICAgb3BlcmF0aW9ucyA9IG9wZXJhdGlvbnNTdG9yYWdlOworICAgICAgICBu
dW1iZXJPZk9wZXJhdGlvbnMgPSBXVEZfQVJSQVlfTEVOR1RIKG9wZXJhdGlvbnNTdG9yYWdlKTsK
KyAgICB9KTsKKyAgICByZXR1cm4geyBvcGVyYXRpb25zLCBudW1iZXJPZk9wZXJhdGlvbnMgfTsK
K30KKwogI3VuZGVmIExMSU5UX1JPVVRJTkUKICN1bmRlZiBMTElOVF9PUAogI3VuZGVmIExMSU5U
X1JFVFVSTl9MT0NBVElPTgorI3VuZGVmIExMSU5UX09QX0VYVFJBUworCisjaWYgRU5BQkxFKEpJ
VF9PUEVSQVRJT05fVkFMSURBVElPTikKKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0
ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgeworICAgICAgICAgICAgYXV0byBsaXN0ID0gbGxp
bnRPcGVyYXRpb25zKCk7CisgICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2ludGVy
cyhsaXN0Lm9wZXJhdGlvbnMsIGxpc3Qub3BlcmF0aW9ucyArIGxpc3QubnVtYmVyT2ZPcGVyYXRp
b25zKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpuZWVkRGlz
YXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICAgICAgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxh
dGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpOwogICAgIH0pOwog
fQogCi0KIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luRW1iZWRkZXIo
Y29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRP
cGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKQogewogICAgIGlmIChPcHRpb25zOjp1
c2VKSVQoKSkKICAgICAgICAgaml0T3BlcmF0aW9uTGlzdC0+YWRkUG9pbnRlcnMoYmVnaW5PcGVy
YXRpb25zLCBlbmRPcGVyYXRpb25zKTsKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFU
SU9OX1ZBTElEQVRJT04pCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElP
TikgfHwgKEVOQUJMRShESVNBU1NFTUJMRVIpICYmIENQVShBUk02NEUpKQorCitTVVBQUkVTU19B
U0FOIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6YWRkRGlzYXNzZW1ibHlMYWJlbHMoY29uc3QgSklU
T3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW4sIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24q
IGVuZCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjRFKQorICAgIFJF
TEVBU0VfQVNTRVJUKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSk7CisgICAgZm9y
IChjb25zdCBhdXRvKiBjdXJyZW50ID0gYmVnaW47IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
IHsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorICAgICAgICBhdXRvKiBv
cGVyYXRpb24gPSBjdXJyZW50LT5vcGVyYXRpb25XaXRoVmFsaWRhdGlvbjsKKyNlbHNlCisgICAg
ICAgIGF1dG8qIG9wZXJhdGlvbiA9IGN1cnJlbnQtPm9wZXJhdGlvbjsKKyNlbmRpZgorICAgICAg
ICByZWdpc3RlckxhYmVsKHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uKSwgY3VycmVudC0+bmFt
ZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYmVnaW4pOworICAgIFVOVVNFRF9Q
QVJBTShlbmQpOworI2VuZGlmIC8vIEVOQUJMRShESVNBU1NFTUJMRVIpICYmIENQVShBUk02NEUp
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFC
TEUoRElTQVNTRU1CTEVSKQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNz
ZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlKCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVS
KSAmJiBDUFUoQVJNNjRFKQorICAgIEFTU0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBw
b3J0KCkpOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAg
ICAgICAgICAgaml0T3BlcmF0aW9uTGlzdC0+YWRkRGlzYXNzZW1ibHlMYWJlbHMoJnN0YXJ0T2ZK
SVRPcGVyYXRpb25zSW5KU0MsICZlbmRPZkpJVE9wZXJhdGlvbnNJbkpTQyk7CisgICAgfSk7Cisj
ZW5kaWYKK30KKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFi
ZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVS
KSAmJiBDUFUoQVJNNjRFKQorICAgIEFTU0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBw
b3J0KCkpOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7Cisg
ICAgICAgICAgICBhdXRvIGxpc3QgPSBsbGludE9wZXJhdGlvbnMoKTsKKyAgICAgICAgICAgIGpp
dE9wZXJhdGlvbkxpc3QtPmFkZERpc2Fzc2VtYmx5TGFiZWxzKGxpc3Qub3BlcmF0aW9ucywgbGlz
dC5vcGVyYXRpb25zICsgbGlzdC5udW1iZXJPZk9wZXJhdGlvbnMpOworICAgICAgICB9CisgICAg
fSk7CisjZW5kaWYKK30KKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2Vt
Ymx5TGFiZWxzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9w
ZXJhdGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpCit7
CisjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikgJiYgQ1BVKEFSTTY0RSkKKyAgICBpZiAoTElLRUxZ
KCFPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRE
aXNhc3NlbWJseUxhYmVscyhiZWdpbk9wZXJhdGlvbnMsIGVuZE9wZXJhdGlvbnMpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oYmVnaW5PcGVyYXRpb25zKTsKKyAgICBVTlVTRURfUEFSQU0oZW5k
T3BlcmF0aW9ucyk7CisjZW5kaWYKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAko
cmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRP
cGVyYXRpb25MaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK3N0cnVjdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uOworCiAjaWYgRU5B
QkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIAogLy8gVGhpcyBpbmRpcmVjdGlvbiBpcyBw
cm92aWRlZCBzbyB0aGF0IHdlIGNhbiBtYW51YWxseSBmb3JjZSBvbiBhc3NlcnRpb25zIGZvcgog
Ly8gdGVzdGluZyBldmVuIG9uIHJlbGVhc2UgYnVpbGRzLgogI2RlZmluZSBKSVRfT1BFUkFUSU9O
X1ZBTElEQVRJT05fQVNTRVJUX0VOQUJMRUQgQVNTRVJUX0VOQUJMRUQKIAotc3RydWN0IEpJVE9w
ZXJhdGlvbkFubm90YXRpb247Ci0KIGNsYXNzIEpJVE9wZXJhdGlvbkxpc3QgewogcHVibGljOgog
ICAgIHN0YXRpYyBKSVRPcGVyYXRpb25MaXN0JiBpbnN0YW5jZSgpOwpAQCAtNjQsNiArNjQsOCBA
QCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBv
aW50ZXJzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9wZXJh
dGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpOwogCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVs
c0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25z
LCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKTsKKwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklUT3BlcmF0aW9uKFQgZnVu
Y3Rpb24pCiAgICAgewogICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb24pOwpAQCAtODEsNyAr
ODMsMTEgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBwb3B1
bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgpOworICAgIHN0YXRpYyB2b2lk
IHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKTsKKwog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGRQb2ludGVycyhjb25zdCBKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kKTsKKyAgICB2
b2lkIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJl
Z2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpOwogCiAjaWYgSklUX09QRVJB
VElPTl9WQUxJREFUSU9OX0FTU0VSVF9FTkFCTEVECiAgICAgdm9pZCBhZGRJbnZlcnNlTWFwKHZv
aWQqIHZhbGlkYXRpb25FbnRyeSwgdm9pZCogcG9pbnRlcik7CkBAIC0xMDYsMTEgKzExMiwyNyBA
QCBjbGFzcyBKSVRPcGVyYXRpb25MaXN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0
aWFsaXplKCkgeyB9CiAKLSAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2Ny
aXB0Q29yZSgpIHsgfQotICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3Jp
cHRDb3JlRm9yTExJbnQoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5K
YXZhU2NyaXB0Q29yZSgpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVl
ZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgICAgIHBvcHVsYXRlRGlzYXNzZW1ibHlM
YWJlbHNJbkphdmFTY3JpcHRDb3JlKCk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRl
UG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKQorICAgIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgICAgICBw
b3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCk7CisgICAg
fQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJs
eUxhYmVsc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVy
YXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklUT3BlcmF0aW9u
KFQpIHsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklU
T3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oVCkgeyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZv
aWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmUoKTsKKyAgICBzdGF0
aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50
KCk7CisKKyAgICB2b2lkIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFu
bm90YXRpb24qIGJlZ2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpOwogfTsK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvblZhbGlkYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvblZh
bGlkYXRpb24uaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsMTMgKzQ3
LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKLQogc3RydWN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24gewogICAgIHZvaWQqIG9w
ZXJhdGlvbjsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogICAgIHZvaWQq
IG9wZXJhdGlvbldpdGhWYWxpZGF0aW9uOworI2VuZGlmCisgICAgY29uc3QgY2hhciogbmFtZTsK
IH07CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiAjaWZuZGVmIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTgogI2RlZmluZSBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OX1ZBTElEQVRJT04oZnVuY3Rpb25OYW1lKQogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9u
IDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEzICs4MiwxNSBAQCBMaW5rQnVmZmVyOjpDb2RlUmVm
PExpbmtCdWZmZXJQdHJUYWc+IExpCiAgICAgICAgIHNpemVfdCBzdHJpbmdMZW5ndGggPSB2c25w
cmludGYobnVsbHB0ciwgMCwgZm9ybWF0LCBwcmVmbGlnaHRBcmdzKTsKICAgICAgICAgdmFfZW5k
KHByZWZsaWdodEFyZ3MpOwogCisgICAgICAgIGNvbnN0IGNoYXIgcHJlZml4W10gPSAidGh1bms6
ICI7CiAgICAgICAgIGNoYXIqIGJ1ZmZlciA9IDA7Ci0gICAgICAgIENTdHJpbmcgbGFiZWwgPSBD
U3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKHN0cmluZ0xlbmd0aCArIDEsIGJ1ZmZlcik7Ci0gICAg
ICAgIHZzbnByaW50ZihidWZmZXIsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7
Ci0gICAgICAgIGJ1ZmZlcltzdHJpbmdMZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IHN0cmluZ0xlbmd0aCArIHNpemVvZihwcmVmaXgpOworICAgICAgICBDU3RyaW5nIGxh
YmVsID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgICAg
IHNucHJpbnRmKGJ1ZmZlciwgbGVuZ3RoLCAiJXMiLCBwcmVmaXgpOworICAgICAgICB2c25wcmlu
dGYoYnVmZmVyICsgc2l6ZW9mKHByZWZpeCkgLSAxLCBzdHJpbmdMZW5ndGggKyAxLCBmb3JtYXQs
IGFyZ0xpc3QpOwogICAgICAgICBvdXQucHJpbnRmKCIlcyIsIGJ1ZmZlcik7CiAKLSAgICAgICAg
cmVnaXN0ZXJUaHVua0xhYmVsKHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVz
cygpLCBXVEZNb3ZlKGxhYmVsKSk7CisgICAgICAgIHJlZ2lzdGVyTGFiZWwocmVzdWx0LmNvZGUo
KS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUobGFiZWwpKTsKICAgICB9IGVs
c2UKICAgICAgICAgb3V0LnZwcmludGYoZm9ybWF0LCBhcmdMaXN0KTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18xLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAzLDEw
ICs5MDMsOCBAQCBzdGF0aWMgdm9pZCBydW4oY29uc3QgY2hhciopCiAKICNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIGV4dGVy
biBjb25zdCBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gc3RhcnRPZkpJVE9wZXJhdGlvbnNJ
blRlc3RCMyBfX2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBl
eHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9u
c0luVGVzdEIzIF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7Ci0j
ZW5kaWYKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewpAQCAtOTMwLDcgKzky
OCwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAjaWYgRU5BQkxFKEpJVF9P
UEVSQVRJT05fVkFMSURBVElPTikKICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRl
UG9pbnRlcnNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luVGVzdEIzLCAmZW5kT2ZK
SVRPcGVyYXRpb25zSW5UZXN0QjMpOwogI2VuZGlmCi0gICAgCisjaWYgRU5BQkxFKERJU0FTU0VN
QkxFUikKKyAgICBpZiAoVU5MSUtFTFkoSlNDOjpPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBw
b3J0KCkpKQorICAgICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1i
bHlMYWJlbHNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luVGVzdEIzLCAmZW5kT2ZK
SVRPcGVyYXRpb25zSW5UZXN0QjMpOworI2VuZGlmCisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDw9IDI7ICsraSkgewogICAgICAgICBKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVs
KCkgPSBpOwogICAgICAgICBydW4oZmlsdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDI5NDIy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxl
ci5oIgogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSA8dmFy
aWFudD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTM2LDggKzM3LDIxIEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi11c2luZyBUaHVua0xhYmVsTWFwID0gSGFzaE1hcDx2b2lkKiwgQ1N0cmluZz47
Ci1MYXp5TmV2ZXJEZXN0cm95ZWQ8VGh1bmtMYWJlbE1hcD4gdGh1bmtMYWJlbE1hcDsKK25hbWVz
cGFjZSBEaXNhc3NlbWJsZXIgeworCit1c2luZyBMYWJlbE1hcCA9IEhhc2hNYXA8dm9pZCosIHN0
ZDo6dmFyaWFudDxDU3RyaW5nLCBjb25zdCBjaGFyKj4+OworTGF6eU5ldmVyRGVzdHJveWVkPExh
YmVsTWFwPiBsYWJlbE1hcDsKKworc3RhdGljIExhYmVsTWFwJiBlbnN1cmVMYWJlbE1hcCgpCit7
CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uo
b25jZUtleSwgW10geworICAgICAgICBsYWJlbE1hcC5jb25zdHJ1Y3QoKTsKKyAgICB9KTsKKyAg
ICByZXR1cm4gbGFiZWxNYXAuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc2Fzc2VtYmxl
cgogCiB2b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxEaXNhc3Nl
bWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lkKiBjb2RlU3RhcnQsIHZvaWQq
IGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCkKIHsKQEAgLTE1
NywyNyArMTcxLDI1IEBAIHZvaWQgd2FpdEZvckFzeW5jaHJvbm91c0Rpc2Fzc2VtYmx5KCkKICAg
ICBhc3luY2hyb25vdXNEaXNhc3NlbWJsZXIoKS53YWl0VW50aWxFbXB0eSgpOwogfQogCi1zdGF0
aWMgVGh1bmtMYWJlbE1hcCYgZW5zdXJlVGh1bmtMYWJlbE1hcCgpCit2b2lkIHJlZ2lzdGVyTGFi
ZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3RyaW5nJiYgbGFiZWwpCiB7Ci0gICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VLZXk7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewot
ICAgICAgICB0aHVua0xhYmVsTWFwLmNvbnN0cnVjdCgpOwotICAgIH0pOwotICAgIHJldHVybiB0
aHVua0xhYmVsTWFwLmdldCgpOworICAgIERpc2Fzc2VtYmxlcjo6ZW5zdXJlTGFiZWxNYXAoKS5h
ZGQodGh1bmtBZGRyZXNzLCBXVEZNb3ZlKGxhYmVsKSk7CiB9CiAKLXZvaWQgcmVnaXN0ZXJUaHVu
a0xhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVsKQordm9pZCByZWdpc3Rl
ckxhYmVsKHZvaWQqIGFkZHJlc3MsIGNvbnN0IGNoYXIqIGxhYmVsKQogewotICAgIGVuc3VyZVRo
dW5rTGFiZWxNYXAoKS5hZGQodGh1bmtBZGRyZXNzLCBXVEZNb3ZlKGxhYmVsKSk7CisgICAgRGlz
YXNzZW1ibGVyOjplbnN1cmVMYWJlbE1hcCgpLmFkZChhZGRyZXNzLCBsYWJlbCk7CiB9CiAKLWNv
bnN0IGNoYXIqIGxhYmVsRm9yVGh1bmsodm9pZCogdGh1bmtBZGRyZXNzKQorY29uc3QgY2hhciog
bGFiZWxGb3Iodm9pZCogdGh1bmtBZGRyZXNzKQogewotICAgIGF1dG8mIG1hcCA9IGVuc3VyZVRo
dW5rTGFiZWxNYXAoKTsKKyAgICBhdXRvJiBtYXAgPSBEaXNhc3NlbWJsZXI6OmVuc3VyZUxhYmVs
TWFwKCk7CiAgICAgYXV0byBpdCA9IG1hcC5maW5kKHRodW5rQWRkcmVzcyk7CiAgICAgaWYgKGl0
ID09IG1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGl0LT52
YWx1ZS5kYXRhKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q1N0cmluZz4oaXQt
PnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PENTdHJpbmc+KGl0LT52YWx1ZSkuZGF0
YSgpOworICAgIHJldHVybiBzdGQ6OmdldDxjb25zdCBjaGFyKj4oaXQtPnZhbHVlKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
aXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDcgKzYxLDggQEAgdm9pZCBkaXNhc3NlbWJsZUFzeW5jaHJvbm91c2x5KAogCiBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHdhaXRGb3JBc3luY2hyb25vdXNEaXNhc3NlbWJseSgpOwogCi12
b2lkIHJlZ2lzdGVyVGh1bmtMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJpbmcmJiBsYWJl
bCk7Ci1jb25zdCBjaGFyKiBsYWJlbEZvclRodW5rKHZvaWQqIHRodW5rQWRkcmVzcyk7Cit2b2lk
IHJlZ2lzdGVyTGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3RyaW5nJiYgbGFiZWwpOwordm9p
ZCByZWdpc3RlckxhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgY29uc3QgY2hhciogbGFiZWwpOwor
Y29uc3QgY2hhciogbGFiZWxGb3Iodm9pZCogdGh1bmtBZGRyZXNzKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2
NERPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3Nl
bWJsZXIvQVJNNjQvQTY0RE9wY29kZS5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDEwICszMiwxNiBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2lu
Y2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5j
bHVkZSAiSW50ZWdyaXR5LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkxM
SW50UENSYW5nZXMuaCIKKyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0
b3IuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9QdHJUYWcuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZ2Uu
aD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBBUk02NERpc2Fzc2VtYmxlciB7CiAKQEAg
LTIwMSwxMiArMjA3LDEyIEBAIHZvaWQgQTY0RE9wY29kZTo6YXBwZW5kUENSZWxhdGl2ZU9mZnNl
dCgKICAgICAgICAgdGFyZ2V0SW5mbyA9ICIiOwogICAgIGVsc2UgaWYgKHRhcmdldFBDID49IG1f
c3RhcnRQQyAmJiB0YXJnZXRQQyA8IG1fZW5kUEMpCiAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwg
YnVmZmVyU2l6ZSAtIDEsICIgLT4gPCV1PiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigodGFyZ2V0
UEMgLSBtX3N0YXJ0UEMpICogc2l6ZW9mKHVpbnQzMl90KSkpOwotICAgIGVsc2UgaWYgKGNvbnN0
IGNoYXIqIHRodW5rTGFiZWwgPSBsYWJlbEZvclRodW5rKHRhcmdldFBDKSkKLSAgICAgICAgc25w
cmludGYoYnVmZmVyLCBidWZmZXJTaXplIC0gMSwgIiAtPiA8dGh1bms6ICVzPiIsIHRodW5rTGFi
ZWwpOworICAgIGVsc2UgaWYgKGNvbnN0IGNoYXIqIGxhYmVsID0gbGFiZWxGb3IodGFyZ2V0UEMp
KQorICAgICAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlclNpemUgLSAxLCAiIC0+ICVzIiwgbGFi
ZWwpOwogICAgIGVsc2UgaWYgKGlzSklUUEModGFyZ2V0UEMpKQotICAgICAgICB0YXJnZXRJbmZv
ID0gIiAtPiA8SklUIFBDPiI7CisgICAgICAgIHRhcmdldEluZm8gPSAiIC0+IEpJVCBQQyI7CiAg
ICAgZWxzZSBpZiAoTExJbnQ6OmlzTExJbnRQQyh0YXJnZXRQQykpCi0gICAgICAgIHRhcmdldElu
Zm8gPSAiIC0+IDxMTEludCBQQz4iOworICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiBMTEludCBQ
QyI7CiAgICAgZWxzZQogICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiA8dW5rbm93bj4iOwogCkBA
IC0xNTcwLDEyICsxNTc2LDEyNyBAQCBjb25zdCBjaGFyKiBBNjRET3Bjb2RlTG9naWNhbEltbWVk
aWF0ZTo6CiAKIGNvbnN0IGNoYXIqIGNvbnN0IEE2NERPcGNvZGVNb3ZlV2lkZTo6c19vcE5hbWVz
WzRdID0geyAibW92biIsIDAsICJtb3Z6IiwgIm1vdmsiIH07CiAKLWNvbnN0IGNoYXIqIEE2NERP
cGNvZGVNb3ZlV2lkZTo6Zm9ybWF0KCkKK2NsYXNzIE1vdmVXaWRlRm9ybWF0VHJhaXQgeworcHVi
bGljOgorICAgIHVzaW5nIFJlc3VsdFR5cGUgPSBjb25zdCBjaGFyKjsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgcmV0dXJuRWFybHlJZkFjY2VwdGVkID0gZmFsc2U7CisKKyAgICBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBjb25zdCBjaGFyKiByZWplY3RlZFJlc3VsdChBNjRET3Bjb2RlTW92ZVdp
ZGUqIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlLT5iYXNlRm9ybWF0KCk7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIHN0YXRpYyBjb25zdCBjaGFyKiBhY2NlcHRlZFJlc3VsdChBNjRET3Bjb2RlTW92ZVdp
ZGUqIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlLT5mb3JtYXRCdWZmZXIoKTsgfQorfTsKKworY2xh
c3MgTW92ZVdpZGVJc1ZhbGlkVHJhaXQgeworcHVibGljOgorICAgIHVzaW5nIFJlc3VsdFR5cGUg
PSBib29sOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXR1cm5FYXJseUlmQWNjZXB0ZWQg
PSB0cnVlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHJlamVjdGVkUmVzdWx0KEE2NERP
cGNvZGVNb3ZlV2lkZSopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGFjY2VwdGVkUmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSopIHsgcmV0dXJuIHRydWU7IH0K
K307CisKK2Jvb2wgQTY0RE9wY29kZU1vdmVXaWRlOjpoYW5kbGVQb3RlbnRpYWxEYXRhUG9pbnRl
cih2b2lkKiBwdHIpCit7CisgICAgQVNTRVJUKEludGVncml0eTo6aXNTYW5lUG9pbnRlcihwdHIp
KTsKKworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIFZNSW5zcGVjdG9yOjpmb3JFYWNo
Vk0oWyZdIChWTSYgdm0pIHsKKyAgICAgICAgaWYgKHB0ciA9PSAmdm0pIHsKKyAgICAgICAgICAg
IGJ1ZmZlclByaW50ZigiIHZtIik7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIXZtLmlzSW5TZXJ2aWNlKCkpCisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3Rh
dHVzOjpDb250aW51ZTsKKworICAgICAgICBhdXRvKiB2bVN0YXJ0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oJnZtKTsKKyAgICAgICAgYXV0byogdm1FbmQgPSB2bVN0YXJ0ICsgc2l6ZW9m
KFZNKTsKKyAgICAgICAgYXV0byogdThQdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihw
dHIpOworICAgICAgICBSYW5nZSB2bVJhbmdlKHZtU3RhcnQsIHZtRW5kKTsKKyAgICAgICAgaWYg
KHZtUmFuZ2UuY29udGFpbnModThQdHIpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSB1OFB0ciAtIHZtU3RhcnQ7CisgICAgICAgICAgICBidWZmZXJQcmludGYoIiB2bSArJXUiLCBv
ZmZzZXQpOworCisgICAgICAgICAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiA9IG51bGxwdHI7
CisgICAgICAgICAgICBpZiAocHRyID09ICZ2bS50b3BDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgZGVzY3JpcHRpb24gPSAidm0udG9wQ2FsbEZyYW1lIjsKKyAgICAgICAgICAgIGVsc2UgaWYg
KG9mZnNldCA9PSBWTTo6dG9wRW50cnlGcmFtZU9mZnNldCgpKQorICAgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uID0gInZtLnRvcEVudHJ5RnJhbWUiOworICAgICAgICAgICAgZWxzZSBpZiAob2Zm
c2V0ID09IFZNOjpleGNlcHRpb25PZmZzZXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlv
biA9ICJ2bS5tX2V4Y2VwdGlvbiI7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZzZXQgPT0gVk06
Om9mZnNldE9mSGVhcEJhcnJpZXJUaHJlc2hvbGQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlw
dGlvbiA9ICJ2bS5oZWFwLm1fYmFycmllclRocmVzaG9sZCI7CisgICAgICAgICAgICBlbHNlIGlm
IChvZmZzZXQgPT0gVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpCisgICAgICAgICAgICAg
ICAgZGVzY3JpcHRpb24gPSAidm0uY2FsbEZyYW1lRm9yQ2F0Y2giOworICAgICAgICAgICAgZWxz
ZSBpZiAocHRyID09IHZtLmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpCisgICAgICAgICAgICAg
ICAgZGVzY3JpcHRpb24gPSAidm0ubV9zb2Z0U3RhY2tMaW1pdCI7CisgICAgICAgICAgICBlbHNl
IGlmIChwdHIgPT0gJnZtLm9zckV4aXRJbmRleCkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlv
biA9ICJ2bS5vc3JFeGl0SW5kZXgiOworICAgICAgICAgICAgZWxzZSBpZiAocHRyID09ICZ2bS5v
c3JFeGl0SnVtcERlc3RpbmF0aW9uKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZt
Lm9zckV4aXRKdW1wRGVzdGluYXRpb24iOworICAgICAgICAgICAgZWxzZSBpZiAocHRyID09IHZt
LnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpCisgICAgICAgICAgICAgICAg
ZGVzY3JpcHRpb24gPSAidm0uc21hbGxTdHJpbmdzLm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncyI7
CisgICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gJnZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93
KQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnRhcmdldE1hY2hpbmVQQ0ZvclRo
cm93IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSB2bS50cmFwcygpLnRyYXBCaXRzQWRk
cmVzcygpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1fdHJhcHMubV90cmFw
Qml0cyI7CisjaWYgRU5BQkxFKERGR19ET0VTX0dDX1ZBTElEQVRJT04pCisgICAgICAgICAgICBl
bHNlIGlmIChwdHIgPT0gdm0uYWRkcmVzc09mRG9lc0dDKCkpCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24gPSAidm0ubV9kb2VzR0MiOworI2VuZGlmCisgICAgICAgICAgICBpZiAoZGVzY3Jp
cHRpb24pCisgICAgICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCI6ICVzIiwgZGVzY3JpcHRpb24p
OworCisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBJdGVy
YXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodm0uaXNTY3JhdGNo
QnVmZmVyKHB0cikpIHsKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIHZtIHNjcmF0Y2hCdWZm
ZXIubV9idWZmZXIiKTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
SXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gaGFuZGxlZDsK
K30KKworI2lmIENQVShBUk02NEUpCitib29sIEE2NERPcGNvZGVNb3ZlV2lkZTo6aGFuZGxlUG90
ZW50aWFsUHRyVGFnKHVpbnRwdHJfdCB2YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVlIHx8IHZhbHVl
ID4gMHhmZmZmKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQdHJUYWcgdGFnID0gc3Rh
dGljX2Nhc3Q8UHRyVGFnPih2YWx1ZSk7CisjaWYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCisg
ICAgY29uc3QgY2hhciogbmFtZSA9IFdURjo6cHRyVGFnTmFtZSh0YWcpOworICAgIGlmIChuYW1l
WzBdID09ICc8JykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPbmx5IHJlc3VsdCB0aGF0IHN0
YXJ0cyB3aXRoICc8JyBpcyAiPHVua25vd24+Ii4KKyNlbHNlCisgICAgLy8gV2l0aG91dCBFTkFC
TEUoUFRSVEFHX0RFQlVHR0lORyksIG5vdCBhbGwgUHRyVGFncyBhcmUgcmVnaXN0ZXJlZGYgZm9y
CisgICAgLy8gcHJpbnRpbmcuIFNvLCB3ZSdsbCBqdXN0IGRvIHRoZSBtaW5pbXVtIHdpdGggb25s
eSB0aGUgSlNDIHNwZWNpZmljIHRhZ3MuCisgICAgY29uc3QgY2hhciogbmFtZSA9IHB0clRhZ05h
bWUodGFnKTsKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
CisgICAgLy8gQWxzbyBwcmludCAnPycgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGEgbWF5YmUu
IFdlIGRvIG5vdCBrbm93IGZvciBjZXJ0YWluCisgICAgLy8gaWYgdGhlIGNvbnN0YW50IGlzIG1l
YW50IHRvIGJlIHVzZWQgYXMgYSBQdHJUYWcuCisgICAgYnVmZmVyUHJpbnRmKCIgLT4gJXAgJXMg
PyIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKSwgbmFtZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisjZW5kaWYKKwordGVtcGxhdGU8dHlwZW5hbWUgVHJhaXQ+Cit0eXBlbmFtZSBUcmFp
dDo6UmVzdWx0VHlwZSBBNjRET3Bjb2RlTW92ZVdpZGU6OnBhcnNlKCkKIHsKICAgICBpZiAob3Bj
KCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1hdCgpOworICAgICAgICBy
ZXR1cm4gVHJhaXQ6OnJlamVjdGVkUmVzdWx0KHRoaXMpOwogICAgIGlmICghaXM2NEJpdCgpICYm
IGh3KCkgPj0gMikKLSAgICAgICAgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1hdCgpOworICAgICAg
ICByZXR1cm4gVHJhaXQ6OnJlamVjdGVkUmVzdWx0KHRoaXMpOworCisgICAgaWYgY29uc3RleHBy
IChUcmFpdDo6cmV0dXJuRWFybHlJZkFjY2VwdGVkKQorICAgICAgICByZXR1cm4gVHJhaXQ6OmFj
Y2VwdGVkUmVzdWx0KHRoaXMpOwogCiAgICAgaWYgKCFvcGMoKSAmJiAoIWltbWVkaWF0ZTE2KCkg
fHwgIWh3KCkpICYmIChpczY0Qml0KCkgfHwgaW1tZWRpYXRlMTYoKSAhPSAweGZmZmYpKSB7CiAg
ICAgICAgIC8vIE1PViBwc2V1ZG8gb3AgZm9yIE1PVk4KQEAgLTE1ODcsMTAgKzE3MDgsMTIgQEAg
Y29uc3QgY2hhciogQTY0RE9wY29kZU1vdmVXaWRlOjpmb3JtYXQoKQogICAgICAgICAgICAgaW50
NjRfdCBhbW91bnQgPSBpbW1lZGlhdGUxNigpIDw8IChodygpICogMTYpOwogICAgICAgICAgICAg
YW1vdW50ID0gfmFtb3VudDsKICAgICAgICAgICAgIGFwcGVuZFNpZ25lZEltbWVkaWF0ZTY0KGFt
b3VudCk7CisgICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSBzdGF0aWNfY2FzdDxpbnRwdHJf
dD4oYW1vdW50KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGludDMyX3QgYW1vdW50
ID0gaW1tZWRpYXRlMTYoKSA8PCAoaHcoKSAqIDE2KTsKICAgICAgICAgICAgIGFtb3VudCA9IH5h
bW91bnQ7CiAgICAgICAgICAgICBhcHBlbmRTaWduZWRJbW1lZGlhdGUoYW1vdW50KTsKKyAgICAg
ICAgICAgIG1fYnVpbHRDb25zdGFudCA9IHN0YXRpY19jYXN0PGludHB0cl90PihhbW91bnQpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKG9w
TmFtZSgpKTsKQEAgLTE2MDEsMTEgKzE3MjQsNjUgQEAgY29uc3QgY2hhciogQTY0RE9wY29kZU1v
dmVXaWRlOjpmb3JtYXQoKQogICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CiAgICAgICAg
ICAgICBhcHBlbmRTaGlmdEFtb3VudChodygpKTsKICAgICAgICAgfQotICAgIH0KIAotICAgIHJl
dHVybiBtX2Zvcm1hdEJ1ZmZlcjsKKyAgICAgICAgaWYgKG9wYygpID09IDIpIC8vIEVuY29kaW5n
IGZvciBtb3Z6CisgICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSAwOworCisgICAgICAgIHVu
c2lnbmVkIHNoaWZ0ID0gaHcoKSAqIDE2OworICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSBzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KGltbWVkaWF0ZTE2KCkpIDw8IHNoaWZ0OworICAgICAgICB1aW50
cHRyX3QgbWFzayA9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigweGZmZmYpIDw8IHNoaWZ0KTsK
KyAgICAgICAgbV9idWlsdENvbnN0YW50ICY9IG1hc2s7CisgICAgICAgIG1fYnVpbHRDb25zdGFu
dCB8PSB2YWx1ZTsKKyAgICB9CisKKyAgICBhdXRvIGR1bXBDb25zdGFudERhdGEgPSBbJl0gewor
ICAgICAgICB1aW50MzJfdCogbmV4dFBDID0gbV9jdXJyZW50UEMgKyAxOworICAgICAgICBpZiAo
bmV4dFBDID49IG1fZW5kUEMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQTY0RE9w
Y29kZSBuZXh0QmFzZU9wY29kZShtX3N0YXJ0UEMsIG1fZW5kUEMpOworICAgICAgICBBNjRET3Bj
b2RlTW92ZVdpZGUmIG5leHRPcGNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxBNjRET3Bjb2RlTW92
ZVdpZGUqPigmbmV4dEJhc2VPcGNvZGUpOworICAgICAgICBuZXh0T3Bjb2RlLnNldFBDQW5kT3Bj
b2RlKG5leHRQQywgKm5leHRQQyk7CisKKyAgICAgICAgYm9vbCBuZXh0SXNNb3ZlV2lkZUdyb3Vw
ID0gb3Bjb2RlR3JvdXBOdW1iZXIobV9vcGNvZGUpID09IG9wY29kZUdyb3VwTnVtYmVyKCpuZXh0
UEMpOworCisgICAgICAgIGlmIChuZXh0SXNNb3ZlV2lkZUdyb3VwICYmIG5leHRPcGNvZGUuaXNW
YWxpZCgpICYmIG5leHRPcGNvZGUucmQoKSA9PSByZCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHZvaWQqIHB0ciA9IHJlbW92ZUNvZGVQdHJUYWcoYml0d2lzZV9jYXN0PHZvaWQq
PihtX2J1aWx0Q29uc3RhbnQpKTsKKyAgICAgICAgaWYgKCFwdHIpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKEludGVncml0eTo6aXNTYW5lUG9pbnRlcihwdHIpKSB7CisgICAg
ICAgICAgICBidWZmZXJQcmludGYoIiAtPiAlcCIsIHB0cik7CisgICAgICAgICAgICBpZiAoY29u
c3QgY2hhciogbGFiZWwgPSBsYWJlbEZvcihwdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBi
dWZmZXJQcmludGYoIiAlcyIsIGxhYmVsKTsKKyAgICAgICAgICAgIGlmIChpc0pJVFBDKHB0cikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclByaW50ZigiIEpJVCBQQyIpOworICAgICAg
ICAgICAgaWYgKExMSW50Ojppc0xMSW50UEMocHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
YnVmZmVyUHJpbnRmKCIgTExJbnQgUEMiKTsKKyAgICAgICAgICAgIGhhbmRsZVBvdGVudGlhbERh
dGFQb2ludGVyKHB0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZiBDUFUo
QVJNNjRFKQorICAgICAgICBpZiAoaGFuZGxlUG90ZW50aWFsUHRyVGFnKG1fYnVpbHRDb25zdGFu
dCkpCisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICAgICAgaWYgKG1fYnVpbHRDb25z
dGFudCA8IDB4MTAwMDApCisgICAgICAgICAgICBidWZmZXJQcmludGYoIiAtPiAldSIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX2J1aWx0Q29uc3RhbnQpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgYnVmZmVyUHJpbnRmKCIgLT4gJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtX2J1
aWx0Q29uc3RhbnQpKTsKKyAgICB9OworCisgICAgaWYgKG1fc3RhcnRQQykKKyAgICAgICAgZHVt
cENvbnN0YW50RGF0YSgpOworCisgICAgcmV0dXJuIFRyYWl0OjphY2NlcHRlZFJlc3VsdCh0aGlz
KTsKIH0KIAorY29uc3QgY2hhciogQTY0RE9wY29kZU1vdmVXaWRlOjpmb3JtYXQoKSB7IHJldHVy
biBwYXJzZTxNb3ZlV2lkZUZvcm1hdFRyYWl0PigpOyB9Citib29sIEE2NERPcGNvZGVNb3ZlV2lk
ZTo6aXNWYWxpZCgpIHsgcmV0dXJuIHBhcnNlPE1vdmVXaWRlSXNWYWxpZFRyYWl0PigpOyB9CisK
IGNvbnN0IGNoYXIqIEE2NERPcGNvZGVUZXN0QW5kQnJhbmNoSW1tZWRpYXRlOjpmb3JtYXQoKQog
ewogICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShvcEJpdCgpID8gInRibnoiIDogInRieiIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bjb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02
NC9BNjRET3Bjb2RlLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQs
NyArMTk0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBidWZmZXJQcmludGYoImxzbCAjJXUiLCAx
NiAqIGFtb3VudCk7CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgYnVmZmVyU2l6
ZSA9IDgxOworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGJ1ZmZlclNpemUgPSAxMDE7CiAKICAg
ICBjaGFyIG1fZm9ybWF0QnVmZmVyW2J1ZmZlclNpemVdOwogICAgIHVpbnQzMl90KiBtX3N0YXJ0
UEM7CkBAIC0yMDIsNiArMjAyLDcgQEAgcHJvdGVjdGVkOgogICAgIHVpbnQzMl90KiBtX2N1cnJl
bnRQQzsKICAgICB1aW50MzJfdCBtX29wY29kZTsKICAgICBpbnQgbV9idWZmZXJPZmZzZXQ7Cisg
ICAgdWludHB0cl90IG1fYnVpbHRDb25zdGFudCB7IDAgfTsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgT3Bjb2RlR3JvdXAqIG9wY29kZVRhYmxlWzMyXTsKQEAgLTg3MiwxMSArODczLDI0IEBAIHB1
YmxpYzoKICAgICBERUZJTkVfU1RBVElDX0ZPUk1BVChBNjRET3Bjb2RlTW92ZVdpZGUsIHRoaXNP
YmopOwogCiAgICAgY29uc3QgY2hhciogZm9ybWF0KCk7CisgICAgYm9vbCBpc1ZhbGlkKCk7CiAK
ICAgICBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiBzX29wTmFtZXNbb3BjKCldOyB9CiAg
ICAgdW5zaWduZWQgb3BjKCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDI5KSAmIDB4MzsgfQogICAg
IHVuc2lnbmVkIGh3KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDIxKSAmIDB4MzsgfQogICAgIHVu
c2lnbmVkIGltbWVkaWF0ZTE2KCkgeyByZXR1cm4gKG1fb3Bjb2RlID4+IDUpICYgMHhmZmZmOyB9
CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXQ+IHR5cGVuYW1lIFRyYWl0
OjpSZXN1bHRUeXBlIHBhcnNlKCk7CisgICAgYm9vbCBoYW5kbGVQb3RlbnRpYWxEYXRhUG9pbnRl
cih2b2lkKik7CisgICAgYm9vbCBoYW5kbGVQb3RlbnRpYWxQdHJUYWcodWludHB0cl90KTsKKwor
ICAgIC8vIFRoZXNlIGZvcndhcmRpbmcgZnVuY3Rpb25zIGFyZSBuZWVkZWQgZm9yIE1vdmVXaWRl
Rm9ybWF0VHJhaXQgb25seS4KKyAgICBjb25zdCBjaGFyKiBiYXNlRm9ybWF0KCkgeyByZXR1cm4g
QTY0RE9wY29kZTo6Zm9ybWF0KCk7IH0KKyAgICBjb25zdCBjaGFyKiBmb3JtYXRCdWZmZXIoKSB7
IHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsgfQorCisgICAgZnJpZW5kIGNsYXNzIE1vdmVXaWRlRm9y
bWF0VHJhaXQ7CisgICAgZnJpZW5kIGNsYXNzIE1vdmVXaWRlSXNWYWxpZFRyYWl0OwogfTsKIAog
Y2xhc3MgQTY0RE9wY29kZVRlc3RBbmRCcmFuY2hJbW1lZGlhdGUgOiBwdWJsaWMgQTY0RE9wY29k
ZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5jcHAJ
KHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0
clRhZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw4ICszNiwxOSBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQorI2lm
IENQVShBUk02NEUpCisKK2NvbnN0IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFnIHRhZykKK3sKKyNk
ZWZpbmUgUkVUVVJOX1BUUlRBR19OQU1FKF90YWdOYW1lLCBjYWxsZWVUeXBlLCBjYWxsZXJUeXBl
KSBjYXNlIF90YWdOYW1lOiByZXR1cm4gI190YWdOYW1lOworICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHRhZykpIHsKKyAgICAgICAgRk9SX0VBQ0hfSlNDX1BUUlRBRyhSRVRVUk5f
UFRSVEFHX05BTUUpCisgICAgfQorI3VuZGVmIFJFVFVSTl9QVFJUQUdfTkFNRQorICAgIHJldHVy
biBudWxscHRyOyAvLyBNYXRjaGluZyB0YWcgbm90IGZvdW5kLgorfQogCisjaWYgRU5BQkxFKFBU
UlRBR19ERUJVR0dJTkcpCiBzdGF0aWMgY29uc3QgY2hhciogdGFnRm9yUHRyKGNvbnN0IHZvaWQq
IHB0cikKIHsKICNkZWZpbmUgUkVUVVJOX05BTUVfSUZfVEFHX01BVENIRVModGFnLCBjYWxsZWVU
eXBlLCBjYWxsZXJUeXBlKSBcCkBAIC01MCwyNCArNjEsMTQgQEAgc3RhdGljIGNvbnN0IGNoYXIq
IHRhZ0ZvclB0cihjb25zdCB2b2lkKgogICAgIHJldHVybiBudWxscHRyOyAvLyBNYXRjaGluZyB0
YWcgbm90IGZvdW5kLgogfQogCi1zdGF0aWMgY29uc3QgY2hhciogcHRyVGFnTmFtZShQdHJUYWcg
dGFnKQotewotI2RlZmluZSBSRVRVUk5fUFRSVEFHX05BTUUoX3RhZ05hbWUsIGNhbGxlZVR5cGUs
IGNhbGxlclR5cGUpIGNhc2UgX3RhZ05hbWU6IHJldHVybiAjX3RhZ05hbWU7Ci0gICAgc3dpdGNo
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGFnKSkgewotICAgICAgICBGT1JfRUFDSF9KU0NfUFRS
VEFHKFJFVFVSTl9QVFJUQUdfTkFNRSkKLSAgICB9Ci0jdW5kZWYgUkVUVVJOX1BUUlRBR19OQU1F
Ci0gICAgcmV0dXJuIG51bGxwdHI7IC8vIE1hdGNoaW5nIHRhZyBub3QgZm91bmQuCi19Ci0KIHZv
aWQgaW5pdGlhbGl6ZVB0clRhZ0xvb2t1cCgpCiB7CiAgICAgV1RGOjpQdHJUYWdMb29rdXAmIGxv
b2t1cCA9IGdfanNjQ29uZmlnLnB0clRhZ0xvb2t1cFJlY29yZDsKICAgICBsb29rdXAuaW5pdGlh
bGl6ZSh0YWdGb3JQdHIsIHB0clRhZ05hbWUpOwogICAgIFdURjo6cmVnaXN0ZXJQdHJUYWdMb29r
dXAoJmxvb2t1cCk7CiB9Ci0KLSNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBFTkFCTEUoUFRSVEFH
X0RFQlVHR0lORykKKyNlbmRpZiAvLyBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykKKyNlbmRpZiAv
LyBDUFUoQVJNNjRFKQogCiAjaWYgQ1BVKEFSTTY0RSkKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ4
LDYgKzI0OCwxMCBAQCB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29rdXAoKTsKIGlubGluZSB2b2lk
IGluaXRpYWxpemVQdHJUYWdMb29rdXAoKSB7IH0KICNlbmRpZgogCisjaWYgQ1BVKEFSTTY0RSkK
K2NvbnN0IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFnKTsKKyNlbmRpZiAvLyBDUFUoQVJNNjRFKQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIG5hbWVzcGFjZSBXVEYgewogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2NSwxMCArNDY1LDE4IEBAIHZvaWQgT3B0aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cygKICAgICBpZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5KCkpCiAgICAgICAgIE9wdGlvbnM6
OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgpID0gZmFsc2U7CiAgICAgCi0gICAgaWYgKE9wdGlv
bnM6OmxvZ0pJVCgpCi0gICAgICAgIHx8IE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpCisgICAg
aWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmFzeW5j
RGlzYXNzZW1ibHkoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKQog
ICAgICAgICB8fCBPcHRpb25zOjpkdW1wRlRMRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRp
b25zOjpkdW1wUmVnRXhwRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wV2Fz
bURpc2Fzc2VtYmx5KCkKKyAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEJCUURpc2Fzc2VtYmx5KCkK
KyAgICAgICAgfHwgT3B0aW9uczo6ZHVtcE9NR0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIE9wdGlv
bnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSA9IHRydWU7CisKKyAgICBpZiAoT3B0aW9uczo6
bG9nSklUKCkKKyAgICAgICAgfHwgT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpCiAg
ICAgICAgIHx8IE9wdGlvbnM6OmR1bXBCeXRlY29kZUF0REZHVGltZSgpCiAgICAgICAgIHx8IE9w
dGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNlKCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcERG
R0dyYXBoQXRFYWNoUGhhc2UoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDcg
QEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICBcCiAgICAgdihCb29s
LCB1c2VPU0xvZywgZmFsc2UsIE5vcm1hbCwgIkxvZyBkYXRhTG9nKClzIHRvIG9zX2xvZyBpbnN0
ZWFkIG9mIHN0ZGVyciIpIFwKICAgICAvKiBkdW1wRGlzYXNzZW1ibHkgaW1wbGllcyBkdW1wREZH
RGlzYXNzZW1ibHkuICovIFwKKyAgICB2KEJvb2wsIG5lZWREaXNhc3NlbWJseVN1cHBvcnQsIGZh
bHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIGR1bXBEaXNhc3NlbWJseSwgZmFs
c2UsIE5vcm1hbCwgImR1bXBzIGRpc2Fzc2VtYmx5IG9mIGFsbCBKSVQgY29tcGlsZWQgY29kZSB1
cG9uIGNvbXBpbGF0aW9uIikgXAogICAgIHYoQm9vbCwgYXN5bmNEaXNhc3NlbWJseSwgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgbG9nSklULCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MDksNiArMTQwOSwxNiBAQCB2b2lkIFZNOjpjbGVhclNjcmF0Y2hCdWZm
ZXJzKCkKICAgICAgICAgc2NyYXRjaEJ1ZmZlci0+c2V0QWN0aXZlTGVuZ3RoKDApOwogfQogCiti
b29sIFZNOjppc1NjcmF0Y2hCdWZmZXIodm9pZCogcHRyKQoreworICAgIExvY2tlciBsb2NrZXIg
eyBtX3NjcmF0Y2hCdWZmZXJMb2NrIH07CisgICAgZm9yIChhdXRvKiBzY3JhdGNoQnVmZmVyIDog
bV9zY3JhdGNoQnVmZmVycykgeworICAgICAgICBpZiAoc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZl
cigpID09IHB0cikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIHZvaWQgVk06OmVuc3VyZVNoYWRvd0NoaWNrZW4oKQogewogICAgIGlmICht
X3NoYWRvd0NoaWNrZW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlz
aW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY4NSw2ICs2ODUsNyBAQCBwdWJsaWM6CiAgICAgLy8gLSBZb3UgY2FuIG9u
bHkgd3JpdGUgdG8gZW50cmllcyBpbiB0aGUgU2NyYXRjaEJ1ZmZlciBmcm9tIHRoZSBtYWluIHRo
cmVhZC4KICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplX3Qgc2l6
ZSk7CiAgICAgdm9pZCBjbGVhclNjcmF0Y2hCdWZmZXJzKCk7CisgICAgYm9vbCBpc1NjcmF0Y2hC
dWZmZXIodm9pZCopOwogCiAgICAgRW5jb2RlZEpTVmFsdWUqIGV4Y2VwdGlvbkZ1enppbmdCdWZm
ZXIoc2l6ZV90IHNpemUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0ludGVncml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9J
bnRlZ3JpdHkuaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0ludGVncml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw4IEBAIEFMV0FZU19J
TkxJTkUgc3RhdGljIGJvb2wgaXNTYW5lUG9pbnRlcigKICAgICB1aW50cHRyX3QgcG9pbnRlckFz
SW50ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcik7CiAgICAgdWludHB0cl90IGNh
bm9uaWNhbFBvaW50ZXJCaXRzID0gcG9pbnRlckFzSW50IDw8ICg2NCAtIE9TX0NPTlNUQU5UKEVG
RkVDVElWRV9BRERSRVNTX1dJRFRIKSk7CiAgICAgdWludHB0cl90IG5vbkNhbm9uaWNhbFBvaW50
ZXJCaXRzID0gcG9pbnRlckFzSW50ID4+IE9TX0NPTlNUQU5UKEVGRkVDVElWRV9BRERSRVNTX1dJ
RFRIKTsKLSAgICByZXR1cm4gIW5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzICYmIGNhbm9uaWNhbFBv
aW50ZXJCaXRzOworICAgIHVpbnRwdHJfdCBsb3dlcjRHID0gKHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oMSkgPDwgMzIpIC0gMTsKKyAgICByZXR1cm4gIW5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzICYm
IGNhbm9uaWNhbFBvaW50ZXJCaXRzICYmIHBvaW50ZXJBc0ludCA+IGxvd2VyNEc7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShwb2ludGVyKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtQ2FsbGluZ0NvbnZlbnRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvUGxhdGZvcm1DYWxsaW5nQ29udmVudGlvbnMuaAkocmV2aXNpb24gMjk0MjIw
KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1DYWxsaW5nQ29udmVudGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC04NCw5
ICs4NCwyNCBAQAogI2RlZmluZSBKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMKICNlbmRpZgogCisv
KgogI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjZGVmaW5lIEpTQ19BTk5P
VEFURV9KSVRfT1BFUkFUSU9OX0VYVFJBUyh2YWxpZGF0ZUZ1bmN0aW9uLCBuYW1lKSAodm9pZCop
dmFsaWRhdGVGdW5jdGlvbiwgbmFtZQorI2Vsc2UKKyNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9P
UEVSQVRJT05fRVhUUkFTKHZhbGlkYXRlRnVuY3Rpb24sIG5hbWUpIG5hbWUKKyNlbmRpZgorCiAj
ZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKSBcCi0g
ICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBfSklUVGFyZ2V0SURfIyNm
dW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9uKCJfX0RBVEFfQ09OU1QsX19qc2Nf
b3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCAodm9pZCopZnVuY3Rpb24jI1ZhbGlkYXRlIH07
CisgICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBfSklUVGFyZ2V0SURf
IyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9uKCJfX0RBVEFfQ09OU1QsX19q
c2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElP
Tl9FWFRSQVMoZnVuY3Rpb24jI1ZhbGlkYXRlLCAjZnVuY3Rpb24pIH07CisqLworCisjaWYgRU5B
QkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKyNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9P
UEVSQVRJT05fSU5URVJOQUwoZnVuY3Rpb24pIFwKKyAgICBjb25zdGV4cHIgSlNDOjpKSVRPcGVy
YXRpb25Bbm5vdGF0aW9uIF9KSVRUYXJnZXRJRF8jI2Z1bmN0aW9uIF9fYXR0cmlidXRlX18oKHVz
ZWQsIHNlY3Rpb24oIl9fREFUQV9DT05TVCxfX2pzY19vcHMiKSkpID0geyAodm9pZCopZnVuY3Rp
b24sICh2b2lkKilmdW5jdGlvbiMjVmFsaWRhdGUsICNmdW5jdGlvbiB9OworI2Vsc2UKKyNkZWZp
bmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fSU5URVJOQUwoZnVuY3Rpb24pIFwKKyAgICBj
b25zdGV4cHIgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIF9KSVRUYXJnZXRJRF8jI2Z1bmN0
aW9uIF9fYXR0cmlidXRlX18oKHVzZWQsIHNlY3Rpb24oIl9fREFUQV9DT05TVCxfX2pzY19vcHMi
KSkpID0geyAodm9pZCopZnVuY3Rpb24sICNmdW5jdGlvbiB9OworI2VuZGlmCiAKICNkZWZpbmUg
SlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT04oZnVuY3Rpb24pIFwKICAgICBKU0NfREVDTEFSRV9B
TkRfREVGSU5FX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTihmdW5jdGlvbik7IFwKQEAgLTEwMCwx
MiArMTE1LDYgQEAKICAgICBKU0NfREVDTEFSRV9BTkRfREVGSU5FX0pJVF9PUEVSQVRJT05fUkVU
VVJOX1ZBTElEQVRJT04oZnVuY3Rpb24pOyBcCiAgICAgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJ
T05fSU5URVJOQUwoZnVuY3Rpb24pCiAKLSNlbHNlCi0jZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRf
T1BFUkFUSU9OKGZ1bmN0aW9uKQotI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9Q
Uk9CRShmdW5jdGlvbikKLSNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fUkVUVVJO
KGZ1bmN0aW9uKQotI2VuZGlmCi0KIAogI2RlZmluZSBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT05f
V0lUSE9VVF9WQVJJQUJMRShmdW5jdGlvbk5hbWUsIHJldHVyblR5cGUsIHBhcmFtZXRlcnMpIFwK
ICAgICByZXR1cm5UeXBlIEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyBmdW5jdGlvbk5hbWUgcGFy
YW1ldGVycwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVKSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzAsMTAgKzMwLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShKSVRf
T1BFUkFUSU9OX1ZBTElEQVRJT04pCiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlIF9fYXNtKCJzZWN0aW9uJHN0YXJ0
JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJhdGlv
bkFubm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlIF9fYXNtKCJzZWN0aW9uJGVu
ZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9W
QUxJREFUSU9OKQorCiB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpCiB7CiAgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CkBAIC00Myw0ICs0NCwxNCBAQCB2b2lkIHBvcHVsYXRl
SklUT3BlcmF0aW9ucygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKIAorI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCit2b2lkIHBvcHVsYXRlRGlzYXNzZW1i
bHlMYWJlbHMoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0
Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlv
bnNJbldlYkNvcmUsICZlbmRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmUpOworICAgIH0pOworfQor
I2VuZGlmIC8vIEVOQUJMRShESVNBU1NFTUJMRVIpCisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjk0
MjIwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpJVE9wZXJhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEwICsyNywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKKyNpZiBFTkFCTEUoRElTQVNTRU1CTEVSKQorV0VCQ09SRV9FWFBPUlQgdm9pZCBwb3B1
bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCk7CisjZWxzZQoraW5saW5lIHZvaWQgcG9wdWxhdGVEaXNh
c3NlbWJseUxhYmVscygpIHsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9W
QUxJREFUSU9OKQogV0VCQ09SRV9FWFBPUlQgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKTsK
ICNlbHNlCi1pbmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IH0KK2lubGluZSB2
b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIHsgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygp
OyB9CiAjZW5kaWYKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3Jl
VGVzdFN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMv
V2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL1dlYkNv
cmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNDEsMTAgKzI0MSwxMSBAQCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzRm9yCiB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04p
CiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVy
YXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQgX19hc20oInNlY3Rpb24kc3RhcnQkX19EQVRBX0NP
TlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlv
biBlbmRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCBfX2FzbSgic2VjdGlvbiRl
bmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05f
VkFMSURBVElPTikKKwogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogewogICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwpAQCAtMjU0LDQgKzI1NSwxNCBAQCB2b2lkIHBvcHVs
YXRlSklUT3BlcmF0aW9ucygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKIAorI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCit2b2lkIHBvcHVsYXRlRGlzYXNz
ZW1ibHlMYWJlbHMoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAg
IHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgSlNDOjpKSVRPcGVyYXRpb25M
aXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJh
dGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCwgJmVuZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRl
c3RTdXBwb3J0KTsKKyAgICB9KTsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoRElTQVNTRU1CTEVSKQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlVGVzdFN1cHBvcnQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuaAkocmV2aXNpb24gMjk0MjIwKQor
KysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjcsMTAgKzY3LDE2IEBAIHZvaWQgc2V0dXBOZXdseUNyZWF0ZWRT
ZXJ2aWNlV29ya2VyKHVpbnQKICAgICAKIHZvaWQgc2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXNGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpIFRFU1RfU1VQUE9SVF9FWFBPUlQ7CiAKKyNp
ZiBFTkFCTEUoRElTQVNTRU1CTEVSKQordm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkg
VEVTVF9TVVBQT1JUX0VYUE9SVDsKKyNlbHNlCitpbmxpbmUgdm9pZCBwb3B1bGF0ZURpc2Fzc2Vt
Ymx5TGFiZWxzKCkgeyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElE
QVRJT04pCiB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIFRFU1RfU1VQUE9SVF9FWFBPUlQ7
CiAjZWxzZQotaW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyB9CitpbmxpbmUg
dm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMo
KTsgfQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVUZXN0U3VwcG9ydAo=
</data>
<flag name="commit-queue"
          id="488499"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459451</attachid>
            <date>2022-05-16 13:30:14 -0700</date>
            <delta_ts>2022-05-16 17:46:06 -0700</delta_ts>
            <desc>EWS testing.</desc>
            <filename>wip-disassemble-operations2.3.patch</filename>
            <type>text/plain</type>
            <size>48738</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1Niw3ICszNzU2LDcgQEAg
aW50IHJ1bkpTQyhjb25zdCBDb21tYW5kTGluZSYgb3B0aW9ucywgYgogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2lmIEVOQUJM
RShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShDT05TVEFOVF9ESVNBU1NFTUJM
WSkKIGV4dGVybiBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRp
b25zSW5TaGVsbCBfX2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7
CiBleHRlcm4gY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJ
blNoZWxsIF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiAjZW5k
aWYKQEAgLTM3ODMsNiArMzc4MywxMSBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCiAjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKICAgICBKU0M6OkpJVE9w
ZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0
aW9uc0luU2hlbGwsICZlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsKTsKICNlbmRpZgorI2lmIEVO
QUJMRShDT05TVEFOVF9ESVNBU1NFTUJMWSkKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVl
ZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0Ojpw
b3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlvbnNJ
blNoZWxsLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7CisjZW5kaWYKKwogICAgIGluaXRp
YWxpemVUaW1lb3V0SWZOZWVkZWQoKTsKIAogI2lmIE9TKERBUldJTikgfHwgT1MoTElOVVgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0
aW9uTGlzdC5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxNCAr
MjYsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25MaXN0
LmgiCiAKKyNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJHYXRlLmgiCiAjaW5j
bHVkZSAiSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgog
I2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2lmIEVOQUJMRShK
SVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShDT05TVEFOVF9ESVNBU1NFTUJMWSkK
IAogTGF6eU5ldmVyRGVzdHJveWVkPEpJVE9wZXJhdGlvbkxpc3Q+IGppdE9wZXJhdGlvbkxpc3Q7
CiAKQEAgLTQ1LDYgKzQ3LDggQEAgdm9pZCBKSVRPcGVyYXRpb25MaXN0Ojppbml0aWFsaXplKCkK
ICAgICBqaXRPcGVyYXRpb25MaXN0LmNvbnN0cnVjdCgpOwogfQogCisjaWYgRU5BQkxFKEpJVF9P
UEVSQVRJT05fVkFMSURBVElPTikKKwogI2lmIEpJVF9PUEVSQVRJT05fVkFMSURBVElPTl9BU1NF
UlRfRU5BQkxFRAogdm9pZCBKSVRPcGVyYXRpb25MaXN0OjphZGRJbnZlcnNlTWFwKHZvaWQqIHZh
bGlkYXRpb25FbnRyeSwgdm9pZCogcG9pbnRlcikKIHsKQEAgLTg1LDkgKzg5LDE1IEBAIHZvaWQg
SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0kKICAgICBzdGQ6OmNhbGxfb25jZShv
bmNlS2V5LCBbXSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgICAg
IGppdE9wZXJhdGlvbkxpc3QtPmFkZFBvaW50ZXJzKCZzdGFydE9mSklUT3BlcmF0aW9uc0luSlND
LCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5KU0MpOworI2lmIEVOQUJMRShDT05TVEFOVF9ESVNBU1NF
TUJMWSkKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBv
cnQoKSkpCisgICAgICAgICAgICBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0
Q29yZSgpOworI2VuZGlmCiAgICAgfSk7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJB
VElPTl9WQUxJREFUSU9OKQorCiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUobGxpbnRf
ZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwogTExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElE
QVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpOwogTExJTlRfREVDTEFS
RV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKTsK
QEAgLTEwNCwzMSArMTE0LDgxIEBAIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShjaGVj
a3BvaW4KIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShub3JtYWxfb3NyX2V4aXRfdHJh
bXBvbGluZSk7CiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUoZnV6emVyX3JldHVybl9l
YXJseV9mcm9tX2xvb3BfaGludCk7CiAKLXZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQ
b2ludGVyc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2VLZXk7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworI2lmIEVO
QUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pICYmIEVOQUJMRShDT05TVEFOVF9ESVNBU1NF
TUJMWSkKKyNkZWZpbmUgTExJTlRfT1BfRVhUUkFTKHZhbGlkYXRlTGFiZWwsIG5hbWVTdHIpIGJp
dHdpc2VfY2FzdDx2b2lkKj4odmFsaWRhdGVMYWJlbCksIG5hbWVTdHIKKyNlbGlmIEVOQUJMRShK
SVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjZGVmaW5lIExMSU5UX09QX0VYVFJBUyh2YWxpZGF0
ZUxhYmVsLCBuYW1lU3RyKSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbGlkYXRlTGFiZWwpCisjZWxz
ZSAvLyBFTkFCTEUoQ09OU1RBTlRfRElTQVNTRU1CTFkpCisjZGVmaW5lIExMSU5UX09QX0VYVFJB
Uyh2YWxpZGF0ZUxhYmVsLCBuYW1lU3RyKSBuYW1lU3RyCisjZW5kaWYKIAogI2RlZmluZSBMTElO
VF9ST1VUSU5FKGZ1bmN0aW9uTmFtZSkgeyBcCiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4o
TExJbnQ6OmdldENvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KGZ1bmN0aW9uTmFtZSkp
LCBcCi0gICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJTlRfUk9VVElORV9WQUxJREFURShm
dW5jdGlvbk5hbWUpKSBcCisgICAgICAgIExMSU5UX09QX0VYVFJBUyhMTElOVF9ST1VUSU5FX1ZB
TElEQVRFKGZ1bmN0aW9uTmFtZSksICNmdW5jdGlvbk5hbWUpIFwKICAgICB9LAogCiAjZGVmaW5l
IExMSU5UX09QKG5hbWUpIHsgXAogICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50Ojpn
ZXRDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKLSAgICAgICAgYml0
d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fVkFMSURBVEUobmFtZSkpIFwKKyAgICAgICAg
TExJTlRfT1BfRVhUUkFTKExMSU5UX1JFVFVSTl9WQUxJREFURShuYW1lKSwgI25hbWUpIFwKICAg
ICB9LCB7IFwKICAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0V2lkZTE2Q29k
ZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBcCi0gICAgICAgIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oTExJTlRfUkVUVVJOX1dJREUxNl9WQUxJREFURShuYW1lKSkgXAorICAgICAg
ICBMTElOVF9PUF9FWFRSQVMoTExJTlRfUkVUVVJOX1dJREUxNl9WQUxJREFURShuYW1lKSwgI25h
bWUgIiBbd2lkZTE2XSIpIFwKICAgICB9LCB7IFwKICAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQq
PihMTEludDo6Z2V0V2lkZTMyQ29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4obmFtZSkp
LCBcCi0gICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJTlRfUkVUVVJOX1dJREUzMl9WQUxJ
REFURShuYW1lKSkgXAorICAgICAgICBMTElOVF9PUF9FWFRSQVMoTExJTlRfUkVUVVJOX1dJREUz
Ml9WQUxJREFURShuYW1lKSwgI25hbWUgIiBbd2lkZTMyXSIpIFwKICAgICB9LAorLyovCisKKyNp
ZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2RlZmluZSBMTElOVF9ST1VUSU5F
KGZ1bmN0aW9uTmFtZSkgeyBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6Omdl
dENvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KGZ1bmN0aW9uTmFtZSkpLCBcCisgICAg
ICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJTlRfUk9VVElORV9WQUxJREFURShmdW5jdGlvbk5h
bWUpKSwgI2Z1bmN0aW9uTmFtZSBcCisgICAgfSwKKworI2RlZmluZSBMTElOVF9PUChuYW1lKSB7
IFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRy
PENGdW5jdGlvblB0clRhZz4obmFtZSkpLCBcCisgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4o
TExJTlRfUkVUVVJOX1ZBTElEQVRFKG5hbWUpKSwgI25hbWUgXAorICAgIH0sIHsgXAorICAgICAg
ICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElO
VF9SRVRVUk5fV0lERTE2X1ZBTElEQVRFKG5hbWUpKSwgI25hbWUgIiBbd2lkZTE2XSIgXAorICAg
IH0sIHsgXAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMzJDb2Rl
RnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgYml0d2lzZV9j
YXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lERTMyX1ZBTElEQVRFKG5hbWUpKSwgI25hbWUgIiBb
d2lkZTMyXSIgXAorICAgIH0sCisjZWxzZSAvLyBub3QgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKKyNkZWZpbmUgTExJTlRfUk9VVElORShmdW5jdGlvbk5hbWUpIHsgXAorICAgICAg
ICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPihmdW5jdGlvbk5hbWUpKSwgXAorICAgICAgICAjZnVuY3Rpb25OYW1lIFwKKyAgICB9
LAorCisjZGVmaW5lIExMSU5UX09QKG5hbWUpIHsgXAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwK
KyAgICAgICAgI25hbWUgXAorICAgIH0sIHsgXAorICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KExMSW50OjpnZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSks
IFwKKyAgICAgICAgI25hbWUgIiBbd2lkZTE2XSIgXAorICAgIH0sIHsgXAorICAgICAgICBiaXR3
aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPihuYW1lKSksIFwKKyAgICAgICAgI25hbWUgIiBbd2lkZTMyXSIgXAorICAgIH0sCisj
ZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKy8vICovCiAKICNkZWZp
bmUgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG5hbWUsIC4uLikgXAogICAgIExMSU5UX09QKG5hbWUj
I19yZXR1cm5fbG9jYXRpb24pCiAKLSAgICAgICAgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlv
biBvcGVyYXRpb25zW10gPSB7CitzdHJ1Y3QgTExJbnRPcGVyYXRpb25zIHsKKyAgICBjb25zdCBK
SVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBvcGVyYXRpb25zOworICAgIHNpemVfdCBudW1iZXJPZk9w
ZXJhdGlvbnM7Cit9OworCitzdGF0aWMgTExJbnRPcGVyYXRpb25zIGxsaW50T3BlcmF0aW9ucygp
Cit7CisgICAgc3RhdGljIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIG9wZXJhdGlvbnMg
PSBudWxscHRyOworICAgIHN0YXRpYyBzaXplX3QgbnVtYmVyT2ZPcGVyYXRpb25zID0gMDsKKyAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNl
S2V5LCBbJl0geworICAgICAgICBzdGF0aWMgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBv
cGVyYXRpb25zU3RvcmFnZVtdID0gewogICAgICAgICAgICAgTExJTlRfUk9VVElORShsbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JPVVRJTkUobGxp
bnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JP
VVRJTkUobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spCkBAIC0xNjAsMTUgKzIy
MCwzNCBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJCiAgICAgICAg
ICAgICBKU0NfSlNfR0FURV9PUENPREVTKExMSU5UX1JFVFVSTl9MT0NBVElPTikKICAgICAgICAg
ICAgIEpTQ19XQVNNX0dBVEVfT1BDT0RFUyhMTElOVF9SRVRVUk5fTE9DQVRJT04pCiAgICAgICAg
IH07Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAgIGppdE9wZXJh
dGlvbkxpc3QtPmFkZFBvaW50ZXJzKG9wZXJhdGlvbnMsIG9wZXJhdGlvbnMgKyBXVEZfQVJSQVlf
TEVOR1RIKG9wZXJhdGlvbnMpKTsKKyAgICAgICAgb3BlcmF0aW9ucyA9IG9wZXJhdGlvbnNTdG9y
YWdlOworICAgICAgICBudW1iZXJPZk9wZXJhdGlvbnMgPSBXVEZfQVJSQVlfTEVOR1RIKG9wZXJh
dGlvbnNTdG9yYWdlKTsKKyAgICB9KTsKKyAgICByZXR1cm4geyBvcGVyYXRpb25zLCBudW1iZXJP
Zk9wZXJhdGlvbnMgfTsKK30KKwogI3VuZGVmIExMSU5UX1JPVVRJTkUKICN1bmRlZiBMTElOVF9P
UAogI3VuZGVmIExMSU5UX1JFVFVSTl9MT0NBVElPTgorI3VuZGVmIExMSU5UX09QX0VYVFJBUwor
CisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKwordm9pZCBKSVRPcGVyYXRp
b25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNl
S2V5LCBbXSB7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgeworICAgICAgICAgICAg
YXV0byBsaXN0ID0gbGxpbnRPcGVyYXRpb25zKCk7CisgICAgICAgICAgICBqaXRPcGVyYXRpb25M
aXN0LT5hZGRQb2ludGVycyhsaXN0Lm9wZXJhdGlvbnMsIGxpc3Qub3BlcmF0aW9ucyArIGxpc3Qu
bnVtYmVyT2ZPcGVyYXRpb25zKTsKKyAgICAgICAgfQorI2lmIEVOQUJMRShDT05TVEFOVF9ESVNB
U1NFTUJMWSkKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1
cHBvcnQoKSkpCisgICAgICAgICAgICBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2Vt
Ymx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCk7CisjZW5kaWYKICAgICB9KTsKIH0K
IAotCiB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkVtYmVkZGVyKGNv
bnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luT3BlcmF0aW9ucywgY29uc3QgSklUT3Bl
cmF0aW9uQW5ub3RhdGlvbiogZW5kT3BlcmF0aW9ucykKIHsKICAgICBpZiAoT3B0aW9uczo6dXNl
SklUKCkpCkBAIC0xNzcsNCArMjU2LDUzIEBAIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxh
dGVQb2ludGVyc0kKIAogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04p
CiAKKyNpZiBFTkFCTEUoQ09OU1RBTlRfRElTQVNTRU1CTFkpCisKK1NVUFBSRVNTX0FTQU4gdm9p
ZCBKSVRPcGVyYXRpb25MaXN0OjphZGREaXNhc3NlbWJseUxhYmVscyhjb25zdCBKSVRPcGVyYXRp
b25Bbm5vdGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSk7
CisgICAgZm9yIChjb25zdCBhdXRvKiBjdXJyZW50ID0gYmVnaW47IGN1cnJlbnQgIT0gZW5kOyAr
K2N1cnJlbnQpIHsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorICAgICAg
ICBhdXRvKiBvcGVyYXRpb24gPSBjdXJyZW50LT5vcGVyYXRpb25XaXRoVmFsaWRhdGlvbjsKKyNl
bHNlCisgICAgICAgIGF1dG8qIG9wZXJhdGlvbiA9IGN1cnJlbnQtPm9wZXJhdGlvbjsKKyNlbmRp
ZgorICAgICAgICByZWdpc3RlckxhYmVsKHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uKSwgY3Vy
cmVudC0+bmFtZSk7CisgICAgfQorfQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRl
RGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlKCkKK3sKKyAgICBBU1NFUlQoT3B0aW9u
czo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIGlmIChP
cHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAgICAgIGFkZERpc2Fzc2VtYmx5TGFiZWxzKCZzdGFy
dE9mSklUT3BlcmF0aW9uc0luSlNDLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5KU0MpOworICAgIH0p
OworfQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJ
bkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKQoreworICAgIEFTU0VSVChPcHRpb25zOjpuZWVkRGlz
YXNzZW1ibHlTdXBwb3J0KCkpOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5Owor
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUpJVCgpKSB7CisgICAgICAgICAgICBhdXRvIGxpc3QgPSBsbGludE9wZXJhdGlvbnMoKTsKKyAg
ICAgICAgICAgIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGxpc3Qub3BlcmF0aW9ucywgbGlzdC5vcGVy
YXRpb25zICsgbGlzdC5udW1iZXJPZk9wZXJhdGlvbnMpOworICAgICAgICB9CisgICAgfSk7Cit9
CisKK3ZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1i
ZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBjb25z
dCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKQoreworICAgIGlmIChMSUtF
TFkoIU9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgIGFkZERpc2Fzc2VtYmx5TGFiZWxz
KGJlZ2luT3BlcmF0aW9ucywgZW5kT3BlcmF0aW9ucyk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUo
Q09OU1RBTlRfRElTQVNTRU1CTFkpCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9W
QUxJREFUSU9OKSB8fCBFTkFCTEUoQ09OU1RBTlRfRElTQVNTRU1CTFkpCisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRp
b25MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9K
SVRPcGVyYXRpb25MaXN0LmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIs
NyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9O
X1ZBTElEQVRJT04pCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5B
QkxFKENPTlNUQU5UX0RJU0FTU0VNQkxZKQogCiAvLyBUaGlzIGluZGlyZWN0aW9uIGlzIHByb3Zp
ZGVkIHNvIHRoYXQgd2UgY2FuIG1hbnVhbGx5IGZvcmNlIG9uIGFzc2VydGlvbnMgZm9yCiAvLyB0
ZXN0aW5nIGV2ZW4gb24gcmVsZWFzZSBidWlsZHMuCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgSklUT3BlcmF0aW9uTGlzdCYgaW5zdGFuY2UoKTsKICAgICBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplKCk7CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGU+CiAgICAgdm9pZCogbWFwKFB0clR5cGUgcG9p
bnRlcikgY29uc3QKICAgICB7CkBAIC01OCwxMiArNTksMTcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV92YWxpZGF0ZWRPcGVyYXRpb25zSW52ZXJzZU1hcC5nZXQoYml0d2lzZV9jYXN0PHZv
aWQqPihwb2ludGVyKSk7CiAgICAgfQogI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVS
QVRJT05fVkFMSURBVElPTikKIAogICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkph
dmFTY3JpcHRDb3JlKCk7CiAgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVQb2ludGVyc0luSmF2YVNj
cmlwdENvcmVGb3JMTEludCgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
cG9wdWxhdGVQb2ludGVyc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiog
YmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRp
b25zKTsKIAorI2lmIEVOQUJMRShDT05TVEFOVF9ESVNBU1NFTUJMWSkKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcihj
b25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbk9wZXJhdGlvbnMsIGNvbnN0IEpJVE9w
ZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlvbnMpOworI2VuZGlmCisKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBhc3NlcnRJc0pJVE9wZXJhdGlvbihUIGZ1bmN0aW9u
KQogICAgIHsKICAgICAgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uKTsKQEAgLTgxLDYgKzg3LDEz
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisjaWYgRU5BQkxFKENPTlNUQU5UX0RJU0FT
U0VNQkxZKQorICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFT
Y3JpcHRDb3JlKCk7CisgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0lu
SmF2YVNjcmlwdENvcmVGb3JMTEludCgpOworICAgIHN0YXRpYyB2b2lkIGFkZERpc2Fzc2VtYmx5
TGFiZWxzKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luLCBjb25zdCBKSVRPcGVy
YXRpb25Bbm5vdGF0aW9uKiBlbmQpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGRQb2ludGVycyhjb25zdCBK
SVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlv
biogZW5kKTsKIAogI2lmIEpJVF9PUEVSQVRJT05fVkFMSURBVElPTl9BU1NFUlRfRU5BQkxFRApA
QCAtOTEsOCArMTA0LDExIEBAIHByaXZhdGU6CiAjaWYgSklUX09QRVJBVElPTl9WQUxJREFUSU9O
X0FTU0VSVF9FTkFCTEVECiAgICAgSGFzaE1hcDx2b2lkKiwgdm9pZCo+IG1fdmFsaWRhdGVkT3Bl
cmF0aW9uc0ludmVyc2VNYXA7CiAjZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQogfTsKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04p
CisKIEpTX0VYUE9SVF9QUklWQVRFIGV4dGVybiBMYXp5TmV2ZXJEZXN0cm95ZWQ8SklUT3BlcmF0
aW9uTGlzdD4gaml0T3BlcmF0aW9uTGlzdDsKIAogaW5saW5lIEpJVE9wZXJhdGlvbkxpc3QmIEpJ
VE9wZXJhdGlvbkxpc3Q6Omluc3RhbmNlKCkKQEAgLTEwMiw2ICsxMTgsMjIgQEAgaW5saW5lIEpJ
VE9wZXJhdGlvbkxpc3QmIEpJVE9wZXJhdGlvbkxpcwogCiAjZWxzZSAvLyBub3QgRU5BQkxFKEpJ
VF9PUEVSQVRJT05fVkFMSURBVElPTikKIAorQUxXQVlTX0lOTElORSB2b2lkIEpJVE9wZXJhdGlv
bkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlKCkKK3sKKyAgICBpZiAoVU5M
SUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgcG9wdWxh
dGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmUoKTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3Jl
Rm9yTExJbnQoKQoreworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlT
dXBwb3J0KCkpKQorICAgICAgICBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0
Q29yZUZvckxMSW50KCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQorCisjZWxzZSAvLyBub3QgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikg
fHwgRU5BQkxFKENPTlNUQU5UX0RJU0FTU0VNQkxZKQorCiBjbGFzcyBKSVRPcGVyYXRpb25MaXN0
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCkgeyB9CkBAIC0xMTMsNiAr
MTQ1LDYgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFz
c2VydElzSklUT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oVCkgeyB9CiB9OwogCi0jZW5kaWYgLy8g
RU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09Q
RVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoQ09OU1RBTlRfRElTQVNTRU1CTFkpCiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9K
SVRPcGVyYXRpb25WYWxpZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgJKHJldmlzaW9uIDI5NDIyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uVmFsaWRhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDEzICs0NywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
I2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCi0KIHN0cnVjdCBKSVRPcGVyYXRp
b25Bbm5vdGF0aW9uIHsKICAgICB2b2lkKiBvcGVyYXRpb247CisjaWYgRU5BQkxFKEpJVF9PUEVS
QVRJT05fVkFMSURBVElPTikKICAgICB2b2lkKiBvcGVyYXRpb25XaXRoVmFsaWRhdGlvbjsKKyNl
bmRpZgorI2lmIEVOQUJMRShDT05TVEFOVF9ESVNBU1NFTUJMWSkKKyAgICBjb25zdCBjaGFyKiBu
YW1lOworI2VuZGlmCiB9OwogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikK
KwogI2lmbmRlZiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04KICNkZWZpbmUg
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTl9WQUxJREFUSU9OKGZ1bmN0aW9uTmFtZSkKICNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMyArODIsMTUgQEAgTGlua0J1
ZmZlcjo6Q29kZVJlZjxMaW5rQnVmZmVyUHRyVGFnPiBMaQogICAgICAgICBzaXplX3Qgc3RyaW5n
TGVuZ3RoID0gdnNucHJpbnRmKG51bGxwdHIsIDAsIGZvcm1hdCwgcHJlZmxpZ2h0QXJncyk7CiAg
ICAgICAgIHZhX2VuZChwcmVmbGlnaHRBcmdzKTsKIAorICAgICAgICBjb25zdCBjaGFyIHByZWZp
eFtdID0gInRodW5rOiAiOwogICAgICAgICBjaGFyKiBidWZmZXIgPSAwOwotICAgICAgICBDU3Ry
aW5nIGxhYmVsID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChzdHJpbmdMZW5ndGggKyAxLCBi
dWZmZXIpOwotICAgICAgICB2c25wcmludGYoYnVmZmVyLCBzdHJpbmdMZW5ndGggKyAxLCBmb3Jt
YXQsIGFyZ0xpc3QpOwotICAgICAgICBidWZmZXJbc3RyaW5nTGVuZ3RoXSA9ICdcMCc7CisgICAg
ICAgIHNpemVfdCBsZW5ndGggPSBzdHJpbmdMZW5ndGggKyBzaXplb2YocHJlZml4KTsKKyAgICAg
ICAgQ1N0cmluZyBsYWJlbCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZm
ZXIpOworICAgICAgICBzbnByaW50ZihidWZmZXIsIGxlbmd0aCwgIiVzIiwgcHJlZml4KTsKKyAg
ICAgICAgdnNucHJpbnRmKGJ1ZmZlciArIHNpemVvZihwcmVmaXgpIC0gMSwgc3RyaW5nTGVuZ3Ro
ICsgMSwgZm9ybWF0LCBhcmdMaXN0KTsKICAgICAgICAgb3V0LnByaW50ZigiJXMiLCBidWZmZXIp
OwogCi0gICAgICAgIHJlZ2lzdGVyVGh1bmtMYWJlbChyZXN1bHQuY29kZSgpLnVudGFnZ2VkRXhl
Y3V0YWJsZUFkZHJlc3MoKSwgV1RGTW92ZShsYWJlbCkpOworICAgICAgICByZWdpc3RlckxhYmVs
KHJlc3VsdC5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLCBXVEZNb3ZlKGxhYmVs
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG91dC52cHJpbnRmKGZvcm1hdCwgYXJnTGlzdCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18xLmNwcAkocmV2aXNpb24gMjk0MjIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18xLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTkwMyw3ICs5MDMsNyBAQCBzdGF0aWMgdm9pZCBydW4oY29uc3QgY2hhciopCiAKICNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoQ09O
U1RBTlRfRElTQVNTRU1CTFkpCiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0
aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMgX19hc20oInNlY3Rpb24kc3RhcnQkX19E
QVRBX0NPTlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5u
b3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMyBfX2FzbSgic2VjdGlvbiRlbmQkX19E
QVRBX0NPTlNUJF9fanNjX29wcyIpOwogI2VuZGlmCkBAIC05MzAsNyArOTMwLDExIEBAIGludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luRW1i
ZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMsICZlbmRPZkpJVE9wZXJhdGlvbnNJ
blRlc3RCMyk7CiAjZW5kaWYKLSAgICAKKyNpZiBFTkFCTEUoQ09OU1RBTlRfRElTQVNTRU1CTFkp
CisgICAgaWYgKFVOTElLRUxZKEpTQzo6T3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgp
KSkKKyAgICAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFi
ZWxzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMywgJmVuZE9mSklUT3Bl
cmF0aW9uc0luVGVzdEIzKTsKKyNlbmRpZgorCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
PSAyOyArK2kpIHsKICAgICAgICAgSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpID0g
aTsKICAgICAgICAgcnVuKGZpbHRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAyOTQyMjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIK
IAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgPHZhcmlhbnQ+
CiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC0zNiw4ICszNywyMSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotdXNpbmcgVGh1bmtMYWJlbE1hcCA9IEhhc2hNYXA8dm9pZCosIENTdHJpbmc+OwotTGF6
eU5ldmVyRGVzdHJveWVkPFRodW5rTGFiZWxNYXA+IHRodW5rTGFiZWxNYXA7CituYW1lc3BhY2Ug
RGlzYXNzZW1ibGVyIHsKKwordXNpbmcgTGFiZWxNYXAgPSBIYXNoTWFwPHZvaWQqLCBzdGQ6OnZh
cmlhbnQ8Q1N0cmluZywgY29uc3QgY2hhcio+PjsKK0xhenlOZXZlckRlc3Ryb3llZDxMYWJlbE1h
cD4gbGFiZWxNYXA7CisKK3N0YXRpYyBMYWJlbE1hcCYgZW5zdXJlTGFiZWxNYXAoKQoreworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VL
ZXksIFtdIHsKKyAgICAgICAgbGFiZWxNYXAuY29uc3RydWN0KCk7CisgICAgfSk7CisgICAgcmV0
dXJuIGxhYmVsTWFwLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNhc3NlbWJsZXIKIAog
dm9pZCBkaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8RGlzYXNzZW1ibHlQ
dHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCogY29kZVN0YXJ0LCB2b2lkKiBjb2Rl
RW5kLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CkBAIC0xNTcsMjcg
KzE3MSwyNSBAQCB2b2lkIHdhaXRGb3JBc3luY2hyb25vdXNEaXNhc3NlbWJseSgpCiAgICAgYXN5
bmNocm9ub3VzRGlzYXNzZW1ibGVyKCkud2FpdFVudGlsRW1wdHkoKTsKIH0KIAotc3RhdGljIFRo
dW5rTGFiZWxNYXAmIGVuc3VyZVRodW5rTGFiZWxNYXAoKQordm9pZCByZWdpc3RlckxhYmVsKHZv
aWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVsKQogewotICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlS2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKLSAgICAg
ICAgdGh1bmtMYWJlbE1hcC5jb25zdHJ1Y3QoKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdGh1bmtM
YWJlbE1hcC5nZXQoKTsKKyAgICBEaXNhc3NlbWJsZXI6OmVuc3VyZUxhYmVsTWFwKCkuYWRkKHRo
dW5rQWRkcmVzcywgV1RGTW92ZShsYWJlbCkpOwogfQogCi12b2lkIHJlZ2lzdGVyVGh1bmtMYWJl
bCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJpbmcmJiBsYWJlbCkKK3ZvaWQgcmVnaXN0ZXJMYWJl
bCh2b2lkKiBhZGRyZXNzLCBjb25zdCBjaGFyKiBsYWJlbCkKIHsKLSAgICBlbnN1cmVUaHVua0xh
YmVsTWFwKCkuYWRkKHRodW5rQWRkcmVzcywgV1RGTW92ZShsYWJlbCkpOworICAgIERpc2Fzc2Vt
Ymxlcjo6ZW5zdXJlTGFiZWxNYXAoKS5hZGQoYWRkcmVzcywgbGFiZWwpOwogfQogCi1jb25zdCBj
aGFyKiBsYWJlbEZvclRodW5rKHZvaWQqIHRodW5rQWRkcmVzcykKK2NvbnN0IGNoYXIqIGxhYmVs
Rm9yKHZvaWQqIHRodW5rQWRkcmVzcykKIHsKLSAgICBhdXRvJiBtYXAgPSBlbnN1cmVUaHVua0xh
YmVsTWFwKCk7CisgICAgYXV0byYgbWFwID0gRGlzYXNzZW1ibGVyOjplbnN1cmVMYWJlbE1hcCgp
OwogICAgIGF1dG8gaXQgPSBtYXAuZmluZCh0aHVua0FkZHJlc3MpOwogICAgIGlmIChpdCA9PSBt
YXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBpdC0+dmFsdWUu
ZGF0YSgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENTdHJpbmc+KGl0LT52YWx1
ZSkpCisgICAgICAgIHJldHVybiBzdGQ6OmdldDxDU3RyaW5nPihpdC0+dmFsdWUpLmRhdGEoKTsK
KyAgICByZXR1cm4gc3RkOjpnZXQ8Y29uc3QgY2hhcio+KGl0LT52YWx1ZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9E
aXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNz
ZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw3ICs2MSw4IEBAIHZvaWQgZGlzYXNzZW1ibGVBc3luY2hyb25vdXNseSgKIAogSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCB3YWl0Rm9yQXN5bmNocm9ub3VzRGlzYXNzZW1ibHkoKTsKIAotdm9pZCBy
ZWdpc3RlclRodW5rTGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3RyaW5nJiYgbGFiZWwpOwot
Y29uc3QgY2hhciogbGFiZWxGb3JUaHVuayh2b2lkKiB0aHVua0FkZHJlc3MpOwordm9pZCByZWdp
c3RlckxhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVsKTsKK3ZvaWQgcmVn
aXN0ZXJMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIGNvbnN0IGNoYXIqIGxhYmVsKTsKK2NvbnN0
IGNoYXIqIGxhYmVsRm9yKHZvaWQqIHRodW5rQWRkcmVzcyk7CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bj
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVy
L0FSTTY0L0E2NERPcGNvZGUuY3BwCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxMCArMzIsMTYgQEAKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRl
ICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUg
IkludGVncml0eS5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJMTEludFBD
UmFuZ2VzLmgiCisjaW5jbHVkZSAiUHVyZU5hTi5oIgorI2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgi
CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDx3dGYvUHRyVGFnLmg+CisjaW5jbHVkZSA8d3RmL1JhbmdlLmg+CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQVJNNjREaXNhc3NlbWJsZXIgewogCkBAIC0yMDEs
MTIgKzIwNywxMiBAQCB2b2lkIEE2NERPcGNvZGU6OmFwcGVuZFBDUmVsYXRpdmVPZmZzZXQoCiAg
ICAgICAgIHRhcmdldEluZm8gPSAiIjsKICAgICBlbHNlIGlmICh0YXJnZXRQQyA+PSBtX3N0YXJ0
UEMgJiYgdGFyZ2V0UEMgPCBtX2VuZFBDKQogICAgICAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZl
clNpemUgLSAxLCAiIC0+IDwldT4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKHRhcmdldFBDIC0g
bV9zdGFydFBDKSAqIHNpemVvZih1aW50MzJfdCkpKTsKLSAgICBlbHNlIGlmIChjb25zdCBjaGFy
KiB0aHVua0xhYmVsID0gbGFiZWxGb3JUaHVuayh0YXJnZXRQQykpCi0gICAgICAgIHNucHJpbnRm
KGJ1ZmZlciwgYnVmZmVyU2l6ZSAtIDEsICIgLT4gPHRodW5rOiAlcz4iLCB0aHVua0xhYmVsKTsK
KyAgICBlbHNlIGlmIChjb25zdCBjaGFyKiBsYWJlbCA9IGxhYmVsRm9yKHRhcmdldFBDKSkKKyAg
ICAgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJTaXplIC0gMSwgIiAtPiAlcyIsIGxhYmVsKTsK
ICAgICBlbHNlIGlmIChpc0pJVFBDKHRhcmdldFBDKSkKLSAgICAgICAgdGFyZ2V0SW5mbyA9ICIg
LT4gPEpJVCBQQz4iOworICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiBKSVQgUEMiOwogICAgIGVs
c2UgaWYgKExMSW50Ojppc0xMSW50UEModGFyZ2V0UEMpKQotICAgICAgICB0YXJnZXRJbmZvID0g
IiAtPiA8TExJbnQgUEM+IjsKKyAgICAgICAgdGFyZ2V0SW5mbyA9ICIgLT4gTExJbnQgUEMiOwog
ICAgIGVsc2UKICAgICAgICAgdGFyZ2V0SW5mbyA9ICIgLT4gPHVua25vd24+IjsKIApAQCAtMTU3
MCwxMiArMTU3NiwxMjcgQEAgY29uc3QgY2hhciogQTY0RE9wY29kZUxvZ2ljYWxJbW1lZGlhdGU6
OgogCiBjb25zdCBjaGFyKiBjb25zdCBBNjRET3Bjb2RlTW92ZVdpZGU6OnNfb3BOYW1lc1s0XSA9
IHsgIm1vdm4iLCAwLCAibW92eiIsICJtb3ZrIiB9OwogCi1jb25zdCBjaGFyKiBBNjRET3Bjb2Rl
TW92ZVdpZGU6OmZvcm1hdCgpCitjbGFzcyBNb3ZlV2lkZUZvcm1hdFRyYWl0IHsKK3B1YmxpYzoK
KyAgICB1c2luZyBSZXN1bHRUeXBlID0gY29uc3QgY2hhcio7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHJldHVybkVhcmx5SWZBY2NlcHRlZCA9IGZhbHNlOworCisgICAgQUxXQVlTX0lOTElO
RSBzdGF0aWMgY29uc3QgY2hhciogcmVqZWN0ZWRSZXN1bHQoQTY0RE9wY29kZU1vdmVXaWRlKiBv
cGNvZGUpIHsgcmV0dXJuIG9wY29kZS0+YmFzZUZvcm1hdCgpOyB9CisgICAgQUxXQVlTX0lOTElO
RSBzdGF0aWMgY29uc3QgY2hhciogYWNjZXB0ZWRSZXN1bHQoQTY0RE9wY29kZU1vdmVXaWRlKiBv
cGNvZGUpIHsgcmV0dXJuIG9wY29kZS0+Zm9ybWF0QnVmZmVyKCk7IH0KK307CisKK2NsYXNzIE1v
dmVXaWRlSXNWYWxpZFRyYWl0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gYm9v
bDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgcmV0dXJuRWFybHlJZkFjY2VwdGVkID0gdHJ1
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZWplY3RlZFJlc3VsdChBNjRET3Bjb2Rl
TW92ZVdpZGUqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBh
Y2NlcHRlZFJlc3VsdChBNjRET3Bjb2RlTW92ZVdpZGUqKSB7IHJldHVybiB0cnVlOyB9Cit9Owor
Citib29sIEE2NERPcGNvZGVNb3ZlV2lkZTo6aGFuZGxlUG90ZW50aWFsRGF0YVBvaW50ZXIodm9p
ZCogcHRyKQoreworICAgIEFTU0VSVChJbnRlZ3JpdHk6OmlzU2FuZVBvaW50ZXIocHRyKSk7CisK
KyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyAgICBWTUluc3BlY3Rvcjo6Zm9yRWFjaFZNKFsm
XSAoVk0mIHZtKSB7CisgICAgICAgIGlmIChwdHIgPT0gJnZtKSB7CisgICAgICAgICAgICBidWZm
ZXJQcmludGYoIiB2bSIpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAg
ICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCF2bS5pc0luU2VydmljZSgpKQorICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6
Q29udGludWU7CisKKyAgICAgICAgYXV0byogdm1TdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KCZ2bSk7CisgICAgICAgIGF1dG8qIHZtRW5kID0gdm1TdGFydCArIHNpemVvZihWTSk7
CisgICAgICAgIGF1dG8qIHU4UHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocHRyKTsK
KyAgICAgICAgUmFuZ2Ugdm1SYW5nZSh2bVN0YXJ0LCB2bUVuZCk7CisgICAgICAgIGlmICh2bVJh
bmdlLmNvbnRhaW5zKHU4UHRyKSkgeworICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdThQ
dHIgLSB2bVN0YXJ0OworICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgdm0gKyV1Iiwgb2Zmc2V0
KTsKKworICAgICAgICAgICAgY29uc3QgY2hhciogZGVzY3JpcHRpb24gPSBudWxscHRyOworICAg
ICAgICAgICAgaWYgKHB0ciA9PSAmdm0udG9wQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uID0gInZtLnRvcENhbGxGcmFtZSI7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZz
ZXQgPT0gVk06OnRvcEVudHJ5RnJhbWVPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlw
dGlvbiA9ICJ2bS50b3BFbnRyeUZyYW1lIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNldCA9
PSBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAi
dm0ubV9leGNlcHRpb24iOworICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0ID09IFZNOjpvZmZz
ZXRPZkhlYXBCYXJyaWVyVGhyZXNob2xkKCkpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24g
PSAidm0uaGVhcC5tX2JhcnJpZXJUaHJlc2hvbGQiOworICAgICAgICAgICAgZWxzZSBpZiAob2Zm
c2V0ID09IFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKQorICAgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uID0gInZtLmNhbGxGcmFtZUZvckNhdGNoIjsKKyAgICAgICAgICAgIGVsc2UgaWYg
KHB0ciA9PSB2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKQorICAgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uID0gInZtLm1fc29mdFN0YWNrTGltaXQiOworICAgICAgICAgICAgZWxzZSBpZiAo
cHRyID09ICZ2bS5vc3JFeGl0SW5kZXgpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAi
dm0ub3NyRXhpdEluZGV4IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSAmdm0ub3NyRXhp
dEp1bXBEZXN0aW5hdGlvbikKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5vc3JF
eGl0SnVtcERlc3RpbmF0aW9uIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSB2bS5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKQorICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uID0gInZtLnNtYWxsU3RyaW5ncy5tX3NpbmdsZUNoYXJhY3RlclN0cmluZ3MiOworICAg
ICAgICAgICAgZWxzZSBpZiAocHRyID09ICZ2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdykKKyAg
ICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyI7
CisgICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gdm0udHJhcHMoKS50cmFwQml0c0FkZHJlc3Mo
KSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5tX3RyYXBzLm1fdHJhcEJpdHMi
OworI2lmIEVOQUJMRShERkdfRE9FU19HQ19WQUxJREFUSU9OKQorICAgICAgICAgICAgZWxzZSBp
ZiAocHRyID09IHZtLmFkZHJlc3NPZkRvZXNHQygpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0
aW9uID0gInZtLm1fZG9lc0dDIjsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9u
KQorICAgICAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiOiAlcyIsIGRlc2NyaXB0aW9uKTsKKwor
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpEb25lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZtLmlzU2NyYXRjaEJ1ZmZl
cihwdHIpKSB7CisgICAgICAgICAgICBidWZmZXJQcmludGYoIiB2bSBzY3JhdGNoQnVmZmVyLm1f
YnVmZmVyIik7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVy
biBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7CisgICAgfSk7CisgICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisK
KyNpZiBDUFUoQVJNNjRFKQorYm9vbCBBNjRET3Bjb2RlTW92ZVdpZGU6OmhhbmRsZVBvdGVudGlh
bFB0clRhZyh1aW50cHRyX3QgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA+IDB4
ZmZmZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUHRyVGFnIHRhZyA9IHN0YXRpY19j
YXN0PFB0clRhZz4odmFsdWUpOworI2lmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQorICAgIGNv
bnN0IGNoYXIqIG5hbWUgPSBXVEY6OnB0clRhZ05hbWUodGFnKTsKKyAgICBpZiAobmFtZVswXSA9
PSAnPCcpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gT25seSByZXN1bHQgdGhhdCBzdGFydHMg
d2l0aCAnPCcgaXMgIjx1bmtub3duPiIuCisjZWxzZQorICAgIC8vIFdpdGhvdXQgRU5BQkxFKFBU
UlRBR19ERUJVR0dJTkcpLCBub3QgYWxsIFB0clRhZ3MgYXJlIHJlZ2lzdGVyZWRmIGZvcgorICAg
IC8vIHByaW50aW5nLiBTbywgd2UnbGwganVzdCBkbyB0aGUgbWluaW11bSB3aXRoIG9ubHkgdGhl
IEpTQyBzcGVjaWZpYyB0YWdzLgorICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBwdHJUYWdOYW1lKHRh
Zyk7CisgICAgaWYgKCFuYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAg
IC8vIEFsc28gcHJpbnQgJz8nIHRvIGluZGljYXRlIHRoYXQgdGhpcyBpcyBhIG1heWJlLiBXZSBk
byBub3Qga25vdyBmb3IgY2VydGFpbgorICAgIC8vIGlmIHRoZSBjb25zdGFudCBpcyBtZWFudCB0
byBiZSB1c2VkIGFzIGEgUHRyVGFnLgorICAgIGJ1ZmZlclByaW50ZigiIC0+ICVwICVzID8iLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSksIG5hbWUpOworICAgIHJldHVybiB0cnVlOwor
fQorI2VuZGlmCisKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYWl0PgordHlwZW5hbWUgVHJhaXQ6OlJl
c3VsdFR5cGUgQTY0RE9wY29kZU1vdmVXaWRlOjpwYXJzZSgpCiB7CiAgICAgaWYgKG9wYygpID09
IDEpCi0gICAgICAgIHJldHVybiBBNjRET3Bjb2RlOjpmb3JtYXQoKTsKKyAgICAgICAgcmV0dXJu
IFRyYWl0OjpyZWplY3RlZFJlc3VsdCh0aGlzKTsKICAgICBpZiAoIWlzNjRCaXQoKSAmJiBodygp
ID49IDIpCi0gICAgICAgIHJldHVybiBBNjRET3Bjb2RlOjpmb3JtYXQoKTsKKyAgICAgICAgcmV0
dXJuIFRyYWl0OjpyZWplY3RlZFJlc3VsdCh0aGlzKTsKKworICAgIGlmIGNvbnN0ZXhwciAoVHJh
aXQ6OnJldHVybkVhcmx5SWZBY2NlcHRlZCkKKyAgICAgICAgcmV0dXJuIFRyYWl0OjphY2NlcHRl
ZFJlc3VsdCh0aGlzKTsKIAogICAgIGlmICghb3BjKCkgJiYgKCFpbW1lZGlhdGUxNigpIHx8ICFo
dygpKSAmJiAoaXM2NEJpdCgpIHx8IGltbWVkaWF0ZTE2KCkgIT0gMHhmZmZmKSkgewogICAgICAg
ICAvLyBNT1YgcHNldWRvIG9wIGZvciBNT1ZOCkBAIC0xNTg3LDEwICsxNzA4LDEyIEBAIGNvbnN0
IGNoYXIqIEE2NERPcGNvZGVNb3ZlV2lkZTo6Zm9ybWF0KCkKICAgICAgICAgICAgIGludDY0X3Qg
YW1vdW50ID0gaW1tZWRpYXRlMTYoKSA8PCAoaHcoKSAqIDE2KTsKICAgICAgICAgICAgIGFtb3Vu
dCA9IH5hbW91bnQ7CiAgICAgICAgICAgICBhcHBlbmRTaWduZWRJbW1lZGlhdGU2NChhbW91bnQp
OworICAgICAgICAgICAgbV9idWlsdENvbnN0YW50ID0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGFt
b3VudCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpbnQzMl90IGFtb3VudCA9IGlt
bWVkaWF0ZTE2KCkgPDwgKGh3KCkgKiAxNik7CiAgICAgICAgICAgICBhbW91bnQgPSB+YW1vdW50
OwogICAgICAgICAgICAgYXBwZW5kU2lnbmVkSW1tZWRpYXRlKGFtb3VudCk7CisgICAgICAgICAg
ICBtX2J1aWx0Q29uc3RhbnQgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYW1vdW50KTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGFwcGVuZEluc3RydWN0aW9uTmFtZShvcE5hbWUo
KSk7CkBAIC0xNjAxLDExICsxNzI0LDY1IEBAIGNvbnN0IGNoYXIqIEE2NERPcGNvZGVNb3ZlV2lk
ZTo6Zm9ybWF0KCkKICAgICAgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwogICAgICAgICAgICAg
YXBwZW5kU2hpZnRBbW91bnQoaHcoKSk7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICByZXR1cm4g
bV9mb3JtYXRCdWZmZXI7CisgICAgICAgIGlmIChvcGMoKSA9PSAyKSAvLyBFbmNvZGluZyBmb3Ig
bW92egorICAgICAgICAgICAgbV9idWlsdENvbnN0YW50ID0gMDsKKworICAgICAgICB1bnNpZ25l
ZCBzaGlmdCA9IGh3KCkgKiAxNjsKKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gc3RhdGljX2Nh
c3Q8dWludHB0cl90PihpbW1lZGlhdGUxNigpKSA8PCBzaGlmdDsKKyAgICAgICAgdWludHB0cl90
IG1hc2sgPSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMHhmZmZmKSA8PCBzaGlmdCk7CisgICAg
ICAgIG1fYnVpbHRDb25zdGFudCAmPSBtYXNrOworICAgICAgICBtX2J1aWx0Q29uc3RhbnQgfD0g
dmFsdWU7CisgICAgfQorCisgICAgYXV0byBkdW1wQ29uc3RhbnREYXRhID0gWyZdIHsKKyAgICAg
ICAgdWludDMyX3QqIG5leHRQQyA9IG1fY3VycmVudFBDICsgMTsKKyAgICAgICAgaWYgKG5leHRQ
QyA+PSBtX2VuZFBDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEE2NERPcGNvZGUg
bmV4dEJhc2VPcGNvZGUobV9zdGFydFBDLCBtX2VuZFBDKTsKKyAgICAgICAgQTY0RE9wY29kZU1v
dmVXaWRlJiBuZXh0T3Bjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8QTY0RE9wY29kZU1vdmVXaWRl
Kj4oJm5leHRCYXNlT3Bjb2RlKTsKKyAgICAgICAgbmV4dE9wY29kZS5zZXRQQ0FuZE9wY29kZShu
ZXh0UEMsICpuZXh0UEMpOworCisgICAgICAgIGJvb2wgbmV4dElzTW92ZVdpZGVHcm91cCA9IG9w
Y29kZUdyb3VwTnVtYmVyKG1fb3Bjb2RlKSA9PSBvcGNvZGVHcm91cE51bWJlcigqbmV4dFBDKTsK
KworICAgICAgICBpZiAobmV4dElzTW92ZVdpZGVHcm91cCAmJiBuZXh0T3Bjb2RlLmlzVmFsaWQo
KSAmJiBuZXh0T3Bjb2RlLnJkKCkgPT0gcmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB2b2lkKiBwdHIgPSByZW1vdmVDb2RlUHRyVGFnKGJpdHdpc2VfY2FzdDx2b2lkKj4obV9i
dWlsdENvbnN0YW50KSk7CisgICAgICAgIGlmICghcHRyKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmIChJbnRlZ3JpdHk6OmlzU2FuZVBvaW50ZXIocHRyKSkgeworICAgICAgICAg
ICAgYnVmZmVyUHJpbnRmKCIgLT4gJXAiLCBwdHIpOworICAgICAgICAgICAgaWYgKGNvbnN0IGNo
YXIqIGxhYmVsID0gbGFiZWxGb3IocHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVy
UHJpbnRmKCIgJXMiLCBsYWJlbCk7CisgICAgICAgICAgICBpZiAoaXNKSVRQQyhwdHIpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBidWZmZXJQcmludGYoIiBKSVQgUEMiKTsKKyAgICAgICAgICAg
IGlmIChMTEludDo6aXNMTEludFBDKHB0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZl
clByaW50ZigiIExMSW50IFBDIik7CisgICAgICAgICAgICBoYW5kbGVQb3RlbnRpYWxEYXRhUG9p
bnRlcihwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgQ1BVKEFSTTY0
RSkKKyAgICAgICAgaWYgKGhhbmRsZVBvdGVudGlhbFB0clRhZyhtX2J1aWx0Q29uc3RhbnQpKQor
ICAgICAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgICAgIGlmIChtX2J1aWx0Q29uc3RhbnQg
PCAweDEwMDAwKQorICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgLT4gJXUiLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9idWlsdENvbnN0YW50KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGJ1ZmZlclByaW50ZigiIC0+ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9idWlsdENv
bnN0YW50KSk7CisgICAgfTsKKworICAgIGlmIChtX3N0YXJ0UEMpCisgICAgICAgIGR1bXBDb25z
dGFudERhdGEoKTsKKworICAgIHJldHVybiBUcmFpdDo6YWNjZXB0ZWRSZXN1bHQodGhpcyk7CiB9
CiAKK2NvbnN0IGNoYXIqIEE2NERPcGNvZGVNb3ZlV2lkZTo6Zm9ybWF0KCkgeyByZXR1cm4gcGFy
c2U8TW92ZVdpZGVGb3JtYXRUcmFpdD4oKTsgfQorYm9vbCBBNjRET3Bjb2RlTW92ZVdpZGU6Omlz
VmFsaWQoKSB7IHJldHVybiBwYXJzZTxNb3ZlV2lkZUlzVmFsaWRUcmFpdD4oKTsgfQorCiBjb25z
dCBjaGFyKiBBNjRET3Bjb2RlVGVzdEFuZEJyYW5jaEltbWVkaWF0ZTo6Zm9ybWF0KCkKIHsKICAg
ICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BCaXQoKSA/ICJ0Ym56IiA6ICJ0YnoiKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0
RE9wY29kZS5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5
NCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYnVmZmVyUHJpbnRmKCJsc2wgIyV1IiwgMTYgKiBh
bW91bnQpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGJ1ZmZlclNpemUgPSA4
MTsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBidWZmZXJTaXplID0gMTAxOwogCiAgICAgY2hh
ciBtX2Zvcm1hdEJ1ZmZlcltidWZmZXJTaXplXTsKICAgICB1aW50MzJfdCogbV9zdGFydFBDOwpA
QCAtMjAyLDYgKzIwMiw3IEBAIHByb3RlY3RlZDoKICAgICB1aW50MzJfdCogbV9jdXJyZW50UEM7
CiAgICAgdWludDMyX3QgbV9vcGNvZGU7CiAgICAgaW50IG1fYnVmZmVyT2Zmc2V0OworICAgIHVp
bnRwdHJfdCBtX2J1aWx0Q29uc3RhbnQgeyAwIH07CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIE9w
Y29kZUdyb3VwKiBvcGNvZGVUYWJsZVszMl07CkBAIC04NzIsMTEgKzg3MywyNCBAQCBwdWJsaWM6
CiAgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQoQTY0RE9wY29kZU1vdmVXaWRlLCB0aGlzT2JqKTsK
IAogICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworICAgIGJvb2wgaXNWYWxpZCgpOwogCiAgICAg
Y29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19vcE5hbWVzW29wYygpXTsgfQogICAgIHVu
c2lnbmVkIG9wYygpIHsgcmV0dXJuIChtX29wY29kZSA+PiAyOSkgJiAweDM7IH0KICAgICB1bnNp
Z25lZCBodygpIHsgcmV0dXJuIChtX29wY29kZSA+PiAyMSkgJiAweDM7IH0KICAgICB1bnNpZ25l
ZCBpbW1lZGlhdGUxNigpIHsgcmV0dXJuIChtX29wY29kZSA+PiA1KSAmIDB4ZmZmZjsgfQorCitw
cml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0PiB0eXBlbmFtZSBUcmFpdDo6UmVz
dWx0VHlwZSBwYXJzZSgpOworICAgIGJvb2wgaGFuZGxlUG90ZW50aWFsRGF0YVBvaW50ZXIodm9p
ZCopOworICAgIGJvb2wgaGFuZGxlUG90ZW50aWFsUHRyVGFnKHVpbnRwdHJfdCk7CisKKyAgICAv
LyBUaGVzZSBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBhcmUgbmVlZGVkIGZvciBNb3ZlV2lkZUZvcm1h
dFRyYWl0IG9ubHkuCisgICAgY29uc3QgY2hhciogYmFzZUZvcm1hdCgpIHsgcmV0dXJuIEE2NERP
cGNvZGU6OmZvcm1hdCgpOyB9CisgICAgY29uc3QgY2hhciogZm9ybWF0QnVmZmVyKCkgeyByZXR1
cm4gbV9mb3JtYXRCdWZmZXI7IH0KKworICAgIGZyaWVuZCBjbGFzcyBNb3ZlV2lkZUZvcm1hdFRy
YWl0OworICAgIGZyaWVuZCBjbGFzcyBNb3ZlV2lkZUlzVmFsaWRUcmFpdDsKIH07CiAKIGNsYXNz
IEE2NERPcGNvZGVUZXN0QW5kQnJhbmNoSW1tZWRpYXRlIDogcHVibGljIEE2NERPcGNvZGUgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dhdGUuaAkocmV2aXNpb24gMjk0MjIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKSB8fCBDUFUoQVJNNjRFKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZB
TElEQVRJT04pIHx8IEVOQUJMRShDT05TVEFOVF9ESVNBU1NFTUJMWSkgfHwgQ1BVKEFSTTY0RSkK
IAogI2RlZmluZSBKU0NfVVRJTElUWV9HQVRFUyh2KSBcCiAgICAgdihqaXRDYWdlUHRyLCBOb1B0
clRhZykgXApAQCAtOTEsOSArOTEsMTIgQEAgZW51bSBjbGFzcyBHYXRlIDogdWludDhfdCB7CiBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mR2F0ZXMgPSAoSlNDX1VUSUxJVFlfR0FU
RVMoSlNDX0NPVU5UKSkgKyAoSlNDX0pTX0dBVEVfT1BDT0RFUyhKU0NfT1BDT0RFX0NPVU5UKSkg
KyAoSlNDX1dBU01fR0FURV9PUENPREVTKEpTQ19PUENPREVfQ09VTlQpKTsKICN1bmRlZiBKU0Nf
Q09VTlQKICN1bmRlZiBKU0NfT1BDT0RFX0NPVU5UCi0jZWxzZQorCisjZWxzZSAvLyBub3QgKEVO
QUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShDT05TVEFOVF9ESVNBU1NF
TUJMWSkgfHwgQ1BVKEFSTTY0RSkpCisKIC8vIEtlZXAgaXQgbm9uLXplcm8gdG8gbWFrZSBKU0ND
b25maWcncyBhcnJheSBub3QgWzBdLgogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZkdhdGVzID0gMTsKLSNlbmRpZgogCi19CisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05f
VkFMSURBVElPTikgfHwgRU5BQkxFKENPTlNUQU5UX0RJU0FTU0VNQkxZKSB8fCBDUFUoQVJNNjRF
KQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ1B0clRhZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDUHRyVGFnLmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDggKzM2
LDE5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKFBU
UlRBR19ERUJVR0dJTkcpCisjaWYgRU5BQkxFKENPTlNUQU5UX0RJU0FTU0VNQkxZKSB8fCAoQ1BV
KEFSTTY0RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpKQogCitjb25zdCBjaGFyKiBwdHJU
YWdOYW1lKFB0clRhZyB0YWcpCit7CisjZGVmaW5lIFJFVFVSTl9QVFJUQUdfTkFNRShfdGFnTmFt
ZSwgY2FsbGVlVHlwZSwgY2FsbGVyVHlwZSkgY2FzZSBfdGFnTmFtZTogcmV0dXJuICNfdGFnTmFt
ZTsKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0YWcpKSB7CisgICAgICAgIEZP
Ul9FQUNIX0pTQ19QVFJUQUcoUkVUVVJOX1BUUlRBR19OQU1FKQorICAgIH0KKyN1bmRlZiBSRVRV
Uk5fUFRSVEFHX05BTUUKKyAgICByZXR1cm4gbnVsbHB0cjsgLy8gTWF0Y2hpbmcgdGFnIG5vdCBm
b3VuZC4KK30KKworI2lmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQogc3RhdGljIGNvbnN0IGNo
YXIqIHRhZ0ZvclB0cihjb25zdCB2b2lkKiBwdHIpCiB7CiAjZGVmaW5lIFJFVFVSTl9OQU1FX0lG
X1RBR19NQVRDSEVTKHRhZywgY2FsbGVlVHlwZSwgY2FsbGVyVHlwZSkgXApAQCAtNTAsMjQgKzYx
LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB0YWdGb3JQdHIoY29uc3Qgdm9pZCoKICAgICByZXR1
cm4gbnVsbHB0cjsgLy8gTWF0Y2hpbmcgdGFnIG5vdCBmb3VuZC4KIH0KIAotc3RhdGljIGNvbnN0
IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFnIHRhZykKLXsKLSNkZWZpbmUgUkVUVVJOX1BUUlRBR19O
QU1FKF90YWdOYW1lLCBjYWxsZWVUeXBlLCBjYWxsZXJUeXBlKSBjYXNlIF90YWdOYW1lOiByZXR1
cm4gI190YWdOYW1lOwotICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRhZykpIHsK
LSAgICAgICAgRk9SX0VBQ0hfSlNDX1BUUlRBRyhSRVRVUk5fUFRSVEFHX05BTUUpCi0gICAgfQot
I3VuZGVmIFJFVFVSTl9QVFJUQUdfTkFNRQotICAgIHJldHVybiBudWxscHRyOyAvLyBNYXRjaGlu
ZyB0YWcgbm90IGZvdW5kLgotfQotCiB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29rdXAoKQogewog
ICAgIFdURjo6UHRyVGFnTG9va3VwJiBsb29rdXAgPSBnX2pzY0NvbmZpZy5wdHJUYWdMb29rdXBS
ZWNvcmQ7CiAgICAgbG9va3VwLmluaXRpYWxpemUodGFnRm9yUHRyLCBwdHJUYWdOYW1lKTsKICAg
ICBXVEY6OnJlZ2lzdGVyUHRyVGFnTG9va3VwKCZsb29rdXApOwogfQotCi0jZW5kaWYgLy8gQ1BV
KEFSTTY0RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFBU
UlRBR19ERUJVR0dJTkcpCisjZW5kaWYgLy8gRU5BQkxFKENPTlNUQU5UX0RJU0FTU0VNQkxZKSB8
fCAoQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpKQogCiAjaWYgQ1BVKEFS
TTY0RSkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmgJ
KHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0
clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ4LDYgKzI0OCwxMCBAQCB2b2lkIGluaXRpYWxp
emVQdHJUYWdMb29rdXAoKTsKIGlubGluZSB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29rdXAoKSB7
IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKENPTlNUQU5UX0RJU0FTU0VNQkxZKSB8fCAoQ1BVKEFS
TTY0RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpKQorY29uc3QgY2hhciogcHRyVGFnTmFt
ZShQdHJUYWcpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwogbmFtZXNwYWNlIFdURiB7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZp
c2lvbiAyOTQyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDEwICs0NjUsMTggQEAgdm9pZCBPcHRpb25zOjpyZWNv
bXB1dGVEZXBlbmRlbnRPcHRpb25zKAogICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHko
KSkKICAgICAgICAgT3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCkgPSBmYWxzZTsK
ICAgICAKLSAgICBpZiAoT3B0aW9uczo6bG9nSklUKCkKLSAgICAgICAgfHwgT3B0aW9uczo6ZHVt
cERpc2Fzc2VtYmx5KCkKKyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkKKyAgICAg
ICAgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1
bXBERkdEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBGVExEaXNhc3NlbWJs
eSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBSZWdFeHBEaXNhc3NlbWJseSgpCisgICAgICAg
IHx8IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpk
dW1wQkJRRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1i
bHkoKSkKKyAgICAgICAgT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpID0gdHJ1ZTsK
KworICAgIGlmIChPcHRpb25zOjpsb2dKSVQoKQorICAgICAgICB8fCBPcHRpb25zOjpuZWVkRGlz
YXNzZW1ibHlTdXBwb3J0KCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEJ5dGVjb2RlQXRERkdU
aW1lKCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKQogICAgICAg
ICB8fCBPcHRpb25zOjpkdW1wREZHR3JhcGhBdEVhY2hQaGFzZSgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI5NDIyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNyw2ICsxMjcsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgp
OwogICAgIFwKICAgICB2KEJvb2wsIHVzZU9TTG9nLCBmYWxzZSwgTm9ybWFsLCAiTG9nIGRhdGFM
b2coKXMgdG8gb3NfbG9nIGluc3RlYWQgb2Ygc3RkZXJyIikgXAogICAgIC8qIGR1bXBEaXNhc3Nl
bWJseSBpbXBsaWVzIGR1bXBERkdEaXNhc3NlbWJseS4gKi8gXAorICAgIHYoQm9vbCwgbmVlZERp
c2Fzc2VtYmx5U3VwcG9ydCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwg
ZHVtcERpc2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFsLCAiZHVtcHMgZGlzYXNzZW1ibHkgb2YgYWxs
IEpJVCBjb21waWxlZCBjb2RlIHVwb24gY29tcGlsYXRpb24iKSBcCiAgICAgdihCb29sLCBhc3lu
Y0Rpc2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBsb2dK
SVQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwOSw2ICsxNDA5LDE2IEBAIHZvaWQg
Vk06OmNsZWFyU2NyYXRjaEJ1ZmZlcnMoKQogICAgICAgICBzY3JhdGNoQnVmZmVyLT5zZXRBY3Rp
dmVMZW5ndGgoMCk7CiB9CiAKK2Jvb2wgVk06OmlzU2NyYXRjaEJ1ZmZlcih2b2lkKiBwdHIpCit7
CisgICAgTG9ja2VyIGxvY2tlciB7IG1fc2NyYXRjaEJ1ZmZlckxvY2sgfTsKKyAgICBmb3IgKGF1
dG8qIHNjcmF0Y2hCdWZmZXIgOiBtX3NjcmF0Y2hCdWZmZXJzKSB7CisgICAgICAgIGlmIChzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkgPT0gcHRyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBWTTo6ZW5zdXJlU2hhZG93Q2hp
Y2tlbigpCiB7CiAgICAgaWYgKG1fc2hhZG93Q2hpY2tlbikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNjg1LDYgKzY4NSw3IEBAIHB1YmxpYzoK
ICAgICAvLyAtIFlvdSBjYW4gb25seSB3cml0ZSB0byBlbnRyaWVzIGluIHRoZSBTY3JhdGNoQnVm
ZmVyIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZm
ZXJGb3JTaXplKHNpemVfdCBzaXplKTsKICAgICB2b2lkIGNsZWFyU2NyYXRjaEJ1ZmZlcnMoKTsK
KyAgICBib29sIGlzU2NyYXRjaEJ1ZmZlcih2b2lkKik7CiAKICAgICBFbmNvZGVkSlNWYWx1ZSog
ZXhjZXB0aW9uRnV6emluZ0J1ZmZlcihzaXplX3Qgc2l6ZSkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2
LDcgKzk2LDggQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBpc1NhbmVQb2ludGVyKAogICAg
IHVpbnRwdHJfdCBwb2ludGVyQXNJbnQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihwb2ludGVy
KTsKICAgICB1aW50cHRyX3QgY2Fub25pY2FsUG9pbnRlckJpdHMgPSBwb2ludGVyQXNJbnQgPDwg
KDY0IC0gT1NfQ09OU1RBTlQoRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpKTsKICAgICB1aW50cHRy
X3Qgbm9uQ2Fub25pY2FsUG9pbnRlckJpdHMgPSBwb2ludGVyQXNJbnQgPj4gT1NfQ09OU1RBTlQo
RUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpOwotICAgIHJldHVybiAhbm9uQ2Fub25pY2FsUG9pbnRl
ckJpdHMgJiYgY2Fub25pY2FsUG9pbnRlckJpdHM7CisgICAgdWludHB0cl90IGxvd2VyNEcgPSAo
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAzMikgLSAxOworICAgIHJldHVybiAhbm9uQ2Fu
b25pY2FsUG9pbnRlckJpdHMgJiYgY2Fub25pY2FsUG9pbnRlckJpdHMgJiYgcG9pbnRlckFzSW50
ID4gbG93ZXI0RzsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBvaW50ZXIpOwogICAgIHJldHVy
biB0cnVlOwpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm1DYWxsaW5nQ29udmVudGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNhbGxpbmdDb252ZW50aW9u
cy5oCShyZXZpc2lvbiAyOTQyMjApCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUNhbGxpbmdD
b252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKQEAgLTg0LDkgKzg0LDI4IEBACiAjZGVmaW5lIEpJVF9PUEVSQVRJT05fQVRU
UklCVVRFUwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8
fCBFTkFCTEUoQ09OU1RBTlRfRElTQVNTRU1CTFkpCisKKyNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKSAmJiBFTkFCTEUoQ09OU1RBTlRfRElTQVNTRU1CTFkpCisjZGVmaW5lIEpT
Q19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0VYVFJBUyh2YWxpZGF0ZUZ1bmN0aW9uLCBuYW1lKSAo
dm9pZCopdmFsaWRhdGVGdW5jdGlvbiwgbmFtZQorI2VsaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05f
VkFMSURBVElPTikKKyNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fRVhUUkFTKHZh
bGlkYXRlRnVuY3Rpb24sIG5hbWUpICh2b2lkKil2YWxpZGF0ZUZ1bmN0aW9uCisjZWxzZSAvLyBF
TkFCTEUoQ09OU1RBTlRfRElTQVNTRU1CTFkpCisjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BF
UkFUSU9OX0VYVFJBUyh2YWxpZGF0ZUZ1bmN0aW9uLCBuYW1lKSBuYW1lCisjZW5kaWYKKworI2Rl
ZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9JTlRFUk5BTChmdW5jdGlvbikgXAorICAg
IGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gX0pJVFRhcmdldElEXyMjZnVu
Y3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwgc2VjdGlvbigiX19EQVRBX0NPTlNULF9fanNjX29w
cyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fRVhU
UkFTKGZ1bmN0aW9uIyNWYWxpZGF0ZSwgI2Z1bmN0aW9uKSB9OworLyovCisKICNpZiBFTkFCTEUo
SklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJB
VElPTl9JTlRFUk5BTChmdW5jdGlvbikgXAotICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlv
bkFubm90YXRpb24gX0pJVFRhcmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwg
c2VjdGlvbigiX19EQVRBX0NPTlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwg
KHZvaWQqKWZ1bmN0aW9uIyNWYWxpZGF0ZSB9OworICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJh
dGlvbkFubm90YXRpb24gX0pJVFRhcmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNl
ZCwgc2VjdGlvbigiX19EQVRBX0NPTlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlv
biwgKHZvaWQqKWZ1bmN0aW9uIyNWYWxpZGF0ZSwgI2Z1bmN0aW9uIH07CisjZWxzZQorI2RlZmlu
ZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9JTlRFUk5BTChmdW5jdGlvbikgXAorICAgIGNv
bnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gX0pJVFRhcmdldElEXyMjZnVuY3Rp
b24gX19hdHRyaWJ1dGVfXygodXNlZCwgc2VjdGlvbigiX19EQVRBX0NPTlNULF9fanNjX29wcyIp
KSkgPSB7ICh2b2lkKilmdW5jdGlvbiwgI2Z1bmN0aW9uIH07CisjZW5kaWYKKyovCiAKICNkZWZp
bmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT04oZnVuY3Rpb24pIFwKICAgICBKU0NfREVDTEFS
RV9BTkRfREVGSU5FX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTihmdW5jdGlvbik7IFwKQEAgLTEw
MCwxMiArMTE5LDEzIEBACiAgICAgSlNDX0RFQ0xBUkVfQU5EX0RFRklORV9KSVRfT1BFUkFUSU9O
X1JFVFVSTl9WQUxJREFUSU9OKGZ1bmN0aW9uKTsgXAogICAgIEpTQ19BTk5PVEFURV9KSVRfT1BF
UkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKQogCi0jZWxzZQorI2Vsc2UgLy8gbm90IChFTkFCTEUo
SklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoQ09OU1RBTlRfRElTQVNTRU1CTFkp
KQorCiAjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OKGZ1bmN0aW9uKQogI2RlZmlu
ZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9QUk9CRShmdW5jdGlvbikKICNkZWZpbmUgSlND
X0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fUkVUVVJOKGZ1bmN0aW9uKQotI2VuZGlmCiAKKyNlbmRp
ZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoQ09OU1RBTlRf
RElTQVNTRU1CTFkpCiAKICNkZWZpbmUgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OX1dJVEhPVVRf
VkFSSUFCTEUoZnVuY3Rpb25OYW1lLCByZXR1cm5UeXBlLCBwYXJhbWV0ZXJzKSBcCiAgICAgcmV0
dXJuVHlwZSBKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgZnVuY3Rpb25OYW1lIHBhcmFtZXRlcnMK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNl
L1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQ3LDYgKzY0Nywx
MCBAQAogI2RlZmluZSBFTkFCTEVfRElTQVNTRU1CTEVSIDEKICNlbmRpZgogCisjaWYgRU5BQkxF
KERJU0FTU0VNQkxFUikgJiYgQ1BVKEFSTTY0RSkKKyNkZWZpbmUgRU5BQkxFX0NPTlNUQU5UX0RJ
U0FTU0VNQkxZIDEKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoRU5BQkxFX0RGR19KSVQpICYmIEVO
QUJMRShKSVQpCiAKIC8qIEVuYWJsZSB0aGUgREZHIEpJVCBvbiBYODYgYW5kIFg4Nl82NC4gKi8K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDE3ICsz
MCwzNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElP
Tl9WQUxJREFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVO
QUJMRShDT05TVEFOVF9ESVNBU1NFTUJMWSkKKwogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0
aW9uQW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSBfX2FzbSgic2VjdGlv
biRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29uc3QgSlNDOjpKSVRP
cGVyYXRpb25Bbm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSBfX2FzbSgic2Vj
dGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogCisjaWYgRU5BQkxFKEpJVF9PUEVS
QVRJT05fVkFMSURBVElPTikKIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkKIHsKICAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5
LCBbXSB7CiAgICAgICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0lu
RW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlLCAmZW5kT2ZKSVRPcGVyYXRp
b25zSW5XZWJDb3JlKTsKICAgICB9KTsKKyNpZiBFTkFCTEUoQ09OU1RBTlRfRElTQVNTRU1CTFkp
CisgICAgaWYgKFVOTElLRUxZKEpTQzo6T3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgp
KSkKKyAgICAgICAgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpOworI2VuZGlmCiB9CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIAorI2lmIEVOQUJMRShDT05T
VEFOVF9ESVNBU1NFTUJMWSkKK3ZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpCit7Cisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25j
ZUtleSwgW10geworICAgICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNz
ZW1ibHlMYWJlbHNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSwgJmVu
ZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSk7CisgICAgfSk7Cit9CisjZW5kaWYgLy8gRU5BQkxF
KENPTlNUQU5UX0RJU0FTU0VNQkxZKQorCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05f
VkFMSURBVElPTikgfHwgRU5BQkxFKENPTlNUQU5UX0RJU0FTU0VNQkxZKQorCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmgJ
KHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVK
SVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMCArMjcsMjIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikg
fHwgRU5BQkxFKENPTlNUQU5UX0RJU0FTU0VNQkxZKQorCisjaWYgRU5BQkxFKENPTlNUQU5UX0RJ
U0FTU0VNQkxZKQorV0VCQ09SRV9FWFBPUlQgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxz
KCk7CisjZWxzZQoraW5saW5lIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpIHsgfQor
I2VuZGlmCisKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogV0VCQ09SRV9F
WFBPUlQgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKTsKICNlbHNlCi1pbmxpbmUgdm9pZCBw
b3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IH0KK2lubGluZSB2b2lkIHBvcHVsYXRlSklUT3BlcmF0
aW9ucygpIHsgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpOyB9CiAjZW5kaWYKIAorI2Vsc2UK
K2lubGluZSB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIHsgfQorI2VuZGlmIC8vIEVOQUJM
RShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShDT05TVEFOVF9ESVNBU1NFTUJM
WSkKKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBv
cnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRl
c3RTdXBwb3J0LmNwcAkocmV2aXNpb24gMjk0MjIwKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDEs
MTcgKzI0MSwzNiBAQCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yCiB9
CiAjZW5kaWYKIAotI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjaWYgRU5B
QkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5BQkxFKENPTlNUQU5UX0RJU0FTU0VN
QkxZKQorCiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZK
SVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQgX19hc20oInNlY3Rpb24kc3RhcnQkX19E
QVRBX0NPTlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5u
b3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCBfX2FzbSgic2Vj
dGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogCisjaWYgRU5BQkxFKEpJVF9PUEVS
QVRJT05fVkFMSURBVElPTikKKwogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogewogICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VL
ZXksIFtdIHsKICAgICAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJz
SW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCwgJmVu
ZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0KTsKICAgICB9KTsKKyNpZiBFTkFC
TEUoQ09OU1RBTlRfRElTQVNTRU1CTFkpCisgICAgaWYgKFVOTElLRUxZKEpTQzo6T3B0aW9uczo6
bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgcG9wdWxhdGVEaXNhc3NlbWJseUxh
YmVscygpOworI2VuZGlmCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURB
VElPTikKIAorI2lmIEVOQUJMRShDT05TVEFOVF9ESVNBU1NFTUJMWSkKK3ZvaWQgcG9wdWxhdGVE
aXNhc3NlbWJseUxhYmVscygpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7
CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBKU0M6OkpJVE9wZXJh
dGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVyKCZzdGFydE9mSklU
T3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0LCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJD
b3JlVGVzdFN1cHBvcnQpOworICAgIH0pOwogfQorI2VuZGlmIC8vIEVOQUJMRShDT05TVEFOVF9E
SVNBU1NFTUJMWSkKKworI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04p
IHx8IEVOQUJMRShDT05TVEFOVF9ESVNBU1NFTUJMWSkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZVRlc3RTdXBwb3J0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0
U3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29y
ZVRlc3RTdXBwb3J0LmgJKHJldmlzaW9uIDI5NDIyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDEw
ICs2NywyMSBAQCB2b2lkIHNldHVwTmV3bHlDcmVhdGVkU2VydmljZVdvcmtlcih1aW50CiAgICAg
CiB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhjb25zdCBT
dHJpbmcmKSBURVNUX1NVUFBPUlRfRVhQT1JUOwogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05f
VkFMSURBVElPTikgfHwgRU5BQkxFKENPTlNUQU5UX0RJU0FTU0VNQkxZKQorI2lmIEVOQUJMRShD
T05TVEFOVF9ESVNBU1NFTUJMWSkKK3ZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpIFRF
U1RfU1VQUE9SVF9FWFBPUlQ7CisjZWxzZQoraW5saW5lIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJs
eUxhYmVscygpIHsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFU
SU9OKQogdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSBURVNUX1NVUFBPUlRfRVhQT1JUOwog
I2Vsc2UKLWlubGluZSB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIHsgfQoraW5saW5lIHZv
aWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCk7
IH0KICNlbmRpZgogCisjZWxzZQoraW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkg
eyB9CisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5BQkxF
KENPTlNUQU5UX0RJU0FTU0VNQkxZKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlVGVzdFN1cHBv
cnQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459468</attachid>
            <date>2022-05-16 17:46:06 -0700</date>
            <delta_ts>2022-05-16 18:47:30 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-240443.patch</filename>
            <type>text/plain</type>
            <size>59212</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NiBA
QAorMjAyMi0wNS0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIEFSTTY0IGRpc2Fzc2VtYmxlciBzdXBwb3J0IGZvciBzeW1ib2xpYyBkdW1waW5nIG9mIHNv
bWUgd2VsbCBrbm93biBjb25zdGFudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNDA0NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAxLiBBZGRlZCBhIE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBv
cnQoKSBvcHRpb24uICBUaGlzIG9wdGlvbiBpcyB0cnVlIGlmCisgICAgICAgICAgIGFueSBvZiB0
aGUgSlNDIGRpc2Fzc2VtYmx5IG9wdGlvbnMgYXJlIGVuYWJsZWQuICBUaGlzIGFsbG93cyB1cyB0
byB0cml2aWFsbHkKKyAgICAgICAgICAgY2hlY2sgaWYgd2UgbmVlZCB0byBlbmFibGUgYWRkaXRp
b25hbCBpbmZyYXN0cnVjdHVyZSAobGlrZSB0aG9zZSBhZGRlZCBpbiB0aGlzCisgICAgICAgICAg
IHBhdGNoKSB0byBzdXBwb3J0IGRpc2Fzc2VtYmx5LgorCisgICAgICAgIDIuIFJlZmFjdG9yIHRo
ZSBEaXNhc3NlbWJsZXIncyB0aHVua0xhYmVsTWFwIGludG8gYSBtb3JlIGdlbmVyaWMgbGFiZWxN
YXAuICBJdAorICAgICAgICAgICBjYW4gbm93IG1hcCBhIHBvaW50ZXIgdG8gYSBDU3RyaW5nIG9y
IGEgY29uc3QgY2hhciogbGFiZWwuCisKKyAgICAgICAgMy4gRW5hYmxlIEpJVE9wZXJhdGlvbkxp
c3QgaW5mcmFzdHJ1Y3R1cmUgd2hlbiBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkK
KyAgICAgICAgICAgaXMgdHJ1ZS4gIFRoaXMgYWRkcyBhIG5hbWUgdG8gdGhlIEpJVE9wZXJhdGlv
bkFubm90YXRpb24gcmVjb3JkLiAgU2luY2UgdGhpcyBpcworICAgICAgICAgICBndWFyZGVkIGJ5
IEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKSwgd2UgY2FuIHRyaXZpYWxseSB0dXJu
IHRoaXMgcGFydAorICAgICAgICAgICBvZmYgbGF0ZXIgaWYgYWRkaW5nIHRoaXMgbmFtZSBhZGRz
IHRvbyBtdWNoIHNpemUgYnVyZGVuIChvciBpZiBhbnkgdW5leHBlY3RlZAorICAgICAgICAgICBp
c3N1ZXMgYXJpc2UpLiAgVHVybmluZyB0aGlzIG9mZiB3aWxsIG9ubHkgZGlzYWJsZSBkaXNhc3Nl
bWJseSBvZiBKSVQgb3BlcmF0aW9uCisgICAgICAgICAgIG5hbWVzLiAgRGlzYXNzZW1ibHkgb2Yg
b3RoZXIgY29uc3RhbnRzIChzZWUgYmVsb3cpIHdpbGwgc3RpbGwgYmUgc3VwcG9ydGVkLgorCisg
ICAgICAgICAgIElmIE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSBpcyB0cnVlLCB0
aGUgSklUT3BlcmF0aW9uTGlzdCB3aWxsCisgICAgICAgICAgIHJlZ2lzdGVyIGFsbCBKSVQgb3Bl
cmF0aW9ucyAoYW5kIHRoZSBMTEludCBvbmVzIGFzIHdlbGwpIHdpdGggdGhlIERpc2Fzc2VtYmxl
cgorICAgICAgICAgICBsYWJlbE1hcC4KKworICAgICAgICA0LiBSZW1vdmVkIHRoZSA8ID4gYnJh
Y2tldHMgYXJvdW5kIGJyYW5jaCB0YXJnZXQgbGFiZWxzIGV4Y2VwdCBmb3IgaW50ZXJuYWwgcGMK
KyAgICAgICAgICAgaW5kZXggbGFiZWxzIChlLmcuIDw3MTY+KSBhbmQgPHVua25vd24+ICh3aGVu
IHdlIGRvbid0IGtub3cgd2hhdCB0aGUgYnJhbmNoCisgICAgICAgICAgIHRhcmdldCBpcykuICBU
aGUgPCA+IG5vdGF0aW9uIHRha2VzIHVwIHNwYWNlIGFuZCBkb2Vzbid0IGFkZCBhbnkgaW5mby4g
IFRoZQorICAgICAgICAgICBicmFuY2ggdGFyZ2V0cyBub3cgbG9vayBsaWtlIHRoaXM6CisKKyAg
ICAgICAgICAgICAgPDMyPiAweDExODAxMDJjMDogICAgYi5uZSAgICAgMHgxMTgwMTAxYzAgLT4g
dGh1bms6IG5hdGl2ZSBUYWlsIFdpdGggU2F2ZWQgVGFncyBDYWxsIHRyYW1wb2xpbmUKKyAgICAg
ICAgICAgICAgPDkyPiAweDExODAxYzg3YzogICAgYiAgICAgICAgMHgxMTgwMDg5ODAgLT4gdGh1
bms6IExMSW50IGZ1bmN0aW9uIGZvciBjYWxsIGp1bXAgdG8gcHJvbG9ndWUgdGh1bmsKKyAgICAg
ICAgICAgIDwzNTA4PiAweDExOThlMTZiNDogICAgYiAgICAgICAgMHgxMTk4YmMxYTAgLT4gSklU
IFBDCisKKyAgICAgICAgICAgSW50ZXJuYWwgcGMgaW5kZXggbGFiZWxzIHdpbGwgc3RpbGwgdXNl
IHRoZSA8ID4gYnJhY2tldHM6CisKKyAgICAgICAgICAgIDwzNDc2PiAweDExOThlMTY5NDogICAg
Yi5lcSAgICAgMHgxMTk4ZTE2YTAgLT4gPDM0ODg+CisKKyAgICAgICAgNS4gQWRkZWQgQVJNNjQg
ZGlzYXNzZW1ibGVyIHN1cHBvcnQgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgYSBjb25zdGFudCBi
ZWluZworICAgICAgICAgICBsb2FkZWQgaW50byBhIHJlZ2lzdGVyIHVzaW5nICJNb3ZlV2lkZSIg
aW5zdHJ1Y3Rpb25zIGUuZy4gbW92eiBhbmQgbW92ay4KKworICAgICAgICAgICBXaGVuIHRoZSBk
aXNhc3NlbWJsZXIgc2VlcyBhIG1vdnogb3IgbW92biBvciBtb3YgKG9mIHRoZSBNb3ZlV2lkZSB2
YXJpZXR5KSwKKyAgICAgICAgICAgdGhlIGRpc2Fzc2VtYmxlciBpbml0aWFsaXplcyBhIG1fYnVp
bHRDb25zdGFudCB2YWx1ZS4gIFdpdGggZWFjaCBzdWJzZXF1ZW50CisgICAgICAgICAgIG1vdmsg
aW5zdHJ1Y3Rpb24gd2l0aCB0aGUgc2FtZSBkZXN0aW5hdGlvbiByZWdpc3RlciwgdGhlIGRpc2Fz
c2VtYmxlciBzcGxpY2VzCisgICAgICAgICAgIGluIHRoZSBjb3JyZXNwb25kaW5nIDE2LWJpdCBp
bW1lZGlhdGUuCisKKyAgICAgICAgICAgQWZ0ZXIgZGlzYXNzZW1ibGluZyBhIE1vdmVXaWRlIGlu
c3RydWN0aW9uLCBpdCB3aWxsIGNoZWNrIGlmIHRoZSBuZXh0CisgICAgICAgICAgIGluc3RydWN0
aW9uIGlzIGFsc28gYSBNb3ZlV2lkZSBpbnN0cnVjdGlvbiB0YXJnZXRpbmcgdGhlIHNhbWUgZGVz
dGluYXRpb24KKyAgICAgICAgICAgcmVnaXN0ZXIuICBJZiBzbywgdGhlIGNvbnN0YW50IGlzIHN0
aWxsIGJlaW5nIGJ1aWxkOiBoZW5jZSwgaXQgZG9lcyBub3RoaW5nIGFuZAorICAgICAgICAgICBj
b250aW51ZXMuCisKKyAgICAgICAgICAgSWYgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgKGEpIGEg
TW92ZVdpZGUgaW5zdHJ1Y3Rpb24gdGFyZ2V0aW5nIGEgZGlmZmVyZW50CisgICAgICAgICAgIHJl
Z2lzdGVyLCAoYikgbm90IGEgTW92ZVdpZGUgaW5zdHJ1Y3Rpb24sIG9yIChjKSB3ZSd2ZSByZWFj
aGVkIHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgIExpbmtCdWZmZXIgKGkuZS4gdGhlcmUncyBu
byBuZXh0IGluc3RydWN0aW9uKSwgdGhlbiB0aGUgY29uc3RhbnQgYnVpbGRpbmcgZm9yCisgICAg
ICAgICAgIHRoZSBjdXJyZW50IHRhcmdldCByZWdpc3RlciBpcyBjb21wbGV0ZS4KKworICAgICAg
ICA2LiBBZGRlZCBBUk02NCBkaXNhc3NlbWJsZXIgc3VwcG9ydCBmb3IgbG9va2luZyB1cCBjb25z
dGFudHMgKGJ1aWx0IGluICg1KSBhYm92ZSkKKyAgICAgICAgICAgYW5kIHByaW50aW5nIHN5bWJv
bGljIGluZm8gLyBuYW1lcyBvZiB0aG9zZSBjb25zdGFudHMuCisKKyAgICAgICAgICAgV2l0aCBF
TkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSksIHdlIG5vdyBoYXZlIEpJVCBvcGVyYXRp
b24gbmFtZXMgZS5nLgorCisgICAgICAgICAgICAgPDE3Nj4gMHgxMTgwMTAyNzA6ICAgIG1vdmsg
ICAgIHgzLCAjMHg5ZjZlLCBsc2wgIzQ4IC0+IDB4MTAyZGM4OTUwIG9wZXJhdGlvblZNSGFuZGxl
RXhjZXB0aW9uCisgICAgICAgICAgICAgPDE2ND4gMHgxMTgwMTgwYTQ6ICAgIG1vdmsgICAgIHg4
LCAjMHhlNWMsIGxzbCAjNDggLT4gMHgxMDJkYjk0MjAgb3BlcmF0aW9uVmlydHVhbENhbGwKKwor
ICAgICAgICAgICBBcGFydCBmcm9tIGxvb2tpbmcgdXAgdGhlIGNvbnN0YW50IGluIHRoZSBEaXNh
c3NlbWJsZXIgbGFiZWxNYXAsIGl0IGFsc28gbG9va3MKKyAgICAgICAgICAgdXAgc29tZSBjb21t
b25seSB1c2VkIGNvbnN0YW50cyBlLmcuCisKKyAgICAgICAgICAgYS4gVk0gcG9pbnRlcnM6CisK
KyAgICAgICAgICAgICA8MTU2PiAweDExODAxMTA1YzogICAgbW92ayAgICAgeDAsICMweDEsIGxz
bCAjMzIgLT4gMHgxMzk0MzUwMDAgdm0KKworICAgICAgICAgICBiLiBTb21lIFZNIGludGVybmFs
IHBvaW50ZXJzIChtb3JlIGNhbiBiZSBhZGRlZCBsYXRlciBhcyBuZWVkZWQpOgorCisgICAgICAg
ICAgICAgIDwyND4gMHgxMTgwMTRkMTg6ICAgIG1vdmsgICAgIHgxNywgIzB4MSwgbHNsICMzMiAt
PiAweDEzOTQzZWU3OCB2bSArNDA1Njg6IHZtLnRvcENhbGxGcmFtZQorICAgICAgICAgICAgICA8
NzY+IDB4MTE4MDE0ZDRjOiAgICBtb3ZrICAgICB4MTcsICMweDEsIGxzbCAjMzIgLT4gMHgxMzk0
NDFhMTAgdm0gKzUxNzI4OiB2bS5tX2V4Y2VwdGlvbgorICAgICAgICAgICAgIDwxOTY+IDB4MTE4
MDExMjQ0OiAgICBtb3ZrICAgICB4MTcsICMweDEsIGxzbCAjMzIgLT4gMHgxMzk0NDE3ZDAgdm0g
KzUxMTUyOiB2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdworICAgICAgICAgICAgIDwyMDg+IDB4
MTE5OGUwOWQwOiAgICBtb3ZrICAgICB4MTcsICMweDEsIGxzbCAjMzIgLT4gMHgxMDQ0MzJjYzAg
dm0gKzUyNDE2OiB2bS5tX2RvZXNHQworCisgICAgICAgICAgIGMuIFZNIHJlbGF0ZWQgcG9pbnRl
cnMgKG9ubHkgMSBmb3Igbm93OyBub3QgVk0gZmllbGRzLCBidXQgaGFuZ3Mgb2ZmIG9mIFZNKToK
KworICAgICAgICAgICAgICA8MTI+IDB4MTE4MDE5MzhjOiAgICBtb3ZrICAgICB4MSwgIzB4MSwg
bHNsICMzMiAtPiAweDEwNTJjZDNjOCB2bSBzY3JhdGNoQnVmZmVyLm1fYnVmZmVyCisKKyAgICAg
ICAgICAgZC4gV2VsbCBrbm93biBQdHJUYWdzOgorCisgICAgICAgICAgICAgPDIwND4gMHgxMTgw
MTEyNGM6ICAgIG1vdnogICAgIHgxNiwgIzB4NmY5YiAtPiAweDZmOWIgRXhjZXB0aW9uSGFuZGxl
clB0clRhZyA/CisgICAgICAgICAgICAgPDIxMj4gMHgxMTgwMTUwZDQ6ICAgIG1vdnogICAgIHgx
NiwgIzB4NTkzIC0+IDB4NTkzIEpTRW50cnlQdHJUYWcgPworICAgICAgICAgICAgIDwxNjg+IDB4
MTE4MDE4M2E4OiAgICBtb3Z6ICAgICBsciwgIzB4YjM4OSAtPiAweGIzODkgT3BlcmF0aW9uUHRy
VGFnID8KKworICAgICAgICAgICAgICogdGhlID8gaXMgYmVjYXVzZSB3ZSBjYW5ub3QgYmUgY2Vy
dGFpbiB0aGF0IHRoZSAxNi1iaXQgY29uc3RhbnQgaXMgYSBQdHJUYWcuCisgICAgICAgICAgICAg
ICBJdCBtYXkganVzdCBiZSBhIGNvaW5jaWRlbmNlIHRoYXQgdGhlIHZhbHVlIGlzIHRoZSBzYW1l
LiAgSG93ZXZlciwgdGhlIHVzZXIKKyAgICAgICAgICAgICAgIGNhbiB0cml2aWFsbHkgbG9vayBh
dCB0aGUgc3Vycm91bmRpbmcgZGlzYXNzZW1ibGVkIGNvZGUsIGFuZCBiZSBhYmxlIHRvCisgICAg
ICAgICAgICAgICB0ZWxsIGlmIHRoZSB2YWx1ZSBpcyB1c2VkIGFzIGEgUHRyVGFnLgorCisgICAg
ICAgICAgIEZvciBjb25zdGFudHMgdGhhdCBhcmUgbm90IGZvdW5kIGluIHRoZSBrbm93biBzZXRz
OgorCisgICAgICAgICAgIGUuIFNtYWxsIDE2LWJpdCBjb25zdGFudCAocHJpbnRzIGRlY2ltYWwg
dmFsdWUgZm9yIGNvbnZlbmllbmNlKToKKworICAgICAgICAgICAgIDwyMDA+IDB4MTE5OGUwOWM4
OiAgICBtb3Z6ICAgICB4MTcsICMweDJjYzAgLT4gMTE0NTYKKworICAgICAgICAgICBmLiBVbmtu
b3duIHBvaW50ZXJzIHRoYXQgYXJlbid0IGluIHRoZSBKSVQgYW5kIExMSU5UIHJlZ2lvbnMgd2ls
bCBzaW1wbHkgcHJpbnQKKyAgICAgICAgICAgICAgdGhlIHBvaW50ZXIgLyBjb25zdGFudDoKKwor
ICAgICAgICAgICAgICA8ODg+IDB4MTE5OGUwOTU4OiAgICBtb3Z6ICAgICB4MTcsICMweDIwODgK
KyAgICAgICAgICAgICAgPDkyPiAweDExOThlMDk1YzogICAgbW92ayAgICAgeDE3LCAjMHgzMGQs
IGxzbCAjMTYKKyAgICAgICAgICAgICAgPDk2PiAweDExOThlMDk2MDogICAgbW92ayAgICAgeDE3
LCAjMHgxLCBsc2wgIzMyIC0+IDB4MTAzMGQyMDg4CisKKyAgICAgICAgICAgICAgPHVua25vd24+
IGlzIG9ubHkgdXNlZCBpbiByZWxhdGl2ZSBicmFuY2hlcy4KKworICAgICAgICA3LiBFbmhhbmNl
ZCB0aGUgSW50ZWdyaXR5Ojppc1NhbmVQb2ludGVyKCkgY2hlY2sgdG8gcmVqZWN0IHBvaW50ZXIg
dmFsdWVzIHRoYXQKKyAgICAgICAgICAgYXJlIGxlc3MgdGhhbiA0RyBvbiBDUFUoQUREUkVTUzY0
KSB0YXJnZXRzLiAgTm8gc2FuZSBwb2ludGVyIHNob3VsZCBiZSBpbiB0aGUKKyAgICAgICAgICAg
bG93ZXN0IDRHIGFkZHJlc3MgcmVnaW9uLgorCisgICAgICAgICAgIFRoaXMgYWxzbyBoZWxwcyB0
aGUgZGlzYXNzZW1ibGVyIG1vcmUgcXVpY2tseSBmaWx0ZXIgb3V0IGNvbnN0YW50IHZhbHVlcyB0
aGF0CisgICAgICAgICAgIGFyZW4ndCBwb2ludGVycy4KKworICAgICAgICAgICBUaGlzIGNoYW5n
ZSBhZmZlY3RzIERGRydzIHNwZWN1bGF0aW9uRnJvbUNlbGwoKSwgd2hpY2ggaXMgdGhlIG9ubHkg
cGxhY2UgdGhhdAorICAgICAgICAgICBtYXkgYWZmZWN0IHVzZXIgZmFjaW5nIHBlcmZvcm1hbmNl
LiAgSG93ZXZlciwgSSB0aGluayB0aGUgaW1wYWN0IHNob3VsZCBiZQorICAgICAgICAgICBpbnNp
Z25pZmljYW50IChzaW5jZSB0aGUgYWRkZWQgY2hlY2sgaXMgY2hlYXApLgorCisgICAgICAgICog
YXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuY3BwOgorICAgICAgICAoSlNDOjpKSVRPcGVyYXRp
b25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZSk6CisgICAgICAgIChKU0M6
OmxsaW50T3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVs
YXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQpOgorICAgICAgICAoSlNDOjpKSVRP
cGVyYXRpb25MaXN0OjphZGREaXNhc3NlbWJseUxhYmVscyk6CisgICAgICAgIChKU0M6OkpJVE9w
ZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlKToK
KyAgICAgICAgKEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVs
c0luSmF2YVNjcmlwdENvcmVGb3JMTEludCk6CisgICAgICAgIChKU0M6OkpJVE9wZXJhdGlvbkxp
c3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVyKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvSklUT3BlcmF0aW9uTGlzdC5oOgorICAgICAgICAoSlNDOjpKSVRPcGVyYXRpb25MaXN0
Ojpwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZSk6CisgICAgICAgIChKU0M6OkpJVE9w
ZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQpOgor
ICAgICAgICAqIGFzc2VtYmxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmg6CisgICAgICAgICog
YXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpmaW5h
bGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHlJbXBsKToKKyAgICAgICAgKiBiMy90ZXN0YjNfMS5jcHA6
CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29k
ZS5jcHA6CisgICAgICAgIChKU0M6OkFSTTY0RGlzYXNzZW1ibGVyOjpBNjRET3Bjb2RlOjphcHBl
bmRQQ1JlbGF0aXZlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QVJNNjREaXNhc3NlbWJsZXI6Ok1v
dmVXaWRlRm9ybWF0VHJhaXQ6OnJlamVjdGVkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6QVJNNjRE
aXNhc3NlbWJsZXI6Ok1vdmVXaWRlRm9ybWF0VHJhaXQ6OmFjY2VwdGVkUmVzdWx0KToKKyAgICAg
ICAgKEpTQzo6QVJNNjREaXNhc3NlbWJsZXI6Ok1vdmVXaWRlSXNWYWxpZFRyYWl0OjpyZWplY3Rl
ZFJlc3VsdCk6CisgICAgICAgIChKU0M6OkFSTTY0RGlzYXNzZW1ibGVyOjpNb3ZlV2lkZUlzVmFs
aWRUcmFpdDo6YWNjZXB0ZWRSZXN1bHQpOgorICAgICAgICAoSlNDOjpBUk02NERpc2Fzc2VtYmxl
cjo6QTY0RE9wY29kZU1vdmVXaWRlOjpoYW5kbGVQb3RlbnRpYWxEYXRhUG9pbnRlcik6CisgICAg
ICAgIChKU0M6OkFSTTY0RGlzYXNzZW1ibGVyOjpBNjRET3Bjb2RlTW92ZVdpZGU6OmhhbmRsZVBv
dGVudGlhbFB0clRhZyk6CisgICAgICAgIChKU0M6OkFSTTY0RGlzYXNzZW1ibGVyOjpBNjRET3Bj
b2RlTW92ZVdpZGU6OnBhcnNlKToKKyAgICAgICAgKEpTQzo6QVJNNjREaXNhc3NlbWJsZXI6OkE2
NERPcGNvZGVNb3ZlV2lkZTo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6QVJNNjREaXNhc3NlbWJs
ZXI6OkE2NERPcGNvZGVNb3ZlV2lkZTo6aXNWYWxpZCk6CisgICAgICAgICogZGlzYXNzZW1ibGVy
L0FSTTY0L0E2NERPcGNvZGUuaDoKKyAgICAgICAgKEpTQzo6QVJNNjREaXNhc3NlbWJsZXI6OkE2
NERPcGNvZGVNb3ZlV2lkZTo6YmFzZUZvcm1hdCk6CisgICAgICAgIChKU0M6OkFSTTY0RGlzYXNz
ZW1ibGVyOjpBNjRET3Bjb2RlTW92ZVdpZGU6OmZvcm1hdEJ1ZmZlcik6CisgICAgICAgICogZGlz
YXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6OkRpc2Fzc2VtYmxlcjo6
ZW5zdXJlTGFiZWxNYXApOgorICAgICAgICAoSlNDOjpyZWdpc3RlckxhYmVsKToKKyAgICAgICAg
KEpTQzo6bGFiZWxGb3IpOgorICAgICAgICAoSlNDOjplbnN1cmVUaHVua0xhYmVsTWFwKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6cmVnaXN0ZXJUaHVua0xhYmVsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6bGFiZWxGb3JUaHVuayk6IERlbGV0ZWQuCisgICAgICAgICogZGlzYXNzZW1ibGVy
L0Rpc2Fzc2VtYmxlci5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2NtYWluKToK
KyAgICAgICAgKiBydW50aW1lL0dhdGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ1B0clRhZy5j
cHA6CisgICAgICAgIChKU0M6OnB0clRhZ05hbWUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDUHRy
VGFnLmg6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6T3B0
aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9PcHRp
b25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6
aXNTY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9v
bHMvSW50ZWdyaXR5Lmg6CisgICAgICAgIChKU0M6OkludGVncml0eTo6aXNTYW5lUG9pbnRlcik6
CisKIDIwMjItMDUtMTYgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFJlZ3Jlc3Npb24ocjI2Njg4NSkgQ3Jhc2ggc29tZXRpbWVzIHdo
ZW4gcmVoeWRyYXRpbmcgaW1wb3J0ZWQgYXVkaXQgcmVzdWx0cwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNzU2LDcgKzM3NTYsNyBAQCBpbnQgcnVuSlNDKGNvbnN0IENv
bW1hbmRMaW5lJiBvcHRpb25zLCBiCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmIEVOQUJM
RShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCiBleHRlcm4gY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luU2hlbGwgX19h
c20oInNlY3Rpb24kc3RhcnQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0
IEpJVE9wZXJhdGlvbkFubm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCBfX2FzbSgi
c2VjdGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogI2VuZGlmCkBAIC0zNzgzLDYg
KzM3ODMsMTEgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogI2lmIEVOQUJM
RShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0Ojpw
b3B1bGF0ZVBvaW50ZXJzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlvbnNJblNoZWxsLCAm
ZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoSklUX09QRVJB
VElPTl9ESVNBU1NFTUJMWSkKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2Vt
Ymx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURp
c2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlvbnNJblNoZWxsLCAm
ZW5kT2ZKSVRPcGVyYXRpb25zSW5TaGVsbCk7CisjZW5kaWYKKwogICAgIGluaXRpYWxpemVUaW1l
b3V0SWZOZWVkZWQoKTsKIAogI2lmIE9TKERBUldJTikgfHwgT1MoTElOVVgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5j
cHAJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
SklUT3BlcmF0aW9uTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxNCArMjYsMTYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25MaXN0LmgiCiAKKyNp
bmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJHYXRlLmgiCiAjaW5jbHVkZSAiSklU
T3BlcmF0aW9uVmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUg
Ik9wY29kZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNp
ZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFU
SU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQogCiBM
YXp5TmV2ZXJEZXN0cm95ZWQ8SklUT3BlcmF0aW9uTGlzdD4gaml0T3BlcmF0aW9uTGlzdDsKIApA
QCAtNDUsNiArNDcsOCBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OmluaXRpYWxpemUoKQogICAg
IGppdE9wZXJhdGlvbkxpc3QuY29uc3RydWN0KCk7CiB9CiAKKyNpZiBFTkFCTEUoSklUX09QRVJB
VElPTl9WQUxJREFUSU9OKQorCiAjaWYgSklUX09QRVJBVElPTl9WQUxJREFUSU9OX0FTU0VSVF9F
TkFCTEVECiB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OmFkZEludmVyc2VNYXAodm9pZCogdmFsaWRh
dGlvbkVudHJ5LCB2b2lkKiBwb2ludGVyKQogewpAQCAtODUsOSArODksMTUgQEAgdm9pZCBKSVRP
cGVyYXRpb25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSQogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VL
ZXksIFtdIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICAgICAgaml0
T3BlcmF0aW9uTGlzdC0+YWRkUG9pbnRlcnMoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5KU0MsICZl
bmRPZkpJVE9wZXJhdGlvbnNJbkpTQyk7CisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNT
RU1CTFkpCisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBw
b3J0KCkpKQorICAgICAgICAgICAgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlw
dENvcmUoKTsKKyNlbmRpZgogICAgIH0pOwogfQogCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVS
QVRJT05fVkFMSURBVElPTikKKwogTExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJ
REFURShsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKTsKIExMSU5UX0RFQ0xB
UkVfUk9VVElORV9WQUxJREFURShsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayk7
CkBAIC0xMDQsMzEgKzExNCw0NSBAQCBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUoY2hl
Y2twb2luCiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUobm9ybWFsX29zcl9leGl0X3Ry
YW1wb2xpbmUpOwogTExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGZ1enplcl9yZXR1cm5f
ZWFybHlfZnJvbV9sb29wX2hpbnQpOwogCi12b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRl
UG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKQotewotICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlS2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyNpZiBF
TkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSAmJiBFTkFCTEUoSklUX09QRVJBVElPTl9E
SVNBU1NFTUJMWSkKKyNkZWZpbmUgTExJTlRfT1BfRVhUUkFTKHZhbGlkYXRlTGFiZWwsIG5hbWVT
dHIpIGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsaWRhdGVMYWJlbCksIG5hbWVTdHIKKyNlbGlmIEVO
QUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjZGVmaW5lIExMSU5UX09QX0VYVFJBUyh2
YWxpZGF0ZUxhYmVsLCBuYW1lU3RyKSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHZhbGlkYXRlTGFiZWwp
CisjZWxzZSAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkKKyNkZWZpbmUgTExJ
TlRfT1BfRVhUUkFTKHZhbGlkYXRlTGFiZWwsIG5hbWVTdHIpIG5hbWVTdHIKKyNlbmRpZgogCiAj
ZGVmaW5lIExMSU5UX1JPVVRJTkUoZnVuY3Rpb25OYW1lKSB7IFwKICAgICAgICAgYml0d2lzZV9j
YXN0PHZvaWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4oZnVu
Y3Rpb25OYW1lKSksIFwKLSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9ST1VUSU5F
X1ZBTElEQVRFKGZ1bmN0aW9uTmFtZSkpIFwKKyAgICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5U
X1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1lKSwgI2Z1bmN0aW9uTmFtZSkgXAogICAgIH0s
CiAKICNkZWZpbmUgTExJTlRfT1AobmFtZSkgeyBcCiAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lk
Kj4oTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAot
ICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9WQUxJREFURShuYW1lKSkg
XAorICAgICAgICBMTElOVF9PUF9FWFRSQVMoTExJTlRfUkVUVVJOX1ZBTElEQVRFKG5hbWUpLCAj
bmFtZSkgXAogICAgIH0sIHsgXAogICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50Ojpn
ZXRXaWRlMTZDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPihuYW1lKSksIFwKLSAgICAg
ICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5fV0lERTE2X1ZBTElEQVRFKG5hbWUp
KSBcCisgICAgICAgIExMSU5UX09QX0VYVFJBUyhMTElOVF9SRVRVUk5fV0lERTE2X1ZBTElEQVRF
KG5hbWUpLCAjbmFtZSAiIFt3aWRlMTZdIikgXAogICAgIH0sIHsgXAogICAgICAgICBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRXaWRlMzJDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPihuYW1lKSksIFwKLSAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihMTElOVF9SRVRVUk5f
V0lERTMyX1ZBTElEQVRFKG5hbWUpKSBcCisgICAgICAgIExMSU5UX09QX0VYVFJBUyhMTElOVF9S
RVRVUk5fV0lERTMyX1ZBTElEQVRFKG5hbWUpLCAjbmFtZSAiIFt3aWRlMzJdIikgXAogICAgIH0s
CiAKICNkZWZpbmUgTExJTlRfUkVUVVJOX0xPQ0FUSU9OKG5hbWUsIC4uLikgXAogICAgIExMSU5U
X09QKG5hbWUjI19yZXR1cm5fbG9jYXRpb24pCiAKLSAgICAgICAgY29uc3QgSklUT3BlcmF0aW9u
QW5ub3RhdGlvbiBvcGVyYXRpb25zW10gPSB7CitzdHJ1Y3QgTExJbnRPcGVyYXRpb25zIHsKKyAg
ICBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBvcGVyYXRpb25zOworICAgIHNpemVfdCBu
dW1iZXJPZk9wZXJhdGlvbnM7Cit9OworCitzdGF0aWMgTExJbnRPcGVyYXRpb25zIGxsaW50T3Bl
cmF0aW9ucygpCit7CisgICAgc3RhdGljIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIG9w
ZXJhdGlvbnMgPSBudWxscHRyOworICAgIHN0YXRpYyBzaXplX3QgbnVtYmVyT2ZPcGVyYXRpb25z
ID0gMDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlS2V5LCBbJl0geworICAgICAgICBzdGF0aWMgY29uc3QgSklUT3BlcmF0aW9uQW5u
b3RhdGlvbiBvcGVyYXRpb25zU3RvcmFnZVtdID0gewogICAgICAgICAgICAgTExJTlRfUk9VVElO
RShsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSkKICAgICAgICAgICAgIExMSU5UX1JP
VVRJTkUobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSkKICAgICAgICAgICAg
IExMSU5UX1JPVVRJTkUobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spCkBAIC0x
NjAsMTUgKzE4NCwzNCBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJ
CiAgICAgICAgICAgICBKU0NfSlNfR0FURV9PUENPREVTKExMSU5UX1JFVFVSTl9MT0NBVElPTikK
ICAgICAgICAgICAgIEpTQ19XQVNNX0dBVEVfT1BDT0RFUyhMTElOVF9SRVRVUk5fTE9DQVRJT04p
CiAgICAgICAgIH07Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKLSAgICAgICAgICAg
IGppdE9wZXJhdGlvbkxpc3QtPmFkZFBvaW50ZXJzKG9wZXJhdGlvbnMsIG9wZXJhdGlvbnMgKyBX
VEZfQVJSQVlfTEVOR1RIKG9wZXJhdGlvbnMpKTsKKyAgICAgICAgb3BlcmF0aW9ucyA9IG9wZXJh
dGlvbnNTdG9yYWdlOworICAgICAgICBudW1iZXJPZk9wZXJhdGlvbnMgPSBXVEZfQVJSQVlfTEVO
R1RIKG9wZXJhdGlvbnNTdG9yYWdlKTsKKyAgICB9KTsKKyAgICByZXR1cm4geyBvcGVyYXRpb25z
LCBudW1iZXJPZk9wZXJhdGlvbnMgfTsKK30KKwogI3VuZGVmIExMSU5UX1JPVVRJTkUKICN1bmRl
ZiBMTElOVF9PUAogI3VuZGVmIExMSU5UX1JFVFVSTl9MT0NBVElPTgorI3VuZGVmIExMSU5UX09Q
X0VYVFJBUworCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKwordm9pZCBK
SVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50
KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgeworICAg
ICAgICAgICAgYXV0byBsaXN0ID0gbGxpbnRPcGVyYXRpb25zKCk7CisgICAgICAgICAgICBqaXRP
cGVyYXRpb25MaXN0LT5hZGRQb2ludGVycyhsaXN0Lm9wZXJhdGlvbnMsIGxpc3Qub3BlcmF0aW9u
cyArIGxpc3QubnVtYmVyT2ZPcGVyYXRpb25zKTsKKyAgICAgICAgfQorI2lmIEVOQUJMRShKSVRf
T1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorICAgICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVl
ZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgICAgIEpJVE9wZXJhdGlvbkxpc3Q6OnBv
cHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKTsKKyNlbmRp
ZgogICAgIH0pOwogfQogCi0KIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVy
c0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25z
LCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKQogewogICAgIGlm
IChPcHRpb25zOjp1c2VKSVQoKSkKQEAgLTE3Nyw0ICsyMjAsNTMgQEAgdm9pZCBKSVRPcGVyYXRp
b25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJ
T05fVkFMSURBVElPTikKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQor
CitTVVBQUkVTU19BU0FOIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6YWRkRGlzYXNzZW1ibHlMYWJl
bHMoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW4sIGNvbnN0IEpJVE9wZXJhdGlv
bkFubm90YXRpb24qIGVuZCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjpuZWVkRGlz
YXNzZW1ibHlTdXBwb3J0KCkpOworICAgIGZvciAoY29uc3QgYXV0byogY3VycmVudCA9IGJlZ2lu
OyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KSB7CisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05f
VkFMSURBVElPTikKKyAgICAgICAgYXV0byogb3BlcmF0aW9uID0gY3VycmVudC0+b3BlcmF0aW9u
V2l0aFZhbGlkYXRpb247CisjZWxzZQorICAgICAgICBhdXRvKiBvcGVyYXRpb24gPSBjdXJyZW50
LT5vcGVyYXRpb247CisjZW5kaWYKKyAgICAgICAgcmVnaXN0ZXJMYWJlbChyZW1vdmVDb2RlUHRy
VGFnKG9wZXJhdGlvbiksIGN1cnJlbnQtPm5hbWUpOworICAgIH0KK30KKwordm9pZCBKSVRPcGVy
YXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgpCit7
CisgICAgQVNTRVJUKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSk7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwg
W10geworICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCisgICAgICAgICAgICBhZGREaXNh
c3NlbWJseUxhYmVscygmc3RhcnRPZkpJVE9wZXJhdGlvbnNJbkpTQywgJmVuZE9mSklUT3BlcmF0
aW9uc0luSlNDKTsKKyAgICB9KTsKK30KKwordm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0
ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KCkKK3sKKyAgICBBU1NF
UlQoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKTsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAg
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgeworICAgICAgICAgICAgYXV0byBsaXN0ID0gbGxp
bnRPcGVyYXRpb25zKCk7CisgICAgICAgICAgICBhZGREaXNhc3NlbWJseUxhYmVscyhsaXN0Lm9w
ZXJhdGlvbnMsIGxpc3Qub3BlcmF0aW9ucyArIGxpc3QubnVtYmVyT2ZPcGVyYXRpb25zKTsKKyAg
ICAgICAgfQorICAgIH0pOworfQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlz
YXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVyKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJl
Z2luT3BlcmF0aW9ucywgY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kT3BlcmF0aW9u
cykKK3sKKyAgICBpZiAoTElLRUxZKCFPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQorICAgICAgICBh
ZGREaXNhc3NlbWJseUxhYmVscyhiZWdpbk9wZXJhdGlvbnMsIGVuZE9wZXJhdGlvbnMpOworfQor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoSklUX09QRVJBVElP
Tl9ESVNBU1NFTUJMWSkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvbkxpc3QuaAkocmV2aXNpb24g
Mjk0MjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRpb25M
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKyNpZiBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJM
WSkKIAogLy8gVGhpcyBpbmRpcmVjdGlvbiBpcyBwcm92aWRlZCBzbyB0aGF0IHdlIGNhbiBtYW51
YWxseSBmb3JjZSBvbiBhc3NlcnRpb25zIGZvcgogLy8gdGVzdGluZyBldmVuIG9uIHJlbGVhc2Ug
YnVpbGRzLgpAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpJVE9wZXJhdGlv
bkxpc3QmIGluc3RhbmNlKCk7CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogCisjaWYg
RU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQ
dHJUeXBlPgogICAgIHZvaWQqIG1hcChQdHJUeXBlIHBvaW50ZXIpIGNvbnN0CiAgICAgewpAQCAt
NTgsMTIgKzU5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdmFsaWRhdGVkT3BlcmF0
aW9uc0ludmVyc2VNYXAuZ2V0KGJpdHdpc2VfY2FzdDx2b2lkKj4ocG9pbnRlcikpOwogICAgIH0K
ICNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKICAg
ICBzdGF0aWMgdm9pZCBwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZSgpOwogICAgIHN0
YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKTsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkVtYmVk
ZGVyKGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luT3BlcmF0aW9ucywgY29uc3Qg
SklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kT3BlcmF0aW9ucyk7CiAKKyNpZiBFTkFCTEUoSklU
X09QRVJBVElPTl9ESVNBU1NFTUJMWSkKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25B
bm5vdGF0aW9uKiBiZWdpbk9wZXJhdGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24q
IGVuZE9wZXJhdGlvbnMpOworI2VuZGlmCisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0
aWMgdm9pZCBhc3NlcnRJc0pJVE9wZXJhdGlvbihUIGZ1bmN0aW9uKQogICAgIHsKICAgICAgICAg
VU5VU0VEX1BBUkFNKGZ1bmN0aW9uKTsKQEAgLTgxLDYgKzg3LDEzIEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6CisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCisgICAg
c3RhdGljIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmUoKTsK
KyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29y
ZUZvckxMSW50KCk7CisgICAgc3RhdGljIHZvaWQgYWRkRGlzYXNzZW1ibHlMYWJlbHMoY29uc3Qg
SklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW4sIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRp
b24qIGVuZCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04p
CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZFBvaW50ZXJzKGNvbnN0IEpJVE9wZXJhdGlvbkFu
bm90YXRpb24qIGJlZ2luLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmQpOwogCiAj
aWYgSklUX09QRVJBVElPTl9WQUxJREFUSU9OX0FTU0VSVF9FTkFCTEVECkBAIC05MSw4ICsxMDQs
MTEgQEAgcHJpdmF0ZToKICNpZiBKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT05fQVNTRVJUX0VOQUJM
RUQKICAgICBIYXNoTWFwPHZvaWQqLCB2b2lkKj4gbV92YWxpZGF0ZWRPcGVyYXRpb25zSW52ZXJz
ZU1hcDsKICNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04p
CiB9OwogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKwogSlNfRVhQT1JU
X1BSSVZBVEUgZXh0ZXJuIExhenlOZXZlckRlc3Ryb3llZDxKSVRPcGVyYXRpb25MaXN0PiBqaXRP
cGVyYXRpb25MaXN0OwogCiBpbmxpbmUgSklUT3BlcmF0aW9uTGlzdCYgSklUT3BlcmF0aW9uTGlz
dDo6aW5zdGFuY2UoKQpAQCAtMTAyLDYgKzExOCwyMiBAQCBpbmxpbmUgSklUT3BlcmF0aW9uTGlz
dCYgSklUT3BlcmF0aW9uTGlzCiAKICNlbHNlIC8vIG5vdCBFTkFCTEUoSklUX09QRVJBVElPTl9W
QUxJREFUSU9OKQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9wdWxh
dGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmUoKQoreworICAgIGlmIChVTkxJS0VMWShPcHRpb25z
OjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICBwb3B1bGF0ZURpc2Fzc2VtYmx5
TGFiZWxzSW5KYXZhU2NyaXB0Q29yZSgpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUT3Bl
cmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpCit7
CisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisg
ICAgICAgIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQo
KTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisKKyNl
bHNlIC8vIG5vdCBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoSklU
X09QRVJBVElPTl9ESVNBU1NFTUJMWSkKKwogY2xhc3MgSklUT3BlcmF0aW9uTGlzdCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsgfQpAQCAtMTEzLDYgKzE0NSw2IEBA
IHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBhc3NlcnRJc0pJ
VE9wZXJhdGlvbldpdGhWYWxpZGF0aW9uKFQpIHsgfQogfTsKIAotI2VuZGlmIC8vIEVOQUJMRShK
SVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05f
VkFMSURBVElPTikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRP
cGVyYXRpb25WYWxpZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9KSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgJKHJldmlzaW9uIDI5NDI4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uVmFsaWRhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ3LDEzICs0NywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2lm
IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCi0KIHN0cnVjdCBKSVRPcGVyYXRpb25B
bm5vdGF0aW9uIHsKICAgICB2b2lkKiBvcGVyYXRpb247CisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJ
T05fVkFMSURBVElPTikKICAgICB2b2lkKiBvcGVyYXRpb25XaXRoVmFsaWRhdGlvbjsKKyNlbmRp
ZgorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorICAgIGNvbnN0IGNoYXIq
IG5hbWU7CisjZW5kaWYKIH07CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9O
KQorCiAjaWZuZGVmIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTgogI2RlZmlu
ZSBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04oZnVuY3Rpb25OYW1lKQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5jcHAJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEzICs4MiwxNSBAQCBMaW5r
QnVmZmVyOjpDb2RlUmVmPExpbmtCdWZmZXJQdHJUYWc+IExpCiAgICAgICAgIHNpemVfdCBzdHJp
bmdMZW5ndGggPSB2c25wcmludGYobnVsbHB0ciwgMCwgZm9ybWF0LCBwcmVmbGlnaHRBcmdzKTsK
ICAgICAgICAgdmFfZW5kKHByZWZsaWdodEFyZ3MpOwogCisgICAgICAgIGNvbnN0IGNoYXIgcHJl
Zml4W10gPSAidGh1bms6ICI7CiAgICAgICAgIGNoYXIqIGJ1ZmZlciA9IDA7Ci0gICAgICAgIENT
dHJpbmcgbGFiZWwgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKHN0cmluZ0xlbmd0aCArIDEs
IGJ1ZmZlcik7Ci0gICAgICAgIHZzbnByaW50ZihidWZmZXIsIHN0cmluZ0xlbmd0aCArIDEsIGZv
cm1hdCwgYXJnTGlzdCk7Ci0gICAgICAgIGJ1ZmZlcltzdHJpbmdMZW5ndGhdID0gJ1wwJzsKKyAg
ICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmluZ0xlbmd0aCArIHNpemVvZihwcmVmaXgpOworICAg
ICAgICBDU3RyaW5nIGxhYmVsID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7CisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgbGVuZ3RoLCAiJXMiLCBwcmVmaXgpOwor
ICAgICAgICB2c25wcmludGYoYnVmZmVyICsgc2l6ZW9mKHByZWZpeCkgLSAxLCBzdHJpbmdMZW5n
dGggKyAxLCBmb3JtYXQsIGFyZ0xpc3QpOwogICAgICAgICBvdXQucHJpbnRmKCIlcyIsIGJ1ZmZl
cik7CiAKLSAgICAgICAgcmVnaXN0ZXJUaHVua0xhYmVsKHJlc3VsdC5jb2RlKCkudW50YWdnZWRF
eGVjdXRhYmxlQWRkcmVzcygpLCBXVEZNb3ZlKGxhYmVsKSk7CisgICAgICAgIHJlZ2lzdGVyTGFi
ZWwocmVzdWx0LmNvZGUoKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUobGFi
ZWwpKTsKICAgICB9IGVsc2UKICAgICAgICAgb3V0LnZwcmludGYoZm9ybWF0LCBhcmdMaXN0KTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18xLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3BwCShyZXZpc2lvbiAyOTQy
ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtOTAzLDcgKzkwMyw3IEBAIHN0YXRpYyB2b2lkIHJ1bihjb25zdCBjaGFyKikKIAog
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShK
SVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9u
QW5ub3RhdGlvbiBzdGFydE9mSklUT3BlcmF0aW9uc0luVGVzdEIzIF9fYXNtKCJzZWN0aW9uJHN0
YXJ0JF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJh
dGlvbkFubm90YXRpb24gZW5kT2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMgX19hc20oInNlY3Rpb24k
ZW5kJF9fREFUQV9DT05TVCRfX2pzY19vcHMiKTsKICNlbmRpZgpAQCAtOTMwLDcgKzkzMCwxMSBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAjaWYgRU5BQkxFKEpJVF9PUEVSQVRJ
T05fVkFMSURBVElPTikKICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRl
cnNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luVGVzdEIzLCAmZW5kT2ZKSVRPcGVy
YXRpb25zSW5UZXN0QjMpOwogI2VuZGlmCi0gICAgCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05f
RElTQVNTRU1CTFkpCisgICAgaWYgKFVOTElLRUxZKEpTQzo6T3B0aW9uczo6bmVlZERpc2Fzc2Vt
Ymx5U3VwcG9ydCgpKSkKKyAgICAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURp
c2Fzc2VtYmx5TGFiZWxzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMywg
JmVuZE9mSklUT3BlcmF0aW9uc0luVGVzdEIzKTsKKyNlbmRpZgorCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8PSAyOyArK2kpIHsKICAgICAgICAgSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpID0gaTsKICAgICAgICAgcnVuKGZpbHRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lv
biAyOTQyODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2Vt
Ymxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJEaXNh
c3NlbWJsZXIuaCIKIAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1
ZGUgPHZhcmlhbnQ+CiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9E
YXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CkBAIC0zNiw4ICszNywyMSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotdXNpbmcgVGh1bmtMYWJlbE1hcCA9IEhhc2hNYXA8dm9pZCosIENT
dHJpbmc+OwotTGF6eU5ldmVyRGVzdHJveWVkPFRodW5rTGFiZWxNYXA+IHRodW5rTGFiZWxNYXA7
CituYW1lc3BhY2UgRGlzYXNzZW1ibGVyIHsKKwordXNpbmcgTGFiZWxNYXAgPSBIYXNoTWFwPHZv
aWQqLCBzdGQ6OnZhcmlhbnQ8Q1N0cmluZywgY29uc3QgY2hhcio+PjsKK0xhenlOZXZlckRlc3Ry
b3llZDxMYWJlbE1hcD4gbGFiZWxNYXA7CisKK3N0YXRpYyBMYWJlbE1hcCYgZW5zdXJlTGFiZWxN
YXAoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgbGFiZWxNYXAuY29uc3RydWN0KCk7CisgICAg
fSk7CisgICAgcmV0dXJuIGxhYmVsTWFwLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNh
c3NlbWJsZXIKIAogdm9pZCBkaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
RGlzYXNzZW1ibHlQdHJUYWc+JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgdm9pZCogY29kZVN0YXJ0
LCB2b2lkKiBjb2RlRW5kLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7
CkBAIC0xNTcsMjcgKzE3MSwyNSBAQCB2b2lkIHdhaXRGb3JBc3luY2hyb25vdXNEaXNhc3NlbWJs
eSgpCiAgICAgYXN5bmNocm9ub3VzRGlzYXNzZW1ibGVyKCkud2FpdFVudGlsRW1wdHkoKTsKIH0K
IAotc3RhdGljIFRodW5rTGFiZWxNYXAmIGVuc3VyZVRodW5rTGFiZWxNYXAoKQordm9pZCByZWdp
c3RlckxhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVsKQogewotICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXks
IFtdIHsKLSAgICAgICAgdGh1bmtMYWJlbE1hcC5jb25zdHJ1Y3QoKTsKLSAgICB9KTsKLSAgICBy
ZXR1cm4gdGh1bmtMYWJlbE1hcC5nZXQoKTsKKyAgICBEaXNhc3NlbWJsZXI6OmVuc3VyZUxhYmVs
TWFwKCkuYWRkKHRodW5rQWRkcmVzcywgV1RGTW92ZShsYWJlbCkpOwogfQogCi12b2lkIHJlZ2lz
dGVyVGh1bmtMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJpbmcmJiBsYWJlbCkKK3ZvaWQg
cmVnaXN0ZXJMYWJlbCh2b2lkKiBhZGRyZXNzLCBjb25zdCBjaGFyKiBsYWJlbCkKIHsKLSAgICBl
bnN1cmVUaHVua0xhYmVsTWFwKCkuYWRkKHRodW5rQWRkcmVzcywgV1RGTW92ZShsYWJlbCkpOwor
ICAgIERpc2Fzc2VtYmxlcjo6ZW5zdXJlTGFiZWxNYXAoKS5hZGQoYWRkcmVzcywgbGFiZWwpOwog
fQogCi1jb25zdCBjaGFyKiBsYWJlbEZvclRodW5rKHZvaWQqIHRodW5rQWRkcmVzcykKK2NvbnN0
IGNoYXIqIGxhYmVsRm9yKHZvaWQqIHRodW5rQWRkcmVzcykKIHsKLSAgICBhdXRvJiBtYXAgPSBl
bnN1cmVUaHVua0xhYmVsTWFwKCk7CisgICAgYXV0byYgbWFwID0gRGlzYXNzZW1ibGVyOjplbnN1
cmVMYWJlbE1hcCgpOwogICAgIGF1dG8gaXQgPSBtYXAuZmluZCh0aHVua0FkZHJlc3MpOwogICAg
IGlmIChpdCA9PSBtYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBpdC0+dmFsdWUuZGF0YSgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENTdHJp
bmc+KGl0LT52YWx1ZSkpCisgICAgICAgIHJldHVybiBzdGQ6OmdldDxDU3RyaW5nPihpdC0+dmFs
dWUpLmRhdGEoKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8Y29uc3QgY2hhcio+KGl0LT52YWx1ZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCShyZXZpc2lvbiAyOTQyODEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02MSw3ICs2MSw4IEBAIHZvaWQgZGlzYXNzZW1ibGVBc3luY2hyb25vdXNseSgK
IAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3YWl0Rm9yQXN5bmNocm9ub3VzRGlzYXNzZW1ibHko
KTsKIAotdm9pZCByZWdpc3RlclRodW5rTGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3RyaW5n
JiYgbGFiZWwpOwotY29uc3QgY2hhciogbGFiZWxGb3JUaHVuayh2b2lkKiB0aHVua0FkZHJlc3Mp
Owordm9pZCByZWdpc3RlckxhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgQ1N0cmluZyYmIGxhYmVs
KTsKK3ZvaWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIGNvbnN0IGNoYXIqIGxh
YmVsKTsKK2NvbnN0IGNoYXIqIGxhYmVsRm9yKHZvaWQqIHRodW5rQWRkcmVzcyk7CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9B
Uk02NC9BNjRET3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwCShyZXZpc2lvbiAyOTQyODEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTYgQEAKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiR1BSSW5mby5o
IgorI2luY2x1ZGUgIkludGVncml0eS5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNs
dWRlICJMTEludFBDUmFuZ2VzLmgiCisjaW5jbHVkZSAiUHVyZU5hTi5oIgorI2luY2x1ZGUgIlZN
SW5zcGVjdG9yLmgiCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvUHRyVGFnLmg+CisjaW5jbHVkZSA8d3Rm
L1JhbmdlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQVJNNjREaXNhc3NlbWJsZXIg
ewogCkBAIC0yMDEsMTIgKzIwNywxMiBAQCB2b2lkIEE2NERPcGNvZGU6OmFwcGVuZFBDUmVsYXRp
dmVPZmZzZXQoCiAgICAgICAgIHRhcmdldEluZm8gPSAiIjsKICAgICBlbHNlIGlmICh0YXJnZXRQ
QyA+PSBtX3N0YXJ0UEMgJiYgdGFyZ2V0UEMgPCBtX2VuZFBDKQogICAgICAgICBzbnByaW50Zihi
dWZmZXIsIGJ1ZmZlclNpemUgLSAxLCAiIC0+IDwldT4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
KHRhcmdldFBDIC0gbV9zdGFydFBDKSAqIHNpemVvZih1aW50MzJfdCkpKTsKLSAgICBlbHNlIGlm
IChjb25zdCBjaGFyKiB0aHVua0xhYmVsID0gbGFiZWxGb3JUaHVuayh0YXJnZXRQQykpCi0gICAg
ICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyU2l6ZSAtIDEsICIgLT4gPHRodW5rOiAlcz4iLCB0
aHVua0xhYmVsKTsKKyAgICBlbHNlIGlmIChjb25zdCBjaGFyKiBsYWJlbCA9IGxhYmVsRm9yKHRh
cmdldFBDKSkKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJTaXplIC0gMSwgIiAtPiAl
cyIsIGxhYmVsKTsKICAgICBlbHNlIGlmIChpc0pJVFBDKHRhcmdldFBDKSkKLSAgICAgICAgdGFy
Z2V0SW5mbyA9ICIgLT4gPEpJVCBQQz4iOworICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiBKSVQg
UEMiOwogICAgIGVsc2UgaWYgKExMSW50Ojppc0xMSW50UEModGFyZ2V0UEMpKQotICAgICAgICB0
YXJnZXRJbmZvID0gIiAtPiA8TExJbnQgUEM+IjsKKyAgICAgICAgdGFyZ2V0SW5mbyA9ICIgLT4g
TExJbnQgUEMiOwogICAgIGVsc2UKICAgICAgICAgdGFyZ2V0SW5mbyA9ICIgLT4gPHVua25vd24+
IjsKIApAQCAtMTU3MCwxMiArMTU3NiwxMjcgQEAgY29uc3QgY2hhciogQTY0RE9wY29kZUxvZ2lj
YWxJbW1lZGlhdGU6OgogCiBjb25zdCBjaGFyKiBjb25zdCBBNjRET3Bjb2RlTW92ZVdpZGU6OnNf
b3BOYW1lc1s0XSA9IHsgIm1vdm4iLCAwLCAibW92eiIsICJtb3ZrIiB9OwogCi1jb25zdCBjaGFy
KiBBNjRET3Bjb2RlTW92ZVdpZGU6OmZvcm1hdCgpCitjbGFzcyBNb3ZlV2lkZUZvcm1hdFRyYWl0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZXN1bHRUeXBlID0gY29uc3QgY2hhcio7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHJldHVybkVhcmx5SWZBY2NlcHRlZCA9IGZhbHNlOworCisgICAg
QUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogcmVqZWN0ZWRSZXN1bHQoQTY0RE9wY29k
ZU1vdmVXaWRlKiBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZS0+YmFzZUZvcm1hdCgpOyB9CisgICAg
QUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogYWNjZXB0ZWRSZXN1bHQoQTY0RE9wY29k
ZU1vdmVXaWRlKiBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZS0+Zm9ybWF0QnVmZmVyKCk7IH0KK307
CisKK2NsYXNzIE1vdmVXaWRlSXNWYWxpZFRyYWl0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZXN1
bHRUeXBlID0gYm9vbDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgcmV0dXJuRWFybHlJZkFj
Y2VwdGVkID0gdHJ1ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZWplY3RlZFJlc3Vs
dChBNjRET3Bjb2RlTW92ZVdpZGUqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBhY2NlcHRlZFJlc3VsdChBNjRET3Bjb2RlTW92ZVdpZGUqKSB7IHJldHVybiB0
cnVlOyB9Cit9OworCitib29sIEE2NERPcGNvZGVNb3ZlV2lkZTo6aGFuZGxlUG90ZW50aWFsRGF0
YVBvaW50ZXIodm9pZCogcHRyKQoreworICAgIEFTU0VSVChJbnRlZ3JpdHk6OmlzU2FuZVBvaW50
ZXIocHRyKSk7CisKKyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyAgICBWTUluc3BlY3Rvcjo6
Zm9yRWFjaFZNKFsmXSAoVk0mIHZtKSB7CisgICAgICAgIGlmIChwdHIgPT0gJnZtKSB7CisgICAg
ICAgICAgICBidWZmZXJQcmludGYoIiB2bSIpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCF2bS5pc0luU2VydmljZSgpKQorICAgICAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7CisKKyAgICAgICAgYXV0byogdm1TdGFydCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KCZ2bSk7CisgICAgICAgIGF1dG8qIHZtRW5kID0gdm1TdGFydCAr
IHNpemVvZihWTSk7CisgICAgICAgIGF1dG8qIHU4UHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4ocHRyKTsKKyAgICAgICAgUmFuZ2Ugdm1SYW5nZSh2bVN0YXJ0LCB2bUVuZCk7CisgICAg
ICAgIGlmICh2bVJhbmdlLmNvbnRhaW5zKHU4UHRyKSkgeworICAgICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gdThQdHIgLSB2bVN0YXJ0OworICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgdm0g
KyV1Iiwgb2Zmc2V0KTsKKworICAgICAgICAgICAgY29uc3QgY2hhciogZGVzY3JpcHRpb24gPSBu
dWxscHRyOworICAgICAgICAgICAgaWYgKHB0ciA9PSAmdm0udG9wQ2FsbEZyYW1lKQorICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnRvcENhbGxGcmFtZSI7CisgICAgICAgICAgICBl
bHNlIGlmIChvZmZzZXQgPT0gVk06OnRvcEVudHJ5RnJhbWVPZmZzZXQoKSkKKyAgICAgICAgICAg
ICAgICBkZXNjcmlwdGlvbiA9ICJ2bS50b3BFbnRyeUZyYW1lIjsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG9mZnNldCA9PSBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24gPSAidm0ubV9leGNlcHRpb24iOworICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0
ID09IFZNOjpvZmZzZXRPZkhlYXBCYXJyaWVyVGhyZXNob2xkKCkpCisgICAgICAgICAgICAgICAg
ZGVzY3JpcHRpb24gPSAidm0uaGVhcC5tX2JhcnJpZXJUaHJlc2hvbGQiOworICAgICAgICAgICAg
ZWxzZSBpZiAob2Zmc2V0ID09IFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKQorICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLmNhbGxGcmFtZUZvckNhdGNoIjsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHB0ciA9PSB2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpKQorICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1fc29mdFN0YWNrTGltaXQiOworICAgICAgICAg
ICAgZWxzZSBpZiAocHRyID09ICZ2bS5vc3JFeGl0SW5kZXgpCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24gPSAidm0ub3NyRXhpdEluZGV4IjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9
PSAmdm0ub3NyRXhpdEp1bXBEZXN0aW5hdGlvbikKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlv
biA9ICJ2bS5vc3JFeGl0SnVtcERlc3RpbmF0aW9uIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHB0
ciA9PSB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKQorICAgICAgICAg
ICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnNtYWxsU3RyaW5ncy5tX3NpbmdsZUNoYXJhY3RlclN0
cmluZ3MiOworICAgICAgICAgICAgZWxzZSBpZiAocHRyID09ICZ2bS50YXJnZXRNYWNoaW5lUENG
b3JUaHJvdykKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS50YXJnZXRNYWNoaW5l
UENGb3JUaHJvdyI7CisgICAgICAgICAgICBlbHNlIGlmIChwdHIgPT0gdm0udHJhcHMoKS50cmFw
Qml0c0FkZHJlc3MoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2bS5tX3RyYXBz
Lm1fdHJhcEJpdHMiOworI2lmIEVOQUJMRShERkdfRE9FU19HQ19WQUxJREFUSU9OKQorICAgICAg
ICAgICAgZWxzZSBpZiAocHRyID09IHZtLmFkZHJlc3NPZkRvZXNHQygpKQorICAgICAgICAgICAg
ICAgIGRlc2NyaXB0aW9uID0gInZtLm1fZG9lc0dDIjsKKyNlbmRpZgorICAgICAgICAgICAgaWYg
KGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiOiAlcyIsIGRlc2Ny
aXB0aW9uKTsKKworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZtLmlz
U2NyYXRjaEJ1ZmZlcihwdHIpKSB7CisgICAgICAgICAgICBidWZmZXJQcmludGYoIiB2bSBzY3Jh
dGNoQnVmZmVyLm1fYnVmZmVyIik7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgfSk7CisgICAgcmV0dXJuIGhh
bmRsZWQ7Cit9CisKKyNpZiBDUFUoQVJNNjRFKQorYm9vbCBBNjRET3Bjb2RlTW92ZVdpZGU6Omhh
bmRsZVBvdGVudGlhbFB0clRhZyh1aW50cHRyX3QgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8
fCB2YWx1ZSA+IDB4ZmZmZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUHRyVGFnIHRh
ZyA9IHN0YXRpY19jYXN0PFB0clRhZz4odmFsdWUpOworI2lmIEVOQUJMRShQVFJUQUdfREVCVUdH
SU5HKQorICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBXVEY6OnB0clRhZ05hbWUodGFnKTsKKyAgICBp
ZiAobmFtZVswXSA9PSAnPCcpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gT25seSByZXN1bHQg
dGhhdCBzdGFydHMgd2l0aCAnPCcgaXMgIjx1bmtub3duPiIuCisjZWxzZQorICAgIC8vIFdpdGhv
dXQgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpLCBub3QgYWxsIFB0clRhZ3MgYXJlIHJlZ2lzdGVy
ZWRmIGZvcgorICAgIC8vIHByaW50aW5nLiBTbywgd2UnbGwganVzdCBkbyB0aGUgbWluaW11bSB3
aXRoIG9ubHkgdGhlIEpTQyBzcGVjaWZpYyB0YWdzLgorICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBw
dHJUYWdOYW1lKHRhZyk7CisgICAgaWYgKCFuYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKKworICAgIC8vIEFsc28gcHJpbnQgJz8nIHRvIGluZGljYXRlIHRoYXQgdGhpcyBpcyBh
IG1heWJlLiBXZSBkbyBub3Qga25vdyBmb3IgY2VydGFpbgorICAgIC8vIGlmIHRoZSBjb25zdGFu
dCBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGEgUHRyVGFnLgorICAgIGJ1ZmZlclByaW50ZigiIC0+
ICVwICVzID8iLCByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSksIG5hbWUpOworICAgIHJl
dHVybiB0cnVlOworfQorI2VuZGlmCisKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYWl0PgordHlwZW5h
bWUgVHJhaXQ6OlJlc3VsdFR5cGUgQTY0RE9wY29kZU1vdmVXaWRlOjpwYXJzZSgpCiB7CiAgICAg
aWYgKG9wYygpID09IDEpCi0gICAgICAgIHJldHVybiBBNjRET3Bjb2RlOjpmb3JtYXQoKTsKKyAg
ICAgICAgcmV0dXJuIFRyYWl0OjpyZWplY3RlZFJlc3VsdCh0aGlzKTsKICAgICBpZiAoIWlzNjRC
aXQoKSAmJiBodygpID49IDIpCi0gICAgICAgIHJldHVybiBBNjRET3Bjb2RlOjpmb3JtYXQoKTsK
KyAgICAgICAgcmV0dXJuIFRyYWl0OjpyZWplY3RlZFJlc3VsdCh0aGlzKTsKKworICAgIGlmIGNv
bnN0ZXhwciAoVHJhaXQ6OnJldHVybkVhcmx5SWZBY2NlcHRlZCkKKyAgICAgICAgcmV0dXJuIFRy
YWl0OjphY2NlcHRlZFJlc3VsdCh0aGlzKTsKIAogICAgIGlmICghb3BjKCkgJiYgKCFpbW1lZGlh
dGUxNigpIHx8ICFodygpKSAmJiAoaXM2NEJpdCgpIHx8IGltbWVkaWF0ZTE2KCkgIT0gMHhmZmZm
KSkgewogICAgICAgICAvLyBNT1YgcHNldWRvIG9wIGZvciBNT1ZOCkBAIC0xNTg3LDEwICsxNzA4
LDEyIEBAIGNvbnN0IGNoYXIqIEE2NERPcGNvZGVNb3ZlV2lkZTo6Zm9ybWF0KCkKICAgICAgICAg
ICAgIGludDY0X3QgYW1vdW50ID0gaW1tZWRpYXRlMTYoKSA8PCAoaHcoKSAqIDE2KTsKICAgICAg
ICAgICAgIGFtb3VudCA9IH5hbW91bnQ7CiAgICAgICAgICAgICBhcHBlbmRTaWduZWRJbW1lZGlh
dGU2NChhbW91bnQpOworICAgICAgICAgICAgbV9idWlsdENvbnN0YW50ID0gc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KGFtb3VudCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpbnQzMl90
IGFtb3VudCA9IGltbWVkaWF0ZTE2KCkgPDwgKGh3KCkgKiAxNik7CiAgICAgICAgICAgICBhbW91
bnQgPSB+YW1vdW50OwogICAgICAgICAgICAgYXBwZW5kU2lnbmVkSW1tZWRpYXRlKGFtb3VudCk7
CisgICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYW1v
dW50KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGFwcGVuZEluc3RydWN0aW9u
TmFtZShvcE5hbWUoKSk7CkBAIC0xNjAxLDExICsxNzI0LDcwIEBAIGNvbnN0IGNoYXIqIEE2NERP
cGNvZGVNb3ZlV2lkZTo6Zm9ybWF0KCkKICAgICAgICAgICAgIGFwcGVuZFNlcGFyYXRvcigpOwog
ICAgICAgICAgICAgYXBwZW5kU2hpZnRBbW91bnQoaHcoKSk7CiAgICAgICAgIH0KLSAgICB9CiAK
LSAgICByZXR1cm4gbV9mb3JtYXRCdWZmZXI7CisgICAgICAgIGlmIChvcGMoKSA9PSAyKSAvLyBF
bmNvZGluZyBmb3IgbW92egorICAgICAgICAgICAgbV9idWlsdENvbnN0YW50ID0gMDsKKworICAg
ICAgICB1bnNpZ25lZCBzaGlmdCA9IGh3KCkgKiAxNjsKKyAgICAgICAgdWludHB0cl90IHZhbHVl
ID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihpbW1lZGlhdGUxNigpKSA8PCBzaGlmdDsKKyAgICAg
ICAgdWludHB0cl90IG1hc2sgPSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMHhmZmZmKSA8PCBz
aGlmdCk7CisgICAgICAgIG1fYnVpbHRDb25zdGFudCAmPSBtYXNrOworICAgICAgICBtX2J1aWx0
Q29uc3RhbnQgfD0gdmFsdWU7CisgICAgfQorCisgICAgYXV0byBkdW1wQ29uc3RhbnREYXRhID0g
WyZdIHsKKyAgICAgICAgdWludDMyX3QqIG5leHRQQyA9IG1fY3VycmVudFBDICsgMTsKKyAgICAg
ICAgYm9vbCBkb25lQnVpbGRpbmdDb25zdGFudCA9IGZhbHNlOworCisgICAgICAgIGlmIChuZXh0
UEMgPj0gbV9lbmRQQykKKyAgICAgICAgICAgIGRvbmVCdWlsZGluZ0NvbnN0YW50ID0gdHJ1ZTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBNjRET3Bjb2RlIG5leHRPcGNvZGVCYXNlKG1f
c3RhcnRQQywgbV9lbmRQQyk7CisgICAgICAgICAgICBBNjRET3Bjb2RlTW92ZVdpZGUmIG5leHRP
cGNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxBNjRET3Bjb2RlTW92ZVdpZGUqPigmbmV4dE9wY29k
ZUJhc2UpOworICAgICAgICAgICAgbmV4dE9wY29kZS5zZXRQQ0FuZE9wY29kZShuZXh0UEMsICpu
ZXh0UEMpOworCisgICAgICAgICAgICBib29sIG5leHRJc01vdmVXaWRlR3JvdXAgPSBvcGNvZGVH
cm91cE51bWJlcihtX29wY29kZSkgPT0gb3Bjb2RlR3JvdXBOdW1iZXIoKm5leHRQQyk7CisKKyAg
ICAgICAgICAgIGlmICghbmV4dElzTW92ZVdpZGVHcm91cCB8fCAhbmV4dE9wY29kZS5pc1ZhbGlk
KCkgfHwgbmV4dE9wY29kZS5yZCgpICE9IHJkKCkpCisgICAgICAgICAgICAgICAgZG9uZUJ1aWxk
aW5nQ29uc3RhbnQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghZG9uZUJ1aWxkaW5n
Q29uc3RhbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdm9pZCogcHRyID0gcmVt
b3ZlQ29kZVB0clRhZyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYnVpbHRDb25zdGFudCkpOworICAg
ICAgICBpZiAoIXB0cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoSW50ZWdy
aXR5Ojppc1NhbmVQb2ludGVyKHB0cikpIHsKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIC0+
ICVwIiwgcHRyKTsKKyAgICAgICAgICAgIGlmIChjb25zdCBjaGFyKiBsYWJlbCA9IGxhYmVsRm9y
KHB0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclByaW50ZigiICVzIiwgbGFiZWwp
OworICAgICAgICAgICAgaWYgKGlzSklUUEMocHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
YnVmZmVyUHJpbnRmKCIgSklUIFBDIik7CisgICAgICAgICAgICBpZiAoTExJbnQ6OmlzTExJbnRQ
QyhwdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJQcmludGYoIiBMTEludCBQQyIp
OworICAgICAgICAgICAgaGFuZGxlUG90ZW50aWFsRGF0YVBvaW50ZXIocHRyKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorI2lmIENQVShBUk02NEUpCisgICAgICAgIGlmIChoYW5k
bGVQb3RlbnRpYWxQdHJUYWcobV9idWlsdENvbnN0YW50KSkKKyAgICAgICAgICAgIHJldHVybjsK
KyNlbmRpZgorICAgICAgICBpZiAobV9idWlsdENvbnN0YW50IDwgMHgxMDAwMCkKKyAgICAgICAg
ICAgIGJ1ZmZlclByaW50ZigiIC0+ICV1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fYnVpbHRD
b25zdGFudCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWZmZXJQcmludGYoIiAtPiAl
cCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fYnVpbHRDb25zdGFudCkpOworICAgIH07CisK
KyAgICBpZiAobV9zdGFydFBDKQorICAgICAgICBkdW1wQ29uc3RhbnREYXRhKCk7CisKKyAgICBy
ZXR1cm4gVHJhaXQ6OmFjY2VwdGVkUmVzdWx0KHRoaXMpOwogfQogCitjb25zdCBjaGFyKiBBNjRE
T3Bjb2RlTW92ZVdpZGU6OmZvcm1hdCgpIHsgcmV0dXJuIHBhcnNlPE1vdmVXaWRlRm9ybWF0VHJh
aXQ+KCk7IH0KK2Jvb2wgQTY0RE9wY29kZU1vdmVXaWRlOjppc1ZhbGlkKCkgeyByZXR1cm4gcGFy
c2U8TW92ZVdpZGVJc1ZhbGlkVHJhaXQ+KCk7IH0KKwogY29uc3QgY2hhciogQTY0RE9wY29kZVRl
c3RBbmRCcmFuY2hJbW1lZGlhdGU6OmZvcm1hdCgpCiB7CiAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25O
YW1lKG9wQml0KCkgPyAidGJueiIgOiAidGJ6Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAkocmV2aXNpb24g
Mjk0MjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRE
T3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIGJ1ZmZlclByaW50ZigibHNsICMldSIsIDE2ICogYW1vdW50KTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgY29uc3RleHByIGludCBidWZmZXJTaXplID0gODE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgYnVmZmVyU2l6ZSA9IDEwMTsKIAogICAgIGNoYXIgbV9mb3JtYXRCdWZmZXJbYnVm
ZmVyU2l6ZV07CiAgICAgdWludDMyX3QqIG1fc3RhcnRQQzsKQEAgLTIwMiw2ICsyMDIsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgdWludDMyX3QqIG1fY3VycmVudFBDOwogICAgIHVpbnQzMl90IG1fb3Bj
b2RlOwogICAgIGludCBtX2J1ZmZlck9mZnNldDsKKyAgICB1aW50cHRyX3QgbV9idWlsdENvbnN0
YW50IHsgMCB9OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBPcGNvZGVHcm91cCogb3Bjb2RlVGFi
bGVbMzJdOwpAQCAtODcyLDExICs4NzMsMjQgQEAgcHVibGljOgogICAgIERFRklORV9TVEFUSUNf
Rk9STUFUKEE2NERPcGNvZGVNb3ZlV2lkZSwgdGhpc09iaik7CiAKICAgICBjb25zdCBjaGFyKiBm
b3JtYXQoKTsKKyAgICBib29sIGlzVmFsaWQoKTsKIAogICAgIGNvbnN0IGNoYXIqIG9wTmFtZSgp
IHsgcmV0dXJuIHNfb3BOYW1lc1tvcGMoKV07IH0KICAgICB1bnNpZ25lZCBvcGMoKSB7IHJldHVy
biAobV9vcGNvZGUgPj4gMjkpICYgMHgzOyB9CiAgICAgdW5zaWduZWQgaHcoKSB7IHJldHVybiAo
bV9vcGNvZGUgPj4gMjEpICYgMHgzOyB9CiAgICAgdW5zaWduZWQgaW1tZWRpYXRlMTYoKSB7IHJl
dHVybiAobV9vcGNvZGUgPj4gNSkgJiAweGZmZmY7IH0KKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUcmFpdD4gdHlwZW5hbWUgVHJhaXQ6OlJlc3VsdFR5cGUgcGFyc2UoKTsKKyAg
ICBib29sIGhhbmRsZVBvdGVudGlhbERhdGFQb2ludGVyKHZvaWQqKTsKKyAgICBib29sIGhhbmRs
ZVBvdGVudGlhbFB0clRhZyh1aW50cHRyX3QpOworCisgICAgLy8gVGhlc2UgZm9yd2FyZGluZyBm
dW5jdGlvbnMgYXJlIG5lZWRlZCBmb3IgTW92ZVdpZGVGb3JtYXRUcmFpdCBvbmx5LgorICAgIGNv
bnN0IGNoYXIqIGJhc2VGb3JtYXQoKSB7IHJldHVybiBBNjRET3Bjb2RlOjpmb3JtYXQoKTsgfQor
ICAgIGNvbnN0IGNoYXIqIGZvcm1hdEJ1ZmZlcigpIHsgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOyB9
CisKKyAgICBmcmllbmQgY2xhc3MgTW92ZVdpZGVGb3JtYXRUcmFpdDsKKyAgICBmcmllbmQgY2xh
c3MgTW92ZVdpZGVJc1ZhbGlkVHJhaXQ7CiB9OwogCiBjbGFzcyBBNjRET3Bjb2RlVGVzdEFuZEJy
YW5jaEltbWVkaWF0ZSA6IHB1YmxpYyBBNjRET3Bjb2RlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HYXRlLmgJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgQ1BV
KEFSTTY0RSkKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUo
SklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkgfHwgQ1BVKEFSTTY0RSkKIAogI2RlZmluZSBKU0Nf
VVRJTElUWV9HQVRFUyh2KSBcCiAgICAgdihqaXRDYWdlUHRyLCBOb1B0clRhZykgXApAQCAtOTEs
OSArOTEsMTIgQEAgZW51bSBjbGFzcyBHYXRlIDogdWludDhfdCB7CiBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIG51bWJlck9mR2F0ZXMgPSAoSlNDX1VUSUxJVFlfR0FURVMoSlNDX0NPVU5UKSkg
KyAoSlNDX0pTX0dBVEVfT1BDT0RFUyhKU0NfT1BDT0RFX0NPVU5UKSkgKyAoSlNDX1dBU01fR0FU
RV9PUENPREVTKEpTQ19PUENPREVfQ09VTlQpKTsKICN1bmRlZiBKU0NfQ09VTlQKICN1bmRlZiBK
U0NfT1BDT0RFX0NPVU5UCi0jZWxzZQorCisjZWxzZSAvLyBub3QgKEVOQUJMRShKSVRfT1BFUkFU
SU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKSB8fCBD
UFUoQVJNNjRFKSkKKwogLy8gS2VlcCBpdCBub24temVybyB0byBtYWtlIEpTQ0NvbmZpZydzIGFy
cmF5IG5vdCBbMF0uCiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mR2F0ZXMgPSAx
OwotI2VuZGlmCiAKLX0KKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9O
KSB8fCBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkgfHwgQ1BVKEFSTTY0RSkKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NQdHJUYWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ1B0clRhZy5jcHAJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ1B0clRhZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw4ICszNiwxOSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIENQVShBUk02NEUpICYmIEVOQUJMRShQVFJUQUdf
REVCVUdHSU5HKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKSB8fCAoQ1BV
KEFSTTY0RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpKQogCitjb25zdCBjaGFyKiBwdHJU
YWdOYW1lKFB0clRhZyB0YWcpCit7CisjZGVmaW5lIFJFVFVSTl9QVFJUQUdfTkFNRShfdGFnTmFt
ZSwgY2FsbGVlVHlwZSwgY2FsbGVyVHlwZSkgY2FzZSBfdGFnTmFtZTogcmV0dXJuICNfdGFnTmFt
ZTsKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0YWcpKSB7CisgICAgICAgIEZP
Ul9FQUNIX0pTQ19QVFJUQUcoUkVUVVJOX1BUUlRBR19OQU1FKQorICAgIH0KKyN1bmRlZiBSRVRV
Uk5fUFRSVEFHX05BTUUKKyAgICByZXR1cm4gbnVsbHB0cjsgLy8gTWF0Y2hpbmcgdGFnIG5vdCBm
b3VuZC4KK30KKworI2lmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKQogc3RhdGljIGNvbnN0IGNo
YXIqIHRhZ0ZvclB0cihjb25zdCB2b2lkKiBwdHIpCiB7CiAjZGVmaW5lIFJFVFVSTl9OQU1FX0lG
X1RBR19NQVRDSEVTKHRhZywgY2FsbGVlVHlwZSwgY2FsbGVyVHlwZSkgXApAQCAtNTAsMjQgKzYx
LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB0YWdGb3JQdHIoY29uc3Qgdm9pZCoKICAgICByZXR1
cm4gbnVsbHB0cjsgLy8gTWF0Y2hpbmcgdGFnIG5vdCBmb3VuZC4KIH0KIAotc3RhdGljIGNvbnN0
IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFnIHRhZykKLXsKLSNkZWZpbmUgUkVUVVJOX1BUUlRBR19O
QU1FKF90YWdOYW1lLCBjYWxsZWVUeXBlLCBjYWxsZXJUeXBlKSBjYXNlIF90YWdOYW1lOiByZXR1
cm4gI190YWdOYW1lOwotICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRhZykpIHsK
LSAgICAgICAgRk9SX0VBQ0hfSlNDX1BUUlRBRyhSRVRVUk5fUFRSVEFHX05BTUUpCi0gICAgfQot
I3VuZGVmIFJFVFVSTl9QVFJUQUdfTkFNRQotICAgIHJldHVybiBudWxscHRyOyAvLyBNYXRjaGlu
ZyB0YWcgbm90IGZvdW5kLgotfQotCiB2b2lkIGluaXRpYWxpemVQdHJUYWdMb29rdXAoKQogewog
ICAgIFdURjo6UHRyVGFnTG9va3VwJiBsb29rdXAgPSBnX2pzY0NvbmZpZy5wdHJUYWdMb29rdXBS
ZWNvcmQ7CiAgICAgbG9va3VwLmluaXRpYWxpemUodGFnRm9yUHRyLCBwdHJUYWdOYW1lKTsKICAg
ICBXVEY6OnJlZ2lzdGVyUHRyVGFnTG9va3VwKCZsb29rdXApOwogfQotCi0jZW5kaWYgLy8gQ1BV
KEFSTTY0RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCisjZW5kaWYgLy8gRU5BQkxFKFBU
UlRBR19ERUJVR0dJTkcpCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1C
TFkpIHx8IChDUFUoQVJNNjRFKSAmJiBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykpCiAKICNpZiBD
UFUoQVJNNjRFKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJU
YWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJU
YWcuaAkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDUHRyVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDgsNiArMjQ4LDEwIEBAIHZvaWQgaW5p
dGlhbGl6ZVB0clRhZ0xvb2t1cCgpOwogaW5saW5lIHZvaWQgaW5pdGlhbGl6ZVB0clRhZ0xvb2t1
cCgpIHsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkg
fHwgKENQVShBUk02NEUpICYmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKSkKK2NvbnN0IGNoYXIq
IHB0clRhZ05hbWUoUHRyVGFnKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIG5hbWVz
cGFjZSBXVEYgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NSwxMCArNDY1LDE4IEBAIHZvaWQgT3B0
aW9uczo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygKICAgICBpZiAoIU9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5KCkpCiAgICAgICAgIE9wdGlvbnM6OnVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dCgp
ID0gZmFsc2U7CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0pJVCgpCi0gICAgICAgIHx8IE9w
dGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpCisgICAgaWYgKE9wdGlvbnM6OmR1bXBEaXNhc3NlbWJs
eSgpCisgICAgICAgIHx8IE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKQogICAgICAgICB8fCBP
cHRpb25zOjpkdW1wREZHRGlzYXNzZW1ibHkoKQogICAgICAgICB8fCBPcHRpb25zOjpkdW1wRlRM
RGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wUmVnRXhwRGlzYXNzZW1ibHko
KQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wV2FzbURpc2Fzc2VtYmx5KCkKKyAgICAgICAgfHwg
T3B0aW9uczo6ZHVtcEJCUURpc2Fzc2VtYmx5KCkKKyAgICAgICAgfHwgT3B0aW9uczo6ZHVtcE9N
R0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQo
KSA9IHRydWU7CisKKyAgICBpZiAoT3B0aW9uczo6bG9nSklUKCkKKyAgICAgICAgfHwgT3B0aW9u
czo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBCeXRl
Y29kZUF0REZHVGltZSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNl
KCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcERGR0dyYXBoQXRFYWNoUGhhc2UoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAy
OTQyODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZh
c3RNZW1vcnkoKTsKICAgICBcCiAgICAgdihCb29sLCB1c2VPU0xvZywgZmFsc2UsIE5vcm1hbCwg
IkxvZyBkYXRhTG9nKClzIHRvIG9zX2xvZyBpbnN0ZWFkIG9mIHN0ZGVyciIpIFwKICAgICAvKiBk
dW1wRGlzYXNzZW1ibHkgaW1wbGllcyBkdW1wREZHRGlzYXNzZW1ibHkuICovIFwKKyAgICB2KEJv
b2wsIG5lZWREaXNhc3NlbWJseVN1cHBvcnQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KEJvb2wsIGR1bXBEaXNhc3NlbWJseSwgZmFsc2UsIE5vcm1hbCwgImR1bXBzIGRpc2Fzc2Vt
Ymx5IG9mIGFsbCBKSVQgY29tcGlsZWQgY29kZSB1cG9uIGNvbXBpbGF0aW9uIikgXAogICAgIHYo
Qm9vbCwgYXN5bmNEaXNhc3NlbWJseSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
Qm9vbCwgbG9nSklULCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyOTQyODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDksNiArMTQwOSwx
NiBAQCB2b2lkIFZNOjpjbGVhclNjcmF0Y2hCdWZmZXJzKCkKICAgICAgICAgc2NyYXRjaEJ1ZmZl
ci0+c2V0QWN0aXZlTGVuZ3RoKDApOwogfQogCitib29sIFZNOjppc1NjcmF0Y2hCdWZmZXIodm9p
ZCogcHRyKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX3NjcmF0Y2hCdWZmZXJMb2NrIH07Cisg
ICAgZm9yIChhdXRvKiBzY3JhdGNoQnVmZmVyIDogbV9zY3JhdGNoQnVmZmVycykgeworICAgICAg
ICBpZiAoc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpID09IHB0cikKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgVk06OmVuc3Vy
ZVNoYWRvd0NoaWNrZW4oKQogewogICAgIGlmIChtX3NoYWRvd0NoaWNrZW4pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4NSw2ICs2ODUsNyBA
QCBwdWJsaWM6CiAgICAgLy8gLSBZb3UgY2FuIG9ubHkgd3JpdGUgdG8gZW50cmllcyBpbiB0aGUg
U2NyYXRjaEJ1ZmZlciBmcm9tIHRoZSBtYWluIHRocmVhZC4KICAgICBTY3JhdGNoQnVmZmVyKiBz
Y3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplX3Qgc2l6ZSk7CiAgICAgdm9pZCBjbGVhclNjcmF0Y2hC
dWZmZXJzKCk7CisgICAgYm9vbCBpc1NjcmF0Y2hCdWZmZXIodm9pZCopOwogCiAgICAgRW5jb2Rl
ZEpTVmFsdWUqIGV4Y2VwdGlvbkZ1enppbmdCdWZmZXIoc2l6ZV90IHNpemUpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHkuaAkocmV2aXNpb24gMjk0Mjgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC05Niw3ICs5Niw4IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNTYW5lUG9p
bnRlcigKICAgICB1aW50cHRyX3QgcG9pbnRlckFzSW50ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4ocG9pbnRlcik7CiAgICAgdWludHB0cl90IGNhbm9uaWNhbFBvaW50ZXJCaXRzID0gcG9pbnRl
ckFzSW50IDw8ICg2NCAtIE9TX0NPTlNUQU5UKEVGRkVDVElWRV9BRERSRVNTX1dJRFRIKSk7CiAg
ICAgdWludHB0cl90IG5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzID0gcG9pbnRlckFzSW50ID4+IE9T
X0NPTlNUQU5UKEVGRkVDVElWRV9BRERSRVNTX1dJRFRIKTsKLSAgICByZXR1cm4gIW5vbkNhbm9u
aWNhbFBvaW50ZXJCaXRzICYmIGNhbm9uaWNhbFBvaW50ZXJCaXRzOworICAgIHVpbnRwdHJfdCBs
b3dlcjRHID0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgMzIpIC0gMTsKKyAgICByZXR1
cm4gIW5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzICYmIGNhbm9uaWNhbFBvaW50ZXJCaXRzICYmIHBv
aW50ZXJBc0ludCA+IGxvd2VyNEc7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwb2ludGVyKTsK
ICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyOTQyODEpCisrKyBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIyLTA1LTE2ICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQVJNNjQgZGlzYXNz
ZW1ibGVyIHN1cHBvcnQgZm9yIHN5bWJvbGljIGR1bXBpbmcgb2Ygc29tZSB3ZWxsIGtub3duIGNv
bnN0YW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI0MDQ0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IDEuIEFkZGVkIGEgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpIGZsYWcuCisgICAg
ICAgICAgIEN1cnJlbnRseSwgdGhpcyBmZWF0dXJlIHJlbGllcyBvbiBhbiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKSBmb3IgZW51bWVyYXRpbmcKKyAgICAgICAgICAgSklUIG9wZXJhdGlvbnMgc2lt
aWxhciB0byBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKS4gIEl0IGlzIGFsc28KKyAg
ICAgICAgICAgcmVzdHJpY3RlZCB0byBFTkFCTEUoRElTQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjRF
KS4KKworVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgRU5BQkxFKERJU0FTU0VNQkxFUikgJiYg
Q1BVKEFSTTY0RSkKKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybUNhbGxpbmdDb252ZW50aW9ucy5o
OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJsZS5oOgorCiAyMDIyLTA1LTE2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIENvcnJlY3QgZXJyb25lb3Vz
IGd1YXJkIGluIFBsYXRmb3JtIGZpbGUKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtQ2Fs
bGluZ0NvbnZlbnRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1D
YWxsaW5nQ29udmVudGlvbnMuaAkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL1dURi93dGYv
UGxhdGZvcm1DYWxsaW5nQ29udmVudGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIElu
Yy4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC04NCw5ICs4NCwxOCBAQAogI2RlZmluZSBK
SVRfT1BFUkFUSU9OX0FUVFJJQlVURVMKICNlbmRpZgogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJ
T05fVkFMSURBVElPTikKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBF
TkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkKKworI2lmIEVOQUJMRShKSVRfT1BFUkFU
SU9OX1ZBTElEQVRJT04pICYmIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorI2Rl
ZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9FWFRSQVModmFsaWRhdGVGdW5jdGlvbiwg
bmFtZSkgKHZvaWQqKXZhbGlkYXRlRnVuY3Rpb24sIG5hbWUKKyNlbGlmIEVOQUJMRShKSVRfT1BF
UkFUSU9OX1ZBTElEQVRJT04pCisjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0VY
VFJBUyh2YWxpZGF0ZUZ1bmN0aW9uLCBuYW1lKSAodm9pZCopdmFsaWRhdGVGdW5jdGlvbgorI2Vs
c2UgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCisjZGVmaW5lIEpTQ19BTk5P
VEFURV9KSVRfT1BFUkFUSU9OX0VYVFJBUyh2YWxpZGF0ZUZ1bmN0aW9uLCBuYW1lKSBuYW1lCisj
ZW5kaWYKKwogI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9JTlRFUk5BTChmdW5j
dGlvbikgXAotICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gX0pJVFRh
cmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwgc2VjdGlvbigiX19EQVRBX0NP
TlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwgKHZvaWQqKWZ1bmN0aW9uIyNW
YWxpZGF0ZSB9OworICAgIGNvbnN0ZXhwciBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gX0pJ
VFRhcmdldElEXyMjZnVuY3Rpb24gX19hdHRyaWJ1dGVfXygodXNlZCwgc2VjdGlvbigiX19EQVRB
X0NPTlNULF9fanNjX29wcyIpKSkgPSB7ICh2b2lkKilmdW5jdGlvbiwgSlNDX0FOTk9UQVRFX0pJ
VF9PUEVSQVRJT05fRVhUUkFTKGZ1bmN0aW9uIyNWYWxpZGF0ZSwgI2Z1bmN0aW9uKSB9OwogCiAj
ZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OKGZ1bmN0aW9uKSBcCiAgICAgSlNDX0RF
Q0xBUkVfQU5EX0RFRklORV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04oZnVuY3Rpb24pOyBcCkBA
IC0xMDAsMTIgKzEwOSwxMyBAQAogICAgIEpTQ19ERUNMQVJFX0FORF9ERUZJTkVfSklUX09QRVJB
VElPTl9SRVRVUk5fVkFMSURBVElPTihmdW5jdGlvbik7IFwKICAgICBKU0NfQU5OT1RBVEVfSklU
X09QRVJBVElPTl9JTlRFUk5BTChmdW5jdGlvbikKIAotI2Vsc2UKKyNlbHNlIC8vIG5vdCAoRU5B
QkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElT
QVNTRU1CTFkpKQorCiAjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OKGZ1bmN0aW9u
KQogI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9QUk9CRShmdW5jdGlvbikKICNk
ZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fUkVUVVJOKGZ1bmN0aW9uKQotI2VuZGlm
CiAKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUo
SklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkKIAogI2RlZmluZSBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT05fV0lUSE9VVF9WQVJJQUJMRShmdW5jdGlvbk5hbWUsIHJldHVyblR5cGUsIHBhcmFtZXRl
cnMpIFwKICAgICByZXR1cm5UeXBlIEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyBmdW5jdGlvbk5h
bWUgcGFyYW1ldGVycwpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCShyZXZpc2lvbiAyOTQy
ODEpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC04NDksNiArODQ5
LDEwIEBACiAjZGVmaW5lIEVOQUJMRV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04gMQogI2VuZGlm
CiAKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBFTkFCTEUoRElTQVNTRU1CTEVSKSAm
JiBDUFUoQVJNNjRFKQorI2RlZmluZSBFTkFCTEVfSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSAx
CisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9CSU5ESU5HX0lOVEVHUklUWSkgJiYgIU9T
KFdJTkRPV1MpCiAjZGVmaW5lIEVOQUJMRV9CSU5ESU5HX0lOVEVHUklUWSAxCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDIyLTA1LTE2ICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQVJNNjQgZGlzYXNzZW1ibGVyIHN1
cHBvcnQgZm9yIHN5bWJvbGljIGR1bXBpbmcgb2Ygc29tZSB3ZWxsIGtub3duIGNvbnN0YW50cy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MDQ0Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmluZGlu
Z3MvanMvV2ViQ29yZUpJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cG9wdWxh
dGVKSVRPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OnBvcHVsYXRlRGlzYXNzZW1ibHlM
YWJlbHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OnBvcHVsYXRlSklUT3BlcmF0aW9ucyk6CisgICAgICAgICogdGVzdGluZy9qcy9XZWJD
b3JlVGVzdFN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZVRlc3RTdXBwb3J0Ojpwb3B1bGF0
ZUpJVE9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZVRlc3RTdXBwb3J0Ojpwb3B1bGF0ZURp
c2Fzc2VtYmx5TGFiZWxzKToKKyAgICAgICAgKiB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9y
dC5oOgorICAgICAgICAoV2ViQ29yZVRlc3RTdXBwb3J0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFi
ZWxzKToKKyAgICAgICAgKFdlYkNvcmVUZXN0U3VwcG9ydDo6cG9wdWxhdGVKSVRPcGVyYXRpb25z
KToKKwogMjAyMi0wNS0xNiAgR2FicmllbCBOYXZhIE1hcmlubyAgPGduYXZhbWFyaW5vQGFwcGxl
LmNvbT4KIAogICAgICAgICBDcmFzaCBpbiBXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6cG9z
aXRpb25JbnNpZGVUZXh0Tm9kZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUpJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjk0MjgxKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsMTcgKzMwLDM1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lm
IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJ
T05fVkFMSURBVElPTikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCisKIGV4
dGVybiBjb25zdCBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gc3RhcnRPZkpJVE9wZXJhdGlv
bnNJbldlYkNvcmUgX19hc20oInNlY3Rpb24kc3RhcnQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIp
OwogZXh0ZXJuIGNvbnN0IEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJh
dGlvbnNJbldlYkNvcmUgX19hc20oInNlY3Rpb24kZW5kJF9fREFUQV9DT05TVCRfX2pzY19vcHMi
KTsKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiB2b2lkIHBvcHVsYXRl
SklUT3BlcmF0aW9ucygpCiB7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CiAg
ICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10gewogICAgICAgICBKU0M6OkpJVE9wZXJhdGlv
bkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0lu
V2ViQ29yZSwgJmVuZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSk7CiAgICAgfSk7CisjaWYgRU5B
QkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCisgICAgaWYgKFVOTElLRUxZKEpTQzo6T3B0
aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpKSkKKyAgICAgICAgcG9wdWxhdGVEaXNhc3Nl
bWJseUxhYmVscygpOworI2VuZGlmCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05f
VkFMSURBVElPTikKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQordm9p
ZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIEpT
Qzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIo
JnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJD
b3JlKTsKKyAgICB9KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NF
TUJMWSkKKworI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVO
QUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI5
NDI4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMCArMjcsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5BQkxFKEpJ
VF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCisKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNB
U1NFTUJMWSkKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygp
OworI2Vsc2UKK2lubGluZSB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKSB7IH0KKyNl
bmRpZgorCiAjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCk7CiAjZWxzZQotaW5saW5lIHZvaWQgcG9w
dWxhdGVKSVRPcGVyYXRpb25zKCkgeyB9CitpbmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlv
bnMoKSB7IHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKTsgfQogI2VuZGlmCiAKKyNlbHNlCitp
bmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUo
SklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NF
TUJMWSkKKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1
cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29y
ZVRlc3RTdXBwb3J0LmNwcAkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL1dlYkNvcmUvdGVz
dGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NDEsMTcgKzI0MSwzNiBAQCB2b2lkIHNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9y
CiB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjaWYg
RU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJT05f
RElTQVNTRU1CTFkpCisKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24g
c3RhcnRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCBfX2FzbSgic2VjdGlvbiRz
dGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVy
YXRpb25Bbm5vdGF0aW9uIGVuZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0IF9f
YXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiAKKyNpZiBFTkFCTEUo
SklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygp
CiB7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CiAgICAgc3RkOjpjYWxsX29u
Y2Uob25jZUtleSwgW10gewogICAgICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRl
UG9pbnRlcnNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBw
b3J0LCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQpOwogICAgIH0pOwor
I2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorICAgIGlmIChVTkxJS0VMWShK
U0M6Ok9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgIHBvcHVsYXRl
RGlzYXNzZW1ibHlMYWJlbHMoKTsKKyNlbmRpZgogfQogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BF
UkFUSU9OX1ZBTElEQVRJT04pCiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJM
WSkKK3ZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpCit7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAg
ICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVt
YmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0LCAmZW5kT2ZK
SVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQpOworICAgIH0pOwogfQorI2VuZGlmIC8v
IEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1C
TFkpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmVUZXN0U3VwcG9ydApJbmRleDogU291cmNlL1dl
YkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5oCShyZXZpc2lvbiAyOTQy
ODEpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxNSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NywxMCArNjcsMjEgQEAgdm9pZCBzZXR1cE5ld2x5Q3Jl
YXRlZFNlcnZpY2VXb3JrZXIodWludAogICAgIAogdm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlc0ZvclRlc3RpbmcoY29uc3QgU3RyaW5nJikgVEVTVF9TVVBQT1JUX0VYUE9SVDsK
IAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShKSVRfT1BF
UkFUSU9OX0RJU0FTU0VNQkxZKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZ
KQordm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkgVEVTVF9TVVBQT1JUX0VYUE9SVDsK
KyNlbHNlCitpbmxpbmUgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkgeyB9CisjZW5k
aWYKKwogI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiB2b2lkIHBvcHVsYXRl
SklUT3BlcmF0aW9ucygpIFRFU1RfU1VQUE9SVF9FWFBPUlQ7CiAjZWxzZQotaW5saW5lIHZvaWQg
cG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyB9CitpbmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJh
dGlvbnMoKSB7IHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKTsgfQogI2VuZGlmCiAKKyNlbHNl
CitpbmxpbmUgdm9pZCBwb3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSB7IH0KKyNlbmRpZiAvLyBFTkFC
TEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNB
U1NFTUJMWSkKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBwb3J0Cg==
</data>
<flag name="review"
          id="488585"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>459471</attachid>
            <date>2022-05-16 18:46:27 -0700</date>
            <delta_ts>2022-05-17 02:13:58 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-240443.patch</filename>
            <type>text/plain</type>
            <size>59447</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NiBA
QAorMjAyMi0wNS0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIEFSTTY0IGRpc2Fzc2VtYmxlciBzdXBwb3J0IGZvciBzeW1ib2xpYyBkdW1waW5nIG9mIHNv
bWUgd2VsbCBrbm93biBjb25zdGFudHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNDA0NDMKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6
dWtpLgorCisgICAgICAgIDEuIEFkZGVkIGEgT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9y
dCgpIG9wdGlvbi4gIFRoaXMgb3B0aW9uIGlzIHRydWUgaWYKKyAgICAgICAgICAgYW55IG9mIHRo
ZSBKU0MgZGlzYXNzZW1ibHkgb3B0aW9ucyBhcmUgZW5hYmxlZC4gIFRoaXMgYWxsb3dzIHVzIHRv
IHRyaXZpYWxseQorICAgICAgICAgICBjaGVjayBpZiB3ZSBuZWVkIHRvIGVuYWJsZSBhZGRpdGlv
bmFsIGluZnJhc3RydWN0dXJlIChsaWtlIHRob3NlIGFkZGVkIGluIHRoaXMKKyAgICAgICAgICAg
cGF0Y2gpIHRvIHN1cHBvcnQgZGlzYXNzZW1ibHkuCisKKyAgICAgICAgMi4gUmVmYWN0b3IgdGhl
IERpc2Fzc2VtYmxlcidzIHRodW5rTGFiZWxNYXAgaW50byBhIG1vcmUgZ2VuZXJpYyBsYWJlbE1h
cC4gIEl0CisgICAgICAgICAgIGNhbiBub3cgbWFwIGEgcG9pbnRlciB0byBhIENTdHJpbmcgb3Ig
YSBjb25zdCBjaGFyKiBsYWJlbC4KKworICAgICAgICAzLiBFbmFibGUgSklUT3BlcmF0aW9uTGlz
dCBpbmZyYXN0cnVjdHVyZSB3aGVuIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQor
ICAgICAgICAgICBpcyB0cnVlLiAgVGhpcyBhZGRzIGEgbmFtZSB0byB0aGUgSklUT3BlcmF0aW9u
QW5ub3RhdGlvbiByZWNvcmQuICBTaW5jZSB0aGlzIGlzCisgICAgICAgICAgIGd1YXJkZWQgYnkg
RU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpLCB3ZSBjYW4gdHJpdmlhbGx5IHR1cm4g
dGhpcyBwYXJ0CisgICAgICAgICAgIG9mZiBsYXRlciBpZiBhZGRpbmcgdGhpcyBuYW1lIGFkZHMg
dG9vIG11Y2ggc2l6ZSBidXJkZW4gKG9yIGlmIGFueSB1bmV4cGVjdGVkCisgICAgICAgICAgIGlz
c3VlcyBhcmlzZSkuICBUdXJuaW5nIHRoaXMgb2ZmIHdpbGwgb25seSBkaXNhYmxlIGRpc2Fzc2Vt
Ymx5IG9mIEpJVCBvcGVyYXRpb24KKyAgICAgICAgICAgbmFtZXMuICBEaXNhc3NlbWJseSBvZiBv
dGhlciBjb25zdGFudHMgKHNlZSBiZWxvdykgd2lsbCBzdGlsbCBiZSBzdXBwb3J0ZWQuCisKKyAg
ICAgICAgICAgSWYgT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpIGlzIHRydWUsIHRo
ZSBKSVRPcGVyYXRpb25MaXN0IHdpbGwKKyAgICAgICAgICAgcmVnaXN0ZXIgYWxsIEpJVCBvcGVy
YXRpb25zIChhbmQgdGhlIExMSW50IG9uZXMgYXMgd2VsbCkgd2l0aCB0aGUgRGlzYXNzZW1ibGVy
CisgICAgICAgICAgIGxhYmVsTWFwLgorCisgICAgICAgIDQuIFJlbW92ZWQgdGhlIDwgPiBicmFj
a2V0cyBhcm91bmQgYnJhbmNoIHRhcmdldCBsYWJlbHMgZXhjZXB0IGZvciBpbnRlcm5hbCBwYwor
ICAgICAgICAgICBpbmRleCBsYWJlbHMgKGUuZy4gPDcxNj4pIGFuZCA8dW5rbm93bj4gKHdoZW4g
d2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBicmFuY2gKKyAgICAgICAgICAgdGFyZ2V0IGlzKS4gIFRo
ZSA8ID4gbm90YXRpb24gdGFrZXMgdXAgc3BhY2UgYW5kIGRvZXNuJ3QgYWRkIGFueSBpbmZvLiAg
VGhlCisgICAgICAgICAgIGJyYW5jaCB0YXJnZXRzIG5vdyBsb29rIGxpa2UgdGhpczoKKworICAg
ICAgICAgICAgICA8MzI+IDB4MTE4MDEwMmMwOiAgICBiLm5lICAgICAweDExODAxMDFjMCAtPiB0
aHVuazogbmF0aXZlIFRhaWwgV2l0aCBTYXZlZCBUYWdzIENhbGwgdHJhbXBvbGluZQorICAgICAg
ICAgICAgICA8OTI+IDB4MTE4MDFjODdjOiAgICBiICAgICAgICAweDExODAwODk4MCAtPiB0aHVu
azogTExJbnQgZnVuY3Rpb24gZm9yIGNhbGwganVtcCB0byBwcm9sb2d1ZSB0aHVuaworICAgICAg
ICAgICAgPDM1MDg+IDB4MTE5OGUxNmI0OiAgICBiICAgICAgICAweDExOThiYzFhMCAtPiBKSVQg
UEMKKworICAgICAgICAgICBJbnRlcm5hbCBwYyBpbmRleCBsYWJlbHMgd2lsbCBzdGlsbCB1c2Ug
dGhlIDwgPiBicmFja2V0czoKKworICAgICAgICAgICAgPDM0NzY+IDB4MTE5OGUxNjk0OiAgICBi
LmVxICAgICAweDExOThlMTZhMCAtPiA8MzQ4OD4KKworICAgICAgICA1LiBBZGRlZCBBUk02NCBk
aXNhc3NlbWJsZXIgc3VwcG9ydCB0byBjb21wdXRlIHRoZSB2YWx1ZSBvZiBhIGNvbnN0YW50IGJl
aW5nCisgICAgICAgICAgIGxvYWRlZCBpbnRvIGEgcmVnaXN0ZXIgdXNpbmcgIk1vdmVXaWRlIiBp
bnN0cnVjdGlvbnMgZS5nLiBtb3Z6IGFuZCBtb3ZrLgorCisgICAgICAgICAgIFdoZW4gdGhlIGRp
c2Fzc2VtYmxlciBzZWVzIGEgbW92eiBvciBtb3ZuIG9yIG1vdiAob2YgdGhlIE1vdmVXaWRlIHZh
cmlldHkpLAorICAgICAgICAgICB0aGUgZGlzYXNzZW1ibGVyIGluaXRpYWxpemVzIGEgbV9idWls
dENvbnN0YW50IHZhbHVlLiAgV2l0aCBlYWNoIHN1YnNlcXVlbnQKKyAgICAgICAgICAgbW92ayBp
bnN0cnVjdGlvbiB3aXRoIHRoZSBzYW1lIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLCB0aGUgZGlzYXNz
ZW1ibGVyIHNwbGljZXMKKyAgICAgICAgICAgaW4gdGhlIGNvcnJlc3BvbmRpbmcgMTYtYml0IGlt
bWVkaWF0ZS4KKworICAgICAgICAgICBBZnRlciBkaXNhc3NlbWJsaW5nIGEgTW92ZVdpZGUgaW5z
dHJ1Y3Rpb24sIGl0IHdpbGwgY2hlY2sgaWYgdGhlIG5leHQKKyAgICAgICAgICAgaW5zdHJ1Y3Rp
b24gaXMgYWxzbyBhIE1vdmVXaWRlIGluc3RydWN0aW9uIHRhcmdldGluZyB0aGUgc2FtZSBkZXN0
aW5hdGlvbgorICAgICAgICAgICByZWdpc3Rlci4gIElmIHNvLCB0aGUgY29uc3RhbnQgaXMgc3Rp
bGwgYmVpbmcgYnVpbGQ6IGhlbmNlLCBpdCBkb2VzIG5vdGhpbmcgYW5kCisgICAgICAgICAgIGNv
bnRpbnVlcy4KKworICAgICAgICAgICBJZiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpcyAoYSkgYSBN
b3ZlV2lkZSBpbnN0cnVjdGlvbiB0YXJnZXRpbmcgYSBkaWZmZXJlbnQKKyAgICAgICAgICAgcmVn
aXN0ZXIsIChiKSBub3QgYSBNb3ZlV2lkZSBpbnN0cnVjdGlvbiwgb3IgKGMpIHdlJ3ZlIHJlYWNo
ZWQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgTGlua0J1ZmZlciAoaS5lLiB0aGVyZSdzIG5v
IG5leHQgaW5zdHJ1Y3Rpb24pLCB0aGVuIHRoZSBjb25zdGFudCBidWlsZGluZyBmb3IKKyAgICAg
ICAgICAgdGhlIGN1cnJlbnQgdGFyZ2V0IHJlZ2lzdGVyIGlzIGNvbXBsZXRlLgorCisgICAgICAg
IDYuIEFkZGVkIEFSTTY0IGRpc2Fzc2VtYmxlciBzdXBwb3J0IGZvciBsb29raW5nIHVwIGNvbnN0
YW50cyAoYnVpbHQgaW4gKDUpIGFib3ZlKQorICAgICAgICAgICBhbmQgcHJpbnRpbmcgc3ltYm9s
aWMgaW5mbyAvIG5hbWVzIG9mIHRob3NlIGNvbnN0YW50cy4KKworICAgICAgICAgICBXaXRoIEVO
QUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKSwgd2Ugbm93IGhhdmUgSklUIG9wZXJhdGlv
biBuYW1lcyBlLmcuCisKKyAgICAgICAgICAgICA8MTc2PiAweDExODAxMDI3MDogICAgbW92ayAg
ICAgeDMsICMweDlmNmUsIGxzbCAjNDggLT4gMHgxMDJkYzg5NTAgb3BlcmF0aW9uVk1IYW5kbGVF
eGNlcHRpb24KKyAgICAgICAgICAgICA8MTY0PiAweDExODAxODBhNDogICAgbW92ayAgICAgeDgs
ICMweGU1YywgbHNsICM0OCAtPiAweDEwMmRiOTQyMCBvcGVyYXRpb25WaXJ0dWFsQ2FsbAorCisg
ICAgICAgICAgIEFwYXJ0IGZyb20gbG9va2luZyB1cCB0aGUgY29uc3RhbnQgaW4gdGhlIERpc2Fz
c2VtYmxlciBsYWJlbE1hcCwgaXQgYWxzbyBsb29rcworICAgICAgICAgICB1cCBzb21lIGNvbW1v
bmx5IHVzZWQgY29uc3RhbnRzIGUuZy4KKworICAgICAgICAgICBhLiBWTSBwb2ludGVyczoKKwor
ICAgICAgICAgICAgIDwxNTY+IDB4MTE4MDExMDVjOiAgICBtb3ZrICAgICB4MCwgIzB4MSwgbHNs
ICMzMiAtPiAweDEzOTQzNTAwMCB2bQorCisgICAgICAgICAgIGIuIFNvbWUgVk0gaW50ZXJuYWwg
cG9pbnRlcnMgKG1vcmUgY2FuIGJlIGFkZGVkIGxhdGVyIGFzIG5lZWRlZCk6CisKKyAgICAgICAg
ICAgICAgPDI0PiAweDExODAxNGQxODogICAgbW92ayAgICAgeDE3LCAjMHgxLCBsc2wgIzMyIC0+
IDB4MTM5NDNlZTc4IHZtICs0MDU2ODogdm0udG9wQ2FsbEZyYW1lCisgICAgICAgICAgICAgIDw3
Nj4gMHgxMTgwMTRkNGM6ICAgIG1vdmsgICAgIHgxNywgIzB4MSwgbHNsICMzMiAtPiAweDEzOTQ0
MWExMCB2bSArNTE3Mjg6IHZtLm1fZXhjZXB0aW9uCisgICAgICAgICAgICAgPDE5Nj4gMHgxMTgw
MTEyNDQ6ICAgIG1vdmsgICAgIHgxNywgIzB4MSwgbHNsICMzMiAtPiAweDEzOTQ0MTdkMCB2bSAr
NTExNTI6IHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93CisgICAgICAgICAgICAgPDIwOD4gMHgx
MTk4ZTA5ZDA6ICAgIG1vdmsgICAgIHgxNywgIzB4MSwgbHNsICMzMiAtPiAweDEwNDQzMmNjMCB2
bSArNTI0MTY6IHZtLm1fZG9lc0dDCisKKyAgICAgICAgICAgYy4gVk0gcmVsYXRlZCBwb2ludGVy
cyAob25seSAxIGZvciBub3c7IG5vdCBWTSBmaWVsZHMsIGJ1dCBoYW5ncyBvZmYgb2YgVk0pOgor
CisgICAgICAgICAgICAgIDwxMj4gMHgxMTgwMTkzOGM6ICAgIG1vdmsgICAgIHgxLCAjMHgxLCBs
c2wgIzMyIC0+IDB4MTA1MmNkM2M4IHZtIHNjcmF0Y2hCdWZmZXIubV9idWZmZXIKKworICAgICAg
ICAgICBkLiBXZWxsIGtub3duIFB0clRhZ3M6CisKKyAgICAgICAgICAgICA8MjA0PiAweDExODAx
MTI0YzogICAgbW92eiAgICAgeDE2LCAjMHg2ZjliIC0+IDB4NmY5YiBFeGNlcHRpb25IYW5kbGVy
UHRyVGFnID8KKyAgICAgICAgICAgICA8MjEyPiAweDExODAxNTBkNDogICAgbW92eiAgICAgeDE2
LCAjMHg1OTMgLT4gMHg1OTMgSlNFbnRyeVB0clRhZyA/CisgICAgICAgICAgICAgPDE2OD4gMHgx
MTgwMTgzYTg6ICAgIG1vdnogICAgIGxyLCAjMHhiMzg5IC0+IDB4YjM4OSBPcGVyYXRpb25QdHJU
YWcgPworCisgICAgICAgICAgICAgKiB0aGUgPyBpcyBiZWNhdXNlIHdlIGNhbm5vdCBiZSBjZXJ0
YWluIHRoYXQgdGhlIDE2LWJpdCBjb25zdGFudCBpcyBhIFB0clRhZy4KKyAgICAgICAgICAgICAg
IEl0IG1heSBqdXN0IGJlIGEgY29pbmNpZGVuY2UgdGhhdCB0aGUgdmFsdWUgaXMgdGhlIHNhbWUu
ICBIb3dldmVyLCB0aGUgdXNlcgorICAgICAgICAgICAgICAgY2FuIHRyaXZpYWxseSBsb29rIGF0
IHRoZSBzdXJyb3VuZGluZyBkaXNhc3NlbWJsZWQgY29kZSwgYW5kIGJlIGFibGUgdG8KKyAgICAg
ICAgICAgICAgIHRlbGwgaWYgdGhlIHZhbHVlIGlzIHVzZWQgYXMgYSBQdHJUYWcuCisKKyAgICAg
ICAgICAgRm9yIGNvbnN0YW50cyB0aGF0IGFyZSBub3QgZm91bmQgaW4gdGhlIGtub3duIHNldHM6
CisKKyAgICAgICAgICAgZS4gU21hbGwgMTYtYml0IGNvbnN0YW50IChwcmludHMgZGVjaW1hbCB2
YWx1ZSBmb3IgY29udmVuaWVuY2UpOgorCisgICAgICAgICAgICAgPDIwMD4gMHgxMTk4ZTA5Yzg6
ICAgIG1vdnogICAgIHgxNywgIzB4MmNjMCAtPiAxMTQ1NgorCisgICAgICAgICAgIGYuIFVua25v
d24gcG9pbnRlcnMgdGhhdCBhcmVuJ3QgaW4gdGhlIEpJVCBhbmQgTExJTlQgcmVnaW9ucyB3aWxs
IHNpbXBseSBwcmludAorICAgICAgICAgICAgICB0aGUgcG9pbnRlciAvIGNvbnN0YW50OgorCisg
ICAgICAgICAgICAgIDw4OD4gMHgxMTk4ZTA5NTg6ICAgIG1vdnogICAgIHgxNywgIzB4MjA4OAor
ICAgICAgICAgICAgICA8OTI+IDB4MTE5OGUwOTVjOiAgICBtb3ZrICAgICB4MTcsICMweDMwZCwg
bHNsICMxNgorICAgICAgICAgICAgICA8OTY+IDB4MTE5OGUwOTYwOiAgICBtb3ZrICAgICB4MTcs
ICMweDEsIGxzbCAjMzIgLT4gMHgxMDMwZDIwODgKKworICAgICAgICAgICAgICA8dW5rbm93bj4g
aXMgb25seSB1c2VkIGluIHJlbGF0aXZlIGJyYW5jaGVzLgorCisgICAgICAgIDcuIEVuaGFuY2Vk
IHRoZSBJbnRlZ3JpdHk6OmlzU2FuZVBvaW50ZXIoKSBjaGVjayB0byByZWplY3QgcG9pbnRlciB2
YWx1ZXMgdGhhdAorICAgICAgICAgICBhcmUgbGVzcyB0aGFuIDRHIG9uIENQVShBRERSRVNTNjQp
IHRhcmdldHMgZm9yIE9TKERBUldJTikuICBObyBzYW5lIHBvaW50ZXIKKyAgICAgICAgICAgc2hv
dWxkIGJlIGluIHRoZSBsb3dlc3QgNEcgYWRkcmVzcyByZWdpb24uCisKKyAgICAgICAgICAgVGhp
cyBhbHNvIGhlbHBzIHRoZSBkaXNhc3NlbWJsZXIgbW9yZSBxdWlja2x5IGZpbHRlciBvdXQgY29u
c3RhbnQgdmFsdWVzIHRoYXQKKyAgICAgICAgICAgYXJlbid0IHBvaW50ZXJzLgorCisgICAgICAg
ICAgIFRoaXMgY2hhbmdlIGFmZmVjdHMgREZHJ3Mgc3BlY3VsYXRpb25Gcm9tQ2VsbCgpLCB3aGlj
aCBpcyB0aGUgb25seSBwbGFjZSB0aGF0CisgICAgICAgICAgIG1heSBhZmZlY3QgdXNlciBmYWNp
bmcgcGVyZm9ybWFuY2UuICBIb3dldmVyLCBJIHRoaW5rIHRoZSBpbXBhY3Qgc2hvdWxkIGJlCisg
ICAgICAgICAgIGluc2lnbmlmaWNhbnQgKHNpbmNlIHRoZSBhZGRlZCBjaGVjayBpcyBjaGVhcCku
CisKKyAgICAgICAgKiBhc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5jcHA6CisgICAgICAgIChK
U0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlKToK
KyAgICAgICAgKEpTQzo6bGxpbnRPcGVyYXRpb25zKToKKyAgICAgICAgKEpTQzo6SklUT3BlcmF0
aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCk6CisgICAg
ICAgIChKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OmFkZERpc2Fzc2VtYmx5TGFiZWxzKToKKyAgICAg
ICAgKEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2
YVNjcmlwdENvcmUpOgorICAgICAgICAoSlNDOjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURp
c2Fzc2VtYmx5TGFiZWxzSW5KYXZhU2NyaXB0Q29yZUZvckxMSW50KToKKyAgICAgICAgKEpTQzo6
SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIpOgor
ICAgICAgICAqIGFzc2VtYmxlci9KSVRPcGVyYXRpb25MaXN0Lmg6CisgICAgICAgIChKU0M6OkpJ
VE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRDb3JlKToKKyAgICAg
ICAgKEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6cG9wdWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENv
cmVGb3JMTEludCk6CisgICAgICAgICogYXNzZW1ibGVyL0pJVE9wZXJhdGlvblZhbGlkYXRpb24u
aDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5jcHA6CisgICAgICAgIChKU0M6Okxp
bmtCdWZmZXI6OmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseUltcGwpOgorICAgICAgICAqIGIz
L3Rlc3RiM18xLmNwcDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9B
Uk02NC9BNjRET3Bjb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6QVJNNjREaXNhc3NlbWJsZXI6OkE2
NERPcGNvZGU6OmFwcGVuZFBDUmVsYXRpdmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpBUk02NERp
c2Fzc2VtYmxlcjo6TW92ZVdpZGVGb3JtYXRUcmFpdDo6cmVqZWN0ZWRSZXN1bHQpOgorICAgICAg
ICAoSlNDOjpBUk02NERpc2Fzc2VtYmxlcjo6TW92ZVdpZGVGb3JtYXRUcmFpdDo6YWNjZXB0ZWRS
ZXN1bHQpOgorICAgICAgICAoSlNDOjpBUk02NERpc2Fzc2VtYmxlcjo6TW92ZVdpZGVJc1ZhbGlk
VHJhaXQ6OnJlamVjdGVkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6QVJNNjREaXNhc3NlbWJsZXI6
Ok1vdmVXaWRlSXNWYWxpZFRyYWl0OjphY2NlcHRlZFJlc3VsdCk6CisgICAgICAgIChKU0M6OkFS
TTY0RGlzYXNzZW1ibGVyOjpBNjRET3Bjb2RlTW92ZVdpZGU6OmhhbmRsZVBvdGVudGlhbERhdGFQ
b2ludGVyKToKKyAgICAgICAgKEpTQzo6QVJNNjREaXNhc3NlbWJsZXI6OkE2NERPcGNvZGVNb3Zl
V2lkZTo6aGFuZGxlUG90ZW50aWFsUHRyVGFnKToKKyAgICAgICAgKEpTQzo6QVJNNjREaXNhc3Nl
bWJsZXI6OkE2NERPcGNvZGVNb3ZlV2lkZTo6cGFyc2UpOgorICAgICAgICAoSlNDOjpBUk02NERp
c2Fzc2VtYmxlcjo6QTY0RE9wY29kZU1vdmVXaWRlOjpmb3JtYXQpOgorICAgICAgICAoSlNDOjpB
Uk02NERpc2Fzc2VtYmxlcjo6QTY0RE9wY29kZU1vdmVXaWRlOjppc1ZhbGlkKToKKyAgICAgICAg
KiBkaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5oOgorICAgICAgICAoSlNDOjpBUk02NERp
c2Fzc2VtYmxlcjo6QTY0RE9wY29kZU1vdmVXaWRlOjpiYXNlRm9ybWF0KToKKyAgICAgICAgKEpT
Qzo6QVJNNjREaXNhc3NlbWJsZXI6OkE2NERPcGNvZGVNb3ZlV2lkZTo6Zm9ybWF0QnVmZmVyKToK
KyAgICAgICAgKiBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
RGlzYXNzZW1ibGVyOjplbnN1cmVMYWJlbE1hcCk6CisgICAgICAgIChKU0M6OnJlZ2lzdGVyTGFi
ZWwpOgorICAgICAgICAoSlNDOjpsYWJlbEZvcik6CisgICAgICAgIChKU0M6OmVuc3VyZVRodW5r
TGFiZWxNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyZWdpc3RlclRodW5rTGFiZWwpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpsYWJlbEZvclRodW5rKTogRGVsZXRlZC4KKyAgICAgICAg
KiBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAg
ICAgKGpzY21haW4pOgorICAgICAgICAqIHJ1bnRpbWUvR2F0ZS5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDUHRyVGFnLmNwcDoKKyAgICAgICAgKEpTQzo6cHRyVGFnTmFtZSk6CisgICAgICAgICog
cnVudGltZS9KU0NQdHJUYWcuaDoKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpPcHRpb25zOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKyAgICAgICAg
KiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAg
ICAgIChKU0M6OlZNOjppc1NjcmF0Y2hCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoK
KyAgICAgICAgKiB0b29scy9JbnRlZ3JpdHkuaDoKKyAgICAgICAgKEpTQzo6SW50ZWdyaXR5Ojpp
c1NhbmVQb2ludGVyKToKKwogMjAyMi0wNS0xNiAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVncmVzc2lvbihyMjY2ODg1KSBDcmFz
aCBzb21ldGltZXMgd2hlbiByZWh5ZHJhdGluZyBpbXBvcnRlZCBhdWRpdCByZXN1bHRzCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NTYsNyArMzc1Niw3IEBAIGludCBy
dW5KU0MoY29uc3QgQ29tbWFuZExpbmUmIG9wdGlvbnMsIGIKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKyNpZiBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJM
WSkKIGV4dGVybiBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRp
b25zSW5TaGVsbCBfX2FzbSgic2VjdGlvbiRzdGFydCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7
CiBleHRlcm4gY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJ
blNoZWxsIF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19qc2Nfb3BzIik7CiAjZW5k
aWYKQEAgLTM3ODMsNiArMzc4MywxMSBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCiAjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKICAgICBKU0M6OkpJVE9w
ZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0
aW9uc0luU2hlbGwsICZlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsKTsKICNlbmRpZgorI2lmIEVO
QUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorICAgIGlmIChVTkxJS0VMWShPcHRpb25z
OjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICBKU0M6OkpJVE9wZXJhdGlvbkxp
c3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0
aW9uc0luU2hlbGwsICZlbmRPZkpJVE9wZXJhdGlvbnNJblNoZWxsKTsKKyNlbmRpZgorCiAgICAg
aW5pdGlhbGl6ZVRpbWVvdXRJZk5lZWRlZCgpOwogCiAjaWYgT1MoREFSV0lOKSB8fCBPUyhMSU5V
WCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRP
cGVyYXRpb25MaXN0LmNwcAkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRpb25MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDE0ICsyNiwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlv
bkxpc3QuaCIKIAorI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIkdhdGUuaCIK
ICNpbmNsdWRlICJKSVRPcGVyYXRpb25WYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiTExJbnREYXRh
LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisjaWYgRU5B
QkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElT
QVNTRU1CTFkpCiAKIExhenlOZXZlckRlc3Ryb3llZDxKSVRPcGVyYXRpb25MaXN0PiBqaXRPcGVy
YXRpb25MaXN0OwogCkBAIC00NSw2ICs0Nyw4IEBAIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6aW5p
dGlhbGl6ZSgpCiAgICAgaml0T3BlcmF0aW9uTGlzdC5jb25zdHJ1Y3QoKTsKIH0KIAorI2lmIEVO
QUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCisKICNpZiBKSVRfT1BFUkFUSU9OX1ZBTElE
QVRJT05fQVNTRVJUX0VOQUJMRUQKIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6YWRkSW52ZXJzZU1h
cCh2b2lkKiB2YWxpZGF0aW9uRW50cnksIHZvaWQqIHBvaW50ZXIpCiB7CkBAIC04NSw5ICs4OSwx
NSBAQCB2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJCiAgICAgc3RkOjpj
YWxsX29uY2Uob25jZUtleSwgW10gewogICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpCiAg
ICAgICAgICAgICBqaXRPcGVyYXRpb25MaXN0LT5hZGRQb2ludGVycygmc3RhcnRPZkpJVE9wZXJh
dGlvbnNJbkpTQywgJmVuZE9mSklUT3BlcmF0aW9uc0luSlNDKTsKKyNpZiBFTkFCTEUoSklUX09Q
RVJBVElPTl9ESVNBU1NFTUJMWSkKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6Om5lZWRE
aXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgICAgICBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFi
ZWxzSW5KYXZhU2NyaXB0Q29yZSgpOworI2VuZGlmCiAgICAgfSk7CiB9CiAKKyNlbmRpZiAvLyBF
TkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorCiBMTElOVF9ERUNMQVJFX1JPVVRJTkVf
VkFMSURBVEUobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpOwogTExJTlRfREVDTEFS
RV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUp
OwogTExJTlRfREVDTEFSRV9ST1VUSU5FX1ZBTElEQVRFKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxs
X2FyaXR5X2NoZWNrKTsKQEAgLTEwNCwzMSArMTE0LDQ1IEBAIExMSU5UX0RFQ0xBUkVfUk9VVElO
RV9WQUxJREFURShjaGVja3BvaW4KIExMSU5UX0RFQ0xBUkVfUk9VVElORV9WQUxJREFURShub3Jt
YWxfb3NyX2V4aXRfdHJhbXBvbGluZSk7CiBMTElOVF9ERUNMQVJFX1JPVVRJTkVfVkFMSURBVEUo
ZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludCk7CiAKLXZvaWQgSklUT3BlcmF0aW9u
TGlzdDo6cG9wdWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmVGb3JMTEludCgpCi17Ci0gICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUtl
eSwgW10geworI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pICYmIEVOQUJMRShK
SVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorI2RlZmluZSBMTElOVF9PUF9FWFRSQVModmFsaWRh
dGVMYWJlbCwgbmFtZVN0cikgYml0d2lzZV9jYXN0PHZvaWQqPih2YWxpZGF0ZUxhYmVsKSwgbmFt
ZVN0cgorI2VsaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKyNkZWZpbmUgTExJ
TlRfT1BfRVhUUkFTKHZhbGlkYXRlTGFiZWwsIG5hbWVTdHIpIGJpdHdpc2VfY2FzdDx2b2lkKj4o
dmFsaWRhdGVMYWJlbCkKKyNlbHNlIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZ
KQorI2RlZmluZSBMTElOVF9PUF9FWFRSQVModmFsaWRhdGVMYWJlbCwgbmFtZVN0cikgbmFtZVN0
cgorI2VuZGlmCiAKICNkZWZpbmUgTExJTlRfUk9VVElORShmdW5jdGlvbk5hbWUpIHsgXAogICAg
ICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPihmdW5jdGlvbk5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KExMSU5UX1JPVVRJTkVfVkFMSURBVEUoZnVuY3Rpb25OYW1lKSkgXAorICAgICAgICBMTElOVF9P
UF9FWFRSQVMoTExJTlRfUk9VVElORV9WQUxJREFURShmdW5jdGlvbk5hbWUpLCAjZnVuY3Rpb25O
YW1lKSBcCiAgICAgfSwKIAogI2RlZmluZSBMTElOVF9PUChuYW1lKSB7IFwKICAgICAgICAgYml0
d2lzZV9jYXN0PHZvaWQqPihMTEludDo6Z2V0Q29kZUZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4obmFtZSkpLCBcCi0gICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJTlRfUkVUVVJOX1ZB
TElEQVRFKG5hbWUpKSBcCisgICAgICAgIExMSU5UX09QX0VYVFJBUyhMTElOVF9SRVRVUk5fVkFM
SURBVEUobmFtZSksICNuYW1lKSBcCiAgICAgfSwgeyBcCiAgICAgICAgIGJpdHdpc2VfY2FzdDx2
b2lkKj4oTExJbnQ6OmdldFdpZGUxNkNvZGVGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KG5h
bWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KExMSU5UX1JFVFVSTl9XSURFMTZf
VkFMSURBVEUobmFtZSkpIFwKKyAgICAgICAgTExJTlRfT1BfRVhUUkFTKExMSU5UX1JFVFVSTl9X
SURFMTZfVkFMSURBVEUobmFtZSksICNuYW1lICIgW3dpZGUxNl0iKSBcCiAgICAgfSwgeyBcCiAg
ICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oTExJbnQ6OmdldFdpZGUzMkNvZGVGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+KG5hbWUpKSwgXAotICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KExMSU5UX1JFVFVSTl9XSURFMzJfVkFMSURBVEUobmFtZSkpIFwKKyAgICAgICAgTExJTlRfT1Bf
RVhUUkFTKExMSU5UX1JFVFVSTl9XSURFMzJfVkFMSURBVEUobmFtZSksICNuYW1lICIgW3dpZGUz
Ml0iKSBcCiAgICAgfSwKIAogI2RlZmluZSBMTElOVF9SRVRVUk5fTE9DQVRJT04obmFtZSwgLi4u
KSBcCiAgICAgTExJTlRfT1AobmFtZSMjX3JldHVybl9sb2NhdGlvbikKIAotICAgICAgICBjb25z
dCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIG9wZXJhdGlvbnNbXSA9IHsKK3N0cnVjdCBMTEludE9w
ZXJhdGlvbnMgeworICAgIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIG9wZXJhdGlvbnM7
CisgICAgc2l6ZV90IG51bWJlck9mT3BlcmF0aW9uczsKK307CisKK3N0YXRpYyBMTEludE9wZXJh
dGlvbnMgbGxpbnRPcGVyYXRpb25zKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSklUT3BlcmF0aW9u
QW5ub3RhdGlvbiogb3BlcmF0aW9ucyA9IG51bGxwdHI7CisgICAgc3RhdGljIHNpemVfdCBudW1i
ZXJPZk9wZXJhdGlvbnMgPSAwOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5Owor
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFsmXSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBK
SVRPcGVyYXRpb25Bbm5vdGF0aW9uIG9wZXJhdGlvbnNTdG9yYWdlW10gPSB7CiAgICAgICAgICAg
ICBMTElOVF9ST1VUSU5FKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKQogICAgICAg
ICAgICAgTExJTlRfUk9VVElORShsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3Vl
KQogICAgICAgICAgICAgTExJTlRfUk9VVElORShsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0
eV9jaGVjaykKQEAgLTE2MCwxNSArMTg0LDM0IEBAIHZvaWQgSklUT3BlcmF0aW9uTGlzdDo6cG9w
dWxhdGVQb2ludGVyc0kKICAgICAgICAgICAgIEpTQ19KU19HQVRFX09QQ09ERVMoTExJTlRfUkVU
VVJOX0xPQ0FUSU9OKQogICAgICAgICAgICAgSlNDX1dBU01fR0FURV9PUENPREVTKExMSU5UX1JF
VFVSTl9MT0NBVElPTikKICAgICAgICAgfTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgp
KQotICAgICAgICAgICAgaml0T3BlcmF0aW9uTGlzdC0+YWRkUG9pbnRlcnMob3BlcmF0aW9ucywg
b3BlcmF0aW9ucyArIFdURl9BUlJBWV9MRU5HVEgob3BlcmF0aW9ucykpOworICAgICAgICBvcGVy
YXRpb25zID0gb3BlcmF0aW9uc1N0b3JhZ2U7CisgICAgICAgIG51bWJlck9mT3BlcmF0aW9ucyA9
IFdURl9BUlJBWV9MRU5HVEgob3BlcmF0aW9uc1N0b3JhZ2UpOworICAgIH0pOworICAgIHJldHVy
biB7IG9wZXJhdGlvbnMsIG51bWJlck9mT3BlcmF0aW9ucyB9OworfQorCiAjdW5kZWYgTExJTlRf
Uk9VVElORQogI3VuZGVmIExMSU5UX09QCiAjdW5kZWYgTExJTlRfUkVUVVJOX0xPQ0FUSU9OCisj
dW5kZWYgTExJTlRfT1BfRVhUUkFTCisKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFU
SU9OKQorCit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3Jp
cHRDb3JlRm9yTExJbnQoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5Owor
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZUpJVCgpKSB7CisgICAgICAgICAgICBhdXRvIGxpc3QgPSBsbGludE9wZXJhdGlvbnMoKTsKKyAg
ICAgICAgICAgIGppdE9wZXJhdGlvbkxpc3QtPmFkZFBvaW50ZXJzKGxpc3Qub3BlcmF0aW9ucywg
bGlzdC5vcGVyYXRpb25zICsgbGlzdC5udW1iZXJPZk9wZXJhdGlvbnMpOworICAgICAgICB9Cisj
aWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCisgICAgICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICAgICAgSklUT3Bl
cmF0aW9uTGlzdDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlwdENvcmVGb3JM
TEludCgpOworI2VuZGlmCiAgICAgfSk7CiB9CiAKLQogdm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpw
b3B1bGF0ZVBvaW50ZXJzSW5FbWJlZGRlcihjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBi
ZWdpbk9wZXJhdGlvbnMsIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGVuZE9wZXJhdGlv
bnMpCiB7CiAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKQpAQCAtMTc3LDQgKzIyMCw1MyBAQCB2
b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlUG9pbnRlcnNJCiAKICNlbmRpZiAvLyBFTkFC
TEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05f
RElTQVNTRU1CTFkpCisKK1NVUFBSRVNTX0FTQU4gdm9pZCBKSVRPcGVyYXRpb25MaXN0OjphZGRE
aXNhc3NlbWJseUxhYmVscyhjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbiwgY29u
c3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogZW5kKQoreworICAgIFJFTEVBU0VfQVNTRVJUKE9w
dGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSk7CisgICAgZm9yIChjb25zdCBhdXRvKiBj
dXJyZW50ID0gYmVnaW47IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpIHsKKyNpZiBFTkFCTEUo
SklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorICAgICAgICBhdXRvKiBvcGVyYXRpb24gPSBjdXJy
ZW50LT5vcGVyYXRpb25XaXRoVmFsaWRhdGlvbjsKKyNlbHNlCisgICAgICAgIGF1dG8qIG9wZXJh
dGlvbiA9IGN1cnJlbnQtPm9wZXJhdGlvbjsKKyNlbmRpZgorICAgICAgICByZWdpc3RlckxhYmVs
KHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uKSwgY3VycmVudC0+bmFtZSk7CisgICAgfQorfQor
Cit2b2lkIEpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFT
Y3JpcHRDb3JlKCkKK3sKKyAgICBBU1NFUlQoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9y
dCgpKTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6OmNhbGxf
b25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAg
ICAgICAgIGFkZERpc2Fzc2VtYmx5TGFiZWxzKCZzdGFydE9mSklUT3BlcmF0aW9uc0luSlNDLCAm
ZW5kT2ZKSVRPcGVyYXRpb25zSW5KU0MpOworICAgIH0pOworfQorCit2b2lkIEpJVE9wZXJhdGlv
bkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlRm9yTExJbnQo
KQoreworICAgIEFTU0VSVChPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpOworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VL
ZXksIFtdIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CisgICAgICAgICAgICBh
dXRvIGxpc3QgPSBsbGludE9wZXJhdGlvbnMoKTsKKyAgICAgICAgICAgIGFkZERpc2Fzc2VtYmx5
TGFiZWxzKGxpc3Qub3BlcmF0aW9ucywgbGlzdC5vcGVyYXRpb25zICsgbGlzdC5udW1iZXJPZk9w
ZXJhdGlvbnMpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgSklUT3BlcmF0aW9uTGlz
dDo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9u
QW5ub3RhdGlvbiogYmVnaW5PcGVyYXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9u
KiBlbmRPcGVyYXRpb25zKQoreworICAgIGlmIChMSUtFTFkoIU9wdGlvbnM6Om5lZWREaXNhc3Nl
bWJseVN1cHBvcnQoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoT3B0aW9uczo6dXNlSklU
KCkpCisgICAgICAgIGFkZERpc2Fzc2VtYmx5TGFiZWxzKGJlZ2luT3BlcmF0aW9ucywgZW5kT3Bl
cmF0aW9ucyk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJM
WSkKKworI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJM
RShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvSklUT3BlcmF0aW9uTGlz
dC5oCShyZXZpc2lvbiAyOTQyODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0pJVE9wZXJhdGlvbkxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDcgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQor
I2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShKSVRfT1BFUkFU
SU9OX0RJU0FTU0VNQkxZKQogCiAvLyBUaGlzIGluZGlyZWN0aW9uIGlzIHByb3ZpZGVkIHNvIHRo
YXQgd2UgY2FuIG1hbnVhbGx5IGZvcmNlIG9uIGFzc2VydGlvbnMgZm9yCiAvLyB0ZXN0aW5nIGV2
ZW4gb24gcmVsZWFzZSBidWlsZHMuCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgSklUT3BlcmF0aW9uTGlzdCYgaW5zdGFuY2UoKTsKICAgICBzdGF0aWMgdm9pZCBpbml0aWFs
aXplKCk7CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFB0clR5cGU+CiAgICAgdm9pZCogbWFwKFB0clR5cGUgcG9pbnRlcikgY29u
c3QKICAgICB7CkBAIC01OCwxMiArNTksMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92
YWxpZGF0ZWRPcGVyYXRpb25zSW52ZXJzZU1hcC5nZXQoYml0d2lzZV9jYXN0PHZvaWQqPihwb2lu
dGVyKSk7CiAgICAgfQogI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKIAogICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlUG9pbnRlcnNJbkphdmFTY3JpcHRD
b3JlKCk7CiAgICAgc3RhdGljIHZvaWQgcG9wdWxhdGVQb2ludGVyc0luSmF2YVNjcmlwdENvcmVG
b3JMTEludCgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcG9wdWxhdGVQ
b2ludGVyc0luRW1iZWRkZXIoY29uc3QgSklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW5PcGVy
YXRpb25zLCBjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBlbmRPcGVyYXRpb25zKTsKIAor
I2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVyKGNvbnN0
IEpJVE9wZXJhdGlvbkFubm90YXRpb24qIGJlZ2luT3BlcmF0aW9ucywgY29uc3QgSklUT3BlcmF0
aW9uQW5ub3RhdGlvbiogZW5kT3BlcmF0aW9ucyk7CisjZW5kaWYKKwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGFzc2VydElzSklUT3BlcmF0aW9uKFQgZnVuY3Rpb24pCiAg
ICAgewogICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb24pOwpAQCAtODEsNiArODcsMTMgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNB
U1NFTUJMWSkKKyAgICBzdGF0aWMgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzSW5KYXZh
U2NyaXB0Q29yZSgpOworICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJ
bkphdmFTY3JpcHRDb3JlRm9yTExJbnQoKTsKKyAgICBzdGF0aWMgdm9pZCBhZGREaXNhc3NlbWJs
eUxhYmVscyhjb25zdCBKSVRPcGVyYXRpb25Bbm5vdGF0aW9uKiBiZWdpbiwgY29uc3QgSklUT3Bl
cmF0aW9uQW5ub3RhdGlvbiogZW5kKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJ
T05fVkFMSURBVElPTikKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkUG9pbnRlcnMoY29uc3Qg
SklUT3BlcmF0aW9uQW5ub3RhdGlvbiogYmVnaW4sIGNvbnN0IEpJVE9wZXJhdGlvbkFubm90YXRp
b24qIGVuZCk7CiAKICNpZiBKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT05fQVNTRVJUX0VOQUJMRUQK
QEAgLTkxLDggKzEwNCwxMSBAQCBwcml2YXRlOgogI2lmIEpJVF9PUEVSQVRJT05fVkFMSURBVElP
Tl9BU1NFUlRfRU5BQkxFRAogICAgIEhhc2hNYXA8dm9pZCosIHZvaWQqPiBtX3ZhbGlkYXRlZE9w
ZXJhdGlvbnNJbnZlcnNlTWFwOwogI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJ
T05fVkFMSURBVElPTikKIH07CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9O
KQorCiBKU19FWFBPUlRfUFJJVkFURSBleHRlcm4gTGF6eU5ldmVyRGVzdHJveWVkPEpJVE9wZXJh
dGlvbkxpc3Q+IGppdE9wZXJhdGlvbkxpc3Q7CiAKIGlubGluZSBKSVRPcGVyYXRpb25MaXN0JiBK
SVRPcGVyYXRpb25MaXN0OjppbnN0YW5jZSgpCkBAIC0xMDIsNiArMTE4LDIyIEBAIGlubGluZSBK
SVRPcGVyYXRpb25MaXN0JiBKSVRPcGVyYXRpb25MaXMKIAogI2Vsc2UgLy8gbm90IEVOQUJMRShK
SVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVRPcGVyYXRp
b25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29yZSgpCit7CisgICAgaWYgKFVO
TElLRUxZKE9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgIHBvcHVs
YXRlRGlzYXNzZW1ibHlMYWJlbHNJbkphdmFTY3JpcHRDb3JlKCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSW5KYXZhU2NyaXB0Q29y
ZUZvckxMSW50KCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5
U3VwcG9ydCgpKSkKKyAgICAgICAgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVsc0luSmF2YVNjcmlw
dENvcmVGb3JMTEludCgpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFM
SURBVElPTikKKworI2Vsc2UgLy8gbm90IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04p
IHx8IEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorCiBjbGFzcyBKSVRPcGVyYXRp
b25MaXN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCkgeyB9CkBAIC0x
MTMsNiArMTQ1LDYgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2
b2lkIGFzc2VydElzSklUT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oVCkgeyB9CiB9OwogCi0jZW5k
aWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKyNlbmRpZiAvLyBFTkFCTEUo
SklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NF
TUJMWSkKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0pJVE9wZXJhdGlvblZhbGlkYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0pJVE9wZXJhdGlvblZhbGlkYXRpb24uaAkocmV2aXNp
b24gMjk0MjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9KSVRPcGVyYXRp
b25WYWxpZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsMTMgKzQ3LDE4IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi0jaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKLQogc3RydWN0
IEpJVE9wZXJhdGlvbkFubm90YXRpb24gewogICAgIHZvaWQqIG9wZXJhdGlvbjsKKyNpZiBFTkFC
TEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogICAgIHZvaWQqIG9wZXJhdGlvbldpdGhWYWxp
ZGF0aW9uOworI2VuZGlmCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCisg
ICAgY29uc3QgY2hhciogbmFtZTsKKyNlbmRpZgogfTsKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFU
SU9OX1ZBTElEQVRJT04pCisKICNpZm5kZWYgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTl9WQUxJ
REFUSU9OCiAjZGVmaW5lIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTihmdW5j
dGlvbk5hbWUpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTMg
KzgyLDE1IEBAIExpbmtCdWZmZXI6OkNvZGVSZWY8TGlua0J1ZmZlclB0clRhZz4gTGkKICAgICAg
ICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IHZzbnByaW50ZihudWxscHRyLCAwLCBmb3JtYXQsIHBy
ZWZsaWdodEFyZ3MpOwogICAgICAgICB2YV9lbmQocHJlZmxpZ2h0QXJncyk7CiAKKyAgICAgICAg
Y29uc3QgY2hhciBwcmVmaXhbXSA9ICJ0aHVuazogIjsKICAgICAgICAgY2hhciogYnVmZmVyID0g
MDsKLSAgICAgICAgQ1N0cmluZyBsYWJlbCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoc3Ry
aW5nTGVuZ3RoICsgMSwgYnVmZmVyKTsKLSAgICAgICAgdnNucHJpbnRmKGJ1ZmZlciwgc3RyaW5n
TGVuZ3RoICsgMSwgZm9ybWF0LCBhcmdMaXN0KTsKLSAgICAgICAgYnVmZmVyW3N0cmluZ0xlbmd0
aF0gPSAnXDAnOworICAgICAgICBzaXplX3QgbGVuZ3RoID0gc3RyaW5nTGVuZ3RoICsgc2l6ZW9m
KHByZWZpeCk7CisgICAgICAgIENTdHJpbmcgbGFiZWwgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxp
emVkKGxlbmd0aCwgYnVmZmVyKTsKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBsZW5ndGgsICIl
cyIsIHByZWZpeCk7CisgICAgICAgIHZzbnByaW50ZihidWZmZXIgKyBzaXplb2YocHJlZml4KSAt
IDEsIHN0cmluZ0xlbmd0aCArIDEsIGZvcm1hdCwgYXJnTGlzdCk7CiAgICAgICAgIG91dC5wcmlu
dGYoIiVzIiwgYnVmZmVyKTsKIAotICAgICAgICByZWdpc3RlclRodW5rTGFiZWwocmVzdWx0LmNv
ZGUoKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCksIFdURk1vdmUobGFiZWwpKTsKKyAgICAg
ICAgcmVnaXN0ZXJMYWJlbChyZXN1bHQuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3Mo
KSwgV1RGTW92ZShsYWJlbCkpOwogICAgIH0gZWxzZQogICAgICAgICBvdXQudnByaW50Zihmb3Jt
YXQsIGFyZ0xpc3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5jcHAJ
KHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC05MDMsNyArOTAzLDcgQEAgc3RhdGljIHZvaWQgcnVuKGNv
bnN0IGNoYXIqKQogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKIAotI2lmIEVOQUJMRShKSVRf
T1BFUkFUSU9OX1ZBTElEQVRJT04pCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElP
TikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpCiBleHRlcm4gY29uc3QgSlND
OjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMgX19h
c20oInNlY3Rpb24kc3RhcnQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0
IEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMyBf
X2FzbSgic2VjdGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogI2VuZGlmCkBAIC05
MzAsNyArOTMwLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICNpZiBFTkFC
TEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogICAgIEpTQzo6SklUT3BlcmF0aW9uTGlzdDo6
cG9wdWxhdGVQb2ludGVyc0luRW1iZWRkZXIoJnN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMs
ICZlbmRPZkpJVE9wZXJhdGlvbnNJblRlc3RCMyk7CiAjZW5kaWYKLSAgICAKKyNpZiBFTkFCTEUo
SklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkKKyAgICBpZiAoVU5MSUtFTFkoSlNDOjpPcHRpb25z
OjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICBKU0M6OkpJVE9wZXJhdGlvbkxp
c3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVtYmVkZGVyKCZzdGFydE9mSklUT3BlcmF0
aW9uc0luVGVzdEIzLCAmZW5kT2ZKSVRPcGVyYXRpb25zSW5UZXN0QjMpOworI2VuZGlmCisKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IDI7ICsraSkgewogICAgICAgICBKU0M6Ok9wdGlv
bnM6OmRlZmF1bHRCM09wdExldmVsKCkgPSBpOwogICAgICAgICBydW4oZmlsdGVyKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxl
ci5jcHAJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3Nl
bWJsZXIvRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgiCisjaW5jbHVkZSA8dmFyaWFudD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTM2LDgg
KzM3LDIzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi11c2luZyBUaHVua0xhYmVsTWFwID0gSGFz
aE1hcDx2b2lkKiwgQ1N0cmluZz47Ci1MYXp5TmV2ZXJEZXN0cm95ZWQ8VGh1bmtMYWJlbE1hcD4g
dGh1bmtMYWJlbE1hcDsKK25hbWVzcGFjZSBEaXNhc3NlbWJsZXIgeworCitMb2NrIGxhYmVsTWFw
TG9jazsKKwordXNpbmcgTGFiZWxNYXAgPSBIYXNoTWFwPHZvaWQqLCBzdGQ6OnZhcmlhbnQ8Q1N0
cmluZywgY29uc3QgY2hhcio+PjsKK0xhenlOZXZlckRlc3Ryb3llZDxMYWJlbE1hcD4gbGFiZWxN
YXA7CisKK3N0YXRpYyBMYWJlbE1hcCYgZW5zdXJlTGFiZWxNYXAoKSBXVEZfUkVRVUlSRVNfTE9D
SyhsYWJlbE1hcExvY2spCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Cisg
ICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAgICAgICBsYWJlbE1hcC5jb25zdHJ1
Y3QoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gbGFiZWxNYXAuZ2V0KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIERpc2Fzc2VtYmxlcgogCiB2b2lkIGRpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxEaXNhc3NlbWJseVB0clRhZz4mIGNvZGVQdHIsIHNpemVfdCBzaXplLCB2b2lk
KiBjb2RlU3RhcnQsIHZvaWQqIGNvZGVFbmQsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJl
YW0mIG91dCkKIHsKQEAgLTE1NywyNyArMTczLDI4IEBAIHZvaWQgd2FpdEZvckFzeW5jaHJvbm91
c0Rpc2Fzc2VtYmx5KCkKICAgICBhc3luY2hyb25vdXNEaXNhc3NlbWJsZXIoKS53YWl0VW50aWxF
bXB0eSgpOwogfQogCi1zdGF0aWMgVGh1bmtMYWJlbE1hcCYgZW5zdXJlVGh1bmtMYWJlbE1hcCgp
Cit2b2lkIHJlZ2lzdGVyTGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3RyaW5nJiYgbGFiZWwp
CiB7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7Ci0gICAgc3RkOjpjYWxsX29u
Y2Uob25jZUtleSwgW10gewotICAgICAgICB0aHVua0xhYmVsTWFwLmNvbnN0cnVjdCgpOwotICAg
IH0pOwotICAgIHJldHVybiB0aHVua0xhYmVsTWFwLmdldCgpOworICAgIExvY2tlciBsb2NrIHsg
RGlzYXNzZW1ibGVyOjpsYWJlbE1hcExvY2sgfTsKKyAgICBEaXNhc3NlbWJsZXI6OmVuc3VyZUxh
YmVsTWFwKCkuYWRkKHRodW5rQWRkcmVzcywgV1RGTW92ZShsYWJlbCkpOwogfQogCi12b2lkIHJl
Z2lzdGVyVGh1bmtMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJpbmcmJiBsYWJlbCkKK3Zv
aWQgcmVnaXN0ZXJMYWJlbCh2b2lkKiBhZGRyZXNzLCBjb25zdCBjaGFyKiBsYWJlbCkKIHsKLSAg
ICBlbnN1cmVUaHVua0xhYmVsTWFwKCkuYWRkKHRodW5rQWRkcmVzcywgV1RGTW92ZShsYWJlbCkp
OworICAgIExvY2tlciBsb2NrIHsgRGlzYXNzZW1ibGVyOjpsYWJlbE1hcExvY2sgfTsKKyAgICBE
aXNhc3NlbWJsZXI6OmVuc3VyZUxhYmVsTWFwKCkuYWRkKGFkZHJlc3MsIGxhYmVsKTsKIH0KIAot
Y29uc3QgY2hhciogbGFiZWxGb3JUaHVuayh2b2lkKiB0aHVua0FkZHJlc3MpCitjb25zdCBjaGFy
KiBsYWJlbEZvcih2b2lkKiB0aHVua0FkZHJlc3MpCiB7Ci0gICAgYXV0byYgbWFwID0gZW5zdXJl
VGh1bmtMYWJlbE1hcCgpOworICAgIExvY2tlciBsb2NrIHsgRGlzYXNzZW1ibGVyOjpsYWJlbE1h
cExvY2sgfTsKKyAgICBhdXRvJiBtYXAgPSBEaXNhc3NlbWJsZXI6OmVuc3VyZUxhYmVsTWFwKCk7
CiAgICAgYXV0byBpdCA9IG1hcC5maW5kKHRodW5rQWRkcmVzcyk7CiAgICAgaWYgKGl0ID09IG1h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGl0LT52YWx1ZS5k
YXRhKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q1N0cmluZz4oaXQtPnZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PENTdHJpbmc+KGl0LT52YWx1ZSkuZGF0YSgpOwor
ICAgIHJldHVybiBzdGQ6OmdldDxjb25zdCBjaGFyKj4oaXQtPnZhbHVlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rp
c2Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3Nl
bWJsZXIvRGlzYXNzZW1ibGVyLmgJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDcgKzYxLDggQEAgdm9pZCBkaXNhc3NlbWJsZUFzeW5jaHJvbm91c2x5KAogCiBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHdhaXRGb3JBc3luY2hyb25vdXNEaXNhc3NlbWJseSgpOwogCi12b2lkIHJl
Z2lzdGVyVGh1bmtMYWJlbCh2b2lkKiB0aHVua0FkZHJlc3MsIENTdHJpbmcmJiBsYWJlbCk7Ci1j
b25zdCBjaGFyKiBsYWJlbEZvclRodW5rKHZvaWQqIHRodW5rQWRkcmVzcyk7Cit2b2lkIHJlZ2lz
dGVyTGFiZWwodm9pZCogdGh1bmtBZGRyZXNzLCBDU3RyaW5nJiYgbGFiZWwpOwordm9pZCByZWdp
c3RlckxhYmVsKHZvaWQqIHRodW5rQWRkcmVzcywgY29uc3QgY2hhciogbGFiZWwpOworY29uc3Qg
Y2hhciogbGFiZWxGb3Iodm9pZCogdGh1bmtBZGRyZXNzKTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
QVJNNjQvQTY0RE9wY29kZS5jcHAJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEwICszMiwxNiBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogI2luY2x1ZGUg
IkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAi
SW50ZWdyaXR5LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkxMSW50UENS
YW5nZXMuaCIKKyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIK
ICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHd0Zi9QdHJUYWcuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZ2UuaD4KIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBBUk02NERpc2Fzc2VtYmxlciB7CiAKQEAgLTIwMSwx
MiArMjA3LDEyIEBAIHZvaWQgQTY0RE9wY29kZTo6YXBwZW5kUENSZWxhdGl2ZU9mZnNldCgKICAg
ICAgICAgdGFyZ2V0SW5mbyA9ICIiOwogICAgIGVsc2UgaWYgKHRhcmdldFBDID49IG1fc3RhcnRQ
QyAmJiB0YXJnZXRQQyA8IG1fZW5kUEMpCiAgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVy
U2l6ZSAtIDEsICIgLT4gPCV1PiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigodGFyZ2V0UEMgLSBt
X3N0YXJ0UEMpICogc2l6ZW9mKHVpbnQzMl90KSkpOwotICAgIGVsc2UgaWYgKGNvbnN0IGNoYXIq
IHRodW5rTGFiZWwgPSBsYWJlbEZvclRodW5rKHRhcmdldFBDKSkKLSAgICAgICAgc25wcmludGYo
YnVmZmVyLCBidWZmZXJTaXplIC0gMSwgIiAtPiA8dGh1bms6ICVzPiIsIHRodW5rTGFiZWwpOwor
ICAgIGVsc2UgaWYgKGNvbnN0IGNoYXIqIGxhYmVsID0gbGFiZWxGb3IodGFyZ2V0UEMpKQorICAg
ICAgICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlclNpemUgLSAxLCAiIC0+ICVzIiwgbGFiZWwpOwog
ICAgIGVsc2UgaWYgKGlzSklUUEModGFyZ2V0UEMpKQotICAgICAgICB0YXJnZXRJbmZvID0gIiAt
PiA8SklUIFBDPiI7CisgICAgICAgIHRhcmdldEluZm8gPSAiIC0+IEpJVCBQQyI7CiAgICAgZWxz
ZSBpZiAoTExJbnQ6OmlzTExJbnRQQyh0YXJnZXRQQykpCi0gICAgICAgIHRhcmdldEluZm8gPSAi
IC0+IDxMTEludCBQQz4iOworICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiBMTEludCBQQyI7CiAg
ICAgZWxzZQogICAgICAgICB0YXJnZXRJbmZvID0gIiAtPiA8dW5rbm93bj4iOwogCkBAIC0xNTcw
LDEyICsxNTc2LDEyNyBAQCBjb25zdCBjaGFyKiBBNjRET3Bjb2RlTG9naWNhbEltbWVkaWF0ZTo6
CiAKIGNvbnN0IGNoYXIqIGNvbnN0IEE2NERPcGNvZGVNb3ZlV2lkZTo6c19vcE5hbWVzWzRdID0g
eyAibW92biIsIDAsICJtb3Z6IiwgIm1vdmsiIH07CiAKLWNvbnN0IGNoYXIqIEE2NERPcGNvZGVN
b3ZlV2lkZTo6Zm9ybWF0KCkKK2NsYXNzIE1vdmVXaWRlRm9ybWF0VHJhaXQgeworcHVibGljOgor
ICAgIHVzaW5nIFJlc3VsdFR5cGUgPSBjb25zdCBjaGFyKjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgcmV0dXJuRWFybHlJZkFjY2VwdGVkID0gZmFsc2U7CisKKyAgICBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBjb25zdCBjaGFyKiByZWplY3RlZFJlc3VsdChBNjRET3Bjb2RlTW92ZVdpZGUqIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlLT5iYXNlRm9ybWF0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5F
IHN0YXRpYyBjb25zdCBjaGFyKiBhY2NlcHRlZFJlc3VsdChBNjRET3Bjb2RlTW92ZVdpZGUqIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlLT5mb3JtYXRCdWZmZXIoKTsgfQorfTsKKworY2xhc3MgTW92
ZVdpZGVJc1ZhbGlkVHJhaXQgeworcHVibGljOgorICAgIHVzaW5nIFJlc3VsdFR5cGUgPSBib29s
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXR1cm5FYXJseUlmQWNjZXB0ZWQgPSB0cnVl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHJlamVjdGVkUmVzdWx0KEE2NERPcGNvZGVN
b3ZlV2lkZSopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGFj
Y2VwdGVkUmVzdWx0KEE2NERPcGNvZGVNb3ZlV2lkZSopIHsgcmV0dXJuIHRydWU7IH0KK307CisK
K2Jvb2wgQTY0RE9wY29kZU1vdmVXaWRlOjpoYW5kbGVQb3RlbnRpYWxEYXRhUG9pbnRlcih2b2lk
KiBwdHIpCit7CisgICAgQVNTRVJUKEludGVncml0eTo6aXNTYW5lUG9pbnRlcihwdHIpKTsKKwor
ICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIFZNSW5zcGVjdG9yOjpmb3JFYWNoVk0oWyZd
IChWTSYgdm0pIHsKKyAgICAgICAgaWYgKHB0ciA9PSAmdm0pIHsKKyAgICAgICAgICAgIGJ1ZmZl
clByaW50ZigiIHZtIik7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IXZtLmlzSW5TZXJ2aWNlKCkpCisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpD
b250aW51ZTsKKworICAgICAgICBhdXRvKiB2bVN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJnZtKTsKKyAgICAgICAgYXV0byogdm1FbmQgPSB2bVN0YXJ0ICsgc2l6ZW9mKFZNKTsK
KyAgICAgICAgYXV0byogdThQdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihwdHIpOwor
ICAgICAgICBSYW5nZSB2bVJhbmdlKHZtU3RhcnQsIHZtRW5kKTsKKyAgICAgICAgaWYgKHZtUmFu
Z2UuY29udGFpbnModThQdHIpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSB1OFB0
ciAtIHZtU3RhcnQ7CisgICAgICAgICAgICBidWZmZXJQcmludGYoIiB2bSArJXUiLCBvZmZzZXQp
OworCisgICAgICAgICAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAg
ICAgICAgICBpZiAocHRyID09ICZ2bS50b3BDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24gPSAidm0udG9wQ2FsbEZyYW1lIjsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNl
dCA9PSBWTTo6dG9wRW50cnlGcmFtZU9mZnNldCgpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0
aW9uID0gInZtLnRvcEVudHJ5RnJhbWUiOworICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0ID09
IFZNOjpleGNlcHRpb25PZmZzZXQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2
bS5tX2V4Y2VwdGlvbiI7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZzZXQgPT0gVk06Om9mZnNl
dE9mSGVhcEJhcnJpZXJUaHJlc2hvbGQoKSkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9
ICJ2bS5oZWFwLm1fYmFycmllclRocmVzaG9sZCI7CisgICAgICAgICAgICBlbHNlIGlmIChvZmZz
ZXQgPT0gVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24gPSAidm0uY2FsbEZyYW1lRm9yQ2F0Y2giOworICAgICAgICAgICAgZWxzZSBpZiAo
cHRyID09IHZtLmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24gPSAidm0ubV9zb2Z0U3RhY2tMaW1pdCI7CisgICAgICAgICAgICBlbHNlIGlmIChw
dHIgPT0gJnZtLm9zckV4aXRJbmRleCkKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJ2
bS5vc3JFeGl0SW5kZXgiOworICAgICAgICAgICAgZWxzZSBpZiAocHRyID09ICZ2bS5vc3JFeGl0
SnVtcERlc3RpbmF0aW9uKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm9zckV4
aXRKdW1wRGVzdGluYXRpb24iOworICAgICAgICAgICAgZWxzZSBpZiAocHRyID09IHZtLnNtYWxs
U3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpCisgICAgICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSAidm0uc21hbGxTdHJpbmdzLm1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncyI7CisgICAg
ICAgICAgICBlbHNlIGlmIChwdHIgPT0gJnZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KQorICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93IjsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHB0ciA9PSB2bS50cmFwcygpLnRyYXBCaXRzQWRkcmVzcygp
KQorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInZtLm1fdHJhcHMubV90cmFwQml0cyI7
CisjaWYgRU5BQkxFKERGR19ET0VTX0dDX1ZBTElEQVRJT04pCisgICAgICAgICAgICBlbHNlIGlm
IChwdHIgPT0gdm0uYWRkcmVzc09mRG9lc0dDKCkpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRp
b24gPSAidm0ubV9kb2VzR0MiOworI2VuZGlmCisgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24p
CisgICAgICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCI6ICVzIiwgZGVzY3JpcHRpb24pOworCisg
ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodm0uaXNTY3JhdGNoQnVmZmVy
KHB0cikpIHsKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIHZtIHNjcmF0Y2hCdWZmZXIubV9i
dWZmZXIiKTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSXRlcmF0
aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKwor
I2lmIENQVShBUk02NEUpCitib29sIEE2NERPcGNvZGVNb3ZlV2lkZTo6aGFuZGxlUG90ZW50aWFs
UHRyVGFnKHVpbnRwdHJfdCB2YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID4gMHhm
ZmZmKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBQdHJUYWcgdGFnID0gc3RhdGljX2Nh
c3Q8UHRyVGFnPih2YWx1ZSk7CisjaWYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCisgICAgY29u
c3QgY2hhciogbmFtZSA9IFdURjo6cHRyVGFnTmFtZSh0YWcpOworICAgIGlmIChuYW1lWzBdID09
ICc8JykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPbmx5IHJlc3VsdCB0aGF0IHN0YXJ0cyB3
aXRoICc8JyBpcyAiPHVua25vd24+Ii4KKyNlbHNlCisgICAgLy8gV2l0aG91dCBFTkFCTEUoUFRS
VEFHX0RFQlVHR0lORyksIG5vdCBhbGwgUHRyVGFncyBhcmUgcmVnaXN0ZXJlZGYgZm9yCisgICAg
Ly8gcHJpbnRpbmcuIFNvLCB3ZSdsbCBqdXN0IGRvIHRoZSBtaW5pbXVtIHdpdGggb25seSB0aGUg
SlNDIHNwZWNpZmljIHRhZ3MuCisgICAgY29uc3QgY2hhciogbmFtZSA9IHB0clRhZ05hbWUodGFn
KTsKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisgICAg
Ly8gQWxzbyBwcmludCAnPycgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGEgbWF5YmUuIFdlIGRv
IG5vdCBrbm93IGZvciBjZXJ0YWluCisgICAgLy8gaWYgdGhlIGNvbnN0YW50IGlzIG1lYW50IHRv
IGJlIHVzZWQgYXMgYSBQdHJUYWcuCisgICAgYnVmZmVyUHJpbnRmKCIgLT4gJXAgJXMgPyIsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKSwgbmFtZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisjZW5kaWYKKwordGVtcGxhdGU8dHlwZW5hbWUgVHJhaXQ+Cit0eXBlbmFtZSBUcmFpdDo6UmVz
dWx0VHlwZSBBNjRET3Bjb2RlTW92ZVdpZGU6OnBhcnNlKCkKIHsKICAgICBpZiAob3BjKCkgPT0g
MSkKLSAgICAgICAgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1hdCgpOworICAgICAgICByZXR1cm4g
VHJhaXQ6OnJlamVjdGVkUmVzdWx0KHRoaXMpOwogICAgIGlmICghaXM2NEJpdCgpICYmIGh3KCkg
Pj0gMikKLSAgICAgICAgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1hdCgpOworICAgICAgICByZXR1
cm4gVHJhaXQ6OnJlamVjdGVkUmVzdWx0KHRoaXMpOworCisgICAgaWYgY29uc3RleHByIChUcmFp
dDo6cmV0dXJuRWFybHlJZkFjY2VwdGVkKQorICAgICAgICByZXR1cm4gVHJhaXQ6OmFjY2VwdGVk
UmVzdWx0KHRoaXMpOwogCiAgICAgaWYgKCFvcGMoKSAmJiAoIWltbWVkaWF0ZTE2KCkgfHwgIWh3
KCkpICYmIChpczY0Qml0KCkgfHwgaW1tZWRpYXRlMTYoKSAhPSAweGZmZmYpKSB7CiAgICAgICAg
IC8vIE1PViBwc2V1ZG8gb3AgZm9yIE1PVk4KQEAgLTE1ODcsMTAgKzE3MDgsMTIgQEAgY29uc3Qg
Y2hhciogQTY0RE9wY29kZU1vdmVXaWRlOjpmb3JtYXQoKQogICAgICAgICAgICAgaW50NjRfdCBh
bW91bnQgPSBpbW1lZGlhdGUxNigpIDw8IChodygpICogMTYpOwogICAgICAgICAgICAgYW1vdW50
ID0gfmFtb3VudDsKICAgICAgICAgICAgIGFwcGVuZFNpZ25lZEltbWVkaWF0ZTY0KGFtb3VudCk7
CisgICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oYW1v
dW50KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGludDMyX3QgYW1vdW50ID0gaW1t
ZWRpYXRlMTYoKSA8PCAoaHcoKSAqIDE2KTsKICAgICAgICAgICAgIGFtb3VudCA9IH5hbW91bnQ7
CiAgICAgICAgICAgICBhcHBlbmRTaWduZWRJbW1lZGlhdGUoYW1vdW50KTsKKyAgICAgICAgICAg
IG1fYnVpbHRDb25zdGFudCA9IHN0YXRpY19jYXN0PGludHB0cl90PihhbW91bnQpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKG9wTmFtZSgp
KTsKQEAgLTE2MDEsMTEgKzE3MjQsNzAgQEAgY29uc3QgY2hhciogQTY0RE9wY29kZU1vdmVXaWRl
Ojpmb3JtYXQoKQogICAgICAgICAgICAgYXBwZW5kU2VwYXJhdG9yKCk7CiAgICAgICAgICAgICBh
cHBlbmRTaGlmdEFtb3VudChodygpKTsKICAgICAgICAgfQotICAgIH0KIAotICAgIHJldHVybiBt
X2Zvcm1hdEJ1ZmZlcjsKKyAgICAgICAgaWYgKG9wYygpID09IDIpIC8vIEVuY29kaW5nIGZvciBt
b3Z6CisgICAgICAgICAgICBtX2J1aWx0Q29uc3RhbnQgPSAwOworCisgICAgICAgIHVuc2lnbmVk
IHNoaWZ0ID0gaHcoKSAqIDE2OworICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSBzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KGltbWVkaWF0ZTE2KCkpIDw8IHNoaWZ0OworICAgICAgICB1aW50cHRyX3Qg
bWFzayA9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigweGZmZmYpIDw8IHNoaWZ0KTsKKyAgICAg
ICAgbV9idWlsdENvbnN0YW50ICY9IG1hc2s7CisgICAgICAgIG1fYnVpbHRDb25zdGFudCB8PSB2
YWx1ZTsKKyAgICB9CisKKyAgICBhdXRvIGR1bXBDb25zdGFudERhdGEgPSBbJl0geworICAgICAg
ICB1aW50MzJfdCogbmV4dFBDID0gbV9jdXJyZW50UEMgKyAxOworICAgICAgICBib29sIGRvbmVC
dWlsZGluZ0NvbnN0YW50ID0gZmFsc2U7CisKKyAgICAgICAgaWYgKG5leHRQQyA+PSBtX2VuZFBD
KQorICAgICAgICAgICAgZG9uZUJ1aWxkaW5nQ29uc3RhbnQgPSB0cnVlOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIEE2NERPcGNvZGUgbmV4dE9wY29kZUJhc2UobV9zdGFydFBDLCBtX2Vu
ZFBDKTsKKyAgICAgICAgICAgIEE2NERPcGNvZGVNb3ZlV2lkZSYgbmV4dE9wY29kZSA9ICpyZWlu
dGVycHJldF9jYXN0PEE2NERPcGNvZGVNb3ZlV2lkZSo+KCZuZXh0T3Bjb2RlQmFzZSk7CisgICAg
ICAgICAgICBuZXh0T3Bjb2RlLnNldFBDQW5kT3Bjb2RlKG5leHRQQywgKm5leHRQQyk7CisKKyAg
ICAgICAgICAgIGJvb2wgbmV4dElzTW92ZVdpZGVHcm91cCA9IG9wY29kZUdyb3VwTnVtYmVyKG1f
b3Bjb2RlKSA9PSBvcGNvZGVHcm91cE51bWJlcigqbmV4dFBDKTsKKworICAgICAgICAgICAgaWYg
KCFuZXh0SXNNb3ZlV2lkZUdyb3VwIHx8ICFuZXh0T3Bjb2RlLmlzVmFsaWQoKSB8fCBuZXh0T3Bj
b2RlLnJkKCkgIT0gcmQoKSkKKyAgICAgICAgICAgICAgICBkb25lQnVpbGRpbmdDb25zdGFudCA9
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkb25lQnVpbGRpbmdDb25zdGFudCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2b2lkKiBwdHIgPSByZW1vdmVDb2RlUHRyVGFn
KGJpdHdpc2VfY2FzdDx2b2lkKj4obV9idWlsdENvbnN0YW50KSk7CisgICAgICAgIGlmICghcHRy
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChJbnRlZ3JpdHk6OmlzU2FuZVBv
aW50ZXIocHRyKSkgeworICAgICAgICAgICAgYnVmZmVyUHJpbnRmKCIgLT4gJXAiLCBwdHIpOwor
ICAgICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIGxhYmVsID0gbGFiZWxGb3IocHRyKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYnVmZmVyUHJpbnRmKCIgJXMiLCBsYWJlbCk7CisgICAgICAgICAg
ICBpZiAoaXNKSVRQQyhwdHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJQcmludGYo
IiBKSVQgUEMiKTsKKyAgICAgICAgICAgIGlmIChMTEludDo6aXNMTEludFBDKHB0cikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclByaW50ZigiIExMSW50IFBDIik7CisgICAgICAgICAg
ICBoYW5kbGVQb3RlbnRpYWxEYXRhUG9pbnRlcihwdHIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgaWYgKGhhbmRsZVBvdGVudGlhbFB0
clRhZyhtX2J1aWx0Q29uc3RhbnQpKQorICAgICAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAg
ICAgIGlmIChtX2J1aWx0Q29uc3RhbnQgPCAweDEwMDAwKQorICAgICAgICAgICAgYnVmZmVyUHJp
bnRmKCIgLT4gJXUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9idWlsdENvbnN0YW50KSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJ1ZmZlclByaW50ZigiIC0+ICVwIiwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4obV9idWlsdENvbnN0YW50KSk7CisgICAgfTsKKworICAgIGlmIChtX3N0
YXJ0UEMpCisgICAgICAgIGR1bXBDb25zdGFudERhdGEoKTsKKworICAgIHJldHVybiBUcmFpdDo6
YWNjZXB0ZWRSZXN1bHQodGhpcyk7CiB9CiAKK2NvbnN0IGNoYXIqIEE2NERPcGNvZGVNb3ZlV2lk
ZTo6Zm9ybWF0KCkgeyByZXR1cm4gcGFyc2U8TW92ZVdpZGVGb3JtYXRUcmFpdD4oKTsgfQorYm9v
bCBBNjRET3Bjb2RlTW92ZVdpZGU6OmlzVmFsaWQoKSB7IHJldHVybiBwYXJzZTxNb3ZlV2lkZUlz
VmFsaWRUcmFpdD4oKTsgfQorCiBjb25zdCBjaGFyKiBBNjRET3Bjb2RlVGVzdEFuZEJyYW5jaElt
bWVkaWF0ZTo6Zm9ybWF0KCkKIHsKICAgICBhcHBlbmRJbnN0cnVjdGlvbk5hbWUob3BCaXQoKSA/
ICJ0Ym56IiA6ICJ0YnoiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvQVJNNjQvQTY0RE9wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kaXNhc3NlbWJsZXIvQVJNNjQvQTY0RE9wY29kZS5oCShyZXZpc2lvbiAyOTQyODEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYnVmZmVy
UHJpbnRmKCJsc2wgIyV1IiwgMTYgKiBhbW91bnQpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IGJ1ZmZlclNpemUgPSA4MTsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBidWZm
ZXJTaXplID0gMTAxOwogCiAgICAgY2hhciBtX2Zvcm1hdEJ1ZmZlcltidWZmZXJTaXplXTsKICAg
ICB1aW50MzJfdCogbV9zdGFydFBDOwpAQCAtMjAyLDYgKzIwMiw3IEBAIHByb3RlY3RlZDoKICAg
ICB1aW50MzJfdCogbV9jdXJyZW50UEM7CiAgICAgdWludDMyX3QgbV9vcGNvZGU7CiAgICAgaW50
IG1fYnVmZmVyT2Zmc2V0OworICAgIHVpbnRwdHJfdCBtX2J1aWx0Q29uc3RhbnQgeyAwIH07CiAK
IHByaXZhdGU6CiAgICAgc3RhdGljIE9wY29kZUdyb3VwKiBvcGNvZGVUYWJsZVszMl07CkBAIC04
NzIsMTEgKzg3MywyNCBAQCBwdWJsaWM6CiAgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQoQTY0RE9w
Y29kZU1vdmVXaWRlLCB0aGlzT2JqKTsKIAogICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworICAg
IGJvb2wgaXNWYWxpZCgpOwogCiAgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gc19v
cE5hbWVzW29wYygpXTsgfQogICAgIHVuc2lnbmVkIG9wYygpIHsgcmV0dXJuIChtX29wY29kZSA+
PiAyOSkgJiAweDM7IH0KICAgICB1bnNpZ25lZCBodygpIHsgcmV0dXJuIChtX29wY29kZSA+PiAy
MSkgJiAweDM7IH0KICAgICB1bnNpZ25lZCBpbW1lZGlhdGUxNigpIHsgcmV0dXJuIChtX29wY29k
ZSA+PiA1KSAmIDB4ZmZmZjsgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRy
YWl0PiB0eXBlbmFtZSBUcmFpdDo6UmVzdWx0VHlwZSBwYXJzZSgpOworICAgIGJvb2wgaGFuZGxl
UG90ZW50aWFsRGF0YVBvaW50ZXIodm9pZCopOworICAgIGJvb2wgaGFuZGxlUG90ZW50aWFsUHRy
VGFnKHVpbnRwdHJfdCk7CisKKyAgICAvLyBUaGVzZSBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBhcmUg
bmVlZGVkIGZvciBNb3ZlV2lkZUZvcm1hdFRyYWl0IG9ubHkuCisgICAgY29uc3QgY2hhciogYmFz
ZUZvcm1hdCgpIHsgcmV0dXJuIEE2NERPcGNvZGU6OmZvcm1hdCgpOyB9CisgICAgY29uc3QgY2hh
ciogZm9ybWF0QnVmZmVyKCkgeyByZXR1cm4gbV9mb3JtYXRCdWZmZXI7IH0KKworICAgIGZyaWVu
ZCBjbGFzcyBNb3ZlV2lkZUZvcm1hdFRyYWl0OworICAgIGZyaWVuZCBjbGFzcyBNb3ZlV2lkZUlz
VmFsaWRUcmFpdDsKIH07CiAKIGNsYXNzIEE2NERPcGNvZGVUZXN0QW5kQnJhbmNoSW1tZWRpYXRl
IDogcHVibGljIEE2NERPcGNvZGUgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dh
dGUuaAkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBDUFUoQVJNNjRFKQorI2lm
IEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShKSVRfT1BFUkFUSU9O
X0RJU0FTU0VNQkxZKSB8fCBDUFUoQVJNNjRFKQogCiAjZGVmaW5lIEpTQ19VVElMSVRZX0dBVEVT
KHYpIFwKICAgICB2KGppdENhZ2VQdHIsIE5vUHRyVGFnKSBcCkBAIC05MSw5ICs5MSwxMiBAQCBl
bnVtIGNsYXNzIEdhdGUgOiB1aW50OF90IHsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVt
YmVyT2ZHYXRlcyA9IChKU0NfVVRJTElUWV9HQVRFUyhKU0NfQ09VTlQpKSArIChKU0NfSlNfR0FU
RV9PUENPREVTKEpTQ19PUENPREVfQ09VTlQpKSArIChKU0NfV0FTTV9HQVRFX09QQ09ERVMoSlND
X09QQ09ERV9DT1VOVCkpOwogI3VuZGVmIEpTQ19DT1VOVAogI3VuZGVmIEpTQ19PUENPREVfQ09V
TlQKLSNlbHNlCisKKyNlbHNlIC8vIG5vdCAoRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElP
TikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpIHx8IENQVShBUk02NEUpKQor
CiAvLyBLZWVwIGl0IG5vbi16ZXJvIHRvIG1ha2UgSlNDQ29uZmlnJ3MgYXJyYXkgbm90IFswXS4K
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZHYXRlcyA9IDE7Ci0jZW5kaWYKIAot
fQorI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShK
SVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKSB8fCBDUFUoQVJNNjRFKQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUHRyVGFnLmNw
cAkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
UHRyVGFnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDggKzM2LDE5IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi0jaWYgQ1BVKEFSTTY0RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCisj
aWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1CTFkpIHx8IChDUFUoQVJNNjRFKSAmJiBF
TkFCTEUoUFRSVEFHX0RFQlVHR0lORykpCiAKK2NvbnN0IGNoYXIqIHB0clRhZ05hbWUoUHRyVGFn
IHRhZykKK3sKKyNkZWZpbmUgUkVUVVJOX1BUUlRBR19OQU1FKF90YWdOYW1lLCBjYWxsZWVUeXBl
LCBjYWxsZXJUeXBlKSBjYXNlIF90YWdOYW1lOiByZXR1cm4gI190YWdOYW1lOworICAgIHN3aXRj
aCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRhZykpIHsKKyAgICAgICAgRk9SX0VBQ0hfSlNDX1BU
UlRBRyhSRVRVUk5fUFRSVEFHX05BTUUpCisgICAgfQorI3VuZGVmIFJFVFVSTl9QVFJUQUdfTkFN
RQorICAgIHJldHVybiBudWxscHRyOyAvLyBNYXRjaGluZyB0YWcgbm90IGZvdW5kLgorfQorCisj
aWYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpCiBzdGF0aWMgY29uc3QgY2hhciogdGFnRm9yUHRy
KGNvbnN0IHZvaWQqIHB0cikKIHsKICNkZWZpbmUgUkVUVVJOX05BTUVfSUZfVEFHX01BVENIRVMo
dGFnLCBjYWxsZWVUeXBlLCBjYWxsZXJUeXBlKSBcCkBAIC01MCwyNCArNjEsMTQgQEAgc3RhdGlj
IGNvbnN0IGNoYXIqIHRhZ0ZvclB0cihjb25zdCB2b2lkKgogICAgIHJldHVybiBudWxscHRyOyAv
LyBNYXRjaGluZyB0YWcgbm90IGZvdW5kLgogfQogCi1zdGF0aWMgY29uc3QgY2hhciogcHRyVGFn
TmFtZShQdHJUYWcgdGFnKQotewotI2RlZmluZSBSRVRVUk5fUFRSVEFHX05BTUUoX3RhZ05hbWUs
IGNhbGxlZVR5cGUsIGNhbGxlclR5cGUpIGNhc2UgX3RhZ05hbWU6IHJldHVybiAjX3RhZ05hbWU7
Ci0gICAgc3dpdGNoIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGFnKSkgewotICAgICAgICBGT1Jf
RUFDSF9KU0NfUFRSVEFHKFJFVFVSTl9QVFJUQUdfTkFNRSkKLSAgICB9Ci0jdW5kZWYgUkVUVVJO
X1BUUlRBR19OQU1FCi0gICAgcmV0dXJuIG51bGxwdHI7IC8vIE1hdGNoaW5nIHRhZyBub3QgZm91
bmQuCi19Ci0KIHZvaWQgaW5pdGlhbGl6ZVB0clRhZ0xvb2t1cCgpCiB7CiAgICAgV1RGOjpQdHJU
YWdMb29rdXAmIGxvb2t1cCA9IGdfanNjQ29uZmlnLnB0clRhZ0xvb2t1cFJlY29yZDsKICAgICBs
b29rdXAuaW5pdGlhbGl6ZSh0YWdGb3JQdHIsIHB0clRhZ05hbWUpOwogICAgIFdURjo6cmVnaXN0
ZXJQdHJUYWdMb29rdXAoJmxvb2t1cCk7CiB9Ci0KLSNlbmRpZiAvLyBDUFUoQVJNNjRFKSAmJiBF
TkFCTEUoUFRSVEFHX0RFQlVHR0lORykKKyNlbmRpZiAvLyBFTkFCTEUoUFRSVEFHX0RFQlVHR0lO
RykKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkgfHwgKENQVShB
Uk02NEUpICYmIEVOQUJMRShQVFJUQUdfREVCVUdHSU5HKSkKIAogI2lmIENQVShBUk02NEUpCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCShyZXZpc2lv
biAyOTQyODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI0OCw2ICsyNDgsMTAgQEAgdm9pZCBpbml0aWFsaXplUHRyVGFn
TG9va3VwKCk7CiBpbmxpbmUgdm9pZCBpbml0aWFsaXplUHRyVGFnTG9va3VwKCkgeyB9CiAjZW5k
aWYKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKSB8fCAoQ1BVKEFSTTY0
RSkgJiYgRU5BQkxFKFBUUlRBR19ERUJVR0dJTkcpKQorY29uc3QgY2hhciogcHRyVGFnTmFtZShQ
dHJUYWcpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwogbmFtZXNwYWNlIFdURiB7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lv
biAyOTQyODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDY1LDEwICs0NjUsMTggQEAgdm9pZCBPcHRpb25zOjpyZWNvbXB1
dGVEZXBlbmRlbnRPcHRpb25zKAogICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHkoKSkK
ICAgICAgICAgT3B0aW9uczo6dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0KCkgPSBmYWxzZTsKICAg
ICAKLSAgICBpZiAoT3B0aW9uczo6bG9nSklUKCkKLSAgICAgICAgfHwgT3B0aW9uczo6ZHVtcERp
c2Fzc2VtYmx5KCkKKyAgICBpZiAoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCkKKyAgICAgICAg
fHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBE
RkdEaXNhc3NlbWJseSgpCiAgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBGVExEaXNhc3NlbWJseSgp
CisgICAgICAgIHx8IE9wdGlvbnM6OmR1bXBSZWdFeHBEaXNhc3NlbWJseSgpCisgICAgICAgIHx8
IE9wdGlvbnM6OmR1bXBXYXNtRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1w
QkJRRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wT01HRGlzYXNzZW1ibHko
KSkKKyAgICAgICAgT3B0aW9uczo6bmVlZERpc2Fzc2VtYmx5U3VwcG9ydCgpID0gdHJ1ZTsKKwor
ICAgIGlmIChPcHRpb25zOjpsb2dKSVQoKQorICAgICAgICB8fCBPcHRpb25zOjpuZWVkRGlzYXNz
ZW1ibHlTdXBwb3J0KCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEJ5dGVjb2RlQXRERkdUaW1l
KCkKICAgICAgICAgfHwgT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKQogICAgICAgICB8
fCBPcHRpb25zOjpkdW1wREZHR3JhcGhBdEVhY2hQaGFzZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyNyw2ICsxMjcsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwog
ICAgIFwKICAgICB2KEJvb2wsIHVzZU9TTG9nLCBmYWxzZSwgTm9ybWFsLCAiTG9nIGRhdGFMb2co
KXMgdG8gb3NfbG9nIGluc3RlYWQgb2Ygc3RkZXJyIikgXAogICAgIC8qIGR1bXBEaXNhc3NlbWJs
eSBpbXBsaWVzIGR1bXBERkdEaXNhc3NlbWJseS4gKi8gXAorICAgIHYoQm9vbCwgbmVlZERpc2Fz
c2VtYmx5U3VwcG9ydCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgZHVt
cERpc2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFsLCAiZHVtcHMgZGlzYXNzZW1ibHkgb2YgYWxsIEpJ
VCBjb21waWxlZCBjb2RlIHVwb24gY29tcGlsYXRpb24iKSBcCiAgICAgdihCb29sLCBhc3luY0Rp
c2Fzc2VtYmx5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBsb2dKSVQs
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwOSw2ICsxNDA5LDE2IEBAIHZvaWQgVk06
OmNsZWFyU2NyYXRjaEJ1ZmZlcnMoKQogICAgICAgICBzY3JhdGNoQnVmZmVyLT5zZXRBY3RpdmVM
ZW5ndGgoMCk7CiB9CiAKK2Jvb2wgVk06OmlzU2NyYXRjaEJ1ZmZlcih2b2lkKiBwdHIpCit7Cisg
ICAgTG9ja2VyIGxvY2tlciB7IG1fc2NyYXRjaEJ1ZmZlckxvY2sgfTsKKyAgICBmb3IgKGF1dG8q
IHNjcmF0Y2hCdWZmZXIgOiBtX3NjcmF0Y2hCdWZmZXJzKSB7CisgICAgICAgIGlmIChzY3JhdGNo
QnVmZmVyLT5kYXRhQnVmZmVyKCkgPT0gcHRyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBWTTo6ZW5zdXJlU2hhZG93Q2hpY2tl
bigpCiB7CiAgICAgaWYgKG1fc2hhZG93Q2hpY2tlbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNjg1LDYgKzY4NSw3IEBAIHB1YmxpYzoKICAg
ICAvLyAtIFlvdSBjYW4gb25seSB3cml0ZSB0byBlbnRyaWVzIGluIHRoZSBTY3JhdGNoQnVmZmVy
IGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXJG
b3JTaXplKHNpemVfdCBzaXplKTsKICAgICB2b2lkIGNsZWFyU2NyYXRjaEJ1ZmZlcnMoKTsKKyAg
ICBib29sIGlzU2NyYXRjaEJ1ZmZlcih2b2lkKik7CiAKICAgICBFbmNvZGVkSlNWYWx1ZSogZXhj
ZXB0aW9uRnV6emluZ0J1ZmZlcihzaXplX3Qgc2l6ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCShyZXZpc2lvbiAyOTQyODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDEz
ICs5NCwxOCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGlzU2FuZVBvaW50ZXIoCiB7CiAj
aWYgQ1BVKEFERFJFU1M2NCkKICAgICB1aW50cHRyX3QgcG9pbnRlckFzSW50ID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4ocG9pbnRlcik7CisjaWYgT1MoREFSV0lOKQorICAgIGNvbnN0ZXhwciB1
aW50cHRyX3Qgb25lQWJvdmU0RyA9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IDMyKTsK
KyAgICBpZiAocG9pbnRlckFzSW50IDwgb25lQWJvdmU0RykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCiAgICAgdWludHB0cl90IGNhbm9uaWNhbFBvaW50ZXJCaXRzID0gcG9pbnRlckFz
SW50IDw8ICg2NCAtIE9TX0NPTlNUQU5UKEVGRkVDVElWRV9BRERSRVNTX1dJRFRIKSk7CiAgICAg
dWludHB0cl90IG5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzID0gcG9pbnRlckFzSW50ID4+IE9TX0NP
TlNUQU5UKEVGRkVDVElWRV9BRERSRVNTX1dJRFRIKTsKICAgICByZXR1cm4gIW5vbkNhbm9uaWNh
bFBvaW50ZXJCaXRzICYmIGNhbm9uaWNhbFBvaW50ZXJCaXRzOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0ocG9pbnRlcik7CiAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKKyNlbmRpZiAvLyBDUFUo
QUREUkVTUzY0KQogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyOTQy
ODEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4
IEBACisyMDIyLTA1LTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgQVJNNjQgZGlzYXNzZW1ibGVyIHN1cHBvcnQgZm9yIHN5bWJvbGljIGR1bXBpbmcgb2Yg
c29tZSB3ZWxsIGtub3duIGNvbnN0YW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI0MDQ0MworCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBT
dXp1a2kuCisKKyAgICAgICAgMS4gQWRkZWQgYSBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NF
TUJMWSkgZmxhZy4KKyAgICAgICAgICAgQ3VycmVudGx5LCB0aGlzIGZlYXR1cmUgcmVsaWVzIG9u
IGFuIFVTRShBUFBMRV9JTlRFUk5BTF9TREspIGZvciBlbnVtZXJhdGluZworICAgICAgICAgICBK
SVQgb3BlcmF0aW9ucyBzaW1pbGFyIHRvIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04p
LiAgSXQgaXMgYWxzbworICAgICAgICAgICByZXN0cmljdGVkIHRvIEVOQUJMRShESVNBU1NFTUJM
RVIpICYmIENQVShBUk02NEUpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtQ2FsbGluZ0NvbnZl
bnRpb25zLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlLmg6CisKIDIwMjItMDUtMTYg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQ29ycmVjdCBl
cnJvbmVvdXMgZ3VhcmQgaW4gUGxhdGZvcm0gZmlsZQpJbmRleDogU291cmNlL1dURi93dGYvUGxh
dGZvcm1DYWxsaW5nQ29udmVudGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUNhbGxpbmdDb252ZW50aW9ucy5oCShyZXZpc2lvbiAyOTQyODEpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybUNhbGxpbmdDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1v
YmlsZSwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTg0LDkgKzg0LDE4IEBACiAj
ZGVmaW5lIEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSklU
X09QRVJBVElPTl9WQUxJREFUSU9OKQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJ
T04pIHx8IEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorCisjaWYgRU5BQkxFKEpJ
VF9PUEVSQVRJT05fVkFMSURBVElPTikgJiYgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElTQVNTRU1C
TFkpCisjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0VYVFJBUyh2YWxpZGF0ZUZ1
bmN0aW9uLCBuYW1lKSAodm9pZCopdmFsaWRhdGVGdW5jdGlvbiwgbmFtZQorI2VsaWYgRU5BQkxF
KEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKyNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVS
QVRJT05fRVhUUkFTKHZhbGlkYXRlRnVuY3Rpb24sIG5hbWUpICh2b2lkKil2YWxpZGF0ZUZ1bmN0
aW9uCisjZWxzZSAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkKKyNkZWZpbmUg
SlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT05fRVhUUkFTKHZhbGlkYXRlRnVuY3Rpb24sIG5hbWUp
IG5hbWUKKyNlbmRpZgorCiAjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX0lOVEVS
TkFMKGZ1bmN0aW9uKSBcCi0gICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3RhdGlv
biBfSklUVGFyZ2V0SURfIyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9uKCJf
X0RBVEFfQ09OU1QsX19qc2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCAodm9pZCopZnVu
Y3Rpb24jI1ZhbGlkYXRlIH07CisgICAgY29uc3RleHByIEpTQzo6SklUT3BlcmF0aW9uQW5ub3Rh
dGlvbiBfSklUVGFyZ2V0SURfIyNmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKCh1c2VkLCBzZWN0aW9u
KCJfX0RBVEFfQ09OU1QsX19qc2Nfb3BzIikpKSA9IHsgKHZvaWQqKWZ1bmN0aW9uLCBKU0NfQU5O
T1RBVEVfSklUX09QRVJBVElPTl9FWFRSQVMoZnVuY3Rpb24jI1ZhbGlkYXRlLCAjZnVuY3Rpb24p
IH07CiAKICNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT04oZnVuY3Rpb24pIFwKICAg
ICBKU0NfREVDTEFSRV9BTkRfREVGSU5FX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTihmdW5jdGlv
bik7IFwKQEAgLTEwMCwxMiArMTA5LDEzIEBACiAgICAgSlNDX0RFQ0xBUkVfQU5EX0RFRklORV9K
SVRfT1BFUkFUSU9OX1JFVFVSTl9WQUxJREFUSU9OKGZ1bmN0aW9uKTsgXAogICAgIEpTQ19BTk5P
VEFURV9KSVRfT1BFUkFUSU9OX0lOVEVSTkFMKGZ1bmN0aW9uKQogCi0jZWxzZQorI2Vsc2UgLy8g
bm90IChFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUoSklUX09QRVJB
VElPTl9ESVNBU1NFTUJMWSkpCisKICNkZWZpbmUgSlNDX0FOTk9UQVRFX0pJVF9PUEVSQVRJT04o
ZnVuY3Rpb24pCiAjZGVmaW5lIEpTQ19BTk5PVEFURV9KSVRfT1BFUkFUSU9OX1BST0JFKGZ1bmN0
aW9uKQogI2RlZmluZSBKU0NfQU5OT1RBVEVfSklUX09QRVJBVElPTl9SRVRVUk4oZnVuY3Rpb24p
Ci0jZW5kaWYKIAorI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8
IEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQogCiAjZGVmaW5lIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTl9XSVRIT1VUX1ZBUklBQkxFKGZ1bmN0aW9uTmFtZSwgcmV0dXJuVHlwZSwg
cGFyYW1ldGVycykgXAogICAgIHJldHVyblR5cGUgSklUX09QRVJBVElPTl9BVFRSSUJVVEVTIGZ1
bmN0aW9uTmFtZSBwYXJhbWV0ZXJzCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgJKHJldmlz
aW9uIDI5NDI4MSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIw
MDkgVG9yY2ggTW9iaWxlLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTg0
OSw2ICs4NDksMTAgQEAKICNkZWZpbmUgRU5BQkxFX0pJVF9PUEVSQVRJT05fVkFMSURBVElPTiAx
CiAjZW5kaWYKIAorI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspICYmIEVOQUJMRShESVNBU1NF
TUJMRVIpICYmIENQVShBUk02NEUpCisjZGVmaW5lIEVOQUJMRV9KSVRfT1BFUkFUSU9OX0RJU0FT
U0VNQkxZIDEKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoRU5BQkxFX0JJTkRJTkdfSU5URUdSSVRZ
KSAmJiAhT1MoV0lORE9XUykKICNkZWZpbmUgRU5BQkxFX0JJTkRJTkdfSU5URUdSSVRZIDEKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjk0MjgxKQorKysgU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjItMDUtMTYgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBBUk02NCBkaXNhc3Nl
bWJsZXIgc3VwcG9ydCBmb3Igc3ltYm9saWMgZHVtcGluZyBvZiBzb21lIHdlbGwga25vd24gY29u
c3RhbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjQwNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICAq
IGJpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBvcHVsYXRlSklUT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpwb3B1bGF0ZURpc2Fz
c2VtYmx5TGFiZWxzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9u
cy5oOgorICAgICAgICAoV2ViQ29yZTo6cG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscyk6CisgICAg
ICAgIChXZWJDb3JlOjpwb3B1bGF0ZUpJVE9wZXJhdGlvbnMpOgorICAgICAgICAqIHRlc3Rpbmcv
anMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmVUZXN0U3VwcG9ydDo6
cG9wdWxhdGVKSVRPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmVUZXN0U3VwcG9ydDo6cG9w
dWxhdGVEaXNhc3NlbWJseUxhYmVscyk6CisgICAgICAgICogdGVzdGluZy9qcy9XZWJDb3JlVGVz
dFN1cHBvcnQuaDoKKyAgICAgICAgKFdlYkNvcmVUZXN0U3VwcG9ydDo6cG9wdWxhdGVEaXNhc3Nl
bWJseUxhYmVscyk6CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQ6OnBvcHVsYXRlSklUT3Bl
cmF0aW9ucyk6CisKIDIwMjItMDUtMTYgIEdhYnJpZWwgTmF2YSBNYXJpbm8gIDxnbmF2YW1hcmlu
b0BhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggaW4gV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1h
bmQ6OnBvc2l0aW9uSW5zaWRlVGV4dE5vZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI5NDI4MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKSVRPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDE3ICszMCwzNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQorI2lmIEVOQUJMRShKSVRf
T1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZ
KQorCiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5vdGF0aW9uIHN0YXJ0T2ZKSVRP
cGVyYXRpb25zSW5XZWJDb3JlIF9fYXNtKCJzZWN0aW9uJHN0YXJ0JF9fREFUQV9DT05TVCRfX2pz
Y19vcHMiKTsKIGV4dGVybiBjb25zdCBKU0M6OkpJVE9wZXJhdGlvbkFubm90YXRpb24gZW5kT2ZK
SVRPcGVyYXRpb25zSW5XZWJDb3JlIF9fYXNtKCJzZWN0aW9uJGVuZCRfX0RBVEFfQ09OU1QkX19q
c2Nfb3BzIik7CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogdm9pZCBw
b3B1bGF0ZUpJVE9wZXJhdGlvbnMoKQogewogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
S2V5OwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKICAgICAgICAgSlNDOjpKSVRP
cGVyYXRpb25MaXN0Ojpwb3B1bGF0ZVBvaW50ZXJzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJh
dGlvbnNJbldlYkNvcmUsICZlbmRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmUpOwogICAgIH0pOwor
I2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorICAgIGlmIChVTkxJS0VMWShK
U0M6Ok9wdGlvbnM6Om5lZWREaXNhc3NlbWJseVN1cHBvcnQoKSkpCisgICAgICAgIHBvcHVsYXRl
RGlzYXNzZW1ibHlMYWJlbHMoKTsKKyNlbmRpZgogfQogI2VuZGlmIC8vIEVOQUJMRShKSVRfT1BF
UkFUSU9OX1ZBTElEQVRJT04pCiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJM
WSkKK3ZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpCit7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUtleSwgW10geworICAg
ICAgICBKU0M6OkpJVE9wZXJhdGlvbkxpc3Q6OnBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHNJbkVt
YmVkZGVyKCZzdGFydE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZSwgJmVuZE9mSklUT3BlcmF0aW9u
c0luV2ViQ29yZSk7CisgICAgfSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEpJVF9PUEVSQVRJT05f
RElTQVNTRU1CTFkpCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9O
KSB8fCBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkKKwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAyOTQyODEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSklUT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTAgKzI3LDIyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVO
QUJMRShKSVRfT1BFUkFUSU9OX0RJU0FTU0VNQkxZKQorCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJ
T05fRElTQVNTRU1CTFkpCitXRUJDT1JFX0VYUE9SVCB2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlM
YWJlbHMoKTsKKyNlbHNlCitpbmxpbmUgdm9pZCBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCkg
eyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pCiBXRUJD
T1JFX0VYUE9SVCB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpOwogI2Vsc2UKLWlubGluZSB2
b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIHsgfQoraW5saW5lIHZvaWQgcG9wdWxhdGVKSVRP
cGVyYXRpb25zKCkgeyBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCk7IH0KICNlbmRpZgogCisj
ZWxzZQoraW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyB9CisjZW5kaWYgLy8g
RU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJT05f
RElTQVNTRU1CTFkpCisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29y
ZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pz
L1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJldmlzaW9uIDI5NDI4MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjQxLDE3ICsyNDEsMzYgQEAgdm9pZCBzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VU
eXBlc0ZvcgogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9O
KQorI2lmIEVOQUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShKSVRfT1BF
UkFUSU9OX0RJU0FTU0VNQkxZKQorCiBleHRlcm4gY29uc3QgSlNDOjpKSVRPcGVyYXRpb25Bbm5v
dGF0aW9uIHN0YXJ0T2ZKSVRPcGVyYXRpb25zSW5XZWJDb3JlVGVzdFN1cHBvcnQgX19hc20oInNl
Y3Rpb24kc3RhcnQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogZXh0ZXJuIGNvbnN0IEpTQzo6
SklUT3BlcmF0aW9uQW5ub3RhdGlvbiBlbmRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3Vw
cG9ydCBfX2FzbSgic2VjdGlvbiRlbmQkX19EQVRBX0NPTlNUJF9fanNjX29wcyIpOwogCisjaWYg
RU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikKKwogdm9pZCBwb3B1bGF0ZUpJVE9wZXJh
dGlvbnMoKQogewogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwogICAgIHN0ZDo6
Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKICAgICAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0Ojpw
b3B1bGF0ZVBvaW50ZXJzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVU
ZXN0U3VwcG9ydCwgJmVuZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0KTsKICAg
ICB9KTsKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkKKyAgICBpZiAoVU5M
SUtFTFkoSlNDOjpPcHRpb25zOjpuZWVkRGlzYXNzZW1ibHlTdXBwb3J0KCkpKQorICAgICAgICBw
b3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCk7CisjZW5kaWYKIH0KICNlbmRpZiAvLyBFTkFCTEUo
SklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogCisjaWYgRU5BQkxFKEpJVF9PUEVSQVRJT05fRElT
QVNTRU1CTFkpCit2b2lkIHBvcHVsYXRlRGlzYXNzZW1ibHlMYWJlbHMoKQoreworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtd
IHsKKyAgICAgICAgSlNDOjpKSVRPcGVyYXRpb25MaXN0Ojpwb3B1bGF0ZURpc2Fzc2VtYmx5TGFi
ZWxzSW5FbWJlZGRlcigmc3RhcnRPZkpJVE9wZXJhdGlvbnNJbldlYkNvcmVUZXN0U3VwcG9ydCwg
JmVuZE9mSklUT3BlcmF0aW9uc0luV2ViQ29yZVRlc3RTdXBwb3J0KTsKKyAgICB9KTsKIH0KKyNl
bmRpZiAvLyBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkKKworI2VuZGlmIC8vIEVO
QUJMRShKSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04pIHx8IEVOQUJMRShKSVRfT1BFUkFUSU9OX0RJ
U0FTU0VNQkxZKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlVGVzdFN1cHBvcnQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuaAkocmV2aXNp
b24gMjk0MjgxKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBv
cnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjcsMTAgKzY3LDIxIEBAIHZvaWQgc2V0dXBO
ZXdseUNyZWF0ZWRTZXJ2aWNlV29ya2VyKHVpbnQKICAgICAKIHZvaWQgc2V0QWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKGNvbnN0IFN0cmluZyYpIFRFU1RfU1VQUE9SVF9F
WFBPUlQ7CiAKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKSB8fCBFTkFCTEUo
SklUX09QRVJBVElPTl9ESVNBU1NFTUJMWSkKKyNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9ESVNB
U1NFTUJMWSkKK3ZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpIFRFU1RfU1VQUE9SVF9F
WFBPUlQ7CisjZWxzZQoraW5saW5lIHZvaWQgcG9wdWxhdGVEaXNhc3NlbWJseUxhYmVscygpIHsg
fQorI2VuZGlmCisKICNpZiBFTkFCTEUoSklUX09QRVJBVElPTl9WQUxJREFUSU9OKQogdm9pZCBw
b3B1bGF0ZUpJVE9wZXJhdGlvbnMoKSBURVNUX1NVUFBPUlRfRVhQT1JUOwogI2Vsc2UKLWlubGlu
ZSB2b2lkIHBvcHVsYXRlSklUT3BlcmF0aW9ucygpIHsgfQoraW5saW5lIHZvaWQgcG9wdWxhdGVK
SVRPcGVyYXRpb25zKCkgeyBwb3B1bGF0ZURpc2Fzc2VtYmx5TGFiZWxzKCk7IH0KICNlbmRpZgog
CisjZWxzZQoraW5saW5lIHZvaWQgcG9wdWxhdGVKSVRPcGVyYXRpb25zKCkgeyB9CisjZW5kaWYg
Ly8gRU5BQkxFKEpJVF9PUEVSQVRJT05fVkFMSURBVElPTikgfHwgRU5BQkxFKEpJVF9PUEVSQVRJ
T05fRElTQVNTRU1CTFkpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVUZXN0U3VwcG9ydAo=
</data>
<flag name="commit-queue"
          id="488600"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>