<?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>237029</bug_id>
          
          <creation_ts>2022-02-22 03:41:10 -0800</creation_ts>
          <short_desc>[WASM-GC] Introduce structs types</short_desc>
          <delta_ts>2022-11-02 17:15:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>247394</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry">dbezhetskov</reporter>
          <assigned_to name="Dmitry">dbezhetskov</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1844626</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry">dbezhetskov</who>
    <bug_when>2022-02-22 03:41:10 -0800</bug_when>
    <thetext>[WASM-GC] WIP: introduce structs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844630</commentid>
    <comment_count>1</comment_count>
      <attachid>452850</attachid>
    <who name="Dmitry">dbezhetskov</who>
    <bug_when>2022-02-22 03:48:16 -0800</bug_when>
    <thetext>Created attachment 452850
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844632</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2022-02-22 03:49:54 -0800</bug_when>
    <thetext>This patch modifies one of the wasm.json files. Please ensure that any changes in one have been mirrored to the other. You can find the wasm.json files at &quot;Source/JavaScriptCore/wasm/wasm.json&quot; and &quot;JSTests/wasm/wasm.json&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846985</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-01 03:42:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/89611482&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847101</commentid>
    <comment_count>4</comment_count>
      <attachid>452850</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2022-03-01 10:53:06 -0800</bug_when>
    <thetext>Comment on attachment 452850
Patch

This approach looks good to me. Not sure if you meant to set r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847330</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry">dbezhetskov</who>
    <bug_when>2022-03-02 02:37:44 -0800</bug_when>
    <thetext>I&apos;ve set the r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850093</commentid>
    <comment_count>6</comment_count>
      <attachid>452850</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2022-03-10 07:53:27 -0800</bug_when>
    <thetext>Comment on attachment 452850
Patch

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

r=me, should we rename the Signature class to something else. I worry that we’re somewhat misusing that term from classical its classical meaning.

&gt; Source/JavaScriptCore/wasm/WasmLimits.h:47
&gt; +constexpr size_t maxStructFieldCount = 1000000;

That’s a huge number, can we handle things that large? Is that the spec limit?

&gt; Source/JavaScriptCore/wasm/WasmSectionParser.cpp:61
&gt; +                return fail(i, &quot;th struct types are not enabled&quot;);

Nit: Maybe “th type failed to parse…”, or does ‘fail’ say what section we are in?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856410</commentid>
    <comment_count>7</comment_count>
      <attachid>456130</attachid>
    <who name="Dmitry">dbezhetskov</who>
    <bug_when>2022-03-30 09:22:19 -0700</bug_when>
    <thetext>Created attachment 456130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1856682</commentid>
    <comment_count>8</comment_count>
    <who name="Dmitry">dbezhetskov</who>
    <bug_when>2022-03-30 21:52:29 -0700</bug_when>
    <thetext>Reduced maxStructFieldCount, it is not a spec limit so imho 10000 is enough.
Also fixed the error message for section parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1857174</commentid>
    <comment_count>9</comment_count>
      <attachid>456328</attachid>
    <who name="Dmitry">dbezhetskov</who>
    <bug_when>2022-03-31 23:57:37 -0700</bug_when>
    <thetext>Created attachment 456328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1857671</commentid>
    <comment_count>10</comment_count>
      <attachid>456503</attachid>
    <who name="Dmitry">dbezhetskov</who>
    <bug_when>2022-04-03 00:45:55 -0700</bug_when>
    <thetext>Created attachment 456503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859193</commentid>
    <comment_count>11</comment_count>
      <attachid>456905</attachid>
    <who name="Dmitry">dbezhetskov</who>
    <bug_when>2022-04-07 04:11:18 -0700</bug_when>
    <thetext>Created attachment 456905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860686</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-12 09:05:03 -0700</bug_when>
    <thetext>Committed r292773 (249557@main): &lt;https://commits.webkit.org/249557@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 456905.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452850</attachid>
            <date>2022-02-22 03:48:16 -0800</date>
            <delta_ts>2022-03-30 09:22:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237029-20220222184814.patch</filename>
            <type>text/plain</type>
            <size>94688</size>
            <attacher name="Dmitry">dbezhetskov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MWE3OGZkNjRkMzEwZjllNTIyOWI2Y2IzYjIwNDgwYzExOTAyMDYyLi44MjU2M2M3MzBlYjMxM2Ey
MzAwNzcyYjU1NjhiM2EwYzhlODQ2ZjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDQgQEAKKzIwMjItMDItMjIgIERtaXRyeSBCZXpoZXRza292ICA8ZGJlemhldHNrb3ZA
aWdhbGlhLmNvbT4KKworICAgICAgICBbV0FTTS1HQ10gV0lQOiBpbnRyb2R1Y2Ugc3RydWN0cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDI5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJ
bnRyb2R1Y2Ugc3RydWN0cyB0eXBlcyB2aWEgZXh0ZW5kaW5nIFNpZ25hdHVyZSBjbGFzcy4KKyAg
ICAgICAgVGhlcmUgaXMgU2lnbmF0dXJlIGNsYXNzIGluIEpTQyBhbHJlYWR5IHRoYXQgc3RvcmVz
IHVuaXF1ZSBpbnN0YW5jZXMKKyAgICAgICAgb2YgZnVuY3Rpb24gc2lnbmF0dXJlcyBhbmQgYWZ0
ZXIgc29tZSBleHBlcmltZW50YXRpb25zIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMzNDQ0KQorICAgICAgICBJIGRlY2lkZWQgdG8gdHJ5IGV4dGVuZGluZyBTaWdu
YXR1cmUgY2xhc3MgdG8gc3RvcmUgc3RydWN0IHNpZ25hdHVyZXMuCisgICAgICAgIEluIHRoYXQg
d2F5IHdlIGNhbiBwcmVzZXJ2ZSBvdXIgY3VycmVudCB3YXNtIHR5cGUgcmVwcmVzZW50YXRpb24g
YW5kCisgICAgICAgIGFsbCBleGlzdGluZyBjb2RlIHRoYXQgd29ya3Mgd2l0aCB0aGF0IHZlcnNp
b24gb2YgdHlwZS4KKyAgICAgICAgSXQgaXMgYWxzbyBhIGdvb2QgdG8gc2hhcmUgdW5pcXVlIHN0
cnVjdCB0eXBlcyBpbiB0aGUgZnV0dXJlIHRvIHNhdmUKKyAgICAgICAgc3BhY2UuIFRoZSBkb3du
c2lkZSBpcyB0aGF0LCBhdCBsZWFzdCBmb3Igbm93LCBTaWduYXR1cmUgY2xhc3Mgc2hvdWxkCisg
ICAgICAgIGhhbmRsZSB0d28gZnVuY3Rpb25hbGl0eSAtIHN0cnVjdHMgYW5kIGZ1bmN0aW9ucywg
YnV0IEkgdGhpbmsgd2UgY2FuCisgICAgICAgIGRvIHNvbWV0aGluZyBsaWtlIHNpZ25hdHVyZS0+
YXNTdHJ1Y3QoKS0+e3N0cnVjdCBmdW5jdGlvbnN9IGFuZCAKKyAgICAgICAgc2lnbmF0dXJlLT5h
c0Z1bmN0aW9uKCktPntmdW5jdGlvbiBmdW5jdGlvbnN9LgorICAgICAgICAKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmJy
YW5jaFRhcmdldFR5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6QWlySVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6
Z2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnNldEdsb2Jh
bCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFj
aGFibGUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Q29udHJvbERhdGEpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6YnJhbmNoVGFyZ2V0
VHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEFyZ3Vt
ZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCk6CisgICAgICAgIChK
U0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAg
ICogd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6V2Fz
bUNhbGxpbmdDb252ZW50aW9uOjpjYWxsSW5mb3JtYXRpb25Gb3IgY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKU0NhbGxpbmdDb252ZW50aW9uOjpjYWxsSW5mb3JtYXRpb25Gb3IgY29uc3Qp
OgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+
OjpwYXJzZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250
ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAqIHdhc20vV2FzbUds
b2JhbC5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okdsb2JhbDo6c2V0KToKKyAgICAgICAgKiB3
YXNtL1dhc21HbG9iYWwuaDoKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6YnJhbmNo
VGFyZ2V0VHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpj
YWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVy
YXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2Vu
ZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUpOgorICAgICAgICAqIHdhc20vV2FzbUxpbWl0
cy5oOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmg6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjp0eXBlQ291bnQgY29uc3QpOgorICAgICAgICAq
IHdhc20vV2FzbVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vzc1R5
cGU+OjpwYXJzZUJsb2NrU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyPFN1
Y2Nlc3NUeXBlPjo6cGFyc2VIZWFwVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxT
dWNjZXNzVHlwZT46OnBhcnNlVmFsdWVUeXBlKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9u
UGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VUeXBl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUluaXRFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
U2VjdGlvblBhcnNlcjo6cGFyc2VGdW5jdGlvblR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpT
ZWN0aW9uUGFyc2VyOjpwYXJzZVN0cnVjdFR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0
aW9uUGFyc2VyOjpwYXJzZUdsb2JhbFR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9u
UGFyc2VyOjpwYXJzZUV4Y2VwdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlvblBhcnNl
ci5oOgorICAgICAgICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6CisgICAgICAgIChKU0M6Oldh
c206OlNpZ25hdHVyZTo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVG
dW5jU2lnbmF0dXJlSGFzaCk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVTdHJ1Y3RTaWdu
YXR1cmVIYXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpoYXNoIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjp0cnlDcmVhdGVGdW5jU2lnbmF0dXJlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjp0cnlDcmVhdGVTdHJ1Y3RTaWduYXR1cmUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6U2lnbmF0dXJlSW5m
b3JtYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcmFtZXRlclR5cGVzOjpo
YXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJhbWV0ZXJUeXBlczo6ZXF1YWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcmFtZXRlclR5cGVzOjp0cmFuc2xhdGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJ1Y3RQYXJhbWV0ZXJUeXBlczo6aGFzaCk6CisgICAg
ICAgIChKU0M6Oldhc206OlN0cnVjdFBhcmFtZXRlclR5cGVzOjplcXVhbCk6CisgICAgICAgIChK
U0M6Oldhc206OlN0cnVjdFBhcmFtZXRlclR5cGVzOjp0cmFuc2xhdGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6dHlwZVNpZ25hdHVyZUZvckZ1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OnR5cGVTaWduYXR1cmVG
b3JTdHJ1Y3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpjb21wdXRlSGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6dHJ5Q3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGFyYW1ldGVyVHlwZXM6Omhhc2gpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXYXNtOjpQYXJhbWV0ZXJUeXBlczo6ZXF1YWwpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXYXNtOjpQYXJhbWV0ZXJUeXBlczo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUZvcik6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9XYXNtU2lnbmF0dXJlLmg6CisgICAgICAgIChKU0M6Oldhc206OlN0cnVj
dEZpZWxkOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RydWN0Rmll
bGQ6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmU6OlNp
Z25hdHVyZSk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6c3RvcmFnZUZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpzdG9yYWdlRnVuY3Rpb24gY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmU6OmFsbG9jYXRlZEZ1bmNTaXplKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpzdG9yYWdlU3RydWN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U2lnbmF0dXJlOjpzdG9yYWdlU3RydWN0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6U2lnbmF0dXJlOjphbGxvY2F0ZWRTdHJ1Y3RTaXplKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2lnbmF0dXJlOjppc0Z1bmNTaWduYXR1cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTaWduYXR1cmU6OnJldHVybkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2ln
bmF0dXJlOjphcmd1bWVudENvdW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0
dXJlOjphcmd1bWVudFR5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmU6
OmlzU3RydWN0U2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJl
OjpmaWVsZENvdW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpmaWVs
ZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6Z2V0UmV0dXJuVHlwZSk6
CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6Z2V0QXJndW1lbnRUeXBlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpnZXRGaWVsZCk6CisgICAgICAgIChKU0M6Oldhc206
OlNpZ25hdHVyZTo6c3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlNpZ25h
dHVyZTo6c3RvcmFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlNpZ25h
dHVyZTo6YWxsb2NhdGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OlNpZ25h
dHVyZTo6YXJndW1lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpTaWdu
YXR1cmU6OmdldEFyZ3VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21UYWcuaDoK
KyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3Jl
YXRlSlNUb1dhc21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNl
cHRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjp2aXNpdENo
aWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlFeGNlcHRpb246OmdldEFy
ZyBjb25zdCk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUdsb2JhbDo6dHlwZSk6CisgICAgICAgICogd2FzbS9q
cy9XYXNtVG9KUy5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ondhc21Ub0pTKToKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRT
bG93KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdh
c20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5p
dGlhbGl6ZUltcG9ydHMpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
aW5pdGlhbGl6ZUV4cG9ydHMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWdDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6Cisg
ICAgICAgICogd2FzbS93YXNtLmpzb246CisKIDIwMjItMDItMTkgIENvbW1pdCBRdWV1ZSAgPGNv
bW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyBy
MjkwMTk0IGFuZCByMjkwMjEwLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgKaW5kZXggODI1YTJiNjQ4N2ViZGRkMjU1MjVlMjZjNDA4NDNhMDUyYTcwNjAyYi4u
YjRhNTUyY2Y3YzEzZmU0N2QxYmI5NzJhOTZiYzcwMDFjZDQ1YTFjZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC01NDksNiArNTQ5LDcgQEAgYm9v
bCBjYW5Vc2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZVRlbXBvcmFs
LCBmYWxzZSwgTm9ybWFsLCAiRXhwb3NlIHRoZSBUZW1wb3JhbCBvYmplY3QuIikgXAogICAgIHYo
Qm9vbCwgdXNlV2ViQXNzZW1ibHlUaHJlYWRpbmcsIHRydWUsIE5vcm1hbCwgIkFsbG93IGluc3Ry
dWN0aW9ucyBmcm9tIHRoZSB3YXNtIHRocmVhZGluZyBzcGVjLiIpIFwKICAgICB2KEJvb2wsIHVz
ZVdlYkFzc2VtYmx5VHlwZWRGdW5jdGlvblJlZmVyZW5jZXMsIGZhbHNlLCBOb3JtYWwsICJBbGxv
dyBmdW5jdGlvbiB0eXBlcyBmcm9tIHRoZSB3YXNtIHR5cGVkIGZ1bmN0aW9uIHJlZmVyZW5jZXMg
c3BlYy4iKSBcCisgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseUdDLCBmYWxzZSwgTm9ybWFsLCAi
QWxsb3cgZ2MgdHlwZXMgZnJvbSB0aGUgd2FzbSBnYyBwcm9wb3NhbC4iKSBcCiAgICAgdihCb29s
LCB1c2VXZWJBc3NlbWJseUV4Y2VwdGlvbnMsIHRydWUsIE5vcm1hbCwgIkFsbG93IHRoZSBuZXcg
c2VjdGlvbiBhbmQgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHdhc20gZXhjZXB0aW9uIGhhbmRsaW5n
IHNwZWMuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlCcmFuY2hIaW50cywgdHJ1ZSwg
Tm9ybWFsLCAiQWxsb3cgdGhlIG5ldyBzZWN0aW9uIGZyb20gdGhlIHdhc20gYnJhbmNoIGhpbnRp
bmcgc3BlYy4iKSBcCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWly
SVJHZW5lcmF0b3IuY3BwCmluZGV4IDk4ZWRiMWVkYmVmYmU2MTcxZGRlZTcxOGM4ZjcwMjQ0Y2Jh
NDczODAuLjUwYmY5N2M1NWRjOWE4ZTU5M2IxY2MzYjM5MzJjZTg1ZjBjZDIwYjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApAQCAt
MjI5LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGkg
PCBicmFuY2hUYXJnZXRBcml0eSgpKTsKICAgICAgICAgICAgIGlmIChibG9ja1R5cGUoKSA9PSBC
bG9ja1R5cGU6Okxvb3ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGUtPmFyZ3Vt
ZW50KGkpOworICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5hcmd1bWVudFR5cGUo
aSk7CiAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS0+cmV0dXJuVHlwZShpKTsKICAgICAg
ICAgfQogCkBAIC0xMDQxLDcgKzEwNDEsNyBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0
b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHBybwogICAg
IEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKICAgICBtX2xvY2Fscy5ncm93KHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFy
Z3VtZW50KGkpOworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkp
OwogICAgICAgICBtX2xvY2Fsc1tpXSA9IHRtcEZvclR5cGUodHlwZSk7CiAgICAgfQogCkBAIC0x
MDUwLDcgKzEwNTAsNyBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHBybwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB3YXNtQ2FsbEluZm8ucGFyYW1zLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IEIzOjpWYWx1ZVJlcCBsb2NhdGlvbiA9IHdhc21DYWxsSW5mby5wYXJhbXNbaV07CiAgICAgICAg
IEFyZyBhcmcgPSBsb2NhdGlvbi5pc1JlZygpID8gQXJnKFRtcChsb2NhdGlvbi5yZWcoKSkpIDog
QXJnOjphZGRyKFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksIGxvY2F0aW9uLm9mZnNl
dEZyb21GUCgpKTsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkua2luZCkg
eworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSkua2luZCkgewogICAg
ICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6CiAgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCBhcmcs
IG1fbG9jYWxzW2ldKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTYyNCw3ICsxNjI0LDcgQEAg
YXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9u
VHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWEKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBj
YXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6Ci0gICAg
ICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6
TXV0YWJpbGl0eTo6TXV0YWJsZSk7CisgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9
PSBXYXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKICAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFk
ZHJGb3JtKG9mZnNldCwgQjM6OldpZHRoNjQpKQogICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFy
Zzo6YWRkcih0ZW1wLCBvZmZzZXQpLCB0ZW1wKTsKICAgICAgICAgZWxzZSB7CkBAIC0xNjY0LDcg
KzE2NjQsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgs
IEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUgogICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllckZvckpTV3JhcHBlcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc206Okds
b2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6Ci0gICAgICAgIEFTU0VSVChn
bG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6
TXV0YWJsZSk7CisgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpNdXRh
YmlsaXR5OjpNdXRhYmxlKTsKICAgICAgICAgaWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNl
dCwgQjM6OldpZHRoNjQpKQogICAgICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcih0ZW1w
LCBvZmZzZXQpLCB0ZW1wKTsKICAgICAgICAgZWxzZSB7CkBAIC0zMjQ5LDcgKzMyNDksNyBAQCBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdAogewogICAgIFRtcCBidWZmZXIgPSBlbWl0Q2F0Y2hJbXBs
KENhdGNoS2luZDo6Q2F0Y2gsIGRhdGEsIGV4Y2VwdGlvbkluZGV4KTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAg
IFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgVHlwZSB0eXBlID0g
c2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKTsKICAgICAgICAgVHlwZWRUbXAgdG1wID0gdG1wRm9y
VHlwZSh0eXBlKTsKICAgICAgICAgZW1pdExvYWQoYnVmZmVyLCBpICogc2l6ZW9mKHVpbnQ2NF90
KSwgdG1wKTsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQodG1wKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCA1NzBkZjM2ZmIyNDlh
ZjkzZWUwOWU0NTVlZGNlZDAxMDUwMzlmZjliLi4yZjBiZTgwNjgxZDdkNmNhOGExZjk1Mjk2Nzc4
ZDk4OTBjNDZlMWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogCiAgICAgICAgICAg
ICBpZiAodHlwZSA9PSBCbG9ja1R5cGU6Okxvb3ApIHsKICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAg
ICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUo
c2lnbmF0dXJlLT5hcmd1bWVudChpKSksIG9yaWdpbikpOworICAgICAgICAgICAgICAgICAgICBw
aGlzLmFwcGVuZChwcm9jLmFkZDxWYWx1ZT4oUGhpLCB0b0IzVHlwZShzaWduYXR1cmUtPmFyZ3Vt
ZW50VHlwZShpKSksIG9yaWdpbikpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyAr
K2kpCiAgICAgICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRkPFZhbHVlPihQaGks
IHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSksIG9yaWdpbikpOwpAQCAtMjIyLDcg
KzIyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGkgPCBicmFu
Y2hUYXJnZXRBcml0eSgpKTsKICAgICAgICAgICAgIGlmIChibG9ja1R5cGUoKSA9PSBCbG9ja1R5
cGU6Okxvb3ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudChp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50VHlwZShpKTsK
ICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+cmV0dXJuVHlwZShpKTsKICAgICAgICAg
fQogCkBAIC05MDksNyArOTA5LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMo
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBDYWxsSW5m
b3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9y
bWF0aW9uRm9yKHNpZ25hdHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAgICBC
Mzo6VHlwZSB0eXBlID0gdG9CM1R5cGUoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKTsKKyAgICAgICAg
QjM6OlR5cGUgdHlwZSA9IHRvQjNUeXBlKHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSkpOwogICAg
ICAgICBCMzo6VmFsdWUqIGFyZ3VtZW50OwogICAgICAgICBhdXRvIHJlcCA9IHdhc21DYWxsSW5m
by5wYXJhbXNbaV07CiAgICAgICAgIGlmIChyZXAuaXNSZWcoKSkgewpAQCAtMTMwMyw3ICsxMzAz
LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWwKICAgICAgICAgcmVzdWx0ID0gcHVzaChtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBl
KGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8aW50MzJfdD4o
aW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdh
c206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsKLSAgICAgICAg
QVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRh
YmlsaXR5OjpNdXRhYmxlKTsKKyAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdh
c206Ok11dGFiaWxpdHk6Ok11dGFibGUpOwogICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0
LCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVv
ZihSZWdpc3RlcikpKTsKICAgICAgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwg
b3JpZ2luKCksIHBvaW50ZXIpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMzI0LDcgKzEzMjQsNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZQogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllckZv
ckpTV3JhcHBlcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9y
bWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsKLSAgICAgICAgQVNTRVJUKGdsb2JhbC5t
dXRhYmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxl
KTsKKyAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Ok11dGFiaWxpdHk6
Ok11dGFibGUpOwogICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgZ2xv
YmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKTsK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBT
dG9yZSwgb3JpZ2luKCksIGdldCh2YWx1ZSksIHBvaW50ZXIpOwogICAgICAgICAvLyBXZSBlbWl0
IGEgd3JpdGUtYmFycmllciBvbnRvIEpTV2ViQXNzZW1ibHlHbG9iYWwsIG5vdCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuCkBAIC0yNTY5LDcgKzI1NjksNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0
dQogICAgIFZhbHVlKiBvcGVyYXRpb25SZXN1bHQgPSBlbWl0Q2F0Y2hJbXBsKENhdGNoS2luZDo6
Q2F0Y2gsIGRhdGEsIGV4Y2VwdGlvbkluZGV4KTsKICAgICBWYWx1ZSogcGF5bG9hZCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBwb2lu
dGVyVHlwZSgpLCBvcGVyYXRpb25SZXN1bHQsIDEpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgVHlwZSB0eXBl
ID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUu
YXJndW1lbnRUeXBlKGkpOwogICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKHR5cGUpLCBvcmln
aW4oKSwgcGF5bG9hZCwgaSAqIHNpemVvZih1aW50NjRfdCkpOwogICAgICAgICByZXN1bHRzLmFw
cGVuZChwdXNoKHZhbHVlKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAppbmRleCA1OTFlZWIyN2IwMTY5MDA3YWZhMTgz
ZDQzMjcyOWZhMGNhNTZhZDgxLi42YWI1NDVjMjJiYTEzN2M5MGQxMDkwZjZmNGRhZTAzMTgzYjIx
MDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaApAQCAtMTMyLDggKzEzMiw4IEBAIHB1YmxpYzoKIAogICAgICAgICBWZWN0b3I8
QXJndW1lbnRMb2NhdGlvbj4gcGFyYW1zKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsr
aSkgewotICAgICAgICAgICAgYXJndW1lbnRzSW5jbHVkZUk2NCB8PSBzaWduYXR1cmUuYXJndW1l
bnQoaSkuaXNJNjQoKTsKLSAgICAgICAgICAgIHBhcmFtc1tpXSA9IG1hcnNoYWxsTG9jYXRpb24o
cm9sZSwgc2lnbmF0dXJlLmFyZ3VtZW50KGkpLCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRD
b3VudCwgYXJnU3RhY2tPZmZzZXQpOworICAgICAgICAgICAgYXJndW1lbnRzSW5jbHVkZUk2NCB8
PSBzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLmlzSTY0KCk7CisgICAgICAgICAgICBwYXJhbXNb
aV0gPSBtYXJzaGFsbExvY2F0aW9uKHJvbGUsIHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSksIGdw
QXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBhcmdTdGFja09mZnNldCk7CiAgICAgICAg
IH0KICAgICAgICAgZ3BBcmd1bWVudENvdW50ID0gMDsKICAgICAgICAgZnBBcmd1bWVudENvdW50
ID0gMDsKQEAgLTIyMCw3ICsyMjAsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgVmVjdG9yPEFyZ3Vt
ZW50TG9jYXRpb24+IHBhcmFtczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKG1h
cnNoYWxsTG9jYXRpb24ocm9sZSwgc2lnbmF0dXJlLmFyZ3VtZW50KGkpLCBncEFyZ3VtZW50Q291
bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpKTsKKyAgICAgICAgICAgIHBhcmFtcy5h
cHBlbmQobWFyc2hhbGxMb2NhdGlvbihyb2xlLCBzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLCBn
cEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpKTsKIAogICAgICAg
ICBWZWN0b3I8QXJndW1lbnRMb2NhdGlvbiwgMT4gcmVzdWx0cyB7IEFyZ3VtZW50TG9jYXRpb246
OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikgfTsKICAgICAgICAgcmV0dXJuIENhbGxJbmZv
cm1hdGlvbihXVEZNb3ZlKHBhcmFtcyksIFdURk1vdmUocmVzdWx0cyksIHN0YWNrT2Zmc2V0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAppbmRleCBjNzllMzM3YzdhN2Fj
ZDEyODIwYzJlNjk0MDM0NGZmNGJkZDEwYTllLi4yMGU3ZGYxYTg4NDAzNzljM2FmMWU0YTFjYWY0
ZGU1ZTg2NGU5MWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBA
IC0yMzgsMTEgKzIzOCw2IEBAIFN0cmluZyBtYWtlU3RyaW5nKGNvbnN0IE5hbWUmIGNoYXJhY3Rl
cnMpOwogCiBzdHJ1Y3QgR2xvYmFsSW5mb3JtYXRpb24gewogICAgIFdURl9NQUtFX1NUUlVDVF9G
QVNUX0FMTE9DQVRFRDsKLSAgICBlbnVtIE11dGFiaWxpdHkgOiB1aW50OF90IHsKLSAgICAgICAg
Ly8gRklYTUUgYXV0by1nZW5lcmF0ZSB0aGlzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1MjMxCi0gICAgICAgIE11dGFibGUgPSAxLAotICAgICAgICBJbW11dGFi
bGUgPSAwCi0gICAgfTsKIAogICAgIGVudW0gSW5pdGlhbGl6YXRpb25UeXBlIDogdWludDhfdCB7
CiAgICAgICAgIElzSW1wb3J0LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RnVuY3Rpb25QYXJzZXIuaAppbmRleCA5YmY5NjYzYzhhMzVmZTc5MGZjYzRiZTFiZWQxZjc0NWRh
MDE1Mzc0Li5mNTJjMzFjOTY1OGVlMGFmMWNkNTYyZWYwMTkyZDEwNDkwMmU1ZDdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtMjQ3
LDcgKzI0Nyw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKCkgLT4gUmVz
dWx0CiAKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNp
dHkobV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yIGZ1bmN0aW9uJ3MgIiwgbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFy
Z3VtZW50cyIpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX3NpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKG1fc2ln
bmF0dXJlLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgbV9sb2NhbHMudW5jaGVja2VkQXBwZW5kKG1f
c2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKSk7CiAKICAgICB1aW50NjRfdCB0b3RhbE51bWJlck9m
TG9jYWxzID0gbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOwogICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBsb2NhbEdyb3Vwc0NvdW50OyArK2kpIHsKQEAgLTEwODIsNyArMTA4Miw3IEBA
IEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICAgICAg
aW50MzJfdCBoZWFwVHlwZTsKICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
SGVhcFR5cGUobV9pbmZvLCBoZWFwVHlwZSksICJyZWYubnVsbCBoZWFwdHlwZSBtdXN0IGJlIGZ1
bmNyZWYsIGV4dGVybnJlZiBvciB0eXBlX2lkeCIpOwogICAgICAgICAgICAgaWYgKGlzVHlwZUlu
ZGV4SGVhcFR5cGUoaGVhcFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby51c2VkU2ln
bmF0dXJlc1toZWFwVHlwZV0uZ2V0KCkpOworICAgICAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8udHlwZVNp
Z25hdHVyZXNbaGVhcFR5cGVdLmdldCgpKTsKICAgICAgICAgICAgICAgICB0eXBlT2ZOdWxsID0g
VHlwZSB7IFR5cGVLaW5kOjpSZWZOdWxsLCBOdWxsYWJsZTo6WWVzLCBzaWduYXR1cmVJbmRleCB9
OwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUg
eyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6Olllcywgc3RhdGljX2Nhc3Q8U2lnbmF0dXJl
SW5kZXg+KGhlYXBUeXBlKSB9OwpAQCAtMTE3NSw3ICsxMTc1LDcgQEAgRk9SX0VBQ0hfV0FTTV9N
RU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiB2YWx1
ZTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyh2YWx1ZSwgInNl
dF9nbG9iYWwgdmFsdWUiKTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihpbmRleCA+
PSBtX2luZm8uZ2xvYmFscy5zaXplKCksICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIG9mIHVua25v
d24gZ2xvYmFsLCBsaW1pdCBpcyAiLCBtX2luZm8uZ2xvYmFscy5zaXplKCkpOwotICAgICAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1faW5mby5nbG9iYWxzW2luZGV4XS5tdXRhYmlsaXR5ID09
IEdsb2JhbEluZm9ybWF0aW9uOjpJbW11dGFibGUsICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIGlz
IGltbXV0YWJsZSIpOworICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1faW5mby5nbG9i
YWxzW2luZGV4XS5tdXRhYmlsaXR5ID09IE11dGFiaWxpdHk6OkltbXV0YWJsZSwgInNldF9nbG9i
YWwgIiwgaW5kZXgsICIgaXMgaW1tdXRhYmxlIik7CiAKICAgICAgICAgVHlwZSBnbG9iYWxUeXBl
ID0gbV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGU7CiAgICAgICAgIEFTU0VSVChpc1ZhbHVlVHlw
ZShnbG9iYWxUeXBlKSk7CkBAIC0xMTk4LDcgKzExOTgsNyBAQCBGT1JfRUFDSF9XQVNNX01FTU9S
WV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJn
cy50cnlSZXNlcnZlQ2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBjYWxsJ3MgIiwgY2FsbGVlU2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gYXJnID0gbV9leHByZXNzaW9uU3RhY2suYXQo
aSk7Ci0gICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoYXJnLnR5
cGUoKSwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpKSwg
ImFyZ3VtZW50IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbCwgZ290ICIsIGFyZy50eXBlKCkua2luZCwg
IiwgZXhwZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50
SW5kZXgpLmtpbmQpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0
eXBlKGFyZy50eXBlKCksIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSAtIGZpcnN0QXJn
dW1lbnRJbmRleCkpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJn
LnR5cGUoKS5raW5kLCAiLCBleHBlY3RlZCAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRUeXBl
KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpLmtpbmQpOwogICAgICAgICAgICAgYXJncy51bmNoZWNr
ZWRBcHBlbmQoYXJnKTsKICAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21TdGFj
aygpOwogICAgICAgICB9CkBAIC0xMjI0LDEwICsxMjI0LDEwIEBAIEZPUl9FQUNIX1dBU01fTUVN
T1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhclVJbnQzMihzaWduYXR1cmVJbmRleCksICJjYW4ndCBnZXQgY2FsbF9pbmRpcmVjdCdz
IHNpZ25hdHVyZSBpbmRleCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZh
clVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0IGdldCBjYWxsX2luZGlyZWN0J3MgdGFibGUgaW5k
ZXgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0YWJsZUluZGV4ID49IG1faW5mby50
YWJsZUNvdW50KCksICJjYWxsX2luZGlyZWN0J3MgdGFibGUgaW5kZXggIiwgdGFibGVJbmRleCwg
IiBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2luZm8udGFibGVDb3VudCgpKTsKLSAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihtX2luZm8udXNlZFNpZ25hdHVyZXMuc2l6ZSgpIDw9IHNpZ25hdHVy
ZUluZGV4LCAiY2FsbF9pbmRpcmVjdCdzIHNpZ25hdHVyZSBpbmRleCAiLCBzaWduYXR1cmVJbmRl
eCwgIiBleGNlZWRzIGtub3duIHNpZ25hdHVyZXMgIiwgbV9pbmZvLnVzZWRTaWduYXR1cmVzLnNp
emUoKSk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobV9pbmZvLnR5cGVDb3VudCgpIDw9
IHNpZ25hdHVyZUluZGV4LCAiY2FsbF9pbmRpcmVjdCdzIHNpZ25hdHVyZSBpbmRleCAiLCBzaWdu
YXR1cmVJbmRleCwgIiBleGNlZWRzIGtub3duIHNpZ25hdHVyZXMgIiwgbV9pbmZvLnR5cGVDb3Vu
dCgpKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8udGFibGVzW3RhYmxlSW5k
ZXhdLnR5cGUoKSAhPSBUYWJsZUVsZW1lbnRUeXBlOjpGdW5jcmVmLCAiY2FsbF9pbmRpcmVjdCBp
cyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBoYXMgdHlwZSBmdW5jcmVmIik7CiAKLSAgICAgICAg
Y29uc3QgU2lnbmF0dXJlJiBjYWxsZWVTaWduYXR1cmUgPSBtX2luZm8udXNlZFNpZ25hdHVyZXNb
c2lnbmF0dXJlSW5kZXhdLmdldCgpOworICAgICAgICBjb25zdCBTaWduYXR1cmUmIGNhbGxlZVNp
Z25hdHVyZSA9IG1faW5mby50eXBlU2lnbmF0dXJlc1tzaWduYXR1cmVJbmRleF0uZ2V0KCk7CiAg
ICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSArIDE7IC8vIEFkZCB0aGUgY2FsbGVlJ3MgaW5kZXguCiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbGxf
aW5kaXJlY3QgZXhwZWN0cyAiLCBhcmd1bWVudENvdW50LCAiIGFyZ3VtZW50cywgYnV0IHRoZSBl
eHByZXNzaW9uIHN0YWNrIGN1cnJlbnRseSBob2xkcyAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXpl
KCksICIgdmFsdWVzIik7CiAKQEAgLTEyMzksNyArMTIzOSw3IEBAIEZPUl9FQUNIX1dBU01fTUVN
T1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RB
cmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25TdGFjay5hdChpKTsKICAg
ICAgICAgICAgIGlmIChpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gMSkKLSAgICAgICAg
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoYXJnLnR5cGUoKSwgY2Fs
bGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpKSwgImFyZ3VtZW50
IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIsIGFyZy50eXBlKCkua2luZCwg
IiwgZXhwZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50
SW5kZXgpLmtpbmQpOworICAgICAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlz
U3VidHlwZShhcmcudHlwZSgpLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRUeXBlKGkgLSBmaXJz
dEFyZ3VtZW50SW5kZXgpKSwgImFyZ3VtZW50IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVj
dCwgZ290ICIsIGFyZy50eXBlKCkua2luZCwgIiwgZXhwZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJl
LmFyZ3VtZW50VHlwZShpIC0gZmlyc3RBcmd1bWVudEluZGV4KS5raW5kKTsKICAgICAgICAgICAg
IGFyZ3MudW5jaGVja2VkQXBwZW5kKGFyZyk7CiAgICAgICAgICAgICBtX2NvbnRleHQuZGlkUG9w
VmFsdWVGcm9tU3RhY2soKTsKICAgICAgICAgfQpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgRk9SX0VB
Q0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9uIGFyZyA9IG1fZXhwcmVzc2lvblN0YWNr
LmF0KGkpOwogICAgICAgICAgICAgaWYgKGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSAx
KQotICAgICAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnLnR5cGUoKSAhPSBj
YWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCksICJhcmd1bWVu
dCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmcudHlwZSgpLmtpbmQs
ICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0gZmlyc3RBcmd1bWVu
dEluZGV4KS5raW5kKTsKKyAgICAgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFy
Zy50eXBlKCkgIT0gY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0gZmlyc3RBcmd1bWVu
dEluZGV4KSwgImFyZ3VtZW50IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIs
IGFyZy50eXBlKCkua2luZCwgIiwgZXhwZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50
VHlwZShpIC0gZmlyc3RBcmd1bWVudEluZGV4KS5raW5kKTsKICAgICAgICAgICAgIGFyZ3MudW5j
aGVja2VkQXBwZW5kKGFyZyk7CiAgICAgICAgICAgICBtX2NvbnRleHQuZGlkUG9wVmFsdWVGcm9t
U3RhY2soKTsKICAgICAgICAgfQpAQCAtMTI5Miw3ICsxMjkyLDcgQEAgRk9SX0VBQ0hfV0FTTV9N
RU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7ICsraSkgewogICAgICAgICAgICAgVHlwZSB0eXBlID0gbV9leHByZXNzaW9u
U3RhY2suYXQob2Zmc2V0ICsgaSkudHlwZSgpOwotICAgICAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRih0eXBlICE9IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSksICJCbG9jayBleHBl
Y3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJl
LT5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCB0eXBlLmtpbmQp
OworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0eXBlICE9IGlubGluZVNpZ25h
dHVyZS0+YXJndW1lbnRUeXBlKGkpLCAiQmxvY2sgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5k
ZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLmtpbmQs
ICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIHR5cGUua2luZCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpbnQ2NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CkBAIC0xMzE1
LDcgKzEzMTUsNyBAQCBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkK
ICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaW5s
aW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAg
ICAgICBUeXBlIHR5cGUgPSBtX2V4cHJlc3Npb25TdGFjay5hdChvZmZzZXQgKyBpKS50eXBlKCk7
Ci0gICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHR5cGUgIT0gaW5saW5lU2lnbmF0
dXJlLT5hcmd1bWVudChpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBp
LCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSkua2luZCwgIiBidXQgYXJn
dW1lbnQgaGFzIHR5cGUgIiwgdHlwZS5raW5kKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9S
X0ZBSUxfSUYodHlwZSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50VHlwZShpKSwgIkxvb3Ag
ZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25h
dHVyZS0+YXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIHR5
cGUua2luZCk7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQ2NF90IG9sZFNpemUgPSBtX2V4cHJl
c3Npb25TdGFjay5zaXplKCk7CkBAIC0xMzQwLDcgKzEzNDAsNyBAQCBGT1JfRUFDSF9XQVNNX01F
TU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
RihtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciBpZiBibG9jay4gSWYgZXhwZWN0
cyAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9l
eHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4gSWYgYmxvY2sgaGFzIHNpZ25h
dHVyZTogIiwgaW5saW5lU2lnbmF0dXJlLT50b1N0cmluZygpKTsKICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaW5saW5lU2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVTaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihtX2V4cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50eXBlKCkgIT0gaW5saW5lU2ln
bmF0dXJlLT5hcmd1bWVudChpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgi
LCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSkua2luZCwgIiBidXQg
YXJndW1lbnQgaGFzIHR5cGUgIiwgbV9leHByZXNzaW9uU3RhY2tbaV0udHlwZSgpLmtpbmQpOwor
ICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFja1tvZmZz
ZXQgKyBpXS50eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudFR5cGUoaSksICJMb29w
IGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IiwgaSwgIiB0byBiZSAiLCBpbmxpbmVTaWdu
YXR1cmUtPmFyZ3VtZW50VHlwZShpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBt
X2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCkua2luZCk7CiAKICAgICAgICAgaW50NjRfdCBvbGRT
aXplID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOwogICAgICAgICBTdGFjayBuZXdTdGFjazsK
QEAgLTEzNzUsNyArMTM3NSw3IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFU
RV9DQVNFKQogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1
bWVudHMgb24gc3RhY2sgZm9yIHRyeSBibG9jay4gVHJ5ZSBleHBlY3RzICIsIGlubGluZVNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5z
aXplKCksICIgd2VyZSBwcmVzZW50LiBUcnkgYmxvY2sgaGFzIHNpZ25hdHVyZTogIiwgaW5saW5l
U2lnbmF0dXJlLT50b1N0cmluZygpKTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHBy
ZXNzaW9uU3RhY2suc2l6ZSgpIC0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKTsgKytpKQotICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJl
c3Npb25TdGFja1tvZmZzZXQgKyBpXS50eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVu
dChpKSwgIlRyeSBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwg
aW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlw
ZSAiLCBtX2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCkua2luZCk7CisgICAgICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCArIGldLnR5cGUoKSAh
PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50VHlwZShpKSwgIlRyeSBleHBlY3RzIHRoZSBhcmd1
bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudFR5
cGUoaSkua2luZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbV9leHByZXNzaW9uU3RhY2tb
aV0udHlwZSgpLmtpbmQpOwogCiAgICAgICAgIGludDY0X3Qgb2xkU2l6ZSA9IG1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKTsKICAgICAgICAgU3RhY2sgbmV3U3RhY2s7CkBAIC0xNDEwLDcgKzE0MTAs
NyBAQCBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKIAogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IHJl
c3VsdHMuc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlv
blNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSks
IHJlc3VsdHNbaV0pOworICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5k
QXBwZW5kKGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSksIHJlc3VsdHNbaV0pOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMTQ2Niw3ICsxNDY2LDcgQEAgRk9SX0VB
Q0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhyb3cncyAi
LCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gYXJnID0gbV9leHBy
ZXNzaW9uU3RhY2suYXQob2Zmc2V0ICsgaSk7Ci0gICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9G
QUlMX0lGKGFyZy50eXBlKCkgIT0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLCAiVGhl
IGV4Y2VwdGlvbiBiZWluZyB0aHJvd24gZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXggIiwg
aSwgIiB0byBiZSAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSkua2luZCwgIiBidXQg
YXJndW1lbnQgaGFzIHR5cGUgIiwgYXJnLnR5cGUoKS5raW5kKTsKKyAgICAgICAgICAgIFdBU01f
VkFMSURBVE9SX0ZBSUxfSUYoYXJnLnR5cGUoKSAhPSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1l
bnRUeXBlKGkpLCAiVGhlIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24gZXhwZWN0cyB0aGUgYXJndW1l
bnQgYXQgaW5kZXggIiwgaSwgIiB0byBiZSAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRU
eXBlKGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIGFyZy50eXBlKCkua2luZCk7
CiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChhcmcpOwogICAgICAgICAgICAgbV9j
b250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAgIH0KQEAgLTE2NjYsNyArMTY2
Niw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHBy
ZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gcmVzdWx0cy5zaXplKCkpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKTsgKytpKQotICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBw
ZW5kKGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKSwgcmVzdWx0c1tpXSk7CisgICAgICAg
ICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0
dXJlLmFyZ3VtZW50VHlwZShpKSwgcmVzdWx0c1tpXSk7CiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFs
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCmluZGV4IGNi
M2QxNjNiYmUwOGI2YTU3NThjZDlkYzI4ZGUwNjhhMWRlNTZmMTcuLmEyYTBhY2I1ZjEwZDczNThj
NTBjMGEwOWRmOTZlNGYxZWY4NWJhZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21HbG9iYWwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21HbG9iYWwuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgR2xvYmFsOjpzZXQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudCkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgQVNTRVJUKG1fbXV0YWJpbGl0eSAhPSBXYXNtOjpHbG9iYWxJbmZvcm1h
dGlvbjo6SW1tdXRhYmxlKTsKKyAgICBBU1NFUlQobV9tdXRhYmlsaXR5ICE9IFdhc206OkltbXV0
YWJsZSk7CiAgICAgc3dpdGNoIChtX3R5cGUua2luZCkgewogICAgIGNhc2UgVHlwZUtpbmQ6Okkz
MjogewogICAgICAgICBpbnQzMl90IHZhbHVlID0gYXJndW1lbnQudG9JbnQzMihnbG9iYWxPYmpl
Y3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCmluZGV4IDE3Zjg4Njgx
ZTA2ZTQwMjI4MGQxOWFmYTJlZWJiY2FlOGQ5YmQxNWUuLjQzOGE3Zjc0MGZmOTkzMTZjNzY1ODEz
ZWFlODcyZjdkNjc5NDBmOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21HbG9iYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFs
LmgKQEAgLTQ4LDEzICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIFZhbHVlKiBtX3BvaW50ZXI7
CiAgICAgfTsKIAotICAgIHN0YXRpYyBSZWY8R2xvYmFsPiBjcmVhdGUoV2FzbTo6VHlwZSB0eXBl
LCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eSBtdXRhYmlsaXR5LCB1aW50NjRf
dCBpbml0aWFsVmFsdWUgPSAwKQorICAgIHN0YXRpYyBSZWY8R2xvYmFsPiBjcmVhdGUoV2FzbTo6
VHlwZSB0eXBlLCBXYXNtOjpNdXRhYmlsaXR5IG11dGFiaWxpdHksIHVpbnQ2NF90IGluaXRpYWxW
YWx1ZSA9IDApCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHbG9iYWwodHlw
ZSwgbXV0YWJpbGl0eSwgaW5pdGlhbFZhbHVlKSk7CiAgICAgfQogCiAgICAgV2FzbTo6VHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgV2FzbTo6R2xvYmFsSW5mb3JtYXRp
b246Ok11dGFiaWxpdHkgbXV0YWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YWJpbGl0eTsg
fQorICAgIFdhc206Ok11dGFiaWxpdHkgbXV0YWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0
YWJpbGl0eTsgfQogICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAg
dWludDY0X3QgZ2V0UHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5tX3ByaW1pdGl2
ZTsgfQogICAgIHZvaWQgc2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CkBAIC03OSw3ICs3
OSw3IEBAIHB1YmxpYzoKICAgICBWYWx1ZSogdmFsdWVQb2ludGVyKCkgeyByZXR1cm4gJm1fdmFs
dWU7IH0KIAogcHJpdmF0ZToKLSAgICBHbG9iYWwoV2FzbTo6VHlwZSB0eXBlLCBXYXNtOjpHbG9i
YWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eSBtdXRhYmlsaXR5LCB1aW50NjRfdCBpbml0aWFsVmFs
dWUpCisgICAgR2xvYmFsKFdhc206OlR5cGUgdHlwZSwgV2FzbTo6TXV0YWJpbGl0eSBtdXRhYmls
aXR5LCB1aW50NjRfdCBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAg
ICAgICwgbV9tdXRhYmlsaXR5KG11dGFiaWxpdHkpCiAgICAgICAgICwgbV92YWx1ZSgpCkBAIC04
OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgV2FzbTo6VHlwZSBtX3R5cGU7Ci0g
ICAgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHkgbV9tdXRhYmlsaXR5OworICAg
IFdhc206Ok11dGFiaWxpdHkgbV9tdXRhYmlsaXR5OwogICAgIEpTT2JqZWN0KiBtX293bmVyIHsg
bnVsbHB0ciB9OwogICAgIFZhbHVlIG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggYjQwZTcyMWY5NzUzNGUx
MjRhNThkMjI0ZDZkYTVhMjNkY2E3MTU0ZS4uOWEzYTE0ODU3OWQyOTE5NGU3N2UwOTE2MTc3YzAz
ZTM4YzgzMTdhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJ
bnRHZW5lcmF0b3IuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgcHVibGljOgogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOwogICAgICAgICAgICAg
aWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KCp0aGlzKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOworICAgICAgICAgICAgICAg
IHJldHVybiBtX3NpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpOwogICAgICAgICAgICAgcmV0dXJu
IG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOwogICAgICAgICB9CiAKQEAgLTYyMiwxMyArNjIy
LDE0IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBUeXBlS2luZDo6Vm9pZDoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6RnVuYzoKKyAg
ICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH07CiAKIAogICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspCi0gICAgICAgIGFsbG9j
YXRlU3RhY2tSZWdpc3RlcihzaWduYXR1cmUuYXJndW1lbnQoaSkpOworICAgICAgICBhbGxvY2F0
ZVN0YWNrUmVnaXN0ZXIoc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKSk7CiAKICAgICBncHJJbmRl
eCA9IDA7CiAgICAgZnBySW5kZXggPSAwOwpAQCAtNjU4LDcgKzY1OSw3IEBAIGF1dG8gTExJbnRH
ZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSkgLT4gTExJCiAgICAgZ3BySW5kZXggPSBiYXNlIC0gc3RhY2tDb3VudDsKICAgICBmcHJJ
bmRleCA9IGdwckluZGV4IC0gZ3ByQ291bnQ7CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgewotICAgICAgICBzd2l0Y2ggKHNpZ25h
dHVyZS5hcmd1bWVudChpKS5raW5kKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3Vt
ZW50VHlwZShpKS5raW5kKSB7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjoKICAgICAgICAg
Y2FzZSBUeXBlS2luZDo6STY0OgogICAgICAgICBjYXNlIFR5cGVLaW5kOjpFeHRlcm5yZWY6CkBA
IC02NzksNiArNjgwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9y
Q2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpWb2lkOgogICAgICAgICBjYXNlIFR5cGVLaW5k
OjpGdW5jOgorICAgICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzA4LDYgKzcx
MCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBUeXBlS2luZDo6Vm9pZDoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6RnVuYzoKKyAg
ICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTc2NSw2ICs3NjgsNyBAQCBhdXRv
IExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUpIC0+IFZlYwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlw
ZUtpbmQ6OlZvaWQ6CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAgICAgIGNhc2Ug
VHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC04MDAsNyArODA0LDcgQEAgYXV0byBMTEludEdlbmVy
YXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFs
UmVzdWx0CiAgICAgfTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1l
bnQoaSkua2luZCkgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSku
a2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6CiAgICAgICAgIGNhc2UgVHlwZUtp
bmQ6Okk2NDoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6RXh0ZXJucmVmOgpAQCAtODE1LDYgKzgx
OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAg
ICAgIGNhc2UgVHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDgzLDcgKzEwODgsNyBAQCBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdAogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gcmVzdWx0c1tpXTsKLSAgICAgICAgVHlwZSB0eXBlID0gZXhjZXB0aW9uU2ln
bmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBUeXBlIHR5cGUgPSBleGNlcHRpb25TaWduYXR1
cmUuYXJndW1lbnRUeXBlKGkpOwogICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCkgewogICAgICAg
ICBjYXNlIFdhc206OlR5cGVLaW5kOjpGMzI6CiAgICAgICAgICAgICBXYXNtRjMyUmVpbnRlcnBy
ZXRJMzI6OmVtaXQodGhpcywgZHN0LCBkc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxpbWl0cy5oCmluZGV4IGY4ZjA1M2I1ODYwZTdkZjk3ZGI0NDY0YWEwZWExNzQ4ZDliODdmMzYu
LjFhOWRkYmY5YzhhOGFiZGZhZjUzMjhkYzM0YzgwMmI2ODUxNjFjNzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmgKQEAgLTQ0LDYgKzQ0LDcgQEAgY29uc3RleHByIHNp
emVfdCBtYXhFeHBvcnRzID0gMTAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhFeGNlcHRpb25z
ID0gMTAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhHbG9iYWxzID0gMTAwMDAwMDsKIGNvbnN0
ZXhwciBzaXplX3QgbWF4RGF0YVNlZ21lbnRzID0gMTAwMDAwOworY29uc3RleHByIHNpemVfdCBt
YXhTdHJ1Y3RGaWVsZENvdW50ID0gMTAwMDAwMDsKIAogY29uc3RleHByIHNpemVfdCBtYXhTdHJp
bmdTaXplID0gMTAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhNb2R1bGVTaXplID0gMTAyNCAq
IDEwMjQgKiAxMDI0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZUluZm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlSW5mb3JtYXRpb24uaAppbmRleCBhZTZiYmVlZGYyMTg2MTk0M2I4OTBmNzIzMTUzYzc4ODhj
ZmM0OTY3Li5jMjI0OTEyZWQyNDBmM2ZhZjQzZTk3M2E3ZGMzYTlmODgxODQ4NDMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaApA
QCAtOTksNiArOTksOCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBib29sIGlzRGVjbGFyZWRF
eGNlcHRpb24odWludDMyX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjbGFyZWRFeGNlcHRp
b25zLmNvbnRhaW5zKGluZGV4KTsgfQogICAgIHZvaWQgYWRkRGVjbGFyZWRFeGNlcHRpb24odWlu
dDMyX3QgaW5kZXgpIHsgbV9kZWNsYXJlZEV4Y2VwdGlvbnMuc2V0KGluZGV4KTsgfQogCisgICAg
dWludDMyX3QgdHlwZUNvdW50KCkgY29uc3QgeyByZXR1cm4gdHlwZVNpZ25hdHVyZXMuc2l6ZSgp
OyB9CisKICAgICBib29sIGhhc01lbW9yeUltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1lbW9yeS5p
c0ltcG9ydCgpOyB9CiAKICAgICBCcmFuY2hIaW50IGdldEJyYW5jaEhpbnQodWludDMyX3QgZnVu
Y3Rpb25PZmZzZXQsIHVpbnQzMl90IGJyYW5jaE9mZnNldCkgY29uc3QKQEAgLTExNCw3ICsxMTYs
NyBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+IGludGVy
bmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwogICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4g
aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlczsKICAgICBWZWN0b3I8U2lnbmF0dXJlSW5k
ZXg+IGludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlczsKLSAgICBWZWN0b3I8UmVmPFNp
Z25hdHVyZT4+IHVzZWRTaWduYXR1cmVzOworICAgIFZlY3RvcjxSZWY8U2lnbmF0dXJlPj4gdHlw
ZVNpZ25hdHVyZXM7CiAKICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaAppbmRleCBlZDAwZDlhMGE0MmI3OWFkYzFmM2M4
YWIwZjM0NmZjNGY2ZGE4OWFlLi4yMmU0ZmFmZmQxYjliMThhZmI2MmUzOGI1MjNmYjdkNzA2YTU1
ZTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCkBAIC0yODgsOSAr
Mjg4LDkgQEAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpQYXJ0
aWFsUmVzdWx0IFBhcnNlcjxTdWNjZXNzVHlwZT46OnAKICAgICBpbnQ2NF90IGluZGV4OwogICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFySW50NjQoaW5kZXgpLCAiQmxvY2stbGlrZSBp
bnN0cnVjdGlvbiBkb2Vzbid0IHJldHVybiB2YWx1ZSB0eXBlIGJ1dCBjYW4ndCBkZWNvZGUgdHlw
ZSBzZWN0aW9uIGluZGV4Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA8IDAsICJC
bG9jay1saWtlIGluc3RydWN0aW9uIHNpZ25hdHVyZSBpbmRleCBpcyBuZWdhdGl2ZSIpOwotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPj0gaW5mby51
c2VkU2lnbmF0dXJlcy5zaXplKCksICJCbG9jay1saWtlIGluc3RydWN0aW9uIHNpZ25hdHVyZSBp
bmRleCBpcyBvdXQgb2YgYm91bmRzLiBJbmRleDogIiwgaW5kZXgsICIgdHlwZSBpbmRleCBzcGFj
ZTogIiwgaW5mby51c2VkU2lnbmF0dXJlcy5zaXplKCkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPj0gaW5mby50eXBlQ291bnQoKSwgIkJsb2Nr
LWxpa2UgaW5zdHJ1Y3Rpb24gc2lnbmF0dXJlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuIEluZGV4
OiAiLCBpbmRleCwgIiB0eXBlIGluZGV4IHNwYWNlOiAiLCBpbmZvLnR5cGVDb3VudCgpKTsKIAot
ICAgIHJlc3VsdCA9ICZpbmZvLnVzZWRTaWduYXR1cmVzW2luZGV4XS5nZXQoKTsKKyAgICByZXN1
bHQgPSAmaW5mby50eXBlU2lnbmF0dXJlc1tpbmRleF0uZ2V0KCk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIApAQCAtMzEyLDcgKzMxMiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpwYXJzZUhlYXBUeXBlKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihoZWFw
VHlwZSkgPj0gaW5mby51c2VkU2lnbmF0dXJlcy5zaXplKCkpCisgICAgaWYgKHN0YXRpY19jYXN0
PHNpemVfdD4oaGVhcFR5cGUpID49IGluZm8udHlwZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJlc3VsdCA9IGhlYXBUeXBlOwpAQCAtMzMxLDcgKzMzMSw2IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVZhbHVlVHlwZShjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYKICAgICBUeXBlS2luZCB0eXBlS2luZCA9IHN0YXRpY19jYXN0PFR5
cGVLaW5kPihraW5kKTsKICAgICBib29sIGlzTnVsbGFibGUgPSB0cnVlOwogICAgIFNpZ25hdHVy
ZUluZGV4IHNpZ0luZGV4ID0gMDsKLQogICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseVR5
cGVkRnVuY3Rpb25SZWZlcmVuY2VzKCkgJiYgKHR5cGVLaW5kID09IFR5cGVLaW5kOjpGdW5jcmVm
IHx8IHR5cGVLaW5kID09IFR5cGVLaW5kOjpFeHRlcm5yZWYpKSB7CiAgICAgICAgIHNpZ0luZGV4
ID0gc3RhdGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+KHR5cGVLaW5kKTsKICAgICAgICAgdHlwZUtp
bmQgPSBUeXBlS2luZDo6UmVmTnVsbDsKQEAgLTM0MCw3ICszMzksNyBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VWYWx1ZVR5cGUoY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mCiAgICAgICAgIGludDMyX3QgaGVhcFR5cGU7CiAgICAgICAgIGlmICghcGFyc2VI
ZWFwVHlwZShpbmZvLCBoZWFwVHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHNpZ0luZGV4ID0gaGVhcFR5cGUgPCAwID8gc3RhdGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+
KGhlYXBUeXBlKSA6IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoaW5mby51c2VkU2lnbmF0dXJl
c1toZWFwVHlwZV0uZ2V0KCkpOworICAgICAgICBzaWdJbmRleCA9IGhlYXBUeXBlIDwgMCA/IHN0
YXRpY19jYXN0PFNpZ25hdHVyZUluZGV4PihoZWFwVHlwZSkgOiBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KGluZm8udHlwZVNpZ25hdHVyZXNbaGVhcFR5cGVdLmdldCgpKTsKICAgICB9CiAKICAg
ICBUeXBlIHR5cGUgPSB7IHR5cGVLaW5kLCBzdGF0aWNfY2FzdDxOdWxsYWJsZT4oaXNOdWxsYWJs
ZSksIHNpZ0luZGV4IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2Vj
dGlvblBhcnNlci5jcHAKaW5kZXggNWI1MTE4MTEwZTUyZDJiZDA3OGNiMDJlOTg5OTk3MmQyZmE4
YjRlMy4uMDdlN2ViMzA2MGEzYjA2ZjJhNjczY2I2NWE5MGRkZWU4NzkyMmM4MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcApAQCAtNDUs
NDEgKzQ1LDMwIEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gUGFydGlhbFJl
c3VsdAogCiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoY291bnQpLCAi
Y2FuJ3QgZ2V0IFR5cGUgc2VjdGlvbidzIGNvdW50Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rihjb3VudCA+IG1heFR5cGVzLCAiVHlwZSBzZWN0aW9uJ3MgY291bnQgaXMgdG9vIGJpZyAiLCBj
b3VudCwgIiBtYXhpbXVtICIsIG1heFR5cGVzKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFt
X2luZm8tPnVzZWRTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBh
bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBjb3VudCwgIiBlbnRy
aWVzIik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT50eXBlU2lnbmF0dXJlcy50
cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBm
b3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOwogCiAgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50OF90IHR5cGU7Ci0gICAg
ICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVu
dFR5cGVzOwotCi0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlKSwg
ImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHR5cGUiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRih0eXBlICE9IHN0YXRpY19jYXN0PGludDhfdD4oVHlwZUtpbmQ6OkZ1bmMpLCBpLCAi
dGggVHlwZSBpcyBub24tRnVuYyAiLCB0eXBlKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYXJVSW50MzIoYXJndW1lbnRDb3VudCksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5
cGUncyBhcmd1bWVudCBjb3VudCIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3Vt
ZW50Q291bnQgPiBtYXhGdW5jdGlvblBhcmFtcywgaSwgInRoIGFyZ3VtZW50IGNvdW50IGlzIHRv
byBiaWcgIiwgYXJndW1lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9uUGFyYW1zKTsK
LSAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50czsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighYXJndW1lbnRzLnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50KSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGksICJ0aCBzaWdu
YXR1cmUiKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3Vu
dDsgKytpKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKLSAgICAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKG1faW5mbywgYXJndW1lbnRUeXBlKSwg
ImNhbid0IGdldCAiLCBpLCAidGggYXJndW1lbnQgVHlwZSIpOwotICAgICAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChhcmd1bWVudFR5cGUpOworICAgICAgICBpbnQ4X3QgdHlwZUtpbmQ7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlSW50Nyh0eXBlS2luZCksICJjYW4ndCBnZXQg
IiwgaSwgInRoIFR5cGUncyB0eXBlIik7CisgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IHNpZ25h
dHVyZTsKKyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxUeXBlS2luZD4odHlwZUtpbmQpKSB7
CisgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6IHsKKyAgICAgICAgICAgIFdBU01fRkFJTF9J
Rl9IRUxQRVJfRkFJTFMocGFyc2VGdW5jdGlvblR5cGUoaSwgc2lnbmF0dXJlKSk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6IHsK
KyAgICAgICAgICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlHQygpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWlsKGksICJ0aCBzdHJ1Y3QgdHlwZXMgYXJlIG5vdCBlbmFibGVkIik7
CiAKLSAgICAgICAgdWludDMyX3QgcmV0dXJuQ291bnQ7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKHJldHVybkNvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGgg
VHlwZSdzIHJldHVybiBjb3VudCIpOwotCi0gICAgICAgIFZlY3RvcjxUeXBlLCAxPiByZXR1cm5U
eXBlczsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcmV0dXJuVHlwZXMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBm
b3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmV0dXJuQ291bnQ7ICsraSkgewotICAgICAgICAgICAgVHlwZSB2
YWx1ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKG1f
aW5mbywgdmFsdWUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIHZhbHVlIik7
Ci0gICAgICAgICAgICByZXR1cm5UeXBlcy5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgV0FT
TV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZVN0cnVjdFR5cGUoaSwgc2lnbmF0dXJlKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhaWwoaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZUtpbmQpOwogICAg
ICAgICB9CiAKLSAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gU2lnbmF0dXJl
SW5mb3JtYXRpb246OnNpZ25hdHVyZUZvcihyZXR1cm5UeXBlcywgYXJndW1lbnRzKTsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2lnbmF0dXJlLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOwotCi0gICAg
ICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZS5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgbV9pbmZvLT50eXBlU2lnbmF0dXJlcy51bmNoZWNrZWRB
cHBlbmQoc2lnbmF0dXJlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KICAgICByZXR1cm4geyB9
OwogfQpAQCAtMTE0LDkgKzEwMyw5IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQo
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjog
ewogICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKICAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJl
SW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9u
IHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxk
U3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNp
Z25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBm
dW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVu
Y3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2Vk
U2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxk
ICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
ZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+PSBtX2luZm8tPnR5cGVDb3VudCgpLCAiaW52YWxpZCBm
dW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVu
Y3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT50eXBl
Q291bnQoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxk
U3RyaW5nLCAiJyIpOwogICAgICAgICAgICAga2luZEluZGV4ID0gbV9pbmZvLT5pbXBvcnRGdW5j
dGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOwotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNlZFNp
Z25hdHVyZXNbZnVuY3Rpb25TaWduYXR1cmVJbmRleF0pOworICAgICAgICAgICAgU2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+
dHlwZVNpZ25hdHVyZXNbZnVuY3Rpb25TaWduYXR1cmVJbmRleF0pOwogICAgICAgICAgICAgbV9p
bmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25h
dHVyZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMzksNyArMTI4
LDcgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICAgICAgICAgIEdsb2JhbEluZm9ybWF0aW9uIGdsb2JhbDsKICAgICAgICAgICAgIFdBU01f
RkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VHbG9iYWxUeXBlKGdsb2JhbCkpOwogICAgICAgICAg
ICAgLy8gT25seSBtdXRhYmxlIGdsb2JhbHMgbmVlZCBmbG9hdGluZyBiaW5kaW5ncy4KLSAgICAg
ICAgICAgIGlmIChnbG9iYWwubXV0YWJpbGl0eSA9PSBHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJp
bGl0eTo6TXV0YWJsZSkKKyAgICAgICAgICAgIGlmIChnbG9iYWwubXV0YWJpbGl0eSA9PSBNdXRh
YmlsaXR5OjpNdXRhYmxlKQogICAgICAgICAgICAgICAgIGdsb2JhbC5iaW5kaW5nTW9kZSA9IEds
b2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU7CiAgICAgICAgICAgICBraW5k
SW5kZXggPSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpOwogICAgICAgICAgICAgbV9pbmZvLT5nbG9i
YWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwpAQCAtMTU0LDkgKzE0Myw5IEBA
IGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAg
ICAgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4OwogICAgICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uU2lnbmF0dXJlSW5k
ZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGV4Y2VwdGlvbiBz
aWduYXR1cmUgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0
cmluZywgIiciKTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9uU2ln
bmF0dXJlSW5kZXggPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICJpbnZhbGlkIGV4
Y2VwdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZXhj
ZXB0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0IG9mIHJhbmdlIG9mICIsIG1faW5mby0+dXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVs
ZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dHlwZUNvdW50KCksICJpbnZhbGlk
IGV4Y2VwdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwg
ZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0IG9mIHJhbmdlIG9mICIsIG1faW5mby0+
dHlwZUNvdW50KCksICIgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBm
aWVsZFN0cmluZywgIiciKTsKICAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0
RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7Ci0gICAgICAgICAgICBTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51
c2VkU2lnbmF0dXJlc1tleGNlcHRpb25TaWduYXR1cmVJbmRleF0pOworICAgICAgICAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1f
aW5mby0+dHlwZVNpZ25hdHVyZXNbZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXhdKTsKICAgICAgICAg
ICAgIG1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBl
bmQoc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE4
MCw5ICsxNjksOSBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24oKSAtPiBQYXJ0
aWFsUmVzdWx0CiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAg
ICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cGFyc2VWYXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9u
J3MgdHlwZSBudW1iZXIiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVy
ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBu
dW1iZXIgaXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dHlwZUNvdW50KCksIGksICJ0aCBGdW5jdGlvbiB0
eXBlIG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwogCi0gICAgICAgIFNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8t
PnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKKyAgICAgICAgU2lnbmF0dXJlSW5kZXggc2ln
bmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dHlwZVNpZ25h
dHVyZXNbdHlwZU51bWJlcl0pOwogICAgICAgICAvLyBUaGUgQ29kZSBzZWN0aW9uIGZpeGVzIHVw
IHN0YXJ0IGFuZCBlbmQuCiAgICAgICAgIHNpemVfdCBzdGFydCA9IDA7CiAgICAgICAgIHNpemVf
dCBlbmQgPSAwOwpAQCAtMzcyLDcgKzM2MSw3IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VF
eHBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGtpbmRJbmRleCA+PSBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpLCBleHBvcnROdW1iZXIsICJ0aCBF
eHBvcnQgaGFzIGludmFsaWQgZ2xvYmFsIG51bWJlciAiLCBraW5kSW5kZXgsICIgaXQgZXhjZWVk
cyB0aGUgZ2xvYmFscyBjb3VudCAiLCBtX2luZm8tPmdsb2JhbHMuc2l6ZSgpLCAiLCBuYW1lZCAn
IiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgICAgICAvLyBPbmx5IG11dGFibGUgZ2xvYmFs
cyBuZWVkIGZsb2F0aW5nIGJpbmRpbmdzLgogICAgICAgICAgICAgR2xvYmFsSW5mb3JtYXRpb24m
IGdsb2JhbCA9IG1faW5mby0+Z2xvYmFsc1traW5kSW5kZXhdOwotICAgICAgICAgICAgaWYgKGds
b2JhbC5tdXRhYmlsaXR5ID09IEdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxl
KQorICAgICAgICAgICAgaWYgKGdsb2JhbC5tdXRhYmlsaXR5ID09IE11dGFiaWxpdHk6Ok11dGFi
bGUpCiAgICAgICAgICAgICAgICAgZ2xvYmFsLmJpbmRpbmdNb2RlID0gR2xvYmFsSW5mb3JtYXRp
b246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkBAIC02MTAsNyArNTk5LDcgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUluaXRFeHByKHVp
bnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51bWJlciwKIAogICAgICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCksICJnZXRf
Z2xvYmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMg
IiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
aW5kZXggPj0gbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBpbXBvcnQg
a2luZCBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBnbG9iYWwg
IiwgbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihtX2luZm8tPmdsb2JhbHNbaW5kZXhdLm11dGFiaWxpdHkgIT0gR2xvYmFsSW5mb3JtYXRp
b246OkltbXV0YWJsZSwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIg
aXMgbXV0YWJsZSAiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2Jh
bHNbaW5kZXhdLm11dGFiaWxpdHkgIT0gTXV0YWJpbGl0eTo6SW1tdXRhYmxlLCAiZ2V0X2dsb2Jh
bCBpbXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBpcyBtdXRhYmxlICIpOwogCiAgICAgICAg
IHJlc3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5kZXhdLnR5cGU7CiAgICAgICAgIGJpdHNP
ckltcG9ydE51bWJlciA9IGluZGV4OwpAQCAtNjIzLDcgKzYxMiw3IEBAIGF1dG8gU2VjdGlvblBh
cnNlcjo6cGFyc2VJbml0RXhwcih1aW50OF90JiBvcGNvZGUsIHVpbnQ2NF90JiBiaXRzT3JJbXBv
cnROdW1iZXIsCiAgICAgICAgICAgICBpbnQzMl90IGhlYXBUeXBlOwogICAgICAgICAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VIZWFwVHlwZShtX2luZm8sIGhlYXBUeXBlKSwgInJlZi5u
dWxsIGhlYXB0eXBlIG11c3QgYmUgZnVuY3JlZiwgZXh0ZXJucmVmIG9yIHR5cGVfaWR4Iik7CiAg
ICAgICAgICAgICBpZiAoaXNUeXBlSW5kZXhIZWFwVHlwZShoZWFwVHlwZSkpIHsKLSAgICAgICAg
ICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1toZWFwVHlwZV0uZ2V0KCkpOworICAgICAg
ICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChtX2luZm8tPnR5cGVTaWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7CiAgICAg
ICAgICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFi
bGU6Olllcywgc2lnbmF0dXJlSW5kZXggfTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIHR5cGVPZk51bGwgPSBUeXBlIHsgVHlwZUtpbmQ6OlJlZk51bGwsIE51bGxhYmxlOjpZ
ZXMsIHN0YXRpY19jYXN0PFNpZ25hdHVyZUluZGV4PihoZWFwVHlwZSkgfTsKQEAgLTY4MSw2ICs2
NzAsNjAgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUkzMkluaXRFeHByKHN0ZDo6b3B0aW9u
YWw8STMySW5pdEV4cHI+JiBpbml0RXhwciwgQVNDSUkKICAgICByZXR1cm4geyB9OwogfQogCith
dXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb25UeXBlKHVpbnQzMl90IHBvc2l0aW9uLCBS
ZWZQdHI8U2lnbmF0dXJlPiYgZnVuY3Rpb25TaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICB1aW50MzJfdCBhcmd1bWVudENvdW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIHBvc2l0aW9uLCAidGgg
VHlwZSdzIGFyZ3VtZW50IGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVu
dENvdW50ID4gbWF4RnVuY3Rpb25QYXJhbXMsIHBvc2l0aW9uLCAidGggYXJndW1lbnQgY291bnQg
aXMgdG9vIGJpZyAiLCBhcmd1bWVudENvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJh
bXMpOworICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudFR5cGVzOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIWFyZ3VtZW50VHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgcG9zaXRp
b24sICJ0aCBzaWduYXR1cmUiKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1
bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgVHlwZSBhcmd1bWVudFR5cGU7CisgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFsdWVUeXBlKG1faW5mbywgYXJndW1lbnRUeXBlKSwg
ImNhbid0IGdldCAiLCBpLCAidGggYXJndW1lbnQgVHlwZSIpOworICAgICAgICBhcmd1bWVudFR5
cGVzLmFwcGVuZChhcmd1bWVudFR5cGUpOworICAgIH0KKworICAgIHVpbnQzMl90IHJldHVybkNv
dW50OworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHJldHVybkNvdW50
KSwgImNhbid0IGdldCAiLCBwb3NpdGlvbiwgInRoIFR5cGUncyByZXR1cm4gY291bnQiKTsKKwor
ICAgIFZlY3RvcjxUeXBlLCAxPiByZXR1cm5UeXBlczsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFyZXR1cm5UeXBlcy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBh
bGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBwb3NpdGlvbiwgInRo
IHNpZ25hdHVyZSIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXR1cm5Db3VudDsg
KytpKSB7CisgICAgICAgIFR5cGUgdmFsdWU7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFsdWVUeXBlKG1faW5mbywgdmFsdWUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBl
J3MgcmV0dXJuIHZhbHVlIik7CisgICAgICAgIHJldHVyblR5cGVzLmFwcGVuZCh2YWx1ZSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb25TaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6dHlw
ZVNpZ25hdHVyZUZvckZ1bmN0aW9uKHJldHVyblR5cGVzLCBhcmd1bWVudFR5cGVzKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlU3RydWN0VHlwZSh1aW50
MzJfdCBwb3NpdGlvbiwgUmVmUHRyPFNpZ25hdHVyZT4mIHN0cnVjdFNpZ25hdHVyZSkgLT4gUGFy
dGlhbFJlc3VsdAoreworICAgIEFTU0VSVChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUdDKCkpOwor
CisgICAgdWludDMyX3QgZmllbGRDb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZVZhclVJbnQzMihmaWVsZENvdW50KSwgImNhbid0IGdldCAiLCBwb3NpdGlvbiwgInRoIHN0cnVj
dCB0eXBlJ3MgZmllbGQgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZpZWxkQ291
bnQgPiBtYXhTdHJ1Y3RGaWVsZENvdW50LCAibnVtYmVyIG9mIGZpZWxkcyBmb3Igc3RydWN0IHR5
cGUgYXQgcG9zaXRpb24gIiwgcG9zaXRpb24sICIgaXMgdG9vIGJpZyAiLCBmaWVsZENvdW50LCAi
IG1heGltdW0gIiwgbWF4U3RydWN0RmllbGRDb3VudCk7CisgICAgVmVjdG9yPFN0cnVjdEZpZWxk
PiBmaWVsZHM7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighZmllbGRzLnRyeVJlc2VydmVDYXBh
Y2l0eShmaWVsZENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHN0cnVj
dCBmaWVsZHMgIiwgZmllbGRDb3VudCwgIiBlbnRyaWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90
IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRDb3VudDsgKytmaWVsZEluZGV4KSB7
CisgICAgICAgIFR5cGUgZmllbGRUeXBlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZVZhbHVlVHlwZShtX2luZm8sIGZpZWxkVHlwZSksICJjYW4ndCBnZXQgIiwgZmllbGRJbmRl
eCwgInRoIGZpZWxkIFR5cGUiKTsKKworICAgICAgICB1aW50OF90IG11dGFiaWxpdHk7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgobXV0YWJpbGl0eSksIHBvc2l0aW9u
LCAiY2FuJ3QgZ2V0ICIsIGZpZWxkSW5kZXgsICJ0aCBmaWVsZCBtdXRhYmlsaXR5Iik7CisgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobXV0YWJpbGl0eSAhPSAweDAgJiYgbXV0YWJpbGl0eSAh
PSAweDEsICJpbnZhbGlkIEZpZWxkJ3MgbXV0YWJpbGl0eTogMHgiLCBoZXgobXV0YWJpbGl0eSwg
MiwgTG93ZXJjYXNlKSk7CisKKyAgICAgICAgZmllbGRzLnVuY2hlY2tlZEFwcGVuZChTdHJ1Y3RG
aWVsZCB7IGZpZWxkVHlwZSwgc3RhdGljX2Nhc3Q8TXV0YWJpbGl0eT4obXV0YWJpbGl0eSkgfSk7
CisgICAgfQorCisgICAgc3RydWN0U2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OnR5
cGVTaWduYXR1cmVGb3JTdHJ1Y3QoZmllbGRzKTsKKyAgICByZXR1cm4geyB9OworfQorCiBhdXRv
IFNlY3Rpb25QYXJzZXI6OnBhcnNlSTMySW5pdEV4cHJGb3JFbGVtZW50U2VjdGlvbihzdGQ6Om9w
dGlvbmFsPEkzMkluaXRFeHByPiYgaW5pdEV4cHIpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBy
ZXR1cm4gcGFyc2VJMzJJbml0RXhwcihpbml0RXhwciwgIkVsZW1lbnQgaW5pdF9leHByIG11c3Qg
cHJvZHVjZSBhbiBpMzIiX3MpOwpAQCAtNzU5LDcgKzgwMiw3IEBAIGF1dG8gU2VjdGlvblBhcnNl
cjo6cGFyc2VHbG9iYWxUeXBlKEdsb2JhbEluZm9ybWF0aW9uJiBnbG9iYWwpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZShtX2luZm8sIGds
b2JhbC50eXBlKSwgImNhbid0IGdldCBHbG9iYWwncyB2YWx1ZSB0eXBlIik7CiAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChtdXRhYmlsaXR5KSwgImNhbid0IGdldCBHbG9iYWwg
dHlwZSdzIG11dGFiaWxpdHkiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG11dGFiaWxpdHkg
IT0gMHgwICYmIG11dGFiaWxpdHkgIT0gMHgxLCAiaW52YWxpZCBHbG9iYWwncyBtdXRhYmlsaXR5
OiAweCIsIGhleChtdXRhYmlsaXR5LCAyLCBMb3dlcmNhc2UpKTsKLSAgICBnbG9iYWwubXV0YWJp
bGl0eSA9IHN0YXRpY19jYXN0PEdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5PihtdXRhYmls
aXR5KTsKKyAgICBnbG9iYWwubXV0YWJpbGl0eSA9IHN0YXRpY19jYXN0PE11dGFiaWxpdHk+KG11
dGFiaWxpdHkpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTg2OCw4ICs5MTEsOCBAQCBhdXRv
IFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhjZXB0aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAg
ICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKHR5cGVOdW1iZXIpLCAiY2FuJ3QgZ2V0ICIsIGV4Y2VwdGlvbk51bWJlciwg
InRoIEV4Y2VwdGlvbidzIHR5cGUgbnVtYmVyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYodHlwZU51bWJlciA+PSBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgZXhjZXB0aW9u
TnVtYmVyLCAidGggRXhjZXB0aW9uIHR5cGUgbnVtYmVyIGlzIGludmFsaWQgIiwgdHlwZU51bWJl
cik7Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dHlwZUNvdW50KCks
IGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlkICIs
IHR5cGVOdW1iZXIpOworICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT50eXBlU2lnbmF0dXJlc1t0eXBlTnVtYmVy
XSk7CiAgICAgICAgIG1faW5mby0+aW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnVu
Y2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuaAppbmRleCA5MWZkM2VkODM0MjI1Yzgx
M2UyZDAxMzkyYjQ5ZThkOWMzYmUyYjg3Li42NDE5MThkNmJlZmIzMWRmNGM4M2Q3YTI2MTljZmM5
OGY4YzVkMjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2Vj
dGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9u
UGFyc2VyLmgKQEAgLTY5LDYgKzY5LDkgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYsIFR5cGUm
IGluaXRFeHByVHlwZSk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2VJMzJJbml0RXhwcihzdGQ6Om9wdGlvbmFsPEkzMkluaXRFeHByPiYsIEFTQ0lJTGl0ZXJhbCBm
YWlsTWVzc2FnZSk7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJz
ZUZ1bmN0aW9uVHlwZSh1aW50MzJfdCBwb3NpdGlvbiwgUmVmUHRyPFNpZ25hdHVyZT4mKTsKKyAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVN0cnVjdFR5cGUodWludDMy
X3QgcG9zaXRpb24sIFJlZlB0cjxTaWduYXR1cmU+Jik7CisKICAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiB2YWxpZGF0ZUVsZW1lbnRUYWJsZUlkeCh1aW50MzJfdCk7CiAgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJMzJJbml0RXhwckZvckVsZW1l
bnRTZWN0aW9uKHN0ZDo6b3B0aW9uYWw8STMySW5pdEV4cHI+Jik7CiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VFbGVtZW50S2luZCh1aW50OF90JiBlbGVtZW50S2lu
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCmluZGV4
IGY5YTU2MWI4NTBmYzVjMTkzOWQwZWY1OWU4YTlmZDJiNjA1OTc4ZjkuLmFmNTlhN2QyMjJkOTVm
ZDQ0MGMwM2RmOTFiMDdhZjM5MGExNTVjNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TaWduYXR1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TaWduYXR1cmUuY3BwCkBAIC00NSwyNCArNDUsMzYgQEAgU3RyaW5nIFNpZ25hdHVy
ZTo6dG9TdHJpbmcoKSBjb25zdAogCiB2b2lkIFNpZ25hdHVyZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewotICAgIHsKLSAgICAgICAgb3V0LnByaW50KCIoIik7Ci0gICAgICAgIENv
bW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAgZm9yIChTaWduYXR1cmVBcmdDb3VudCBhcmcgPSAw
OyBhcmcgPCBhcmd1bWVudENvdW50KCk7ICsrYXJnKQotICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCBtYWtlU3RyaW5nKGFyZ3VtZW50KGFyZykua2luZCkpOwotICAgICAgICBvdXQucHJpbnQo
IikiKTsKKyAgICBpZiAoaXNGdW5jU2lnbmF0dXJlKCkpIHsKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0LnByaW50KCIoIik7CisgICAgICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAg
ICAgICAgICBmb3IgKFNpZ25hdHVyZUFyZ0NvdW50IGFyZyA9IDA7IGFyZyA8IGFyZ3VtZW50Q291
bnQoKTsgKythcmcpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtYWtlU3RyaW5n
KGFyZ3VtZW50VHlwZShhcmcpLmtpbmQpKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiKSIpOwor
ICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwor
ICAgICAgICAgICAgb3V0LnByaW50KCIgLT4gWyIpOworICAgICAgICAgICAgZm9yIChTaWduYXR1
cmVBcmdDb3VudCByZXQgPSAwOyByZXQgPCByZXR1cm5Db3VudCgpOyArK3JldCkKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIG1ha2VTdHJpbmcocmV0dXJuVHlwZShyZXQpLmtpbmQp
KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiXSIpOworICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICB7Ci0gICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAg
b3V0LnByaW50KCIgLT4gWyIpOwotICAgICAgICBmb3IgKFNpZ25hdHVyZUFyZ0NvdW50IHJldCA9
IDA7IHJldCA8IHJldHVybkNvdW50KCk7ICsrcmV0KQotICAgICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCBtYWtlU3RyaW5nKHJldHVyblR5cGUocmV0KS5raW5kKSk7Ci0gICAgICAgIG91dC5wcmlu
dCgiXSIpOworICAgIEFTU0VSVChpc1N0cnVjdFNpZ25hdHVyZSgpKTsKKyAgICBvdXQucHJpbnQo
IigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChTaWduYXR1cmVGaWVsZENv
dW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRDb3VudCgpOyArK2ZpZWxkSW5k
ZXgpIHsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtYWtlU3RyaW5nKGZpZWxkKGZpZWxkSW5k
ZXgpLnR5cGUua2luZCkpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsIGZpZWxkKGZpZWxkSW5k
ZXgpLm11dGFiaWxpdHkgPyAiaW1tdXRhYmxlIiA6ICJtdXRhYmxlIik7CiAgICAgfQorICAgIG91
dC5wcmludCgiKSIpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goc2l6ZV90IHJl
dHVybkNvdW50LCBjb25zdCBUeXBlKiByZXR1cm5UeXBlcywgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IFR5cGUqIGFyZ3VtZW50VHlwZXMpCitzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZ1bmNT
aWduYXR1cmVIYXNoKHNpemVfdCByZXR1cm5Db3VudCwgY29uc3QgVHlwZSogcmV0dXJuVHlwZXMs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBUeXBlKiBhcmd1bWVudFR5cGVzKQogewogICAg
IHVuc2lnbmVkIGFjY3VtdWxhdG9yID0gMHhhMWJjZWRkOHU7CiAgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgewpAQCAtNzgsMTUgKzkwLDMxIEBAIHN0YXRp
YyB1bnNpZ25lZCBjb21wdXRlSGFzaChzaXplX3QgcmV0dXJuQ291bnQsIGNvbnN0IFR5cGUqIHJl
dHVyblR5cGVzLCBzaXplX3QKICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiB9CiAKK3N0YXRpYyB1
bnNpZ25lZCBjb21wdXRlU3RydWN0U2lnbmF0dXJlSGFzaChzaXplX3QgZmllbGRDb3VudCwgY29u
c3QgU3RydWN0RmllbGQqIGZpZWxkcykKK3sKKyAgICB1bnNpZ25lZCBhY2N1bXVsYXRvciA9IDB4
YTFiY2VkZDh1OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBmaWVsZENvdW50OyArK2kp
IHsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBX
VEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4oZmllbGRzW2ld
LnR5cGUua2luZCkpKTsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFj
Y3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhf
dD4oZmllbGRzW2ldLnR5cGUubnVsbGFibGUpKSk7CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RG
OjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KGZpZWxkc1tpXS50eXBlLmluZGV4KSkpOworICAgICAgICBhY2N1
bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50
OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihmaWVsZHNbaV0ubXV0YWJpbGl0eSkpKTsK
KyAgICB9CisgICAgcmV0dXJuIGFjY3VtdWxhdG9yOworfQorCiB1bnNpZ25lZCBTaWduYXR1cmU6
Omhhc2goKSBjb25zdAogewotICAgIHJldHVybiBjb21wdXRlSGFzaChyZXR1cm5Db3VudCgpLCBz
dG9yYWdlKDApLCBhcmd1bWVudENvdW50KCksIHN0b3JhZ2UocmV0dXJuQ291bnQoKSkpOworICAg
IGlmIChpc0Z1bmNTaWduYXR1cmUoKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVGdW5jU2lnbmF0
dXJlSGFzaChyZXR1cm5Db3VudCgpLCBzdG9yYWdlRnVuY3Rpb24oMCksIGFyZ3VtZW50Q291bnQo
KSwgc3RvcmFnZUZ1bmN0aW9uKHJldHVybkNvdW50KCkpKTsKKworICAgIEFTU0VSVChpc1N0cnVj
dFNpZ25hdHVyZSgpKTsKKyAgICByZXR1cm4gY29tcHV0ZVN0cnVjdFNpZ25hdHVyZUhhc2goZmll
bGRDb3VudCgpLCBzdG9yYWdlU3RydWN0KDApKTsKIH0KIAotUmVmUHRyPFNpZ25hdHVyZT4gU2ln
bmF0dXJlOjp0cnlDcmVhdGUoU2lnbmF0dXJlQXJnQ291bnQgcmV0dXJuQ291bnQsIFNpZ25hdHVy
ZUFyZ0NvdW50IGFyZ3VtZW50Q291bnQpCitSZWZQdHI8U2lnbmF0dXJlPiBTaWduYXR1cmU6OnRy
eUNyZWF0ZUZ1bmNTaWduYXR1cmUoU2lnbmF0dXJlQXJnQ291bnQgcmV0dXJuQ291bnQsIFNpZ25h
dHVyZUFyZ0NvdW50IGFyZ3VtZW50Q291bnQpCiB7CiAgICAgLy8gV2UgdXNlIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEIGZvciB0aGlzIGNsYXNzLgotICAgIGF1dG8gcmVzdWx0ID0gdHJ5RmFzdE1h
bGxvYyhhbGxvY2F0ZWRTaXplKHJldHVybkNvdW50LCBhcmd1bWVudENvdW50KSk7CisgICAgYXV0
byByZXN1bHQgPSB0cnlGYXN0TWFsbG9jKGFsbG9jYXRlZEZ1bmNTaXplKHJldHVybkNvdW50LCBh
cmd1bWVudENvdW50KSk7CiAgICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKICAgICBpZiAoIXJl
c3VsdC5nZXRWYWx1ZShtZW1vcnkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk0LDUw
ICsxMjIsNjIgQEAgUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJlOjp0cnlDcmVhdGUoU2lnbmF0
dXJlQXJnQ291bnQgcmV0dXJuQ291bnQsIFNpZ25hdHVyZUEKICAgICByZXR1cm4gYWRvcHRSZWYo
c2lnbmF0dXJlKTsKIH0KIAorUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJlOjp0cnlDcmVhdGVT
dHJ1Y3RTaWduYXR1cmUoU2lnbmF0dXJlRmllbGRDb3VudCBmaWVsZENvdW50KQoreworICAgIC8v
IFdlIHVzZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBmb3IgdGhpcyBjbGFzcy4KKyAgICBhdXRv
IHJlc3VsdCA9IHRyeUZhc3RNYWxsb2MoYWxsb2NhdGVkU3RydWN0U2l6ZShmaWVsZENvdW50KSk7
CisgICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKKyAgICBpZiAoIXJlc3VsdC5nZXRWYWx1ZSht
ZW1vcnkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBTaWduYXR1cmUqIHNpZ25hdHVy
ZSA9IG5ldyAoTm90TnVsbCwgbWVtb3J5KSBTaWduYXR1cmUoZmllbGRDb3VudCk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKHNpZ25hdHVyZSk7Cit9CisKIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWdu
YXR1cmVJbmZvcm1hdGlvbigpCiB7Ci0jZGVmaW5lIE1BS0VfVEhVTktfU0lHTkFUVVJFKHR5cGUs
IGVuYywgc3RyLCB2YWwsIF8pICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIGlmIChUeXBlS2luZDo6dHlwZSAhPSBUeXBlS2luZDo6Vm9pZCkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBSZWZQdHI8U2lnbmF0dXJl
PiBzaWcgPSBTaWduYXR1cmU6OnRyeUNyZWF0ZSgxLCAwKTsgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBzaWctPnJlZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICBzaWctPmdldFJldHVyblR5cGUoMCkgPSBUeXBlczo6
dHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0aHVua1NpZ25h
dHVyZXNbbGluZWFyaXplVHlwZShUeXBlS2luZDo6dHlwZSldID0gc2lnLmdldCgpOyAgICBcCi0g
ICAgICAgICAgICBtX3NpZ25hdHVyZVNldC5hZGQoU2lnbmF0dXJlSGFzaCB7IHNpZy5yZWxlYXNl
Tm9uTnVsbCgpIH0pOyAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIE1BS0VfVEhV
TktfU0lHTkFUVVJFKHR5cGUsIGVuYywgc3RyLCB2YWwsIF8pICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKFR5cGVLaW5kOjp0eXBlICE9IFR5cGVLaW5k
OjpWb2lkKSB7IFwKKyAgICAgICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IHNpZyA9IFNpZ25hdHVy
ZTo6dHJ5Q3JlYXRlRnVuY1NpZ25hdHVyZSgxLCAwKTsgXAorICAgICAgICAgICAgc2lnLT5yZWYo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBzaWctPmdldFJldHVyblR5cGUoMCkgPSBUeXBlczo6dHlwZTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRodW5rU2lnbmF0dXJlc1tsaW5l
YXJpemVUeXBlKFR5cGVLaW5kOjp0eXBlKV0gPSBzaWcuZ2V0KCk7ICAgICAgXAorICAgICAgICAg
ICAgbV9zaWduYXR1cmVTZXQuYWRkKFNpZ25hdHVyZUhhc2ggeyBzaWcucmVsZWFzZU5vbk51bGwo
KSB9KTsgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlIChmYWxzZSk7
CiAKICAgICBGT1JfRUFDSF9XQVNNX1RZUEUoTUFLRV9USFVOS19TSUdOQVRVUkUpOwogCiAgICAg
Ly8gTWFrZSBWb2lkIGFnYWluIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZSBvbmUgdGhhdCBoYXMg
dm9pZCBpbiBpdC4KICAgICB7Ci0gICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IHNpZyA9IFNpZ25h
dHVyZTo6dHJ5Q3JlYXRlKDAsIDApOworICAgICAgICBSZWZQdHI8U2lnbmF0dXJlPiBzaWcgPSBT
aWduYXR1cmU6OnRyeUNyZWF0ZUZ1bmNTaWduYXR1cmUoMCwgMCk7CiAgICAgICAgIHNpZy0+cmVm
KCk7CiAgICAgICAgIHRodW5rU2lnbmF0dXJlc1tsaW5lYXJpemVUeXBlKFR5cGVLaW5kOjpWb2lk
KV0gPSBzaWcuZ2V0KCk7CiAgICAgICAgIG1fc2lnbmF0dXJlU2V0LmFkZChTaWduYXR1cmVIYXNo
IHsgc2lnLnJlbGVhc2VOb25OdWxsKCkgfSk7CiAgICAgfQogfQogCi0KLQotc3RydWN0IFBhcmFt
ZXRlclR5cGVzIHsKK3N0cnVjdCBGdW5jdGlvblBhcmFtZXRlclR5cGVzIHsKICAgICBjb25zdCBW
ZWN0b3I8VHlwZSwgMT4mIHJldHVyblR5cGVzOwogICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJn
dW1lbnRUeXBlczsKIAotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFBhcmFtZXRlclR5
cGVzJiBwYXJhbXMpCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRnVuY3Rpb25QYXJh
bWV0ZXJUeXBlcyYgcGFyYW1zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKHBh
cmFtcy5yZXR1cm5UeXBlcy5zaXplKCksIHBhcmFtcy5yZXR1cm5UeXBlcy5kYXRhKCksIHBhcmFt
cy5hcmd1bWVudFR5cGVzLnNpemUoKSwgcGFyYW1zLmFyZ3VtZW50VHlwZXMuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuIGNvbXB1dGVGdW5jU2lnbmF0dXJlSGFzaChwYXJhbXMucmV0dXJuVHlwZXMu
c2l6ZSgpLCBwYXJhbXMucmV0dXJuVHlwZXMuZGF0YSgpLCBwYXJhbXMuYXJndW1lbnRUeXBlcy5z
aXplKCksIHBhcmFtcy5hcmd1bWVudFR5cGVzLmRhdGEoKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgU2lnbmF0dXJlSGFzaCYgc2lnLCBjb25zdCBQYXJhbWV0ZXJUeXBl
cyYgcGFyYW1zKQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFNpZ25hdHVyZUhhc2gmIHNp
ZywgY29uc3QgRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyYgcGFyYW1zKQogICAgIHsKKyAgICAgICAg
aWYgKHNpZy5rZXktPmlzU3RydWN0U2lnbmF0dXJlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKICAgICAgICAgaWYgKHNpZy5rZXktPmFyZ3VtZW50Q291bnQoKSAhPSBwYXJhbXMuYXJn
dW1lbnRUeXBlcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlm
IChzaWcua2V5LT5yZXR1cm5Db3VudCgpICE9IHBhcmFtcy5yZXR1cm5UeXBlcy5zaXplKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpZy5rZXktPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc2ln
LmtleS0+YXJndW1lbnQoaSkgIT0gcGFyYW1zLmFyZ3VtZW50VHlwZXNbaV0pCisgICAgICAgICAg
ICBpZiAoc2lnLmtleS0+YXJndW1lbnRUeXBlKGkpICE9IHBhcmFtcy5hcmd1bWVudFR5cGVzW2ld
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC0xNDgsMjIg
KzE4OCw1OCBAQCBzdHJ1Y3QgUGFyYW1ldGVyVHlwZXMgewogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU2lnbmF0dXJlSGFzaCYgZW50cnks
IGNvbnN0IFBhcmFtZXRlclR5cGVzJiBwYXJhbXMsIHVuc2lnbmVkKQorICAgIHN0YXRpYyB2b2lk
IHRyYW5zbGF0ZShTaWduYXR1cmVIYXNoJiBlbnRyeSwgY29uc3QgRnVuY3Rpb25QYXJhbWV0ZXJU
eXBlcyYgcGFyYW1zLCB1bnNpZ25lZCkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxTaWduYXR1cmU+
IHNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlKHBhcmFtcy5yZXR1cm5UeXBlcy5zaXpl
KCksIHBhcmFtcy5hcmd1bWVudFR5cGVzLnNpemUoKSk7CisgICAgICAgIFJlZlB0cjxTaWduYXR1
cmU+IHNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3JlYXRlRnVuY1NpZ25hdHVyZShwYXJhbXMu
cmV0dXJuVHlwZXMuc2l6ZSgpLCBwYXJhbXMuYXJndW1lbnRUeXBlcy5zaXplKCkpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzaWduYXR1cmUpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwYXJhbXMucmV0dXJuVHlwZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBzaWdu
YXR1cmUtPmdldFJldHVyblR5cGUoaSkgPSBwYXJhbXMucmV0dXJuVHlwZXNbaV07CiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtcy5hcmd1bWVudFR5cGVzLnNpemUoKTsg
KytpKQotICAgICAgICAgICAgc2lnbmF0dXJlLT5nZXRBcmd1bWVudChpKSA9IHBhcmFtcy5hcmd1
bWVudFR5cGVzW2ldOworICAgICAgICAgICAgc2lnbmF0dXJlLT5nZXRBcmd1bWVudFR5cGUoaSkg
PSBwYXJhbXMuYXJndW1lbnRUeXBlc1tpXTsKKworICAgICAgICBlbnRyeS5rZXkgPSBXVEZNb3Zl
KHNpZ25hdHVyZSk7CisgICAgfQorfTsKKworc3RydWN0IFN0cnVjdFBhcmFtZXRlclR5cGVzIHsK
KyAgICBjb25zdCBWZWN0b3I8U3RydWN0RmllbGQ+JiBmaWVsZHM7CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBTdHJ1Y3RQYXJhbWV0ZXJUeXBlcyYgcGFyYW1zKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvbXB1dGVTdHJ1Y3RTaWduYXR1cmVIYXNoKHBhcmFtcy5maWVsZHMuc2l6
ZSgpLCBwYXJhbXMuZmllbGRzLmRhdGEoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgU2lnbmF0dXJlSGFzaCYgc2lnLCBjb25zdCBTdHJ1Y3RQYXJhbWV0ZXJUeXBlcyYg
cGFyYW1zKQorICAgIHsKKyAgICAgICAgaWYgKHNpZy5rZXktPmlzRnVuY1NpZ25hdHVyZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChzaWcua2V5LT5maWVsZENv
dW50KCkgIT0gcGFyYW1zLmZpZWxkcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZy5rZXktPmZpZWxkQ291bnQo
KTsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2lnLmtleS0+ZmllbGQoaSkgIT0gcGFyYW1zLmZp
ZWxkc1tpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU2ln
bmF0dXJlSGFzaCYgZW50cnksIGNvbnN0IFN0cnVjdFBhcmFtZXRlclR5cGVzJiBwYXJhbXMsIHVu
c2lnbmVkKQorICAgIHsKKyAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gU2ln
bmF0dXJlOjp0cnlDcmVhdGVTdHJ1Y3RTaWduYXR1cmUocGFyYW1zLmZpZWxkcy5zaXplKCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzaWduYXR1cmUpOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwYXJhbXMuZmllbGRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgc2ln
bmF0dXJlLT5nZXRGaWVsZChpKSA9IHBhcmFtcy5maWVsZHNbaV07CiAKICAgICAgICAgZW50cnku
a2V5ID0gV1RGTW92ZShzaWduYXR1cmUpOwogICAgIH0KIH07CiAKLVJlZlB0cjxTaWduYXR1cmU+
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1cmVGb3IoY29uc3QgVmVjdG9yPFR5cGUsIDE+
JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCitSZWZQdHI8U2lnbmF0dXJlPiBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6dHlwZVNpZ25hdHVyZUZvckZ1bmN0aW9uKGNvbnN0IFZlY3Rv
cjxUeXBlLCAxPiYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGU+JiBhcmdzKQogewogICAgIGlm
IGNvbnN0ZXhwciAoQVNTRVJUX0VOQUJMRUQpIHsKICAgICAgICAgQVNTRVJUKCFyZXN1bHRzLmNv
bnRhaW5zKFdhc206OlR5cGVzOjpWb2lkKSk7CkBAIC0xNzIsNyArMjQ4LDE2IEBAIFJlZlB0cjxT
aWduYXR1cmU+IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaWduYXR1cmVGb3IoY29uc3QgVmVjdG9y
PFR5cGUsIDE+JiByZXN1CiAgICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0
b24oKTsKICAgICBMb2NrZXIgbG9ja2VyIHsgaW5mby5tX2xvY2sgfTsKIAotICAgIGF1dG8gYWRk
UmVzdWx0ID0gaW5mby5tX3NpZ25hdHVyZVNldC50ZW1wbGF0ZSBhZGQ8UGFyYW1ldGVyVHlwZXM+
KFBhcmFtZXRlclR5cGVzIHsgcmVzdWx0cywgYXJncyB9KTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9
IGluZm8ubV9zaWduYXR1cmVTZXQudGVtcGxhdGUgYWRkPEZ1bmN0aW9uUGFyYW1ldGVyVHlwZXM+
KEZ1bmN0aW9uUGFyYW1ldGVyVHlwZXMgeyByZXN1bHRzLCBhcmdzIH0pOworICAgIHJldHVybiBh
ZGRSZXN1bHQuaXRlcmF0b3ItPmtleTsKK30KKworUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJl
SW5mb3JtYXRpb246OnR5cGVTaWduYXR1cmVGb3JTdHJ1Y3QoY29uc3QgVmVjdG9yPFN0cnVjdEZp
ZWxkPiYgZmllbGRzKQoreworICAgIFNpZ25hdHVyZUluZm9ybWF0aW9uJiBpbmZvID0gc2luZ2xl
dG9uKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGluZm8ubV9sb2NrIH07CisKKyAgICBhdXRvIGFk
ZFJlc3VsdCA9IGluZm8ubV9zaWduYXR1cmVTZXQudGVtcGxhdGUgYWRkPFN0cnVjdFBhcmFtZXRl
clR5cGVzPihTdHJ1Y3RQYXJhbWV0ZXJUeXBlcyB7IGZpZWxkcyB9KTsKICAgICByZXR1cm4gYWRk
UmVzdWx0Lml0ZXJhdG9yLT5rZXk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TaWduYXR1cmUuaAppbmRleCAzYWNlOWFmYjE3NTc4OTY2MzgyYTcwYjk1MGVjYjM4YjlmNDcw
NmY2Li4xMWY0OTFkNzc0OWIwNjUwNjQ1MWVmYjRmNzY0ZjFjZjYyZGNjMDQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCkBAIC0yNyw2ICsyNyw4IEBACiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlIDx2YXJpYW50PgorCiAjaW5jbHVk
ZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC00MSwzNSArNDMsODggQEAgbmFtZXNwYWNlIEpTQyB7CiBu
YW1lc3BhY2UgV2FzbSB7CiAKIHVzaW5nIFNpZ25hdHVyZUFyZ0NvdW50ID0gdWludDMyX3Q7Cit1
c2luZyBTaWduYXR1cmVGaWVsZENvdW50ID0gdWludDMyX3Q7CisKKy8vIEZJWE1FIGF1dG8tZ2Vu
ZXJhdGUgdGhpcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTIz
MQorZW51bSBNdXRhYmlsaXR5IDogdWludDhfdCB7CisgICAgTXV0YWJsZSA9IDEsCisgICAgSW1t
dXRhYmxlID0gMAorfTsKKworc3RydWN0IEZ1bmNTaWduYXR1cmVIZWFkZXIgeworICAgIFNpZ25h
dHVyZUFyZ0NvdW50IG1fcmV0Q291bnQ7CisgICAgU2lnbmF0dXJlQXJnQ291bnQgbV9hcmdDb3Vu
dDsKK307CisKK3N0cnVjdCBTdHJ1Y3RTaWduYXR1cmVIZWFkZXIgeworICAgIFNpZ25hdHVyZUZp
ZWxkQ291bnQgbV9maWVsZENvdW50OworfTsKKworc3RydWN0IFN0cnVjdEZpZWxkIHsKKyAgICBU
eXBlIHR5cGU7CisgICAgTXV0YWJpbGl0eSBtdXRhYmlsaXR5OworCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0cnVjdEZpZWxkJiByaHMpIGNvbnN0IHsgcmV0dXJuIHR5cGUgPT0gcmhzLnR5
cGUgJiYgbXV0YWJpbGl0eSA9PSByaHMubXV0YWJpbGl0eTsgfQorICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBTdHJ1Y3RGaWVsZCYgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHJocyk7
IH0KK307CiAKIGNsYXNzIFNpZ25hdHVyZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxT
aWduYXR1cmU+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogICAgIFNpZ25hdHVy
ZSgpID0gZGVsZXRlOwogICAgIFNpZ25hdHVyZShjb25zdCBTaWduYXR1cmUmKSA9IGRlbGV0ZTsK
KworICAgIC8vIEZ1bmN0aW9ucyBzaWduYXR1cmUgbWV0aG9kcwogICAgIFNpZ25hdHVyZShTaWdu
YXR1cmVBcmdDb3VudCByZXRDb3VudCwgU2lnbmF0dXJlQXJnQ291bnQgYXJnQ291bnQpCi0gICAg
ICAgIDogbV9yZXRDb3VudChyZXRDb3VudCkKLSAgICAgICAgLCBtX2FyZ0NvdW50KGFyZ0NvdW50
KQorICAgICAgICA6IG1fc2lnbmF0dXJlSGVhZGVyIHsgRnVuY1NpZ25hdHVyZUhlYWRlciB7IHJl
dENvdW50LCBhcmdDb3VudCB9IH0KICAgICB7CiAgICAgfQogCi0gICAgVHlwZSogc3RvcmFnZShT
aWduYXR1cmVBcmdDb3VudCBpKQorICAgIFR5cGUqIHN0b3JhZ2VGdW5jdGlvbihTaWduYXR1cmVB
cmdDb3VudCBpKSB7IEFTU0VSVChpc0Z1bmNTaWduYXR1cmUoKSk7ICByZXR1cm4gaSArIHJlaW50
ZXJwcmV0X2Nhc3Q8VHlwZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc2l6ZW9m
KFNpZ25hdHVyZSkpOyB9CisgICAgVHlwZSogc3RvcmFnZUZ1bmN0aW9uKFNpZ25hdHVyZUFyZ0Nv
dW50IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U2lnbmF0dXJlKj4odGhpcyktPnN0b3Jh
Z2VGdW5jdGlvbihpKTsgfQorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGVkRnVuY1NpemUoQ2hl
Y2tlZDxTaWduYXR1cmVBcmdDb3VudD4gcmV0Q291bnQsIENoZWNrZWQ8U2lnbmF0dXJlQXJnQ291
bnQ+IGFyZ0NvdW50KSB7IHJldHVybiBzaXplb2YoU2lnbmF0dXJlKSArIChyZXRDb3VudCArIGFy
Z0NvdW50KSAqIHNpemVvZihUeXBlKTsgfQorCisgICAgLy8gU3RydWN0cyBzaWduYXR1cmUgbWV0
aG9kcworICAgIFNpZ25hdHVyZShTaWduYXR1cmVGaWVsZENvdW50IGZpZWxkQ291bnQpCisgICAg
ICAgIDogbV9zaWduYXR1cmVIZWFkZXIgeyBTdHJ1Y3RTaWduYXR1cmVIZWFkZXIgeyBmaWVsZENv
dW50IH0gfQogICAgIHsKLSAgICAgICAgcmV0dXJuIGkgKyByZWludGVycHJldF9jYXN0PFR5cGUq
PihyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArIHNpemVvZihTaWduYXR1cmUpKTsKICAg
ICB9Ci0gICAgVHlwZSogc3RvcmFnZShTaWduYXR1cmVBcmdDb3VudCBpKSBjb25zdCB7IHJldHVy
biBjb25zdF9jYXN0PFNpZ25hdHVyZSo+KHRoaXMpLT5zdG9yYWdlKGkpOyB9Ci0gICAgc3RhdGlj
IHNpemVfdCBhbGxvY2F0ZWRTaXplKENoZWNrZWQ8U2lnbmF0dXJlQXJnQ291bnQ+IHJldENvdW50
LCBDaGVja2VkPFNpZ25hdHVyZUFyZ0NvdW50PiBhcmdDb3VudCkKKworICAgIFN0cnVjdEZpZWxk
KiBzdG9yYWdlU3RydWN0KFNpZ25hdHVyZUZpZWxkQ291bnQgaSkgeyByZXR1cm4gaSArIHJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0RmllbGQqPihyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSAr
IHNpemVvZihTaWduYXR1cmUpKTsgfQorICAgIFN0cnVjdEZpZWxkKiBzdG9yYWdlU3RydWN0KFNp
Z25hdHVyZUZpZWxkQ291bnQgaSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxTaWduYXR1cmUq
Pih0aGlzKS0+c3RvcmFnZVN0cnVjdChpKTsgfQorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGVk
U3RydWN0U2l6ZShTaWduYXR1cmVGaWVsZENvdW50IGZpZWxkQ291bnQpIHsgcmV0dXJuIHNpemVv
ZihTaWduYXR1cmUpICsgZmllbGRDb3VudCAqIHNpemVvZihTdHJ1Y3RGaWVsZCk7IH0KKworcHVi
bGljOgorICAgIC8vIEZ1bmN0aW9ucyBzaWduYXR1cmUgbWV0aG9kcy4KKyAgICBib29sIGlzRnVu
Y1NpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8RnVuY1Np
Z25hdHVyZUhlYWRlcj4obV9zaWduYXR1cmVIZWFkZXIpOyB9CisgICAgU2lnbmF0dXJlQXJnQ291
bnQgcmV0dXJuQ291bnQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHNpemVvZihTaWdu
YXR1cmUpICsgKHJldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9mKFR5cGUpOworICAgICAgICBB
U1NFUlQoaXNGdW5jU2lnbmF0dXJlKCkpOworICAgICAgICByZXR1cm4gc3RkOjpnZXRfaWY8RnVu
Y1NpZ25hdHVyZUhlYWRlcj4oJm1fc2lnbmF0dXJlSGVhZGVyKS0+bV9yZXRDb3VudDsKICAgICB9
CiAKLXB1YmxpYzoKLSAgICBTaWduYXR1cmVBcmdDb3VudCByZXR1cm5Db3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmV0Q291bnQ7IH0KLSAgICBTaWduYXR1cmVBcmdDb3VudCBhcmd1bWVudENvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9hcmdDb3VudDsgfQorICAgIFNpZ25hdHVyZUFyZ0NvdW50IGFy
Z3VtZW50Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRnVuY1NpZ25hdHVy
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0X2lmPEZ1bmNTaWduYXR1cmVIZWFkZXI+KCZt
X3NpZ25hdHVyZUhlYWRlciktPm1fYXJnQ291bnQ7CisgICAgfQogCiAgICAgVHlwZSByZXR1cm5U
eXBlKFNpZ25hdHVyZUFyZ0NvdW50IGkpIGNvbnN0IHsgQVNTRVJUKGkgPCByZXR1cm5Db3VudCgp
KTsgcmV0dXJuIGNvbnN0X2Nhc3Q8U2lnbmF0dXJlKj4odGhpcyktPmdldFJldHVyblR5cGUoaSk7
IH0KICAgICBib29sIHJldHVybnNWb2lkKCkgY29uc3QgeyByZXR1cm4gIXJldHVybkNvdW50KCk7
IH0KLSAgICBUeXBlIGFyZ3VtZW50KFNpZ25hdHVyZUFyZ0NvdW50IGkpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0X2Nhc3Q8U2lnbmF0dXJlKj4odGhpcyktPmdldEFyZ3VtZW50KGkpOyB9CisgICAgVHlw
ZSBhcmd1bWVudFR5cGUoU2lnbmF0dXJlQXJnQ291bnQgaSkgY29uc3QgeyByZXR1cm4gY29uc3Rf
Y2FzdDxTaWduYXR1cmUqPih0aGlzKS0+Z2V0QXJndW1lbnRUeXBlKGkpOyB9CisKKyAgICAvLyBT
dHJ1Y3RzIHNpZ25hdHVyZSBtZXRob2RzLgorICAgIGJvb2wgaXNTdHJ1Y3RTaWduYXR1cmUoKSBj
b25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cnVjdFNpZ25hdHVyZUhlYWRl
cj4obV9zaWduYXR1cmVIZWFkZXIpOyB9CisKKyAgICBTaWduYXR1cmVBcmdDb3VudCBmaWVsZENv
dW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1N0cnVjdFNpZ25hdHVyZSgpKTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0X2lmPFN0cnVjdFNpZ25hdHVyZUhlYWRlcj4oJm1fc2ln
bmF0dXJlSGVhZGVyKS0+bV9maWVsZENvdW50OworICAgIH0KKworICAgIFN0cnVjdEZpZWxkIGZp
ZWxkKFNpZ25hdHVyZUZpZWxkQ291bnQgaSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxTaWdu
YXR1cmUqPih0aGlzKS0+Z2V0RmllbGQoaSk7IH0KKworICAgIC8vIENvbW1vbiBtZXRob2RzIGZv
ciBhbGwgc2lnbmF0dXJlcy4KICAgICBTaWduYXR1cmVJbmRleCBpbmRleCgpIGNvbnN0IHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDxTaWduYXR1cmVJbmRleD4odGhpcyk7IH0KIAogICAgIFdURjo6U3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC04MiwxNSArMTM3LDE4IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgU2lnbmF0dXJlSW5mb3JtYXRpb247Ci0gICAgZnJpZW5k
IHN0cnVjdCBQYXJhbWV0ZXJUeXBlczsKKyAgICBmcmllbmQgc3RydWN0IEZ1bmN0aW9uUGFyYW1l
dGVyVHlwZXM7CisgICAgZnJpZW5kIHN0cnVjdCBTdHJ1Y3RQYXJhbWV0ZXJUeXBlczsKIAotICAg
IHN0YXRpYyBSZWZQdHI8U2lnbmF0dXJlPiB0cnlDcmVhdGUoU2lnbmF0dXJlQXJnQ291bnQgcmV0
dXJuQ291bnQsIFNpZ25hdHVyZUFyZ0NvdW50IGFyZ3VtZW50Q291bnQpOwotICAgIFR5cGUmIGdl
dFJldHVyblR5cGUoU2lnbmF0dXJlQXJnQ291bnQgaSkgeyBBU1NFUlQoaSA8IHJldHVybkNvdW50
KCkpOyByZXR1cm4gKnN0b3JhZ2UoaSk7IH0KLSAgICBUeXBlJiBnZXRBcmd1bWVudChTaWduYXR1
cmVBcmdDb3VudCBpKSB7IEFTU0VSVChpIDwgYXJndW1lbnRDb3VudCgpKTsgcmV0dXJuICpzdG9y
YWdlKHJldHVybkNvdW50KCkgKyBpKTsgfQorICAgIHN0YXRpYyBSZWZQdHI8U2lnbmF0dXJlPiB0
cnlDcmVhdGVGdW5jU2lnbmF0dXJlKFNpZ25hdHVyZUFyZ0NvdW50IHJldHVybkNvdW50LCBTaWdu
YXR1cmVBcmdDb3VudCBhcmd1bWVudENvdW50KTsKKyAgICBUeXBlJiBnZXRSZXR1cm5UeXBlKFNp
Z25hdHVyZUFyZ0NvdW50IGkpIHsgQVNTRVJUKGkgPCByZXR1cm5Db3VudCgpKTsgcmV0dXJuICpz
dG9yYWdlRnVuY3Rpb24oaSk7IH0KKyAgICBUeXBlJiBnZXRBcmd1bWVudFR5cGUoU2lnbmF0dXJl
QXJnQ291bnQgaSkgeyBBU1NFUlQoaSA8IGFyZ3VtZW50Q291bnQoKSk7IHJldHVybiAqc3RvcmFn
ZUZ1bmN0aW9uKHJldHVybkNvdW50KCkgKyBpKTsgfQogCi0gICAgU2lnbmF0dXJlQXJnQ291bnQg
bV9yZXRDb3VudDsKLSAgICBTaWduYXR1cmVBcmdDb3VudCBtX2FyZ0NvdW50OwotICAgIC8vIFJl
dHVybiBUeXBlIGFuZCBhcmd1bWVudHMgYXJlIHN0b3JlZCBoZXJlLgorICAgIHN0YXRpYyBSZWZQ
dHI8U2lnbmF0dXJlPiB0cnlDcmVhdGVTdHJ1Y3RTaWduYXR1cmUoU2lnbmF0dXJlRmllbGRDb3Vu
dCk7CisgICAgU3RydWN0RmllbGQmIGdldEZpZWxkKFNpZ25hdHVyZUZpZWxkQ291bnQgaSkgeyBB
U1NFUlQoaSA8IGZpZWxkQ291bnQoKSk7IHJldHVybiAqc3RvcmFnZVN0cnVjdChpKTsgfQorCisg
ICAgc3RkOjp2YXJpYW50PEZ1bmNTaWduYXR1cmVIZWFkZXIsIFN0cnVjdFNpZ25hdHVyZUhlYWRl
cj4gbV9zaWduYXR1cmVIZWFkZXI7CisgICAgLy8gUGF5bG9hZCBpcyBzdG9yZWQgaGVyZS4KIH07
CiAKIHN0cnVjdCBTaWduYXR1cmVIYXNoIHsKQEAgLTEzNyw3ICsxOTUsOCBAQCBjbGFzcyBTaWdu
YXR1cmVJbmZvcm1hdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFNpZ25hdHVyZUluZm9ybWF0
aW9uJiBzaW5nbGV0b24oKTsKIAotICAgIHN0YXRpYyBSZWZQdHI8U2lnbmF0dXJlPiBzaWduYXR1
cmVGb3IoY29uc3QgVmVjdG9yPFR5cGUsIDE+JiByZXR1cm5UeXBlcywgY29uc3QgVmVjdG9yPFR5
cGU+JiBhcmd1bWVudFR5cGVzKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNpZ25hdHVyZT4gdHlwZVNp
Z25hdHVyZUZvckZ1bmN0aW9uKGNvbnN0IFZlY3RvcjxUeXBlLCAxPiYgcmV0dXJuVHlwZXMsIGNv
bnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRUeXBlcyk7CisgICAgc3RhdGljIFJlZlB0cjxTaWdu
YXR1cmU+IHR5cGVTaWduYXR1cmVGb3JTdHJ1Y3QoY29uc3QgVmVjdG9yPFN0cnVjdEZpZWxkPiYg
ZmllbGRzKTsKICAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IFNpZ25hdHVyZSogdGh1bmtGb3IoVHlw
ZSB0eXBlKSBjb25zdCB7IHJldHVybiB0aHVua1NpZ25hdHVyZXNbbGluZWFyaXplVHlwZSh0eXBl
LmtpbmQpXTsgfQogCiAgICAgc3RhdGljIGNvbnN0IFNpZ25hdHVyZSYgZ2V0KFNpZ25hdHVyZUlu
ZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcuaAppbmRleCBiZGZjZmI2ODhlMmQx
ZTk3OWFkMGNjZjRjMWFhZjA2Zjk5MjQwNTI0Li41ZTBhNjBhMzBhYmE4Mjg0MDE0MDM1MjQwYTI4
YzU1YWY2ZDVkNTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
VGFnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhZy5oCkBAIC0zOCw3
ICszOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFRhZz4gY3JlYXRlKGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFRhZyhzaWduYXR1cmUpKTsg
fQogCiAgICAgU2lnbmF0dXJlQXJnQ291bnQgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX3NpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyB9Ci0gICAgVHlwZSBwYXJhbWV0ZXIoU2ln
bmF0dXJlQXJnQ291bnQgaSkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkp
OyB9CisgICAgVHlwZSBwYXJhbWV0ZXIoU2lnbmF0dXJlQXJnQ291bnQgaSkgY29uc3QgeyByZXR1
cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50VHlwZShpKTsgfQogCiAgICAgLy8gU2luY2UgKDEpIHdl
IGRvIG5vdCBjb3B5IFdhc206OlRhZyBhbmQgKDIpIHdlIGFsd2F5cyBhbGxvY2F0ZSBXYXNtOjpU
YWcgZnJvbSBoZWFwLCB3ZSBjYW4gdXNlCiAgICAgLy8gcG9pbnRlciBjb21wYXJpc29uIGZvciBp
ZGVudGl0eSBjaGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTVG9XYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNw
cAppbmRleCAxZjQ2NGZlOThiYWQ4MzQ0MDRkMTEwMTg5ZGRjZjhmMjU0NDNiZDNhLi5jMmNhOGUx
MzYyMzE4ZDgzZjE1YzY4ZjQzYzBiYmJjNjI4ZDFiYTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc20uY3BwCkBAIC0yMzQsNyArMjM0LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7IGkrKykgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoanNGcmFt
ZUNvbnZlbnRpb24ucGFyYW1zW2ldLmlzU3RhY2soKSk7CiAKLSAgICAgICAgICAgIFR5cGUgdHlw
ZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgICAgIFR5cGUgdHlwZSA9IHNpZ25h
dHVyZS5hcmd1bWVudFR5cGUoaSk7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mg
anNQYXJhbShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNGcmFtZUNvbnZlbnRpb24ucGFy
YW1zW2ldLm9mZnNldEZyb21GUCgpKTsKICAgICAgICAgICAgIGlmICh3YXNtRnJhbWVDb252ZW50
aW9uLnBhcmFtc1tpXS5pc1N0YWNrQXJndW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGlmICh0
eXBlLmlzSTMyKCkgfHwgdHlwZS5pc0YzMigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCmluZGV4IGRlNDE0
MTkwNzM5ZDBjODI4ZmUwYjY3N2IxOTc1MWM2ZDg3NmYzMjEuLjg4MzdjZTdiMzgwNTk1YzBiNzUw
NDE4ZjkwODQzNDBjYjJiZjRiZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCkBAIC02MCw3ICs2MCw3IEBA
IHZvaWQgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBj
ZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzQ2FzdDxKU1dl
YkFzc2VtYmx5RXhjZXB0aW9uKj4oY2VsbCk7CiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBz
aWduYXR1cmUgPSBleGNlcHRpb24tPnRhZygpLnNpZ25hdHVyZSgpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAg
aWYgKGlzUmVmVHlwZShzaWduYXR1cmUuYXJndW1lbnQoaSkpKQorICAgICAgICBpZiAoaXNSZWZU
eXBlKHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPj4oZXhjZXB0aW9uLT5wYXlsb2Fk
KClbaV0pKTsKICAgICB9CiB9CkBAIC03Niw3ICs3Niw3IEBAIEpTVmFsdWUgSlNXZWJBc3NlbWJs
eUV4Y2VwdGlvbjo6Z2V0QXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVk
IGkpCiB7CiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSB0YWcoKS5zaWdu
YXR1cmUoKTsKICAgICBBU1NFUlQoaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOwotICAg
IHJldHVybiB0b0pTVmFsdWUoZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnQoaSksIHBh
eWxvYWQoKVtpXSk7CisgICAgcmV0dXJuIHRvSlNWYWx1ZShnbG9iYWxPYmplY3QsIHNpZ25hdHVy
ZS5hcmd1bWVudFR5cGUoaSksIHBheWxvYWQoKVtpXSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUdsb2JhbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
R2xvYmFsLmNwcAppbmRleCA5NzkwODkxMzM4YjQ0OTBjMmE0MDQxN2U2YzFmOWI1ZGY5Nzc5M2Nl
Li5iMjBhZTY3MzI3YTA5M2NiMWE5ZTUyYTZlN2UxODA4Njg3MTMyNTMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcApA
QCAtODgsNyArODgsNyBAQCBKU09iamVjdCogSlNXZWJBc3NlbWJseUdsb2JhbDo6dHlwZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSwgMik7CiAKLSAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIm11dGFibGUiKSwganNCb29sZWFuKG1fZ2xvYmFsLT5tdXRhYmlsaXR5KCkgPT0g
V2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFibGUpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm11dGFibGUiKSwganNCb29sZWFuKG1f
Z2xvYmFsLT5tdXRhYmlsaXR5KCkgPT0gV2FzbTo6TXV0YWJsZSkpOwogCiAgICAgV2FzbTo6VHlw
ZSB2YWx1ZVR5cGUgPSBtX2dsb2JhbC0+dHlwZSgpOwogICAgIEpTU3RyaW5nKiB2YWx1ZVN0cmlu
ZyA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAK
aW5kZXggMDhmZTFhNzg3MTMyNWE1YWZlM2UxNjE5ODU3ODY5ZDJhNjk5YTIyZC4uNGZlYjhlNzJl
YmZmZWIxMzhkY2Y5NzVkNjFmM2JjZjQ4ZGI2NjhlZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtMTAwLDEwICsxMDAsMTEgQEAgRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNt
VG9KUyhWTSYgdm0KICAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJh
bWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KTsKICAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3Vt
ZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAg
ICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAg
ICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShhcmdOdW0pOwogICAg
ICAgICAgICAgc3dpdGNoIChhcmdUeXBlLmtpbmQpIHsKICAgICAgICAgICAgIGNhc2UgVHlwZUtp
bmQ6OlZvaWQ6CiAgICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpGdW5jOgorICAgICAgICAgICAg
Y2FzZSBUeXBlS2luZDo6U3RydWN0OgogICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6UmVmTnVs
bDoKICAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlJlZjoKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgpAQCAtMTc0LDEwICsx
NzUsMTEgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4s
IEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgfTsKIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewot
ICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7Cisg
ICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRUeXBlKGFyZ051bSk7
CiAgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUua2luZCkgewogICAgICAgICAgICAgY2FzZSBU
eXBlS2luZDo6Vm9pZDoKICAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAgICAg
ICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6CiAgICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpS
ZWZOdWxsOgogICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6UmVmOgogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCkBAIC0yMzAs
NyArMjMyLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRh
Zz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgLy8gV2UgY2FsbCBm
dW5jdGlvbnMgdG8gY29udmVydCBJNjQgdG8gQmlnSW50LgogICAgICAgICB1bnNpZ25lZCBjYWxs
ZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9
IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgaWYgKHNpZ25h
dHVyZS5hcmd1bWVudChhcmdOdW0pLmlzSTY0KCkpIHsKKyAgICAgICAgICAgIGlmIChzaWduYXR1
cmUuYXJndW1lbnRUeXBlKGFyZ051bSkuaXNJNjQoKSkgewogICAgICAgICAgICAgICAgIGppdC5s
b2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICAg
ICAgICAgIGppdC5sb2FkNjQoY2FsbGVlRnJhbWUud2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNl
dCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkNvbnZlcnRUb0JpZ0ludCk+KEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1
Y3Rvci5jcHAKaW5kZXggMzdhNmZhMGJkNmZhNDU4NzUyNDhjODM1MDA3MWE2ZTY0MmZmMzIzOS4u
Yjc3NzVjZGI2ZGU2ZDRhM2Q5NTFhMzBlY2UzNjAyNDk0ZTIxYmQ2NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvci5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlFeGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCog
Z2xvYmEKICAgICAvLyBBbnkgR0MnZCB2YWx1ZXMgaW4gaGVyZSB3aWxsIGJlIG1hcmtlZCBieSB0
aGUgTWFya2VkQXJ1Z2VtZW50QnVmZmVyIHVudGlsIHN0b3JlZCBpbiB0aGUgRXhjZXB0aW9uLgog
ICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiBwYXlsb2FkKHZhbHVlcy5zaXplKCkpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcGF5
bG9hZFtpXSA9IGZyb21KU1ZhbHVlKGdsb2JhbE9iamVjdCwgdGFnLT5zaWduYXR1cmUoKS5hcmd1
bWVudChpKSwgdmFsdWVzLmF0KGkpKTsKKyAgICAgICAgcGF5bG9hZFtpXSA9IGZyb21KU1ZhbHVl
KGdsb2JhbE9iamVjdCwgdGFnLT5zaWduYXR1cmUoKS5hcmd1bWVudFR5cGUoaSksIHZhbHVlcy5h
dChpKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uY3BwCmluZGV4IGM3ODczNzNmN2M5MmRhYmY0ZDQxMDNjYWI3ZGNlODNmOGEzMDJkODMu
LjlkZDgzMThjNzJjNjZiMGUwNGQ2NzE2NjMzOTlkZTkzMjRkYzQyZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBA
IC03OCw3ICs3OCw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlG
dW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgV2FzbTo6SW5zdGFu
Y2UqIHdhc21JbnN0YW5jZSA9ICZpbnN0YW5jZS0+aW5zdGFuY2UoKTsKIAogICAgIGZvciAodW5z
aWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
ICsrYXJnSW5kZXgpIHsKLSAgICAgICAgdWludDY0X3QgdmFsdWUgPSBmcm9tSlNWYWx1ZShnbG9i
YWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCksIGNhbGxGcmFtZS0+YXJndW1l
bnQoYXJnSW5kZXgpKTsKKyAgICAgICAgdWludDY0X3QgdmFsdWUgPSBmcm9tSlNWYWx1ZShnbG9i
YWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoYXJnSW5kZXgpLCBjYWxsRnJhbWUtPmFy
Z3VtZW50KGFyZ0luZGV4KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKEpTVmFsdWU6OmRlY29k
ZSh2YWx1ZSkpOwogICAgIH0KQEAgLTI0Miw3ICsyNDIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNs
b3coKQogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MganNQYXJhbShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwganNDYWxsSW5mby5wYXJhbXNbaV0ub2Zmc2V0RnJvbUZQKCkpOwogICAg
ICAgICBib29sIGlzU3RhY2sgPSB3YXNtQ2FsbEluZm8ucGFyYW1zW2ldLmlzU3RhY2tBcmd1bWVu
dCgpOwogCi0gICAgICAgIGF1dG8gdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAg
ICAgYXV0byB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKTsKICAgICAgICAgc3dpdGNo
ICh0eXBlLmtpbmQpIHsKICAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOiB7CiAgICAg
ICAgICAgICBqaXQubG9hZDY0KGpzUGFyYW0sIHNjcmF0Y2hHUFIpOwpAQCAtMzA1LDcgKzMwNSw3
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgICAgICAgICAgICAgc2NyYXRjaEZQUiA9
IHdhc21DYWxsSW5mby5wYXJhbXNbaV0uZnByKCk7CiAgICAgICAgICAgICBhdXRvIG1vdmVUb0Rl
c3RpbmF0aW9uID0gWyZdICgpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNTdGFjaykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLmlzRjMyKCkpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLmlzRjMyKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVGbG9hdChzY3JhdGNoRlBSLCBjYWxsZWVG
cmFtZS53aXRoT2Zmc2V0KHdhc21DYWxsSW5mby5wYXJhbXNbaV0ub2Zmc2V0RnJvbVNQKCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlRG91YmxlKHNjcmF0Y2hGUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbUNhbGxJbmZv
LnBhcmFtc1tpXS5vZmZzZXRGcm9tU1AoKSkpOwpAQCAtMzE3LDEzICszMTcsMTMgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2Fs
bEVudHJ5cG9pbnRTbG93KCkKICAgICAgICAgICAgIGF1dG8gaXNJbnQzMiA9IGppdC5icmFuY2hJ
ZkludDMyKHNjcmF0Y2hHUFIpOwogCiAgICAgICAgICAgICBqaXQudW5ib3hEb3VibGUoc2NyYXRj
aEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7Ci0gICAgICAgICAgICBpZiAoc2lnbmF0dXJl
LmFyZ3VtZW50KGkpLmlzRjMyKCkpCisgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50
VHlwZShpKS5pc0YzMigpKQogICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9h
dChzY3JhdGNoRlBSLCBzY3JhdGNoRlBSKTsKICAgICAgICAgICAgIG1vdmVUb0Rlc3RpbmF0aW9u
KCk7CiAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqaXQuanVtcCgpOwogCiAgICAgICAgICAgICBp
c0ludDMyLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkp
LmlzRjMyKCkpIHsKKyAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLmlz
RjMyKCkpIHsKICAgICAgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9GbG9hdChzY3JhdGNo
R1BSLCBzY3JhdGNoRlBSKTsKICAgICAgICAgICAgICAgICBtb3ZlVG9EZXN0aW5hdGlvbigpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMGI5
NjMxZWE1NDY1NDVmNzZhMzJlODcyZDM5NzhlMGY1OGM4MDhlYy4uYThlMjBjNzkwMzdhNjQzN2Mx
ZjZmYmQ3YWExMjY5MDMyMmVlNDA0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAKQEAg
LTY2LDcgKzY2LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNz
ZW1ibHlHbG9iYWwsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAgICAgZ2xvYmFsRGVz
Y3JpcHRvciA9IGpzQ2FzdDxKU09iamVjdCo+KGFyZ3VtZW50KTsKICAgICB9CiAKLSAgICBXYXNt
OjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eSBtdXRhYmlsaXR5OworICAgIFdhc206Ok11
dGFiaWxpdHkgbXV0YWJpbGl0eTsKICAgICB7CiAgICAgICAgIElkZW50aWZpZXIgbXV0YWJsZUlk
ZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm11dGFibGUiKTsKICAgICAgICAgSlNW
YWx1ZSBtdXRhYmxlVmFsdWUgPSBnbG9iYWxEZXNjcmlwdG9yLT5nZXQoZ2xvYmFsT2JqZWN0LCBt
dXRhYmxlSWRlbnQpOwpAQCAtNzQsOSArNzQsOSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
Y29uc3RydWN0SlNXZWJBc3NlbWJseUdsb2JhbCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgog
ICAgICAgICBib29sIG11dGFibGVCb29sZWFuID0gbXV0YWJsZVZhbHVlLnRvQm9vbGVhbihnbG9i
YWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAobXV0YWJsZUJvb2xlYW4pCi0gICAgICAgICAgICBt
dXRhYmlsaXR5ID0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFibGU7CisgICAgICAgICAg
ICBtdXRhYmlsaXR5ID0gV2FzbTo6TXV0YWJsZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bXV0YWJpbGl0eSA9IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpJbW11dGFibGU7CisgICAgICAg
ICAgICBtdXRhYmlsaXR5ID0gV2FzbTo6SW1tdXRhYmxlOwogICAgIH0KIAogICAgIFdhc206OlR5
cGUgdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcAppbmRleCAxOGE0ZDFmOTFkZmZlNGQ0ODVi
YzY3Yzk5MTFiYjgwNGQyMzljZGExLi43MjhkY2E4MDA2ZDBmNzg1ZWUxYmU4MTNhYjI2ODcyNDEx
NjVhZDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUdsb2JhbFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5R2xvYmFsUHJvdG9TZXR0ZXJGdW5jVmFs
dWUsIChKU0dsb2JhbE9iamVjdCoKICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKiBnbG9iYWwgPSBn
ZXRHbG9iYWwoZ2xvYmFsT2JqZWN0LCB2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAg
IGlmIChnbG9iYWwtPmdsb2JhbCgpLT5tdXRhYmlsaXR5KCkgPT0gV2FzbTo6R2xvYmFsSW5mb3Jt
YXRpb246Ok11dGFiaWxpdHk6OkltbXV0YWJsZSkKKyAgICBpZiAoZ2xvYmFsLT5nbG9iYWwoKS0+
bXV0YWJpbGl0eSgpID09IFdhc206Ok11dGFiaWxpdHk6OkltbXV0YWJsZSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJXZWJBc3NlbWJseS5HbG9iYWwucHJv
dG90eXBlLnZhbHVlIGF0dGVtcHRzIHRvIG1vZGlmeSBpbW11dGFibGUgZ2xvYmFsIHZhbHVlIl9z
KSkpOwogCiAgICAgZ2xvYmFsLT5nbG9iYWwoKS0+c2V0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5kZXggN2ZhODFlNzk3MzJiMjI1NTYz
MmE3NDhmNjkyZWJhYWI5ODNkNWY3Yi4uMTE0YzE3OGFlZDYwMWJiYmNiNmRiMzdlZWQ5MDBhOWJk
MTczMTdiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtMjM3LDEyICsyMzcsMTIgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUltcG9ydHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlMKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2Jh
bDogewogICAgICAgICAgICAgLy8gNS4gSWYgaSBpcyBhIGdsb2JhbCBpbXBvcnQ6CiAgICAgICAg
ICAgICBjb25zdCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbiYgZ2xvYmFsID0gbW9kdWxlSW5mb3Jt
YXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XTsKLSAgICAgICAgICAgIGlmIChnbG9iYWwu
bXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6SW1tdXRhYmxlKSB7CisgICAg
ICAgICAgICBpZiAoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6SW1tdXRhYmxlKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLmluaGVyaXRzPEpTV2ViQXNzZW1ibHlHbG9iYWw+KHZtKSkg
ewogICAgICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKiBnbG9iYWxWYWx1ZSA9
IGpzQ2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4odmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoZ2xvYmFsVmFsdWUtPmdsb2JhbCgpLT50eXBlKCkgIT0gZ2xvYmFsLnR5cGUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlM
aW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1w
b3J0ZWQgZ2xvYmFsIiwgIm11c3QgYmUgYSBzYW1lIHR5cGUiKSkpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoZ2xvYmFsVmFsdWUtPmdsb2JhbCgpLT5tdXRhYmlsaXR5KCkgIT0gV2FzbTo6R2xv
YmFsSW5mb3JtYXRpb246OkltbXV0YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2Jh
bFZhbHVlLT5nbG9iYWwoKS0+bXV0YWJpbGl0eSgpICE9IFdhc206OkltbXV0YWJsZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBv
cnRlZCBnbG9iYWwiLCAibXVzdCBiZSBhIHNhbWUgbXV0YWJpbGl0eSIpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGF1dG8mIGRlY2xhcmVkR2xvYmFsVHlwZSA9IG1vZHVsZUluZm9ybWF0
aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZTsKICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChkZWNsYXJlZEdsb2JhbFR5cGUua2luZCkgewpAQCAtNTQ5LDggKzU0OSw4IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVFeHBvcnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6
UG9ydGFibGU6IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0g
V2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOwotICAgICAgICAg
ICAgICAgIFJlZjxXYXNtOjpHbG9iYWw+IGdsb2JhbFJlZiA9IFdhc206Okdsb2JhbDo6Y3JlYXRl
KGdsb2JhbC50eXBlLCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJs
ZSwgaW5pdGlhbEJpdHMpOworICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0
eSA9PSBXYXNtOjpNdXRhYmxlKTsKKyAgICAgICAgICAgICAgICBSZWY8V2FzbTo6R2xvYmFsPiBn
bG9iYWxSZWYgPSBXYXNtOjpHbG9iYWw6OmNyZWF0ZShnbG9iYWwudHlwZSwgV2FzbTo6TXV0YWJp
bGl0eTo6TXV0YWJsZSwgaW5pdGlhbEJpdHMpOwogICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1i
bHlHbG9iYWwqIGdsb2JhbFZhbHVlID0gSlNXZWJBc3NlbWJseUdsb2JhbDo6dHJ5Q3JlYXRlKGds
b2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlHbG9iYWxTdHJ1Y3R1cmUo
KSwgV1RGTW92ZShnbG9iYWxSZWYpKTsKICAgICAgICAgICAgICAgICBzY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPmxpbmtHbG9iYWwodm0sIGds
b2JhbEluZGV4LCBnbG9iYWxWYWx1ZSk7CkBAIC02MDUsMTIgKzYwNSwxMiBAQCB2b2lkIFdlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogICAgICAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNXZWJBc3Nl
bWJseUdsb2JhbDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2Vi
QXNzZW1ibHlHbG9iYWxTdHJ1Y3R1cmUoKSwgV1RGTW92ZShnbG9iYWxSZWYpKTsKICAgICAgICAg
ICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0g
V2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6TXV0YWJpbGl0eTo6
TXV0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxXYXNtOjpHbG9iYWw+IGdsb2Jh
bFJlZiA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuZ2V0R2xvYmFsQmluZGluZyhleHAua2luZElu
ZGV4KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbFJlZik7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChnbG9iYWxSZWYtPnR5cGUoKSA9PSBnbG9iYWwudHlwZSk7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxSZWYtPm11dGFiaWxpdHkoKSA9PSBnbG9iYWwu
bXV0YWJpbGl0eSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxSZWYtPm11dGFi
aWxpdHkoKSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxSZWYtPm11dGFiaWxpdHkoKSA9PSBX
YXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGds
b2JhbFJlZi0+b3duZXI8SlNXZWJBc3NlbWJseUdsb2JhbD4oKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGV4cG9ydGVkVmFsdWUgPSBnbG9iYWxSZWYtPm93bmVyPEpTV2ViQXNzZW1ibHlHbG9iYWw+
KCk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcAppbmRleCA3NGRhMDVm
MjcxNzVkZTI4OTBjNTljZmJhMDU4NmJhOWU1YTkwMDM4Li5lMGI3NTRmOTgzYjRkN2JjMjBiNDQ5
NDdmOWU1OWY3ODBkZDhhNzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcApAQCAtODQsNyArODQs
NyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZywg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgIH0pOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBSZWZQdHI8V2FzbTo6U2lnbmF0dXJlPiBzaWduYXR1
cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlRm9yKHsgfSwgcGFyYW1l
dGVycyk7CisgICAgUmVmUHRyPFdhc206OlNpZ25hdHVyZT4gc2lnbmF0dXJlID0gV2FzbTo6U2ln
bmF0dXJlSW5mb3JtYXRpb246OnR5cGVTaWduYXR1cmVGb3JGdW5jdGlvbih7IH0sIHBhcmFtZXRl
cnMpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNDX0dFVF9ERVJJVkVEX1NUUlVDVFVS
RSh2bSwgd2ViQXNzZW1ibHlUYWdTdHJ1Y3R1cmUsIGFzT2JqZWN0KGNhbGxGcmFtZS0+bmV3VGFy
Z2V0KCkpLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206OlRhZzo6Y3JlYXRlKCpzaWduYXR1cmUpLmdldCgpKSkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCmluZGV4IGNhYmRlMjBhZWNlYTYz
NDUzOWNkODBiNGNhMWExMzEzODgzNmExMDguLmM2ZWU2N2ZkMGUwYzBiNDVjZjgzMGI0ZDM3NGQx
ZTI2YWY0NTQ0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20u
anNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KQEAgLTE2LDYg
KzE2LDcgQEAKICAgICAgICAgInJlZl9udWxsIjogIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1
ZSI6ICAtMjAsICJiM3R5cGUiOiAiQjM6OkludDY0IiB9LAogICAgICAgICAicmVmIjogICAgICAg
eyAidHlwZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0yMSwgImIzdHlwZSI6ICJCMzo6SW50NjQi
IH0sCiAgICAgICAgICJmdW5jIjogICAgICB7ICJ0eXBlIjogInZhcmludDciLCAidmFsdWUiOiAg
LTMyLCAiYjN0eXBlIjogIkIzOjpWb2lkIiB9LAorICAgICAgICAic3RydWN0IjogICAgeyAidHlw
ZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0zMywgImIzdHlwZSI6ICJCMzo6Vm9pZCIgfSwKICAg
ICAgICAgInZvaWQiOiAgICAgIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6ICAtNjQsICJi
M3R5cGUiOiAiQjM6OlZvaWQiIH0KICAgICB9LAogICAgICJ2YWx1ZV90eXBlIjogWyJpMzIiLCAi
aTY0IiwgImYzMiIsICJmNjQiLCAiZXh0ZXJucmVmIiwgImZ1bmNyZWYiXSwKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzZmNTkyNmVhNmZj
MGY1Y2U0NzQyZTQ2MTljNTE0YTZhN2E4ODczYi4uNDBkZWE4OTQxZDY5YjM5MDRmNWQwYjY4NDRk
OTExMDMzYzBlMGUxNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMi0wMi0yMiAgRG1pdHJ5IEJlemhldHNr
b3YgIDxkYmV6aGV0c2tvdkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXQVNNLUdDXSBXSVA6IGlu
dHJvZHVjZSBzdHJ1Y3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzcwMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAg
ICAgICAgCisgICAgICAgIEFkZGVkIHN0cnVjdHMgZGVjbGFyYXRpb24gdGVzdHMuCisKKyAgICAg
ICAgKiB3YXNtLnlhbWw6CisgICAgICAgICogd2FzbS9nYy9zdHJ1Y3RzLmpzOiBBZGRlZC4KKyAg
ICAgICAgKG1vZHVsZSk6CisgICAgICAgICh0ZXN0U3RydWN0RGVjbGFyYXRpb24pOgorICAgICAg
ICAqIHdhc20vd2FzbS5qc29uOgorCiAyMDIyLTAyLTE5ICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI5MDE5
NCBhbmQgcjI5MDIxMC4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS55YW1sIGIvSlNUZXN0cy93
YXNtLnlhbWwKaW5kZXggYWVlYmJjMDRjZDlkODQ4NzRmMjM0MWExYjExOGJjOWNlYmEzZWFmZC4u
OWNkNDBlYmY5OGI5MzlmMWIwZjdiNzQwMmU2ZDAxNTEzMGE0OTQ4MiAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy93YXNtLnlhbWwKKysrIGIvSlNUZXN0cy93YXNtLnlhbWwKQEAgLTM1LDYgKzM1LDggQEAK
ICAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAtIHBh
dGg6IHdhc20vZnVuY3Rpb24tcmVmZXJlbmNlcwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUg
dW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKKy0gcGF0aDogd2FzbS9nYworICBjbWQ6IHJ1bldlYkFz
c2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9mdXp6CiAg
IGNtZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogLSBwYXRo
OiB3YXNtL2xvd0V4ZWN1dGFibGVNZW1vcnkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9nYy9z
dHJ1Y3RzLmpzIGIvSlNUZXN0cy93YXNtL2djL3N0cnVjdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjM4YjIy
MTMxMTk5MjE3MDM5MmI0YmQwZjU2MWMyNmZiMDE3Y2QyMwotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvd2FzbS9nYy9zdHJ1Y3RzLmpzCkBAIC0wLDAgKzEsODMgQEAKKy8vQCBydW5XZWJBc3Nl
bWJseVN1aXRlKCItLXVzZVdlYkFzc2VtYmx5VHlwZWRGdW5jdGlvblJlZmVyZW5jZXM9dHJ1ZSIs
ICItLXVzZVdlYkFzc2VtYmx5R0M9dHJ1ZSIpCisKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICIu
Li9hc3NlcnQuanMiOworaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tICIuLi93YWJ0LXdyYXBw
ZXIuanMiOworCitmdW5jdGlvbiBtb2R1bGUoYnl0ZXMsIHZhbGlkID0gdHJ1ZSkgeworICBsZXQg
YnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVzLmxlbmd0aCk7CisgIGxldCB2aWV3ID0gbmV3
IFVpbnQ4QXJyYXkoYnVmZmVyKTsKKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7
ICsraSkgeworICAgIHZpZXdbaV0gPSBieXRlcy5jaGFyQ29kZUF0KGkpOworICB9CisgIHJldHVy
biBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1ZmZlcik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTdHJ1
Y3REZWNsYXJhdGlvbigpIHsKKyAgLyoKKyAgICogKG1vZHVsZQorICAgKiAgICh0eXBlIChzdHJ1
Y3QpKQorICAgKiApCisgICAqLworICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKCJc
eDAwXHg2MVx4NzNceDZkXHgwMVx4MDBceDAwXHgwMFx4MDFceDAzXHgwMVx4NWZceDAwIikpOwor
CisgIC8qCisgICAqIChtb2R1bGUKKyAgICogICAodHlwZSAoc3RydWN0IChmaWVsZCBpMzIpKSkK
KyAgICogKQorICAgKi8KKyAgbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSgiXHgwMFx4
NjFceDczXHg2ZFx4MDFceDAwXHgwMFx4MDBceDAxXHgwNVx4MDFceDVmXHgwMVx4N2ZceDAwIikp
OworCisgIC8qCisgICAqIChtb2R1bGUKKyAgICogICAodHlwZSAoc3RydWN0IChmaWVsZCBpMzIp
IChmaWVsZCBpMzIpKSkKKyAgICogKQorICAgKi8KKyAgbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl
KG1vZHVsZSgiXHgwMFx4NjFceDczXHg2ZFx4MDFceDAwXHgwMFx4MDBceDAxXHgwN1x4MDFceDVm
XHgwMlx4N2ZceDAwXHg3Zlx4MDAiKSk7CisKKyAgLyoKKyAgICogKG1vZHVsZQorICAgKiAgICh0
eXBlIChzdHJ1Y3QgKGZpZWxkIChtdXQgaTMyKSkpKQorICAgKiApCisgICAqLworICBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKCJceDAwXHg2MVx4NzNceDZkXHgwMVx4MDBceDAwXHgw
MFx4MDFceDA1XHgwMVx4NWZceDAxXHg3Zlx4MDEiKSk7CisKKyAgLyoKKyAgICogKG1vZHVsZQor
ICAgKiAgICh0eXBlICRQb2ludCAoc3RydWN0IChmaWVsZCAobXV0IGkzMikgKG11dCBpMzIpKSkp
CisgICAqICAgKHR5cGUgJExpbmUgKHN0cnVjdCAoZmllbGQgKG11dCAocmVmICRQb2ludCkpICht
dXQgKHJlZiAkUG9pbnQpKSkpKQorICAgKiApCisgICAqLworICBuZXcgV2ViQXNzZW1ibHkuSW5z
dGFuY2UobW9kdWxlKCJceDAwXHg2MVx4NzNceDZkXHgwMVx4MDBceDAwXHgwMFx4MDFceDBmXHgw
Mlx4NWZceDAyXHg3Zlx4MDFceDdmXHgwMVx4NWZceDAyXHg2Ylx4MDBceDAxXHg2Ylx4MDBceDAx
IikpOworCisgIC8qCisgICAqIHRvbyBtYW55IGZpZWxkcworICAgKiAobW9kdWxlCisgICAqICAg
KHR5cGUgKHN0cnVjdCAoZmllbGQgaTMyKSkpCisgICAqICkKKyAgICovCisgIGFzc2VydC50aHJv
d3MoCisgICAgKCkgPT4KKyAgICAgIG1vZHVsZSgKKyAgICAgICAgIlx4MDBceDYxXHg3M1x4NmRc
eDAxXHgwMFx4MDBceDAwXHgwMVx4MDdceDAxXHg1Zlx4ZmZceGZmXHhmZlx4N2ZceDAwIgorICAg
ICAgKSwKKyAgICBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsCisgICAgIldlYkFzc2VtYmx5Lk1v
ZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTY6IG51bWJlciBvZiBmaWVsZHMgZm9yIHN0cnVj
dCB0eXBlIGF0IHBvc2l0aW9uIDAgaXMgdG9vIGJpZyAyNjg0MzU0NTUgbWF4aW11bSAxMDAwMDAw
IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1ZmZlciknKSIKKyAgKTsKKwor
ICAvKgorICAgKiBpbnZhbGlkIG11dGFiaWxpdHkKKyAgICogKG1vZHVsZQorICAgKiAgICh0eXBl
IChzdHJ1Y3QgKGZpZWxkIChtdXQgaTMyKSkpKQorICAgKiApCisgICAqLworICBhc3NlcnQudGhy
b3dzKAorICAgICgpID0+CisgICAgICBtb2R1bGUoCisgICAgICAgICJceDAwXHg2MVx4NzNceDZk
XHgwMVx4MDBceDAwXHgwMFx4MDFceDA1XHgwMVx4NWZceDAxXHg3Zlx4MDIiCisgICAgICApLAor
ICAgIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvciwKKyAgICAiV2ViQXNzZW1ibHkuTW9kdWxlIGRv
ZXNuJ3QgcGFyc2UgYXQgYnl0ZSAxNTogaW52YWxpZCBGaWVsZCdzIG11dGFiaWxpdHk6IDB4MDIg
KGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVmZmVyKScpIgorICApOworfQor
Cit0ZXN0U3RydWN0RGVjbGFyYXRpb24oKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS93YXNt
Lmpzb24gYi9KU1Rlc3RzL3dhc20vd2FzbS5qc29uCmluZGV4IDMyYzhhZjhiYmY1N2VhNjA1YjMz
NTVhNTZkODgyZThkZGUxZTBlZWQuLjc0MjgxMmNkZWIwM2Q1YTU0ODQ1YTA3N2FiYjFkNzRiNTI3
ZmU1MzUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS93YXNtLmpzb24KKysrIGIvSlNUZXN0cy93
YXNtL3dhc20uanNvbgpAQCAtMTYsNiArMTYsNyBAQAogICAgICAgICAicmVmX251bGwiOiAgeyAi
dHlwZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0yMCwgImIzdHlwZSI6ICJCMzo6SW50NjQiIH0s
CiAgICAgICAgICJyZWYiOiAgICAgICB7ICJ0eXBlIjogInZhcmludDciLCAidmFsdWUiOiAgLTIx
LCAiYjN0eXBlIjogIkIzOjpJbnQ2NCIgfSwKICAgICAgICAgImZ1bmMiOiAgICAgIHsgInR5cGUi
OiAidmFyaW50NyIsICJ2YWx1ZSI6ICAtMzIsICJiM3R5cGUiOiAiQjM6OlZvaWQiIH0sCisgICAg
ICAgICJzdHJ1Y3QiOiAgICB7ICJ0eXBlIjogInZhcmludDciLCAidmFsdWUiOiAgLTMzLCAiYjN0
eXBlIjogIkIzOjpWb2lkIiB9LAogICAgICAgICAidm9pZCI6ICAgICAgeyAidHlwZSI6ICJ2YXJp
bnQ3IiwgInZhbHVlIjogIC02NCwgImIzdHlwZSI6ICJCMzo6Vm9pZCIgfQogICAgIH0sCiAgICAg
InZhbHVlX3R5cGUiOiBbImkzMiIsICJpNjQiLCAiZjMyIiwgImY2NCIsICJleHRlcm5yZWYiLCAi
ZnVuY3JlZiJdLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456130</attachid>
            <date>2022-03-30 09:22:19 -0700</date>
            <delta_ts>2022-03-31 23:57:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237029-20220330232216.patch</filename>
            <type>text/plain</type>
            <size>293604</size>
            <attacher name="Dmitry">dbezhetskov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxNjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MjhiZTQ2MDVlZjQ5MWFhYmRiNDU3Yzk0ZWQ3ZmYzNmMyMDU5MWZlLi5hNzkzMzE3MGZhOTliZmE5
MjlhOGNkZDQxYWU2ZWI4MTc2NmIwMTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMDYgQEAKKzIwMjItMDMtMzAgIERtaXRyeSBCZXpoZXRza292ICA8ZGJlemhldHNrb3ZA
aWdhbGlhLmNvbT4KKworICAgICAgICBbV0FTTS1HQ10gV0lQOiBpbnRyb2R1Y2Ugc3RydWN0cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDI5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNl
IHN0cnVjdCB0eXBlcyB2aWEgZXh0ZW5kaW5nIGV4aXN0aW5nIFNpZ25hdHVyZSBpbmZyYXN0cnVj
dHVyZS4KKyAgICAgICAgU2lnbmF0dXJlIGlzIGEgdW5pcXVlIHJlcHJlc2VudGF0aW9uIG9mIFdh
c20gZnVuY3Rpb24gdHlwZXMgYW5kIHdlIHVzZSB0aGVtCisgICAgICAgIHRvIGNvbXBhcmUgc2ln
bmF0dXJlcyBmcm9tIGRpZmZlcmVudCB3YXNtIG1vZHVsZXMuIFNpZ25hdHVyZXMgYXJlIGhlbGQg
Z2xvYmFsbHkKKyAgICAgICAgaW4gYSBoYXNoIHNldCBhbmQgaGF2ZSBvbmUgcG9pbnQgb2YgYWNj
ZXNzLgorCisgICAgICAgIFdpdGggR0MgcHJvcG9zYWwgYW5kIG5ldyBzdHJ1Y3QgdHlwZXMgd2Ug
d2FudCB0byByZXByZXNlbnQgbmV3IHR5cGVzIHVuaWZvcm1seSB3aXRoIGV4aXN0aW5nCisgICAg
ICAgIFNpZ25hdHVyZSBpbmZyYXN0cnVjdHVyZS4gU28sIGluIHRoaXMgcGF0Y2ggd2UgZXh0ZW5k
IFNpZ25hdHVyZSBjbGFzcyB3aXRoIHR3byBvcHRpb25zIC0KKyAgICAgICAgRnVuY3Rpb25TaWdu
YXR1cmUgYW5kIFN0cnVjdFR5cGUuIEZ1bmN0aW9uU2lnbmF0dXJlIChjYW4gYmUgbmFtZWQgYXMg
RnVuY3Rpb25UeXBlKSBpcyBhCisgICAgICAgIHJlcHJlc2VudGF0aW9uIG9mIHNpZ25hdHVyZXMg
YXMgaXQgd2FzIGJlZm9yZSB0aGUgcGF0Y2ggYW5kIFN0cnVjdFR5cGUgaXMgYSBuZXcgb3B0aW9u
IHdoaWNoCisgICAgICAgIGlzIHJlcHJlc2VudGluZyBzdHJ1Y3QgdHlwZXMgZnJvbSBHQyBwcm9w
b3NhbC4gR2VuZXJhbGx5IHNwZWFraW5nIHdlIHJlcGxhY2UgU2lnbmF0dXJlIGNsYXNzCisgICAg
ICAgIHdpdGggbmV3IGFsZ2VicmFpYyB0eXBlIFR5cGVEZWZpbml0aW9uID0gU2lnbmF0dXJlIHwg
U3RydWN0VHlwZS4KKworICAgICAgICBUaGlzIHJlcHJlc2VudGF0aW9uIG9mIHN0cnVjdCB0eXBl
cyBhbGxvd3MgdXMgbm90IHRvIGNoYW5nZSBXYXNtVHlwZSByZXByZXNlbnRhdGlvbiBhbmQgCisg
ICAgICAgIHVuaWZvcm1seSBzdG9yZSBGdW5jdGlvblR5cGUgKGFrYSBGdW5jdGlvblNpZ25hdHVy
ZSkgb3IgU3RydWN0VHlwZS4gTmV3IG9wdGlvbnMgZm9yIHR5cGVzLAorICAgICAgICBmb3IgZXhh
bXBsZSBhcnJheXMsIGFsc28gY2FuIGJlIGVhc2lseSBhZGRlZC4gQWxzbywgd2Ugc2F2ZSBtZW1v
cnkgYmVjYXVzZSB3ZSByZXVzZSBleGlzdGluZworICAgICAgICB1bmlxdWVuZXNzIG9mIHNpZ25h
dHVyZXMuIEFkZGl0aW9uYWxseSB3ZSBjYW4gY29tcGFyZSBkaWZmZXJlbnQgc3RydWN0IHR5cGVz
IGFzIGZhc3QgYXMgd2UgZG8gaXQgZm9yIAorICAgICAgICBzaWduYXR1cmVzLgorCisgICAgICAg
IEFzIFNpZ25hdHVyZSBjbGFzcyBub3cgZG9lc24ndCBvbmx5IGhvbGRzIFNpZ25hdHVyZSBpdCBo
YXMgYmVlbiByZW5hbWVkIGludG8gVHlwZURlZmluaXRpb24uCisgICAgICAgIEFsbCBjb3JyZXNw
b25kaW5nIHNpZ25hdHVyZSByZWxhdGVkIHRoaW5ncyBhbHNvIGhhdmUgYmVlbiByZW5hbWVkLgor
CisgICAgICAgIFRvIGFjY2VzcyBzcGVjaWZpYyBvcHRpb24gdHdvIGNsYXNzZXMgd2FzIGludHJv
ZHVjZWQgU3RydWN0VHlwZSBhbmQgRnVuY3Rpb25TaWduYXR1cmUsIHNvIFR5cGVEZWZpbml0aW9u
CisgICAgICAgIGNhbiBiZSBjYXN0ZWQgdG8gc3BlY2lmaWMgb3B0aW9uIGFuZCBvbmx5IHZpYSBp
dCBvcHRpb24gbWV0aG9kcyBvZiB0aGF0IG9wdGlvbiBjYW4gYmUgY2FsbGVkLgorICAgICAgICBU
aGlzIGlzIGRvbmUgd2l0aCBwcmVzZXJ2aW5nIHRoZSBjYWNoZS1sb2NhbGl0eSBvcHRpbWl6YXRp
b24gZm9yIGFsbG9jYXRpb24gc2lnbmF0dXJlcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlRHVt
cGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Qnl0ZWNvZGVEdW1wZXI6OmR1bXBCbG9jayk6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIHJ1bnRpbWUv
T3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6YnJhbmNoVGFy
Z2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29u
dHJvbERhdGE6OmJyYW5jaFRhcmdldFR5cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OnRtcHNGb3JTaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6dG9CM1Jlc3VsdFR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6YWRkQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0
b3I6OmFkZFJlZkZ1bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Z2V0
R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnNldEdsb2JhbCk6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCk6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpB
aXJJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZik6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2Vu
ZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRD
b21waWxlQWlyKToKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oOgorICAgICAg
ICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lS
R2VuZXJhdG9yOjpDb250cm9sRGF0YTo6Q29udHJvbERhdGEpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6aGFzTm9uVm9pZHJlc3VsdCBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRyb2xEYXRhOjpicmFuY2hUYXJn
ZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkNvbnRy
b2xEYXRhOjpicmFuY2hUYXJnZXRUeXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6dG9CM1Jlc3VsdFR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjplbWl0SW5kaXJlY3RDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6
Z2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFs
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkTG9vcCk6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2gpOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjplbmRCbG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJh
dG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9y
OjphZGRDYWxsUmVmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlQjMpOgor
ICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21C
QlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6d29yayk6CisgICAgICAg
IChKU0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldh
c206OkJCUVBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24pOgorICAgICAgICAqIHdhc20vV2Fz
bUNhbGxlZS5oOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAg
ICAgIChKU0M6Oldhc206Oldhc21DYWxsaW5nQ29udmVudGlvbjo6Y2FsbEluZm9ybWF0aW9uRm9y
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SlNDYWxsaW5nQ29udmVudGlvbjo6Y2FsbElu
Zm9ybWF0aW9uRm9yIGNvbnN0KToKKyAgICAgICAgKiB3YXNtL1dhc21FbWJlZGRlci5oOgorICAg
ICAgICAqIHdhc20vV2FzbUVudHJ5UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkVudHJ5
UGxhbjo6cHJlcGFyZSk6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0Lmg6CisgICAgICAgIChK
U0M6Oldhc206OmlzRXh0ZXJucmVmKToKKyAgICAgICAgKEpTQzo6V2FzbTo6aXNGdW5jcmVmKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6ZnVuY3JlZlR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpl
eHRlcm5yZWZUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCk6CisgICAgICAgICogd2FzbS9XYXNtRnVu
Y3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlv
bkNvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2lnbmF0dXJlKToKKyAgICAgICAgKiB3YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9u
UGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OnNwbGl0U3RhY2spOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6c2lnbmF0dXJlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuaWZ5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lvbik6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhw
cmVzc2lvbik6CisgICAgICAgICogd2FzbS9XYXNtR2xvYmFsLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6R2xvYmFsOjpzZXQpOgorICAgICAgICAqIHdhc20vV2FzbUdsb2JhbC5oOgorICAgICAg
ICAqIHdhc20vV2FzbUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6
OmluaXRFbGVtZW50U2VnbWVudCk6CisgICAgICAgICogd2FzbS9XYXNtTExJbnRHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6Omxv
b3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmJs
b2NrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpp
Zl8pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmNy
ZWF0ZVRyeSk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlw
ZTo6Y3JlYXRlQ2F0Y2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29u
dHJvbFR5cGU6OmJyYW5jaFRhcmdldEFyaXR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpicmFuY2hUYXJnZXRUeXBlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6cGFyc2VBbmRDb21waWxlQnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRBcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2gpOgorICAgICAgICAoSlND
OjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZFJldHVybik6CisgICAgICAgIChKU0M6Oldh
c206OkxMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmVuZFRvcExldmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TExJbnRHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVy
YXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0
b3I6OmFkZENhbGxSZWYpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9yLmg6Cisg
ICAgICAgICogd2FzbS9XYXNtTExJbnRQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludFBsYW46
OmRpZENvbXBsZXRlQ29tcGlsYXRpb24pOgorICAgICAgICAqIHdhc20vV2FzbUxpbWl0cy5oOgor
ICAgICAgICAqIHdhc20vV2FzbU1vZHVsZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZTo6dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDoKKyAgICAgICAgKiB3YXNt
L1dhc21Nb2R1bGVJbmZvcm1hdGlvbi5oOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbjo6ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206Ok1vZHVsZUluZm9ybWF0aW9uOjppc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRl
eFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OnR5
cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbjo6ZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6aXNJbXBvcnRlZEV4Y2VwdGlvbkZy
b21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb246OnR5cGVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmltcG9ydEZ1bmN0aW9uQ291bnQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6aW50ZXJuYWxG
dW5jdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRp
b246OmltcG9ydEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlSW5mb3JtYXRpb246OmludGVybmFsRXhjZXB0aW9uQ291bnQgY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6dHlwZUNvdW50IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uOjpzaWduYXR1cmVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T1NSRW50cnlQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3
YXNtL1dhc21PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6SlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiB3YXNtL1dhc21PcGVyYXRpb25zLmg6CisgICAgICAg
ICogd2FzbS9XYXNtUGFyc2VyLmg6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxTdWNjZXNz
VHlwZT46OlBhcnNlcik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxTdWNjZXNzVHlwZT46
OnBhcnNlQmxvY2tTaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpwYXJzZUhlYXBUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyPFN1Y2Nl
c3NUeXBlPjo6cGFyc2VWYWx1ZVR5cGUpOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25QYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUltcG9ydCk6CisgICAgICAg
IChKU0M6Oldhc206OlNlY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUV4cG9ydCk6CisgICAgICAgIChKU0M6Oldhc206
OlNlY3Rpb25QYXJzZXI6OnBhcnNlU3RhcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9u
UGFyc2VyOjpwYXJzZUluaXRFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VGdW5jdGlvblR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2Vy
OjpwYXJzZVN0cnVjdFR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpw
YXJzZUdsb2JhbFR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJz
ZUV4Y2VwdGlvbik6CisgICAgICAgICogd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oOgorICAgICAg
ICAqIHdhc20vV2FzbVNpZ25hdHVyZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd2FzbS9XYXNt
U2lnbmF0dXJlLmg6IFJlbW92ZWQuCisgICAgICAgICogd2FzbS9XYXNtU2xvd1BhdGhzLmNwcDoK
KyAgICAgICAgKEpTQzo6TExJbnQ6OmRvV2FzbUNhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6
OkxMSW50OjpXQVNNX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmRvV2Fz
bUNhbGxSZWYpOgorICAgICAgICAqIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHA6CisgICAg
ICAgICogd2FzbS9XYXNtU3RyZWFtaW5nUGxhbi5jcHA6CisgICAgICAgICogd2FzbS9XYXNtVGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6Y2xlYXIpOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jUmVmVGFibGU6OkZ1bmNSZWZUYWJsZSk6CisgICAgICAgICogd2FzbS9XYXNt
VGFnLmg6CisgICAgICAgICogd2FzbS9XYXNtVHlwZURlZmluaXRpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OnRvU3RyaW5nIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OmR1bXAgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblNpZ25hdHVyZTo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblNpZ25hdHVyZTo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlN0cnVjdFR5cGU6OnRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3Ry
dWN0VHlwZTo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVTaWduYXR1
cmVIYXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y29tcHV0ZVN0cnVjdFR5cGVIYXNoKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246Omhhc2ggY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlRnVuY3Rpb25TaWduYXR1cmUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlU3RydWN0VHlwZSk6
CisgICAgICAgIChKU0M6Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6VHlwZUluZm9ybWF0aW9uKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJhbWV0ZXJUeXBlczo6aGFzaCk6CisgICAg
ICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyYW1ldGVyVHlwZXM6OmVxdWFsKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJhbWV0ZXJUeXBlczo6dHJhbnNsYXRlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3RydWN0UGFyYW1ldGVyVHlwZXM6Omhhc2gpOgorICAgICAgICAoSlNDOjpX
YXNtOjpTdHJ1Y3RQYXJhbWV0ZXJUeXBlczo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpT
dHJ1Y3RQYXJhbWV0ZXJUeXBlczo6dHJhbnNsYXRlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlw
ZUluZm9ybWF0aW9uOjp0eXBlRGVmaW5pdGlvbkZvckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VHlwZUluZm9ybWF0aW9uOjp0eXBlRGVmaW5pdGlvbkZvclN0cnVjdCk6CisgICAgICAg
IChKU0M6Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6dHJ5Q2xlYW51cCk6CisgICAgICAgICogd2Fz
bS9XYXNtVHlwZURlZmluaXRpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0
aW9uU2lnbmF0dXJlOjpGdW5jdGlvblNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1
bmN0aW9uU2lnbmF0dXJlOjphcmd1bWVudENvdW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6RnVuY3Rpb25TaWduYXR1cmU6OnJldHVybkNvdW50IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnJldHVyblR5cGUgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblNpZ25hdHVyZTo6cmV0dXJuc1ZvaWQgY29uc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpGdW5jdGlvblNpZ25hdHVyZTo6YXJndW1lbnRUeXBlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OmdldFJldHVyblR5cGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpGdW5jdGlvblNpZ25hdHVyZTo6Z2V0QXJndW1lbnRUeXBlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblNpZ25hdHVyZTo6c3RvcmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OlN0cnVjdEZpZWxkOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U3RydWN0RmllbGQ6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpT
dHJ1Y3RUeXBlOjpTdHJ1Y3RUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RydWN0VHlwZTo6
ZmllbGRDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cnVjdFR5cGU6OmZpZWxk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3RydWN0VHlwZTo6Z2V0RmllbGQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpTdHJ1Y3RUeXBlOjpzdG9yYWdlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U3RydWN0VHlwZTo6c3RvcmFnZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVE
ZWZpbml0aW9uOjpUeXBlRGVmaW5pdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZp
bml0aW9uOjpwYXlsb2FkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OmFs
bG9jYXRlZEZ1bmN0aW9uU2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9u
OjphbGxvY2F0ZWRTdHJ1Y3RTaXplKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZURlZmluaXRp
b246OmlzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OmFzKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OmFzIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OmluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VHlwZURlZmluaXRpb246Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUeXBlSGFzaDo6VHlwZUhhc2gpOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlSGFzaDo6
b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVIYXNoOjplcXVhbCk6
CisgICAgICAgIChKU0M6Oldhc206OlR5cGVIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6VHlwZUhhc2g6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6VHlwZUluZm9ybWF0aW9uOjp0aHVua0ZvciBjb25zdCk6CisgICAgICAgICogd2Fz
bS9XYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlSW5saW5lcy5oLgorICAgICAgICAoSlNDOjpXYXNt
OjpUeXBlSW5mb3JtYXRpb246OnNpbmdsZXRvbik6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVJ
bmZvcm1hdGlvbjo6Z2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZUluZm9ybWF0aW9uOjpn
ZXRGdW5jdGlvblNpZ25hdHVyZSk6CisgICAgICAgICogd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFk
ZXIucHk6CisgICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChKU0M6Oldh
c206Om1hcnNoYWxsSlNSZXN1bHQpOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2Fz
bVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uaDoKKyAgICAgICAgKiB3YXNt
L2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5RXhjZXB0aW9uOjp2aXNpdENoaWxkcmVuSW1wbCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlFeGNlcHRpb246OmdldEFyZyBjb25zdCk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5R2xvYmFsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUdsb2JhbDo6dHlw
ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAo
SlNDOjpmcm9tSlNWYWx1ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6ZGVzdHJveSk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UgY29uc3QpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpnZW5lcmF0
ZVdhc21Ub0pTU3R1YnMpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpzaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseVRhZy5oOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjp3YXNtVG9KUyk6CisgICAgICAgICogd2FzbS9qcy9XYXNtVG9KUy5oOgor
ICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6dXNlc1RhZ1Jl
Z2lzdGVycyBjb25zdCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2Fs
bEVudHJ5cG9pbnRTbG93KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5j
dGlvbik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZTo6dHlwZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2U6OnNpZ25hdHVyZUluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUlt
cG9ydHMpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6
ZUV4cG9ydHMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHdhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDoKKyAgICAgICAgKiB3YXNtL3dhc20uanNvbjoKKwog
MjAyMi0wMy0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAg
IFtKU0NdIENoYW5nZSBEYXRlLnBhcnNlIHRvIHN0b3AgcmV0dXJuaW5nIG51bWJlcnMgd2l0aCBm
cmFjdGlvbmFsIHBhcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3NGUy
M2RmNTRkZTZmYzg4NDA0MjMzMjVlNDgxMDFkNjNlODdjNjgxLi4xYTlhMWNmMDA2ZmU2YTFlNDhk
ZTc3ZTNiM2ZjZjVhMWMzODU5YmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHdhc20vV2FzbU9TUkVudHJ5RGF0YS5oCiAgICAgd2FzbS9XYXNtUGFn
ZUNvdW50LmgKICAgICB3YXNtL1dhc21TZWN0aW9ucy5oCi0gICAgd2FzbS9XYXNtU2lnbmF0dXJl
LmgKKyAgICB3YXNtL1dhc21UeXBlRGVmaW5pdGlvbi5oCiAgICAgd2FzbS9XYXNtU3RyZWFtaW5n
Q29tcGlsZXIuaAogICAgIHdhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5oCiAgICAgd2FzbS9XYXNt
VGllclVwQ291bnQuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDg0YTk2MjQxZGIx
ZDgzYmJjZGFkM2MxOWVjYTNlNTM5YzZmYjdiZjcuLmU4N2MyYWRiZTEwNjA1NThjMmI3ZTUwMTlk
YjQ0MWQxZjhjMDI0MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTExMDQsNyAr
MTEwNCw3IEBAIHdhc20vV2FzbU9wZXJhdGlvbnMuY3BwCiB3YXNtL1dhc21QYWdlQ291bnQuY3Bw
CiB3YXNtL1dhc21QbGFuLmNwcAogd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKLXdhc20vV2Fz
bVNpZ25hdHVyZS5jcHAKK3dhc20vV2FzbVR5cGVEZWZpbml0aW9uLmNwcAogd2FzbS9XYXNtU2xv
d1BhdGhzLmNwcAogd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuY3BwCiB3YXNtL1dhc21TdHJl
YW1pbmdQYXJzZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVEdW1wZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmNwcAppbmRleCAwOGEyMzU4MDQ0ZmQ2MzU5NzAzMjNiMDEyYzljODdlMzk1
ZTNlNjk4Li5kNTRjNzRmYzYzYzY1MGUwOGQ3NGY0Nzk3YzkxMTFkMzU2MjY3NmJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKQEAg
LTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3Iu
aCIKICNpbmNsdWRlICJXYXNtR2VuZXJhdG9yVHJhaXRzLmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNs
dWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC0zNDksOSArMzQ5LDkgQEAgdm9pZCBCeXRlY29kZUR1bXBlcjo6ZHVtcEJsb2NrKEZ1bmN0aW9u
Q29kZUJsb2NrR2VuZXJhdG9yKiBibG9jaywgY29uc3QgTW9kdWxlSW4KICAgICBvdXQucHJpbnQo
bWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1vZHVsZUluZm9ybWF0
aW9uLm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpKTsKIAogICAgIGNvbnN0
IGF1dG8mIGZ1bmN0aW9uID0gbW9kdWxlSW5mb3JtYXRpb24uZnVuY3Rpb25zW2Jsb2NrLT5mdW5j
dGlvbkluZGV4KCldOwotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxl
SW5mb3JtYXRpb24uaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbYmxvY2stPmZ1bmN0
aW9uSW5kZXgoKV07Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICBvdXQucHJpbnQoIiA6ICIsIHNp
Z25hdHVyZSwgIlxuIik7CisgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IG1vZHVsZUluZm9ybWF0
aW9uLmludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlc1tibG9jay0+ZnVuY3Rpb25JbmRleCgpXTsK
KyAgICBjb25zdCBhdXRvJiB0eXBlRGVmaW5pdGlvbiA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5
cGVJbmRleCk7CisgICAgb3V0LnByaW50KCIgOiAiLCB0eXBlRGVmaW5pdGlvbiwgIlxuIik7CiAg
ICAgb3V0LnByaW50KCJ3YXNtIHNpemU6ICIsIGZ1bmN0aW9uLmRhdGEuc2l6ZSgpLCAiIGJ5dGVz
XG4iKTsKIAogICAgIG91dC5wcmludGYoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCBiOTYyYjI4Y2U2MmYyYzgxN2M2NDFmN2JmOTQxMGU1
NmNmMTA3MDIwLi40ZTU5ZTlmOTA3Nzk2NTVmNzQxNTViODk1YmQ1ZTM4ZTAxNDczMWY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTE2
ODksNyArMTY4OSw3IEBAIG9wIDpjYWxsX25vX3RscywKIG9wIDpjYWxsX2luZGlyZWN0LAogICAg
IGFyZ3M6IHsKICAgICAgICAgZnVuY3Rpb25JbmRleDogVmlydHVhbFJlZ2lzdGVyLAotICAgICAg
ICBzaWduYXR1cmVJbmRleDogdW5zaWduZWQsCisgICAgICAgIHR5cGVJbmRleDogdW5zaWduZWQs
CiAgICAgICAgIHN0YWNrT2Zmc2V0OiB1bnNpZ25lZCwKICAgICAgICAgbnVtYmVyT2ZTdGFja0Fy
Z3M6IHVuc2lnbmVkLAogICAgICAgICB0YWJsZUluZGV4OiB1bnNpZ25lZCwKQEAgLTE2OTgsNyAr
MTY5OCw3IEBAIG9wIDpjYWxsX2luZGlyZWN0LAogb3AgOmNhbGxfaW5kaXJlY3Rfbm9fdGxzLAog
ICAgIGFyZ3M6IHsKICAgICAgICAgZnVuY3Rpb25JbmRleDogVmlydHVhbFJlZ2lzdGVyLAotICAg
ICAgICBzaWduYXR1cmVJbmRleDogdW5zaWduZWQsCisgICAgICAgIHR5cGVJbmRleDogdW5zaWdu
ZWQsCiAgICAgICAgIHN0YWNrT2Zmc2V0OiB1bnNpZ25lZCwKICAgICAgICAgbnVtYmVyT2ZTdGFj
a0FyZ3M6IHVuc2lnbmVkLAogICAgICAgICB0YWJsZUluZGV4OiB1bnNpZ25lZCwKQEAgLTE3MDcs
NyArMTcwNyw3IEBAIG9wIDpjYWxsX2luZGlyZWN0X25vX3RscywKIG9wIDpjYWxsX3JlZiwKICAg
ICBhcmdzOiB7CiAgICAgICAgIGZ1bmN0aW9uUmVmZXJlbmNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0g
ICAgICAgIHNpZ25hdHVyZUluZGV4OiB1bnNpZ25lZCwKKyAgICAgICAgdHlwZUluZGV4OiB1bnNp
Z25lZCwKICAgICAgICAgc3RhY2tPZmZzZXQ6IHVuc2lnbmVkLAogICAgICAgICBudW1iZXJPZlN0
YWNrQXJnczogdW5zaWduZWQsCiAgICAgfQpAQCAtMTcxNSw3ICsxNzE1LDcgQEAgb3AgOmNhbGxf
cmVmLAogb3AgOmNhbGxfcmVmX25vX3RscywKICAgICBhcmdzOiB7CiAgICAgICAgIGZ1bmN0aW9u
UmVmZXJlbmNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHNpZ25hdHVyZUluZGV4OiB1bnNp
Z25lZCwKKyAgICAgICAgdHlwZUluZGV4OiB1bnNpZ25lZCwKICAgICAgICAgc3RhY2tPZmZzZXQ6
IHVuc2lnbmVkLAogICAgICAgICBudW1iZXJPZlN0YWNrQXJnczogdW5zaWduZWQsCiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKaW5kZXggODI1YTJi
NjQ4N2ViZGRkMjU1MjVlMjZjNDA4NDNhMDUyYTcwNjAyYi4uYjRhNTUyY2Y3YzEzZmU0N2QxYmI5
NzJhOTZiYzcwMDFjZDQ1YTFjZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCkBAIC01NDksNiArNTQ5LDcgQEAgYm9vbCBjYW5Vc2VXZWJBc3NlbWJseUZh
c3RNZW1vcnkoKTsKICAgICB2KEJvb2wsIHVzZVRlbXBvcmFsLCBmYWxzZSwgTm9ybWFsLCAiRXhw
b3NlIHRoZSBUZW1wb3JhbCBvYmplY3QuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlU
aHJlYWRpbmcsIHRydWUsIE5vcm1hbCwgIkFsbG93IGluc3RydWN0aW9ucyBmcm9tIHRoZSB3YXNt
IHRocmVhZGluZyBzcGVjLiIpIFwKICAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5VHlwZWRGdW5j
dGlvblJlZmVyZW5jZXMsIGZhbHNlLCBOb3JtYWwsICJBbGxvdyBmdW5jdGlvbiB0eXBlcyBmcm9t
IHRoZSB3YXNtIHR5cGVkIGZ1bmN0aW9uIHJlZmVyZW5jZXMgc3BlYy4iKSBcCisgICAgdihCb29s
LCB1c2VXZWJBc3NlbWJseUdDLCBmYWxzZSwgTm9ybWFsLCAiQWxsb3cgZ2MgdHlwZXMgZnJvbSB0
aGUgd2FzbSBnYyBwcm9wb3NhbC4iKSBcCiAgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseUV4Y2Vw
dGlvbnMsIHRydWUsIE5vcm1hbCwgIkFsbG93IHRoZSBuZXcgc2VjdGlvbiBhbmQgaW5zdHJ1Y3Rp
b25zIGZyb20gdGhlIHdhc20gZXhjZXB0aW9uIGhhbmRsaW5nIHNwZWMuIikgXAogICAgIHYoQm9v
bCwgdXNlV2ViQXNzZW1ibHlCcmFuY2hIaW50cywgdHJ1ZSwgTm9ybWFsLCAiQWxsb3cgdGhlIG5l
dyBzZWN0aW9uIGZyb20gdGhlIHdhc20gYnJhbmNoIGhpbnRpbmcgc3BlYy4iKSBcCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCmluZGV4
IDk4ZWRiMWVkYmVmYmU2MTcxZGRlZTcxOGM4ZjcwMjQ0Y2JhNDczODAuLjY2ZWU1Mzg1MzllNzE2
YTg1NDA2NDUzZDEzZDA5M2FlNzU5MTI0OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApAQCAtNTUsOCArNTUsOCBAQAogI2luY2x1
ZGUgIldhc21PU1JFbnRyeURhdGEuaCIKICNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCiAj
aW5jbHVkZSAiV2FzbU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5l
cy5oIgogI2luY2x1ZGUgIldhc21UaHVua3MuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRp
b25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9Cb3guaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0yMTgsMTkgKzIxOCwxOSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBzcGVjaWFsID0gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAgICAgIFNp
Z25hdHVyZUFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QKKyAgICAgICAgRnVuY3Rp
b25BcmdDb3VudCBicmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmIChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHJldHVyblR5cGUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICAgICAgICAgIHJldHVybiBy
ZXR1cm5UeXBlLT5yZXR1cm5Db3VudCgpOworICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5U
eXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAg
ICAgcmV0dXJuIHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3Vu
dCgpOwogICAgICAgICB9CiAKICAgICAgICAgVHlwZSBicmFuY2hUYXJnZXRUeXBlKHVuc2lnbmVk
IGkpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChpIDwgYnJhbmNoVGFyZ2V0
QXJpdHkoKSk7CiAgICAgICAgICAgICBpZiAoYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29w
KQotICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5hcmd1bWVudChpKTsKLSAgICAg
ICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAgICAgICAg
IHJldHVybiByZXR1cm5UeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRUeXBl
KGkpOworICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5yZXR1cm5UeXBlKGkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBjb252ZXJ0VHJ5
VG9DYXRjaCh1bnNpZ25lZCB0cnlFbmRDYWxsU2l0ZUluZGV4LCBUeXBlZFRtcCBleGNlcHRpb24p
CkBAIC0zMjMsMTEgKzMyMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gZmFpbChf
X1ZBX0FSR1NfXyk7ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgQWlySVJH
ZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJu
YWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUs
IHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgY29uc3QgU2lnbmF0dXJlJiwg
dW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOworICAgIEFpcklSR2VuZXJhdG9y
KGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rp
b24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgdW5z
aWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpOwogCiAgICAgdm9pZCBmaW5hbGl6ZUVu
dHJ5cG9pbnRzKCk7CiAKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRB
cmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFR5cGVEZWZpbml0aW9uJik7CiAgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwogICAg
IEV4cHJlc3Npb25UeXBlIGFkZENvbnN0YW50KFR5cGUsIHVpbnQ2NF90KTsKICAgICBFeHByZXNz
aW9uVHlwZSBhZGRDb25zdGFudChCYXNpY0Jsb2NrKiwgVHlwZSwgdWludDY0X3QpOwpAQCAtMzkz
LDggKzM5Myw4IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sRGF0YSYpOwogCiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9z
aW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7Ci0gICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0
Jik7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hUb1VucmVh
Y2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9s
VHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24m
LCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3Qm
KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbChTdGFj
ayYsIENvbnRyb2xUeXBlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJik7CiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlw
ZSYpOwpAQCAtNDExLDEyICs0MTEsMTIgQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlLCBjb25zdCBTdGFjayYp
IHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQ2FsbHMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1
cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsK
LSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5z
aWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBUeXBl
RGVmaW5pdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJl
c3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRp
cmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxSZWYoY29uc3QgVHlwZURlZmluaXRpb24m
LCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwotICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVHlwZWRU
bXAgY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25h
dHVyZSYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmKTsK
LSAgICBzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayos
IGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNvbnN0IFZlY3Rv
cjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gZXh0cmFBcmdzID0geyB9
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0SW5kaXJlY3RDYWxs
KFR5cGVkVG1wIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25z
dCBUeXBlRGVmaW5pdGlvbiYsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJl
c3VsdExpc3QmKTsKKyAgICBzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0Q2FsbFBhdGNocG9pbnQo
QmFzaWNCbG9jayosIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgY29uc3QgUmVzdWx0TGlzdCYgcmVz
dWx0cywgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1w
PiBleHRyYUFyZ3MgPSB7IH0pOwogCiAgICAgUGFydGlhbFJlc3VsdCBhZGRTaGlmdChUeXBlLCBC
Mzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCBFeHByZXNzaW9uVHlwZSBzaGlm
dCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgUGFydGlhbFJlc3VsdCBhZGRJbnRlZ2Vy
U3ViKEIzOjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgbGhzLCBFeHByZXNzaW9uVHlwZSBy
aHMsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwpAQCAtNTQxLDkgKzU0MSw5IEBAIHByaXZhdGU6
CiAKICAgICBSZXN1bHRMaXN0IHRtcHNGb3JTaWduYXR1cmUoQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlKQogICAgIHsKLSAgICAgICAgUmVzdWx0TGlzdCByZXN1bHQoc2lnbmF0dXJlLT5yZXR1cm5D
b3VudCgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0
dXJuQ291bnQoKTsgKytpKQotICAgICAgICAgICAgcmVzdWx0W2ldID0gdG1wRm9yVHlwZShzaWdu
YXR1cmUtPnJldHVyblR5cGUoaSkpOworICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdChzaWduYXR1
cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCkt
PnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgICAgIHJlc3VsdFtpXSA9IHRtcEZvclR5cGUo
c2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZShpKSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC05MzMsNyArOTMzLDcgQEAgdm9pZCBBaXJJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoQmFzaWNCbG9jayogYmxvY2ss
IFR5cGVkVG1wIGluc3QKICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1w
KCksIGluc3RhbmNlKTsKIH0KIAotQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEludGVy
bmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSkKK0FpcklSR2VuZXJhdG9yOjpB
aXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVy
ZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBt
b2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBjb25zdCBU
eXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSkKICAgICA6IG1faW5mbyhpbmZvKQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX2Z1
bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKQEAgLTEwMzksOSArMTAzOSw5IEBAIEFpcklSR2Vu
ZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6
OlByb2NlZHVyZSYgcHJvCiAgICAgbV9jdXJyZW50QmxvY2sgPSBtX21haW5FbnRyeXBvaW50U3Rh
cnQ7CiAKICAgICBBU1NFUlQoIW1fbG9jYWxzLnNpemUoKSk7Ci0gICAgbV9sb2NhbHMuZ3Jvdyhz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAgIFR5cGUgdHlwZSA9IHNp
Z25hdHVyZS5hcmd1bWVudChpKTsKKyAgICBtX2xvY2Fscy5ncm93KHNpZ25hdHVyZS5hczxGdW5j
dGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50
KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWdu
YXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKICAgICAgICAgbV9sb2NhbHNbaV0gPSB0bXBGb3JU
eXBlKHR5cGUpOwogICAgIH0KIApAQCAtMTA1MCw3ICsxMDUwLDcgQEAgQWlySVJHZW5lcmF0b3I6
OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2Vk
dXJlJiBwcm8KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2FzbUNhbGxJbmZvLnBhcmFt
cy5zaXplKCk7ICsraSkgewogICAgICAgICBCMzo6VmFsdWVSZXAgbG9jYXRpb24gPSB3YXNtQ2Fs
bEluZm8ucGFyYW1zW2ldOwogICAgICAgICBBcmcgYXJnID0gbG9jYXRpb24uaXNSZWcoKSA/IEFy
ZyhUbXAobG9jYXRpb24ucmVnKCkpKSA6IEFyZzo6YWRkcihUbXAoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpLCBsb2NhdGlvbi5vZmZzZXRGcm9tRlAoKSk7Ci0gICAgICAgIHN3aXRjaCAoc2ln
bmF0dXJlLmFyZ3VtZW50KGkpLmtpbmQpIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXM8
RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKS5raW5kKSB7CiAgICAgICAgIGNh
c2UgVHlwZUtpbmQ6OkkzMjoKICAgICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIGFyZywgbV9sb2Nh
bHNbaV0pOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTI3LDE2ICsxMTI3LDE2IEBAIHZvaWQg
QWlySVJHZW5lcmF0b3I6OmZpbmFsaXplRW50cnlwb2ludHMoKQogCiBCMzo6VHlwZSBBaXJJUkdl
bmVyYXRvcjo6dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZSkKIHsKLSAg
ICBpZiAocmV0dXJuVHlwZS0+cmV0dXJuc1ZvaWQoKSkKKyAgICBpZiAocmV0dXJuVHlwZS0+YXM8
RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybnNWb2lkKCkpCiAgICAgICAgIHJldHVybiBCMzo6
Vm9pZDsKIAotICAgIGlmIChyZXR1cm5UeXBlLT5yZXR1cm5Db3VudCgpID09IDEpCi0gICAgICAg
IHJldHVybiB0b0IzVHlwZShyZXR1cm5UeXBlLT5yZXR1cm5UeXBlKDApKTsKKyAgICBpZiAocmV0
dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCkgPT0gMSkKKyAg
ICAgICAgcmV0dXJuIHRvQjNUeXBlKHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
LT5yZXR1cm5UeXBlKDApKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV90dXBsZU1hcC5lbnN1cmUo
cmV0dXJuVHlwZSwgWyZdIHsKICAgICAgICAgVmVjdG9yPEIzOjpUeXBlPiByZXN1bHQ7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXR1cm5UeXBlLT5yZXR1cm5Db3VudCgpOyAr
K2kpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvQjNUeXBlKHJldHVyblR5cGUtPnJldHVy
blR5cGUoaSkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJldHVyblR5cGUt
PmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHRvQjNUeXBlKHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5yZXR1cm5UeXBlKGkpKSk7CiAgICAgICAgIHJldHVybiBtX3Byb2MuYWRkVHVwbGUoV1RG
TW92ZShyZXN1bHQpKTsKICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKQEAgLTEyODgsOSArMTI4OCw5IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEJvdHRvbShC
YXNpY0Jsb2NrKiBibG9jaywgVHlwZSB0eXBlKSAtPiBFeHByZXNzaW9uVHlwZQogICAgIHJldHVy
biBhZGRDb25zdGFudCh0eXBlLCAwKTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQXJn
dW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25h
dHVyZSkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fbG9jYWxzLnNp
emUoKSA9PSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsgLy8gV2UgaGFuZGxlIGFyZ3VtZW50
cyBpbiB0aGUgcHJvbG9ndWUKKyAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2Fscy5zaXplKCkgPT0g
c2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkpOyAvLyBX
ZSBoYW5kbGUgYXJndW1lbnRzIGluIHRoZSBwcm9sb2d1ZQogICAgIHJldHVybiB7IH07CiB9CiAK
QEAgLTEzMTAsOCArMTMxMCw4IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJlZkZ1bmModWlu
dDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpCiB7CiAgICAgLy8g
RklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTg1MDY+LgogICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseVR5cGVkRnVu
Y3Rpb25SZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXggPSBtX2luZm8uc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsK
LSAgICAgICAgcmVzdWx0ID0gdG1wRm9yVHlwZShUeXBlIHsgVHlwZUtpbmQ6OlJlZiwgTnVsbGFi
bGU6Ok5vLCBzaWduYXR1cmVJbmRleCB9KTsKKyAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9
IG1faW5mby50eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKKyAgICAgICAg
cmVzdWx0ID0gdG1wRm9yVHlwZShUeXBlIHsgVHlwZUtpbmQ6OlJlZiwgTnVsbGFibGU6Ok5vLCB0
eXBlSW5kZXggfSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9IHRtcEZvclR5cGUoVHlw
ZXM6OkZ1bmNyZWYpOwogICAgIGVtaXRDQ2FsbCgmb3BlcmF0aW9uV2FzbVJlZkZ1bmMsIHJlc3Vs
dCwgaW5zdGFuY2VWYWx1ZSgpLCBhZGRDb25zdGFudChUeXBlczo6STMyLCBpbmRleCkpOwpAQCAt
MTYyNCw3ICsxNjI0LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6Z2V0R2xvYmFsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWEKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9k
ZTo6UG9ydGFibGU6Ci0gICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpH
bG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CisgICAgICAgIEFTU0VSVChn
bG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKICAgICAgICAg
aWYgKEFyZzo6aXNWYWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6OldpZHRoNjQpKQogICAgICAgICAg
ICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQpLCB0ZW1wKTsKICAgICAgICAg
ZWxzZSB7CkBAIC0xNjY0LDcgKzE2NjQsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjpzZXRHbG9i
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUgogICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllckZvckpTV3JhcHBlcigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6
Ci0gICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1h
dGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CisgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJp
bGl0eSA9PSBXYXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKICAgICAgICAgaWYgKEFyZzo6aXNW
YWxpZEFkZHJGb3JtKG9mZnNldCwgQjM6OldpZHRoNjQpKQogICAgICAgICAgICAgYXBwZW5kKE1v
dmUsIEFyZzo6YWRkcih0ZW1wLCBvZmZzZXQpLCB0ZW1wKTsKICAgICAgICAgZWxzZSB7CkBAIC0z
MjI5LDcgKzMyMjksNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1
cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbgogICAgIHJldHVybiB7IH07
CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29u
dHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25z
dCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9s
VHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YS5yZXN1bHRzKTsKICAgICBh
cHBlbmQoSnVtcCk7CkBAIC0zMjQ1LDExICszMjQ1LDExIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhdGNoQWxsKFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQ
YXJ0CiAgICAgcmV0dXJuIGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShkYXRhKTsKIH0KIAotYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJl
c3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgVHlw
ZURlZmluaXRpb24mIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJl
c3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBUbXAgYnVmZmVyID0gZW1pdENhdGNoSW1w
bChDYXRjaEtpbmQ6OkNhdGNoLCBkYXRhLCBleGNlcHRpb25JbmRleCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAg
ICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3Vu
dCgpOyArK2kpIHsKKyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpLT5hcmd1bWVudFR5cGUoaSk7CiAgICAgICAgIFR5cGVkVG1wIHRtcCA9IHRtcEZv
clR5cGUodHlwZSk7CiAgICAgICAgIGVtaXRMb2FkKGJ1ZmZlciwgaSAqIHNpemVvZih1aW50NjRf
dCksIHRtcCk7CiAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHRtcCk7CkBAIC0zNDE5LDcgKzM0MTks
NyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZXR1cm4oY29uc3QgQ29udHJvbERhdGEmIGRh
dGEsIGNvbnN0IFN0YWNrJiByZXR1cm5WYWx1ZQogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJU
KHJlcC5pc1JlZygpKTsKLSAgICAgICAgaWYgKGRhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUo
aSkuaXNJMzIoKSkKKyAgICAgICAgaWYgKGRhdGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpLmlzSTMyKCkpCiAgICAgICAgICAgICBhcHBlbmQoTW92
ZTMyLCB0bXAsIHRtcCk7CiAgICAgICAgIHJldHVybkNvbnN0cmFpbnRzLmFwcGVuZChDb25zdHJh
aW5lZFRtcCh0bXAsIHdhc21DYWxsSW5mby5yZXN1bHRzW2ldKSk7CiAgICAgfQpAQCAtMzU1NSwx
NyArMzU1NSwxNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENv
bnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZQogCiAgICAgaWYgKGRhdGEuYmxv
Y2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKSB7CiAgICAgICAgIG1fb3V0ZXJMb29wcy5yZW1v
dmVMYXN0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVy
ZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRhdGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3Vu
dCgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUoKSkK
ICAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhw
cmVzc2lvblN0YWNrW2ldKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFR5
cGUgdHlwZSA9IGRhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSk7CisgICAgICAgICAgICAg
ICAgVHlwZSB0eXBlID0gZGF0YS5zaWduYXR1cmUoKS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCkt
PnJldHVyblR5cGUoaSk7CiAgICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9u
U3RhY2suY29uc3RydWN0QW5kQXBwZW5kKHR5cGUsIGFkZEJvdHRvbShtX2N1cnJlbnRCbG9jaywg
dHlwZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7
ICsraSkKLSAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVj
dEFuZEFwcGVuZChkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCBkYXRhLnJlc3VsdHNb
aV0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgICAg
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRhLnNp
Z25hdHVyZSgpLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZShpKSwgZGF0YS5y
ZXN1bHRzW2ldKTsKICAgICB9CiAKICAgICAvLyBUb3BMZXZlbCBkb2VzIG5vdCBoYXZlIGFueSBj
b2RlIGFmdGVyIHRoaXMgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZW1pdCBhIHJldHVybiBo
ZXJlLgpAQCAtMzU3NSw3ICszNTc1LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9V
bnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmUKICAgICBy
ZXR1cm4geyB9OwogfQogCi1zdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGU+IEFpcklSR2VuZXJhdG9yOjplbWl0Q2FsbFBhdGNocG9pbnQoQmFz
aWNCbG9jayogYmxvY2ssIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBSZXN1bHRM
aXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3Ry
YWluZWRUbXA+IHBhdGNoQXJncykKK3N0ZDo6cGFpcjxCMzo6UGF0Y2hwb2ludFZhbHVlKiwgUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gQWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2lu
dChCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgY29u
c3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVj
dG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFyZ3MpCiB7CiAgICAgYXV0byogcGF0Y2hwb2ludCA9
IGFkZFBhdGNocG9pbnQodG9CM1Jlc3VsdFR5cGUoJnNpZ25hdHVyZSkpOwogICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMud3JpdGVzUGlubmVkID0gdHJ1ZTsKQEAgLTM2MDUsMTQgKzM2MDUsMTQgQEAg
c3RkOjpwYWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
PiBBaXJJUkdlbmVyYXRvcjo6ZW1pdEMKICAgICByZXR1cm4geyBwYXRjaHBvaW50LCBleGNlcHRp
b25IYW5kbGUgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBU
eXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgQVNTRVJUKHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworICAgIEFTU0VSVChzaWduYXR1
cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUo
KSk7CiAKICAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHRtcEZvclR5cGUoc2lnbmF0dXJlLnJldHVyblR5cGUoaSkpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5D
b3VudCgpOyArK2kpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHRtcEZvclR5cGUoc2lnbmF0dXJl
LmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpKSk7CiAKICAgICBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzID0gJm1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHM7CiAKQEAgLTM3MDgsMTAgKzM3MDgsMTAgQEAgYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3Vs
dHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVj
dCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VM
YXN0KCk7Ci0gICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXpl
KCkpOworICAgIEFTU0VSVChzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3Vt
ZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CiAgICAgQVNTRVJUKG1faW5mby50YWJsZUNvdW50
KCkgPiB0YWJsZUluZGV4KTsKICAgICBBU1NFUlQobV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS50
eXBlKCkgPT0gVGFibGVFbGVtZW50VHlwZTo6RnVuY3JlZik7CiAKQEAgLTM3NjEsNyArMzc2MSw3
IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUlu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUg
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBp
dCBpc24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBp
bml0aWFsaXplZC4KICAgICAgICAgLy8gRklYTUU6IHdoZW4gd2UgaGF2ZSB0cmFwIGhhbmRsZXJz
LCB3ZSBjYW4ganVzdCBsZXQgdGhlIGNhbGwgZmFpbCBiZWNhdXNlIFNpZ25hdHVyZTo6aW52YWxp
ZEluZGV4IGlzIDAuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcy
MTAKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4g
YXNzdW1lcyBpNjQiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbjo6dHlwZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBj
b2RlZ2VuIGFzc3VtZXMgaTY0Iik7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgd2Fz
dGVmdWwgdG8gZG8gdHdvIGNoZWNrcyBqdXN0IGZvciBhIG5pY2VyIGVycm9yIG1lc3NhZ2UuCiAg
ICAgICAgIC8vIFdlIHNob3VsZCBtb3ZlIGp1c3QgdG8gdXNlIGEgc2luZ2xlIGJyYW5jaCBhbmQg
dGhlbiBmaWd1cmUgb3V0IHdoYXQKQEAgLTM3NzAsMTQgKzM3NzAsMTQgQEAgYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmEKICAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YWRkcihjYWxsZWVTaWduYXR1
cmVJbmRleCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJ
bmRleCgpKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgpOwogCiAgICAgICAgIGVtaXRDaGVjayhbJl0g
ewotICAgICAgICAgICAgc3RhdGljX2Fzc2VydChTaWduYXR1cmU6OmludmFsaWRJbmRleCA9PSAw
LCAiIik7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KCFUeXBlRGVmaW5pdGlvbjo6aW52YWxp
ZEluZGV4LCAiIik7CiAgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0NjQsIG51bGxw
dHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGNhbGxlZVNpZ25hdHVyZUlu
ZGV4LCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CiAgICAgICAgIH0sIFs9LCB0aGlzXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAg
ICAgICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpOdWxs
VGFibGVFbnRyeSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVj
dGVkU2lnbmF0dXJlSW5kZXggPSBnNjQoKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6Ymln
SW1tKFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSksIGV4cGVjdGVkU2lnbmF0
dXJlSW5kZXgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oVHlwZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlKSksIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBl
bWl0Q2hlY2soWyZdIHsKICAgICAgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaDY0LCBudWxscHRy
LCBBcmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgY2FsbGVlU2lnbmF0dXJl
SW5kZXgsIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOwogICAgICAgICB9LCBbPSwgdGhpc10gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewpA
QCAtMzc5MSw3ICszNzkxLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICByZXR1cm4g
ZW1pdEluZGlyZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwgc2lnbmF0dXJlLCBh
cmdzLCByZXN1bHRzKTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZihjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVz
dWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2FsbFJlZihjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
CiAgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKICAgICAvLyBOb3RlOiBjYWxsIHJlZiBjYW4gY2Fs
bCBlaXRoZXIgV2ViQXNzZW1ibHlGdW5jdGlvbiBvciBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi4gQmVjYXVzZQpAQCAtMzgxOSw3ICszODE5LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q2FsbFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXAK
ICAgICByZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwg
c2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW1p
dEluZGlyZWN0Q2FsbChUeXBlZFRtcCBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2Fs
bGVlQ29kZSwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVHlwZWRUbXAgY2FsbGVlSW5zdGFu
Y2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWdu
YXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJl
c3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBhdXRvIGN1cnJlbnRJbnN0YW5jZSA9IGc2
NCgpOwogICAgIGFwcGVuZChNb3ZlLCBpbnN0YW5jZVZhbHVlKCksIGN1cnJlbnRJbnN0YW5jZSk7
CkBAIC0zODczLDggKzM4NzMsOCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RD
YWxsKFR5cGVkVG1wIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYQogICAgIFZlY3Rv
cjxDb25zdHJhaW5lZFRtcD4gZXh0cmFBcmdzOwogICAgIGV4dHJhQXJncy5hcHBlbmQoY2FsbGVl
Q29kZSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNv
dW50KCk7ICsraSkKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQodG1wRm9yVHlwZShzaWduYXR1cmUu
cmV0dXJuVHlwZShpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUu
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgcmVz
dWx0cy5hcHBlbmQodG1wRm9yVHlwZShzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCkt
PnJldHVyblR5cGUoaSkpKTsKIAogICAgIGF1dG8gcGFpciA9IGVtaXRDYWxsUGF0Y2hwb2ludCht
X2N1cnJlbnRCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzLCBXVEZNb3ZlKGV4dHJhQXJn
cykpOwogICAgIGF1dG8qIHBhdGNocG9pbnQgPSBwYWlyLmZpcnN0OwpAQCAtMzk0NCw3ICszOTQ0
LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gQjM6Ok9yaWdpbgogICAgIHJl
dHVybiBCMzo6T3JpZ2luKCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0
JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVt
b3J5TW9kZSBtb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVw
KQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwg
Y29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25h
dHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21D
YWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkKIHsKICAgICBhdXRvIHJl
c3VsdCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAppbmRleCAwYjhlZjQwYTBmNjQz
MzYzNDIzNTBhODU1ZDk0MWVhYTNjMTNiZTVlLi4wZTdiNTU1YmM4ZGE3MWE5YmVkNDlmMmYzM2Zj
ZDg1MmU2OWE0YTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWly
SVJHZW5lcmF0b3IuaApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4s
IFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1
bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVu
Y3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0cik7CitFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBp
bGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFR5cGVEZWZpbml0aW9u
JiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBu
dWxscHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDU3MGRmMzZmYjI0
OWFmOTNlZTA5ZTQ1NWVkY2VkMDEwNTAzOWZmOWIuLjM3NTQyNjE1N2Q4OGFkMzk3OTE2YzNkMTYy
ZWRmNzIwYThlYmI0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKQEAgLTYzLDggKzYzLDggQEAKICNpbmNsdWRlICJXYXNtT1NSRW50
cnlEYXRhLmgiCiAjaW5jbHVkZSAiV2FzbU9wY29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIldhc21P
cGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNsdWRl
ICJXYXNtVGh1bmtzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgog
I2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTEw
MywxNCArMTAzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHR5
cGUgIT0gQmxvY2tUeXBlOjpUcnkgJiYgdHlwZSAhPSBCbG9ja1R5cGU6OkNhdGNoKTsKICAgICAg
ICAgICAgIGlmICh0eXBlICE9IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCi0gICAgICAgICAgICAgICAg
bV9zdGFja1NpemUgLT0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAg
ICAgbV9zdGFja1NpemUgLT0gc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJn
dW1lbnRDb3VudCgpOwogCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBCbG9ja1R5cGU6Okxvb3Ap
IHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJv
Yy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5hcmd1bWVudChpKSksIG9yaWdp
bikpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUt
PmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2ln
bmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpKSwgb3JpZ2lu
KSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJl
LT5yZXR1cm5UeXBlKGkpKSwgb3JpZ2luKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNv
dW50KCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFs
dWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0
dXJuVHlwZShpKSksIG9yaWdpbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEy
Myw4ICsxMjMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIG1fdHJ5U3RhcnQodHJ5U3RhcnQp
CiAgICAgICAgICAgICAsIG1fdHJ5Q2F0Y2hEZXB0aCh0cnlEZXB0aCkKICAgICAgICAgewotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQo
KTsgKytpKQotICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRkPFZhbHVlPihQaGks
IHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSksIG9yaWdpbikpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1
cmU+KCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgICAgICAgICBwaGlzLmFwcGVuZChw
cm9jLmFkZDxWYWx1ZT4oUGhpLCB0b0IzVHlwZShzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0
dXJlPigpLT5yZXR1cm5UeXBlKGkpKSwgb3JpZ2luKSk7CiAgICAgICAgIH0KIAogICAgICAgICBD
b250cm9sRGF0YSgpCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogCiAgICAgICAgIEJsb2Nr
U2lnbmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9CiAKLSAg
ICAgICAgYm9vbCBoYXNOb25Wb2lkcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUt
PnJldHVybnNWb2lkKCk7IH0KKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkcmVzdWx0KCkgY29uc3Qg
eyByZXR1cm4gbV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5zVm9p
ZCgpOyB9CiAKICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goKQogICAg
ICAgICB7CkBAIC0yMTEsMTkgKzIxMSwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2V4Y2Vw
dGlvbiA9IGV4Y2VwdGlvbjsKICAgICAgICAgfQogCi0gICAgICAgIFNpZ25hdHVyZUFyZ0NvdW50
IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QKKyAgICAgICAgRnVuY3Rpb25BcmdDb3VudCBicmFu
Y2hUYXJnZXRBcml0eSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChibG9ja1R5
cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJl
dHVybkNvdW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hczxGdW5j
dGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgcmV0dXJuIG1f
c2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOwog
ICAgICAgICAgICAgaWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOwotICAgICAgICAgICAgcmV0
dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAgICAgICAgIHJldHVybiBt
X3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJl
dHVyblR5cGUoaSk7CiAgICAgICAgIH0KIAogICAgICAgICB1bnNpZ25lZCB0cnlTdGFydCgpIGNv
bnN0CkBAIC0zMDUsNyArMzA1LDcgQEAgcHVibGljOgogCiAgICAgQjNJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVm
ZmVyU2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqKTsKIAotICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWdu
YXR1cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVu
dHMoY29uc3QgVHlwZURlZmluaXRpb24mKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRk
Q29uc3RhbnQoVHlwZSwgdWludDY0X3QpOwogCkBAIC0zNzEsOCArMzcxLDggQEAgcHVibGljOgog
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxl
KENvbnRyb2xEYXRhJik7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUm
IHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJl
JiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKLSAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOwor
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4
Y2VwdGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFN0YWNrJiwgQ29udHJvbFR5cGUm
LCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBUeXBlRGVm
aW5pdGlvbiYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFi
bGUoQ29udHJvbFR5cGUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJik7CkBAIC0zODksMTIgKzM4OSwx
MiBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kVG9w
TGV2ZWwoQmxvY2tTaWduYXR1cmUsIGNvbnN0IFN0YWNrJikgeyByZXR1cm4geyB9OyB9CiAKICAg
ICAvLyBDYWxscwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwo
dWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiBy
ZXN1bHRzKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVm
KGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExp
c3QmIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
bGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
UmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQ2FsbFJlZihjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVl
KiBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBSZXN1bHRMaXN0Jik7Ci0gICAgQjM6OlZhbHVlKiBjcmVhdGVDYWxsUGF0Y2hwb2ludChC
YXNpY0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBjb25zdCBTY29wZWRMYW1iZGE8dm9pZChQYXRjaHBvaW50VmFsdWUqLCBCb3g8
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4pPiYgcGF0Y2hwb2ludEZ1bmN0b3IpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNh
bGxlZUluc3RhbmNlLCBWYWx1ZSogY2FsbGVlQ29kZSwgY29uc3QgVHlwZURlZmluaXRpb24mLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CisgICAgQjM6OlZhbHVl
KiBjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBUeXBlRGVm
aW5pdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIGNvbnN0IFNjb3BlZExhbWJk
YTx2b2lkKFBhdGNocG9pbnRWYWx1ZSosIEJveDxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPik+
JiBwYXRjaHBvaW50RnVuY3Rvcik7CiAKICAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNr
JiwgY29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVu
Y3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsg
fTsKQEAgLTg2OSwxNiArODY5LDE2IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6aW5zZXJ0Q29uc3Rh
bnRzKCkKIAogQjM6OlR5cGUgQjNJUkdlbmVyYXRvcjo6dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWdu
YXR1cmUgcmV0dXJuVHlwZSkKIHsKLSAgICBpZiAocmV0dXJuVHlwZS0+cmV0dXJuc1ZvaWQoKSkK
KyAgICBpZiAocmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybnNWb2lk
KCkpCiAgICAgICAgIHJldHVybiBCMzo6Vm9pZDsKIAotICAgIGlmIChyZXR1cm5UeXBlLT5yZXR1
cm5Db3VudCgpID09IDEpCi0gICAgICAgIHJldHVybiB0b0IzVHlwZShyZXR1cm5UeXBlLT5yZXR1
cm5UeXBlKDApKTsKKyAgICBpZiAocmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCkt
PnJldHVybkNvdW50KCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHRvQjNUeXBlKHJldHVyblR5cGUt
PmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKDApKTsKIAogICAgIGF1dG8gcmVz
dWx0ID0gbV90dXBsZU1hcC5lbnN1cmUocmV0dXJuVHlwZSwgWyZdIHsKICAgICAgICAgVmVjdG9y
PEIzOjpUeXBlPiByZXN1bHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXR1
cm5UeXBlLT5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRv
QjNUeXBlKHJldHVyblR5cGUtPnJldHVyblR5cGUoaSkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5D
b3VudCgpOyArK2kpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvQjNUeXBlKHJldHVyblR5
cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpKSk7CiAgICAgICAgIHJl
dHVybiBtX3Byb2MuYWRkVHVwbGUoV1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKQEAgLTkwMCwxNiArOTAwLDE2IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlh
bFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQXJn
dW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0
dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwot
ICAgIFdBU01fQ09NUElMRV9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CisgICAgV0FTTV9DT01QSUxF
X0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaWduYXR1cmUuYXM8RnVuY3Rp
b25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkg
Zm9yICIsIHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgp
LCAiIGFyZ3VtZW50cyIpOwogCi0gICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpKTsKKyAgICBtX2xvY2Fscy5ncm93KHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVy
ZT4oKS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZv
ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSwg
Q2FsbFJvbGU6OkNhbGxlZSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAgICBCMzo6VHlwZSB0eXBlID0gdG9CM1R5
cGUoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
Z25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgQjM6OlR5cGUgdHlwZSA9IHRvQjNUeXBlKHNpZ25hdHVyZS5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpKTsKICAgICAgICAgQjM6OlZhbHVlKiBhcmd1bWVu
dDsKICAgICAgICAgYXV0byByZXAgPSB3YXNtQ2FsbEluZm8ucGFyYW1zW2ldOwogICAgICAgICBp
ZiAocmVwLmlzUmVnKCkpIHsKQEAgLTEwOTYsNyArMTA5Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0
YW5jZSwgVmFsdWUqIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxl
ZUluc3RhbmNlLCBWYWx1ZSogY2FsbGVlQ29kZSwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25h
dHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVk
LgogICAgIHsKQEAgLTExNzAsNyArMTE3MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdElu
ZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjCiAg
ICAgfQogICAgIGNhc2UgQjM6OlR1cGxlOiB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlw
ZT4mIHR1cGxlID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1
cmU+KCktPnJldHVybkNvdW50KCk7ICsraSkKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1
c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSkpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0xMzAzLDcgKzEzMDMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbAogICAgICAgICByZXN1
bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZl
Q2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJs
ZTogewotICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5m
b3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOworICAgICAgICBBU1NFUlQoZ2xvYmFsLm11
dGFiaWxpdHkgPT0gV2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIFZhbHVlKiBw
b2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBCMzo6SW50NjQsIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+
KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUo
Z2xvYmFsLnR5cGUpLCBvcmlnaW4oKSwgcG9pbnRlcikpOwogICAgICAgICBicmVhazsKQEAgLTEz
MjQsNyArMTMyNCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGlu
ZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlCiAgICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2Fz
bTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewotICAgICAgICBB
U1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFi
aWxpdHk6Ok11dGFibGUpOworICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2Fz
bTo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6SW50NjQs
IG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgZ2V0KHZhbHVlKSwgcG9pbnRlcik7CiAgICAg
ICAgIC8vIFdlIGVtaXQgYSB3cml0ZS1iYXJyaWVyIG9udG8gSlNXZWJBc3NlbWJseUdsb2JhbCwg
bm90IEpTV2ViQXNzZW1ibHlJbnN0YW5jZS4KQEAgLTI0MTMsOCArMjQxMyw4IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNs
b3NpbmdTdGFjaywgQ29uCiAKICAgICBibG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2lu
KCksIHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9u
LCBib2R5KTsKIAotICAgIHVuc2lnbmVkIG9mZnNldCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAt
IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgdW5zaWduZWQgb2Zmc2V0
ID0gZW5jbG9zaW5nU3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVy
ZT4oKS0+YXJndW1lbnRDb3VudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWdu
YXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7ICsraSkgewog
ICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBlbmNsb3NpbmdTdGFjay5hdChvZmZzZXQg
KyBpKTsKICAgICAgICAgVmFsdWUqIHBoaSA9IGJsb2NrLnBoaXNbaV07CiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnZXQo
dmFsdWUpLCBwaGkpOwpAQCAtMjUxNCw3ICsyNTE0LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRFbHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQ
YXIKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEm
IGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoZGF0YS5ibG9ja1R5cGUoKSA9
PSBCbG9ja1R5cGU6OklmKTsKLSAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCkgKyBk
YXRhLm1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgbV9zdGFja1NpemUgPSBkYXRh
LnN0YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCkt
PmFyZ3VtZW50Q291bnQoKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKICAg
ICBkYXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKICAgICByZXR1cm4geyB9OwpAQCAtMjUzMCw3ICsy
NTMwLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0
dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnQKICAgICByZXR1cm4geyB9OwogfQogCi1h
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUm
IGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZp
bml0aW9uJiBzaWduYXR1cmUsIFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRh
LCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdW5pZnlWYWx1
ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhKTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGRhdGEuY29udGludWF0
aW9uKTsKQEAgLTI1NjQsMTIgKzI1NjQsMTIgQEAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBC
M0lSR2VuZXJhdG9yOjpwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoQmFzaWNCbG8KICAg
ICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7IG1fY2FsbFNpdGVJbmRleCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxpdmVWYWx1ZXMuc2l6ZSgpKSB9OwogfQogCi1hdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0
JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNo
VG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRp
b24mIHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogb3BlcmF0aW9uUmVzdWx0ID0gZW1pdENhdGNo
SW1wbChDYXRjaEtpbmQ6OkNhdGNoLCBkYXRhLCBleGNlcHRpb25JbmRleCk7CiAgICAgVmFsdWUq
IHBheWxvYWQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9j
LCBvcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uUmVzdWx0LCAxKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0g
ICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVu
dENvdW50KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXM8RnVuY3Rp
b25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKICAgICAgICAgVmFsdWUqIHZhbHVlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0Iz
VHlwZSh0eXBlKSwgb3JpZ2luKCksIHBheWxvYWQsIGkgKiBzaXplb2YodWludDY0X3QpKTsKICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaCh2YWx1ZSkpOwogICAgIH0KQEAgLTI3OTAsNyArMjc5
MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwg
U3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGFyCiB7CiAgICAgQ29udHJvbERhdGEmIGRhdGEg
PSBlbnRyeS5jb250cm9sRGF0YTsKIAotICAgIEFTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgp
ID09IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCkpOworICAgIEFTU0VSVChleHByZXNz
aW9uU3RhY2suc2l6ZSgpID09IGRhdGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5yZXR1cm5Db3VudCgpKTsKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5
cGU6Okxvb3ApCiAgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywg
ZGF0YSk7CiAKQEAgLTI4MTMsMTkgKzI4MTMsMTkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRF
bmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXMK
ICAgICAgICAgLS1tX3RyeUNhdGNoRGVwdGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAh
PSBCbG9ja1R5cGU6Okxvb3ApIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRh
dGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCkt
PnJldHVybkNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IGRhdGEu
cGhpc1tpXTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAg
ICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVu
ZChkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCBwdXNoKHJlc3VsdCkpOworICAgICAg
ICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRh
dGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpLCBw
dXNoKHJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9vdXRlckxv
b3BzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEu
c2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJl
dHVybkNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGkgPCBleHByZXNzaW9uU3RhY2su
c2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgKyttX3N0YWNrU2l6ZTsKICAgICAgICAgICAgICAg
ICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ld
KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVHlwZSByZXR1cm5UeXBl
ID0gZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKTsKKyAgICAgICAgICAgICAgICBUeXBl
IHJldHVyblR5cGUgPSBkYXRhLnNpZ25hdHVyZSgpLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+
cmV0dXJuVHlwZShpKTsKICAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQocmV0dXJuVHlwZSwgcHVzaChjb25zdGFudCh0b0IzVHlw
ZShyZXR1cm5UeXBlKSwgMHhiYmFkYmVlZikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMjg0MCw3ICsyODQwLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hh
YmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXMKIH0KIAogCi1CMzo6
VmFsdWUqIEIzSVJHZW5lcmF0b3I6OmNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJs
b2NrLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoUGF0Y2hwb2ludFZh
bHVlKiwgQm94PFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+KT4mIHBhdGNocG9pbnRGdW5jdG9y
KQorQjM6OlZhbHVlKiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Js
b2NrKiBibG9jaywgT3JpZ2luIG9yaWdpbiwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVy
ZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQo
UGF0Y2hwb2ludFZhbHVlKiwgQm94PFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+KT4mIHBhdGNo
cG9pbnRGdW5jdG9yKQogewogICAgIFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1ZT4gY29uc3Ry
YWluZWRBcmd1bWVudHM7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOwpAQCAtMjg3
MCw5ICsyODcwLDkgQEAgQjM6OlZhbHVlKiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hw
b2ludChCYXNpY0Jsb2NrKiBibG9jaywgT3JpZ2luIG9yaWdpbiwKICAgICByZXR1cm4gcGF0Y2hw
b2ludDsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgVHlwZURlZmlu
aXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlz
dCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIEFTU0VSVChzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFzPEZ1
bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogCiAg
ICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKICAgICBCMzo6VHlwZSByZXR1cm5UeXBlID0gdG9CM1Jl
c3VsdFR5cGUoJnNpZ25hdHVyZSk7CkBAIC0yODg2LDggKzI4ODYsOCBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBCMzo6VHVwbGU6IHsKICAgICAgICAg
ICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlwZT4mIHR1cGxlID0gbV9wcm9jLnR1cGxlRm9yVHlwZShy
ZXR1cm5UeXBlKTsKLSAgICAgICAgICAgIEFTU0VSVChzaWduYXR1cmUucmV0dXJuQ291bnQoKSA9
PSB0dXBsZS5zaXplKCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
Z25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICBBU1NFUlQoc2lnbmF0dXJl
LmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpID09IHR1cGxlLnNpemUoKSk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFzPEZ1bmN0
aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpOyArK2kpCiAgICAgICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQocHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMjk5NCwxMCArMjk5NCwxMCBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUsCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+
IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBWYWx1ZSogY2FsbGVlSW5kZXggPSBnZXQoYXJncy50YWtlTGFzdCgpKTsKLSAg
ICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisgICAg
QVNTRVJUKHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgp
ID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CiAgICAgLy8gTm90
ZTogY2FsbCBpbmRpcmVjdCBjYW4gY2FsbCBlaXRoZXIgV2ViQXNzZW1ibHlGdW5jdGlvbiBvciBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi4gQmVjYXVzZQpAQCAtMzA0MCwxMyArMzA0MCwxMyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdh
c21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQg
aXNuJ3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5p
dGlhbGl6ZWQuCiAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywg
d2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJ
bmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEw
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFz
c3VtZXMgaTY0Iik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246OnR5cGVJbmRleCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkxvYWQgY29k
ZWdlbiBhc3N1bWVzIGk2NCIpOwogICAgICAgICBWYWx1ZSogY2FsbGVlU2lnbmF0dXJlSW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIElu
dDY0LCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSk7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmln
aW4oKSwKICAgICAgICAgICAgICAgICAgICAgY2FsbGVlU2lnbmF0dXJlSW5kZXgsCi0gICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBTaWduYXR1cmU6OmludmFsaWRJbmRleCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIFR5cGVEZWZpbml0aW9uOjppbnZhbGlkSW5kZXgpKSk7CiAKICAgICAgICAgICAgIGNo
ZWNrLT5zZXRHZW5lcmF0b3IoWz0sIHRoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgICAgICB0aGlzLT5lbWl0
RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7CkBAIC0z
MDU1LDcgKzMwNTUsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNp
Z25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogCiAgICAgICAgIC8vIENo
ZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyB0aGUgdmFsdWUgd2UgZXhwZWN0LgogICAgICAgICB7
Ci0gICAgICAgICAgICBWYWx1ZSogZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpOworICAgICAgICAgICAgVmFsdWUqIGV4cGVjdGVk
U2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
bV9wcm9jLCBvcmlnaW4oKSwgVHlwZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSk7CiAgICAg
ICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCiAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVhbCwgb3JpZ2luKCksIGNh
bGxlZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KSk7CiAKQEAgLTMwNzYs
MTAgKzMwNzYsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWdu
ZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICByZXR1cm4gZW1pdElu
ZGlyZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwgc2lnbmF0dXJlLCBhcmdzLCBy
ZXN1bHRzKTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0
JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxS
ZWYoY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFZh
bHVlKiBjYWxsZWUgPSBnZXQoYXJncy50YWtlTGFzdCgpKTsKLSAgICBBU1NFUlQoc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5h
czxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsK
ICAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOwogCiAgICAgLy8gTm90ZTogY2FsbCByZWYgY2FuIGNh
bGwgZWl0aGVyIFdlYkFzc2VtYmx5RnVuY3Rpb24gb3IgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24uIEJlY2F1c2UKQEAgLTMxNzMsNyArMzE3Myw3IEBAIHN0YXRpYyBib29sIHNob3VsZER1bXBJ
UkZvcih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHJldHVybiBkdW1wQWxsb3dsaXN0LT5z
aG91bGREdW1wV2FzbUZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpOwogfQogCi1FeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQjMo
Q29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0
YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRp
b25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JF
bnRyeSwgVGllclVwQ291bnQqIHRpZXJVcCkKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRl
cm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCMyhDb21waWxhdGlvbkNvbnRl
eHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29u
c3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGlu
Zm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJV
cENvdW50KiB0aWVyVXApCiB7CiAgICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFs
RnVuY3Rpb24+KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5oCmluZGV4IGMxZTNkOWI2ZTJhN2JiNjNiNWM5NGQ0MWZiY2Y2MjliY2UwMWNkZmIu
LjcwMGI1YzA1ODNhNTRjMzVjM2Y2MzEwMTc2ZWRmNGNmODBmNDA4OGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtNTcsNyArNTcsNyBA
QCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBCb3g8UENUb0NvZGVPcmlnaW5NYXA+
IHBjVG9Db2RlT3JpZ2luTWFwOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUIzKENvbXBpbGF0aW9uQ29udGV4
dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtl
ZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwg
Q29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5k
ZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0cik7CitFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQjMoQ29t
cGlsYXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgVHlwZURlZmluaXRp
b24mLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIp
OwogCiB2b2lkIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChDb21waWxhdGlvbkNvbnRleHQmLCBM
aW5rQnVmZmVyJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cAppbmRleCAzMTc4NjY1MjcwN2M4NGJmMjkxZWQwNzM4ODAyNTVmNzVkNjc1ZWMwLi44ZTE4YTc3
MjIzMjBhNGNiZDRlZTBlOGMyM2I3NzQyNWZmZDJhMDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0zNyw4ICszNyw4IEBACiAjaW5jbHVkZSAiV2Fz
bUNhbGxlZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCisjaW5jbHVkZSAiV2FzbVR5cGVE
ZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8
d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTEyMyw4ICsx
MjMsOCBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAg
IGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChjb250ZXh0LCBsaW5rQnVmZmVyKTsKIAogICAgIHNp
emVfdCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9y
bWF0aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOwotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgVHlwZUlu
ZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25UeXBl
SW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOworICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWdu
YXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBlSW5kZXgpOwogICAgIGZ1bmN0aW9uLT5l
bnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAg
IEZJTkFMSVpFX1dBU01fQ09ERV9GT1JfTU9ERShDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGxp
bmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9u
WyVpXSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2Us
IG1fbW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNl
KSkpLmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBv
aW50Qnlwcm9kdWN0cykpOwpAQCAtMTkyLDggKzE5Miw4IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGls
ZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAKICAgICBpZiAobV9leHBvcnRlZEZ1
bmN0aW9uSW5kaWNlcy5jb250YWlucyhmdW5jdGlvbkluZGV4KSB8fCBtX21vZHVsZUluZm9ybWF0
aW9uLT5yZWZlcmVuY2VkRnVuY3Rpb25zKCkuY29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKICAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAgICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAg
ICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxG
dW5jdGlvblR5cGVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBUeXBlRGVm
aW5pdGlvbiYgc2lnbmF0dXJlID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKIAog
ICAgICAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0uZW1iZWRkZXJFbnRy
eXBvaW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgICAgIGF1dG8gZW1i
ZWRkZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gY3JlYXRlSlNUb1dhc21XcmFwcGVyKCptX2Nv
bXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0uZW1iZWRkZXJFbnRyeXBvaW50SklULCBz
aWduYXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21v
ZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpOwpAQCAtMjA3LDEw
ICsyMDcsMTAgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rp
b25JbmRleCkKIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBCQlFQbGFuOjpjb21w
aWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25Db250ZXh0JiBj
b250ZXh0LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBUaWVyVXBDb3VudCogdGllclVwKQogewogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9u
ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdOwotICAgIFNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJu
YWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUlu
ZGV4KTsKKyAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50
ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgIGNvbnN0IFR5cGVE
ZWZpbml0aW9uJiBzaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBlSW5kZXgpOwog
ICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmlt
cG9ydEZ1bmN0aW9uQ291bnQoKSArIGZ1bmN0aW9uSW5kZXg7Ci0gICAgQVNTRVJUX1VOVVNFRChm
dW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1h
dGlvbi0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2Up
ID09IHR5cGVJbmRleCk7CiAgICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsKIAogICAgIC8vIEZJWE1FOiBT
b21lIHdlYnBhZ2VzIHVzZSB2ZXJ5IGxhcmdlIFdhc20gbW9kdWxlLCBhbmQgaXQgZXhoYXVzdHMg
YWxsIGV4ZWN1dGFibGUgbWVtb3J5IGluIEFSTTY0IGRldmljZXMgc2luY2UgdGhlIHNpemUgb2Yg
ZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9uIGlzIG9ubHkgbGltaXRlZCB0byAxMjhNQi4KQEAgLTI0
NCw4ICsyNDQsOCBAQCB2b2lkIEJCUVBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oKQogewog
ICAgIGZvciAodWludDMyX3QgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKICAg
ICAgICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRz
W2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1
bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBUeXBlSW5kZXgg
dHlwZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblR5cGVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0
dXJlID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKICAgICAgICAgY29uc3QgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5k
ZXhTcGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7
CiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21D
YWxsZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAppbmRleCA2
ZWY2NjQ3ZTJmNDM3N2M2YzBjMWY4MTdkZmM5MjQ0Y2ZkYjg4MTJjLi5kOGFkZjRiMTMwZmE0ZTg0
YWZhNjgyZmUwN2IzM2IxZjVkYjZmMzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQ2FsbGVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxlZS5oCkBAIC0yNjUsNyArMjY1LDcgQEAgcHVibGljOgogCiAgICAgTExJbnRUaWVyVXBD
b3VudGVyJiB0aWVyVXBDb3VudGVyKCkgeyByZXR1cm4gbV90aWVyVXBDb3VudGVyOyB9CiAKLSAg
ICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICBj
b25zdCBGdW5jdGlvblNpZ25hdHVyZSYgc2lnbmF0dXJlKHVuc2lnbmVkIGluZGV4KSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuICptX3NpZ25hdHVyZXNbaW5kZXhdOwogICAgIH0KQEAgLTMw
NCw3ICszMDQsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW5zdHJ1Y3Rp
b25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlciB7IG51bGxwdHIgfTsKICAgICBGaXhlZFZlY3RvcjxXYXNtSW5zdHJ1Y3Rpb25T
dHJlYW06Ok9mZnNldD4gbV9qdW1wVGFyZ2V0czsKLSAgICBGaXhlZFZlY3Rvcjxjb25zdCBTaWdu
YXR1cmUqPiBtX3NpZ25hdHVyZXM7CisgICAgRml4ZWRWZWN0b3I8Y29uc3QgRnVuY3Rpb25TaWdu
YXR1cmUqPiBtX3NpZ25hdHVyZXM7CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxp
bmVKdW1wVGFyZ2V0czsKICAgICBMTEludFRpZXJVcENvdW50ZXIgbV90aWVyVXBDb3VudGVyOwog
ICAgIEZpeGVkVmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFibGVzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAppbmRleCA1OTFlZWIy
N2IwMTY5MDA3YWZhMTgzZDQzMjcyOWZhMGNhNTZhZDgxLi40Mjg4ZjgwMWRlMWJlMzRiMzg5NWJh
ZjJmM2FjNTUxZWM0OGFiNTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlJl
Z2lzdGVyQXRPZmZzZXRMaXN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRl
ICJXYXNtRm9ybWF0LmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5oIgorI2luY2x1ZGUgIldh
c21UeXBlRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldhc21WYWx1ZUxvY2F0aW9uLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC0xMjAsOCArMTIwLDkgQEAgcHJpdmF0
ZToKICAgICB9CiAKIHB1YmxpYzoKLSAgICBDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9u
Rm9yKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9sZSByb2xlID0gQ2FsbFJvbGU6
OkNhbGxlcikgY29uc3QKKyAgICBDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNv
bnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlLCBDYWxsUm9sZSByb2xlID0gQ2FsbFJvbGU6OkNhbGxl
cikgY29uc3QKICAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9ICp0eXBlLmFz
PEZ1bmN0aW9uU2lnbmF0dXJlPigpOwogICAgICAgICBib29sIGFyZ3VtZW50c0luY2x1ZGVJNjQg
PSBmYWxzZTsKICAgICAgICAgYm9vbCByZXN1bHRzSW5jbHVkZUk2NCA9IGZhbHNlOwogICAgICAg
ICBzaXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKQEAgLTEzMiw4ICsxMzMsOCBAQCBwdWJsaWM6
CiAKICAgICAgICAgVmVjdG9yPEFyZ3VtZW50TG9jYXRpb24+IHBhcmFtcyhzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgIGFyZ3VtZW50c0luY2x1ZGVJNjQg
fD0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpLmlzSTY0KCk7Ci0gICAgICAgICAgICBwYXJhbXNbaV0g
PSBtYXJzaGFsbExvY2F0aW9uKHJvbGUsIHNpZ25hdHVyZS5hcmd1bWVudChpKSwgZ3BBcmd1bWVu
dENvdW50LCBmcEFyZ3VtZW50Q291bnQsIGFyZ1N0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIGFy
Z3VtZW50c0luY2x1ZGVJNjQgfD0gc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKS5pc0k2NCgpOwor
ICAgICAgICAgICAgcGFyYW1zW2ldID0gbWFyc2hhbGxMb2NhdGlvbihyb2xlLCBzaWduYXR1cmUu
YXJndW1lbnRUeXBlKGkpLCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgYXJnU3Rh
Y2tPZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAg
ICAgIGZwQXJndW1lbnRDb3VudCA9IDA7CkBAIC0yMTAsNyArMjExLDcgQEAgcHJpdmF0ZToKICAg
ICB9CiAKIHB1YmxpYzoKLSAgICBDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9sZSByb2xlID0gQ2FsbFJvbGU6OkNhbGxl
ZSkgY29uc3QKKyAgICBDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFR5
cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIENhbGxSb2xlIHJvbGUgPSBDYWxsUm9sZTo6Q2FsbGVl
KSBjb25zdAogICAgIHsKICAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAg
ICAgIHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOwpAQCAtMjE5LDggKzIyMCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHN0YWNrT2Zmc2V0IC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsK
IAogICAgICAgICBWZWN0b3I8QXJndW1lbnRMb2NhdGlvbj4gcGFyYW1zOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAg
ICAgICAgIHBhcmFtcy5hcHBlbmQobWFyc2hhbGxMb2NhdGlvbihyb2xlLCBzaWduYXR1cmUuYXJn
dW1lbnQoaSksIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCkp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBwYXJhbXMuYXBw
ZW5kKG1hcnNoYWxsTG9jYXRpb24ocm9sZSwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5hcmd1bWVudFR5cGUoaSksIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBz
dGFja09mZnNldCkpOwogCiAgICAgICAgIFZlY3RvcjxBcmd1bWVudExvY2F0aW9uLCAxPiByZXN1
bHRzIHsgQXJndW1lbnRMb2NhdGlvbjo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSB9Owog
ICAgICAgICByZXR1cm4gQ2FsbEluZm9ybWF0aW9uKFdURk1vdmUocGFyYW1zKSwgV1RGTW92ZShy
ZXN1bHRzKSwgc3RhY2tPZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUVtYmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1i
ZWRkZXIuaAppbmRleCA5OTBlNDZmNDM4MTNhMTRiZjRhMTFmMDkyMTA4Yzk1MTE1Zjc0YjQ2Li4y
NDE4NWFiODZlNTllMmYyMDM0MTRiOTU0ZTgxNGNmMjhmZjc1NTIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaApAQCAtNDUsMTEgKzQ1LDExIEBAIHN0cnVjdCBD
b21waWxhdGlvbkNvbnRleHQ7CiBjbGFzcyBJbnN0YW5jZTsKIHN0cnVjdCBJbnRlcm5hbEZ1bmN0
aW9uOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwotY2xhc3MgU2lnbmF0dXJlOworY2xhc3Mg
VHlwZURlZmluaXRpb247CiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsKIAogLy8gQ3Jl
YXRlIHdyYXBwZXIgY29kZSB0byBjYWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNzZW1ibHkuCi11
c2luZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPihDQ2FsbEhlbHBlcnMmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1l
bW9yeU1vZGUsIHVpbnQzMl90KT47Cit1c2luZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6
OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPihDQ2FsbEhlbHBlcnMm
LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPios
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QpPjsKIAogLy8g
Q2FsbGVkIGFzIHNvb24gYXMgYW4gZXhjZXB0aW9uIGlzIGRldGVjdGVkLiBUaGUgcmV0dXJuIHZh
bHVlIGlzIHRoZSBQQyB0byBjb250aW51ZSBhdC4KIHVzaW5nIFRocm93V2FzbUV4Y2VwdGlvbiA9
IHZvaWQqICgqKShDYWxsRnJhbWUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBJbnN0YW5jZSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmNwcAppbmRleCA0MTEw
ZjRlN2QwMTQxYWMwNDNiMTUyYmE1NTEzYjlmZmI2NDk3M2M3Li43NmJmM2FiYmM3ODM4MjM2Yjk4
YzViNWVlYmUxNDJhMjczZThkZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRW50cnlQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRW50cnlQbGFuLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgRW50cnlQbGFuOjpwcmVw
YXJlKCkKIAogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24t
PmZ1bmN0aW9uczsKICAgICBtX251bWJlck9mRnVuY3Rpb25zID0gZnVuY3Rpb25zLnNpemUoKTsK
LSAgICBpZiAoIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCksICIg
V2ViQXNzZW1ibHkgdG8gSmF2YVNjcmlwdCBzdHVicyIpCisgICAgaWYgKCF0cnlSZXNlcnZlQ2Fw
YWNpdHkobV93YXNtVG9XYXNtRXhpdFN0dWJzLCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRG
dW5jdGlvblR5cGVJbmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0
dWJzIikKICAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2Fz
bUNhbGxzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFz
c2VtYmx5IGNhbGxzIikpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oCmluZGV4IGM3OWUzMzdjN2E3YWNkMTI4MjBjMmU2OTQwMzQ0ZmY0YmRk
MTBhOWUuLmRkYjM3YzE1MWNkZGRjNDkwZTJhNGZjMjYzYTM1ZjUwMWNkZmQ1OWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNs
dWRlICJXYXNtT1NSRW50cnlEYXRhLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUg
Ildhc21QYWdlQ291bnQuaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCisjaW5jbHVkZSAi
V2FzbVR5cGVEZWZpbml0aW9uLmgiCiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRp
b25Db250ZXh0Owogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogc3RydWN0IFVubGlua2VkSGFu
ZGxlckluZm87CiAKLXVzaW5nIEJsb2NrU2lnbmF0dXJlID0gY29uc3QgU2lnbmF0dXJlKjsKK3Vz
aW5nIEJsb2NrU2lnbmF0dXJlID0gY29uc3QgVHlwZURlZmluaXRpb24qOwogCiBlbnVtIGNsYXNz
IFRhYmxlRWxlbWVudFR5cGUgOiB1aW50OF90IHsKICAgICBFeHRlcm5yZWYsCkBAIC0xMDUsMjgg
KzEwNSwyOCBAQCBpbmxpbmUgYm9vbCBpc1JlZlR5cGUoVHlwZSB0eXBlKQogaW5saW5lIGJvb2wg
aXNFeHRlcm5yZWYoVHlwZSB0eXBlKQogewogICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJs
eVR5cGVkRnVuY3Rpb25SZWZlcmVuY2VzKCkpCi0gICAgICAgIHJldHVybiBpc1JlZlR5cGUodHlw
ZSkgJiYgdHlwZS5pbmRleCA9PSBzdGF0aWNfY2FzdDxTaWduYXR1cmVJbmRleD4oVHlwZUtpbmQ6
OkV4dGVybnJlZik7CisgICAgICAgIHJldHVybiBpc1JlZlR5cGUodHlwZSkgJiYgdHlwZS5pbmRl
eCA9PSBzdGF0aWNfY2FzdDxUeXBlSW5kZXg+KFR5cGVLaW5kOjpFeHRlcm5yZWYpOwogICAgIHJl
dHVybiB0eXBlLmtpbmQgPT0gVHlwZUtpbmQ6OkV4dGVybnJlZjsKIH0KIAogaW5saW5lIGJvb2wg
aXNGdW5jcmVmKFR5cGUgdHlwZSkKIHsKICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlU
eXBlZEZ1bmN0aW9uUmVmZXJlbmNlcygpKQotICAgICAgICByZXR1cm4gaXNSZWZUeXBlKHR5cGUp
ICYmIHR5cGUuaW5kZXggPT0gc3RhdGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+KFR5cGVLaW5kOjpG
dW5jcmVmKTsKKyAgICAgICAgcmV0dXJuIGlzUmVmVHlwZSh0eXBlKSAmJiB0eXBlLmluZGV4ID09
IHN0YXRpY19jYXN0PFR5cGVJbmRleD4oVHlwZUtpbmQ6OkZ1bmNyZWYpOwogICAgIHJldHVybiB0
eXBlLmtpbmQgPT0gVHlwZUtpbmQ6OkZ1bmNyZWY7CiB9CiAKIGlubGluZSBUeXBlIGZ1bmNyZWZU
eXBlKCkKIHsKICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVm
ZXJlbmNlcygpKQotICAgICAgICByZXR1cm4gV2FzbTo6VHlwZSB7IFdhc206OlR5cGVLaW5kOjpS
ZWZOdWxsLCBXYXNtOjpOdWxsYWJsZTo6WWVzLCBzdGF0aWNfY2FzdDxXYXNtOjpTaWduYXR1cmVJ
bmRleD4oV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWYpIH07CisgICAgICAgIHJldHVybiBXYXNtOjpU
eXBlIHsgV2FzbTo6VHlwZUtpbmQ6OlJlZk51bGwsIFdhc206Ok51bGxhYmxlOjpZZXMsIHN0YXRp
Y19jYXN0PFdhc206OlR5cGVJbmRleD4oV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWYpIH07CiAgICAg
cmV0dXJuIFR5cGVzOjpGdW5jcmVmOwogfQogCiBpbmxpbmUgVHlwZSBleHRlcm5yZWZUeXBlKCkK
IHsKICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNl
cygpKQotICAgICAgICByZXR1cm4gV2FzbTo6VHlwZSB7IFdhc206OlR5cGVLaW5kOjpSZWZOdWxs
LCBXYXNtOjpOdWxsYWJsZTo6WWVzLCBzdGF0aWNfY2FzdDxXYXNtOjpTaWduYXR1cmVJbmRleD4o
V2FzbTo6VHlwZUtpbmQ6OkV4dGVybnJlZikgfTsKKyAgICAgICAgcmV0dXJuIFdhc206OlR5cGUg
eyBXYXNtOjpUeXBlS2luZDo6UmVmTnVsbCwgV2FzbTo6TnVsbGFibGU6Olllcywgc3RhdGljX2Nh
c3Q8V2FzbTo6VHlwZUluZGV4PihXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmKSB9OwogICAgIHJl
dHVybiBUeXBlczo6RXh0ZXJucmVmOwogfQogCkBAIC0yMzgsMTEgKzIzOCw2IEBAIFN0cmluZyBt
YWtlU3RyaW5nKGNvbnN0IE5hbWUmIGNoYXJhY3RlcnMpOwogCiBzdHJ1Y3QgR2xvYmFsSW5mb3Jt
YXRpb24gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBlbnVtIE11
dGFiaWxpdHkgOiB1aW50OF90IHsKLSAgICAgICAgLy8gRklYTUUgYXV0by1nZW5lcmF0ZSB0aGlz
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MjMxCi0gICAgICAg
IE11dGFibGUgPSAxLAotICAgICAgICBJbW11dGFibGUgPSAwCi0gICAgfTsKIAogICAgIGVudW0g
SW5pdGlhbGl6YXRpb25UeXBlIDogdWludDhfdCB7CiAgICAgICAgIElzSW1wb3J0LApAQCAtNDU2
LDExICs0NTEsMTEgQEAgc3RydWN0IEludGVybmFsRnVuY3Rpb24gewogc3RydWN0IFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb24gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRF
RDsKICAgICB1c2luZyBMb2FkTG9jYXRpb24gPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVu
dHJ5UHRyVGFnPio7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpZ25hdHVyZUluZGV4
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24s
IHNpZ25hdHVyZUluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaWduYXR1
cmVJbmRleCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uLCB0eXBlSW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5
cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbiwgZW50cnlwb2ludExvYWRMb2NhdGlvbik7IH0KIAotICAgIC8vIEZJ
WE1FOiBQYWNrIHNpZ25hdHVyZSBpbmRleCBhbmQgY29kZSBwb2ludGVyIGludG8gb25lIDY0LWJp
dCB2YWx1ZS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
NTExPi4KLSAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCB7IFNpZ25hdHVyZTo6aW52
YWxpZEluZGV4IH07CisgICAgLy8gRklYTUU6IFBhY2sgdHlwZSBpbmRleCBhbmQgY29kZSBwb2lu
dGVyIGludG8gb25lIDY0LWJpdCB2YWx1ZS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1NTExPi4KKyAgICBUeXBlSW5kZXggdHlwZUluZGV4IHsgVHlwZURl
ZmluaXRpb246OmludmFsaWRJbmRleCB9OwogICAgIExvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9h
ZExvY2F0aW9uOwogfTsKIHVzaW5nIEZ1bmN0aW9uSW5kZXhTcGFjZSA9IFZlY3RvcjxXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuY3BwCmluZGV4IDMx
ZWUyMTVkZWRmNzgxODAxMTVmZDI0ZmJhNmZhM2Y5NzJiODNhOWUuLjBjNmY3OWI2YzE5OWJkOWFm
NDgwYTU5M2ZjYzE0NTQyOTAyYTNlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcApAQCAt
NTEsNyArNTEsNyBAQCBXYXNtSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBGdW5jdGlvbkNvZGVC
bG9ja0dlbmVyYXRvcjo6b3V0T2ZMaW5lSnVtcE9mZnNldChXYQogICAgIHJldHVybiBtX291dE9m
TGluZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAKLXVuc2lnbmVkIEZ1bmN0
aW9uQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRTaWduYXR1cmUoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUpCit1bnNpZ25lZCBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2lnbmF0dXJl
KGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlJiBzaWduYXR1cmUpCiB7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSBtX3NpZ25hdHVyZXMuc2l6ZSgpOwogICAgIG1fc2lnbmF0dXJlcy5hcHBlbmQoJnNpZ25h
dHVyZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oCmluZGV4IGExZTM5YTFlNmQ2MWVlMWIxZmViZTEw
MmZiODJlMGY1ZTI3Zjg4YjcuLjQ4OWZlNjZjNTdmZTk3ZjJmZDRhZWNjY2ZmMWFkNjg3ODI0ZGIy
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNv
ZGVCbG9ja0dlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIEJ5dGVj
b2RlR2VuZXJhdG9yQmFzZTsKIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgTExJbnRDYWxsZWU7
Ci1jbGFzcyBTaWduYXR1cmU7CitjbGFzcyBGdW5jdGlvblNpZ25hdHVyZTsKIHN0cnVjdCBHZW5l
cmF0b3JUcmFpdHM7CiAKIHN0cnVjdCBKdW1wVGFibGVFbnRyeSB7CkBAIC0xMTYsNyArMTE2LDcg
QEAgcHVibGljOgogCiAgICAgSGFzaE1hcDxXYXNtSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwg
TExJbnRUaWVyVXBDb3VudGVyOjpPU1JFbnRyeURhdGE+JiB0aWVyVXBDb3VudGVyKCkgeyByZXR1
cm4gbV90aWVyVXBDb3VudGVyOyB9CiAKLSAgICB1bnNpZ25lZCBhZGRTaWduYXR1cmUoY29uc3Qg
U2lnbmF0dXJlJik7CisgICAgdW5zaWduZWQgYWRkU2lnbmF0dXJlKGNvbnN0IEZ1bmN0aW9uU2ln
bmF0dXJlJik7CiAKICAgICBKdW1wVGFibGUmIGFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZF
bnRyaWVzKTsKICAgICB1bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsKQEAgLTE0
MCw3ICsxNDAsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW5zdHJ1Y3Rp
b25TdHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlciB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8V2FzbUluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQ+IG1fanVtcFRhcmdldHM7Ci0gICAgVmVjdG9yPGNvbnN0IFNpZ25hdHVyZSo+IG1f
c2lnbmF0dXJlczsKKyAgICBWZWN0b3I8Y29uc3QgRnVuY3Rpb25TaWduYXR1cmUqPiBtX3NpZ25h
dHVyZXM7CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsK
ICAgICBIYXNoTWFwPFdhc21JbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBMTEludFRpZXJVcENv
dW50ZXI6Ok9TUkVudHJ5RGF0YT4gbV90aWVyVXBDb3VudGVyOwogICAgIFZlY3RvcjxKdW1wVGFi
bGU+IG1fanVtcFRhYmxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uUGFyc2VyLmgKaW5kZXggOWJmOTY2M2M4YTM1ZmU3OTBmY2M0YmUxYmVkMWY3NDVkYTAx
NTM3NC4uZGIxYzlhZWY4MmQ2NWE1ODAxMjU0MjdjM2ZjMTUyOTQyN2ExZGQxZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTI4LDcg
KzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtUGFyc2Vy
LmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlw
ZURlZmluaXRpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTUwLDEwICs1MCwxMCBAQCBlbnVtIGNsYXNz
IENhdGNoS2luZCB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNsb3NpbmdTdGFjaywgdHlwZW5hbWUg
TmV3U3RhY2s+CiB2b2lkIHNwbGl0U3RhY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBFbmNs
b3NpbmdTdGFjayYgZW5jbG9zaW5nU3RhY2ssIE5ld1N0YWNrJiBuZXdTdGFjaykKIHsKLSAgICBu
ZXdTdGFjay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
KTsKLSAgICBBU1NFUlQoZW5jbG9zaW5nU3RhY2suc2l6ZSgpID49IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpKTsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSBlbmNsb3NpbmdTdGFjay5zaXplKCkg
LSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICBuZXdTdGFjay5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3Vt
ZW50Q291bnQoKSk7CisgICAgQVNTRVJUKGVuY2xvc2luZ1N0YWNrLnNpemUoKSA+PSBzaWduYXR1
cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkpOworICAgIHVuc2ln
bmVkIG9mZnNldCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXM8RnVuY3Rp
b25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgp
OyArK2kpCiAgICAgICAgIG5ld1N0YWNrLnVuY2hlY2tlZEFwcGVuZChlbmNsb3NpbmdTdGFjay5h
dChpICsgb2Zmc2V0KSk7CiAgICAgZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7CiB9CkBA
IC0xMDEsMTMgKzEwMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIENvbnRyb2xUeXBlIGNvbnRyb2xE
YXRhOwogICAgIH07CiAKLSAgICBGdW5jdGlvblBhcnNlcihDb250ZXh0JiwgY29uc3QgdWludDhf
dCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUm
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYpOworICAgIEZ1bmN0aW9uUGFyc2VyKENvbnRleHQm
LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNv
bnN0IFR5cGVEZWZpbml0aW9uJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKIAogICAgIFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIAogICAgIE9wVHlwZSBjdXJyZW50T3Bj
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50T3Bjb2RlOyB9CiAgICAgc2l6ZV90IGN1cnJl
bnRPcGNvZGVTdGFydGluZ09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZVN0
YXJ0aW5nT2Zmc2V0OyB9Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUoKSBjb25zdCB7
IHJldHVybiBtX3NpZ25hdHVyZTsgfQorICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1
cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogCiAgICAgQ29udHJvbFN0YWNrJiBj
b250cm9sU3RhY2soKSB7IHJldHVybiBtX2NvbnRyb2xTdGFjazsgfQogICAgIFN0YWNrJiBleHBy
ZXNzaW9uU3RhY2soKSB7IHJldHVybiBtX2V4cHJlc3Npb25TdGFjazsgfQpAQCAtMjA5LDcgKzIw
OSw3IEBAIHByaXZhdGU6CiAgICAgU3RhY2sgbV9leHByZXNzaW9uU3RhY2s7CiAgICAgQ29udHJv
bFN0YWNrIG1fY29udHJvbFN0YWNrOwogICAgIFZlY3RvcjxUeXBlLCAxNj4gbV9sb2NhbHM7Ci0g
ICAgY29uc3QgU2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlv
biYgbV9zaWduYXR1cmU7CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKIAog
ICAgIE9wVHlwZSBtX2N1cnJlbnRPcGNvZGU7CkBAIC0yMjYsNyArMjI2LDcgQEAgc3RhdGljIGJv
b2wgaXNUcnlPckNhdGNoKENvbnRyb2xUeXBlJiBkYXRhKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb250ZXh0PgotRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvKQorRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlv
bkxlbmd0aCwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIGluZm8pCiAgICAgOiBQYXJzZXIoZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5n
dGgpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVy
ZSkKQEAgLTI0MiwxNCArMjQyLDE1IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBh
cnNlKCkgLT4gUmVzdWx0CiB7CiAgICAgdWludDMyX3QgbG9jYWxHcm91cHNDb3VudDsKIAotICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4dC5hZGRBcmd1bWVudHMobV9zaWduYXR1cmUp
LCAiY2FuJ3QgYWRkICIsIG1fc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMg
dG8gRnVuY3Rpb24iKTsKKyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSAqbV9zaWduYXR1cmUu
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9jb250
ZXh0LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZSksICJjYW4ndCBhZGQgIiwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMgdG8gRnVuY3Rpb24iKTsKICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihsb2NhbEdyb3Vwc0NvdW50KSwgImNhbid0IGdldCBs
b2NhbCBncm91cHMgY291bnQiKTsKIAotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fbG9jYWxz
LnRyeVJlc2VydmVDYXBhY2l0eShtX3NpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3Qg
YWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgZnVuY3Rpb24ncyAiLCBtX3NpZ25hdHVyZS5hcmd1
bWVudENvdW50KCksICIgYXJndW1lbnRzIik7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG1fc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBtX2xvY2Fscy51bmNo
ZWNrZWRBcHBlbmQobV9zaWduYXR1cmUuYXJndW1lbnQoaSkpOworICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0aW9uJ3MgIiwgc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICBtX2xv
Y2Fscy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKSk7CiAKLSAgICB1
aW50NjRfdCB0b3RhbE51bWJlck9mTG9jYWxzID0gbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
OworICAgIHVpbnQ2NF90IHRvdGFsTnVtYmVyT2ZMb2NhbHMgPSBzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsb2NhbEdyb3Vwc0NvdW50OyAr
K2kpIHsKICAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZMb2NhbHM7CiAgICAgICAgIFR5cGUgdHlw
ZU9mTG9jYWw7CkBAIC03MzIsOSArNzMzLDExIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4
dD46OmNoZWNrQnJhbmNoVGFyZ2V0KGNvbnN0IENvbnRyb2xUeXBlJiB0YXJnZXQpIC0+IFBhCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgogYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
dW5pZnkoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2xEYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
Ci0gICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0
dXJuQ291bnQoKSAhPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgYmxvY2sgd2l0aCB0eXBl
OiAiLCBjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+dG9TdHJpbmcoKSwgIiByZXR1cm5zOiAiLCBj
b250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKSwgIiBidXQgc3RhY2sgaGFzOiAi
LCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgdmFsdWVzIik7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kp
Ci0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShtX2V4cHJlc3Npb25T
dGFja1tpXS50eXBlKCksIGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpKSwg
ImNvbnRyb2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlLiAiLCBtX2V4cHJlc3Np
b25TdGFja1tpXS50eXBlKCkua2luZCwgIiBpcyBub3QgYSAiLCBjb250cm9sRGF0YS5zaWduYXR1
cmUoKS0+cmV0dXJuVHlwZShpKS5raW5kKTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiogdHlw
ZURlZmluaXRpb24gPSBjb250cm9sRGF0YS5zaWduYXR1cmUoKTsgLy8ganVzdCB0byBhdm9pZCBh
IHdlaXJkIGNvbXBpbGVyIGVycm9yIHdpdGggdGVtcGxhdGVzIGF0IHRoZSBuZXh0IGxpbmUuCisg
ICAgY29uc3QgRnVuY3Rpb25TaWduYXR1cmUqIHNpZ25hdHVyZSA9IHR5cGVEZWZpbml0aW9uLT5h
czxGdW5jdGlvblNpZ25hdHVyZT4oKTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHNpZ25h
dHVyZS0+cmV0dXJuQ291bnQoKSAhPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgYmxvY2sg
d2l0aCB0eXBlOiAiLCBzaWduYXR1cmUtPnRvU3RyaW5nKCksICIgcmV0dXJuczogIiwgc2lnbmF0
dXJlLT5yZXR1cm5Db3VudCgpLCAiIGJ1dCBzdGFjayBoYXM6ICIsIG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKSwgIiB2YWx1ZXMiKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0
dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
IWlzU3VidHlwZShtX2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCksIHNpZ25hdHVyZS0+cmV0dXJu
VHlwZShpKSksICJjb250cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZS4gIiwg
bV9leHByZXNzaW9uU3RhY2tbaV0udHlwZSgpLmtpbmQsICIgaXMgbm90IGEgIiwgc2lnbmF0dXJl
LT5yZXR1cm5UeXBlKGkpLmtpbmQpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTEwODIsMTAg
KzEwODUsMTAgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAg
ICAgICAgICAgICBpbnQzMl90IGhlYXBUeXBlOwogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VIZWFwVHlwZShtX2luZm8sIGhlYXBUeXBlKSwgInJlZi5udWxsIGhlYXB0eXBl
IG11c3QgYmUgZnVuY3JlZiwgZXh0ZXJucmVmIG9yIHR5cGVfaWR4Iik7CiAgICAgICAgICAgICBp
ZiAoaXNUeXBlSW5kZXhIZWFwVHlwZShoZWFwVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9p
bmZvLnVzZWRTaWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgdHlw
ZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6Olllcywgc2lnbmF0
dXJlSW5kZXggfTsKKyAgICAgICAgICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gVHlwZUlu
Zm9ybWF0aW9uOjpnZXQobV9pbmZvLnR5cGVTaWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVs
bGFibGU6OlllcywgdHlwZUluZGV4IH07CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICB0eXBlT2ZOdWxsID0gVHlwZSB7IFR5cGVLaW5kOjpSZWZOdWxsLCBOdWxsYWJsZTo6WWVz
LCBzdGF0aWNfY2FzdDxTaWduYXR1cmVJbmRleD4oaGVhcFR5cGUpIH07CisgICAgICAgICAgICAg
ICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6Olllcywg
c3RhdGljX2Nhc3Q8VHlwZUluZGV4PihoZWFwVHlwZSkgfTsKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlZlR5cGUobV9pbmZvLCB0eXBlT2ZO
dWxsKSwgInJlZi5udWxsIHR5cGUgbXVzdCBiZSBhIHJlZmVyZW5jZSB0eXBlIik7CiAgICAgICAg
IG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZCh0eXBlT2ZOdWxsLCBtX2NvbnRl
eHQuYWRkQ29uc3RhbnQodHlwZU9mTnVsbCwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOwpA
QCAtMTExMyw4ICsxMTE2LDggQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRF
X0NBU0UpCiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFJlZkZ1bmMoaW5kZXgs
IHJlc3VsdCkpOwogCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseVR5cGVkRnVu
Y3Rpb25SZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRl
eCk7Ci0gICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoVHlw
ZSB7IFR5cGVLaW5kOjpSZWYsIE51bGxhYmxlOjpObywgc2lnbmF0dXJlSW5kZXggfSwgcmVzdWx0
KTsKKyAgICAgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBtX2luZm8udHlwZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFj
ay5jb25zdHJ1Y3RBbmRBcHBlbmQoVHlwZSB7IFR5cGVLaW5kOjpSZWYsIE51bGxhYmxlOjpObywg
dHlwZUluZGV4IH0sIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9
CiAKQEAgLTExNzUsNyArMTE3OCw3IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENS
RUFURV9DQVNFKQogICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWU7CiAgICAgICAgIFdBU01f
VFJZX1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7
CiAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLmdsb2JhbHMu
c2l6ZSgpLCAic2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQg
aXMgIiwgbV9pbmZvLmdsb2JhbHMuc2l6ZSgpKTsKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihtX2luZm8uZ2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWxJbmZvcm1hdGlv
bjo6SW1tdXRhYmxlLCAic2V0X2dsb2JhbCAiLCBpbmRleCwgIiBpcyBpbW11dGFibGUiKTsKKyAg
ICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2luZm8uZ2xvYmFsc1tpbmRleF0ubXV0YWJp
bGl0eSA9PSBNdXRhYmlsaXR5OjpJbW11dGFibGUsICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIGlz
IGltbXV0YWJsZSIpOwogCiAgICAgICAgIFR5cGUgZ2xvYmFsVHlwZSA9IG1faW5mby5nbG9iYWxz
W2luZGV4XS50eXBlOwogICAgICAgICBBU1NFUlQoaXNWYWx1ZVR5cGUoZ2xvYmFsVHlwZSkpOwpA
QCAtMTE4OSw4ICsxMTkyLDkgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRF
X0NBU0UpCiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIFdBU01fRkFJ
TF9JRl9IRUxQRVJfRkFJTFMocGFyc2VGdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpKTsKIAot
ICAgICAgICBTaWduYXR1cmVJbmRleCBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1faW5mby5zaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAg
IGNvbnN0IFNpZ25hdHVyZSYgY2FsbGVlU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIFR5cGVJbmRleCBjYWxsZWVUeXBl
SW5kZXggPSBtX2luZm8udHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbklu
ZGV4KTsKKyAgICAgICAgY29uc3QgVHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uID0gVHlw
ZUluZm9ybWF0aW9uOjpnZXQoY2FsbGVlVHlwZUluZGV4KTsKKyAgICAgICAgY29uc3QgYXV0byYg
Y2FsbGVlU2lnbmF0dXJlID0gKnR5cGVEZWZpbml0aW9uLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCkgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYWxsIGZ1bmN0aW9uIGluZGV4ICIs
IGZ1bmN0aW9uSW5kZXgsICIgaGFzICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCks
ICIgYXJndW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIs
IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIAogICAgICAgICBzaXplX3Qg
Zmlyc3RBcmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gY2FsbGVlU2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKQEAgLTExOTgsNyArMTIwMiw3IEBAIEZPUl9FQUNIX1dB
U01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpKSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGNhbGwncyAiLCBjYWxsZWVT
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25T
dGFjay5hdChpKTsKLSAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlw
ZShhcmcudHlwZSgpLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJ
bmRleCkpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJnLnR5cGUo
KS5raW5kLCAiLCBleHBlY3RlZCAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0
QXJndW1lbnRJbmRleCkua2luZCk7CisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KCFpc1N1YnR5cGUoYXJnLnR5cGUoKSwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0g
Zmlyc3RBcmd1bWVudEluZGV4KSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGwsIGdv
dCAiLCBhcmcudHlwZSgpLmtpbmQsICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1
bWVudFR5cGUoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkua2luZCk7CiAgICAgICAgICAgICBhcmdz
LnVuY2hlY2tlZEFwcGVuZChhcmcpOwogICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVl
RnJvbVN0YWNrKCk7CiAgICAgICAgIH0KQEAgLTEyMDcsNyArMTIxMSw3IEBAIEZPUl9FQUNIX1dB
U01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgICAg
ICBSZXN1bHRMaXN0IHJlc3VsdHM7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFk
ZENhbGwoZnVuY3Rpb25JbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7Cisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwgdHlw
ZURlZmluaXRpb24sIGFyZ3MsIHJlc3VsdHMpKTsKIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsZWVTaWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CiAKQEAgLTEy
MjQsMTAgKzEyMjgsMTEgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NB
U0UpCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNpZ25hdHVy
ZUluZGV4KSwgImNhbid0IGdldCBjYWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4Iik7CiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHRhYmxlSW5kZXgpLCAi
Y2FuJ3QgZ2V0IGNhbGxfaW5kaXJlY3QncyB0YWJsZSBpbmRleCIpOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKHRhYmxlSW5kZXggPj0gbV9pbmZvLnRhYmxlQ291bnQoKSwgImNhbGxfaW5k
aXJlY3QncyB0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGludmFsaWQsIGxpbWl0IGlzICIs
IG1faW5mby50YWJsZUNvdW50KCkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5m
by51c2VkU2lnbmF0dXJlcy5zaXplKCkgPD0gc2lnbmF0dXJlSW5kZXgsICJjYWxsX2luZGlyZWN0
J3Mgc2lnbmF0dXJlIGluZGV4ICIsIHNpZ25hdHVyZUluZGV4LCAiIGV4Y2VlZHMga25vd24gc2ln
bmF0dXJlcyAiLCBtX2luZm8udXNlZFNpZ25hdHVyZXMuc2l6ZSgpKTsKKyAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihtX2luZm8udHlwZUNvdW50KCkgPD0gc2lnbmF0dXJlSW5kZXgsICJjYWxs
X2luZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4ICIsIHNpZ25hdHVyZUluZGV4LCAiIGV4Y2VlZHMg
a25vd24gc2lnbmF0dXJlcyAiLCBtX2luZm8udHlwZUNvdW50KCkpOwogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKG1faW5mby50YWJsZXNbdGFibGVJbmRleF0udHlwZSgpICE9IFRhYmxlRWxl
bWVudFR5cGU6OkZ1bmNyZWYsICJjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRh
YmxlIGhhcyB0eXBlIGZ1bmNyZWYiKTsKIAotICAgICAgICBjb25zdCBTaWduYXR1cmUmIGNhbGxl
ZVNpZ25hdHVyZSA9IG1faW5mby51c2VkU2lnbmF0dXJlc1tzaWduYXR1cmVJbmRleF0uZ2V0KCk7
CisgICAgICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiA9IG1faW5mby50
eXBlU2lnbmF0dXJlc1tzaWduYXR1cmVJbmRleF0uZ2V0KCk7CisgICAgICAgIGNvbnN0IGF1dG8m
IGNhbGxlZVNpZ25hdHVyZSA9ICp0eXBlRGVmaW5pdGlvbi5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KTsKICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsZWVTaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpICsgMTsgLy8gQWRkIHRoZSBjYWxsZWUncyBpbmRleC4KICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAi
Y2FsbF9pbmRpcmVjdCBleHBlY3RzICIsIGFyZ3VtZW50Q291bnQsICIgYXJndW1lbnRzLCBidXQg
dGhlIGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIsIG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKSwgIiB2YWx1ZXMiKTsKIApAQCAtMTIzOSwxNCArMTI0NCwxNCBAQCBGT1JfRUFDSF9X
QVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gYXJnID0gbV9leHByZXNzaW9uU3RhY2suYXQo
aSk7CiAgICAgICAgICAgICBpZiAoaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIDEpCi0g
ICAgICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGFyZy50eXBl
KCksIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0gZmlyc3RBcmd1bWVudEluZGV4KSksICJh
cmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmcudHlwZSgp
LmtpbmQsICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0gZmlyc3RB
cmd1bWVudEluZGV4KS5raW5kKTsKKyAgICAgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKCFpc1N1YnR5cGUoYXJnLnR5cGUoKSwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShp
IC0gZmlyc3RBcmd1bWVudEluZGV4KSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxf
aW5kaXJlY3QsIGdvdCAiLCBhcmcudHlwZSgpLmtpbmQsICIsIGV4cGVjdGVkICIsIGNhbGxlZVNp
Z25hdHVyZS5hcmd1bWVudFR5cGUoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkua2luZCk7CiAgICAg
ICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChhcmcpOwogICAgICAgICAgICAgbV9jb250ZXh0
LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAKICAgICAgICAgUmVzdWx0TGlzdCBy
ZXN1bHRzOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxsSW5kaXJlY3Qo
dGFibGVJbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7CisgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxJbmRpcmVjdCh0YWJsZUluZGV4LCB0eXBlRGVm
aW5pdGlvbiwgYXJncywgcmVzdWx0cykpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjYWxsZWVTaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQogICAgICAgICAgICAgbV9l
eHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGNhbGxlZVNpZ25hdHVyZS5yZXR1cm5U
eXBlKGkpLCByZXN1bHRzW2ldKTsKQEAgLTEyNTgsOCArMTI2Myw5IEBAIEZPUl9FQUNIX1dBU01f
TUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rpb25SZWZlcmVuY2VzKCksICJmdW5j
dGlvbiByZWZlcmVuY2VzIGFyZSBub3QgZW5hYmxlZCIpOwogICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKCFpc1JlZldpdGhUeXBlSW5kZXgobV9leHByZXNzaW9uU3RhY2subGFzdCgpLnR5
cGUoKSksICJub24tZnVuY3JlZiBjYWxsX3JlZiB2YWx1ZSAiLCBtX2V4cHJlc3Npb25TdGFjay5s
YXN0KCkudHlwZSgpLmtpbmQpOwogCi0gICAgICAgIGNvbnN0IFNpZ25hdHVyZUluZGV4IGNhbGxl
ZVNpZ25hdHVyZUluZGV4ID0gbV9leHByZXNzaW9uU3RhY2subGFzdCgpLnR5cGUoKS5pbmRleDsK
LSAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBjYWxsZWVTaWduYXR1cmUgPSBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3QgVHlwZUlu
ZGV4IGNhbGxlZVR5cGVJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNrLmxhc3QoKS50eXBlKCkuaW5k
ZXg7CisgICAgICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiA9IFR5cGVJ
bmZvcm1hdGlvbjo6Z2V0KGNhbGxlZVR5cGVJbmRleCk7CisgICAgICAgIGNvbnN0IGF1dG8mIGNh
bGxlZVNpZ25hdHVyZSA9ICp0eXBlRGVmaW5pdGlvbi5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsK
ICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpICsgMTsgLy8gQWRkIHRoZSBjYWxsZWUncyB2YWx1ZS4KICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2Fs
bF9yZWYgZXhwZWN0cyAiLCBhcmd1bWVudENvdW50LCAiIGFyZ3VtZW50cywgYnV0IHRoZSBleHBy
ZXNzaW9uIHN0YWNrIGN1cnJlbnRseSBob2xkcyAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCks
ICIgdmFsdWVzIik7CiAKQEAgLTEyNjksMTQgKzEyNzUsMTQgQEAgRk9SX0VBQ0hfV0FTTV9NRU1P
UllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFy
Z3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgVHlwZWRFeHByZXNzaW9uIGFyZyA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpOwogICAg
ICAgICAgICAgaWYgKGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSAxKQotICAgICAgICAg
ICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnLnR5cGUoKSAhPSBjYWxsZWVTaWduYXR1
cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCksICJhcmd1bWVudCB0eXBlIG1pc21h
dGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmcudHlwZSgpLmtpbmQsICIsIGV4cGVjdGVk
ICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0gZmlyc3RBcmd1bWVudEluZGV4KS5raW5k
KTsKKyAgICAgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZy50eXBlKCkgIT0g
Y2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0gZmlyc3RBcmd1bWVudEluZGV4KSwgImFy
Z3VtZW50IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIsIGFyZy50eXBlKCku
a2luZCwgIiwgZXhwZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0gZmly
c3RBcmd1bWVudEluZGV4KS5raW5kKTsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5k
KGFyZyk7CiAgICAgICAgICAgICBtX2NvbnRleHQuZGlkUG9wVmFsdWVGcm9tU3RhY2soKTsKICAg
ICAgICAgfQogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudElu
ZGV4KTsKIAogICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7Ci0gICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKGFkZENhbGxSZWYoY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7
CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxSZWYodHlwZURlZmluaXRp
b24sIGFyZ3MsIHJlc3VsdHMpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y2FsbGVlU2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKICAgICAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChjYWxsZWVTaWduYXR1cmUucmV0dXJuVHlwZShp
KSwgcmVzdWx0c1tpXSk7CkBAIC0xMjg1LDIwICsxMjkxLDIxIEBAIEZPUl9FQUNIX1dBU01fTUVN
T1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgIH0KIAogICAgIGNhc2UgQmxvY2s6IHsKLSAg
ICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwg
ImNhbid0IGdldCBibG9jaydzIHNpZ25hdHVyZSIpOworICAgICAgICBCbG9ja1NpZ25hdHVyZSBp
bmxpbmVTaWduYXR1cmVBc1R5cGU7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
QmxvY2tTaWduYXR1cmUobV9pbmZvLCBpbmxpbmVTaWduYXR1cmVBc1R5cGUpLCAiY2FuJ3QgZ2V0
IGJsb2NrJ3Mgc2lnbmF0dXJlIik7CiAKKyAgICAgICAgY29uc3QgRnVuY3Rpb25TaWduYXR1cmUq
IGlubGluZVNpZ25hdHVyZSA9IGlubGluZVNpZ25hdHVyZUFzVHlwZS0+YXM8RnVuY3Rpb25TaWdu
YXR1cmU+KCk7CiAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3Rh
Y2suc2l6ZSgpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IHZh
bHVlcyBvbiBzdGFjayBmb3IgYmxvY2suIEJsb2NrIGV4cGVjdHMgIiwgaW5saW5lU2lnbmF0dXJl
LT5hcmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUo
KSwgIiB3ZXJlIHByZXNlbnQuIEJsb2NrIGhhcyBpbmxpbmVTaWduYXR1cmU6ICIsIGlubGluZVNp
Z25hdHVyZS0+dG9TdHJpbmcoKSk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVz
c2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENv
dW50KCk7ICsraSkgewogICAgICAgICAgICAgVHlwZSB0eXBlID0gbV9leHByZXNzaW9uU3RhY2su
YXQob2Zmc2V0ICsgaSkudHlwZSgpOwotICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
Rih0eXBlICE9IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSksICJCbG9jayBleHBlY3RzIHRo
ZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1
bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCB0eXBlLmtpbmQpOworICAg
ICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0eXBlICE9IGlubGluZVNpZ25hdHVyZS0+
YXJndW1lbnRUeXBlKGkpLCAiQmxvY2sgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBp
LCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0
IGFyZ3VtZW50IGhhcyB0eXBlICIsIHR5cGUua2luZCk7CiAgICAgICAgIH0KIAogICAgICAgICBp
bnQ2NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CiAgICAgICAgIFN0YWNr
IG5ld1N0YWNrOwogICAgICAgICBDb250cm9sVHlwZSBibG9jazsKLSAgICAgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQoYWRkQmxvY2soaW5saW5lU2lnbmF0dXJlLCBtX2V4cHJlc3Npb25TdGFj
aywgYmxvY2ssIG5ld1N0YWNrKSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFk
ZEJsb2NrKGlubGluZVNpZ25hdHVyZUFzVHlwZSwgbV9leHByZXNzaW9uU3RhY2ssIGJsb2NrLCBu
ZXdTdGFjaykpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFNpemUsIG9sZFNpemUgLSBtX2V4
cHJlc3Npb25TdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkp
OwogICAgICAgICBBU1NFUlQobmV3U3RhY2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpKTsKIApAQCAtMTMwOCwyMCArMTMxNSwyMSBAQCBGT1JfRUFDSF9XQVNNX01F
TU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICB9CiAKICAgICBjYXNlIExvb3A6IHsKLSAg
ICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwg
ImNhbid0IGdldCBsb29wJ3Mgc2lnbmF0dXJlIik7CisgICAgICAgIEJsb2NrU2lnbmF0dXJlIGlu
bGluZVNpZ25hdHVyZUFzVHlwZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VC
bG9ja1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZUFzVHlwZSksICJjYW4ndCBnZXQg
bG9vcCdzIHNpZ25hdHVyZSIpOwogCisgICAgICAgIGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlKiBp
bmxpbmVTaWduYXR1cmUgPSBpbmxpbmVTaWduYXR1cmVBc1R5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0
dXJlPigpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNr
LnNpemUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyB2YWx1
ZXMgb24gc3RhY2sgZm9yIGxvb3AgYmxvY2suIExvb3AgZXhwZWN0cyAiLCBpbmxpbmVTaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6
ZSgpLCAiIHdlcmUgcHJlc2VudC4gTG9vcCBoYXMgaW5saW5lU2lnbmF0dXJlOiAiLCBpbmxpbmVT
aWduYXR1cmUtPnRvU3RyaW5nKCkpOwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJl
c3Npb25TdGFjay5zaXplKCkgLSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpOyArK2kpIHsKICAgICAgICAgICAgIFR5cGUgdHlwZSA9IG1fZXhwcmVzc2lvblN0YWNr
LmF0KG9mZnNldCArIGkpLnR5cGUoKTsKLSAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxf
SUYodHlwZSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiTG9vcCBleHBlY3RzIHRo
ZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1
bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCB0eXBlLmtpbmQpOworICAg
ICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0eXBlICE9IGlubGluZVNpZ25hdHVyZS0+
YXJndW1lbnRUeXBlKGkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGks
ICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudFR5cGUoaSkua2luZCwgIiBidXQg
YXJndW1lbnQgaGFzIHR5cGUgIiwgdHlwZS5raW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIGlu
dDY0X3Qgb2xkU2l6ZSA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsKICAgICAgICAgU3RhY2sg
bmV3U3RhY2s7CiAgICAgICAgIENvbnRyb2xUeXBlIGxvb3A7Ci0gICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKGFkZExvb3AoaW5saW5lU2lnbmF0dXJlLCBtX2V4cHJlc3Npb25TdGFjaywg
bG9vcCwgbmV3U3RhY2ssIG1fbG9vcEluZGV4KyspKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RP
X0NPTlRFWFQoYWRkTG9vcChpbmxpbmVTaWduYXR1cmVBc1R5cGUsIG1fZXhwcmVzc2lvblN0YWNr
LCBsb29wLCBuZXdTdGFjaywgbV9sb29wSW5kZXgrKykpOwogICAgICAgICBBU1NFUlRfVU5VU0VE
KG9sZFNpemUsIG9sZFNpemUgLSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPT0gaW5saW5lU2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwogICAgICAgICBBU1NFUlQobmV3U3RhY2suc2l6ZSgp
ID09IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKIApAQCAtMTMzMSwyMSArMTMz
OSwyMiBAQCBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICB9
CiAKICAgICBjYXNlIElmOiB7Ci0gICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVy
ZTsKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlQXNUeXBlOwogICAgICAg
ICBUeXBlZEV4cHJlc3Npb24gY29uZGl0aW9uOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdl
dCBpZidzIHNpZ25hdHVyZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJs
b2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlQXNUeXBlKSwgImNhbid0IGdldCBp
ZidzIHNpZ25hdHVyZSIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19J
TlRPKGNvbmRpdGlvbiwgImlmIGNvbmRpdGlvbiIpOwogCisgICAgICAgIGNvbnN0IEZ1bmN0aW9u
U2lnbmF0dXJlKiBpbmxpbmVTaWduYXR1cmUgPSBpbmxpbmVTaWduYXR1cmVBc1R5cGUtPmFzPEZ1
bmN0aW9uU2lnbmF0dXJlPigpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFjb25k
aXRpb24udHlwZSgpLmlzSTMyKCksICJpZiBjb25kaXRpb24gbXVzdCBiZSBpMzIsIGdvdCAiLCBj
b25kaXRpb24udHlwZSgpLmtpbmQpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
LCAiVG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sgZm9yIGlmIGJsb2NrLiBJZiBleHBlY3RzICIs
IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJl
c3Npb25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBJZiBibG9jayBoYXMgc2lnbmF0dXJl
OiAiLCBpbmxpbmVTaWduYXR1cmUtPnRvU3RyaW5nKCkpOwogICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlM
X0lGKG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCArIGldLnR5cGUoKSAhPSBpbmxpbmVTaWduYXR1
cmUtPmFyZ3VtZW50KGkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGks
ICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1
bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCkua2luZCk7CisgICAg
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCAr
IGldLnR5cGUoKSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50VHlwZShpKSwgIkxvb3AgZXhw
ZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIG1fZXhw
cmVzc2lvblN0YWNrW2ldLnR5cGUoKS5raW5kKTsKIAogICAgICAgICBpbnQ2NF90IG9sZFNpemUg
PSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CiAgICAgICAgIFN0YWNrIG5ld1N0YWNrOwogICAg
ICAgICBDb250cm9sVHlwZSBjb250cm9sOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVY
VChhZGRJZihjb25kaXRpb24sIGlubGluZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGNv
bnRyb2wsIG5ld1N0YWNrKSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZElm
KGNvbmRpdGlvbiwgaW5saW5lU2lnbmF0dXJlQXNUeXBlLCBtX2V4cHJlc3Npb25TdGFjaywgY29u
dHJvbCwgbmV3U3RhY2spKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRTaXplLCBvbGRTaXpl
IC0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpKTsKICAgICAgICAgQVNTRVJUKG5ld1N0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1
cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAKQEAgLTEzNjksMTggKzEzNzgsMTkgQEAgRk9SX0VBQ0hf
V0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgY2FzZSBUcnk6IHsKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25z
KCksICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CiAKLSAgICAgICAgQmxvY2tT
aWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCB0
cnkncyBzaWduYXR1cmUiKTsKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJl
QXNUeXBlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJl
KG1faW5mbywgaW5saW5lU2lnbmF0dXJlQXNUeXBlKSwgImNhbid0IGdldCB0cnkncyBzaWduYXR1
cmUiKTsKIAorICAgICAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSogaW5saW5lU2lnbmF0dXJl
ID0gaW5saW5lU2lnbmF0dXJlQXNUeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKICAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPCBpbmxp
bmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNr
IGZvciB0cnkgYmxvY2suIFRyeWUgZXhwZWN0cyAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHdlcmUg
cHJlc2VudC4gVHJ5IGJsb2NrIGhhcyBzaWduYXR1cmU6ICIsIGlubGluZVNpZ25hdHVyZS0+dG9T
dHJpbmcoKSk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSAtIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkK
LSAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2tbb2Zm
c2V0ICsgaV0udHlwZSgpICE9IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSksICJUcnkgZXhw
ZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnQoaSkua2luZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbV9leHByZXNz
aW9uU3RhY2tbaV0udHlwZSgpLmtpbmQpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihtX2V4cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50eXBlKCkgIT0gaW5saW5lU2lnbmF0
dXJlLT5hcmd1bWVudFR5cGUoaSksICJUcnkgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgi
LCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLmtpbmQsICIg
YnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIG1fZXhwcmVzc2lvblN0YWNrW2ldLnR5cGUoKS5raW5k
KTsKIAogICAgICAgICBpbnQ2NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7
CiAgICAgICAgIFN0YWNrIG5ld1N0YWNrOwogICAgICAgICBDb250cm9sVHlwZSBjb250cm9sOwot
ICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRUcnkoaW5saW5lU2lnbmF0dXJlLCBt
X2V4cHJlc3Npb25TdGFjaywgY29udHJvbCwgbmV3U3RhY2spKTsKKyAgICAgICAgV0FTTV9UUllf
QUREX1RPX0NPTlRFWFQoYWRkVHJ5KGlubGluZVNpZ25hdHVyZUFzVHlwZSwgbV9leHByZXNzaW9u
U3RhY2ssIGNvbnRyb2wsIG5ld1N0YWNrKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU2l6
ZSwgb2xkU2l6ZSAtIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKSk7CiAgICAgICAgIEFTU0VSVChuZXdTdGFjay5zaXplKCkgPT0gaW5s
aW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwogCkBAIC0xMzk2LDggKzE0MDYsOCBAQCBG
T1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKIAogICAgICAgICB1aW50
MzJfdCBleGNlcHRpb25JbmRleDsKICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhw
YXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7Ci0gICAgICAgIFNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbklu
ZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2Vw
dGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OworICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9pbmZvLnR5cGVJbmRleEZyb21FeGNl
cHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KTsKKyAgICAgICAgY29uc3QgVHlwZURlZmlu
aXRpb24mIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRl
eCk7CiAKICAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFj
ay5sYXN0KCk7CiAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChj
b250cm9sRW50cnkuY29udHJvbERhdGEpLCAiY2F0Y2ggYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0
byBhIHRyeSIpOwpAQCAtMTQwOCw5ICsxNDE4LDkgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RP
UkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAocHJlQ2F0
Y2hTdGFjayk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhdGNoKGV4Y2Vw
dGlvbkluZGV4LCBleGNlcHRpb25TaWduYXR1cmUsIHByZUNhdGNoU3RhY2ssIGNvbnRyb2xFbnRy
eS5jb250cm9sRGF0YSwgcmVzdWx0cykpOwogCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gcmVzdWx0cy5zaXplKCkpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKTsgKytpKQotICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBw
ZW5kKGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKSwgcmVzdWx0c1tpXSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+YXJndW1lbnRDb3VudCgpID09IHJlc3VsdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5j
b25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5hcmd1bWVudFR5cGUoaSksIHJlc3VsdHNbaV0pOwogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0KIApAQCAtMTQ1Nyw4ICsxNDY3LDggQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVf
T1AoQ1JFQVRFX0NBU0UpCiAKICAgICAgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CiAgICAg
ICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VFeGNlcHRpb25JbmRleChleGNlcHRp
b25JbmRleCkpOwotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5m
by5zaWduYXR1cmVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KTsK
LSAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25TaWduYXR1cmUgPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgVHlwZUluZGV4IHR5cGVJ
bmRleCA9IG1faW5mby50eXBlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25J
bmRleCk7CisgICAgICAgIGNvbnN0IGF1dG8mIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFR5cGVJbmZv
cm1hdGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1cmUodHlwZUluZGV4KTsKIAogICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGV4Y2VwdGlvblNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCksICJUb28gZmV3IGFyZ3VtZW50cyBvbiBzdGFjayBmb3Ig
dGhlIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24uIFRoZSBleGNlcHRpb24gZXhwZWN0cyAiLCBleGNl
cHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Np
b25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBFeGNlcHRpb24gaGFzIHNpZ25hdHVyZTog
IiwgZXhjZXB0aW9uU2lnbmF0dXJlLnRvU3RyaW5nKCkpOwogICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpOwpAQCAtMTQ2Niw3ICsxNDc2LDcgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RP
UkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpLCAiY2Fu
J3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhyb3cncyAiLCBleGNlcHRpb25TaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAg
ICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gYXJnID0gbV9leHByZXNzaW9uU3RhY2suYXQob2Zm
c2V0ICsgaSk7Ci0gICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZy50eXBlKCkg
IT0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLCAiVGhlIGV4Y2VwdGlvbiBiZWluZyB0
aHJvd24gZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXggIiwgaSwgIiB0byBiZSAiLCBleGNl
cHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSkua2luZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUg
IiwgYXJnLnR5cGUoKS5raW5kKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
YXJnLnR5cGUoKSAhPSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLCAiVGhlIGV4
Y2VwdGlvbiBiZWluZyB0aHJvd24gZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXggIiwgaSwg
IiB0byBiZSAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0
IGFyZ3VtZW50IGhhcyB0eXBlICIsIGFyZy50eXBlKCkua2luZCk7CiAgICAgICAgICAgICBhcmdz
LnVuY2hlY2tlZEFwcGVuZChhcmcpOwogICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVl
RnJvbVN0YWNrKCk7CiAgICAgICAgIH0KQEAgLTE2NTAsOCArMTY2MCw4IEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlh
bFJlc3VsdAogCiAgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OwogICAgICAgICBXQVNN
X0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgp
KTsKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0
dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7Ci0gICAgICAg
IGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBt
X2luZm8udHlwZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOwor
ICAgICAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgZXhjZXB0aW9uU2lnbmF0dXJlID0gVHlwZUlu
Zm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKIAogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJs
b2NrcyA+IDEpCiAgICAgICAgICAgICByZXR1cm4geyB9OwpAQCAtMTY2NCw5ICsxNjc0LDkgQEAg
YXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24o
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKICAgICAgICAg
V0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbklu
ZGV4LCBleGNlcHRpb25TaWduYXR1cmUsIGRhdGEuY29udHJvbERhdGEsIHJlc3VsdHMpKTsKIAot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
ID09IHJlc3VsdHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4
Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgICAgIG1fZXhw
cmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChleGNlcHRpb25TaWduYXR1cmUuYXJndW1l
bnQoaSksIHJlc3VsdHNbaV0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25TaWdu
YXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSA9PSByZXN1bHRz
LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWdu
YXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAg
ICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGV4Y2VwdGlvblNp
Z25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpLCByZXN1bHRz
W2ldKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUdsb2JhbC5jcHAKaW5kZXggY2IzZDE2M2JiZTA4YjZhNTc1OGNkOWRjMjhkZTA2
OGExZGU1NmYxNy4uYzEyNmYxZTRmMjJhODZiODI0YTk5Y2E5NmJkMGJhOTJhMjY2ZTA5NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAKQEAgLTYwLDcgKzYwLDcg
QEAgdm9pZCBHbG9iYWw6OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGFyZ3VtZW50KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBBU1NFUlQobV9tdXRh
YmlsaXR5ICE9IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpJbW11dGFibGUpOworICAgIEFTU0VS
VChtX211dGFiaWxpdHkgIT0gV2FzbTo6SW1tdXRhYmxlKTsKICAgICBzd2l0Y2ggKG1fdHlwZS5r
aW5kKSB7CiAgICAgY2FzZSBUeXBlS2luZDo6STMyOiB7CiAgICAgICAgIGludDMyX3QgdmFsdWUg
PSBhcmd1bWVudC50b0ludDMyKGdsb2JhbE9iamVjdCk7CkBAIC0xMDQsOCArMTA0LDggQEAgdm9p
ZCBHbG9iYWw6OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFyZ3Vt
ZW50KQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaXNSZWZXaXRoVHlwZUluZGV4
KG1fdHlwZSkgJiYgIWFyZ3VtZW50LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6
U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IG1fdHlwZS5pbmRleDsKLSAgICAgICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBhcmdJbmRleCA9IHdhc21GdW5jdGlvbiA/IHdhc21GdW5j
dGlvbi0+c2lnbmF0dXJlSW5kZXgoKSA6IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUlu
ZGV4KCk7CisgICAgICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IHBhcmFtSW5kZXggPSBtX3R5
cGUuaW5kZXg7CisgICAgICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IGFyZ0luZGV4ID0gd2Fz
bUZ1bmN0aW9uID8gd2FzbUZ1bmN0aW9uLT50eXBlSW5kZXgoKSA6IHdhc21XcmFwcGVyRnVuY3Rp
b24tPnR5cGVJbmRleCgpOwogICAgICAgICAgICAgICAgIGlmIChwYXJhbUluZGV4ICE9IGFyZ0lu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3Qs
IHZtLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUgcmVmZXJlbmNlIHR5cGUi
KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21HbG9iYWwuaAppbmRleCAxN2Y4ODY4MWUwNmU0MDIyODBkMTlhZmEyZWViYmNhZThkOWJk
MTVlLi40MzhhN2Y3NDBmZjk5MzE2Yzc2NTgxM2VhZTg3MmY3ZDY3OTQwZjk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCkBAIC00OCwxMyArNDgsMTMgQEAgcHVibGlj
OgogICAgICAgICBWYWx1ZSogbV9wb2ludGVyOwogICAgIH07CiAKLSAgICBzdGF0aWMgUmVmPEds
b2JhbD4gY3JlYXRlKFdhc206OlR5cGUgdHlwZSwgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11
dGFiaWxpdHkgbXV0YWJpbGl0eSwgdWludDY0X3QgaW5pdGlhbFZhbHVlID0gMCkKKyAgICBzdGF0
aWMgUmVmPEdsb2JhbD4gY3JlYXRlKFdhc206OlR5cGUgdHlwZSwgV2FzbTo6TXV0YWJpbGl0eSBt
dXRhYmlsaXR5LCB1aW50NjRfdCBpbml0aWFsVmFsdWUgPSAwKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgR2xvYmFsKHR5cGUsIG11dGFiaWxpdHksIGluaXRpYWxWYWx1ZSkp
OwogICAgIH0KIAogICAgIFdhc206OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQotICAgIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5IG11dGFiaWxpdHkoKSBj
b25zdCB7IHJldHVybiBtX211dGFiaWxpdHk7IH0KKyAgICBXYXNtOjpNdXRhYmlsaXR5IG11dGFi
aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX211dGFiaWxpdHk7IH0KICAgICBKU1ZhbHVlIGdldChK
U0dsb2JhbE9iamVjdCopIGNvbnN0OwogICAgIHVpbnQ2NF90IGdldFByaW1pdGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWUubV9wcmltaXRpdmU7IH0KICAgICB2b2lkIHNldChKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOwpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIHZh
bHVlUG9pbnRlcigpIHsgcmV0dXJuICZtX3ZhbHVlOyB9CiAKIHByaXZhdGU6Ci0gICAgR2xvYmFs
KFdhc206OlR5cGUgdHlwZSwgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHkgbXV0
YWJpbGl0eSwgdWludDY0X3QgaW5pdGlhbFZhbHVlKQorICAgIEdsb2JhbChXYXNtOjpUeXBlIHR5
cGUsIFdhc206Ok11dGFiaWxpdHkgbXV0YWJpbGl0eSwgdWludDY0X3QgaW5pdGlhbFZhbHVlKQog
ICAgICAgICA6IG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fbXV0YWJpbGl0eShtdXRhYmlsaXR5
KQogICAgICAgICAsIG1fdmFsdWUoKQpAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogICAgIH0K
IAogICAgIFdhc206OlR5cGUgbV90eXBlOwotICAgIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpN
dXRhYmlsaXR5IG1fbXV0YWJpbGl0eTsKKyAgICBXYXNtOjpNdXRhYmlsaXR5IG1fbXV0YWJpbGl0
eTsKICAgICBKU09iamVjdCogbV9vd25lciB7IG51bGxwdHIgfTsKICAgICBWYWx1ZSBtX3ZhbHVl
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5j
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCmluZGV4
IGFlZjYyMTkwMmUxMWYzY2RkZTc2MmFlY2E1N2I4ZGQ4NGJmMDFjZTcuLjIxZWQyMTg5NTY1MDVh
ZWU5ZjAzZGRhNjY1M2VlMDIwMGZhMGMzYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUluc3RhbmNlLmNwcApAQCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1v
ZHVsZUluZm9ybWF0aW9uLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNp
bmNsdWRlICJXYXNtVGFnLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5o
IgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgSW5zdGFuY2U6OmluaXRF
bGVtZW50U2VnbWVudCh1aW50MzJfdCB0YWJsZUluZGV4LCBjb25zdCBFbGVtZW50JiBzZWdtZW50
LCB1CiAgICAgICAgIC8vIGZvciB0aGUgaW1wb3J0LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCiAgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXggPSBzZWdtZW50LmZ1bmN0aW9uSW5kaWNlc1tzcmNJbmRleF07Ci0gICAgICAgIFNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgVHlwZUluZGV4IHR5
cGVJbmRleCA9IG1fbW9kdWxlLT50eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXgpOwogICAgICAgICBpZiAoaXNJbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSkg
ewogICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0gaW1wb3J0RnVuY3Rpb248
V3JpdGVCYXJyaWVyPEpTT2JqZWN0Pj4oZnVuY3Rpb25JbmRleCktPmdldCgpOwogICAgICAgICAg
ICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkgewpA
QCAtMjUxLDE0ICsyNTEsMTQgQEAgdm9pZCBJbnN0YW5jZTo6aW5pdEVsZW1lbnRTZWdtZW50KHVp
bnQzMl90IHRhYmxlSW5kZXgsIGNvbnN0IEVsZW1lbnQmIHNlZ21lbnQsIHUKICAgICAgICAgICAg
ICAgICBmdW5jdGlvbkltcG9ydCwKICAgICAgICAgICAgICAgICBmdW5jdGlvbkluZGV4LAogICAg
ICAgICAgICAgICAgIGpzSW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgc2lnbmF0dXJlSW5kZXgp
OworICAgICAgICAgICAgICAgIHR5cGVJbmRleCk7CiAgICAgICAgICAgICBqc1RhYmxlLT5zZXQo
ZHN0SW5kZXgsIHdyYXBwZXJGdW5jdGlvbik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCiAgICAgICAgIENhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gY2FsbGVl
R3JvdXAoKS0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4KTsKICAgICAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9h
ZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjYWxsZWVHcm91cCgpLT5lbnRyeXBv
aW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAg
ICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gVHlw
ZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZSh0eXBlSW5kZXgpOwogICAgICAgICAv
LyBGSVhNRTogU2F5IHdlIGV4cG9ydCBsb2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlvbiBp
bmRleCAwLgogICAgICAgICAvLyBXaGF0IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBh
biBFbGVtZW50IHcvIGluZGV4IDAuCiAgICAgICAgIC8vIERvZXMgKG5ldyBJbnN0YW5jZSguLi4p
KS5leHBvcnRzLmZvbyA9PT0gdGFibGUuZ2V0KDApPwpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQg
SW5zdGFuY2U6OmluaXRFbGVtZW50U2VnbWVudCh1aW50MzJfdCB0YWJsZUluZGV4LCBjb25zdCBF
bGVtZW50JiBzZWdtZW50LCB1CiAgICAgICAgICAgICBqc0luc3RhbmNlLAogICAgICAgICAgICAg
ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLAogICAgICAgICAgICAgZW50cnlwb2ludExvYWRMb2Nh
dGlvbiwKLSAgICAgICAgICAgIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIHR5cGVJbmRl
eCk7CiAgICAgICAgIGpzVGFibGUtPnNldChkc3RJbmRleCwgZnVuY3Rpb24pOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3Bw
CmluZGV4IDEzNTY5MGRhMmQ2MGI3Y2JjNjk5YmEyNTYzNGRiMjVlNDdjMGRkMDEuLjcxZTA2NDdj
NTY2NjZlYTBmZmQzY2M0NWE0ZGU2MTFlMDc5Mjc3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtOTUsMjcgKzk1LDI3IEBA
IHB1YmxpYzoKIAogICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgbG9vcChCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIGJvZHksIFJlZlB0
cjxMYWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBD
b250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xMb29wIHsgV1RGTW92ZShib2R5KSB9
KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAt
IHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSwgV1RG
TW92ZShjb250aW51YXRpb24pLCBDb250cm9sTG9vcCB7IFdURk1vdmUoYm9keSkgfSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgYmxvY2soQmxvY2tTaWduYXR1cmUg
c2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRp
b24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUs
IHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVh
dGlvbiksIENvbnRyb2xCbG9jayB7IH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBl
KHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xCbG9jayB7
IH0pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGlmXyhCbG9ja1Np
Z25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIGFsdGVy
bmF0ZSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElmIHsgV1RGTW92
ZShhbHRlcm5hdGUpIH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVy
ZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1l
bnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xJZiB7IFdURk1vdmUoYWx0
ZXJuYXRlKSB9KTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBjcmVh
dGVUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZjxM
YWJlbD4mJiB0cnlMYWJlbCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgdW5zaWduZWQg
dHJ5RGVwdGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWdu
YXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNv
bnRpbnVhdGlvbiksIENvbnRyb2xUcnkgeyBXVEZNb3ZlKHRyeUxhYmVsKSwgdHJ5RGVwdGggfSk7
CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBz
aWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCksIFdURk1v
dmUoY29udGludWF0aW9uKSwgQ29udHJvbFRyeSB7IFdURk1vdmUodHJ5TGFiZWwpLCB0cnlEZXB0
aCB9KTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBjcmVhdGVDYXRj
aChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVs
PiYmIHRyeVN0YXJ0LCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uLCBSZWY8TGFiZWw+IHRy
eUVuZCwgdW5zaWduZWQgdHJ5RGVwdGgsIFZpcnR1YWxSZWdpc3RlciBleGNlcHRpb24pCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6
ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENv
bnRyb2xDYXRjaCB7IENhdGNoS2luZDo6Q2F0Y2gsIFdURk1vdmUodHJ5U3RhcnQpLCBXVEZNb3Zl
KHRyeUVuZCksIHRyeURlcHRoLCBleGNlcHRpb24gfSk7CisgICAgICAgICAgICByZXR1cm4gQ29u
dHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJv
bENhdGNoIHsgQ2F0Y2hLaW5kOjpDYXRjaCwgV1RGTW92ZSh0cnlTdGFydCksIFdURk1vdmUodHJ5
RW5kKSwgdHJ5RGVwdGgsIGV4Y2VwdGlvbiB9KTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBib29sIGlzTG9vcChjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oY29udHJvbCk7IH0KQEAgLTE0MiwxOSArMTQy
LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBtX2NvbnRpbnVhdGlvbjsKICAgICAg
ICAgfQogCi0gICAgICAgIFNpZ25hdHVyZUFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29u
c3QKKyAgICAgICAgRnVuY3Rpb25BcmdDb3VudCBicmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0CiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xM
b29wPigqdGhpcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVybkNvdW50KCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVy
ZT4oKS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5h
czxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAogICAgICAgICB7CiAg
ICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOwogICAgICAgICAgICAg
aWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KCp0aGlzKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOwotICAgICAgICAgICAgcmV0
dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAgICAgICAgIHJldHVybiBt
X3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJl
dHVyblR5cGUoaSk7CiAgICAgICAgIH0KIAogICAgICAgICBCbG9ja1NpZ25hdHVyZSBtX3NpZ25h
dHVyZTsKQEAgLTE5MSw3ICsxOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkUmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBmYWlsZWQgY29tcGlsaW5n
OiAiX3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKICAgICB9CiAKLSAgICBMTEludEdlbmVyYXRv
cihNb2R1bGVJbmZvcm1hdGlvbiYsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYpOworICAgIExMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mKTsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4gZmluYWxpemUoKTsKIApAQCAtMjIzLDcg
KzIyMyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IC0t
bV9zdGFja1NpemU7IH0KIAotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVHlwZURlZmluaXRpb24mKTsKICAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAg
ICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgaW50NjRfdCk7CiAKQEAgLTI4Nyw4
ICsyODcsOCBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2lu
Z1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOwotICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYp
OwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNo
YWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5
cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwg
U3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2sm
LCBDb250cm9sVHlwZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOwogICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUm
KTsKQEAgLTMwNCw5ICszMDQsOSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUsIGNvbnN0IFN0YWNrJik7CiAK
ICAgICAvLyBDYWxscwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
bGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0
JiByZXN1bHRzKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxs
UmVmKGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3Vs
dExpc3QmIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxl
SW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJn
cywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9S
RVRVUk4gYWRkQ2FsbFJlZihjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CiAKICAgICB2b2lkIGRpZEZpbmlzaFBh
cnNpbmdMb2NhbHMoKTsKQEAgLTMyOCw4ICszMjgsOCBAQCBwcml2YXRlOgogICAgICAgICBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFJlc3VsdExpc3QmKT4gY29tbWl0UmVzdWx0czsKICAgICB9Owog
Ci0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0
IFNpZ25hdHVyZSYpOwotICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IGNhbGxJbmZvcm1h
dGlvbkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlv
biBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgRnVuY3Rpb25TaWduYXR1cmUmKTsKKyAg
ICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAyPiBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoY29u
c3QgRnVuY3Rpb25TaWduYXR1cmUmKTsKICAgICB2b2lkIGxpbmtTd2l0Y2hUYXJnZXRzKExhYmVs
JiwgdW5zaWduZWQgbG9jYXRpb24pOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlckZvcldhc21Mb2NhbCh1aW50MzJfdCBpbmRleCkKQEAgLTUwMCw3ICs1MDAsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV91c2VzRXhjZXB0aW9ucyB7IGZhbHNlIH07CiB9OwogCi1FeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+LCBTdHJpbmc+IHBh
cnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVf
dCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIE1vZHVsZUluZm9y
bWF0aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQorRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGVCeXRlY29kZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25M
ZW5ndGgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogewogICAgIExMSW50R2VuZXJhdG9yIGxs
aW50R2VuZXJhdG9yKGluZm8sIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rp
b25QYXJzZXI8TExJbnRHZW5lcmF0b3I+IHBhcnNlcihsbGludEdlbmVyYXRvciwgZnVuY3Rpb25T
dGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CkBAIC01MjQsNyArNTI0LDcg
QEAgc3RhdGljIFRocmVhZFNwZWNpZmljPEJ1ZmZlcj4mIHRocmVhZFNwZWNpZmljQnVmZmVyKCkK
ICAgICByZXR1cm4gKnRocmVhZFNwZWNpZmljQnVmZmVyUHRyOwogfQogCi1MTEludEdlbmVyYXRv
cjo6TExJbnRHZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0
aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYpCitMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0
b3IoTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0
IFR5cGVEZWZpbml0aW9uJikKICAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShtYWtlVW5pcXVl
PEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPihmdW5jdGlvbkluZGV4KSwgMCkKICAgICAsIG1f
aW5mbyhpbmZvKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCkBAIC01NjUs
NyArNTY1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiBM
TEludEdlbmVyYXRvcjo6ZmluYWxpemUoKQogLy8gR2VuZXJhdGVkIGZyb20gd2FzbS5qc29uCiAj
aW5jbHVkZSAiV2FzbUxMSW50R2VuZXJhdG9ySW5saW5lcy5oIgogCi1hdXRvIExMSW50R2VuZXJh
dG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUp
IC0+IExMSW50Q2FsbEluZm9ybWF0aW9uCithdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3Jt
YXRpb25Gb3JDYWxsZXIoY29uc3QgRnVuY3Rpb25TaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJ
bnRDYWxsSW5mb3JtYXRpb24KIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIHN0
YWNrIGxheW91dCBmb3IgY2FsbHMuIFRoZSBkZXNpcmVkIHN0YWNrIGxheW91dCBpczoKIApAQCAt
NjIyLDEzICs2MjIsMTQgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9y
Q2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpWb2lkOgogICAgICAgICBjYXNlIFR5cGVLaW5k
OjpGdW5jOgorICAgICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfTsKIAogCiAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykKLSAg
ICAgICAgYWxsb2NhdGVTdGFja1JlZ2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudChpKSk7CisgICAg
ICAgIGFsbG9jYXRlU3RhY2tSZWdpc3RlcihzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpKTsKIAog
ICAgIGdwckluZGV4ID0gMDsKICAgICBmcHJJbmRleCA9IDA7CkBAIC02NTgsNyArNjU5LDcgQEAg
YXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkKICAgICBncHJJbmRleCA9IGJhc2UgLSBzdGFja0NvdW50
OwogICAgIGZwckluZGV4ID0gZ3BySW5kZXggLSBncHJDb3VudDsKICAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgIHN3
aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLmtpbmQpIHsKKyAgICAgICAgc3dpdGNoIChzaWdu
YXR1cmUuYXJndW1lbnRUeXBlKGkpLmtpbmQpIHsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6STMy
OgogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJNjQ6CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkV4
dGVybnJlZjoKQEAgLTY3OSw2ICs2ODAsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5m
b3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgIGNh
c2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlN0cnVjdDoKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9CkBA
IC03MDgsNiArNzEwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9y
Q2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpWb2lkOgogICAgICAgICBjYXNlIFR5cGVLaW5k
OjpGdW5jOgorICAgICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzI2LDcgKzcy
OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAgICAgcmV0dXJuIExMSW50Q2FsbEluZm9y
bWF0aW9uIHsgc3RhY2tPZmZzZXQsIHN0YWNrQ291bnQsIFdURk1vdmUoYXJndW1lbnRzKSwgV1RG
TW92ZShjb21taXRSZXN1bHRzKSB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5m
b3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFZlY3RvcjxW
aXJ0dWFsUmVnaXN0ZXIsIDI+CithdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZWUoY29uc3QgRnVuY3Rpb25TaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjdG9yPFZp
cnR1YWxSZWdpc3RlciwgMj4KIHsKICAgICBpZiAobV9yZXN1bHRzLnNpemUoKSkKICAgICAgICAg
cmV0dXJuIG1fcmVzdWx0czsKQEAgLTc2NSw2ICs3NjgsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9y
OjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+
IFZlYwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAg
ICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlN0cnVj
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC03NzIsMTEgKzc3NiwxMSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5m
b3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFZlYwogICAg
IHJldHVybiBtX3Jlc3VsdHM7CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50
cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUp
IC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBtX2Nv
ZGVCbG9jay0+bV9udW1Bcmd1bWVudHMgPSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOworICAg
IG1fY29kZUJsb2NrLT5tX251bUFyZ3VtZW50cyA9IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25h
dHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOwogICAgIG1fbm9ybWFsaXplZEFyZ3VtZW50cy5yZXNp
emUobV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzKTsKIAogICAgIGNvbnN0IGF1dG8mIGNhbGxp
bmdDb252ZW50aW9uID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7CkBAIC03OTksOCArODAzLDgg
QEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICBtX25vcm1hbGl6ZWRBcmd1bWVu
dHNbaW5kZXhdID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKHN0YWNr
SW5kZXgrKyk7CiAgICAgfTsKIAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJn
dW1lbnQoaSkua2luZCkgeworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUu
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAg
IHN3aXRjaCAoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudFR5cGUo
aSkua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6CiAgICAgICAgIGNhc2UgVHlw
ZUtpbmQ6Okk2NDoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6RXh0ZXJucmVmOgpAQCAtODE1LDYg
KzgxOSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6Cisg
ICAgICAgIGNhc2UgVHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDIwLDcgKzEwMjUsNyBAQCBh
dXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xUeXBlJiBkYXRhLCBTdGFjayYgZXhw
cmVzc2lvblN0YWNrKSAtPiBQYXJ0aQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNlVG9V
bnJlYWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIG1f
c3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKSArIGRhdGEubV9zaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKTsKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1fc2ln
bmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOwogCiAgICAg
Q29udHJvbElmJiBjb250cm9sID0gc3RkOjpnZXQ8Q29udHJvbElmPihkYXRhKTsKICAgICBlbWl0
TGFiZWwoY29udHJvbC5tX2FsdGVybmF0ZS5nZXQoKSk7CkBAIC0xMDU2LDEzICsxMDYxLDEzIEBA
IHZvaWQgTExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKENvbnRy
b2xUeXBlJiBkYXRhLCBTdGFjayYgZXhwCiAgICAgV2FzbUptcDo6ZW1pdCh0aGlzLCBkYXRhLm1f
Y29udGludWF0aW9uLT5iaW5kKHRoaXMpKTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
Q2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9u
U2lnbmF0dXJlLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSwgUmVz
dWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6
YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBl
eGNlcHRpb25TaWduYXR1cmUsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xUeXBlJiBk
YXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgZmluYWxp
emVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goZGF0YSwgZXhwcmVzc2lvblN0YWNrKTsKICAgICByZXR1
cm4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb25TaWduYXR1
cmUsIGRhdGEsIHJlc3VsdHMpOwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaFRv
VW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgZXhj
ZXB0aW9uU2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykg
LT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hh
YmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgZXhjZXB0
aW9uU2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOwogICAgIFJlZjxM
YWJlbD4gY2F0Y2hMYWJlbCA9IG5ld0VtaXR0ZWRMYWJlbCgpOwpAQCAtMTA3MywxNyArMTA3OCwx
NyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQg
ZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdAogICAgICAgICBDb250cm9sVHJ5JiB0cnlEYXRh
ID0gc3RkOjpnZXQ8Q29udHJvbFRyeT4oZGF0YSk7CiAgICAgICAgIGRhdGEgPSBDb250cm9sVHlw
ZTo6Y3JlYXRlQ2F0Y2goZGF0YS5tX3NpZ25hdHVyZSwgZGF0YS5zdGFja1NpemUoKSwgV1RGTW92
ZSh0cnlEYXRhLm1fdHJ5KSwgV1RGTW92ZShkYXRhLm1fY29udGludWF0aW9uKSwgY2F0Y2hMYWJl
bCwgdHJ5RGF0YS5tX3RyeURlcHRoLCBleGNlcHRpb24pOwogICAgIH0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXM8RnVuY3Rp
b25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgKytpKQogICAgICAgICByZXN1bHRzLmFw
cGVuZChwdXNoKCkpOwogCiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKLSAgICAgICAg
V2FzbUNhdGNoOjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb24sIGV4Y2VwdGlv
blNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIHJlc3VsdHMuaXNFbXB0eSgpID8gMCA6IC1yZXN1
bHRzWzBdLm9mZnNldCgpKTsKKyAgICAgICAgV2FzbUNhdGNoOjplbWl0KHRoaXMsIGV4Y2VwdGlv
bkluZGV4LCBleGNlcHRpb24sIGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVy
ZT4oKS0+YXJndW1lbnRDb3VudCgpLCByZXN1bHRzLmlzRW1wdHkoKSA/IDAgOiAtcmVzdWx0c1sw
XS5vZmZzZXQoKSk7CiAgICAgZWxzZQotICAgICAgICBXYXNtQ2F0Y2hOb1Rsczo6ZW1pdCh0aGlz
LCBleGNlcHRpb25JbmRleCwgZXhjZXB0aW9uLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpLCByZXN1bHRzLmlzRW1wdHkoKSA/IDAgOiAtcmVzdWx0c1swXS5vZmZzZXQoKSk7Cisg
ICAgICAgIFdhc21DYXRjaE5vVGxzOjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBleGNlcHRp
b24sIGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRD
b3VudCgpLCByZXN1bHRzLmlzRW1wdHkoKSA/IDAgOiAtcmVzdWx0c1swXS5vZmZzZXQoKSk7CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNp
Z25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHJlc3VsdHNbaV07Ci0gICAgICAgIFR5cGUg
dHlwZSA9IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgVHlwZSB0eXBl
ID0gZXhjZXB0aW9uU2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudFR5
cGUoaSk7CiAgICAgICAgIHN3aXRjaCAodHlwZS5raW5kKSB7CiAgICAgICAgIGNhc2UgV2FzbTo6
VHlwZUtpbmQ6OkYzMjoKICAgICAgICAgICAgIFdhc21GMzJSZWludGVycHJldEkzMjo6ZW1pdCh0
aGlzLCBkc3QsIGRzdCk7CkBAIC0xMTg1LDEzICsxMTkwLDEzIEBAIGF1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVz
dWx0CiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYg
ZGF0YSwgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGlmICgh
ZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSkgeworICAgIGlmICghZGF0YS5tX3NpZ25h
dHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCkpIHsKICAgICAgICAg
V2FzbVJldFZvaWQ6OmVtaXQodGhpcyk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAg
ICAgLy8gbm8gbmVlZCB0byBkcm9wIGtlZXAgaGVyZSwgc2luY2Ugd2UgaGF2ZSB0byBtb3ZlIGFu
eXdheQotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZSgq
ZGF0YS5tX3NpZ25hdHVyZSksIHJldHVyblZhbHVlcyk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxv
Y2soY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpkYXRhLm1fc2lnbmF0dXJlLT5hczxGdW5jdGlv
blNpZ25hdHVyZT4oKSksIHJldHVyblZhbHVlcyk7CiAgICAgV2FzbVJldDo6ZW1pdCh0aGlzKTsK
IAogICAgIHJldHVybiB7IH07CkBAIC0xMjY5LDE0ICsxMjc0LDE0IEBAIGF1dG8gTExJbnRHZW5l
cmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4
cHJlc3Npb25TCiAgICAgdW5zaWduZWQgc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKICAg
ICBpZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZW50cnkuY29udHJvbERhdGEpKQogICAgICAg
ICArK3N0YWNrU2l6ZTsgLy8gQWNjb3VudCBmb3IgdGhlIGNhdWdodCBleGNlcHRpb24KLSAgICBS
RUxFQVNFX0FTU0VSVCh1bnJlYWNoYWJsZSB8fCBtX3N0YWNrU2l6ZSA9PSAgc3RhY2tTaXplICsg
ZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQodW5y
ZWFjaGFibGUgfHwgbV9zdGFja1NpemUgPT0gIHN0YWNrU2l6ZSArIGRhdGEubV9zaWduYXR1cmUt
PmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpKTsKIAogICAgIG1fc3RhY2tT
aXplID0gZGF0YS5zdGFja1NpemUoKTsKIAogICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0
YSkgfHwgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGRhdGEpKQogICAgICAg
ICAtLW1fdHJ5RGVwdGg7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Np
Z25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRhdGEubV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3Vu
dCgpOyArK2kpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkbyBhIGNvbnNpc3RlbmN5
IGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBqdXN0IHJlc2V0IHRoZSBzdGFjayBzaXplCiAgICAgICAg
IC8vIGFyZSBwdXNoaW5nIG5ldyB2YWx1ZXMsIHdoaWxlIHdlIGFscmVhZHkgaGF2ZSB0aGUgc2Ft
ZSB2YWx1ZXMgaW4gdGhlIHN0YWNrLgogICAgICAgICAvLyBUaGUgb25seSByZWFzb24gd2UgZG8g
dGhpbmdzIHRoaXMgd2F5IGlzIHNvIHRoYXQgaXQgYWxzbyB3b3JrcyBmb3IgdW5yZWFjaGFibGUg
YmxvY2tzLApAQCAtMTI4NSw3ICsxMjkwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5k
VG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblMKICAg
ICAgICAgYXV0byB0bXAgPSBwdXNoKE5vQ29uc2lzdGVuY3lDaGVjayk7CiAgICAgICAgIEFTU0VS
VCh1bnJlYWNoYWJsZSB8fCB0bXAgPT0gZXhwcmVzc2lvblN0YWNrW2ldLnZhbHVlKCkpOwogICAg
ICAgICBpZiAodW5yZWFjaGFibGUpCi0gICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Np
b25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuVHlwZShp
KSwgdG1wKTsKKyAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0
cnVjdEFuZEFwcGVuZChkYXRhLm1fc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+
cmV0dXJuVHlwZShpKSwgdG1wKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZW50cnkuZW5j
bG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7CiAgICAgfQpA
QCAtMTMwMiwyNCArMTMwNywyNCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVh
Y2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uUwogCiBhdXRvIExM
SW50R2VuZXJhdG9yOjplbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNvbnN0
IFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNF
X0FTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQo
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9PSBzaWduYXR1
cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpKTsKIAotICAgIGlmICgh
c2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7CisgICAgaWYgKCFzaWduYXR1cmUtPmFzPEZ1bmN0
aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpKSB7CiAgICAgICAgIFdhc21SZXRWb2lkOjpl
bWl0KHRoaXMpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjYWxsSW5mb3JtYXRpb25Gb3JDYWxs
ZWUoKnNpZ25hdHVyZSksIGV4cHJlc3Npb25TdGFjayk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxv
Y2soY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0
dXJlPigpKSwgZXhwcmVzc2lvblN0YWNrKTsKICAgICBXYXNtUmV0OjplbWl0KHRoaXMpOwogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAor
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25z
dCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgQVNTRVJUKHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwotICAgIExMSW50Q2FsbElu
Zm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKKyAg
ICBBU1NFUlQoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50
KCkgPT0gYXJncy5zaXplKCkpOworICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxs
SW5mb3JtYXRpb25Gb3JDYWxsZXIoKnNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKSk7
CiAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soaW5mby5hcmd1bWVudHMsIGFyZ3MpOwogICAgIGlm
IChDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgIFdhc21DYWxsOjplbWl0KHRoaXMsIGZ1
bmN0aW9uSW5kZXgsIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50
cyk7CkBAIC0xMzMwLDM1ICsxMzM1LDM1IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhbGwo
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVu
c2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhw
cmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0
CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRl
eCwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBl
PiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEV4
cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOwogCi0gICAgQVNTRVJU
KHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworICAgIEFTU0VSVChz
aWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSA9PSBhcmdz
LnNpemUoKSk7CiAgICAgQVNTRVJUKG1faW5mby50YWJsZUNvdW50KCkgPiB0YWJsZUluZGV4KTsK
ICAgICBBU1NFUlQobV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFibGVFbGVt
ZW50VHlwZTo6RnVuY3JlZik7CiAKLSAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2Fs
bEluZm9ybWF0aW9uRm9yQ2FsbGVyKHNpZ25hdHVyZSk7CisgICAgTExJbnRDYWxsSW5mb3JtYXRp
b24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcigqc2lnbmF0dXJlLmFzPEZ1bmN0aW9u
U2lnbmF0dXJlPigpKTsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhpbmZvLmFyZ3VtZW50cywg
YXJncyk7CiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKLSAgICAgICAgV2FzbUNhbGxJ
bmRpcmVjdDo6ZW1pdCh0aGlzLCBjYWxsZWVJbmRleCwgbV9jb2RlQmxvY2stPmFkZFNpZ25hdHVy
ZShzaWduYXR1cmUpLCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVu
dHMsIHRhYmxlSW5kZXgpOworICAgICAgICBXYXNtQ2FsbEluZGlyZWN0OjplbWl0KHRoaXMsIGNh
bGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKCpzaWduYXR1cmUuYXM8RnVuY3Rp
b25TaWduYXR1cmU+KCkpLCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1
bWVudHMsIHRhYmxlSW5kZXgpOwogICAgIGVsc2UKLSAgICAgICAgV2FzbUNhbGxJbmRpcmVjdE5v
VGxzOjplbWl0KHRoaXMsIGNhbGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKHNp
Z25hdHVyZSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cywg
dGFibGVJbmRleCk7CisgICAgICAgIFdhc21DYWxsSW5kaXJlY3ROb1Rsczo6ZW1pdCh0aGlzLCBj
YWxsZWVJbmRleCwgbV9jb2RlQmxvY2stPmFkZFNpZ25hdHVyZSgqc2lnbmF0dXJlLmFzPEZ1bmN0
aW9uU2lnbmF0dXJlPigpKSwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJn
dW1lbnRzLCB0YWJsZUluZGV4KTsKICAgICBpbmZvLmNvbW1pdFJlc3VsdHMocmVzdWx0cyk7CiAK
ICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsUmVmKGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9y
OjphZGRDYWxsUmVmKGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWUgPSBhcmdzLnRha2VMYXN0KCk7CiAKLSAgICBM
TEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKHNpZ25h
dHVyZSk7CisgICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZv
ckNhbGxlcigqc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpKTsKICAgICB1bmlmeVZh
bHVlc1dpdGhCbG9jayhpbmZvLmFyZ3VtZW50cywgYXJncyk7CiAgICAgaWYgKENvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKLSAgICAgICAgV2FzbUNhbGxSZWY6OmVtaXQodGhpcywgY2FsbGVlLCBtX2Nv
ZGVCbG9jay0+YWRkU2lnbmF0dXJlKHNpZ25hdHVyZSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8u
bnVtYmVyT2ZTdGFja0FyZ3VtZW50cyk7CisgICAgICAgIFdhc21DYWxsUmVmOjplbWl0KHRoaXMs
IGNhbGxlZSwgbV9jb2RlQmxvY2stPmFkZFNpZ25hdHVyZSgqc2lnbmF0dXJlLmFzPEZ1bmN0aW9u
U2lnbmF0dXJlPigpKSwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1l
bnRzKTsKICAgICBlbHNlCi0gICAgICAgIFdhc21DYWxsUmVmTm9UbHM6OmVtaXQodGhpcywgY2Fs
bGVlLCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKHNpZ25hdHVyZSksIGluZm8uc3RhY2tPZmZz
ZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cyk7CisgICAgICAgIFdhc21DYWxsUmVmTm9U
bHM6OmVtaXQodGhpcywgY2FsbGVlLCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKCpzaWduYXR1
cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpLCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJl
ck9mU3RhY2tBcmd1bWVudHMpOwogICAgIGluZm8uY29tbWl0UmVzdWx0cyhyZXN1bHRzKTsKIAog
ICAgIHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTExJbnRHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dEdlbmVyYXRvci5oCmluZGV4IGI1NWNhNTIwMWQwODUzMjJkY2U3NDE1YzEwM2JkZDdmYTZjY2Zl
ZjkuLmJkZmY0NDU5MjgyODgzNGExMDY2ODg1YjMxNmI2NWIwYmY3ZDI1OTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oCkBAIC0zMywxMCAr
MzMsMTAgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIEZ1bmN0
aW9uQ29kZUJsb2NrR2VuZXJhdG9yOwotY2xhc3MgU2lnbmF0dXJlOworY2xhc3MgVHlwZURlZmlu
aXRpb247CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
Qnl0ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgTW9kdWxl
SW5mb3JtYXRpb24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKK0V4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgVHlwZURlZmluaXRpb24m
LCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21M
TEludFBsYW4uY3BwCmluZGV4IGFlMTVmOGRlZGZiZTAxOTkwMTc5Y2VkM2MxZDJmMDc0MGRiYzhk
NjYuLjRmOTI2MjA4ZTZkMDUxNDFhMDg0ZWFlYzVlNmVlMjhhYjExOTNlZTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCkBAIC0zOCw3ICszOCw3IEBA
CiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNs
dWRlICJXYXNtTExJbnRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5l
cy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNzksMTAgKzc5LDEwIEBAIGJvb2wgTExJbnRQ
bGFuOjpwcmVwYXJlSW1wbCgpCiB2b2lkIExMSW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBtX21vZHVs
ZUluZm9ybWF0aW9uLT5mdW5jdGlvbnNbZnVuY3Rpb25JbmRleF07Ci0gICAgU2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9u
U2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAg
IFR5cGVJbmRleCB0eXBlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0
aW9uVHlwZUluZGljZXNbZnVuY3Rpb25JbmRleF07CisgICAgY29uc3QgVHlwZURlZmluaXRpb24m
IHNpZ25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCk7CiAgICAgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1
bmN0aW9uSW5kZXg7Ci0gICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9k
dWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKKyAgICBBU1NFUlRfVU5VU0VEKGZ1
bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+dHlwZUluZGV4RnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHR5cGVJbmRleCk7CiAKICAgICBt
X3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+KCk7CiAgICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9u
Q29kZUJsb2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJz
ZUFuZENvbXBpbGVCeXRlY29kZShmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5z
aXplKCksIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgZnVuY3Rpb25JbmRl
eCk7CkBAIC0xNDgsOCArMTQ4LDggQEAgdm9pZCBMTEludFBsYW46OmRpZENvbXBsZXRlQ29tcGls
YXRpb24oKQogCiAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25J
bmRleCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCk7IGZ1bmN0aW9uSW5k
ZXgrKykgewogICAgICAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlcy5jb250YWlucyhm
dW5jdGlvbkluZGV4KSB8fCBtX21vZHVsZUluZm9ybWF0aW9uLT5yZWZlcmVuY2VkRnVuY3Rpb25z
KCkuY29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNp
Z25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OworICAgICAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24t
PmludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAg
IGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldCh0
eXBlSW5kZXgpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAgICAgICAgIC8v
IFRoZSBMTEludCBhbHdheXMgYm91bmRzIGNoZWNrcwogICAgICAgICAgICAgTWVtb3J5TW9kZSBt
b2RlID0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTGltaXRzLmgKaW5kZXggZjhmMDUzYjU4NjBlN2RmOTdkYjQ0NjRhYTBlYTE3NDhkOWI4
N2YzNi4uNTg3MDM0NzM0NjYzOGQ0YTJkZTUzMjBiNDUzNzQ2NDM3ZmVhZDgyNSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaApAQCAtNDQsNiArNDQsNyBAQCBjb25zdGV4
cHIgc2l6ZV90IG1heEV4cG9ydHMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEV4Y2Vw
dGlvbnMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEdsb2JhbHMgPSAxMDAwMDAwOwog
Y29uc3RleHByIHNpemVfdCBtYXhEYXRhU2VnbWVudHMgPSAxMDAwMDA7Citjb25zdGV4cHIgc2l6
ZV90IG1heFN0cnVjdEZpZWxkQ291bnQgPSAxMDAwMDsKIAogY29uc3RleHByIHNpemVfdCBtYXhT
dHJpbmdTaXplID0gMTAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhNb2R1bGVTaXplID0gMTAy
NCAqIDEwMjQgKiAxMDI0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNw
cAppbmRleCAxOTU5OGFhYmQwNzU0NjNmN2E3NmQ5MzRjOWRhZmVmMDQ2NTY1OTE5Li5iOWQ1MzMz
MDBjZGE3MjFkMTdjZmY4MTU2NjEyOTQzNWUwMDIzNWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlLmNwcApAQCAtNDMsOSArNDMsOSBAQCBNb2R1bGU6Ok1vZHVsZShM
TEludFBsYW4mIHBsYW4pCiAKIE1vZHVsZTo6fk1vZHVsZSgpIHsgfQogCi1XYXNtOjpTaWduYXR1
cmVJbmRleCBNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNp
Z25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0CitXYXNtOjpUeXBlSW5kZXggTW9kdWxlOjp0
eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFj
ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgcmV0dXJu
IG1fbW9kdWxlSW5mb3JtYXRpb24tPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleFNwYWNlKTsKIH0KIAogc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBt
YWtlVmFsaWRhdGlvblJlc3VsdChMTEludFBsYW4mIHBsYW4pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlLmgKaW5kZXggNjJjNjkyN2YyYzlhOTgxYjg0MGRjZDY5YzZiZGIwZDQz
NGNkZDliZi4uNzk3YTgxYzE3NGEyMGU3YTNlODVjNTRmZTBjMjEyN2MxOTBhNmE3MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApAQCAtNTYsNyArNTYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1vZHVsZShwbGFuKSk7CiAgICAgfQog
Ci0gICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3Q7CisgICAgV2FzbTo6VHlw
ZUluZGV4IHR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25J
bmRleFNwYWNlKSBjb25zdDsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9k
dWxlSW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
OyB9CiAKICAgICBSZWY8Q2FsbGVlR3JvdXA+IGNvbXBpbGVTeW5jKENvbnRleHQqLCBNZW1vcnlN
b2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJ
bmZvcm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9y
bWF0aW9uLmgKaW5kZXggYWU2YmJlZWRmMjE4NjE5NDNiODkwZjcyMzE1M2M3ODg4Y2ZjNDk2Ny4u
ODBmN2I5ZTEyODNlZTAwN2IxZWM0MDFlM2E1YjJkODIyODA2ZWUzYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKQEAgLTUwLDM2
ICs1MCwzNiBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5N
b2R1bGVJbmZvcm1hdGlvbigpOwogICAgIAotICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2VT
aXplKCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUo
KSArIGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQorICAgIHNpemVf
dCBmdW5jdGlvbkluZGV4U3BhY2VTaXplKCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25U
eXBlSW5kaWNlcy5zaXplKCkgKyBpbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXMuc2l6ZSgpOyB9
CiAgICAgYm9vbCBpc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHNpemVf
dCBmdW5jdGlvbkluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5k
ZXggPCBmdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwotICAgICAgICByZXR1cm4gZnVuY3Rpb25J
bmRleCA8IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbkluZGV4IDwgaW1wb3J0RnVuY3Rpb25UeXBlSW5kaWNlcy5zaXplKCk7CiAg
ICAgfQotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShzaXplX3QgZnVuY3Rpb25JbmRleCkgY29uc3QKKyAgICBUeXBlSW5kZXggdHlwZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzaXplX3QgZnVuY3Rpb25JbmRleCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBpc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXgpCi0gICAgICAgICAgICA/IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlc1tmdW5jdGlvbkluZGV4XQotICAgICAgICAgICAgOiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4IC0gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
LnNpemUoKV07CisgICAgICAgICAgICA/IGltcG9ydEZ1bmN0aW9uVHlwZUluZGljZXNbZnVuY3Rp
b25JbmRleF0KKyAgICAgICAgICAgIDogaW50ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2VzW2Z1bmN0
aW9uSW5kZXggLSBpbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzLnNpemUoKV07CiAgICAgfQogCi0g
ICAgc2l6ZV90IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkgY29uc3QgeyByZXR1cm4gaW1wb3J0
RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkgKyBpbnRlcm5hbEV4Y2VwdGlvblNpZ25h
dHVyZUluZGljZXMuc2l6ZSgpOyB9CisgICAgc2l6ZV90IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXpl
KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RXhjZXB0aW9uVHlwZUluZGljZXMuc2l6ZSgpICsgaW50
ZXJuYWxFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCk7IH0KICAgICBib29sIGlzSW1wb3J0ZWRF
eGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShzaXplX3QgZXhjZXB0aW9uSW5kZXgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uSW5kZXggPCBleGNlcHRpb25JbmRl
eFNwYWNlU2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkluZGV4IDwgaW1wb3J0RXhj
ZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7CisgICAgICAgIHJldHVybiBleGNlcHRpb25J
bmRleCA8IGltcG9ydEV4Y2VwdGlvblR5cGVJbmRpY2VzLnNpemUoKTsKICAgICB9Ci0gICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShzaXplX3Qg
ZXhjZXB0aW9uSW5kZXgpIGNvbnN0CisgICAgVHlwZUluZGV4IHR5cGVJbmRleEZyb21FeGNlcHRp
b25JbmRleFNwYWNlKHNpemVfdCBleGNlcHRpb25JbmRleCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBpc0ltcG9ydGVkRXhjZXB0aW9uRnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0
aW9uSW5kZXgpCi0gICAgICAgICAgICA/IGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNb
ZXhjZXB0aW9uSW5kZXhdCi0gICAgICAgICAgICA6IGludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJl
SW5kaWNlc1tleGNlcHRpb25JbmRleCAtIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMu
c2l6ZSgpXTsKKyAgICAgICAgICAgID8gaW1wb3J0RXhjZXB0aW9uVHlwZUluZGljZXNbZXhjZXB0
aW9uSW5kZXhdCisgICAgICAgICAgICA6IGludGVybmFsRXhjZXB0aW9uVHlwZUluZGljZXNbZXhj
ZXB0aW9uSW5kZXggLSBpbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCldOwogICAgIH0K
IAotICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBv
cnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9Ci0gICAgdWludDMyX3QgaW50ZXJu
YWxGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVy
ZUluZGljZXMuc2l6ZSgpOyB9Ci0gICAgdWludDMyX3QgaW1wb3J0RXhjZXB0aW9uQ291bnQoKSBj
b25zdCB7IHJldHVybiBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQot
ICAgIHVpbnQzMl90IGludGVybmFsRXhjZXB0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRl
cm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CisgICAgdWludDMyX3QgaW1w
b3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uVHlwZUluZGlj
ZXMuc2l6ZSgpOyB9CisgICAgdWludDMyX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3Qg
eyByZXR1cm4gaW50ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2VzLnNpemUoKTsgfQorICAgIHVpbnQz
Ml90IGltcG9ydEV4Y2VwdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RXhjZXB0aW9u
VHlwZUluZGljZXMuc2l6ZSgpOyB9CisgICAgdWludDMyX3QgaW50ZXJuYWxFeGNlcHRpb25Db3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRXhjZXB0aW9uVHlwZUluZGljZXMuc2l6ZSgpOyB9
CiAKICAgICAvLyBDdXJyZW50bHksIG91ciB3YXNtIGltcGxlbWVudGF0aW9uIGFsbG93cyBvbmx5
IG9uZSBtZW1vcnkgYW5kIHRhYmxlLgogICAgIC8vIElmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoaXMg
bGltaXRhdGlvbiwgd2Ugd291bGQgaGF2ZSBNZW1vcnlJbmZvcm1hdGlvbiBhbmQgVGFibGVJbmZv
cm1hdGlvbiBpbiB0aGUgVmVjdG9ycy4KQEAgLTk5LDYgKzk5LDggQEAgc3RydWN0IE1vZHVsZUlu
Zm9ybWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9u
PiB7CiAgICAgYm9vbCBpc0RlY2xhcmVkRXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSBjb25zdCB7
IHJldHVybiBtX2RlY2xhcmVkRXhjZXB0aW9ucy5jb250YWlucyhpbmRleCk7IH0KICAgICB2b2lk
IGFkZERlY2xhcmVkRXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSB7IG1fZGVjbGFyZWRFeGNlcHRp
b25zLnNldChpbmRleCk7IH0KIAorICAgIHVpbnQzMl90IHR5cGVDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIHR5cGVTaWduYXR1cmVzLnNpemUoKTsgfQorCiAgICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQo
KSBjb25zdCB7IHJldHVybiBtZW1vcnkuaXNJbXBvcnQoKTsgfQogCiAgICAgQnJhbmNoSGludCBn
ZXRCcmFuY2hIaW50KHVpbnQzMl90IGZ1bmN0aW9uT2Zmc2V0LCB1aW50MzJfdCBicmFuY2hPZmZz
ZXQpIGNvbnN0CkBAIC0xMTAsMTEgKzExMiwxMSBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24g
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICB9
CiAKICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwotICAgIFZlY3RvcjxTaWduYXR1cmVJbmRl
eD4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwotICAgIFZlY3RvcjxTaWduYXR1cmVJ
bmRleD4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7Ci0gICAgVmVjdG9yPFNpZ25h
dHVyZUluZGV4PiBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOwotICAgIFZlY3RvcjxT
aWduYXR1cmVJbmRleD4gaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOwotICAgIFZl
Y3RvcjxSZWY8U2lnbmF0dXJlPj4gdXNlZFNpZ25hdHVyZXM7CisgICAgVmVjdG9yPFR5cGVJbmRl
eD4gaW1wb3J0RnVuY3Rpb25UeXBlSW5kaWNlczsKKyAgICBWZWN0b3I8VHlwZUluZGV4PiBpbnRl
cm5hbEZ1bmN0aW9uVHlwZUluZGljZXM7CisgICAgVmVjdG9yPFR5cGVJbmRleD4gaW1wb3J0RXhj
ZXB0aW9uVHlwZUluZGljZXM7CisgICAgVmVjdG9yPFR5cGVJbmRleD4gaW50ZXJuYWxFeGNlcHRp
b25UeXBlSW5kaWNlczsKKyAgICBWZWN0b3I8UmVmPFR5cGVEZWZpbml0aW9uPj4gdHlwZVNpZ25h
dHVyZXM7CiAKICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCAyNTEyNTFmOGFhZTE5YWUwNzA1MjE2
YzA5MThkMGVlMjI5ZjE1YmM5Li4xMGIzNjcxNjFjNWViZDA0YzZhYjNiMjMwNjRhM2RiMjVhNzQ3
YzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0z
NSw3ICszNSw3IEBACiAjaW5jbHVkZSAiV2FzbUNhbGxlZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
V2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvbi5oIgot
I2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZp
bml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3Rm
L0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTY4LDggKzY4LDgg
QEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbnN0IHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKICAgICBBU1NFUlQoZnVuY3Rp
b25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZnVuY3Rpb25JbmRl
eFNwYWNlU2l6ZSgpKTsKIAotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9t
b2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5j
dGlvbkluZGV4XTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIFR5cGVJbmRleCB0eXBlSW5kZXgg
PSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXNbbV9mdW5j
dGlvbkluZGV4XTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlID0gVHlwZUlu
Zm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKIAogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dh
c21DYWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9TUkVudHJ5UGxhbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAppbmRl
eCBlMmU1Y2U1N2Y1MGUwMzZjNmViNjgzMzFhODNlZWMxYWUwNjRiYTI0Li5hNTBiODY3YjhiZjc0
ODhjYzgwZDFiNjQyOTZiMjRiODYwZDgyNjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUg
Ildhc21JUkdlbmVyYXRvckhlbHBlcnMuaCIKICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMu
aCIKICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJl
SW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKICNpbmNs
dWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CkBAIC03MCw4ICs3MCw4IEBAIHZvaWQgT1NSRW50cnlQbGFuOjp3
b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhT
cGFjZSA9IG1fZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmlt
cG9ydEZ1bmN0aW9uQ291bnQoKTsKICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9t
b2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKIAot
ICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKLSAgICBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2ln
bmF0dXJlSW5kZXgpOworICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKKyAgICBj
b25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlw
ZUluZGV4KTsKIAogICAgIENvbXBpbGF0aW9uTW9kZSB0YXJnZXRDb21waWxhdGlvbk1vZGUgPSBt
X2NhbGxlZS0+Y29tcGlsYXRpb25Nb2RlKCkgPT0gQ29tcGlsYXRpb25Nb2RlOjpMTEludE1vZGUg
PyBDb21waWxhdGlvbk1vZGU6OkJCUUZvck9TUkVudHJ5TW9kZSA6IENvbXBpbGF0aW9uTW9kZTo6
T01HRm9yT1NSRW50cnlNb2RlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3BlcmF0aW9ucy5jcHAKaW5kZXggMTA4MDQ0OWRhNjM4ZjY3NmUwN2VjYTBmNTgyZTNiOWZjN2I1
ZTY5MS4uZjNmMDM4NGQyYzEzMmU4OWY3NTRlOWFiMjM0NjU3N2NkNjRmODBmOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtNTE0LDcgKzUx
NCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQs
IEVuY29kZWRKU1ZhbHVlLCAoQ2FsbEZyYW1lKiBjCiB9CiAKIC8vIGh0dHBzOi8vd2ViYXNzZW1i
bHkuZ2l0aHViLmlvL211bHRpLXZhbHVlL2pzLWFwaS9pbmRleC5odG1sI3J1bi1hLWhvc3QtZnVu
Y3Rpb24KLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25JdGVyYXRlUmVzdWx0cywg
dm9pZCwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IFNp
Z25hdHVyZSogc2lnbmF0dXJlLCBKU1ZhbHVlIHJlc3VsdCwgdWludDY0X3QqIHJlZ2lzdGVyUmVz
dWx0cywgdWludDY0X3QqIGNhbGxlZUZyYW1lUG9pbnRlcikpCitKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMsIHZvaWQsIChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBUeXBlRGVmaW5pdGlvbiogdHlwZSwgSlNWYWx1
ZSByZXN1bHQsIHVpbnQ2NF90KiByZWdpc3RlclJlc3VsdHMsIHVpbnQ2NF90KiBjYWxsZWVGcmFt
ZVBvaW50ZXIpKQogewogICAgIC8vIEZJWE1FOiBDb25zaWRlciBwYXNzaW5nIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGVhZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjAzMjA2CkBAIC01MjQsNyArNTI0LDkgQEAgSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRzLCB2b2lkLCAoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEkKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgYXV0byB3YXNtQ2FsbElu
Zm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKnNpZ25hdHVy
ZSwgQ2FsbFJvbGU6OkNhbGxlZSk7CisgICAgY29uc3QgRnVuY3Rpb25TaWduYXR1cmUqIHNpZ25h
dHVyZSA9IHR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOworCisgICAgYXV0byB3YXNtQ2Fs
bEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKnR5cGUs
IENhbGxSb2xlOjpDYWxsZWUpOwogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyUmVz
dWx0T2Zmc2V0cyA9IHdhc21DYWxsSW5mby5jb21wdXRlUmVzdWx0c09mZnNldExpc3QoKTsKIAog
ICAgIHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50ID0gMDsKQEAgLTU4OCw3ICs1OTAsNyBAQCBKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMsIHZvaWQsIChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSQogLy8gRklYTUU6IEl0IHdvdWxkIGJlIG11Y2ggZWFzaWVyIHRv
IGlubGluZSB0aGlzIHdoZW4gd2UgaGF2ZSBhIGdsb2JhbCBHQywgd2hpY2ggY291bGQgcHJvYmFi
bHkgbWVhbiB3ZSBjb3VsZCBhdm9pZAogLy8gc3BpbGxpbmcgdGhlIHJlc3VsdHMgb250byB0aGUg
c3RhY2suCiAvLyBTYXZlZCByZXN1bHQgcmVnaXN0ZXJzIHNob3VsZCBiZSBwbGFjZWQgb24gdGhl
IHN0YWNrIGp1c3QgYWJvdmUgdGhlIGxhc3Qgc3RhY2sgcmVzdWx0LgotSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5LCBKU0FycmF5KiwgKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IFNpZ25hdHVy
ZSogc2lnbmF0dXJlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBKU1ZhbHVlKiBzdGFja1Bv
aW50ZXJGcm9tQ2FsbGVlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25BbGxv
Y2F0ZVJlc3VsdHNBcnJheSwgSlNBcnJheSosIChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6
SW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBUeXBlRGVmaW5pdGlvbiogdHlwZSwgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSwgSlNWYWx1ZSogc3RhY2tQb2ludGVyRnJvbUNhbGxlZSkpCiB7CiAg
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpT
V2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKICAgICBWTSYgdm0gPSBqc0luc3RhbmNlLT52bSgpOwpA
QCAtNTk2LDEyICs1OTgsMTMgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkFs
bG9jYXRlUmVzdWx0c0FycmF5LCBKU0FycmF5KiwgKENhbGxGcmFtZSogY2EKIAogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKICAg
ICBPYmplY3RJbml0aWFsaXphdGlvblNjb3BlIGluaXRpYWxpemF0aW9uU2NvcGUoZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKKyAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSogc2lnbmF0dXJlID0gdHlw
ZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlc3RyaWN0ZWQoaW5pdGlhbGl6YXRpb25TY29wZSwg
bnVsbHB0ciwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSwgc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKIAog
ICAgIC8vIEZJWE1FOiBIYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlLi4uCiAgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0KTsKIAotICAgIGF1dG8gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKCpzaWduYXR1cmUpOworICAgIGF1dG8gd2FzbUNh
bGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKCp0eXBl
KTsKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlclJlc3VsdHMgPSB3YXNtQ2FsbElu
Zm8uY29tcHV0ZVJlc3VsdHNPZmZzZXRMaXN0KCk7CiAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihKU1ZhbHVlKSA9PSBzaXplb2YoQ1BVUmVnaXN0ZXIpLCAiVGhlIGNvZGUgYmVsb3cgcmVsaWVz
IG9uIHRoaXMuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMu
aAppbmRleCBjZjdjMGQ1ZmVmNGRmZDM1YzdjY2EzMzQ3OTNlYjI0NGVjYmFkZDE1Li41OGQxNTk3
NWU4OGQyMDNkYmM5ODQ0YzE0ZTU0MjQwMmE2MTZjYjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ29udGV4
dDsKIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgSW5zdGFuY2U7Ci1jbGFzcyBTaWduYXR1cmU7
CitjbGFzcyBUeXBlRGVmaW5pdGlvbjsKIAogdm9pZCBsb2FkVmFsdWVzSW50b0J1ZmZlcihQcm9i
ZTo6Q29udGV4dCYsIGNvbnN0IFN0YWNrTWFwJiwgdWludDY0X3QqIGJ1ZmZlcik7CiAKQEAgLTYy
LDggKzYyLDggQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9G
MzIsIGZsb2F0LCAoQ2FsbEZyYW1lKiwgSlNWYWx1ZSkpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0JpZ0ludCwgRW5jb2RlZEpTVmFsdWUsIChDYWxsRnJh
bWUqLCBJbnN0YW5jZSosIGludDY0X3QpKTsKIAotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25JdGVyYXRlUmVzdWx0cywgdm9pZCwgKENhbGxGcmFtZSosIEluc3RhbmNlKiwgY29u
c3QgU2lnbmF0dXJlKiwgSlNWYWx1ZSwgdWludDY0X3QqLCB1aW50NjRfdCopKTsKLUpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXksIEpTQXJyYXkq
LCAoQ2FsbEZyYW1lKiwgV2FzbTo6SW5zdGFuY2UqLCBjb25zdCBTaWduYXR1cmUqLCBJbmRleGlu
Z1R5cGUsIEpTVmFsdWUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkl0
ZXJhdGVSZXN1bHRzLCB2b2lkLCAoQ2FsbEZyYW1lKiwgSW5zdGFuY2UqLCBjb25zdCBUeXBlRGVm
aW5pdGlvbiosIEpTVmFsdWUsIHVpbnQ2NF90KiwgdWludDY0X3QqKSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5LCBKU0FycmF5KiwgKENh
bGxGcmFtZSosIFdhc206Okluc3RhbmNlKiwgY29uc3QgVHlwZURlZmluaXRpb24qLCBJbmRleGlu
Z1R5cGUsIEpTVmFsdWUqKSk7CiAKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbVdyaXRlQmFycmllclNsb3dQYXRoLCB2b2lkLCAoSlNDZWxsKiwgVk0qKSk7CiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblBvcGNvdW50MzIsIHVpbnQzMl90LCAoaW50MzJf
dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCmluZGV4IGVkMDBkOWEw
YTQyYjc5YWRjMWYzYzhhYjBmMzQ2ZmM0ZjZkYTg5YWUuLjQzOGZmM2Y3MmQ5YjY2NDhhYWY3MGE0
OWEwYWE3YjE1MThiNmI5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2Vy
LmgKQEAgLTExMSwxNSArMTExLDE1IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgY29uc3Qg
dWludDhfdCogbV9zb3VyY2U7CiAgICAgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwotICAgIC8vIFdl
IGtlZXAgYSBsb2NhbCByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCB0YWJsZSBzbyB3ZSBkb24ndCBo
YXZlIHRvIGZldGNoIGl0IHRvIGZpbmQgdGh1bmsgc2lnbmF0dXJlcy4KLSAgICBjb25zdCBTaWdu
YXR1cmVJbmZvcm1hdGlvbiYgbV9zaWduYXR1cmVJbmZvcm1hdGlvbjsKKyAgICAvLyBXZSBrZWVw
IGEgbG9jYWwgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgdGFibGUgc28gd2UgZG9uJ3QgaGF2ZSB0
byBmZXRjaCBpdCB0byBmaW5kIHRodW5rIHR5cGVzLgorICAgIGNvbnN0IFR5cGVJbmZvcm1hdGlv
biYgbV90eXBlSW5mb3JtYXRpb247CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlw
ZT4KIEFMV0FZU19JTkxJTkUgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6UGFyc2VyKGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKICAgICA6IG1fc291cmNlKHNv
dXJjZUJ1ZmZlcikKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKLSAgICAsIG1f
c2lnbmF0dXJlSW5mb3JtYXRpb24oU2lnbmF0dXJlSW5mb3JtYXRpb246OnNpbmdsZXRvbigpKQor
ICAgICwgbV90eXBlSW5mb3JtYXRpb24oVHlwZUluZm9ybWF0aW9uOjpzaW5nbGV0b24oKSkKIHsK
IH0KIApAQCAtMjgwLDcgKzI4MCw3IEBAIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgUGFyc2VyPFN1
Y2Nlc3NUeXBlPjo6UGFydGlhbFJlc3VsdCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwCiAgICAgaWYg
KHBlZWtJbnQ3KHR5cGVLaW5kKSAmJiBpc1ZhbGlkVHlwZUtpbmQodHlwZUtpbmQpKSB7CiAgICAg
ICAgIFR5cGUgdHlwZSA9IHtzdGF0aWNfY2FzdDxUeXBlS2luZD4odHlwZUtpbmQpLCBOdWxsYWJs
ZTo6WWVzLCAwfTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighKGlzVmFsdWVUeXBlKHR5
cGUpIHx8IHR5cGUuaXNWb2lkKCkpLCAicmVzdWx0IHR5cGUgb2YgYmxvY2s6ICIsIG1ha2VTdHJp
bmcodHlwZS5raW5kKSwgIiBpcyBub3QgYSB2YWx1ZSB0eXBlIG9yIFZvaWQiKTsKLSAgICAgICAg
cmVzdWx0ID0gbV9zaWduYXR1cmVJbmZvcm1hdGlvbi50aHVua0Zvcih0eXBlKTsKKyAgICAgICAg
cmVzdWx0ID0gbV90eXBlSW5mb3JtYXRpb24udGh1bmtGb3IodHlwZSk7CiAgICAgICAgIG1fb2Zm
c2V0Kys7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtMjg4LDkgKzI4OCw5IEBAIEFM
V0FZU19JTkxJTkUgdHlwZW5hbWUgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6UGFydGlhbFJlc3VsdCBQ
YXJzZXI8U3VjY2Vzc1R5cGU+OjpwCiAgICAgaW50NjRfdCBpbmRleDsKICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhckludDY0KGluZGV4KSwgIkJsb2NrLWxpa2UgaW5zdHJ1Y3Rpb24g
ZG9lc24ndCByZXR1cm4gdmFsdWUgdHlwZSBidXQgY2FuJ3QgZGVjb2RlIHR5cGUgc2VjdGlvbiBp
bmRleCIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXggPCAwLCAiQmxvY2stbGlrZSBp
bnN0cnVjdGlvbiBzaWduYXR1cmUgaW5kZXggaXMgbmVnYXRpdmUiKTsKLSAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpID49IGluZm8udXNlZFNpZ25hdHVy
ZXMuc2l6ZSgpLCAiQmxvY2stbGlrZSBpbnN0cnVjdGlvbiBzaWduYXR1cmUgaW5kZXggaXMgb3V0
IG9mIGJvdW5kcy4gSW5kZXg6ICIsIGluZGV4LCAiIHR5cGUgaW5kZXggc3BhY2U6ICIsIGluZm8u
dXNlZFNpZ25hdHVyZXMuc2l6ZSgpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHN0YXRpY19j
YXN0PHNpemVfdD4oaW5kZXgpID49IGluZm8udHlwZUNvdW50KCksICJCbG9jay1saWtlIGluc3Ry
dWN0aW9uIHNpZ25hdHVyZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBJbmRleDogIiwgaW5kZXgs
ICIgdHlwZSBpbmRleCBzcGFjZTogIiwgaW5mby50eXBlQ291bnQoKSk7CiAKLSAgICByZXN1bHQg
PSAmaW5mby51c2VkU2lnbmF0dXJlc1tpbmRleF0uZ2V0KCk7CisgICAgcmVzdWx0ID0gJmluZm8u
dHlwZVNpZ25hdHVyZXNbaW5kZXhdLmdldCgpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTMx
Miw3ICszMTIsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFy
c2VIZWFwVHlwZShjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oaGVhcFR5cGUpID49IGlu
Zm8udXNlZFNpZ25hdHVyZXMuc2l6ZSgpKQorICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGhl
YXBUeXBlKSA+PSBpbmZvLnR5cGVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXN1bHQgPSBoZWFwVHlwZTsKQEAgLTMzMCwyMCArMzMwLDE5IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVZhbHVlVHlwZShjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYKIAogICAgIFR5cGVLaW5kIHR5cGVLaW5kID0gc3RhdGljX2Nhc3Q8VHlwZUtpbmQ+
KGtpbmQpOwogICAgIGJvb2wgaXNOdWxsYWJsZSA9IHRydWU7Ci0gICAgU2lnbmF0dXJlSW5kZXgg
c2lnSW5kZXggPSAwOwotCisgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IDA7CiAgICAgaWYgKE9w
dGlvbnM6OnVzZVdlYkFzc2VtYmx5VHlwZWRGdW5jdGlvblJlZmVyZW5jZXMoKSAmJiAodHlwZUtp
bmQgPT0gVHlwZUtpbmQ6OkZ1bmNyZWYgfHwgdHlwZUtpbmQgPT0gVHlwZUtpbmQ6OkV4dGVybnJl
ZikpIHsKLSAgICAgICAgc2lnSW5kZXggPSBzdGF0aWNfY2FzdDxTaWduYXR1cmVJbmRleD4odHlw
ZUtpbmQpOworICAgICAgICB0eXBlSW5kZXggPSBzdGF0aWNfY2FzdDxUeXBlSW5kZXg+KHR5cGVL
aW5kKTsKICAgICAgICAgdHlwZUtpbmQgPSBUeXBlS2luZDo6UmVmTnVsbDsKICAgICB9IGVsc2Ug
aWYgKHR5cGVLaW5kID09IFR5cGVLaW5kOjpSZWYgfHwgdHlwZUtpbmQgPT0gVHlwZUtpbmQ6OlJl
Zk51bGwpIHsKICAgICAgICAgaXNOdWxsYWJsZSA9IHR5cGVLaW5kID09IFR5cGVLaW5kOjpSZWZO
dWxsOwogICAgICAgICBpbnQzMl90IGhlYXBUeXBlOwogICAgICAgICBpZiAoIXBhcnNlSGVhcFR5
cGUoaW5mbywgaGVhcFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBz
aWdJbmRleCA9IGhlYXBUeXBlIDwgMCA/IHN0YXRpY19jYXN0PFNpZ25hdHVyZUluZGV4PihoZWFw
VHlwZSkgOiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KGluZm8udXNlZFNpZ25hdHVyZXNbaGVh
cFR5cGVdLmdldCgpKTsKKyAgICAgICAgdHlwZUluZGV4ID0gaGVhcFR5cGUgPCAwID8gc3RhdGlj
X2Nhc3Q8VHlwZUluZGV4PihoZWFwVHlwZSkgOiBUeXBlSW5mb3JtYXRpb246OmdldChpbmZvLnR5
cGVTaWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7CiAgICAgfQogCi0gICAgVHlwZSB0eXBlID0g
eyB0eXBlS2luZCwgc3RhdGljX2Nhc3Q8TnVsbGFibGU+KGlzTnVsbGFibGUpLCBzaWdJbmRleCB9
OworICAgIFR5cGUgdHlwZSA9IHsgdHlwZUtpbmQsIHN0YXRpY19jYXN0PE51bGxhYmxlPihpc051
bGxhYmxlKSwgdHlwZUluZGV4IH07CiAgICAgaWYgKCFpc1ZhbHVlVHlwZSh0eXBlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdCA9IHR5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKaW5kZXggMDhkOWM2MzdiYjczNDMz
Y2RhN2RkMzQ1ZTY4NWE3M2NkNzFjNmRmYi4uZDJkYjVkYmY2Yzk2MTk3NjBlZDM0MjlkMDA4YWFi
YjhjNjYxYTMwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNl
Y3Rpb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0
aW9uUGFyc2VyLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZv
cm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUg
Ildhc21PcHMuaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUg
Ildhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC00NSw0MSArNDUsMzAgQEAg
YXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgVHlw
ZSBzZWN0aW9uJ3MgY291bnQiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gbWF4
VHlwZXMsICJUeXBlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGlt
dW0gIiwgbWF4VHlwZXMpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+dXNlZFNp
Z25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGNvdW50LCAiIGVudHJpZXMiKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPnR5cGVTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBh
Y2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rp
b24ncyAiLCBjb3VudCwgIiBlbnRyaWVzIik7CiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewotICAgICAgICBpbnQ4X3QgdHlwZTsKLSAgICAgICAgdWludDMyX3Qg
YXJndW1lbnRDb3VudDsKLSAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7Ci0KLSAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0ICIs
IGksICJ0aCBUeXBlJ3MgdHlwZSIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUg
IT0gc3RhdGljX2Nhc3Q8aW50OF90PihUeXBlS2luZDo6RnVuYyksIGksICJ0aCBUeXBlIGlzIG5v
bi1GdW5jICIsIHR5cGUpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihhcmd1bWVudENvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50
IGNvdW50Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1h
eEZ1bmN0aW9uUGFyYW1zLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1
bWVudENvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJhbXMpOwotICAgICAgICBWZWN0
b3I8VHlwZT4gYXJndW1lbnRzOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmd1bWVu
dHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5v
dWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOwotCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKLSAg
ICAgICAgICAgIFR5cGUgYXJndW1lbnRUeXBlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYWx1ZVR5cGUobV9pbmZvLCBhcmd1bWVudFR5cGUpLCAiY2FuJ3QgZ2V0ICIs
IGksICJ0aCBhcmd1bWVudCBUeXBlIik7Ci0gICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGFy
Z3VtZW50VHlwZSk7CisgICAgICAgIGludDhfdCB0eXBlS2luZDsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGVLaW5kKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlw
ZSdzIHR5cGUiKTsKKyAgICAgICAgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiBzaWduYXR1cmU7Cisg
ICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VHlwZUtpbmQ+KHR5cGVLaW5kKSkgeworICAgICAg
ICBjYXNlIFR5cGVLaW5kOjpGdW5jOiB7CisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVS
X0ZBSUxTKHBhcnNlRnVuY3Rpb25UeXBlKGksIHNpZ25hdHVyZSkpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0OiB7CisgICAgICAg
ICAgICBpZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5R0MoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFpbChpLCAidGggdHlwZSBmYWlsZWQgdG8gcGFyc2UgYmVjYXVzZSBzdHJ1Y3QgdHlw
ZXMgYXJlIG5vdCBlbmFibGVkIik7CiAKLSAgICAgICAgdWludDMyX3QgcmV0dXJuQ291bnQ7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHJldHVybkNvdW50KSwg
ImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3VudCIpOwotCi0gICAgICAgIFZl
Y3RvcjxUeXBlLCAxPiByZXR1cm5UeXBlczsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
cmV0dXJuVHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxs
b2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVy
ZSIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmV0dXJuQ291bnQ7ICsraSkg
ewotICAgICAgICAgICAgVHlwZSB2YWx1ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFsdWVUeXBlKG1faW5mbywgdmFsdWUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBU
eXBlJ3MgcmV0dXJuIHZhbHVlIik7Ci0gICAgICAgICAgICByZXR1cm5UeXBlcy5hcHBlbmQodmFs
dWUpOworICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZVN0cnVjdFR5
cGUoaSwgc2lnbmF0dXJlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhaWwoaSwgInRoIFR5cGUgaXMgbm9uLUZ1
bmMgIiwgdHlwZUtpbmQpOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4g
c2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUZvcihyZXR1cm5UeXBl
cywgYXJndW1lbnRzKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2lnbmF0dXJlLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRo
IHNpZ25hdHVyZSIpOwotCi0gICAgICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMudW5jaGVja2Vk
QXBwZW5kKHNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgbV9pbmZvLT50eXBl
U2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlLnJlbGVhc2VOb25OdWxsKCkpOwog
ICAgIH0KICAgICByZXR1cm4geyB9OwogfQpAQCAtOTEsOSArODAsOSBAQCBhdXRvIFNlY3Rpb25Q
YXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoaW1wb3J0Q291bnQgPiBtYXhJbXBvcnRzLCAiSW1wb3J0IHNlY3Rpb24ncyBjb3VudCBp
cyB0b28gYmlnICIsIGltcG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4SW1wb3J0cyk7CiAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0eShp
bXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRD
b3VudCwgIiBnbG9iYWxzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBm
aXggdGhlIEZJWE1FcyBiZWxvdy4KICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmlt
cG9ydHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydHMiKTsgLy8gRklYTUUgdGhp
cyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnRy
eVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVt
b3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlcyIpOyAv
LyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cu
CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblR5cGVJbmRp
Y2VzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQgZnVuY3Rpb24gc2lnbmF0dXJl
cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMg
YmVsb3cuCiAgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpKQotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVy
ZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRl
IGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBleGNlcHRpb24gc2ln
bmF0dXJlcyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBG
SVhNRXMgYmVsb3cuCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0
RXhjZXB0aW9uVHlwZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBl
eGNlcHRpb24gc2lnbmF0dXJlcyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4g
d2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAKICAgICBmb3IgKHVpbnQzMl90IGltcG9ydE51bWJl
ciA9IDA7IGltcG9ydE51bWJlciA8IGltcG9ydENvdW50OyArK2ltcG9ydE51bWJlcikgewogICAg
ICAgICB1aW50MzJfdCBtb2R1bGVMZW47CkBAIC0xMTIsMTIgKzEwMSwxMiBAQCBhdXRvIFNlY3Rp
b25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNhbid0IGdldCAiLCBpbXBv
cnROdW1iZXIsICJ0aCBJbXBvcnQncyBraW5kIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAi
JyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewog
ICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKLSAgICAgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCAi
LCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmdW5jdGlvbiBzaWduYXR1cmUgaW4gbW9kdWxl
ICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+PSBtX2lu
Zm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgImludmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGZv
ciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQsICIsIGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgs
ICIgaXMgb3V0IG9mIHJhbmdlIG9mICIsIG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAi
IGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICIn
Iik7Ci0gICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCk7Ci0gICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1tm
dW5jdGlvblNpZ25hdHVyZUluZGV4XSk7Ci0gICAgICAgICAgICBtX2luZm8tPmltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAg
ICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25UeXBlSW5kZXg7CisgICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblR5cGVJbmRleCksICJjYW4ndCBn
ZXQgIiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZnVuY3Rpb24gc2lnbmF0dXJlIGluIG1v
ZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7Cisg
ICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uVHlwZUluZGV4ID49IG1faW5m
by0+dHlwZUNvdW50KCksICJpbnZhbGlkIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgIiwgaW1wb3J0
TnVtYmVyLCAidGggSW1wb3J0LCAiLCBmdW5jdGlvblR5cGVJbmRleCwgIiBpcyBvdXQgb2YgcmFu
Z2Ugb2YgIiwgbV9pbmZvLT50eXBlQ291bnQoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmlu
ZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAga2luZEluZGV4
ID0gbV9pbmZvLT5pbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAg
IFR5cGVJbmRleCB0eXBlSW5kZXggPSBUeXBlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnR5cGVT
aWduYXR1cmVzW2Z1bmN0aW9uVHlwZUluZGV4XSk7CisgICAgICAgICAgICBtX2luZm8tPmltcG9y
dEZ1bmN0aW9uVHlwZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHR5cGVJbmRleCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6
IHsKQEAgLTEzOSw3ICsxMjgsNyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkg
LT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgR2xvYmFsSW5mb3JtYXRpb24gZ2xvYmFsOwog
ICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUdsb2JhbFR5cGUoZ2xv
YmFsKSk7CiAgICAgICAgICAgICAvLyBPbmx5IG11dGFibGUgZ2xvYmFscyBuZWVkIGZsb2F0aW5n
IGJpbmRpbmdzLgotICAgICAgICAgICAgaWYgKGdsb2JhbC5tdXRhYmlsaXR5ID09IEdsb2JhbElu
Zm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKQorICAgICAgICAgICAgaWYgKGdsb2JhbC5t
dXRhYmlsaXR5ID09IE11dGFiaWxpdHk6Ok11dGFibGUpCiAgICAgICAgICAgICAgICAgZ2xvYmFs
LmJpbmRpbmdNb2RlID0gR2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTsK
ICAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+Z2xvYmFscy5zaXplKCk7CiAgICAgICAg
ICAgICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7CkBA
IC0xNTQsMTAgKzE0MywxMCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4g
UGFydGlhbFJlc3VsdAogCiAgICAgICAgICAgICB1aW50MzJfdCBleGNlcHRpb25TaWduYXR1cmVJ
bmRleDsKICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4
Y2VwdGlvblNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJ
bXBvcnQncyBleGNlcHRpb24gc2lnbmF0dXJlIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAi
JyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMu
c2l6ZSgpLCAiaW52YWxpZCBleGNlcHRpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIs
ICJ0aCBJbXBvcnQsICIsIGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4LCAiIGlzIG91dCBvZiByYW5n
ZSBvZiAiLCBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgIiBpbiBtb2R1bGUgJyIsIG1v
ZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAg
a2luZEluZGV4ID0gbV9pbmZvLT5pbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUo
KTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2V4Y2VwdGlvblNpZ25hdHVy
ZUluZGV4XSk7Ci0gICAgICAgICAgICBtX2luZm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUlu
ZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXggPj0gbV9pbmZvLT50eXBlQ291
bnQoKSwgImludmFsaWQgZXhjZXB0aW9uIHNpZ25hdHVyZSBmb3IgIiwgaW1wb3J0TnVtYmVyLCAi
dGggSW1wb3J0LCAiLCBleGNlcHRpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ug
b2YgIiwgbV9pbmZvLT50eXBlQ291bnQoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywg
IicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAga2luZEluZGV4ID0g
bV9pbmZvLT5pbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCk7CisgICAgICAgICAgICBU
eXBlSW5kZXggdHlwZUluZGV4ID0gVHlwZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT50eXBlU2ln
bmF0dXJlc1tleGNlcHRpb25TaWduYXR1cmVJbmRleF0pOworICAgICAgICAgICAgbV9pbmZvLT5p
bXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQodHlwZUluZGV4KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3NCwxOSArMTYzLDE5
IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQK
ICAgICB1aW50MzJfdCBjb3VudDsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50Iik7CiAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rp
b24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25z
KTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBl
bm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBzaWduYXR1cmVzIik7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yICIsIGNvdW50LCAiIEZ1bmN0aW9uIHNpZ25hdHVyZXMiKTsKICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFtX2luZm8tPmZ1bmN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2Fu
J3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICJGdW5jdGlvbiBsb2NhdGlv
bnMiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgIHVpbnQzMl90IHR5cGVOdW1iZXI7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlVmFyVUludDMyKHR5cGVOdW1iZXIpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBGdW5jdGlvbidz
IHR5cGUgbnVtYmVyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZU51bWJlciA+
PSBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgaSwgInRoIEZ1bmN0aW9uIHR5cGUgbnVt
YmVyIGlzIGludmFsaWQgIiwgdHlwZU51bWJlcik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYodHlwZU51bWJlciA+PSBtX2luZm8tPnR5cGVDb3VudCgpLCBpLCAidGggRnVuY3Rpb24gdHlw
ZSBudW1iZXIgaXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKIAotICAgICAgICBTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51
c2VkU2lnbmF0dXJlc1t0eXBlTnVtYmVyXSk7CisgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXgg
PSBUeXBlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnR5cGVTaWduYXR1cmVzW3R5cGVOdW1iZXJd
KTsKICAgICAgICAgLy8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgog
ICAgICAgICBzaXplX3Qgc3RhcnQgPSAwOwogICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAg
ICAgbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBl
bmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBtX2luZm8tPmludGVybmFsRnVuY3Rpb25UeXBl
SW5kaWNlcy51bmNoZWNrZWRBcHBlbmQodHlwZUluZGV4KTsKICAgICAgICAgbV9pbmZvLT5mdW5j
dGlvbnMudW5jaGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCwgVmVjdG9yPHVpbnQ4X3Q+KCkgfSk7
CiAgICAgfQogCkBAIC0zNzIsNyArMzYxLDcgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUV4
cG9ydCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
a2luZEluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4
cG9ydCBoYXMgaW52YWxpZCBnbG9iYWwgbnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRz
IHRoZSBnbG9iYWxzIGNvdW50ICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICci
LCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgICAgIC8vIE9ubHkgbXV0YWJsZSBnbG9iYWxz
IG5lZWQgZmxvYXRpbmcgYmluZGluZ3MuCiAgICAgICAgICAgICBHbG9iYWxJbmZvcm1hdGlvbiYg
Z2xvYmFsID0gbV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF07Ci0gICAgICAgICAgICBpZiAoZ2xv
YmFsLm11dGFiaWxpdHkgPT0gR2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUp
CisgICAgICAgICAgICBpZiAoZ2xvYmFsLm11dGFiaWxpdHkgPT0gTXV0YWJpbGl0eTo6TXV0YWJs
ZSkKICAgICAgICAgICAgICAgICBnbG9iYWwuYmluZGluZ01vZGUgPSBHbG9iYWxJbmZvcm1hdGlv
bjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTM5Niw4ICszODUsOCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlU3RhcnQoKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAgICAgdWludDMyX3Qgc3RhcnRGdW5jdGlvbkluZGV4OwogICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHN0YXJ0RnVuY3Rpb25JbmRleCksICJjYW4n
dCBnZXQgU3RhcnQgaW5kZXgiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHN0YXJ0RnVuY3Rp
b25JbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgIlN0YXJ0IGluZGV4
ICIsIHN0YXJ0RnVuY3Rpb25JbmRleCwgIiBleGNlZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIs
IG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKLSAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1faW5mby0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHN0YXJ0RnVuY3Rpb25JbmRleCk7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUg
PSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICBUeXBlSW5k
ZXggdHlwZUluZGV4ID0gbV9pbmZvLT50eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0
YXJ0RnVuY3Rpb25JbmRleCk7CisgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gVHlwZUluZm9y
bWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZSh0eXBlSW5kZXgpOwogICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0
IGhhdmUgYXJndW1lbnRzIik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2lnbmF0dXJlLnJl
dHVybnNWb2lkKCksICJTdGFydCBmdW5jdGlvbiBjYW4ndCByZXR1cm4gYSB2YWx1ZSIpOwogICAg
IG1faW5mby0+c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPSBzdGFydEZ1bmN0aW9uSW5kZXg7CkBA
IC02MTAsNyArNTk5LDcgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4
X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51bWJlciwKIAogICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCksICJnZXRfZ2xv
YmFsJ3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMgIiwg
bV9pbmZvLT5nbG9iYWxzLnNpemUoKSk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5k
ZXggPj0gbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBpbXBvcnQga2lu
ZCBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBnbG9iYWwgIiwg
bV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RihtX2luZm8tPmdsb2JhbHNbaW5kZXhdLm11dGFiaWxpdHkgIT0gR2xvYmFsSW5mb3JtYXRpb246
OkltbXV0YWJsZSwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgaXMg
bXV0YWJsZSAiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNb
aW5kZXhdLm11dGFiaWxpdHkgIT0gTXV0YWJpbGl0eTo6SW1tdXRhYmxlLCAiZ2V0X2dsb2JhbCBp
bXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBpcyBtdXRhYmxlICIpOwogCiAgICAgICAgIHJl
c3VsdFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5kZXhdLnR5cGU7CiAgICAgICAgIGJpdHNPcklt
cG9ydE51bWJlciA9IGluZGV4OwpAQCAtNjIzLDEwICs2MTIsMTAgQEAgYXV0byBTZWN0aW9uUGFy
c2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9y
dE51bWJlciwKICAgICAgICAgICAgIGludDMyX3QgaGVhcFR5cGU7CiAgICAgICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZUhlYXBUeXBlKG1faW5mbywgaGVhcFR5cGUpLCAicmVmLm51
bGwgaGVhcHR5cGUgbXVzdCBiZSBmdW5jcmVmLCBleHRlcm5yZWYgb3IgdHlwZV9pZHgiKTsKICAg
ICAgICAgICAgIGlmIChpc1R5cGVJbmRleEhlYXBUeXBlKGhlYXBUeXBlKSkgewotICAgICAgICAg
ICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6
Olllcywgc2lnbmF0dXJlSW5kZXggfTsKKyAgICAgICAgICAgICAgICBUeXBlSW5kZXggdHlwZUlu
ZGV4ID0gVHlwZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT50eXBlU2lnbmF0dXJlc1toZWFwVHlw
ZV0uZ2V0KCkpOworICAgICAgICAgICAgICAgIHR5cGVPZk51bGwgPSBUeXBlIHsgVHlwZUtpbmQ6
OlJlZk51bGwsIE51bGxhYmxlOjpZZXMsIHR5cGVJbmRleCB9OwogICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwg
TnVsbGFibGU6Olllcywgc3RhdGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+KGhlYXBUeXBlKSB9Owor
ICAgICAgICAgICAgICAgIHR5cGVPZk51bGwgPSBUeXBlIHsgVHlwZUtpbmQ6OlJlZk51bGwsIE51
bGxhYmxlOjpZZXMsIHN0YXRpY19jYXN0PFR5cGVJbmRleD4oaGVhcFR5cGUpIH07CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZWZUeXBlKG1f
aW5mbywgdHlwZU9mTnVsbCksICJyZWYubnVsbCB0eXBlIG11c3QgYmUgYSByZWZlcmVuY2UgdHlw
ZSIpOwogCkBAIC02NDEsOCArNjMwLDggQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUluaXRF
eHByKHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51bWJlciwKICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCks
ICJyZWYuZnVuYyBpbmRleCIsIGluZGV4LCAiIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBmdW5jdGlv
bnMgIiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6
dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5mby0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKLSAgICAgICAgICAgIHJlc3VsdFR5cGUgPSB7IFR5
cGVLaW5kOjpSZWYsIE51bGxhYmxlOjpObywgc2lnbmF0dXJlSW5kZXggfTsKKyAgICAgICAgICAg
IFR5cGVJbmRleCB0eXBlSW5kZXggPSBtX2luZm8tPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoaW5kZXgpOworICAgICAgICAgICAgcmVzdWx0VHlwZSA9IHsgVHlwZUtpbmQ6OlJlZiwg
TnVsbGFibGU6Ok5vLCB0eXBlSW5kZXggfTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBy
ZXN1bHRUeXBlID0gVHlwZXM6OkZ1bmNyZWY7CiAKQEAgLTY4MSw2ICs2NzAsNjAgQEAgYXV0byBT
ZWN0aW9uUGFyc2VyOjpwYXJzZUkzMkluaXRFeHByKHN0ZDo6b3B0aW9uYWw8STMySW5pdEV4cHI+
JiBpbml0RXhwciwgQVNDSUkKICAgICByZXR1cm4geyB9OwogfQogCithdXRvIFNlY3Rpb25QYXJz
ZXI6OnBhcnNlRnVuY3Rpb25UeXBlKHVpbnQzMl90IHBvc2l0aW9uLCBSZWZQdHI8VHlwZURlZmlu
aXRpb24+JiBmdW5jdGlvblNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQz
Ml90IGFyZ3VtZW50Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50
MzIoYXJndW1lbnRDb3VudCksICJjYW4ndCBnZXQgIiwgcG9zaXRpb24sICJ0aCBUeXBlJ3MgYXJn
dW1lbnQgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3VtZW50Q291bnQgPiBt
YXhGdW5jdGlvblBhcmFtcywgcG9zaXRpb24sICJ0aCBhcmd1bWVudCBjb3VudCBpcyB0b28gYmln
ICIsIGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvblBhcmFtcyk7CisgICAg
VmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJn
dW1lbnRUeXBlcy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBwb3NpdGlvbiwgInRoIHNp
Z25hdHVyZSIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7
ICsraSkgeworICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYWx1ZVR5cGUobV9pbmZvLCBhcmd1bWVudFR5cGUpLCAiY2FuJ3QgZ2V0
ICIsIGksICJ0aCBhcmd1bWVudCBUeXBlIik7CisgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5k
KGFyZ3VtZW50VHlwZSk7CisgICAgfQorCisgICAgdWludDMyX3QgcmV0dXJuQ291bnQ7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIocmV0dXJuQ291bnQpLCAiY2FuJ3Qg
Z2V0ICIsIHBvc2l0aW9uLCAidGggVHlwZSdzIHJldHVybiBjb3VudCIpOworCisgICAgVmVjdG9y
PFR5cGUsIDE+IHJldHVyblR5cGVzOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXJldHVyblR5
cGVzLnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIHBvc2l0aW9uLCAidGggc2lnbmF0dXJl
Iik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJldHVybkNvdW50OyArK2kpIHsKKyAg
ICAgICAgVHlwZSB2YWx1ZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1
ZVR5cGUobV9pbmZvLCB2YWx1ZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUncyByZXR1cm4g
dmFsdWUiKTsKKyAgICAgICAgcmV0dXJuVHlwZXMuYXBwZW5kKHZhbHVlKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvblNpZ25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JG
dW5jdGlvbihyZXR1cm5UeXBlcywgYXJndW1lbnRUeXBlcyk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVN0cnVjdFR5cGUodWludDMyX3QgcG9zaXRpb24s
IFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4mIHN0cnVjdFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sK
KyAgICBBU1NFUlQoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlHQygpKTsKKworICAgIHVpbnQzMl90
IGZpZWxkQ291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmll
bGRDb3VudCksICJjYW4ndCBnZXQgIiwgcG9zaXRpb24sICJ0aCBzdHJ1Y3QgdHlwZSdzIGZpZWxk
IGNvdW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmaWVsZENvdW50ID4gbWF4U3RydWN0
RmllbGRDb3VudCwgIm51bWJlciBvZiBmaWVsZHMgZm9yIHN0cnVjdCB0eXBlIGF0IHBvc2l0aW9u
ICIsIHBvc2l0aW9uLCAiIGlzIHRvbyBiaWcgIiwgZmllbGRDb3VudCwgIiBtYXhpbXVtICIsIG1h
eFN0cnVjdEZpZWxkQ291bnQpOworICAgIFZlY3RvcjxTdHJ1Y3RGaWVsZD4gZmllbGRzOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoIWZpZWxkcy50cnlSZXNlcnZlQ2FwYWNpdHkoZmllbGRDb3Vu
dCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBzdHJ1Y3QgZmllbGRzICIsIGZp
ZWxkQ291bnQsICIgZW50cmllcyIpOworCisgICAgZm9yICh1aW50MzJfdCBmaWVsZEluZGV4ID0g
MDsgZmllbGRJbmRleCA8IGZpZWxkQ291bnQ7ICsrZmllbGRJbmRleCkgeworICAgICAgICBUeXBl
IGZpZWxkVHlwZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUo
bV9pbmZvLCBmaWVsZFR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGZpZWxkSW5kZXgsICJ0aCBmaWVsZCBU
eXBlIik7CisKKyAgICAgICAgdWludDhfdCBtdXRhYmlsaXR5OworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVVJbnQ4KG11dGFiaWxpdHkpLCBwb3NpdGlvbiwgImNhbid0IGdldCAi
LCBmaWVsZEluZGV4LCAidGggZmllbGQgbXV0YWJpbGl0eSIpOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKG11dGFiaWxpdHkgIT0gMHgwICYmIG11dGFiaWxpdHkgIT0gMHgxLCAiaW52YWxp
ZCBGaWVsZCdzIG11dGFiaWxpdHk6IDB4IiwgaGV4KG11dGFiaWxpdHksIDIsIExvd2VyY2FzZSkp
OworCisgICAgICAgIGZpZWxkcy51bmNoZWNrZWRBcHBlbmQoU3RydWN0RmllbGQgeyBmaWVsZFR5
cGUsIHN0YXRpY19jYXN0PE11dGFiaWxpdHk+KG11dGFiaWxpdHkpIH0pOworICAgIH0KKworICAg
IHN0cnVjdFR5cGUgPSBUeXBlSW5mb3JtYXRpb246OnR5cGVEZWZpbml0aW9uRm9yU3RydWN0KGZp
ZWxkcyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUkz
MkluaXRFeHByRm9yRWxlbWVudFNlY3Rpb24oc3RkOjpvcHRpb25hbDxJMzJJbml0RXhwcj4mIGlu
aXRFeHByKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgcmV0dXJuIHBhcnNlSTMySW5pdEV4cHIo
aW5pdEV4cHIsICJFbGVtZW50IGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIl9zKTsKQEAg
LTc1OSw3ICs4MDIsNyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsVHlwZShHbG9i
YWxJbmZvcm1hdGlvbiYgZ2xvYmFsKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYWx1ZVR5cGUobV9pbmZvLCBnbG9iYWwudHlwZSksICJjYW4ndCBnZXQg
R2xvYmFsJ3MgdmFsdWUgdHlwZSIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUlu
dDgobXV0YWJpbGl0eSksICJjYW4ndCBnZXQgR2xvYmFsIHR5cGUncyBtdXRhYmlsaXR5Iik7CiAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtdXRhYmlsaXR5ICE9IDB4MCAmJiBtdXRhYmlsaXR5ICE9
IDB4MSwgImludmFsaWQgR2xvYmFsJ3MgbXV0YWJpbGl0eTogMHgiLCBoZXgobXV0YWJpbGl0eSwg
MiwgTG93ZXJjYXNlKSk7Ci0gICAgZ2xvYmFsLm11dGFiaWxpdHkgPSBzdGF0aWNfY2FzdDxHbG9i
YWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eT4obXV0YWJpbGl0eSk7CisgICAgZ2xvYmFsLm11dGFi
aWxpdHkgPSBzdGF0aWNfY2FzdDxNdXRhYmlsaXR5PihtdXRhYmlsaXR5KTsKICAgICByZXR1cm4g
eyB9OwogfQogCkBAIC04NTksNyArOTAyLDcgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUV4
Y2VwdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICB1aW50MzJfdCBleGNlcHRpb25Db3VudDsK
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleGNlcHRpb25Db3VudCks
ICJjYW4ndCBnZXQgRXhjZXB0aW9uIHNlY3Rpb24ncyBjb3VudCIpOwogICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoZXhjZXB0aW9uQ291bnQgPiBtYXhFeGNlcHRpb25zLCAiRXhwb3J0IHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGV4Y2VwdGlvbkNvdW50LCAiIG1heGltdW0gIiwgbWF4RXhj
ZXB0aW9ucyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbnRlcm5hbEV4Y2Vw
dGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvbkNvdW50KSwg
ImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGV4Y2VwdGlvbkNvdW50LCAiIGV4
Y2VwdGlvbnMiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRXhj
ZXB0aW9uVHlwZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvbkNvdW50KSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGV4Y2VwdGlvbkNvdW50LCAiIGV4Y2Vw
dGlvbnMiKTsKIAogICAgIGZvciAodWludDMyX3QgZXhjZXB0aW9uTnVtYmVyID0gMDsgZXhjZXB0
aW9uTnVtYmVyIDwgZXhjZXB0aW9uQ291bnQ7ICsrZXhjZXB0aW9uTnVtYmVyKSB7CiAgICAgICAg
IHVpbnQ4X3QgdGFnVHlwZTsKQEAgLTg2OCw5ICs5MTEsOSBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6
OnBhcnNlRXhjZXB0aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgICAgIHVpbnQzMl90IHR5
cGVOdW1iZXI7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHR5
cGVOdW1iZXIpLCAiY2FuJ3QgZ2V0ICIsIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbidz
IHR5cGUgbnVtYmVyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZU51bWJlciA+
PSBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhj
ZXB0aW9uIHR5cGUgbnVtYmVyIGlzIGludmFsaWQgIiwgdHlwZU51bWJlcik7Ci0gICAgICAgIFNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldCht
X2luZm8tPnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAgbV9pbmZvLT5pbnRl
cm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUlu
ZGV4KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+
dHlwZUNvdW50KCksIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbiB0eXBlIG51bWJlciBp
cyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOworICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0g
VHlwZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT50eXBlU2lnbmF0dXJlc1t0eXBlTnVtYmVyXSk7
CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxFeGNlcHRpb25UeXBlSW5kaWNlcy51bmNoZWNrZWRB
cHBlbmQodHlwZUluZGV4KTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmgKaW5kZXggOTFmZDNlZDgzNDIy
NWM4MTNlMmQwMTM5MmI0OWU4ZDljM2JlMmI4Ny4uOTU2YTUwMjg3Y2I5MjYzZDI5OGVmOTE2YjYz
ZWRkZDg4YmQ1Y2RmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNlY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2Vj
dGlvblBhcnNlci5oCkBAIC02OSw2ICs2OSw5IEBAIHByaXZhdGU6CiAgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50OF90JiwgdWludDY0X3QmLCBU
eXBlJiBpbml0RXhwclR5cGUpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IHBhcnNlSTMySW5pdEV4cHIoc3RkOjpvcHRpb25hbDxJMzJJbml0RXhwcj4mLCBBU0NJSUxpdGVy
YWwgZmFpbE1lc3NhZ2UpOwogCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
cGFyc2VGdW5jdGlvblR5cGUodWludDMyX3QgcG9zaXRpb24sIFJlZlB0cjxUeXBlRGVmaW5pdGlv
bj4mKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVN0cnVjdFR5
cGUodWludDMyX3QgcG9zaXRpb24sIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4mKTsKKwogICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHZhbGlkYXRlRWxlbWVudFRhYmxlSWR4KHVp
bnQzMl90KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUkzMklu
aXRFeHByRm9yRWxlbWVudFNlY3Rpb24oc3RkOjpvcHRpb25hbDxJMzJJbml0RXhwcj4mKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUVsZW1lbnRLaW5kKHVpbnQ4
X3QmIGVsZW1lbnRLaW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TaWduYXR1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25h
dHVyZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YTU2MWI4NTBmYzVjMTkz
OWQwZWY1OWU4YTlmZDJiNjA1OTc4ZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldhc21TaWduYXR1cmUuaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1
ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5o
PgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50
U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7Ci0KLVNpZ25hdHVy
ZUluZm9ybWF0aW9uKiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6dGhlT25lIHsgbnVsbHB0ciB9Owot
c3RkOjpvbmNlX2ZsYWcgU2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUluZm9ybWF0aW9u
RmxhZzsKLQotU3RyaW5nIFNpZ25hdHVyZTo6dG9TdHJpbmcoKSBjb25zdAotewotICAgIHJldHVy
biBXVEY6OnRvU3RyaW5nKCp0aGlzKTsKLX0KLQotdm9pZCBTaWduYXR1cmU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICB7Ci0gICAgICAgIG91dC5wcmludCgiKCIpOwotICAg
ICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAgIGZvciAoU2lnbmF0dXJlQXJnQ291bnQg
YXJnID0gMDsgYXJnIDwgYXJndW1lbnRDb3VudCgpOyArK2FyZykKLSAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgbWFrZVN0cmluZyhhcmd1bWVudChhcmcpLmtpbmQpKTsKLSAgICAgICAgb3V0
LnByaW50KCIpIik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7
Ci0gICAgICAgIG91dC5wcmludCgiIC0+IFsiKTsKLSAgICAgICAgZm9yIChTaWduYXR1cmVBcmdD
b3VudCByZXQgPSAwOyByZXQgPCByZXR1cm5Db3VudCgpOyArK3JldCkKLSAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgbWFrZVN0cmluZyhyZXR1cm5UeXBlKHJldCkua2luZCkpOwotICAgICAg
ICBvdXQucHJpbnQoIl0iKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFz
aChzaXplX3QgcmV0dXJuQ291bnQsIGNvbnN0IFR5cGUqIHJldHVyblR5cGVzLCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgVHlwZSogYXJndW1lbnRUeXBlcykKLXsKLSAgICB1bnNpZ25lZCBh
Y2N1bXVsYXRvciA9IDB4YTFiY2VkZDh1OwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBh
cmd1bWVudENvdW50OyArK2kpIHsKLSAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRI
YXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8
dWludDhfdD4oYXJndW1lbnRUeXBlc1tpXS5raW5kKSkpOwotICAgICAgICBhY2N1bXVsYXRvciA9
IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFz
aChzdGF0aWNfY2FzdDx1aW50OF90Pihhcmd1bWVudFR5cGVzW2ldLm51bGxhYmxlKSkpOwotICAg
ICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50
SGFzaDx1bnNpZ25lZD46Omhhc2goYXJndW1lbnRUeXBlc1tpXS5pbmRleCkpOwotICAgIH0KLSAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcmV0dXJuQ291bnQ7ICsraSkgewotICAgICAgICBh
Y2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1
aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihyZXR1cm5UeXBlc1tpXS5raW5kKSkp
OwotICAgICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdU
Rjo6SW50SGFzaDx1aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihyZXR1cm5UeXBl
c1tpXS5udWxsYWJsZSkpKTsKLSAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNo
KGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+OjpoYXNoKHJldHVyblR5cGVzW2ld
LmluZGV4KSk7Ci0gICAgfQotICAgIHJldHVybiBhY2N1bXVsYXRvcjsKLX0KLQotdW5zaWduZWQg
U2lnbmF0dXJlOjpoYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcHV0ZUhhc2gocmV0dXJu
Q291bnQoKSwgc3RvcmFnZSgwKSwgYXJndW1lbnRDb3VudCgpLCBzdG9yYWdlKHJldHVybkNvdW50
KCkpKTsKLX0KLQotUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJlOjp0cnlDcmVhdGUoU2lnbmF0
dXJlQXJnQ291bnQgcmV0dXJuQ291bnQsIFNpZ25hdHVyZUFyZ0NvdW50IGFyZ3VtZW50Q291bnQp
Ci17Ci0gICAgLy8gV2UgdXNlIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIGZvciB0aGlzIGNsYXNz
LgotICAgIGF1dG8gcmVzdWx0ID0gdHJ5RmFzdE1hbGxvYyhhbGxvY2F0ZWRTaXplKHJldHVybkNv
dW50LCBhcmd1bWVudENvdW50KSk7Ci0gICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKLSAgICBp
ZiAoIXJlc3VsdC5nZXRWYWx1ZShtZW1vcnkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG5ldyAoTm90TnVsbCwgbWVtb3J5KSBTaWduYXR1cmUo
cmV0dXJuQ291bnQsIGFyZ3VtZW50Q291bnQpOwotICAgIHJldHVybiBhZG9wdFJlZihzaWduYXR1
cmUpOwotfQotCi1TaWduYXR1cmVJbmZvcm1hdGlvbjo6U2lnbmF0dXJlSW5mb3JtYXRpb24oKQot
ewotI2RlZmluZSBNQUtFX1RIVU5LX1NJR05BVFVSRSh0eXBlLCBlbmMsIHN0ciwgdmFsLCBfKSAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAo
VHlwZUtpbmQ6OnR5cGUgIT0gVHlwZUtpbmQ6OlZvaWQpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnID0gU2lnbmF0dXJlOjp0
cnlDcmVhdGUoMSwgMCk7ICAgICAgICAgICAgXAotICAgICAgICAgICAgc2lnLT5yZWYoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgc2lnLT5nZXRSZXR1cm5UeXBlKDApID0gVHlwZXM6OnR5cGU7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgdGh1bmtTaWduYXR1cmVzW2xpbmVhcml6ZVR5cGUo
VHlwZUtpbmQ6OnR5cGUpXSA9IHNpZy5nZXQoKTsgICAgXAotICAgICAgICAgICAgbV9zaWduYXR1
cmVTZXQuYWRkKFNpZ25hdHVyZUhhc2ggeyBzaWcucmVsZWFzZU5vbk51bGwoKSB9KTsgICAgXAot
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKTsKLQotICAgIEZPUl9FQUNI
X1dBU01fVFlQRShNQUtFX1RIVU5LX1NJR05BVFVSRSk7Ci0KLSAgICAvLyBNYWtlIFZvaWQgYWdh
aW4gYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlIG9uZSB0aGF0IGhhcyB2b2lkIGluIGl0LgotICAg
IHsKLSAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnID0gU2lnbmF0dXJlOjp0cnlDcmVhdGUo
MCwgMCk7Ci0gICAgICAgIHNpZy0+cmVmKCk7Ci0gICAgICAgIHRodW5rU2lnbmF0dXJlc1tsaW5l
YXJpemVUeXBlKFR5cGVLaW5kOjpWb2lkKV0gPSBzaWcuZ2V0KCk7Ci0gICAgICAgIG1fc2lnbmF0
dXJlU2V0LmFkZChTaWduYXR1cmVIYXNoIHsgc2lnLnJlbGVhc2VOb25OdWxsKCkgfSk7Ci0gICAg
fQotfQotCi0KLQotc3RydWN0IFBhcmFtZXRlclR5cGVzIHsKLSAgICBjb25zdCBWZWN0b3I8VHlw
ZSwgMT4mIHJldHVyblR5cGVzOwotICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRUeXBl
czsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFBhcmFtZXRlclR5cGVzJiBwYXJh
bXMpCi0gICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2gocGFyYW1zLnJldHVyblR5cGVz
LnNpemUoKSwgcGFyYW1zLnJldHVyblR5cGVzLmRhdGEoKSwgcGFyYW1zLmFyZ3VtZW50VHlwZXMu
c2l6ZSgpLCBwYXJhbXMuYXJndW1lbnRUeXBlcy5kYXRhKCkpOwotICAgIH0KLQotICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFNpZ25hdHVyZUhhc2gmIHNpZywgY29uc3QgUGFyYW1ldGVyVHlw
ZXMmIHBhcmFtcykKLSAgICB7Ci0gICAgICAgIGlmIChzaWcua2V5LT5hcmd1bWVudENvdW50KCkg
IT0gcGFyYW1zLmFyZ3VtZW50VHlwZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoc2lnLmtleS0+cmV0dXJuQ291bnQoKSAhPSBwYXJhbXMucmV0dXJuVHlw
ZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWcua2V5LT5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAg
ICAgICAgaWYgKHNpZy5rZXktPmFyZ3VtZW50KGkpICE9IHBhcmFtcy5hcmd1bWVudFR5cGVzW2ld
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWcua2V5LT5yZXR1cm5Db3VudCgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmIChzaWcua2V5LT5yZXR1cm5UeXBlKGkpICE9IHBhcmFtcy5yZXR1cm5UeXBl
c1tpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFNpZ25hdHVy
ZUhhc2gmIGVudHJ5LCBjb25zdCBQYXJhbWV0ZXJUeXBlcyYgcGFyYW1zLCB1bnNpZ25lZCkKLSAg
ICB7Ci0gICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IHNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5
Q3JlYXRlKHBhcmFtcy5yZXR1cm5UeXBlcy5zaXplKCksIHBhcmFtcy5hcmd1bWVudFR5cGVzLnNp
emUoKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHNpZ25hdHVyZSk7Ci0KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtcy5yZXR1cm5UeXBlcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIHNpZ25hdHVyZS0+Z2V0UmV0dXJuVHlwZShpKSA9IHBhcmFtcy5yZXR1cm5UeXBl
c1tpXTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1zLmFyZ3VtZW50
VHlwZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBzaWduYXR1cmUtPmdldEFyZ3VtZW50KGkp
ID0gcGFyYW1zLmFyZ3VtZW50VHlwZXNbaV07Ci0KLSAgICAgICAgZW50cnkua2V5ID0gV1RGTW92
ZShzaWduYXR1cmUpOwotICAgIH0KLX07Ci0KLVJlZlB0cjxTaWduYXR1cmU+IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpzaWduYXR1cmVGb3IoY29uc3QgVmVjdG9yPFR5cGUsIDE+JiByZXN1bHRzLCBj
b25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCi17Ci0gICAgaWYgY29uc3RleHByIChBU1NFUlRfRU5B
QkxFRCkgewotICAgICAgICBBU1NFUlQoIXJlc3VsdHMuY29udGFpbnMoV2FzbTo6VHlwZXM6OlZv
aWQpKTsKLSAgICAgICAgQVNTRVJUKCFhcmdzLmNvbnRhaW5zKFdhc206OlR5cGVzOjpWb2lkKSk7
Ci0gICAgfQotICAgIFNpZ25hdHVyZUluZm9ybWF0aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7Ci0g
ICAgTG9ja2VyIGxvY2tlciB7IGluZm8ubV9sb2NrIH07Ci0KLSAgICBhdXRvIGFkZFJlc3VsdCA9
IGluZm8ubV9zaWduYXR1cmVTZXQudGVtcGxhdGUgYWRkPFBhcmFtZXRlclR5cGVzPihQYXJhbWV0
ZXJUeXBlcyB7IHJlc3VsdHMsIGFyZ3MgfSk7Ci0gICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRv
ci0+a2V5OwotfQotCi12b2lkIFNpZ25hdHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKCkKLXsK
LSAgICBTaWduYXR1cmVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRvbigpOwotICAgIExvY2tl
ciBsb2NrZXIgeyBpbmZvLm1fbG9jayB9OwotCi0gICAgaW5mby5tX3NpZ25hdHVyZVNldC5yZW1v
dmVJZihbJl0gKGF1dG8mIGhhc2gpIHsKLSAgICAgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0g
aGFzaC5rZXk7Ci0gICAgICAgIHJldHVybiBzaWduYXR1cmUtPnJlZkNvdW50KCkgPT0gMTsKLSAg
ICB9KTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TaWduYXR1cmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FjZTlhZmIxNzU3ODk2NjM4MmE3MGI5
NTBlY2IzOGI5ZjQ3MDZmNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCi0KLSNpbmNsdWRlICJXYXNtT3BzLmgiCi0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1l
dGljLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0
cy5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSBXYXNtIHsKLQotdXNpbmcg
U2lnbmF0dXJlQXJnQ291bnQgPSB1aW50MzJfdDsKLQotY2xhc3MgU2lnbmF0dXJlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFNpZ25hdHVyZT4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotCi0gICAgU2lnbmF0dXJlKCkgPSBkZWxldGU7Ci0gICAgU2lnbmF0dXJlKGNvbnN0
IFNpZ25hdHVyZSYpID0gZGVsZXRlOwotICAgIFNpZ25hdHVyZShTaWduYXR1cmVBcmdDb3VudCBy
ZXRDb3VudCwgU2lnbmF0dXJlQXJnQ291bnQgYXJnQ291bnQpCi0gICAgICAgIDogbV9yZXRDb3Vu
dChyZXRDb3VudCkKLSAgICAgICAgLCBtX2FyZ0NvdW50KGFyZ0NvdW50KQotICAgIHsKLSAgICB9
Ci0KLSAgICBUeXBlKiBzdG9yYWdlKFNpZ25hdHVyZUFyZ0NvdW50IGkpCi0gICAgewotICAgICAg
ICByZXR1cm4gaSArIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHRoaXMpICsgc2l6ZW9mKFNpZ25hdHVyZSkpOwotICAgIH0KLSAgICBUeXBlKiBzdG9yYWdl
KFNpZ25hdHVyZUFyZ0NvdW50IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U2lnbmF0dXJl
Kj4odGhpcyktPnN0b3JhZ2UoaSk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRlZFNpemUo
Q2hlY2tlZDxTaWduYXR1cmVBcmdDb3VudD4gcmV0Q291bnQsIENoZWNrZWQ8U2lnbmF0dXJlQXJn
Q291bnQ+IGFyZ0NvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNpemVvZihTaWduYXR1cmUp
ICsgKHJldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9mKFR5cGUpOwotICAgIH0KLQotcHVibGlj
OgotICAgIFNpZ25hdHVyZUFyZ0NvdW50IHJldHVybkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9y
ZXRDb3VudDsgfQotICAgIFNpZ25hdHVyZUFyZ0NvdW50IGFyZ3VtZW50Q291bnQoKSBjb25zdCB7
IHJldHVybiBtX2FyZ0NvdW50OyB9Ci0KLSAgICBUeXBlIHJldHVyblR5cGUoU2lnbmF0dXJlQXJn
Q291bnQgaSkgY29uc3QgeyBBU1NFUlQoaSA8IHJldHVybkNvdW50KCkpOyByZXR1cm4gY29uc3Rf
Y2FzdDxTaWduYXR1cmUqPih0aGlzKS0+Z2V0UmV0dXJuVHlwZShpKTsgfQotICAgIGJvb2wgcmV0
dXJuc1ZvaWQoKSBjb25zdCB7IHJldHVybiAhcmV0dXJuQ291bnQoKTsgfQotICAgIFR5cGUgYXJn
dW1lbnQoU2lnbmF0dXJlQXJnQ291bnQgaSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxTaWdu
YXR1cmUqPih0aGlzKS0+Z2V0QXJndW1lbnQoaSk7IH0KLSAgICBTaWduYXR1cmVJbmRleCBpbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxTaWduYXR1cmVJbmRleD4odGhpcyk7IH0K
LQotICAgIFdURjo6U3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBkdW1wKFdURjo6
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpZ25h
dHVyZSYgcmhzKSBjb25zdCB7IHJldHVybiB0aGlzID09ICZyaHM7IH0KLSAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3Q7Ci0KLSAgICAvLyBTaWduYXR1cmVzIGFyZSB1bmlxdWVkIGFuZCwgZm9yIGNh
bGxfaW5kaXJlY3QsIHZhbGlkYXRlZCBhdCBydW50aW1lLiBUYWJsZXMgY2FuIGNyZWF0ZSBpbnZh
bGlkIFNpZ25hdHVyZUluZGV4IHZhbHVlcyB3aGljaCBjYXVzZSBjYWxsX2luZGlyZWN0IHRvIGZh
aWwuIFdlIHVzZSAwIGFzIHRoZSBpbnZhbGlkSW5kZXggc28gdGhhdCB0aGUgY29kZWdlbiBjYW4g
ZWFzaWx5IHRlc3QgZm9yIGl0IGFuZCB0cmFwLCBhbmQgd2UgYWRkIGEgdG9rZW4gaW52YWxpZCBl
bnRyeSBpbiBTaWduYXR1cmVJbmZvcm1hdGlvbi4KLSAgICBzdGF0aWMgY29uc3QgY29uc3RleHBy
IFNpZ25hdHVyZUluZGV4IGludmFsaWRJbmRleCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uOwotICAgIGZyaWVuZCBzdHJ1Y3QgUGFyYW1ldGVy
VHlwZXM7Ci0KLSAgICBzdGF0aWMgUmVmUHRyPFNpZ25hdHVyZT4gdHJ5Q3JlYXRlKFNpZ25hdHVy
ZUFyZ0NvdW50IHJldHVybkNvdW50LCBTaWduYXR1cmVBcmdDb3VudCBhcmd1bWVudENvdW50KTsK
LSAgICBUeXBlJiBnZXRSZXR1cm5UeXBlKFNpZ25hdHVyZUFyZ0NvdW50IGkpIHsgQVNTRVJUKGkg
PCByZXR1cm5Db3VudCgpKTsgcmV0dXJuICpzdG9yYWdlKGkpOyB9Ci0gICAgVHlwZSYgZ2V0QXJn
dW1lbnQoU2lnbmF0dXJlQXJnQ291bnQgaSkgeyBBU1NFUlQoaSA8IGFyZ3VtZW50Q291bnQoKSk7
IHJldHVybiAqc3RvcmFnZShyZXR1cm5Db3VudCgpICsgaSk7IH0KLQotICAgIFNpZ25hdHVyZUFy
Z0NvdW50IG1fcmV0Q291bnQ7Ci0gICAgU2lnbmF0dXJlQXJnQ291bnQgbV9hcmdDb3VudDsKLSAg
ICAvLyBSZXR1cm4gVHlwZSBhbmQgYXJndW1lbnRzIGFyZSBzdG9yZWQgaGVyZS4KLX07Ci0KLXN0
cnVjdCBTaWduYXR1cmVIYXNoIHsKLSAgICBSZWZQdHI8U2lnbmF0dXJlPiBrZXkgeyBudWxscHRy
IH07Ci0gICAgU2lnbmF0dXJlSGFzaCgpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaWduYXR1
cmVIYXNoKFJlZjxTaWduYXR1cmU+JiYga2V5KQotICAgICAgICA6IGtleShXVEZNb3ZlKGtleSkp
Ci0gICAgeyB9Ci0gICAgZXhwbGljaXQgU2lnbmF0dXJlSGFzaChXVEY6Okhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDoga2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQot
ICAgIHsgfQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaWduYXR1cmVIYXNoJiByaHMpIGNv
bnN0IHsgcmV0dXJuIGVxdWFsKCp0aGlzLCByaHMpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgU2lnbmF0dXJlSGFzaCYgbGhzLCBjb25zdCBTaWduYXR1cmVIYXNoJiByaHMpIHsgcmV0
dXJuIGxocy5rZXkgPT0gcmhzLmtleTsgfQotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFNpZ25hdHVyZUhhc2gmIHNpZ25hdHVyZSkgeyByZXR1cm4gc2lnbmF0dXJlLmtleSA/IHNpZ25h
dHVyZS5rZXktPmhhc2goKSA6IDA7IH0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKLSAgICBib29sIGlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4ga2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7
IH0KLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLQotbmFtZXNwYWNlIFdURiB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPEpTQzo6V2FzbTo6U2lnbmF0dXJlSGFzaD4gOiBKU0M6Oldhc206
OlNpZ25hdHVyZUhhc2ggeyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRy
YWl0czsKLXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpXYXNtOjpTaWduYXR1cmVI
YXNoPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Oldhc206OlNpZ25hdHVyZUhhc2g+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXVEYKLQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewotCi0vLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVk
IGJ5IHRoZSBlbnRpcmUgcHJvY2VzcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlx
dWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5j
ZSwgYW5kIG11c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxl
IFZNcy4KLWNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTaWduYXR1cmVJbmZvcm1hdGlvbik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0KLSAgICBTaWduYXR1cmVJbmZvcm1hdGlvbigpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFNp
Z25hdHVyZUluZm9ybWF0aW9uJiBzaW5nbGV0b24oKTsKLQotICAgIHN0YXRpYyBSZWZQdHI8U2ln
bmF0dXJlPiBzaWduYXR1cmVGb3IoY29uc3QgVmVjdG9yPFR5cGUsIDE+JiByZXR1cm5UeXBlcywg
Y29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudFR5cGVzKTsKLSAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IFNpZ25hdHVyZSogdGh1bmtGb3IoVHlwZSB0eXBlKSBjb25zdCB7IHJldHVybiB0aHVua1Np
Z25hdHVyZXNbbGluZWFyaXplVHlwZSh0eXBlLmtpbmQpXTsgfQotCi0gICAgc3RhdGljIGNvbnN0
IFNpZ25hdHVyZSYgZ2V0KFNpZ25hdHVyZUluZGV4KTsKLSAgICBzdGF0aWMgU2lnbmF0dXJlSW5k
ZXggZ2V0KGNvbnN0IFNpZ25hdHVyZSYpOwotICAgIHN0YXRpYyB2b2lkIHRyeUNsZWFudXAoKTsK
LQotcHJpdmF0ZToKLSAgICBIYXNoU2V0PFdhc206OlNpZ25hdHVyZUhhc2g+IG1fc2lnbmF0dXJl
U2V0OwotICAgIGNvbnN0IFNpZ25hdHVyZSogdGh1bmtTaWduYXR1cmVzW251bVR5cGVzXTsKLSAg
ICBMb2NrIG1fbG9jazsKLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTaWduYXR1cmVJ
bmZvcm1hdGlvbiogdGhlT25lOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBzaWduYXR1cmVJbmZvcm1hdGlvbkZsYWc7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZUlubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmVJbmxpbmVzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDhjNjk4NmRmZjZjNWI1NDIzMTNmMjU4MTU4OWFkOTI1ZjgwZDZl
NTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZUlubGluZXMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1
enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKLQotI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKLQotaW5saW5lIFNpZ25hdHVyZUluZm9ybWF0aW9uJiBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGQ6OmNhbGxfb25jZShzaWduYXR1cmVJ
bmZvcm1hdGlvbkZsYWcsIFtdICgpIHsKLSAgICAgICAgdGhlT25lID0gbmV3IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOwotICAgIH0pOwotICAgIHJldHVybiAqdGhlT25lOwotfQotCi1pbmxpbmUgY29u
c3QgU2lnbmF0dXJlJiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KFNpZ25hdHVyZUluZGV4IGlu
ZGV4KQotewotICAgIEFTU0VSVChpbmRleCAhPSBTaWduYXR1cmU6OmludmFsaWRJbmRleCk7Ci0g
ICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Y29uc3QgU2lnbmF0dXJlKj4oaW5kZXgpOwotfQotCi1p
bmxpbmUgU2lnbmF0dXJlSW5kZXggU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSkKLXsKLSAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAg
U2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24oKTsKLSAgICAgICAgTG9ja2Vy
IGxvY2tlciB7IGluZm8ubV9sb2NrIH07Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoaW5mbywgaW5m
by5tX3NpZ25hdHVyZVNldC5jb250YWlucyhTaWduYXR1cmVIYXNoIHsgY29uc3RfY2FzdDxTaWdu
YXR1cmUmPihzaWduYXR1cmUpIH0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxT
aWduYXR1cmVJbmRleD4oJnNpZ25hdHVyZSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDJhODY3ZDZjNzNmZGVmM2U5MTg3MDZh
M2YwNzJjMGQ1ODI5OTNjZDcuLmM1MTFjYjNmMjliNjFjMTJjZGQ3YTVjNTc1MmIwYTFmMWFlN2U0
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCkBA
IC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKICNpbmNsdWRlICJXYXNt
T1NSRW50cnlQbGFuLmgiCiAjaW5jbHVkZSAiV2FzbU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJX
YXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGlu
ZXMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1
bmN0aW9uLmgiCiAKQEAgLTQ4Niw3ICs0ODYsNyBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKGNhbGxf
bm9fdGxzKQogICAgIHJldHVybiBkb1dhc21DYWxsKGluc3RhbmNlLCBpbnN0cnVjdGlvbi5tX2Z1
bmN0aW9uSW5kZXgpOwogfQogCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRvV2FzbUNhbGxJ
bmRpcmVjdChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1bnNpZ25lZCBzaWdu
YXR1cmVJbmRleCkKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2FsbEluZGlyZWN0
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVuc2lnbmVkIHR5cGVJbmRleCkK
IHsKICAgICBXYXNtOjpGdW5jUmVmVGFibGUqIHRhYmxlID0gaW5zdGFuY2UtPnRhYmxlKHRhYmxl
SW5kZXgpLT5hc0Z1bmNyZWZUYWJsZSgpOwogCkBAIC00OTYsMTEgKzQ5NiwxMSBAQCBpbmxpbmUg
U2xvd1BhdGhSZXR1cm5UeXBlIGRvV2FzbUNhbGxJbmRpcmVjdChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgV2FzbTo6SW5zdGFuYwogICAgIFdhc206Okluc3RhbmNlKiB0YXJnZXRJbnN0YW5jZSA9IHRh
YmxlLT5pbnN0YW5jZShmdW5jdGlvbkluZGV4KTsKICAgICBjb25zdCBXYXNtOjpXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uJiBmdW5jdGlvbiA9IHRhYmxlLT5mdW5jdGlvbihmdW5jdGlvbklu
ZGV4KTsKIAotICAgIGlmIChmdW5jdGlvbi5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1
cmU6OmludmFsaWRJbmRleCkKKyAgICBpZiAoZnVuY3Rpb24udHlwZUluZGV4ID09IFdhc206OlR5
cGVEZWZpbml0aW9uOjppbnZhbGlkSW5kZXgpCiAgICAgICAgIFdBU01fVEhST1coV2FzbTo6RXhj
ZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkpOwogCi0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJl
JiBjYWxsU2lnbmF0dXJlID0gQ0FMTEVFKCktPnNpZ25hdHVyZShzaWduYXR1cmVJbmRleCk7Ci0g
ICAgaWYgKGZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4ICE9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoY2FsbFNpZ25hdHVyZSkpCisgICAgY29uc3QgYXV0byYgY2FsbFNpZ25hdHVyZSA9
IENBTExFRSgpLT5zaWduYXR1cmUodHlwZUluZGV4KTsKKyAgICBpZiAoZnVuY3Rpb24udHlwZUlu
ZGV4ICE9IFdhc206OlR5cGVJbmZvcm1hdGlvbjo6Z2V0KGNhbGxTaWduYXR1cmUpKQogICAgICAg
ICBXQVNNX1RIUk9XKFdhc206OkV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7CiAKICAgICBp
ZiAodGFyZ2V0SW5zdGFuY2UgIT0gaW5zdGFuY2UpCkBAIC01MTMsMTcgKzUxMywxNyBAQCBXQVNN
X1NMT1dfUEFUSF9ERUNMKGNhbGxfaW5kaXJlY3QpCiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9
IHBjLT5hczxXYXNtQ2FsbEluZGlyZWN0PigpOwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgg
PSBSRUFEKGluc3RydWN0aW9uLm1fZnVuY3Rpb25JbmRleCkudW5ib3hlZEludDMyKCk7Ci0gICAg
cmV0dXJuIGRvV2FzbUNhbGxJbmRpcmVjdChjYWxsRnJhbWUsIGluc3RhbmNlLCBmdW5jdGlvbklu
ZGV4LCBpbnN0cnVjdGlvbi5tX3RhYmxlSW5kZXgsIGluc3RydWN0aW9uLm1fc2lnbmF0dXJlSW5k
ZXgpOworICAgIHJldHVybiBkb1dhc21DYWxsSW5kaXJlY3QoY2FsbEZyYW1lLCBpbnN0YW5jZSwg
ZnVuY3Rpb25JbmRleCwgaW5zdHJ1Y3Rpb24ubV90YWJsZUluZGV4LCBpbnN0cnVjdGlvbi5tX3R5
cGVJbmRleCk7CiB9CiAKIFdBU01fU0xPV19QQVRIX0RFQ0woY2FsbF9pbmRpcmVjdF9ub190bHMp
CiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5hczxXYXNtQ2FsbEluZGlyZWN0Tm9UbHM+
KCk7CiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IFJFQUQoaW5zdHJ1Y3Rpb24ubV9mdW5j
dGlvbkluZGV4KS51bmJveGVkSW50MzIoKTsKLSAgICByZXR1cm4gZG9XYXNtQ2FsbEluZGlyZWN0
KGNhbGxGcmFtZSwgaW5zdGFuY2UsIGZ1bmN0aW9uSW5kZXgsIGluc3RydWN0aW9uLm1fdGFibGVJ
bmRleCwgaW5zdHJ1Y3Rpb24ubV9zaWduYXR1cmVJbmRleCk7CisgICAgcmV0dXJuIGRvV2FzbUNh
bGxJbmRpcmVjdChjYWxsRnJhbWUsIGluc3RhbmNlLCBmdW5jdGlvbkluZGV4LCBpbnN0cnVjdGlv
bi5tX3RhYmxlSW5kZXgsIGluc3RydWN0aW9uLm1fdHlwZUluZGV4KTsKIH0KIAotaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsUmVmKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNt
OjpJbnN0YW5jZSogY2FsbGVySW5zdGFuY2UsIEpTVmFsdWUgdGFyZ2V0UmVmZXJlbmNlLCB1bnNp
Z25lZCBzaWduYXR1cmVJbmRleCkKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2Fs
bFJlZihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGNhbGxlckluc3RhbmNl
LCBKU1ZhbHVlIHRhcmdldFJlZmVyZW5jZSwgdW5zaWduZWQgdHlwZUluZGV4KQogewogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogCkBAIC01NDEsOCArNTQxLDggQEAgaW5saW5lIFNsb3dQ
YXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsUmVmKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJ
bnN0YW5jZSogY2EKICAgICBpZiAoY2FsbGVlSW5zdGFuY2UgIT0gY2FsbGVySW5zdGFuY2UpCiAg
ICAgICAgIGNhbGxlZUluc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGNhbGxlckluc3RhbmNl
LT5jYWNoZWRTdGFja0xpbWl0KCkpOwogCi0gICAgQVNTRVJUKGZ1bmN0aW9uLnNpZ25hdHVyZUlu
ZGV4ID09IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoQ0FMTEVFKCktPnNpZ25hdHVy
ZShzaWduYXR1cmVJbmRleCkpKTsKLSAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlSW5kZXgpOwor
ICAgIEFTU0VSVChmdW5jdGlvbi50eXBlSW5kZXggPT0gV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpn
ZXQoQ0FMTEVFKCktPnNpZ25hdHVyZSh0eXBlSW5kZXgpKSk7CisgICAgVU5VU0VEX1BBUkFNKHR5
cGVJbmRleCk7CiAgICAgV0FTTV9DQUxMX1JFVFVSTihjYWxsZWVJbnN0YW5jZSwgZnVuY3Rpb24u
ZW50cnlwb2ludExvYWRMb2NhdGlvbi0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVudHJ5UHRy
VGFnKTsKIH0KIApAQCAtNTUwLDE0ICs1NTAsMTQgQEAgV0FTTV9TTE9XX1BBVEhfREVDTChjYWxs
X3JlZikKIHsKICAgICBhdXRvIGluc3RydWN0aW9uID0gcGMtPmFzPFdhc21DYWxsUmVmPigpOwog
ICAgIEpTVmFsdWUgcmVmZXJlbmNlID0gSlNWYWx1ZTo6ZGVjb2RlKFJFQUQoaW5zdHJ1Y3Rpb24u
bV9mdW5jdGlvblJlZmVyZW5jZSkuZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIGRvV2Fz
bUNhbGxSZWYoY2FsbEZyYW1lLCBpbnN0YW5jZSwgcmVmZXJlbmNlLCBpbnN0cnVjdGlvbi5tX3Np
Z25hdHVyZUluZGV4KTsKKyAgICByZXR1cm4gZG9XYXNtQ2FsbFJlZihjYWxsRnJhbWUsIGluc3Rh
bmNlLCByZWZlcmVuY2UsIGluc3RydWN0aW9uLm1fdHlwZUluZGV4KTsKIH0KIAogV0FTTV9TTE9X
X1BBVEhfREVDTChjYWxsX3JlZl9ub190bHMpCiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBj
LT5hczxXYXNtQ2FsbFJlZk5vVGxzPigpOwogICAgIEpTVmFsdWUgcmVmZXJlbmNlID0gSlNWYWx1
ZTo6ZGVjb2RlKFJFQUQoaW5zdHJ1Y3Rpb24ubV9mdW5jdGlvblJlZmVyZW5jZSkuZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgcmV0dXJuIGRvV2FzbUNhbGxSZWYoY2FsbEZyYW1lLCBpbnN0YW5jZSwg
cmVmZXJlbmNlLCBpbnN0cnVjdGlvbi5tX3NpZ25hdHVyZUluZGV4KTsKKyAgICByZXR1cm4gZG9X
YXNtQ2FsbFJlZihjYWxsRnJhbWUsIGluc3RhbmNlLCByZWZlcmVuY2UsIGluc3RydWN0aW9uLm1f
dHlwZUluZGV4KTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChzZXRfZ2xvYmFsX3JlZikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
aW5kZXggZmE1NTJlZmZmMTc0MWVjYjVhNGI2YzJmODlmY2EwOTc1OWVlMzE1ZC4uYTU2YTY4MDA3
ZTYxOTg0ZDU5M2JkNjQ3Y2Q3ZTY1M2JmMWVjY2Y5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKQEAgLTMyLDcgKzMyLDcgQEAK
ICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVBhcnNlci5oIgogI2luY2x1ZGUg
Ildhc21TZWN0aW9uUGFyc2VyLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIK
KyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL1Vu
YWxpZ25lZEFjY2Vzcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BsYW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BsYW4uY3BwCmluZGV4
IDgxMzVhMTFiYjg1NWE0YWRjMWU3YmIyNTRhZmY2OWM5MTAyMjEwOWQuLmNkZjRmZTgwYzQ3YzZl
YzdmZTg5M2JjNTgxMzFkMTY4MzFjNjE5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU3RyZWFtaW5nUGxhbi5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRl
ICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUxMSW50UGxhbi5oIgogI2luY2x1ZGUgIldh
c21OYW1lU2VjdGlvbi5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5j
bHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCmluZGV4IGI1M2M1YTQy
ZmM4NjI3OTQxNzQ0ZTcxZWIxMzVhZTQ2ZGIzODM0YWEuLjA4ODA4NDU2YzQ3NjQxMTI0YzAxNTU0
ZWEyYjdmYWQ5ODlhZTM3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxl
LmNwcApAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgVGFibGU6OmNsZWFyKHVpbnQzMl90IGluZGV4
KQogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3duZXIpOwogICAgIGlmIChhdXRvKiBmdW5jUmVmVGFi
bGUgPSBhc0Z1bmNyZWZUYWJsZSgpKSB7CiAgICAgICAgIGZ1bmNSZWZUYWJsZS0+bV9pbXBvcnRh
YmxlRnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24o
KTsKLSAgICAgICAgQVNTRVJUKGZ1bmNSZWZUYWJsZS0+bV9pbXBvcnRhYmxlRnVuY3Rpb25zLmdl
dCgpW2luZGV4XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRl
eCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAgICBBU1NFUlQo
ZnVuY1JlZlRhYmxlLT5tX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnR5cGVJbmRl
eCA9PSBXYXNtOjpUeXBlRGVmaW5pdGlvbjo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0
aGlzIGluIGNvbXBpbGVkIGNvZGUuCiAgICAgICAgIGZ1bmNSZWZUYWJsZS0+bV9pbnN0YW5jZXMu
Z2V0KClbaW5kZXhdID0gbnVsbHB0cjsKICAgICB9CiAgICAgbV9qc1ZhbHVlcy5nZXQoKVtpbmRl
eF0uc2V0U3RhcnRpbmdWYWx1ZShqc051bGwoKSk7CkBAIC0xOTcsNyArMTk3LDcgQEAgRnVuY1Jl
ZlRhYmxlOjpGdW5jUmVmVGFibGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gbWF4aW11bSkKICAgICBtX2luc3RhbmNlcyA9IE1hbGxvY1B0cjxJbnN0YW5jZSosIFZN
TWFsbG9jPjo6bWFsbG9jKHNpemVvZihJbnN0YW5jZSopICogQ2hlY2tlZDxzaXplX3Q+KGFsbG9j
YXRlZExlbmd0aChtX2xlbmd0aCkpKTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYWxs
b2NhdGVkTGVuZ3RoKG1fbGVuZ3RoKTsgKytpKSB7CiAgICAgICAgIG5ldyAoJm1faW1wb3J0YWJs
ZUZ1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbigpOwotICAg
ICAgICBBU1NFUlQobV9pbXBvcnRhYmxlRnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZUluZGV4
ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGlu
IGNvbXBpbGVkIGNvZGUuCisgICAgICAgIEFTU0VSVChtX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0
KClbaV0udHlwZUluZGV4ID09IFdhc206OlR5cGVEZWZpbml0aW9uOjppbnZhbGlkSW5kZXgpOyAv
LyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KICAgICAgICAgbV9pbnN0YW5jZXMu
Z2V0KClbaV0gPSBudWxscHRyOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWcuaAppbmRleCBiZGZjZmI2ODhlMmQxZTk3OWFkMGNjZjRjMWFhZjA2Zjk5MjQwNTI0Li5mMzZh
ZGE2YTI0ZTE0ZTU4OTczZjdkNmNjZjkwNDRlZDU1YjU0YTdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRhZy5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZp
bml0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTM1LDI1
ICszNSwyNyBAQCBjbGFzcyBUYWcgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
VGFnPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoVGFnKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRhZz4gY3JlYXRlKGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFRhZyhzaWduYXR1cmUp
KTsgfQorICAgIHN0YXRpYyBSZWY8VGFnPiBjcmVhdGUoY29uc3QgVHlwZURlZmluaXRpb24mIHR5
cGUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGFnKHR5cGUpKTsgfQogCi0gICAgU2lnbmF0dXJl
QXJnQ291bnQgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpOyB9Ci0gICAgVHlwZSBwYXJhbWV0ZXIoU2lnbmF0dXJlQXJnQ291bnQgaSkg
Y29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOyB9CisgICAgRnVuY3Rpb25B
cmdDb3VudCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZS0+YXM8RnVuY3Rp
b25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgfQorICAgIFR5cGUgcGFyYW1ldGVyKEZ1
bmN0aW9uQXJnQ291bnQgaSkgY29uc3QgeyByZXR1cm4gbV90eXBlLT5hczxGdW5jdGlvblNpZ25h
dHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpOyB9CisgICAgVHlwZUluZGV4IHR5cGVJbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZS0+aW5kZXgoKTsgfQogCiAgICAgLy8gU2luY2UgKDEpIHdlIGRv
IG5vdCBjb3B5IFdhc206OlRhZyBhbmQgKDIpIHdlIGFsd2F5cyBhbGxvY2F0ZSBXYXNtOjpUYWcg
ZnJvbSBoZWFwLCB3ZSBjYW4gdXNlCiAgICAgLy8gcG9pbnRlciBjb21wYXJpc29uIGZvciBpZGVu
dGl0eSBjaGVjay4KICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gdGhpcyA9PSAmb3RoZXI7IH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGFn
JiBvdGhlcikgY29uc3QgeyByZXR1cm4gdGhpcyAhPSAmb3RoZXI7IH0KIAotICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUuZ2V0KCk7IH0K
KyAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5
cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOyB9CiAKIHByaXZhdGU6Ci0gICAgVGFnKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQotICAgICAgICA6IG1fc2lnbmF0dXJlKFJlZiB7IHNpZ25h
dHVyZSB9KQorICAgIFRhZyhjb25zdCBUeXBlRGVmaW5pdGlvbiYgdHlwZSkKKyAgICAgICAgOiBt
X3R5cGUoUmVmIHsgdHlwZSB9KQogICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUuaXM8RnVuY3Rp
b25TaWduYXR1cmU+KCkpOwogICAgIH0KIAotICAgIFJlZjxjb25zdCBTaWduYXR1cmU+IG1fc2ln
bmF0dXJlOworICAgIFJlZjxjb25zdCBUeXBlRGVmaW5pdGlvbj4gbV90eXBlOwogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UeXBlRGVmaW5pdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVHlwZURlZmluaXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjMzFiYTJmNjM4ZTExMzgyNzNh
NjA1MmVjMDE1OTI0MGQzOTY4ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVHlwZURlZmluaXRpb24uY3BwCkBAIC0wLDAgKzEsMzAxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uLmgiCisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCisj
aW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CisKK1R5cGVJbmZvcm1hdGlvbiogVHlwZUluZm9ybWF0aW9uOjp0aGVP
bmUgeyBudWxscHRyIH07CitzdGQ6Om9uY2VfZmxhZyBUeXBlSW5mb3JtYXRpb246OnR5cGVJbmZv
cm1hdGlvbkZsYWc7CisKK1N0cmluZyBUeXBlRGVmaW5pdGlvbjo6dG9TdHJpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBXVEY6OnRvU3RyaW5nKCp0aGlzKTsKK30KKwordm9pZCBUeXBlRGVmaW5p
dGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpczxGdW5jdGlv
blNpZ25hdHVyZT4oKSkKKyAgICAgICAgcmV0dXJuIGFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5k
dW1wKG91dCk7CisKKyAgICBBU1NFUlQoaXM8U3RydWN0VHlwZT4oKSk7CisgICAgcmV0dXJuIGFz
PFN0cnVjdFR5cGU+KCktPmR1bXAob3V0KTsKK30KKworU3RyaW5nIEZ1bmN0aW9uU2lnbmF0dXJl
Ojp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6dG9TdHJpbmcoKnRoaXMpOwor
fQorCit2b2lkIEZ1bmN0aW9uU2lnbmF0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgeworICAgICAgICBvdXQucHJpbnQoIigiKTsKKyAgICAgICAgQ29tbWFQcmludGVy
IGNvbW1hOworICAgICAgICBmb3IgKEZ1bmN0aW9uQXJnQ291bnQgYXJnID0gMDsgYXJnIDwgYXJn
dW1lbnRDb3VudCgpOyArK2FyZykKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbWFrZVN0
cmluZyhhcmd1bWVudFR5cGUoYXJnKS5raW5kKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBvdXQu
cHJpbnQoIiAtPiBbIik7CisgICAgICAgIGZvciAoRnVuY3Rpb25BcmdDb3VudCByZXQgPSAwOyBy
ZXQgPCByZXR1cm5Db3VudCgpOyArK3JldCkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
bWFrZVN0cmluZyhyZXR1cm5UeXBlKHJldCkua2luZCkpOworICAgICAgICBvdXQucHJpbnQoIl0i
KTsKKyAgICB9Cit9CisKK1N0cmluZyBTdHJ1Y3RUeXBlOjp0b1N0cmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdURjo6dG9TdHJpbmcoKnRoaXMpOworfQorCit2b2lkIFN0cnVjdFR5cGU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBD
b21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChTdHJ1Y3RGaWVsZENvdW50IGZpZWxkSW5kZXgg
PSAwOyBmaWVsZEluZGV4IDwgZmllbGRDb3VudCgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBtYWtlU3RyaW5nKGZpZWxkKGZpZWxkSW5kZXgpLnR5cGUua2luZCkp
OworICAgICAgICBvdXQucHJpbnQoY29tbWEsIGZpZWxkKGZpZWxkSW5kZXgpLm11dGFiaWxpdHkg
PyAiaW1tdXRhYmxlIiA6ICJtdXRhYmxlIik7CisgICAgfQorICAgIG91dC5wcmludCgiKSIpOwor
fQorCitzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVNpZ25hdHVyZUhhc2goc2l6ZV90IHJldHVybkNv
dW50LCBjb25zdCBUeXBlKiByZXR1cm5UeXBlcywgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IFR5cGUqIGFyZ3VtZW50VHlwZXMpCit7CisgICAgdW5zaWduZWQgYWNjdW11bGF0b3IgPSAweGEx
YmNlZGQ4dTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytp
KSB7CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwg
V1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFyZ3VtZW50
VHlwZXNbaV0ua2luZCkpKTsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNo
KGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oYXJndW1lbnRUeXBlc1tpXS5udWxsYWJsZSkpKTsKKyAgICAgICAgYWNjdW11bGF0b3Ig
PSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+Ojpo
YXNoKGFyZ3VtZW50VHlwZXNbaV0uaW5kZXgpKTsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IHJldHVybkNvdW50OyArK2kpIHsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6
OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3Rh
dGljX2Nhc3Q8dWludDhfdD4ocmV0dXJuVHlwZXNbaV0ua2luZCkpKTsKKyAgICAgICAgYWNjdW11
bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhf
dD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4ocmV0dXJuVHlwZXNbaV0ubnVsbGFibGUpKSk7
CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RG
OjpJbnRIYXNoPHVuc2lnbmVkPjo6aGFzaChyZXR1cm5UeXBlc1tpXS5pbmRleCkpOworICAgIH0K
KyAgICByZXR1cm4gYWNjdW11bGF0b3I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjb21wdXRlU3Ry
dWN0VHlwZUhhc2goc2l6ZV90IGZpZWxkQ291bnQsIGNvbnN0IFN0cnVjdEZpZWxkKiBmaWVsZHMp
Cit7CisgICAgdW5zaWduZWQgYWNjdW11bGF0b3IgPSAweDE1ZDI1NDY7CisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IGZpZWxkQ291bnQ7ICsraSkgeworICAgICAgICBhY2N1bXVsYXRvciA9
IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFz
aChzdGF0aWNfY2FzdDx1aW50OF90PihmaWVsZHNbaV0udHlwZS5raW5kKSkpOworICAgICAgICBh
Y2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1
aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihmaWVsZHNbaV0udHlwZS5udWxsYWJs
ZSkpKTsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9y
LCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4oZmllbGRz
W2ldLnR5cGUuaW5kZXgpKSk7CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFz
aChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGZpZWxkc1tpXS5tdXRhYmlsaXR5KSkpOworICAgIH0KKyAgICByZXR1cm4gYWNjdW11
bGF0b3I7Cit9CisKK3Vuc2lnbmVkIFR5cGVEZWZpbml0aW9uOjpoYXNoKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpIHsKKyAgICAgICAgY29uc3QgRnVuY3Rpb25T
aWduYXR1cmUqIHNpZ25hdHVyZSA9IGFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOworICAgICAgICBy
ZXR1cm4gY29tcHV0ZVNpZ25hdHVyZUhhc2goc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpLCBzaWdu
YXR1cmUtPnN0b3JhZ2UoMCksIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBzaWduYXR1cmUt
PnN0b3JhZ2Uoc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSk7CisgICAgfQorCisgICAgQVNTRVJU
KGlzPFN0cnVjdFR5cGU+KCkpOworICAgIGNvbnN0IFN0cnVjdFR5cGUqIHN0cnVjdFR5cGUgPSBh
czxTdHJ1Y3RUeXBlPigpOworICAgIHJldHVybiBjb21wdXRlU3RydWN0VHlwZUhhc2goc3RydWN0
VHlwZS0+ZmllbGRDb3VudCgpLCBzdHJ1Y3RUeXBlLT5zdG9yYWdlKDApKTsKK30KKworUmVmUHRy
PFR5cGVEZWZpbml0aW9uPiBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlRnVuY3Rpb25TaWduYXR1
cmUoRnVuY3Rpb25BcmdDb3VudCByZXR1cm5Db3VudCwgRnVuY3Rpb25BcmdDb3VudCBhcmd1bWVu
dENvdW50KQoreworICAgIC8vIFdlIHVzZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBmb3IgdGhp
cyBjbGFzcy4KKyAgICBhdXRvIHJlc3VsdCA9IHRyeUZhc3RNYWxsb2MoYWxsb2NhdGVkRnVuY3Rp
b25TaXplKHJldHVybkNvdW50LCBhcmd1bWVudENvdW50KSk7CisgICAgdm9pZCogbWVtb3J5ID0g
bnVsbHB0cjsKKyAgICBpZiAoIXJlc3VsdC5nZXRWYWx1ZShtZW1vcnkpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBUeXBlRGVmaW5pdGlvbiogc2lnbmF0dXJlID0gbmV3IChOb3ROdWxs
LCBtZW1vcnkpIFR5cGVEZWZpbml0aW9uKHJldHVybkNvdW50LCBhcmd1bWVudENvdW50KTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoc2lnbmF0dXJlKTsKK30KKworUmVmUHRyPFR5cGVEZWZpbml0aW9u
PiBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlU3RydWN0VHlwZShTdHJ1Y3RGaWVsZENvdW50IGZp
ZWxkQ291bnQpCit7CisgICAgLy8gV2UgdXNlIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIGZvciB0
aGlzIGNsYXNzLgorICAgIGF1dG8gcmVzdWx0ID0gdHJ5RmFzdE1hbGxvYyhhbGxvY2F0ZWRTdHJ1
Y3RTaXplKGZpZWxkQ291bnQpKTsKKyAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOworICAgIGlm
ICghcmVzdWx0LmdldFZhbHVlKG1lbW9yeSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IFR5cGVEZWZpbml0aW9uKiBzaWduYXR1cmUgPSBuZXcgKE5vdE51bGwsIG1lbW9yeSkgVHlwZURl
ZmluaXRpb24oZmllbGRDb3VudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKHNpZ25hdHVyZSk7Cit9
CisKK1R5cGVJbmZvcm1hdGlvbjo6VHlwZUluZm9ybWF0aW9uKCkKK3sKKyNkZWZpbmUgTUFLRV9U
SFVOS19TSUdOQVRVUkUodHlwZSwgZW5jLCBzdHIsIHZhbCwgXykgXAorICAgIGRvIHsgXAorICAg
ICAgICBpZiAoVHlwZUtpbmQ6OnR5cGUgIT0gVHlwZUtpbmQ6OlZvaWQpIHsgXAorICAgICAgICAg
ICAgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiBzaWcgPSBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRl
RnVuY3Rpb25TaWduYXR1cmUoMSwgMCk7IFwKKyAgICAgICAgICAgIHNpZy0+cmVmKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBzaWctPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5nZXRSZXR1
cm5UeXBlKDApID0gVHlwZXM6OnR5cGU7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
dGh1bmtUeXBlc1tsaW5lYXJpemVUeXBlKFR5cGVLaW5kOjp0eXBlKV0gPSBzaWcuZ2V0KCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG1fdHlwZVNldC5hZGQoVHlwZUhh
c2ggeyBzaWcucmVsZWFzZU5vbk51bGwoKSB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZh
bHNlKTsKKworICAgIEZPUl9FQUNIX1dBU01fVFlQRShNQUtFX1RIVU5LX1NJR05BVFVSRSk7CisK
KyAgICAvLyBNYWtlIFZvaWQgYWdhaW4gYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlIG9uZSB0aGF0
IGhhcyB2b2lkIGluIGl0LgorICAgIHsKKyAgICAgICAgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiBz
aWcgPSBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlRnVuY3Rpb25TaWduYXR1cmUoMCwgMCk7Cisg
ICAgICAgIHNpZy0+cmVmKCk7CisgICAgICAgIHRodW5rVHlwZXNbbGluZWFyaXplVHlwZShUeXBl
S2luZDo6Vm9pZCldID0gc2lnLmdldCgpOworICAgICAgICBtX3R5cGVTZXQuYWRkKFR5cGVIYXNo
IHsgc2lnLnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAgfQorfQorCitzdHJ1Y3QgRnVuY3Rpb25Q
YXJhbWV0ZXJUeXBlcyB7CisgICAgY29uc3QgVmVjdG9yPFR5cGUsIDE+JiByZXR1cm5UeXBlczsK
KyAgICBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50VHlwZXM7CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBGdW5jdGlvblBhcmFtZXRlclR5cGVzJiBwYXJhbXMpCisgICAgewor
ICAgICAgICByZXR1cm4gY29tcHV0ZVNpZ25hdHVyZUhhc2gocGFyYW1zLnJldHVyblR5cGVzLnNp
emUoKSwgcGFyYW1zLnJldHVyblR5cGVzLmRhdGEoKSwgcGFyYW1zLmFyZ3VtZW50VHlwZXMuc2l6
ZSgpLCBwYXJhbXMuYXJndW1lbnRUeXBlcy5kYXRhKCkpOworICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFR5cGVIYXNoJiBzaWcsIGNvbnN0IEZ1bmN0aW9uUGFyYW1ldGVyVHlw
ZXMmIHBhcmFtcykKKyAgICB7CisgICAgICAgIGlmIChzaWcua2V5LT5pczxTdHJ1Y3RUeXBlPigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNvbnN0IEZ1bmN0aW9uU2ln
bmF0dXJlKiBzaWduYXR1cmUgPSBzaWcua2V5LT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKKyAg
ICAgICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpICE9IHBhcmFtcy5hcmd1bWVudFR5
cGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNpZ25h
dHVyZS0+cmV0dXJuQ291bnQoKSAhPSBwYXJhbXMucmV0dXJuVHlwZXMuc2l6ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2lnbmF0
dXJlLT5hcmd1bWVudFR5cGUoaSkgIT0gcGFyYW1zLmFyZ3VtZW50VHlwZXNbaV0pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CisgICAgICAgICAg
ICBpZiAoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpICE9IHBhcmFtcy5yZXR1cm5UeXBlc1tpXSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFR5cGVIYXNoJiBlbnRy
eSwgY29uc3QgRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyYgcGFyYW1zLCB1bnNpZ25lZCkKKyAgICB7
CisgICAgICAgIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4gc2lnbmF0dXJlID0gVHlwZURlZmluaXRp
b246OnRyeUNyZWF0ZUZ1bmN0aW9uU2lnbmF0dXJlKHBhcmFtcy5yZXR1cm5UeXBlcy5zaXplKCks
IHBhcmFtcy5hcmd1bWVudFR5cGVzLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNp
Z25hdHVyZSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtcy5yZXR1
cm5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25T
aWduYXR1cmU+KCktPmdldFJldHVyblR5cGUoaSkgPSBwYXJhbXMucmV0dXJuVHlwZXNbaV07CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtcy5hcmd1bWVudFR5cGVzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+Z2V0QXJndW1lbnRUeXBlKGkpID0gcGFyYW1zLmFyZ3VtZW50VHlwZXNbaV07CisKKyAgICAg
ICAgZW50cnkua2V5ID0gV1RGTW92ZShzaWduYXR1cmUpOworICAgIH0KK307CisKK3N0cnVjdCBT
dHJ1Y3RQYXJhbWV0ZXJUeXBlcyB7CisgICAgY29uc3QgVmVjdG9yPFN0cnVjdEZpZWxkPiYgZmll
bGRzOworCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3RydWN0UGFyYW1ldGVyVHlw
ZXMmIHBhcmFtcykKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlU3RydWN0VHlwZUhhc2go
cGFyYW1zLmZpZWxkcy5zaXplKCksIHBhcmFtcy5maWVsZHMuZGF0YSgpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUeXBlSGFzaCYgc2lnLCBjb25zdCBTdHJ1Y3RQYXJh
bWV0ZXJUeXBlcyYgcGFyYW1zKQorICAgIHsKKyAgICAgICAgaWYgKHNpZy5rZXktPmlzPEZ1bmN0
aW9uU2lnbmF0dXJlPigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNv
bnN0IFN0cnVjdFR5cGUqIHN0cnVjdFR5cGUgPSBzaWcua2V5LT5hczxTdHJ1Y3RUeXBlPigpOwor
ICAgICAgICBpZiAoc3RydWN0VHlwZS0+ZmllbGRDb3VudCgpICE9IHBhcmFtcy5maWVsZHMuc2l6
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdHJ1Y3RUeXBlLT5maWVsZENvdW50KCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKHN0cnVjdFR5cGUtPmZpZWxkKGkpICE9IHBhcmFtcy5maWVsZHNbaV0pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFR5cGVIYXNoJiBlbnRyeSwgY29uc3Qg
U3RydWN0UGFyYW1ldGVyVHlwZXMmIHBhcmFtcywgdW5zaWduZWQpCisgICAgeworICAgICAgICBS
ZWZQdHI8VHlwZURlZmluaXRpb24+IHNpZ25hdHVyZSA9IFR5cGVEZWZpbml0aW9uOjp0cnlDcmVh
dGVTdHJ1Y3RUeXBlKHBhcmFtcy5maWVsZHMuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2lnbmF0dXJlKTsKKworICAgICAgICBTdHJ1Y3RUeXBlKiBzdHJ1Y3RUeXBlID0gc2lnbmF0
dXJlLT5hczxTdHJ1Y3RUeXBlPigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGFyYW1zLmZpZWxkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHN0cnVjdFR5cGUtPmdldEZp
ZWxkKGkpID0gcGFyYW1zLmZpZWxkc1tpXTsKKworICAgICAgICBlbnRyeS5rZXkgPSBXVEZNb3Zl
KHNpZ25hdHVyZSk7CisgICAgfQorfTsKKworUmVmUHRyPFR5cGVEZWZpbml0aW9uPiBUeXBlSW5m
b3JtYXRpb246OnR5cGVEZWZpbml0aW9uRm9yRnVuY3Rpb24oY29uc3QgVmVjdG9yPFR5cGUsIDE+
JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCit7CisgICAgaWYgY29uc3RleHBy
IChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdHMuY29udGFpbnMoV2Fz
bTo6VHlwZXM6OlZvaWQpKTsKKyAgICAgICAgQVNTRVJUKCFhcmdzLmNvbnRhaW5zKFdhc206OlR5
cGVzOjpWb2lkKSk7CisgICAgfQorICAgIFR5cGVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRv
bigpOworICAgIExvY2tlciBsb2NrZXIgeyBpbmZvLm1fbG9jayB9OworCisgICAgYXV0byBhZGRS
ZXN1bHQgPSBpbmZvLm1fdHlwZVNldC50ZW1wbGF0ZSBhZGQ8RnVuY3Rpb25QYXJhbWV0ZXJUeXBl
cz4oRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyB7IHJlc3VsdHMsIGFyZ3MgfSk7CisgICAgcmV0dXJu
IGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5OworfQorCitSZWZQdHI8VHlwZURlZmluaXRpb24+IFR5
cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JTdHJ1Y3QoY29uc3QgVmVjdG9yPFN0cnVj
dEZpZWxkPiYgZmllbGRzKQoreworICAgIFR5cGVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRv
bigpOworICAgIExvY2tlciBsb2NrZXIgeyBpbmZvLm1fbG9jayB9OworCisgICAgYXV0byBhZGRS
ZXN1bHQgPSBpbmZvLm1fdHlwZVNldC50ZW1wbGF0ZSBhZGQ8U3RydWN0UGFyYW1ldGVyVHlwZXM+
KFN0cnVjdFBhcmFtZXRlclR5cGVzIHsgZmllbGRzIH0pOworICAgIHJldHVybiBhZGRSZXN1bHQu
aXRlcmF0b3ItPmtleTsKK30KKwordm9pZCBUeXBlSW5mb3JtYXRpb246OnRyeUNsZWFudXAoKQor
eworICAgIFR5cGVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRvbigpOworICAgIExvY2tlciBs
b2NrZXIgeyBpbmZvLm1fbG9jayB9OworCisgICAgaW5mby5tX3R5cGVTZXQucmVtb3ZlSWYoWyZd
IChhdXRvJiBoYXNoKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IGhhc2gua2V5
OworICAgICAgICByZXR1cm4gc2lnbmF0dXJlLT5yZWZDb3VudCgpID09IDE7CisgICAgfSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVHlwZURl
ZmluaXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVmaW5pdGlv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjEzZTVjMzZhNjA4Yzc0ZDUzMjVhNzc2YmIwMDYyMzZlM2Y3NmI4N2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVHlwZURl
ZmluaXRpb24uaApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx2YXJpYW50
PgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitu
YW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIEZ1bmN0aW9uQXJnQ291bnQgPSB1aW50MzJfdDsKK3Vz
aW5nIFN0cnVjdEZpZWxkQ291bnQgPSB1aW50MzJfdDsKKworY2xhc3MgRnVuY3Rpb25TaWduYXR1
cmUgeworcHVibGljOgorICAgIEZ1bmN0aW9uU2lnbmF0dXJlKGNvbnN0IGNoYXIqIHBheWxvYWQs
IEZ1bmN0aW9uQXJnQ291bnQgYXJndW1lbnRDb3VudCwgRnVuY3Rpb25BcmdDb3VudCByZXR1cm5D
b3VudCkKKyAgICAgICAgOiBtX3BheWxvYWQocGF5bG9hZCkKKyAgICAgICAgLCBtX2FyZ0NvdW50
KGFyZ3VtZW50Q291bnQpCisgICAgICAgICwgbV9yZXRDb3VudChyZXR1cm5Db3VudCkKKyAgICB7
CisgICAgfQorCisgICAgRnVuY3Rpb25BcmdDb3VudCBhcmd1bWVudENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9hcmdDb3VudDsgfQorICAgIEZ1bmN0aW9uQXJnQ291bnQgcmV0dXJuQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX3JldENvdW50OyB9CisgICAgVHlwZSByZXR1cm5UeXBlKEZ1bmN0aW9u
QXJnQ291bnQgaSkgY29uc3QgeyBBU1NFUlQoaSA8IHJldHVybkNvdW50KCkpOyByZXR1cm4gY29u
c3RfY2FzdDxGdW5jdGlvblNpZ25hdHVyZSo+KHRoaXMpLT5nZXRSZXR1cm5UeXBlKGkpOyB9Cisg
ICAgYm9vbCByZXR1cm5zVm9pZCgpIGNvbnN0IHsgcmV0dXJuICFyZXR1cm5Db3VudCgpOyB9Cisg
ICAgVHlwZSBhcmd1bWVudFR5cGUoRnVuY3Rpb25BcmdDb3VudCBpKSBjb25zdCB7IHJldHVybiBj
b25zdF9jYXN0PEZ1bmN0aW9uU2lnbmF0dXJlKj4odGhpcyktPmdldEFyZ3VtZW50VHlwZShpKTsg
fQorCisgICAgV1RGOjpTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoV1RG
OjpQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIFR5cGUmIGdldFJldHVyblR5cGUoRnVu
Y3Rpb25BcmdDb3VudCBpKSB7IEFTU0VSVChpIDwgcmV0dXJuQ291bnQoKSk7IHJldHVybiAqc3Rv
cmFnZShpKTsgfQorICAgIFR5cGUmIGdldEFyZ3VtZW50VHlwZShGdW5jdGlvbkFyZ0NvdW50IGkp
IHsgQVNTRVJUKGkgPCBhcmd1bWVudENvdW50KCkpOyByZXR1cm4gKnN0b3JhZ2UocmV0dXJuQ291
bnQoKSArIGkpOyB9CisKKyAgICBUeXBlKiBzdG9yYWdlKEZ1bmN0aW9uQXJnQ291bnQgaSkgeyBy
ZXR1cm4gaSArIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZSo+KGNvbnN0X2Nhc3Q8Y2hhcio+KG1fcGF5
bG9hZCkpOyB9CisgICAgVHlwZSogc3RvcmFnZShGdW5jdGlvbkFyZ0NvdW50IGkpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8RnVuY3Rpb25TaWduYXR1cmUqPih0aGlzKS0+c3RvcmFnZShpKTsg
fQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBUeXBlSW5mb3JtYXRpb247CisKKyAgICBj
b25zdCBjaGFyKiBtX3BheWxvYWQ7CisgICAgRnVuY3Rpb25BcmdDb3VudCBtX2FyZ0NvdW50Owor
ICAgIEZ1bmN0aW9uQXJnQ291bnQgbV9yZXRDb3VudDsKK307CisKKy8vIEZJWE1FIGF1dG8tZ2Vu
ZXJhdGUgdGhpcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTIz
MQorZW51bSBNdXRhYmlsaXR5IDogdWludDhfdCB7CisgICAgTXV0YWJsZSA9IDEsCisgICAgSW1t
dXRhYmxlID0gMAorfTsKKworc3RydWN0IFN0cnVjdEZpZWxkIHsKKyAgICBUeXBlIHR5cGU7Cisg
ICAgTXV0YWJpbGl0eSBtdXRhYmlsaXR5OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0
cnVjdEZpZWxkJiByaHMpIGNvbnN0IHsgcmV0dXJuIHR5cGUgPT0gcmhzLnR5cGUgJiYgbXV0YWJp
bGl0eSA9PSByaHMubXV0YWJpbGl0eTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJ1
Y3RGaWVsZCYgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHJocyk7IH0KK307CisKK2Ns
YXNzIFN0cnVjdFR5cGUgeworcHVibGljOgorICAgIFN0cnVjdFR5cGUoY29uc3QgY2hhciogcGF5
bG9hZCwgU3RydWN0RmllbGRDb3VudCBmaWVsZENvdW50KQorICAgICAgICA6IG1fcGF5bG9hZChw
YXlsb2FkKQorICAgICAgICAsIG1fZmllbGRDb3VudChmaWVsZENvdW50KQorICAgIHsKKyAgICB9
CisKKyAgICBTdHJ1Y3RGaWVsZENvdW50IGZpZWxkQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Zp
ZWxkQ291bnQ7IH0KKyAgICBTdHJ1Y3RGaWVsZCBmaWVsZChTdHJ1Y3RGaWVsZENvdW50IGkpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RydWN0VHlwZSo+KHRoaXMpLT5nZXRGaWVsZChpKTsg
fQorCisgICAgV1RGOjpTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoV1RG
OjpQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIFN0cnVjdEZpZWxkJiBnZXRGaWVsZChT
dHJ1Y3RGaWVsZENvdW50IGkpIHsgQVNTRVJUKGkgPCBmaWVsZENvdW50KCkpOyByZXR1cm4gKnN0
b3JhZ2UoaSk7IH0KKyAgICBTdHJ1Y3RGaWVsZCogc3RvcmFnZShTdHJ1Y3RGaWVsZENvdW50IGkp
IHsgcmV0dXJuIGkgKyByZWludGVycHJldF9jYXN0PFN0cnVjdEZpZWxkKj4oY29uc3RfY2FzdDxj
aGFyKj4obV9wYXlsb2FkKSk7IH0KKyAgICBTdHJ1Y3RGaWVsZCogc3RvcmFnZShTdHJ1Y3RGaWVs
ZENvdW50IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RydWN0VHlwZSo+KHRoaXMpLT5z
dG9yYWdlKGkpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgY2hhciogbV9wYXlsb2FkOworICAg
IFN0cnVjdEZpZWxkQ291bnQgbV9maWVsZENvdW50OworfTsKKworY2xhc3MgVHlwZURlZmluaXRp
b24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VHlwZURlZmluaXRpb24+IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworICAgIFR5cGVEZWZpbml0aW9uKCkgPSBkZWxldGU7
CisgICAgVHlwZURlZmluaXRpb24oY29uc3QgVHlwZURlZmluaXRpb24mKSA9IGRlbGV0ZTsKKwor
ICAgIFR5cGVEZWZpbml0aW9uKEZ1bmN0aW9uQXJnQ291bnQgcmV0Q291bnQsIEZ1bmN0aW9uQXJn
Q291bnQgYXJnQ291bnQpCisgICAgICAgIDogbV90eXBlSGVhZGVyIHsgRnVuY3Rpb25TaWduYXR1
cmUgeyBwYXlsb2FkKCksIGFyZ0NvdW50LCByZXRDb3VudCB9IH0KKyAgICB7CisgICAgfQorCisg
ICAgVHlwZURlZmluaXRpb24oU3RydWN0RmllbGRDb3VudCBmaWVsZENvdW50KQorICAgICAgICA6
IG1fdHlwZUhlYWRlciB7IFN0cnVjdFR5cGUgeyBwYXlsb2FkKCksIGZpZWxkQ291bnQgfSB9Cisg
ICAgeworICAgIH0KKworICAgIGNoYXIqIHBheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPih0aGlzKSArIHNpemVvZihUeXBlRGVmaW5pdGlvbik7IH0KKyAgICBzdGF0aWMg
c2l6ZV90IGFsbG9jYXRlZEZ1bmN0aW9uU2l6ZShDaGVja2VkPEZ1bmN0aW9uQXJnQ291bnQ+IHJl
dENvdW50LCBDaGVja2VkPEZ1bmN0aW9uQXJnQ291bnQ+IGFyZ0NvdW50KSB7IHJldHVybiBzaXpl
b2YoVHlwZURlZmluaXRpb24pICsgKHJldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9mKFR5cGUp
OyB9CisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0ZWRTdHJ1Y3RTaXplKENoZWNrZWQ8U3RydWN0
RmllbGRDb3VudD4gZmllbGRDb3VudCkgeyByZXR1cm4gc2l6ZW9mKFR5cGVEZWZpbml0aW9uKSAr
IGZpZWxkQ291bnQgKiBzaXplb2YoU3RydWN0RmllbGQpOyB9CisKK3B1YmxpYzoKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIGlzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxUPihtX3R5cGVIZWFkZXIpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KKyAgICBUKiBhcygpIHsgQVNTRVJUKGlzPFQ+KCkpOyByZXR1cm4gc3RkOjpnZXRfaWY8
VD4oJm1fdHlwZUhlYWRlcik7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNv
bnN0IFQqIGFzKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxUeXBlRGVmaW5pdGlvbio+KHRo
aXMpLT5hczxUPigpOyB9CisKKyAgICBUeXBlSW5kZXggaW5kZXgoKSBjb25zdCB7IHJldHVybiBi
aXR3aXNlX2Nhc3Q8VHlwZUluZGV4Pih0aGlzKTsgfQorCisgICAgV1RGOjpTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHlwZURlZmluaXRpb24mIHJocykgY29uc3QgeyBy
ZXR1cm4gdGhpcyA9PSAmcmhzOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworCisgICAg
Ly8gVHlwZSBkZWZpbml0aW9ucyBhcmUgdW5pcXVlZCBhbmQsIGZvciBjYWxsX2luZGlyZWN0LCB2
YWxpZGF0ZWQgYXQgcnVudGltZS4gVGFibGVzIGNhbiBjcmVhdGUgaW52YWxpZCBUeXBlSW5kZXgg
dmFsdWVzIHdoaWNoIGNhdXNlIGNhbGxfaW5kaXJlY3QgdG8gZmFpbC4gV2UgdXNlIDAgYXMgdGhl
IGludmFsaWRJbmRleCBzbyB0aGF0IHRoZSBjb2RlZ2VuIGNhbiBlYXNpbHkgdGVzdCBmb3IgaXQg
YW5kIHRyYXAsIGFuZCB3ZSBhZGQgYSB0b2tlbiBpbnZhbGlkIGVudHJ5IGluIFR5cGVJbmZvcm1h
dGlvbi4KKyAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIFR5cGVJbmRleCBpbnZhbGlkSW5kZXgg
PSAwOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBUeXBlSW5mb3JtYXRpb247CisgICAg
ZnJpZW5kIHN0cnVjdCBGdW5jdGlvblBhcmFtZXRlclR5cGVzOworICAgIGZyaWVuZCBzdHJ1Y3Qg
U3RydWN0UGFyYW1ldGVyVHlwZXM7CisKKyAgICBzdGF0aWMgUmVmUHRyPFR5cGVEZWZpbml0aW9u
PiB0cnlDcmVhdGVGdW5jdGlvblNpZ25hdHVyZShGdW5jdGlvbkFyZ0NvdW50IHJldHVybkNvdW50
LCBGdW5jdGlvbkFyZ0NvdW50IGFyZ3VtZW50Q291bnQpOworICAgIHN0YXRpYyBSZWZQdHI8VHlw
ZURlZmluaXRpb24+IHRyeUNyZWF0ZVN0cnVjdFR5cGUoU3RydWN0RmllbGRDb3VudCk7CisKKyAg
ICBzdGQ6OnZhcmlhbnQ8RnVuY3Rpb25TaWduYXR1cmUsIFN0cnVjdFR5cGU+IG1fdHlwZUhlYWRl
cjsKKyAgICAvLyBQYXlsb2FkIGlzIHN0b3JlZCBoZXJlLgorfTsKKworc3RydWN0IFR5cGVIYXNo
IHsKKyAgICBSZWZQdHI8VHlwZURlZmluaXRpb24+IGtleSB7IG51bGxwdHIgfTsKKyAgICBUeXBl
SGFzaCgpID0gZGVmYXVsdDsKKyAgICBleHBsaWNpdCBUeXBlSGFzaChSZWY8VHlwZURlZmluaXRp
b24+JiYga2V5KQorICAgICAgICA6IGtleShXVEZNb3ZlKGtleSkpCisgICAgeyB9CisgICAgZXhw
bGljaXQgVHlwZUhhc2goV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6
IGtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7IH0KKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVHlwZUhhc2gmIHJocykgY29uc3QgeyByZXR1cm4gZXF1YWwoKnRoaXMsIHJo
cyk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUeXBlSGFzaCYgbGhzLCBjb25zdCBU
eXBlSGFzaCYgcmhzKSB7IHJldHVybiBsaHMua2V5ID09IHJocy5rZXk7IH0KKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBUeXBlSGFzaCYgdHlwZUhhc2gpIHsgcmV0dXJuIHR5cGVIYXNo
LmtleSA/IHR5cGVIYXNoLmtleS0+aGFzaCgpIDogMDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBrZXkuaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKTsgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpXYXNtOjpUeXBlSGFzaD4gOiBKU0M6
Oldhc206OlR5cGVIYXNoIHsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hU
cmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6V2FzbTo6VHlwZUhhc2g+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6V2FzbTo6VHlwZUhhc2g+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCisvLyBU
eXBlIGluZm9ybWF0aW9uIGlzIGhlbGQgZ2xvYmFsbHkgYW5kIHNoYXJlZCBieSB0aGUgZW50aXJl
IHByb2Nlc3MgdG8gYWxsb3cgYWxsIHR5cGUgZGVmaW5pdGlvbnMgdG8gYmUgdW5pcXVlLiBUaGlz
IGlzIHJlcXVpcmVkIHdoZW4gd2FzbSBjYWxscyBhbm90aGVyIHdhc20gaW5zdGFuY2UsIGFuZCBt
dXN0IHdvcmsgd2hlbiBtb2R1bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBWTXMuCitj
bGFzcyBUeXBlSW5mb3JtYXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFR5cGVJbmZv
cm1hdGlvbik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyAgICBUeXBlSW5mb3Jt
YXRpb24oKTsKKworcHVibGljOgorICAgIHN0YXRpYyBUeXBlSW5mb3JtYXRpb24mIHNpbmdsZXRv
bigpOworCisgICAgc3RhdGljIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4gdHlwZURlZmluaXRpb25G
b3JGdW5jdGlvbihjb25zdCBWZWN0b3I8VHlwZSwgMT4mIHJldHVyblR5cGVzLCBjb25zdCBWZWN0
b3I8VHlwZT4mIGFyZ3VtZW50VHlwZXMpOworICAgIHN0YXRpYyBSZWZQdHI8VHlwZURlZmluaXRp
b24+IHR5cGVEZWZpbml0aW9uRm9yU3RydWN0KGNvbnN0IFZlY3RvcjxTdHJ1Y3RGaWVsZD4mIGZp
ZWxkcyk7CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUeXBlRGVmaW5pdGlvbiogdGh1bmtGb3Io
VHlwZSB0eXBlKSBjb25zdCB7IHJldHVybiB0aHVua1R5cGVzW2xpbmVhcml6ZVR5cGUodHlwZS5r
aW5kKV07IH0KKworICAgIHN0YXRpYyBjb25zdCBUeXBlRGVmaW5pdGlvbiYgZ2V0KFR5cGVJbmRl
eCk7CisgICAgc3RhdGljIFR5cGVJbmRleCBnZXQoY29uc3QgVHlwZURlZmluaXRpb24mKTsKKwor
ICAgIHN0YXRpYyBUeXBlSW5kZXggZ2V0KGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlJik7CisgICAg
c3RhdGljIGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlJiBnZXRGdW5jdGlvblNpZ25hdHVyZShUeXBl
SW5kZXgpOworCisgICAgc3RhdGljIHZvaWQgdHJ5Q2xlYW51cCgpOworcHJpdmF0ZToKKyAgICBI
YXNoU2V0PFdhc206OlR5cGVIYXNoPiBtX3R5cGVTZXQ7CisgICAgY29uc3QgVHlwZURlZmluaXRp
b24qIHRodW5rVHlwZXNbbnVtVHlwZXNdOworICAgIExvY2sgbV9sb2NrOworCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFR5cGVJbmZvcm1hdGlvbiogdGhlT25lOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyB0eXBlSW5mb3JtYXRpb25GbGFnOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVm
aW5pdGlvbklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVm
aW5pdGlvbklubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNGZkOTNkMGE4ZmRlNzk1NGY2Y2RjOTZhMWIy
OTNlNWYyOTMzNTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFy
dC5vcmc+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21UeXBl
RGVmaW5pdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitpbmxp
bmUgVHlwZUluZm9ybWF0aW9uJiBUeXBlSW5mb3JtYXRpb246OnNpbmdsZXRvbigpCit7CisgICAg
c3RkOjpjYWxsX29uY2UodHlwZUluZm9ybWF0aW9uRmxhZywgW10gKCkgeworICAgICAgICB0aGVP
bmUgPSBuZXcgVHlwZUluZm9ybWF0aW9uOworICAgIH0pOworICAgIHJldHVybiAqdGhlT25lOwor
fQorCitpbmxpbmUgY29uc3QgVHlwZURlZmluaXRpb24mIFR5cGVJbmZvcm1hdGlvbjo6Z2V0KFR5
cGVJbmRleCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXggIT0gVHlwZURlZmluaXRpb246Omlu
dmFsaWRJbmRleCk7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Y29uc3QgVHlwZURlZmluaXRp
b24qPihpbmRleCk7Cit9CisKK2lubGluZSBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSYgVHlwZUlu
Zm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZShUeXBlSW5kZXggaW5kZXgpCit7CisgICAg
cmV0dXJuICpnZXQoaW5kZXgpLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOworfQorCitpbmxpbmUg
VHlwZUluZGV4IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0eXBl
KQoreworICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICBUeXBlSW5mb3JtYXRpb24m
IGluZm8gPSBzaW5nbGV0b24oKTsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IGluZm8ubV9sb2Nr
IH07CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5mbywgaW5mby5tX3R5cGVTZXQuY29udGFpbnMo
VHlwZUhhc2ggeyBjb25zdF9jYXN0PFR5cGVEZWZpbml0aW9uJj4odHlwZSkgfSkpOworICAgIH0K
KyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFR5cGVJbmRleD4oJnR5cGUpOworfQorCitpbmxpbmUg
VHlwZUluZGV4IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlJiBm
dW5jdGlvblR5cGUpCit7CisgICAgcmV0dXJuIGdldCgqcmVpbnRlcnByZXRfY2FzdDxUeXBlRGVm
aW5pdGlvbio+KGNvbnN0X2Nhc3Q8Y2hhcio+KGZ1bmN0aW9uVHlwZS5tX3BheWxvYWQpIC0gc2l6
ZW9mKFR5cGVEZWZpbml0aW9uKSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CmluZGV4IDY1NzZhNjljNTY4MzUz
YWI2NzdiOGUxYjRjODQxNDZhNzRjMDM1ZmYuLjg2YTVjYmZlN2MzMzMxYmExYzk1MzE3NGY2YzU4
YWJlZWI4YzdhZDkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2dlbmVy
YXRlV2FzbU9wc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9nZW5l
cmF0ZVdhc21PcHNIZWFkZXIucHkKQEAgLTIxOCwxMiArMjE4LDEyIEBAIGVudW0gY2xhc3MgTnVs
bGFibGUgOiBib29sIHsKICAgWWVzID0gdHJ1ZSwKIH07CiAKLXVzaW5nIFNpZ25hdHVyZUluZGV4
ID0gdWludHB0cl90OwordXNpbmcgVHlwZUluZGV4ID0gdWludHB0cl90OwogCiBzdHJ1Y3QgVHlw
ZSB7CiAgICAgVHlwZUtpbmQga2luZDsKICAgICBOdWxsYWJsZSBudWxsYWJsZTsKLSAgICBTaWdu
YXR1cmVJbmRleCBpbmRleDsKKyAgICBUeXBlSW5kZXggaW5kZXg7CiAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVHlwZSYgb3RoZXIpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc20uY3BwCmluZGV4IDFmNDY0ZmU5OGJhZDgzNDQwNGQxMTAxODlk
ZGNmOGYyNTQ0M2JkM2EuLjRmNDU1Y2M0N2EwNDg2ZjVjOTVlNGE2YzQwNTVjZDBjODUyMzgzNWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKQEAgLTM4LDgg
KzM4LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAotdm9pZCBtYXJz
aGFsbEpTUmVzdWx0KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgY29uc3QgQ2FsbEluZm9ybWF0aW9uJiB3YXNtRnJhbWVDb252ZW50aW9uLCBjb25zdCBSZWdp
c3RlckF0T2Zmc2V0TGlzdCYgc2F2ZWRSZXN1bHRSZWdpc3RlcnMpCit2b2lkIG1hcnNoYWxsSlNS
ZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5p
dGlvbiwgY29uc3QgQ2FsbEluZm9ybWF0aW9uJiB3YXNtRnJhbWVDb252ZW50aW9uLCBjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCYgc2F2ZWRSZXN1bHRSZWdpc3RlcnMpCiB7CisgICAgY29uc3Qg
YXV0byYgc2lnbmF0dXJlID0gKnR5cGVEZWZpbml0aW9uLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
OwogICAgIGF1dG8gYm94V2FzbVJlc3VsdCA9IFtdKENDYWxsSGVscGVycyYgaml0LCBUeXBlIHR5
cGUsIFJlZyBzcmMsIEpTVmFsdWVSZWdzIGRzdCkgewogICAgICAgICBzd2l0Y2ggKHR5cGUua2lu
ZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpWb2lkOgpAQCAtMTY0LDEyICsxNjUsMTIgQEAg
dm9pZCBtYXJzaGFsbEpTUmVzdWx0KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgY29uc3QgQ2FsbEkKICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJ
bnN0YW5jZSh3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAgICAgICAgfQogCi0gICAgICAgIGpp
dC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25BbGxvY2F0ZVJlc3VsdHNBcnJheSk+
KHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc2ln
bmF0dXJlKSwgaW5kZXhpbmdUeXBlLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkFsbG9jYXRl
UmVzdWx0c0FycmF5KT4od2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZ0eXBlRGVmaW5pdGlvbiksIGluZGV4aW5nVHlwZSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGppdC5jYWxsT3BlcmF0aW9uKEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXkpKTsKICAg
ICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2Fz
bVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4KQorc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpT
VG9XYXNtV3JhcHBlcihDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgVHlwZURlZmluaXRpb24mIHR5
cGVEZWZpbml0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlua2VkV2Fz
bVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBt
b2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQogewogICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVu
aXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OwpAQCAtMTk3LDcgKzE5OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBj
cmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0CiAgICAgcmVzdWx0
LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSByZWdpc3RlcnNUb1NwaWxsOwogCiAg
ICAgc2l6ZV90IHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXpl
b2YoQ1BVUmVnaXN0ZXIpOwotICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtRnJhbWVDb252ZW50aW9u
ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSk7
CisgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21GcmFtZUNvbnZlbnRpb24gPSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IodHlwZURlZmluaXRpb24pOwogICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0IHNhdmVkUmVzdWx0UmVnaXN0ZXJzID0gd2FzbUZyYW1lQ29udmVudGlv
bi5jb21wdXRlUmVzdWx0c09mZnNldExpc3QoKTsKICAgICB0b3RhbEZyYW1lU2l6ZSArPSB3YXNt
RnJhbWVDb252ZW50aW9uLmhlYWRlckFuZEFyZ3VtZW50U3RhY2tTaXplSW5CeXRlczsKICAgICB0
b3RhbEZyYW1lU2l6ZSArPSBzYXZlZFJlc3VsdFJlZ2lzdGVycy5zaXplKCkgKiBzaXplb2YoQ1BV
UmVnaXN0ZXIpOwpAQCAtMjE4LDcgKzIxOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0CiAg
ICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBwaW5uZWRSZWdzLndhc21Db250ZXh0
SW5zdGFuY2VQb2ludGVyOwogCiAgICAgewotICAgICAgICBDYWxsSW5mb3JtYXRpb24ganNGcmFt
ZUNvbnZlbnRpb24gPSBqc0NhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKHNp
Z25hdHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7CisgICAgICAgIENhbGxJbmZvcm1hdGlvbiBqc0Zy
YW1lQ29udmVudGlvbiA9IGpzQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3Io
dHlwZURlZmluaXRpb24sIENhbGxSb2xlOjpDYWxsZWUpOwogCiAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIDApOwogCkBAIC0yMzEsMTAgKzIzMiwxMSBAQCBz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKEND
YWxsSGVscGVycyYgaml0LCBjb25zdAogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSwgd2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CiAgICAgICAg
IH0KIAorICAgICAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSAqdHlwZURlZmluaXRpb24uYXM8
RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGpzRnJhbWVDb252ZW50aW9uLnBhcmFtc1tpXS5pc1N0YWNrKCkpOwogCi0gICAgICAgICAg
ICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgICAgICAgICBUeXBlIHR5
cGUgPSBzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzIGpzUGFyYW0oR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzRnJhbWVDb252
ZW50aW9uLnBhcmFtc1tpXS5vZmZzZXRGcm9tRlAoKSk7CiAgICAgICAgICAgICBpZiAod2FzbUZy
YW1lQ29udmVudGlvbi5wYXJhbXNbaV0uaXNTdGFja0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAodHlwZS5pc0kzMigpIHx8IHR5cGUuaXNGMzIoKSkgewpAQCAtMjgyLDcgKzI4NCw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0CiAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJU
YWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4U3BhY2UgfSk7CiAgICAgfSk7CiAKLSAgICBtYXJzaGFs
bEpTUmVzdWx0KGppdCwgc2lnbmF0dXJlLCB3YXNtRnJhbWVDb252ZW50aW9uLCBzYXZlZFJlc3Vs
dFJlZ2lzdGVycyk7CisgICAgbWFyc2hhbGxKU1Jlc3VsdChqaXQsIHR5cGVEZWZpbml0aW9uLCB3
YXNtRnJhbWVDb252ZW50aW9uLCBzYXZlZFJlc3VsdFJlZ2lzdGVycyk7CiAKICAgICBmb3IgKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgewog
ICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaAppbmRleCBlZDY0ZWM5ZDAxMDA1YjQ1ZDcwM2E2
MDE1YWJlODc1ZjQ1NzM5YTQ5Li42YzZlYjJjNDEyNDdiMDU0MWIyZGY3MzBiODBkOGJlZWJmNTQz
OWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmgKQEAgLTMyLDcg
KzMyLDcgQEAKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5o
IgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgotI2luY2x1ZGUgIldhc21TaWdu
YXR1cmUuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb24uaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQzLDggKzQzLDggQEAgbmFtZXNwYWNl
IFdhc20gewogCiBzdHJ1Y3QgQ2FsbEluZm9ybWF0aW9uOwogCi12b2lkIG1hcnNoYWxsSlNSZXN1
bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFNpZ25hdHVyZSYsIGNvbnN0IENhbGxJbmZvcm1h
dGlvbiYgd2FzbUZyYW1lQ29udmVudGlvbiwgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QmIHNh
dmVkUmVzdWx0UmVnaXN0ZXJzKTsKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBj
cmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBN
ZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKK3ZvaWQgbWFyc2hhbGxKU1Jlc3Vs
dChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBjb25zdCBDYWxsSW5m
b3JtYXRpb24mIHdhc21GcmFtZUNvbnZlbnRpb24sIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0
JiBzYXZlZFJlc3VsdFJlZ2lzdGVycyk7CitzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENDYWxsSGVscGVycyYsIGNvbnN0IFR5cGVEZWZpbml0
aW9uJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcAppbmRleCBkZTQxNDE5MDczOWQwYzgy
OGZlMGI2NzdiMTk3NTFjNmQ4NzZmMzIxLi42OWU2YmU0ODc0NjM0NTYyZmMyZGRhNTgzMjk5NzRk
MDBhMzczNzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5RXhjZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcApAQCAtNTgsOSArNTgsOSBAQCB2b2lkIEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRv
ciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogCiAg
ICAgYXV0byogZXhjZXB0aW9uID0ganNDYXN0PEpTV2ViQXNzZW1ibHlFeGNlcHRpb24qPihjZWxs
KTsKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IGV4Y2VwdGlvbi0+dGFn
KCkuc2lnbmF0dXJlKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAgICBpZiAoaXNSZWZUeXBlKHNpZ25hdHVyZS5h
cmd1bWVudChpKSkpCisgICAgY29uc3QgYXV0byYgdGFnVHlwZSA9IGV4Y2VwdGlvbi0+dGFnKCku
dHlwZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWdUeXBlLmFyZ3VtZW50Q291
bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChpc1JlZlR5cGUodGFnVHlwZS5hcmd1bWVudFR5cGUo
aSkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoYml0d2lzZV9jYXN0PFdyaXRlQmFycmll
cjxVbmtub3duPj4oZXhjZXB0aW9uLT5wYXlsb2FkKClbaV0pKTsKICAgICB9CiB9CkBAIC03NCw5
ICs3NCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCiAKIEpTVmFsdWUgSlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6Z2V0QXJnKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpIGNvbnN0CiB7Ci0gICAgY29uc3QgV2FzbTo6
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSB0YWcoKS5zaWduYXR1cmUoKTsKLSAgICBBU1NFUlQoaSA8
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOwotICAgIHJldHVybiB0b0pTVmFsdWUoZ2xvYmFs
T2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnQoaSksIHBheWxvYWQoKVtpXSk7CisgICAgQVNTRVJU
KGkgPCB0YWcoKS50eXBlKCkuYXJndW1lbnRDb3VudCgpKTsKKyAgICByZXR1cm4gdG9KU1ZhbHVl
KGdsb2JhbE9iamVjdCwgdGFnKCkudHlwZSgpLmFyZ3VtZW50VHlwZShpKSwgcGF5bG9hZCgpW2ld
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCmluZGV4IDk3OTA4OTEzMzhiNDQ5
MGMyYTQwNDE3ZTZjMWY5YjVkZjk3NzkzY2UuLmIyMGFlNjczMjdhMDkzY2IxYTllNTJhNmU3ZTE4
MDg2ODcxMzI1MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlHbG9iYWwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCkBAIC04OCw3ICs4OCw3IEBAIEpTT2JqZWN0KiBKU1dl
YkFzc2VtYmx5R2xvYmFsOjp0eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAKICAg
ICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAyKTsKIAotICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibXV0YWJsZSIpLCBqc0Jvb2xlYW4o
bV9nbG9iYWwtPm11dGFiaWxpdHkoKSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJs
ZSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibXV0YWJsZSIpLCBqc0Jvb2xlYW4obV9nbG9iYWwtPm11dGFiaWxpdHkoKSA9PSBXYXNtOjpN
dXRhYmxlKSk7CiAKICAgICBXYXNtOjpUeXBlIHZhbHVlVHlwZSA9IG1fZ2xvYmFsLT50eXBlKCk7
CiAgICAgSlNTdHJpbmcqIHZhbHVlU3RyaW5nID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCmluZGV4IDdjNTRk
MzQwZTM2N2Q3NDZlMDIxODIxZWUwYmUxMTIwYjI2YzJhMTQuLjFjNmIzZTJlY2NlMWMwMmQxMjUw
MTdmMzI1MWEyY2IwY2UzOTFjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaApAQCAtMTk4LDggKzE5OCw4IEBAIEFMV0FZ
U19JTkxJTkUgdWludDY0X3QgZnJvbUpTVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgV2FzbTo6VHlwCiAgICAgICAgICAgICBpZiAoIWlzV2ViQXNzZW1ibHlIb3N0RnVu
Y3Rpb24odm0sIHZhbHVlLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pICYmICgh
dHlwZS5pc051bGxhYmxlKCkgfHwgIXZhbHVlLmlzTnVsbCgpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dWTUV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJGdW5jcmVmIG11c3QgYmUgYW4g
ZXhwb3J0ZWQgd2FzbSBmdW5jdGlvbiIpKTsKICAgICAgICAgICAgIGlmIChpc1JlZldpdGhUeXBl
SW5kZXgodHlwZSkgJiYgIXZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6
U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IHR5cGUuaW5kZXg7Ci0gICAgICAgICAgICAgICAg
V2FzbTo6U2lnbmF0dXJlSW5kZXggYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24gPyB3YXNtRnVuY3Rp
b24tPnNpZ25hdHVyZUluZGV4KCkgOiB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRl
eCgpOworICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBwYXJhbUluZGV4ID0gdHlwZS5p
bmRleDsKKyAgICAgICAgICAgICAgICBXYXNtOjpUeXBlSW5kZXggYXJnSW5kZXggPSB3YXNtRnVu
Y3Rpb24gPyB3YXNtRnVuY3Rpb24tPnR5cGVJbmRleCgpIDogd2FzbVdyYXBwZXJGdW5jdGlvbi0+
dHlwZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmFtSW5kZXggIT0gYXJnSW5kZXgp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXhjZXB0aW9uKGdsb2JhbE9iamVj
dCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2
bSwgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3QgbWF0Y2ggdGhlIHJlZmVyZW5jZSB0eXBlIikp
OwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRleCAwZjBiOWNjNWE1MmYwZWM0OGM2ZjdjZjM1
MWE3NTY3ZjZhMWM0MjJmLi5hY2UxODYxZGRkOWFhODg3ZTgwNjUxYjI0NWVlMTA0YmFjNDFjMWFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVs
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxl
Kj4oY2VsbCktPkpTV2ViQXNzZW1ibHlNb2R1bGU6On5KU1dlYkFzc2VtYmx5TW9kdWxlKCk7Ci0g
ICAgV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OnRyeUNsZWFudXAoKTsKKyAgICBXYXNtOjpU
eXBlSW5mb3JtYXRpb246OnRyeUNsZWFudXAoKTsKIH0KIAogY29uc3QgV2FzbTo6TW9kdWxlSW5m
b3JtYXRpb24mIEpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QK
QEAgLTExMyw5ICsxMTMsOSBAQCBTeW1ib2xUYWJsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6ZXhw
b3J0U3ltYm9sVGFibGUoKSBjb25zdAogICAgIHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdl
dCgpOwogfQogCi1XYXNtOjpTaWduYXR1cmVJbmRleCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKSBjb25zdAorV2FzbTo6VHlwZUluZGV4IEpTV2ViQXNzZW1ibHlNb2R1bGU6OnR5cGVJbmRl
eEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25z
dAogewotICAgIHJldHVybiBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgcmV0dXJuIG1fbW9kdWxlLT50eXBlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiB9CiAKIFdhc206
Ok1vZHVsZSYgSlNXZWJBc3NlbWJseU1vZHVsZTo6bW9kdWxlKCkKQEAgLTE1NCw4ICsxNTQsOCBA
QCBFeHBlY3RlZDx2b2lkLCBXYXNtOjpCaW5kaW5nRmFpbHVyZT4gSlNXZWJBc3NlbWJseU1vZHVs
ZTo6Z2VuZXJhdGVXYXNtVG9KU1N0dWJzKAogICAgICAgICBCYWc8T3B0aW1pemluZ0NhbGxMaW5r
SW5mbz4gY2FsbExpbmtJbmZvczsKICAgICAgICAgRml4ZWRWZWN0b3I8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4+IHN0dWJzKG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1
bmN0aW9uQ291bnQoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW1wb3J0SW5kZXggPSAwOyBp
bXBvcnRJbmRleCA8IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsgKytp
bXBvcnRJbmRleCkgewotICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
YXQoaW1wb3J0SW5kZXgpOwotICAgICAgICAgICAgYXV0byBiaW5kaW5nID0gV2FzbTo6d2FzbVRv
SlModm0sIGNhbGxMaW5rSW5mb3MsIHNpZ25hdHVyZUluZGV4LCBpbXBvcnRJbmRleCk7CisgICAg
ICAgICAgICBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1w
b3J0RnVuY3Rpb25UeXBlSW5kaWNlcy5hdChpbXBvcnRJbmRleCk7CisgICAgICAgICAgICBhdXRv
IGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9KUyh2bSwgY2FsbExpbmtJbmZvcywgdHlwZUluZGV4LCBp
bXBvcnRJbmRleCk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWJpbmRpbmcpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChiaW5kaW5nLmVycm9yKCkpOwogICAgICAg
ICAgICAgc3R1YnNbaW1wb3J0SW5kZXhdID0gYmluZGluZy52YWx1ZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IGJk
NTFhYmVhYjBiMWQ1MTI2MTBlYTE4MjFlMjMxYzE5OTc1Njc4NjcuLjE2OGJiOWMxOGZiNDg0MjI0
MmM0MTdmYzQyNGZkNjczM2RlMjQ1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGlj
OgogCiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
KCkgY29uc3Q7CiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKCkgY29uc3Q7Ci0g
ICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3Q7CisgICAgV2FzbTo6VHlwZUlu
ZGV4IHR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRl
eFNwYWNlKSBjb25zdDsKIAogICAgIEV4cGVjdGVkPHZvaWQsIFdhc206OkJpbmRpbmdGYWlsdXJl
PiBnZW5lcmF0ZVdhc21Ub0pTU3R1YnMoVk0mKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
V2FzbUVudHJ5UHRyVGFnPiB3YXNtVG9FbWJlZGRlclN0dWIoc2l6ZV90IGltcG9ydEZ1bmN0aW9u
TnVtKSB7IHJldHVybiBtX3dhc21Ub0pTRXhpdFN0dWJzW2ltcG9ydEZ1bmN0aW9uTnVtXS5jb2Rl
KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlU
YWcuaAppbmRleCBkYzRjMGYyNmY3M2M0NzFlZGFjOWEwMjVhNmVhNjFkNTJjYjU1NjMxLi40OTI1
MDcyNGE2YzEwYWIxZThiMDJiNjIxYmVjMWIzNzk5NjM5Y2UxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFnLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCkBAIC01MSw3ICs1MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgY29uc3QgV2FzbTo6VGFnJiB0YWcoKSBjb25z
dCB7IHJldHVybiBtX3RhZzsgfQotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJl
KCkgY29uc3QgeyByZXR1cm4gdGFnKCkuc2lnbmF0dXJlKCk7IH0KKyAgICBjb25zdCBXYXNtOjpG
dW5jdGlvblNpZ25hdHVyZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHRhZygpLnR5cGUoKTsgfQog
CiBwcml2YXRlOgogICAgIEpTV2ViQXNzZW1ibHlUYWcoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBX
YXNtOjpUYWcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dh
c21Ub0pTLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApp
bmRleCAwOGZlMWE3ODcxMzI1YTVhZmUzZTE2MTk4NTc4NjlkMmE2OTlhMjJkLi45MDI5YWUyMzFj
NWRkMWViYjM0MjhlODgwOTYwZDhkZWQyOWQyNTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2FzbVRvSlMuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiV2FzbUV4
Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKICNpbmNsdWRlICJXYXNt
T3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvblRy
YWl0cy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAtNTEsMTcgKzUx
LDE4IEBAIHN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKEpJVCYgaml0LCB1bnNp
Z25lZCBpbXBvcnRJbmRleCwgR1BSUmVnIHJlc3VsCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKHJlc3VsdCwgSW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb24oaW1wb3J0SW5kZXgp
KSwgcmVzdWx0KTsKIH0KIAotRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0sIEJhZzxPcHRpbWl6aW5n
Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5k
ZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KQorRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0sIEJhZzxP
cHRpbWl6aW5nQ2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgVHlwZUluZGV4IHR5cGVJbmRl
eCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24g
ZG9lc24ndCBwcm9wZXJseSBhYnN0cmFjdCBhd2F5IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24uCiAg
ICAgLy8gSXQnZCBiZSBzdXBlciBlYXN5IHRvIGRvIHNvOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY5NDAxCiAgICAgY29uc3QgYXV0byYgd2FzbUNDID0gd2FzbUNh
bGxpbmdDb252ZW50aW9uKCk7CiAgICAgY29uc3QgYXV0byYganNDQyA9IGpzQ2FsbGluZ0NvbnZl
bnRpb24oKTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0
eXBlRGVmaW5pdGlvbiA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCk7CisgICAgY29u
c3QgYXV0byYgc2lnbmF0dXJlID0gKnR5cGVEZWZpbml0aW9uLmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpOwogICAgIHVuc2lnbmVkIGFyZ0NvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsK
ICAgICBKSVQgaml0OwogCi0gICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21D
Qy5jYWxsSW5mb3JtYXRpb25Gb3Ioc2lnbmF0dXJlLCBDYWxsUm9sZTo6Q2FsbGVlKTsKKyAgICBD
YWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNDLmNhbGxJbmZvcm1hdGlvbkZvcih0
eXBlRGVmaW5pdGlvbiwgQ2FsbFJvbGU6OkNhbGxlZSk7CiAgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3Qgc2F2ZWRSZXN1bHRSZWdpc3RlcnMgPSB3YXNtQ2FsbEluZm8uY29tcHV0ZVJlc3VsdHNPZmZz
ZXRMaXN0KCk7CiAKICAgICAvLyBOb3RlOiBXYXNtQjNJUkdlbmVyYXRvciBhc3N1bWVzIHRoYXQg
dGhpcyBzdHViIHRyZWF0cyBTUCBhcyBhIGNhbGxlZSBzYXZlLgpAQCAtOTEsNyArOTIsNyBAQCBF
eHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihzdGFja09mZnNldCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CiAgICAgSklUOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CiAKLSAgICAvLyBGSVhNRSBtYWtl
IHRoZXNlIGxvb3BzIHdoaWNoIHN3aXRjaCBvbiBTaWduYXR1cmUgaWYgdGhlcmUgYXJlIG1hbnkg
YXJndW1lbnRzIG9uIHRoZSBzdGFjay4gSXQnbGwgb3RoZXJ3aXNlIGJlIGh1Z2UgZm9yIGh1Z2Ug
c2lnbmF0dXJlcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTU0
NworICAgIC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIHNpZ25hdHVy
ZSBpZiB0aGVyZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndp
c2UgYmUgaHVnZSBmb3IgaHVnZSB0eXBlIGRlZmluaXRpb25zLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3CiAKICAgICAvLyBGaXJzdCBnbyB0aHJvdWdoIHRo
ZSBpbnRlZ2VyIHBhcmFtZXRlcnMsIGZyZWVpbmcgdXAgdGhlaXIgcmVnaXN0ZXIgZm9yIHVzZSBh
ZnRlcndhcmRzLgogICAgIHsKQEAgLTEwMCwxMCArMTAxLDExIEBAIEV4cGVjdGVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMo
Vk0mIHZtCiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xv
dDo6Zmlyc3RBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAg
ICAgICAgIHVuc2lnbmVkIGZyT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAg
ICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAg
IFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoYXJnTnVtKTsKICAgICAgICAg
ICAgIHN3aXRjaCAoYXJnVHlwZS5raW5kKSB7CiAgICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpW
b2lkOgogICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6RnVuYzoKKyAgICAgICAgICAgIGNhc2Ug
VHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlJlZk51bGw6CiAg
ICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpSZWY6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KQEAgLTE3NCwxMCArMTc2LDEx
IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5k
aW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZtCiAgICAgICAgIH07CiAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAg
ICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pOworICAgICAg
ICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShhcmdOdW0pOwogICAg
ICAgICAgICAgc3dpdGNoIChhcmdUeXBlLmtpbmQpIHsKICAgICAgICAgICAgIGNhc2UgVHlwZUtp
bmQ6OlZvaWQ6CiAgICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpGdW5jOgorICAgICAgICAgICAg
Y2FzZSBUeXBlS2luZDo6U3RydWN0OgogICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6UmVmTnVs
bDoKICAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlJlZjoKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5kbGVkIGFib3ZlLgpAQCAtMjMwLDcgKzIz
Myw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBC
aW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZtCiAgICAgICAgIC8vIFdlIGNhbGwgZnVuY3Rp
b25zIHRvIGNvbnZlcnQgSTY0IHRvIEJpZ0ludC4KICAgICAgICAgdW5zaWduZWQgY2FsbGVlRnJh
bWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBh
cmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgICAgIGlmIChzaWduYXR1cmUu
YXJndW1lbnQoYXJnTnVtKS5pc0k2NCgpKSB7CisgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFy
Z3VtZW50VHlwZShhcmdOdW0pLmlzSTY0KCkpIHsKICAgICAgICAgICAgICAgICBqaXQubG9hZFdh
c21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgICAgICAg
ICBqaXQubG9hZDY0KGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoY2FsbGVlRnJhbWVPZmZzZXQpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgICAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQpPihHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CkBAIC0zODEsNyArMzg0LDcgQEAgRXhwZWN0ZWQ8
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3
YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAgIGlmIChXYXNtOjppc0Z1bmNyZWYocmV0dXJuVHlw
ZSkgfHwgV2FzbTo6aXNFeHRlcm5yZWYocmV0dXJuVHlwZSkpCiAgICAgICAgICAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHdhc21DYWxsSW5mby5yZXN1bHRzWzBdLmdw
cigpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIEphdmFT
Y3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0
dXJlIHJldHVybiBhcmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KKyAg
ICAgICAgICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRzIHdp
dGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgdHlwZSBkZWZpbml0aW9uIHJldHVybiBhcmUgYSBXZWJB
c3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM5Myw3ICsz
OTYsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwg
QmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICAgICAgaml0LmxvYWRXYXNt
Q29udGV4dEluc3RhbmNlKHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRz
KT4od2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgJnNpZ25hdHVyZSwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6
ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCAmdHlw
ZURlZmluaXRpb24sIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKICAg
ICAgICAgaml0LmNhbGxPcGVyYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25JdGVyYXRlUmVzdWx0cykpOwogICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGpp
dC5lbWl0SnVtcElmRXhjZXB0aW9uKHZtKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XYXNtVG9KUy5oCmluZGV4IDE5N2I4MDdmMWI1MzI1YWIyOWYwZDU5NjBkOTQyNzEwMmIxOTIz
YzYuLmJkNTJhZjhjZDhlNDlmMjY5NmFhNWVlNWIxMDQzMGU5YTRiNDFkY2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaApAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3Bh
Y2UgV2FzbSB7CiAKIGNsYXNzIEluc3RhbmNlOwogCi1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiwgQmFn
PE9wdGltaXppbmdDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwg
dW5zaWduZWQgaW1wb3J0SW5kZXgpOworRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdh
c21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYsIEJhZzxPcHRpbWl6
aW5nQ2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgVHlwZUluZGV4LCB1bnNpZ25lZCBpbXBv
cnRJbmRleCk7CiAKIHZvaWQgZW1pdFRocm93V2FzbVRvSlNFeGNlcHRpb24oQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIHdhc21JbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29u
c3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlF
eGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKaW5kZXggMzdhNmZhMGJkNmZhNDU4NzUyNDhjODM1MDA3
MWE2ZTY0MmZmMzIzOS4uNjdlZTcyZDQwYmRlZmJkYjFkOTY3ZTVjNmNmNmUwYTM5Mjc1MTI5NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNl
cHRpb25Db25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKQEAgLTY2LDEzICs2NiwxNCBAQCBK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYQogICAgIH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKLSAgICBpZiAodmFsdWVzLnNpemUoKSAhPSB0YWctPnNpZ25hdHVyZSgp
LmFyZ3VtZW50Q291bnQoKSkKKyAgICBjb25zdCBhdXRvJiB0YWdGdW5jdGlvblR5cGUgPSB0YWct
PnR5cGUoKTsKKyAgICBpZiAodmFsdWVzLnNpemUoKSAhPSB0YWdGdW5jdGlvblR5cGUuYXJndW1l
bnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIG51
bWJlciBvZiBwYXJlbWV0ZXJzIGluIFdlYkFzc2VtYmx5LlRhZyB0byBtYXRjaCB0aGUgdGFncyBw
YXJhbWV0ZXIgY291bnQuIik7CiAKICAgICAvLyBBbnkgR0MnZCB2YWx1ZXMgaW4gaGVyZSB3aWxs
IGJlIG1hcmtlZCBieSB0aGUgTWFya2VkQXJ1Z2VtZW50QnVmZmVyIHVudGlsIHN0b3JlZCBpbiB0
aGUgRXhjZXB0aW9uLgogICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiBwYXlsb2FkKHZhbHVlcy5z
aXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgcGF5bG9hZFtpXSA9IGZyb21KU1ZhbHVlKGdsb2JhbE9iamVjdCwgdGFnLT5z
aWduYXR1cmUoKS5hcmd1bWVudChpKSwgdmFsdWVzLmF0KGkpKTsKKyAgICAgICAgcGF5bG9hZFtp
XSA9IGZyb21KU1ZhbHVlKGdsb2JhbE9iamVjdCwgdGFnRnVuY3Rpb25UeXBlLmFyZ3VtZW50VHlw
ZShpKSwgdmFsdWVzLmF0KGkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggYzc4NzM3M2Y3YzkyZGFiZjRkNDEwM2NhYjdk
Y2U4M2Y4YTMwMmQ4My4uYjg2Mzc2NGMxYWUzYmVmNDhjOWU3MGIzNmZiNDQzMDI0MmY0ZTM4YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAj
aW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZUlu
Zm9ybWF0aW9uLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrUG9pbnRl
ci5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAKQEAgLTYzLDggKzYzLDggQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4o
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKLSAgICBjb25zdCBXYXNt
OjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOworICAgIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXggPSB3YXNtRnVu
Y3Rpb24tPnR5cGVJbmRleCgpOworICAgIGNvbnN0IFdhc206OkZ1bmN0aW9uU2lnbmF0dXJlJiBz
aWduYXR1cmUgPSBXYXNtOjpUeXBlSW5mb3JtYXRpb246OmdldEZ1bmN0aW9uU2lnbmF0dXJlKHR5
cGVJbmRleCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IHdlIHRoaW5rIHdl
IGFyZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2UgZXhwZWN0LgogICAgIEFT
U0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCkuY2FsbGVlR3JvdXAoKS0+
aXNTYWZlVG9SdW4od2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5tZW1vcnkoKS0+bWVtb3J5KCku
bW9kZSgpKSk7CkBAIC03OCw3ICs3OCw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxs
V2ViQXNzZW1ibHlGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAg
V2FzbTo6SW5zdGFuY2UqIHdhc21JbnN0YW5jZSA9ICZpbnN0YW5jZS0+aW5zdGFuY2UoKTsKIAog
ICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7ICsrYXJnSW5kZXgpIHsKLSAgICAgICAgdWludDY0X3QgdmFsdWUgPSBmcm9t
SlNWYWx1ZShnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudChhcmdJbmRleCksIGNhbGxG
cmFtZS0+YXJndW1lbnQoYXJnSW5kZXgpKTsKKyAgICAgICAgdWludDY0X3QgdmFsdWUgPSBmcm9t
SlNWYWx1ZShnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoYXJnSW5kZXgpLCBj
YWxsRnJhbWUtPmFyZ3VtZW50KGFyZ0luZGV4KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKEpT
VmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogICAgIH0KQEAgLTEzMiw3ICsxMzIsNyBAQCBKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LAogCiBib29sIFdlYkFzc2VtYmx5RnVuY3Rpb246OnVzZXNUYWdSZWdp
c3RlcnMoKSBjb25zdAogewotICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IFdhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgoKSk7CisgICAgY29uc3QgYXV0byYg
c2lnbmF0dXJlID0gV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZSh0
eXBlSW5kZXgoKSk7CiAgICAgcmV0dXJuIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgfHwgIXNp
Z25hdHVyZS5yZXR1cm5zVm9pZCgpOwogfQogCkBAIC0xODEsMTUgKzE4MSwxNiBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxs
RW50cnlwb2ludFNsb3coKQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIAotICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgoKSk7CisgICAgY29uc3QgYXV0byYgdHlwZURl
ZmluaXRpb24gPSBXYXNtOjpUeXBlSW5mb3JtYXRpb246OmdldCh0eXBlSW5kZXgoKSk7CisgICAg
Y29uc3QgYXV0byYgc2lnbmF0dXJlID0gKnR5cGVEZWZpbml0aW9uLmFzPFdhc206OkZ1bmN0aW9u
U2lnbmF0dXJlPigpOwogICAgIGNvbnN0IGF1dG8mIHBpbm5lZFJlZ3MgPSBXYXNtOjpQaW5uZWRS
ZWdpc3RlckluZm86OmdldCgpOwogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1Rv
U3BpbGwgPSB1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAgYXV0byYgbW9kdWxlSW5m
b3JtYXRpb24gPSBpbnN0YW5jZSgpLT5pbnN0YW5jZSgpLm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0
aW9uKCk7CiAKICAgICBjb25zdCBXYXNtOjpXYXNtQ2FsbGluZ0NvbnZlbnRpb24mIHdhc21DQyA9
IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpOwotICAgIFdhc206OkNhbGxJbmZvcm1hdGlv
biB3YXNtQ2FsbEluZm8gPSB3YXNtQ0MuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSk7Ci0g
ICAgV2FzbTo6Q2FsbEluZm9ybWF0aW9uIGpzQ2FsbEluZm8gPSBXYXNtOjpqc0NhbGxpbmdDb252
ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSwgV2FzbTo6Q2FsbFJvbGU6OkNh
bGxlZSk7CisgICAgV2FzbTo6Q2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DQy5j
YWxsSW5mb3JtYXRpb25Gb3IodHlwZURlZmluaXRpb24pOworICAgIFdhc206OkNhbGxJbmZvcm1h
dGlvbiBqc0NhbGxJbmZvID0gV2FzbTo6anNDYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1h
dGlvbkZvcih0eXBlRGVmaW5pdGlvbiwgV2FzbTo6Q2FsbFJvbGU6OkNhbGxlZSk7CiAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3Qgc2F2ZWRSZXN1bHRSZWdpc3RlcnMgPSB3YXNtQ2FsbEluZm8uY29t
cHV0ZVJlc3VsdHNPZmZzZXRMaXN0KCk7CiAKICAgICB1bnNpZ25lZCB0b3RhbEZyYW1lU2l6ZSA9
IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKENQVVJlZ2lzdGVyKTsKQEAgLTI0Miw3
ICsyNDMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1i
bHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MganNQYXJhbShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNDYWxsSW5mby5w
YXJhbXNbaV0ub2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICBib29sIGlzU3RhY2sgPSB3YXNtQ2Fs
bEluZm8ucGFyYW1zW2ldLmlzU3RhY2tBcmd1bWVudCgpOwogCi0gICAgICAgIGF1dG8gdHlwZSA9
IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgYXV0byB0eXBlID0gc2lnbmF0dXJlLmFy
Z3VtZW50VHlwZShpKTsKICAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQpIHsKICAgICAgICAgY2Fz
ZSBXYXNtOjpUeXBlS2luZDo6STMyOiB7CiAgICAgICAgICAgICBqaXQubG9hZDY0KGpzUGFyYW0s
IHNjcmF0Y2hHUFIpOwpAQCAtMzA1LDcgKzMwNiw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygp
CiAgICAgICAgICAgICAgICAgc2NyYXRjaEZQUiA9IHdhc21DYWxsSW5mby5wYXJhbXNbaV0uZnBy
KCk7CiAgICAgICAgICAgICBhdXRvIG1vdmVUb0Rlc3RpbmF0aW9uID0gWyZdICgpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXNTdGFjaykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0
dXJlLmFyZ3VtZW50KGkpLmlzRjMyKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1
cmUuYXJndW1lbnRUeXBlKGkpLmlzRjMyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
c3RvcmVGbG9hdChzY3JhdGNoRlBSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21DYWxsSW5m
by5wYXJhbXNbaV0ub2Zmc2V0RnJvbVNQKCkpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHNjcmF0Y2hGUFIsIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQod2FzbUNhbGxJbmZvLnBhcmFtc1tpXS5vZmZzZXRGcm9tU1AoKSkp
OwpAQCAtMzE3LDEzICszMTgsMTMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAgICAgICAg
ICAgIGF1dG8gaXNJbnQzMiA9IGppdC5icmFuY2hJZkludDMyKHNjcmF0Y2hHUFIpOwogCiAgICAg
ICAgICAgICBqaXQudW5ib3hEb3VibGUoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQ
Uik7Ci0gICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLmlzRjMyKCkpCisgICAg
ICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKS5pc0YzMigpKQogICAgICAgICAg
ICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChzY3JhdGNoRlBSLCBzY3JhdGNoRlBSKTsK
ICAgICAgICAgICAgIG1vdmVUb0Rlc3RpbmF0aW9uKCk7CiAgICAgICAgICAgICBhdXRvIGRvbmUg
PSBqaXQuanVtcCgpOwogCiAgICAgICAgICAgICBpc0ludDMyLmxpbmsoJmppdCk7Ci0gICAgICAg
ICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLmlzRjMyKCkpIHsKKyAgICAgICAgICAgIGlm
IChzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLmlzRjMyKCkpIHsKICAgICAgICAgICAgICAgICBq
aXQuY29udmVydEludDMyVG9GbG9hdChzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKICAgICAgICAg
ICAgICAgICBtb3ZlVG9EZXN0aW5hdGlvbigpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTM5
Miw3ICszOTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgIGppdC5sb2FkUHRyKGVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24oKSwgc2NyYXRjaEdQUik7CiAgICAgaml0LmNhbGwoc2NyYXRj
aEdQUiwgV2FzbUVudHJ5UHRyVGFnKTsKIAotICAgIG1hcnNoYWxsSlNSZXN1bHQoaml0LCBzaWdu
YXR1cmUsIHdhc21DYWxsSW5mbywgc2F2ZWRSZXN1bHRSZWdpc3RlcnMpOworICAgIG1hcnNoYWxs
SlNSZXN1bHQoaml0LCB0eXBlRGVmaW5pdGlvbiwgd2FzbUNhbGxJbmZvLCBzYXZlZFJlc3VsdFJl
Z2lzdGVycyk7CiAKICAgICBBU1NFUlQoIVJlZ2lzdGVyU2V0OjpydW50aW1lVGFnUmVnaXN0ZXJz
KCkuY29udGFpbnMoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKSk7CiAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKQEAgLTQzMywxMCArNDM0LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAg
cmV0dXJuIG1fanNDYWxsRW50cnlwb2ludC5jb2RlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rp
b24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2Fs
bGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Okxv
YWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxlZSYganNFbnRyeXBv
aW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2Fz
bVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXgp
CiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlv
bihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgV2FzbUZ1bmN0aW9uSW50cmluc2ljLCBjYWxsSG9z
dEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlG
dW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJs
eUZ1bmN0aW9uPih2bSkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVu
Y3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2
bSkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCB0
eXBlSW5kZXgpOwogICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwg
bGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSk7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQpAQCAtNDQ3
LDggKzQ0OCw4IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlv
blR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlv
bjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNt
OjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKLSAgICA6IEJhc2UgeyB2bSwgZXhlY3V0
YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRp
b24gfSB9CitXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNt
OjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXgpCisgICAgOiBC
YXNlIHsgdm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBXYXNtOjpXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgdHlwZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2lu
dExvYWRMb2NhdGlvbiB9IH0KICAgICAsIG1fanNFbnRyeXBvaW50IHsganNFbnRyeXBvaW50LmVu
dHJ5cG9pbnQoKSB9CiB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCmluZGV4IDdjZGYyZWZkOWM0NGNhMmUwYmRmNTE5NDI4
NWRhNDUwNTY1MGFiZjYuLjY2OGYxNTJlMWIyMWU4ODBhMjBhZDU1YjgxZjAzYWE3YjcwYTZjNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHVuc2lnbmVkLCBjb25z
dCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlw
b2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uLCBXYXNtOjpT
aWduYXR1cmVJbmRleCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5
RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdW5zaWdu
ZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OkNhbGxlZSYg
anNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24s
IFdhc206OlR5cGVJbmRleCk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+IGpzRW50cnlwb2ludChBcml0eUNoZWNrTW9kZSBhcml0eSkK
QEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50
LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExv
YWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlR5cGVJbmRleCk7CiAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2lu
dFNsb3coKTsKICAgICBwdHJkaWZmX3QgcHJldmlvdXNJbnN0YW5jZU9mZnNldCgpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlLmgKaW5kZXggYmE3Y2IxNzY1YTI2ZTBiZjNlYTA3ZmRiYTg5OWY3MjFhYTg3NGQz
YS4uMWI3NDYyMzgwMmNjNzQ4ZjM2MDYzMTNlN2FlMDNkZmNjZDM5NzRlNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZS5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlLmdldCgpOyB9CiAKLSAgICBX
YXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW1w
b3J0YWJsZUZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4OyB9CisgICAgV2FzbTo6VHlwZUluZGV4IHR5
cGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLnR5cGVJbmRleDsg
fQogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBv
aW50TG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24uZW50
cnlwb2ludExvYWRMb2NhdGlvbjsgfQogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24g
aW1wb3J0YWJsZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb247
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAppbmRleCAwYjk2MzFlYTU0NjU0NWY3NmEz
MmU4NzJkMzk3OGUwZjU4YzgwOGVjLi5hOGUyMGM3OTAzN2E2NDM3YzFmNmZiZDdhYTEyNjkwMzIy
ZWU0MDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcApAQCAtNjYsNyArNjYsNyBAQCBK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseUdsb2JhbCwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBnbG9iYWxEZXNjcmlwdG9yID0ganNDYXN0
PEpTT2JqZWN0Kj4oYXJndW1lbnQpOwogICAgIH0KIAotICAgIFdhc206Okdsb2JhbEluZm9ybWF0
aW9uOjpNdXRhYmlsaXR5IG11dGFiaWxpdHk7CisgICAgV2FzbTo6TXV0YWJpbGl0eSBtdXRhYmls
aXR5OwogICAgIHsKICAgICAgICAgSWRlbnRpZmllciBtdXRhYmxlSWRlbnQgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAibXV0YWJsZSIpOwogICAgICAgICBKU1ZhbHVlIG11dGFibGVWYWx1
ZSA9IGdsb2JhbERlc2NyaXB0b3ItPmdldChnbG9iYWxPYmplY3QsIG11dGFibGVJZGVudCk7CkBA
IC03NCw5ICs3NCw5IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFz
c2VtYmx5R2xvYmFsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgIGJvb2wgbXV0
YWJsZUJvb2xlYW4gPSBtdXRhYmxlVmFsdWUudG9Cb29sZWFuKGdsb2JhbE9iamVjdCk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgICAgIGlmIChtdXRhYmxlQm9vbGVhbikKLSAgICAgICAgICAgIG11dGFiaWxpdHkgPSBXYXNt
OjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJsZTsKKyAgICAgICAgICAgIG11dGFiaWxpdHkgPSBX
YXNtOjpNdXRhYmxlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtdXRhYmlsaXR5ID0gV2Fz
bTo6R2xvYmFsSW5mb3JtYXRpb246OkltbXV0YWJsZTsKKyAgICAgICAgICAgIG11dGFiaWxpdHkg
PSBXYXNtOjpJbW11dGFibGU7CiAgICAgfQogCiAgICAgV2FzbTo6VHlwZSB0eXBlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90
b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9i
YWxQcm90b3R5cGUuY3BwCmluZGV4IDE4YTRkMWY5MWRmZmU0ZDQ4NWJjNjdjOTkxMWJiODA0ZDIz
OWNkYTEuLjcyOGRjYTgwMDZkMGY3ODVlZTFiZTgxM2FiMjY4NzI0MTE2NWFkMGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90
eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUds
b2JhbFByb3RvdHlwZS5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04od2ViQXNzZW1ibHlHbG9iYWxQcm90b1NldHRlckZ1bmNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KgogICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwqIGdsb2JhbCA9IGdldEdsb2JhbChnbG9iYWxP
YmplY3QsIHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCi0gICAgaWYgKGdsb2JhbC0+Z2xv
YmFsKCktPm11dGFiaWxpdHkoKSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0
eTo6SW1tdXRhYmxlKQorICAgIGlmIChnbG9iYWwtPmdsb2JhbCgpLT5tdXRhYmlsaXR5KCkgPT0g
V2FzbTo6TXV0YWJpbGl0eTo6SW1tdXRhYmxlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgIldlYkFzc2VtYmx5Lkdsb2JhbC5wcm90b3R5cGUudmFsdWUgYXR0
ZW1wdHMgdG8gbW9kaWZ5IGltbXV0YWJsZSBnbG9iYWwgdmFsdWUiX3MpKSk7CiAKICAgICBnbG9i
YWwtPmdsb2JhbCgpLT5zZXQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAppbmRleCA3ZmE4MWU3OTczMmIyMjU1NjMyYTc0OGY2OTJlYmFhYjk4
M2Q1ZjdiLi5kZmE5MzFlMmQ4ZGQ0OWU1OTRlMmZhOTViNDZkNTdhNmQxMWYyMTJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1v
ZHVsZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJPYmplY3RD
b25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVu
Y3Rpb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yMDcsMTggKzIwNywxOCBAQCB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKUwogICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24q
IHdhc21XcmFwcGVyRnVuY3Rpb247CiAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RG
dW5jdGlvbih2bSwgZnVuY3Rpb24sIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikp
IHsKICAgICAgICAgICAgICAgICAvLyBhLiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3Qg
bWF0Y2ggdGhlIHNpZ25hdHVyZSBvZiBpLCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4K
LSAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUlu
ZGV4OworICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBpbXBvcnRlZFR5cGVJbmRleDsK
ICAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7
CisgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkVHlwZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT50
eXBlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgY2FsbGVlSW5zdGFuY2UgPSAmd2FzbUZ1
bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICBlbnRy
eXBvaW50TG9hZExvY2F0aW9uID0gd2FzbUZ1bmN0aW9uLT5lbnRyeXBvaW50TG9hZExvY2F0aW9u
KCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0
ZWRTaWduYXR1cmVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7
CisgICAgICAgICAgICAgICAgICAgIGltcG9ydGVkVHlwZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5j
dGlvbi0+dHlwZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJl
IGJlIHYuW1tDbG9zdXJlXV0uCiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gd2FzbVdy
YXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24oKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVs
ZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZElu
ZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBl
Y3RlZFNpZ25hdHVyZUluZGV4KQorICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBleHBl
Y3RlZFR5cGVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uVHlwZUluZGlj
ZXNbaW1wb3J0LmtpbmRJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGltcG9ydGVkVHlwZUlu
ZGV4ICE9IGV4cGVjdGVkVHlwZUluZGV4KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1w
b3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0ZWQgZnVuY3Rpb24iLCAic2lnbmF0dXJlIGRv
ZXNuJ3QgbWF0Y2ggdGhlIHByb3ZpZGVkIFdlYkFzc2VtYmx5IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJl
IikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNlOgpAQCAt
MjM3LDEyICsyMzcsMTIgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6
ZUltcG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlMKICAgICAgICAgY2FzZSBX
YXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2JhbDogewogICAgICAgICAgICAgLy8gNS4gSWYgaSBpcyBh
IGdsb2JhbCBpbXBvcnQ6CiAgICAgICAgICAgICBjb25zdCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlv
biYgZ2xvYmFsID0gbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XTsK
LSAgICAgICAgICAgIGlmIChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1h
dGlvbjo6SW1tdXRhYmxlKSB7CisgICAgICAgICAgICBpZiAoZ2xvYmFsLm11dGFiaWxpdHkgPT0g
V2FzbTo6SW1tdXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluaGVyaXRzPEpT
V2ViQXNzZW1ibHlHbG9iYWw+KHZtKSkgewogICAgICAgICAgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5R2xvYmFsKiBnbG9iYWxWYWx1ZSA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4odmFs
dWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsVmFsdWUtPmdsb2JhbCgpLT50eXBl
KCkgIT0gZ2xvYmFsLnR5cGUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0
RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0ZWQgZ2xvYmFsIiwgIm11c3QgYmUgYSBzYW1lIHR5
cGUiKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsVmFsdWUtPmdsb2JhbCgpLT5t
dXRhYmlsaXR5KCkgIT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkltbXV0YWJsZSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGdsb2JhbFZhbHVlLT5nbG9iYWwoKS0+bXV0YWJpbGl0eSgpICE9
IFdhc206OkltbXV0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRp
b24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRG
YWlsTWVzc2FnZShpbXBvcnQsICJpbXBvcnRlZCBnbG9iYWwiLCAibXVzdCBiZSBhIHNhbWUgbXV0
YWJpbGl0eSIpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGRlY2xhcmVkR2xv
YmFsVHlwZSA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlw
ZTsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkZWNsYXJlZEdsb2JhbFR5cGUua2luZCkg
ewpAQCAtMjcwLDggKzI3MCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRp
YWxpemVJbXBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdh
c206OmlzUmVmV2l0aFR5cGVJbmRleChkZWNsYXJlZEdsb2JhbFR5cGUpICYmICF2YWx1ZS5pc051
bGwoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJ
bmRleCBwYXJhbUluZGV4ID0gZ2xvYmFsLnR5cGUuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9u
ID8gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpIDogd2FzbVdyYXBwZXJGdW5jdGlvbi0+
c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2FzbTo6
VHlwZUluZGV4IHBhcmFtSW5kZXggPSBnbG9iYWwudHlwZS5pbmRleDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9u
ID8gd2FzbUZ1bmN0aW9uLT50eXBlSW5kZXgoKSA6IHdhc21XcmFwcGVyRnVuY3Rpb24tPnR5cGVJ
bmRleCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1JbmRleCAh
PSBhcmdJbmRleCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBp
bXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBvcnRlZCBnbG9iYWwiLCAiQXJndW1lbnQgZnVu
Y3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUgcmVmZXJlbmNlIHR5cGUiKSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTMyNCw4ICszMjQsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjppbml0aWFsaXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChXYXNtOjppc1JlZldpdGhUeXBlSW5kZXgoZ2xvYmFsVHlwZSkgJiYgIXZh
bHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhc206OlNp
Z25hdHVyZUluZGV4IHBhcmFtSW5kZXggPSBnbG9iYWwudHlwZS5pbmRleDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggYXJnSW5kZXggPSB3YXNt
RnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCkgOiB3YXNtV3JhcHBlckZ1
bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXYXNtOjpUeXBlSW5kZXggcGFyYW1JbmRleCA9IGdsb2JhbC50eXBlLmluZGV4OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNtOjpUeXBlSW5kZXggYXJnSW5kZXggPSB3YXNt
RnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24tPnR5cGVJbmRleCgpIDogd2FzbVdyYXBwZXJGdW5jdGlv
bi0+dHlwZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJh
bUluZGV4ICE9IGFyZ0luZGV4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVj
dCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIGdsb2JhbCIsICJBcmd1
bWVudCBmdW5jdGlvbiBkaWQgbm90IG1hdGNoIHRoZSByZWZlcmVuY2UgdHlwZSIpKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzg2LDkgKzM4Niw5IEBAIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJbXBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTCiAgICAgICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgICAgICByZXR1
cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2
bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiVGFnIGltcG9ydCIsICJpcyBub3QgYW4gaW5z
dGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFnIikpKTsKIAotICAgICAgICAgICAgV2FzbTo6U2lnbmF0
dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9y
dEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbaW1wb3J0LmtpbmRJbmRleF07CisgICAgICAgICAg
ICBXYXNtOjpUeXBlSW5kZXggZXhwZWN0ZWRUeXBlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5p
bXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKIAotICAgICAgICAg
ICAgaWYgKGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggIT0gdGFnLT50YWcoKS5zaWduYXR1cmUoKS5p
bmRleCgpKQorICAgICAgICAgICAgaWYgKGV4cGVjdGVkVHlwZUluZGV4ICE9IHRhZy0+dGFnKCku
dHlwZUluZGV4KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dl
YkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGlt
cG9ydCwgImltcG9ydGVkIFRhZyIsICJzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0
ZWQgV2ViQXNzZW1ibHkgVGFnJ3Mgc2lnbmF0dXJlIikpKTsKIAogICAgICAgICAgICAgbV9pbnN0
YW5jZS0+aW5zdGFuY2UoKS5zZXRUYWcoaW1wb3J0LmtpbmRJbmRleCwgdGFnLT50YWcoKSk7CkBA
IC00ODEsOSArNDgxLDkgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6
ZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAvLyBUaGlzIG5lZWRz
IHRvIGJlIGxvb2tlZCB1cCBhZnRlciB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkLCBhcyB0aGUg
Y29kZUJsb2NrIGRlcGVuZHMgb24gdGhlIG1lbW9yeSBtb2RlLgogICAgIFdhc206OkNhbGxlZUdy
b3VwKiBjYWxsZWVHcm91cCA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuY2FsbGVlR3JvdXAoKTsK
IAotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1vZHVsZUluZm9ybWF0aW9u
LmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7ICsraW5kZXgpIHsKLSAg
ICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1h
dGlvbi5pbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbaW5kZXhdOwotICAgICAgICBt
X2luc3RhbmNlLT5pbnN0YW5jZSgpLnNldFRhZyhtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRFeGNl
cHRpb25Db3VudCgpICsgaW5kZXgsIFdhc206OlRhZzo6Y3JlYXRlKFdhc206OlNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgbW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxFeGNlcHRpb25UeXBlSW5k
aWNlcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgV2FzbTo6VHlwZUluZGV4IHR5cGVJbmRl
eCA9IG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRXhjZXB0aW9uVHlwZUluZGljZXNbaW5kZXhd
OworICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnNldFRhZyhtb2R1bGVJbmZvcm1hdGlv
bi5pbXBvcnRFeGNlcHRpb25Db3VudCgpICsgaW5kZXgsIFdhc206OlRhZzo6Y3JlYXRlKFdhc206
OlR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCkpKTsKICAgICB9CiAKICAgICB1bnNpZ25l
ZCBmdW5jdGlvbkltcG9ydENvdW50ID0gY2FsbGVlR3JvdXAtPmZ1bmN0aW9uSW1wb3J0Q291bnQo
KTsKQEAgLTUwMiw4ICs1MDIsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0
aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAg
aWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkKICAgICAg
ICAgICAgICAgICB3cmFwcGVyID0gZnVuY3Rpb25JbXBvcnQ7CiAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1v
ZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKLSAgICAg
ICAgICAgICAgICB3cmFwcGVyID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
U3RydWN0dXJlKCksIGZ1bmN0aW9uSW1wb3J0LCBpbmRleCwgbV9pbnN0YW5jZS5nZXQoKSwgc2ln
bmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXgg
PSBtb2R1bGUtPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOworICAgICAg
ICAgICAgICAgIHdyYXBwZXIgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgZnVuY3Rpb25JbXBvcnQsIGluZGV4LCBtX2luc3RhbmNlLmdldCgpLCB0eXBl
SW5kZXgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
ICBpaWkuIE90aGVyd2lzZToKQEAgLTUxMiw5ICs1MTIsOSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogICAgICAgICAgICAgLy8gICAgIGMuIFJldHVybiBmdW5jLgogICAgICAgICAgICAgV2FzbTo6
Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjYWxsZWVHcm91cC0+ZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CiAgICAgICAgICAg
ICBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlw
b2ludExvYWRMb2NhdGlvbiA9IGNhbGxlZUdyb3VwLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7Ci0gICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25J
bmRleFNwYWNlKGluZGV4KTsKLSAgICAgICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2Vt
Ymx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgbWFrZVN0
cmluZyhpbmRleCksIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwg
ZW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgV2Fz
bTo6VHlwZUluZGV4IHR5cGVJbmRleCA9IG1vZHVsZS0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShpbmRleCk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBXYXNt
OjpUeXBlSW5mb3JtYXRpb246OmdldEZ1bmN0aW9uU2lnbmF0dXJlKHR5cGVJbmRleCk7CisgICAg
ICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rp
b246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgbWFrZVN0cmluZyhp
bmRleCksIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlw
b2ludExvYWRMb2NhdGlvbiwgdHlwZUluZGV4KTsKICAgICAgICAgICAgIHdyYXBwZXIgPSBmdW5j
dGlvbjsKICAgICAgICAgfQogCkBAIC01NDksOCArNTQ5LDggQEAgdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewotICAg
ICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZv
cm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7Ci0gICAgICAgICAgICAgICAgUmVmPFdhc206
Okdsb2JhbD4gZ2xvYmFsUmVmID0gV2FzbTo6R2xvYmFsOjpjcmVhdGUoZ2xvYmFsLnR5cGUsIFdh
c206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlLCBpbml0aWFsQml0cyk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Ok11dGFi
bGUpOworICAgICAgICAgICAgICAgIFJlZjxXYXNtOjpHbG9iYWw+IGdsb2JhbFJlZiA9IFdhc206
Okdsb2JhbDo6Y3JlYXRlKGdsb2JhbC50eXBlLCBXYXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlLCBp
bml0aWFsQml0cyk7CiAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCogZ2xvYmFs
VmFsdWUgPSBKU1dlYkFzc2VtYmx5R2xvYmFsOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwg
Z2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUdsb2JhbFN0cnVjdHVyZSgpLCBXVEZNb3ZlKGdsb2Jh
bFJlZikpOwogICAgICAgICAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAg
ICAgICAgICAgICAgbV9pbnN0YW5jZS0+bGlua0dsb2JhbCh2bSwgZ2xvYmFsSW5kZXgsIGdsb2Jh
bFZhbHVlKTsKQEAgLTYwNSwxMiArNjA1LDEyIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQ6OmluaXRpYWxpemVFeHBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAg
ICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1dlYkFzc2VtYmx5R2xvYmFsOjp0cnlD
cmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUdsb2JhbFN0
cnVjdHVyZSgpLCBXVEZNb3ZlKGdsb2JhbFJlZikpOwogICAgICAgICAgICAgICAgICAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZv
cm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKICAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPFdhc206Okdsb2JhbD4gZ2xvYmFsUmVmID0gbV9pbnN0YW5j
ZS0+aW5zdGFuY2UoKS5nZXRHbG9iYWxCaW5kaW5nKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoZ2xvYmFsUmVmKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGdsb2JhbFJlZi0+dHlwZSgpID09IGdsb2JhbC50eXBlKTsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGdsb2JhbFJlZi0+bXV0YWJpbGl0eSgpID09IGdsb2JhbC5tdXRhYmlsaXR5KTsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbFJlZi0+bXV0YWJpbGl0eSgpID09IFdhc206
Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGdsb2JhbFJlZi0+bXV0YWJpbGl0eSgpID09IFdhc206Ok11dGFiaWxpdHk6
Ok11dGFibGUpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsUmVmLT5vd25lcjxK
U1dlYkFzc2VtYmx5R2xvYmFsPigpKTsKICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1
ZSA9IGdsb2JhbFJlZi0+b3duZXI8SlNXZWJBc3NlbWJseUdsb2JhbD4oKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC02NTAsOCArNjUwLDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6
aW5pdGlhbGl6ZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBib29s
IGhhc1N0YXJ0ID0gISFtb2R1bGVJbmZvcm1hdGlvbi5zdGFydEZ1bmN0aW9uSW5kZXhTcGFjZTsK
ICAgICBpZiAoaGFzU3RhcnQpIHsKICAgICAgICAgYXV0byBzdGFydEZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IG1vZHVsZUluZm9ybWF0aW9uLnN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlLnZhbHVlX29yKDAp
OwotICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+
c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNw
YWNlKTsKLSAgICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgV2FzbTo6
VHlwZUluZGV4IHR5cGVJbmRleCA9IG1vZHVsZS0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgICAgIGNvbnN0IGF1dG8mIHNpZ25h
dHVyZSA9IFdhc206OlR5cGVJbmZvcm1hdGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1cmUodHlwZUlu
ZGV4KTsKICAgICAgICAgLy8gVGhlIHN0YXJ0IGZ1bmN0aW9uIG11c3Qgbm90IHRha2UgYW55IGFy
Z3VtZW50cyBvciByZXR1cm4gYW55dGhpbmcuIFRoaXMgaXMgZW5mb3JjZWQgYnkgdGhlIHBhcnNl
ci4KICAgICAgICAgQVNTRVJUKCFzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKICAgICAgICAg
QVNTRVJUKHNpZ25hdHVyZS5yZXR1cm5zVm9pZCgpKTsKQEAgLTY2MSw3ICs2NjEsNyBAQCB2b2lk
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgV2FzbTo6Q2Fs
bGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjYWxsZWVHcm91cC0+ZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFj
ZSk7CiAgICAgICAgICAgICBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2Fk
TG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNhbGxlZUdyb3VwLT5lbnRyeXBvaW50
TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFj
ZSk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFz
c2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0
YXJ0IiwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBv
aW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0IiwgbV9pbnN0YW5jZS5nZXQoKSwgZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCB0eXBlSW5kZXgp
OwogICAgICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcAppbmRleCA3NGRhMDVmMjcxNzVk
ZTI4OTBjNTljZmJhMDU4NmJhOWU1YTkwMDM4Li5kNGYxMzMwMTY4NzczZTM5YTYyZTZjNDIyNDQ3
NjVhOTMwNGRkZmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0cnVjdG9yLmNwcApAQCAtODQsOSArODQsOSBAQCBK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseVRhZywgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgIH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKLSAgICBSZWZQdHI8V2FzbTo6U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBX
YXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlRm9yKHsgfSwgcGFyYW1ldGVycyk7
CisgICAgUmVmUHRyPFdhc206OlR5cGVEZWZpbml0aW9uPiB0eXBlRGVmaW5pdGlvbiA9IFdhc206
OlR5cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JGdW5jdGlvbih7IH0sIHBhcmFtZXRl
cnMpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlNDX0dFVF9ERVJJVkVEX1NUUlVDVFVS
RSh2bSwgd2ViQXNzZW1ibHlUYWdTdHJ1Y3R1cmUsIGFzT2JqZWN0KGNhbGxGcmFtZS0+bmV3VGFy
Z2V0KCkpLCBjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206OlRhZzo6Y3JlYXRlKCpzaWduYXR1cmUpLmdldCgpKSkp
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNz
ZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206OlRhZzo6
Y3JlYXRlKCp0eXBlRGVmaW5pdGlvbikuZ2V0KCkpKSk7CiB9CiAKIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihjYWxsSlNXZWJBc3NlbWJseVRhZywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSopKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCmluZGV4IDJmYjZhNGVjN2Ji
NjI3YThjYjg3ZWQ4ZGY0YmU0NTk1N2QxZmM5YmYuLjYwZmYxNDU3NTg3YTQ3YTVlMDM0ZTkzYjU4
NjkxOGUxMTlkNjdkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKQEAgLTMwLDcgKzMwLDcg
QEAKIAogI2luY2x1ZGUgIkpTT2JqZWN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
NDIsMTMgKzQyLDEzIEBAIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqCiAgICAgOiBCYXNlKHZtLCBl
eGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgaW1wb3J0YWJsZUZ1bmN0aW9uKQog
eyB9CiAKLVdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBmdW5jdGlvbiwgdW5zaWduZWQgaW1wb3J0SW5kZXgs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OlNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbXBv
cnRJbmRleCwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6VHlwZUluZGV4
IHR5cGVJbmRleCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aW5oZXJp
dHM8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtKSwgIldlIHNob3VsZCBuZXZlciBkb3Vi
bGUgd3JhcCBhIHdyYXBwZXIgZnVuY3Rpb24uIik7CiAgICAgU3RyaW5nIG5hbWUgPSAiIjsKICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25B
c0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24+KHZtKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGV4ZWN1dGFi
bGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsICZpbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5j
dGlvbkluZm8oaW1wb3J0SW5kZXgpLT53YXNtVG9FbWJlZGRlclN0dWIgfSApOwotICAgIGNvbnN0
IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJl
c3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uPih2bSkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiB7
IHR5cGVJbmRleCwgJmluc3RhbmNlLT5pbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBv
cnRJbmRleCktPndhc21Ub0VtYmVkZGVyU3R1YiB9ICk7CisgICAgY29uc3QgYXV0byYgc2lnbmF0
dXJlID0gV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZSh0eXBlSW5k
ZXgpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBpbnN0YW5jZSk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCmluZGV4IDhkZDE4M2NjMjJkMWQwZTgwZjhl
MzQ4NDg4MjY4OWVhOTY3Yzg0YzcuLmFlYmM3MmZkMzQ1OTY2NTY0MGNkMjZhNDk2OTkwOWFmM2Q3
M2Y5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAK
ICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqLCB1
bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6U2lnbmF0
dXJlSW5kZXgpOworICAgIHN0YXRpYyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogY3JlYXRl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCosIHVuc2lnbmVkIGlt
cG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpUeXBlSW5kZXgpOwogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSk7CiAKICAgICBKU09iamVjdCogZnVuY3Rpb24oKSB7IHJldHVybiBtX2Z1bmN0aW9u
LmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KaW5kZXggY2FiZGUyMGFl
Y2VhNjM0NTM5Y2Q4MGI0Y2ExYTEzMTM4ODM2YTEwOC4uYzZlZTY3ZmQwZTBjMGI0NWNmODMwYjRk
Mzc0ZDFlMjZhZjQ1NDQ0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
d2FzbS5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgpAQCAt
MTYsNiArMTYsNyBAQAogICAgICAgICAicmVmX251bGwiOiAgeyAidHlwZSI6ICJ2YXJpbnQ3Iiwg
InZhbHVlIjogIC0yMCwgImIzdHlwZSI6ICJCMzo6SW50NjQiIH0sCiAgICAgICAgICJyZWYiOiAg
ICAgICB7ICJ0eXBlIjogInZhcmludDciLCAidmFsdWUiOiAgLTIxLCAiYjN0eXBlIjogIkIzOjpJ
bnQ2NCIgfSwKICAgICAgICAgImZ1bmMiOiAgICAgIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1
ZSI6ICAtMzIsICJiM3R5cGUiOiAiQjM6OlZvaWQiIH0sCisgICAgICAgICJzdHJ1Y3QiOiAgICB7
ICJ0eXBlIjogInZhcmludDciLCAidmFsdWUiOiAgLTMzLCAiYjN0eXBlIjogIkIzOjpWb2lkIiB9
LAogICAgICAgICAidm9pZCI6ICAgICAgeyAidHlwZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC02
NCwgImIzdHlwZSI6ICJCMzo6Vm9pZCIgfQogICAgIH0sCiAgICAgInZhbHVlX3R5cGUiOiBbImkz
MiIsICJpNjQiLCAiZjMyIiwgImY2NCIsICJleHRlcm5yZWYiLCAiZnVuY3JlZiJdLApkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA5Nzk3MDc0
NWRmZjZmNmI5NDI5NDg2NDgwNjZkNjRhYzgzZTRkMGQxLi43NTg5MTk3OTNlNmIwYmRjYWQyMmYx
OWE1ZTVhMTY2OWFiZjdmZmIyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9K
U1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAzLTMwICBEbWl0cnkgQmV6
aGV0c2tvdiAgPGRiZXpoZXRza292QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1dBU00tR0NdIFdJ
UDogaW50cm9kdWNlIHN0cnVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNzAyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIHN0cnVjdHMgZGVjbGFyYXRpb24gdGVzdHMuCisKKyAgICAgICAg
KiB3YXNtLnlhbWw6CisgICAgICAgICogd2FzbS93YXNtLmpzb246CisKIDIwMjItMDMtMjEgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBDaGFuZ2Ug
RGF0ZS5wYXJzZSB0byBzdG9wIHJldHVybmluZyBudW1iZXJzIHdpdGggZnJhY3Rpb25hbCBwYXJ0
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20ueWFtbCBiL0pTVGVzdHMvd2FzbS55YW1sCmluZGV4
IGFlZWJiYzA0Y2Q5ZDg0ODc0ZjIzNDFhMWIxMThiYzljZWJhM2VhZmQuLjljZDQwZWJmOThiOTM5
ZjFiMGY3Yjc0MDJlNmQwMTUxMzBhNDk0ODIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS55YW1s
CisrKyBiL0pTVGVzdHMvd2FzbS55YW1sCkBAIC0zNSw2ICszNSw4IEBACiAgIGNtZDogcnVuV2Vi
QXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogLSBwYXRoOiB3YXNtL2Z1bmN0
aW9uLXJlZmVyZW5jZXMKICAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJzZVJ1
bkNvbW1hbmRzCistIHBhdGg6IHdhc20vZ2MKKyAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVu
bGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAtIHBhdGg6IHdhc20vZnV6egogICBjbWQ6IHJ1bldlYkFz
c2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9sb3dFeGVj
dXRhYmxlTWVtb3J5CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzbS5qc29uIGIvSlNUZXN0
cy93YXNtL3dhc20uanNvbgppbmRleCAzMmM4YWY4YmJmNTdlYTYwNWIzMzU1YTU2ZDg4MmU4ZGRl
MWUwZWVkLi43NDI4MTJjZGViMDNkNWE1NDg0NWEwNzdhYmIxZDc0YjUyN2ZlNTM1IDEwMDY0NAot
LS0gYS9KU1Rlc3RzL3dhc20vd2FzbS5qc29uCisrKyBiL0pTVGVzdHMvd2FzbS93YXNtLmpzb24K
QEAgLTE2LDYgKzE2LDcgQEAKICAgICAgICAgInJlZl9udWxsIjogIHsgInR5cGUiOiAidmFyaW50
NyIsICJ2YWx1ZSI6ICAtMjAsICJiM3R5cGUiOiAiQjM6OkludDY0IiB9LAogICAgICAgICAicmVm
IjogICAgICAgeyAidHlwZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0yMSwgImIzdHlwZSI6ICJC
Mzo6SW50NjQiIH0sCiAgICAgICAgICJmdW5jIjogICAgICB7ICJ0eXBlIjogInZhcmludDciLCAi
dmFsdWUiOiAgLTMyLCAiYjN0eXBlIjogIkIzOjpWb2lkIiB9LAorICAgICAgICAic3RydWN0Ijog
ICAgeyAidHlwZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0zMywgImIzdHlwZSI6ICJCMzo6Vm9p
ZCIgfSwKICAgICAgICAgInZvaWQiOiAgICAgIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6
ICAtNjQsICJiM3R5cGUiOiAiQjM6OlZvaWQiIH0KICAgICB9LAogICAgICJ2YWx1ZV90eXBlIjog
WyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQiLCAiZXh0ZXJucmVmIiwgImZ1bmNyZWYiXSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456328</attachid>
            <date>2022-03-31 23:57:37 -0700</date>
            <delta_ts>2022-04-03 00:45:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237029-20220401135734.patch</filename>
            <type>text/plain</type>
            <size>296160</size>
            <attacher name="Dmitry">dbezhetskov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyMjA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MWUyNTU0ZGQ5MDY5YWRmYTUwYzJlYjIyMmVjMTMwYTM0YzE1MGFhLi4yZWY4OGY5ZGZkM2YxM2Fl
NDA3YjIzMGQ5ODEyYzA2MDc5N2FmOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMDYgQEAKKzIwMjItMDMtMzEgIERtaXRyeSBCZXpoZXRza292ICA8ZGJlemhldHNrb3ZA
aWdhbGlhLmNvbT4KKworICAgICAgICBbV0FTTS1HQ10gSW50cm9kdWNlIHN0cnVjdHMgdHlwZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzAyOQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVj
ZSBzdHJ1Y3QgdHlwZXMgdmlhIGV4dGVuZGluZyBleGlzdGluZyBTaWduYXR1cmUgaW5mcmFzdHJ1
Y3R1cmUuCisgICAgICAgIFNpZ25hdHVyZSBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiBX
YXNtIGZ1bmN0aW9uIHR5cGVzIGFuZCB3ZSB1c2UgdGhlbQorICAgICAgICB0byBjb21wYXJlIHNp
Z25hdHVyZXMgZnJvbSBkaWZmZXJlbnQgd2FzbSBtb2R1bGVzLiBTaWduYXR1cmVzIGFyZSBoZWxk
IGdsb2JhbGx5CisgICAgICAgIGluIGEgaGFzaCBzZXQgYW5kIGhhdmUgb25lIHBvaW50IG9mIGFj
Y2Vzcy4KKworICAgICAgICBXaXRoIEdDIHByb3Bvc2FsIGFuZCBuZXcgc3RydWN0IHR5cGVzIHdl
IHdhbnQgdG8gcmVwcmVzZW50IG5ldyB0eXBlcyB1bmlmb3JtbHkgd2l0aCBleGlzdGluZworICAg
ICAgICBTaWduYXR1cmUgaW5mcmFzdHJ1Y3R1cmUuIFNvLCBpbiB0aGlzIHBhdGNoIHdlIGV4dGVu
ZCBTaWduYXR1cmUgY2xhc3Mgd2l0aCB0d28gb3B0aW9ucyAtCisgICAgICAgIEZ1bmN0aW9uU2ln
bmF0dXJlIGFuZCBTdHJ1Y3RUeXBlLiBGdW5jdGlvblNpZ25hdHVyZSAoY2FuIGJlIG5hbWVkIGFz
IEZ1bmN0aW9uVHlwZSkgaXMgYQorICAgICAgICByZXByZXNlbnRhdGlvbiBvZiBzaWduYXR1cmVz
IGFzIGl0IHdhcyBiZWZvcmUgdGhlIHBhdGNoIGFuZCBTdHJ1Y3RUeXBlIGlzIGEgbmV3IG9wdGlv
biB3aGljaAorICAgICAgICBpcyByZXByZXNlbnRpbmcgc3RydWN0IHR5cGVzIGZyb20gR0MgcHJv
cG9zYWwuIEdlbmVyYWxseSBzcGVha2luZyB3ZSByZXBsYWNlIFNpZ25hdHVyZSBjbGFzcworICAg
ICAgICB3aXRoIG5ldyBhbGdlYnJhaWMgdHlwZSBUeXBlRGVmaW5pdGlvbiA9IFNpZ25hdHVyZSB8
IFN0cnVjdFR5cGUuCisKKyAgICAgICAgVGhpcyByZXByZXNlbnRhdGlvbiBvZiBzdHJ1Y3QgdHlw
ZXMgYWxsb3dzIHVzIG5vdCB0byBjaGFuZ2UgV2FzbVR5cGUgcmVwcmVzZW50YXRpb24gYW5kIAor
ICAgICAgICB1bmlmb3JtbHkgc3RvcmUgRnVuY3Rpb25UeXBlIChha2EgRnVuY3Rpb25TaWduYXR1
cmUpIG9yIFN0cnVjdFR5cGUuIE5ldyBvcHRpb25zIGZvciB0eXBlcywKKyAgICAgICAgZm9yIGV4
YW1wbGUgYXJyYXlzLCBhbHNvIGNhbiBiZSBlYXNpbHkgYWRkZWQuIEFsc28sIHdlIHNhdmUgbWVt
b3J5IGJlY2F1c2Ugd2UgcmV1c2UgZXhpc3RpbmcKKyAgICAgICAgdW5pcXVlbmVzcyBvZiBzaWdu
YXR1cmVzLiBBZGRpdGlvbmFsbHkgd2UgY2FuIGNvbXBhcmUgZGlmZmVyZW50IHN0cnVjdCB0eXBl
cyBhcyBmYXN0IGFzIHdlIGRvIGl0IGZvciAKKyAgICAgICAgc2lnbmF0dXJlcy4KKworICAgICAg
ICBBcyBTaWduYXR1cmUgY2xhc3Mgbm93IGRvZXNuJ3Qgb25seSBob2xkcyBTaWduYXR1cmUgaXQg
aGFzIGJlZW4gcmVuYW1lZCBpbnRvIFR5cGVEZWZpbml0aW9uLgorICAgICAgICBBbGwgY29ycmVz
cG9uZGluZyBzaWduYXR1cmUgcmVsYXRlZCB0aGluZ3MgYWxzbyBoYXZlIGJlZW4gcmVuYW1lZC4K
KworICAgICAgICBUbyBhY2Nlc3Mgc3BlY2lmaWMgb3B0aW9uIHR3byBjbGFzc2VzIHdhcyBpbnRy
b2R1Y2VkIFN0cnVjdFR5cGUgYW5kIEZ1bmN0aW9uU2lnbmF0dXJlLCBzbyBUeXBlRGVmaW5pdGlv
bgorICAgICAgICBjYW4gYmUgY2FzdGVkIHRvIHNwZWNpZmljIG9wdGlvbiBhbmQgb25seSB2aWEg
aXQgb3B0aW9uIG1ldGhvZHMgb2YgdGhhdCBvcHRpb24gY2FuIGJlIGNhbGxlZC4KKyAgICAgICAg
VGhpcyBpcyBkb25lIHdpdGggcHJlc2VydmluZyB0aGUgY2FjaGUtbG9jYWxpdHkgb3B0aW1pemF0
aW9uIGZvciBhbGxvY2F0aW9uIHNpZ25hdHVyZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1
bXBlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVjb2RlRHVtcGVyOjpkdW1wQmxvY2sp
OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBydW50aW1l
L09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmJyYW5jaFRh
cmdldEFyaXR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNv
bnRyb2xEYXRhOjpicmFuY2hUYXJnZXRUeXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjp0bXBzRm9yU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRSZWZGdW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6Omdl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpzZXRHbG9iYWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2gpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFJldHVybik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZENhbGxSZWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5k
Q29tcGlsZUFpcik6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6Omhhc05vblZvaWRyZXN1bHQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6YnJhbmNoVGFy
Z2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6ZW1pdEluZGlyZWN0Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmdldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnNldEdsb2Jh
bCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Y3JlYXRlQ2FsbFBhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbFJlZik6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUIzKToK
KyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNt
QkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dh
c21DYWxsZWUuaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmNhbGxJbmZvcm1hdGlvbkZv
ciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ2FsbGluZ0NvbnZlbnRpb246OmNhbGxJ
bmZvcm1hdGlvbkZvciBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtRW1iZWRkZXIuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21FbnRyeVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpFbnRy
eVBsYW46OnByZXBhcmUpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAo
SlNDOjpXYXNtOjppc0V4dGVybnJlZik6CisgICAgICAgIChKU0M6Oldhc206OmlzRnVuY3JlZik6
CisgICAgICAgIChKU0M6Oldhc206OmZ1bmNyZWZUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
ZXh0ZXJucmVmVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206Oldhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3I6OmFkZFNpZ25hdHVyZSk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpzcGxpdFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OnNpZ25hdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcik6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSk6CisgICAgICAgIChK
U0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmlmeSk6CisgICAgICAgIChKU0M6
Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4
cHJlc3Npb24pOgorICAgICAgICAqIHdhc20vV2FzbUdsb2JhbC5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Okdsb2JhbDo6c2V0KToKKyAgICAgICAgKiB3YXNtL1dhc21HbG9iYWwuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojppbml0RWxlbWVudFNlZ21lbnQpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjps
b29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpi
bG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6
aWZfKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpj
cmVhdGVUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5
cGU6OmNyZWF0ZUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNv
bnRyb2xUeXBlOjpicmFuY2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcik6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjplbmRUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjphZGRDYWxsUmVmKToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5oOgor
ICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxM
SW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFu
OjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoK
KyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1
bGU6OnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmg6CisgICAgICAgICogd2Fz
bS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjp0
eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2VwdGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25G
cm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZUluZm9ybWF0aW9uOjp0eXBlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjppbXBvcnRGdW5jdGlvbkNvdW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmludGVybmFs
RnVuY3Rpb25Db3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjppbXBvcnRFeGNlcHRpb25Db3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZUluZm9ybWF0aW9uOjppbnRlcm5hbEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OnR5cGVDb3VudCBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbjo6c2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Ok9NR1BsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbU9TUkVudHJ5UGxhbi5j
cHA6CisgICAgICAgIChKU0M6Oldhc206Ok9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICog
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAg
ICAqIHdhc20vV2FzbVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpQYXJzZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vzc1R5cGU+
OjpwYXJzZUJsb2NrU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyPFN1Y2Nl
c3NUeXBlPjo6cGFyc2VIZWFwVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxTdWNj
ZXNzVHlwZT46OnBhcnNlVmFsdWVUeXBlKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlv
blBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJz
ZXI6OnBhcnNlRnVuY3Rpb25UeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VTdHJ1Y3RUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6
cGFyc2VHbG9iYWxUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFy
c2VFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25QYXJzZXIuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21TaWduYXR1cmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vV2Fz
bVNpZ25hdHVyZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50Ojpkb1dhc21DYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlND
OjpMTEludDo6V0FTTV9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpkb1dh
c21DYWxsUmVmKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAg
ICAgICAqIHdhc20vV2FzbVN0cmVhbWluZ1BsYW4uY3BwOgorICAgICAgICAqIHdhc20vV2FzbVRh
YmxlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY1JlZlRhYmxlOjpGdW5jUmVmVGFibGUpOgorICAgICAgICAqIHdhc20vV2Fz
bVRhZy5oOgorICAgICAgICAqIHdhc20vV2FzbVR5cGVEZWZpbml0aW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjp0b1N0cmluZyBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpTdHJ1Y3RUeXBlOjp0b1N0cmluZyBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlN0
cnVjdFR5cGU6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpjb21wdXRlU2lnbmF0
dXJlSGFzaCk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVTdHJ1Y3RUeXBlSGFzaCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjpoYXNoIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OnRyeUNyZWF0ZUZ1bmN0aW9uU2lnbmF0dXJlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OnRyeUNyZWF0ZVN0cnVjdFR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlSW5mb3JtYXRpb246OlR5cGVJbmZvcm1hdGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyYW1ldGVyVHlwZXM6Omhhc2gpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcmFtZXRlclR5cGVzOjplcXVhbCk6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uUGFyYW1ldGVyVHlwZXM6OnRyYW5zbGF0ZSk6CisgICAgICAg
IChKU0M6Oldhc206OlN0cnVjdFBhcmFtZXRlclR5cGVzOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6U3RydWN0UGFyYW1ldGVyVHlwZXM6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
U3RydWN0UGFyYW1ldGVyVHlwZXM6OnRyYW5zbGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlR5
cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JGdW5jdGlvbik6CisgICAgICAgIChKU0M6
Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JTdHJ1Y3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUeXBlSW5mb3JtYXRpb246OnRyeUNsZWFudXApOgorICAgICAgICAqIHdh
c20vV2FzbVR5cGVEZWZpbml0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5j
dGlvblNpZ25hdHVyZTo6RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblNpZ25hdHVyZTo6YXJndW1lbnRDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uU2lnbmF0dXJlOjpyZXR1cm5Db3VudCBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OkZ1bmN0aW9uU2lnbmF0dXJlOjpyZXR1cm5UeXBlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnJldHVybnNWb2lkIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OmFyZ3VtZW50VHlwZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkZ1bmN0aW9uU2lnbmF0dXJlOjpnZXRSZXR1cm5UeXBlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OmdldEFyZ3VtZW50VHlwZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkZ1bmN0aW9uU2lnbmF0dXJlOjpzdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnN0b3JhZ2UgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpTdHJ1Y3RGaWVsZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlN0cnVjdEZpZWxkOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
U3RydWN0VHlwZTo6U3RydWN0VHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OlN0cnVjdFR5cGU6
OmZpZWxkQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJ1Y3RUeXBlOjpmaWVs
ZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cnVjdFR5cGU6OmdldEZpZWxkKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U3RydWN0VHlwZTo6c3RvcmFnZSk6CisgICAgICAgIChKU0M6Oldh
c206OlN0cnVjdFR5cGU6OnN0b3JhZ2UgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBl
RGVmaW5pdGlvbjo6VHlwZURlZmluaXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlRGVm
aW5pdGlvbjo6cGF5bG9hZCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjph
bGxvY2F0ZWRGdW5jdGlvblNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlRGVmaW5pdGlv
bjo6YWxsb2NhdGVkU3RydWN0U2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0
aW9uOjppcyBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjphcyk6
CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjphcyBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjppbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OlR5cGVEZWZpbml0aW9uOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VHlwZUhhc2g6OlR5cGVIYXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZUhhc2g6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlSGFzaDo6ZXF1YWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6Oldh
c206OlR5cGVIYXNoOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6dGh1bmtGb3IgY29uc3QpOgorICAgICAgICAqIHdh
c20vV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZUlubGluZXMuaC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6VHlwZUluZm9ybWF0aW9uOjpzaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBl
SW5mb3JtYXRpb246OmdldCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6
Z2V0RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3BzSGVh
ZGVyLnB5OgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpX
YXNtOjptYXJzaGFsbEpTUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNUb1dh
c21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmg6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseUV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uOjpnZXRBcmcgY29uc3QpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseUdsb2JhbC5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlHbG9iYWw6OnR5
cGUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6ZnJvbUpTVmFsdWUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3kpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjp0eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Z2VuZXJh
dGVXYXNtVG9KU1N0dWJzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6c2ln
bmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWcuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuaDoK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OnVzZXNUYWdS
ZWdpc3RlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0Nh
bGxFbnRyeXBvaW50U2xvdyk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVu
Y3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaDoKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2U6OnR5cGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpzaWduYXR1cmVJbmRleCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJ
bXBvcnRzKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxp
emVFeHBvcnRzKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg6CisgICAgICAgICogd2FzbS93YXNtLmpzb246CisK
IDIwMjItMDMtMzEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZG9wdCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKEFTQ0lJTGl0ZXJhbCkgbW9yZSBicm9hZGx5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMjlhN2FmOWEyZGU2ODYyOWI3OGYw
MjBmMWQ5ZDgxNzA5ZGEzYjI1ZS4uMjNjNGE3NGY4ODY4NjNhMWVmY2UwYjNjYTM2YmYxNjYxM2Vm
NDk1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTI0Myw3ICsxMjQz
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICB3
YXNtL1dhc21PU1JFbnRyeURhdGEuaAogICAgIHdhc20vV2FzbVBhZ2VDb3VudC5oCiAgICAgd2Fz
bS9XYXNtU2VjdGlvbnMuaAotICAgIHdhc20vV2FzbVNpZ25hdHVyZS5oCisgICAgd2FzbS9XYXNt
VHlwZURlZmluaXRpb24uaAogICAgIHdhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmgKICAgICB3
YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuaAogICAgIHdhc20vV2FzbVRpZXJVcENvdW50LmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCAwNTA2OWM1NDg5MjQ4YTdkMDJjNTc2ZDAwYjkz
MTIxNmE0MDNlYTI2Li4zMzQ1Mjg5MTcyODM0MTRkZDQzOTNjYzc2ODM3ZmU0Mjk1OGVhNTNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xMTAzLDcgKzExMDMsNyBAQCB3YXNtL1dh
c21PcGVyYXRpb25zLmNwcAogd2FzbS9XYXNtUGFnZUNvdW50LmNwcAogd2FzbS9XYXNtUGxhbi5j
cHAKIHdhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCi13YXNtL1dhc21TaWduYXR1cmUuY3BwCit3
YXNtL1dhc21UeXBlRGVmaW5pdGlvbi5jcHAKIHdhc20vV2FzbVNsb3dQYXRocy5jcHAKIHdhc20v
V2FzbVN0cmVhbWluZ0NvbXBpbGVyLmNwcAogd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
aW5kZXggMDhhMjM1ODA0NGZkNjM1OTcwMzIzYjAxMmM5Yzg3ZTM5NWUzZTY5OC4uZDU0Yzc0ZmM2
M2M2NTBlMDhkNzRmNDc5N2M5MTExZDM1NjI2NzZiYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAj
aW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2Fz
bUdlbmVyYXRvclRyYWl0cy5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgot
I2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZp
bml0aW9uSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzQ5LDkgKzM0OSw5IEBA
IHZvaWQgQnl0ZWNvZGVEdW1wZXI6OmR1bXBCbG9jayhGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRv
ciogYmxvY2ssIGNvbnN0IE1vZHVsZUluCiAgICAgb3V0LnByaW50KG1ha2VTdHJpbmcoSW5kZXhP
ck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtb2R1bGVJbmZvcm1hdGlvbi5uYW1lU2VjdGlvbi0+
Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKSk7CiAKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbiA9
IG1vZHVsZUluZm9ybWF0aW9uLmZ1bmN0aW9uc1tibG9jay0+ZnVuY3Rpb25JbmRleCgpXTsKLSAg
ICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmludGVy
bmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Jsb2NrLT5mdW5jdGlvbkluZGV4KCldOwotICAg
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChz
aWduYXR1cmVJbmRleCk7Ci0gICAgb3V0LnByaW50KCIgOiAiLCBzaWduYXR1cmUsICJcbiIpOwor
ICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbnRlcm5hbEZ1bmN0
aW9uVHlwZUluZGljZXNbYmxvY2stPmZ1bmN0aW9uSW5kZXgoKV07CisgICAgY29uc3QgYXV0byYg
dHlwZURlZmluaXRpb24gPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBlSW5kZXgpOworICAgIG91
dC5wcmludCgiIDogIiwgdHlwZURlZmluaXRpb24sICJcbiIpOwogICAgIG91dC5wcmludCgid2Fz
bSBzaXplOiAiLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgIiBieXRlc1xuIik7CiAKICAgICBvdXQu
cHJpbnRmKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3Qu
cmIKaW5kZXggYjk2MmIyOGNlNjJmMmM4MTdjNjQxZjdiZjk0MTBlNTZjZjEwNzAyMC4uNGU1OWU5
ZjkwNzc5NjU1Zjc0MTU1Yjg5NWJkNWUzOGUwMTQ3MzFmOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0xNjg5LDcgKzE2ODksNyBAQCBv
cCA6Y2FsbF9ub190bHMsCiBvcCA6Y2FsbF9pbmRpcmVjdCwKICAgICBhcmdzOiB7CiAgICAgICAg
IGZ1bmN0aW9uSW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgc2lnbmF0dXJlSW5kZXg6
IHVuc2lnbmVkLAorICAgICAgICB0eXBlSW5kZXg6IHVuc2lnbmVkLAogICAgICAgICBzdGFja09m
ZnNldDogdW5zaWduZWQsCiAgICAgICAgIG51bWJlck9mU3RhY2tBcmdzOiB1bnNpZ25lZCwKICAg
ICAgICAgdGFibGVJbmRleDogdW5zaWduZWQsCkBAIC0xNjk4LDcgKzE2OTgsNyBAQCBvcCA6Y2Fs
bF9pbmRpcmVjdCwKIG9wIDpjYWxsX2luZGlyZWN0X25vX3RscywKICAgICBhcmdzOiB7CiAgICAg
ICAgIGZ1bmN0aW9uSW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgc2lnbmF0dXJlSW5k
ZXg6IHVuc2lnbmVkLAorICAgICAgICB0eXBlSW5kZXg6IHVuc2lnbmVkLAogICAgICAgICBzdGFj
a09mZnNldDogdW5zaWduZWQsCiAgICAgICAgIG51bWJlck9mU3RhY2tBcmdzOiB1bnNpZ25lZCwK
ICAgICAgICAgdGFibGVJbmRleDogdW5zaWduZWQsCkBAIC0xNzA3LDcgKzE3MDcsNyBAQCBvcCA6
Y2FsbF9pbmRpcmVjdF9ub190bHMsCiBvcCA6Y2FsbF9yZWYsCiAgICAgYXJnczogewogICAgICAg
ICBmdW5jdGlvblJlZmVyZW5jZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBzaWduYXR1cmVJ
bmRleDogdW5zaWduZWQsCisgICAgICAgIHR5cGVJbmRleDogdW5zaWduZWQsCiAgICAgICAgIHN0
YWNrT2Zmc2V0OiB1bnNpZ25lZCwKICAgICAgICAgbnVtYmVyT2ZTdGFja0FyZ3M6IHVuc2lnbmVk
LAogICAgIH0KQEAgLTE3MTUsNyArMTcxNSw3IEBAIG9wIDpjYWxsX3JlZiwKIG9wIDpjYWxsX3Jl
Zl9ub190bHMsCiAgICAgYXJnczogewogICAgICAgICBmdW5jdGlvblJlZmVyZW5jZTogVmlydHVh
bFJlZ2lzdGVyLAotICAgICAgICBzaWduYXR1cmVJbmRleDogdW5zaWduZWQsCisgICAgICAgIHR5
cGVJbmRleDogdW5zaWduZWQsCiAgICAgICAgIHN0YWNrT2Zmc2V0OiB1bnNpZ25lZCwKICAgICAg
ICAgbnVtYmVyT2ZTdGFja0FyZ3M6IHVuc2lnbmVkLAogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IGM0ZGQ0MDY2MjU1NjU1ZDliMGM2NTU4
OTEyNThlZGZlMzU2ZjYyMmYuLmIwMGE3NjdkYzI3OTZlMDMyYzgyZGFkOTAzOTc2YmExOGJlOWE1
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApAQCAt
NTQ3LDYgKzU0Nyw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCk7CiAgICAg
dihCb29sLCB1c2VUZW1wb3JhbCwgZmFsc2UsIE5vcm1hbCwgIkV4cG9zZSB0aGUgVGVtcG9yYWwg
b2JqZWN0LiIpIFwKICAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5VGhyZWFkaW5nLCB0cnVlLCBO
b3JtYWwsICJBbGxvdyBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgd2FzbSB0aHJlYWRpbmcgc3BlYy4i
KSBcCiAgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rpb25SZWZlcmVuY2VzLCBm
YWxzZSwgTm9ybWFsLCAiQWxsb3cgZnVuY3Rpb24gdHlwZXMgZnJvbSB0aGUgd2FzbSB0eXBlZCBm
dW5jdGlvbiByZWZlcmVuY2VzIHNwZWMuIikgXAorICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlH
QywgZmFsc2UsIE5vcm1hbCwgIkFsbG93IGdjIHR5cGVzIGZyb20gdGhlIHdhc20gZ2MgcHJvcG9z
YWwuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zLCB0cnVlLCBOb3Jt
YWwsICJBbGxvdyB0aGUgbmV3IHNlY3Rpb24gYW5kIGluc3RydWN0aW9ucyBmcm9tIHRoZSB3YXNt
IGV4Y2VwdGlvbiBoYW5kbGluZyBzcGVjLiIpIFwKICAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5
QnJhbmNoSGludHMsIHRydWUsIE5vcm1hbCwgIkFsbG93IHRoZSBuZXcgc2VjdGlvbiBmcm9tIHRo
ZSB3YXNtIGJyYW5jaCBoaW50aW5nIHNwZWMuIikgXAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAppbmRleCAyZDcyOWFlMjVlZDMyNGE1
NzJjN2VkM2RkNGYwZmI0MmJhYTUzMmIzLi4wMWRiMjhiYjNiMzJjNzMxNWZiYWFmZDM5ZTM4NmQ3
YWUxYTI4YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWly
SVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHAKQEAgLTU1LDggKzU1LDggQEAKICNpbmNsdWRlICJXYXNtT1NSRW50cnlE
YXRhLmgiCiAjaW5jbHVkZSAiV2FzbU9wY29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIldhc21PcGVy
YXRpb25zLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJX
YXNtVGh1bmtzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgpAQCAtMjE4LDE5ICsyMTgsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgc3Bl
Y2lhbCA9IG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBTaWduYXR1cmVBcmdDb3VudCBi
cmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0CisgICAgICAgIEZ1bmN0aW9uQXJnQ291bnQgYnJhbmNo
VGFyZ2V0QXJpdHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYmxvY2tUeXBl
KCkgPT0gQmxvY2tUeXBlOjpMb29wKQotICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBl
LT5hcmd1bWVudENvdW50KCk7Ci0gICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS0+cmV0dXJu
Q291bnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25T
aWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5U
eXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsKICAgICAgICAgfQog
CiAgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAogICAgICAg
ICB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOwogICAgICAg
ICAgICAgaWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0dXJuVHlwZS0+YXJndW1lbnQoaSk7Ci0gICAgICAgICAgICByZXR1cm4gcmV0
dXJuVHlwZS0+cmV0dXJuVHlwZShpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlw
ZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKKyAgICAgICAgICAg
IHJldHVybiByZXR1cm5UeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZShp
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgY29udmVydFRyeVRvQ2F0Y2godW5zaWduZWQg
dHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhjZXB0aW9uKQpAQCAtMzIzLDExICszMjMs
MTEgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhaWwoX19WQV9BUkdTX18pOyAgICAg
ICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAgIEFpcklSR2VuZXJhdG9yKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2RlLCB1bnNpZ25lZCBmdW5jdGlv
bkluZGV4LCBUaWVyVXBDb3VudCosIGNvbnN0IFNpZ25hdHVyZSYsIHVuc2lnbmVkJiBvc3JFbnRy
eVNjcmF0Y2hCdWZmZXJTaXplKTsKKyAgICBBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZv
cm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwg
VGllclVwQ291bnQqLCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIHVuc2lnbmVkJiBvc3JFbnRyeVNj
cmF0Y2hCdWZmZXJTaXplKTsKIAogICAgIHZvaWQgZmluYWxpemVFbnRyeXBvaW50cygpOwogCi0g
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNp
Z25hdHVyZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3Vt
ZW50cyhjb25zdCBUeXBlRGVmaW5pdGlvbiYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHByZXNzaW9uVHlwZSBh
ZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3Rh
bnQoQmFzaWNCbG9jayosIFR5cGUsIHVpbnQ2NF90KTsKQEAgLTM5Myw4ICszOTMsOCBAQCBwdWJs
aWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRWxzZVRvVW5yZWFj
aGFibGUoQ29udHJvbERhdGEmKTsKIAogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250cm9s
VHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWdu
YXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOwotICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2godW5zaWdu
ZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgU3RhY2smLCBDb250cm9s
VHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5
cGVEZWZpbml0aW9uJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CiAgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2smLCBDb250cm9sVHlwZSYp
OwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsVG9VbnJl
YWNoYWJsZShDb250cm9sVHlwZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVU
VVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsKQEAgLTQxMSwxMiAr
NDExLDEyIEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBl
bmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSwgY29uc3QgU3RhY2smKSB7IHJldHVybiB7IH07IH0K
IAogICAgIC8vIENhbGxzCi0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7Ci0gICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExp
c3QmIHJlc3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
bGxSZWYoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVz
dWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFi
bGVJbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYWxsUmVmKGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBlbWl0SW5kaXJlY3RDYWxsKFR5cGVkVG1wIGNhbGxlZUluc3RhbmNl
LCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7Ci0gICAgc3RkOjpwYWlyPEIz
OjpQYXRjaHBvaW50VmFsdWUqLCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBXQVJOX1VOVVNF
RF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqLCBjb25zdCBTaWduYXR1cmUm
LCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdz
LCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGV4dHJhQXJncyA9IHsgfSk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChUeXBlZFRtcCBjYWxsZWVJ
bnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSwgY29uc3QgVHlwZURlZmluaXRpb24m
LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CisgICAg
c3RkOjpwYWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
PiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqLCBjb25z
dCBUeXBlRGVmaW5pdGlvbiYsIGNvbnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNvbnN0IFZlY3Rv
cjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gZXh0cmFBcmdzID0geyB9
KTsKIAogICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoVHlwZSwgQjM6OkFpcjo6T3Bjb2RlLCBF
eHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hpZnQsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdlclN1YihCMzo6QWlyOjpPcGNv
ZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUgcmhzLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KTsKQEAgLTU0MSw5ICs1NDEsOSBAQCBwcml2YXRlOgogCiAgICAgUmVzdWx0TGlz
dCB0bXBzRm9yU2lnbmF0dXJlKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkKICAgICB7Ci0gICAg
ICAgIFJlc3VsdExpc3QgcmVzdWx0KHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkK
LSAgICAgICAgICAgIHJlc3VsdFtpXSA9IHRtcEZvclR5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBl
KGkpKTsKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHQoc2lnbmF0dXJlLT5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpOyAr
K2kpCisgICAgICAgICAgICByZXN1bHRbaV0gPSB0bXBGb3JUeXBlKHNpZ25hdHVyZS0+YXM8RnVu
Y3Rpb25TaWduYXR1cmU+KCktPnJldHVyblR5cGUoaSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIApAQCAtOTMzLDcgKzkzMyw3IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3Rv
cmVXYXNtQ29udGV4dEluc3RhbmNlKEJhc2ljQmxvY2sqIGJsb2NrLCBUeXBlZFRtcCBpbnN0CiAg
ICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CiB9
CiAKLUFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRlcm5hbEZ1bmN0aW9uKiBjb21w
aWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBD
b3VudCogdGllclVwLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgdW5zaWduZWQmIG9zckVu
dHJ5U2NyYXRjaEJ1ZmZlclNpemUpCitBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50
ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgVHlwZURlZmluaXRpb24mIHNp
Z25hdHVyZSwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCiAgICAgOiBtX2lu
Zm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0
aW9uSW5kZXgpCkBAIC0xMDM5LDkgKzEwMzksOSBAQCBBaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5l
cmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHBybwog
ICAgIG1fY3VycmVudEJsb2NrID0gbV9tYWluRW50cnlwb2ludFN0YXJ0OwogCiAgICAgQVNTRVJU
KCFtX2xvY2Fscy5zaXplKCkpOwotICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCk7ICsraSkgewotICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQo
aSk7CisgICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCkt
PmFyZ3VtZW50Q291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAg
ICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVu
dFR5cGUoaSk7CiAgICAgICAgIG1fbG9jYWxzW2ldID0gdG1wRm9yVHlwZSh0eXBlKTsKICAgICB9
CiAKQEAgLTEwNTAsNyArMTA1MCw3IEBAIEFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHdhc21DYWxsSW5mby5wYXJhbXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgQjM6OlZhbHVlUmVwIGxvY2F0aW9uID0gd2FzbUNhbGxJbmZvLnBhcmFtc1tpXTsK
ICAgICAgICAgQXJnIGFyZyA9IGxvY2F0aW9uLmlzUmVnKCkgPyBBcmcoVG1wKGxvY2F0aW9uLnJl
ZygpKSkgOiBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgbG9jYXRp
b24ub2Zmc2V0RnJvbUZQKCkpOwotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChp
KS5raW5kKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5hcmd1bWVudFR5cGUoaSkua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6
CiAgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCBhcmcsIG1fbG9jYWxzW2ldKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTEyNywxNiArMTEyNywxNiBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjpm
aW5hbGl6ZUVudHJ5cG9pbnRzKCkKIAogQjM6OlR5cGUgQWlySVJHZW5lcmF0b3I6OnRvQjNSZXN1
bHRUeXBlKEJsb2NrU2lnbmF0dXJlIHJldHVyblR5cGUpCiB7Ci0gICAgaWYgKHJldHVyblR5cGUt
PnJldHVybnNWb2lkKCkpCisgICAgaWYgKHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5yZXR1cm5zVm9pZCgpKQogICAgICAgICByZXR1cm4gQjM6OlZvaWQ7CiAKLSAgICBpZiAo
cmV0dXJuVHlwZS0+cmV0dXJuQ291bnQoKSA9PSAxKQotICAgICAgICByZXR1cm4gdG9CM1R5cGUo
cmV0dXJuVHlwZS0+cmV0dXJuVHlwZSgwKSk7CisgICAgaWYgKHJldHVyblR5cGUtPmFzPEZ1bmN0
aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpID09IDEpCisgICAgICAgIHJldHVybiB0b0Iz
VHlwZShyZXR1cm5UeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZSgwKSk7
CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fdHVwbGVNYXAuZW5zdXJlKHJldHVyblR5cGUsIFsmXSB7
CiAgICAgICAgIFZlY3RvcjxCMzo6VHlwZT4gcmVzdWx0OwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmV0dXJuVHlwZS0+cmV0dXJuQ291bnQoKTsgKytpKQotICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh0b0IzVHlwZShyZXR1cm5UeXBlLT5yZXR1cm5UeXBlKGkpKSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXR1cm5UeXBlLT5hczxGdW5jdGlvblNpZ25h
dHVyZT4oKS0+cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0
b0IzVHlwZShyZXR1cm5UeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZShp
KSkpOwogICAgICAgICByZXR1cm4gbV9wcm9jLmFkZFR1cGxlKFdURk1vdmUocmVzdWx0KSk7CiAg
ICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CkBAIC0xMjg4LDkgKzEy
ODgsOSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCb3R0b20oQmFzaWNCbG9jayogYmxvY2ss
IFR5cGUgdHlwZSkgLT4gRXhwcmVzc2lvblR5cGUKICAgICByZXR1cm4gYWRkQ29uc3RhbnQodHlw
ZSwgMCk7CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQXJndW1lbnRzKGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2Fscy5zaXplKCkgPT0gc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSk7IC8vIFdlIGhhbmRsZSBhcmd1bWVudHMgaW4gdGhlIHByb2xvZ3Vl
CisgICAgUkVMRUFTRV9BU1NFUlQobV9sb2NhbHMuc2l6ZSgpID09IHNpZ25hdHVyZS5hczxGdW5j
dGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpKTsgLy8gV2UgaGFuZGxlIGFyZ3VtZW50
cyBpbiB0aGUgcHJvbG9ndWUKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xMzEwLDggKzEzMTAs
OCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aQogewogICAgIC8vIEZJWE1FOiBFbWl0IHRoaXMg
aW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NTA2Pi4K
ICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcygp
KSB7Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25h
dHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7Ci0gICAgICAgIHJlc3VsdCA9
IHRtcEZvclR5cGUoVHlwZSB7IFR5cGVLaW5kOjpSZWYsIE51bGxhYmxlOjpObywgc2lnbmF0dXJl
SW5kZXggfSk7CisgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBtX2luZm8udHlwZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CisgICAgICAgIHJlc3VsdCA9IHRtcEZvclR5
cGUoVHlwZSB7IFR5cGVLaW5kOjpSZWYsIE51bGxhYmxlOjpObywgdHlwZUluZGV4IH0pOwogICAg
IH0gZWxzZQogICAgICAgICByZXN1bHQgPSB0bXBGb3JUeXBlKFR5cGVzOjpGdW5jcmVmKTsKICAg
ICBlbWl0Q0NhbGwoJm9wZXJhdGlvbldhc21SZWZGdW5jLCByZXN1bHQsIGluc3RhbmNlVmFsdWUo
KSwgYWRkQ29uc3RhbnQoVHlwZXM6OkkzMiwgaW5kZXgpKTsKQEAgLTE2MjQsNyArMTYyNCw3IEBA
IGF1dG8gQWlySVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkgLT4gUGFydGlhCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOgotICAg
ICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246
Ok11dGFiaWxpdHk6Ok11dGFibGUpOworICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkg
PT0gV2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRB
ZGRyRm9ybShvZmZzZXQsIEIzOjpXaWR0aDY0KSkKICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBB
cmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwgdGVtcCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTY2NCw3
ICsxNjY0LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFIKICAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXYXNtOjpH
bG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOgotICAgICAgICBBU1NFUlQo
Z2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6
Ok11dGFibGUpOworICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6TXV0
YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZz
ZXQsIEIzOjpXaWR0aDY0KSkKICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIodGVt
cCwgb2Zmc2V0KSwgdGVtcCk7CiAgICAgICAgIGVsc2UgewpAQCAtMzIyOSw3ICszMjI5LDcgQEAg
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgU3Rh
Y2smIGVuY2xvc2luZ1N0YWNrLCBDb24KICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24m
IHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3Vs
dExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICB1bmlmeVZhbHVlc1dpdGhC
bG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0cyk7CiAgICAgYXBwZW5kKEp1bXApOwpAQCAt
MzI0NSwxMSArMzI0NSwxMSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaEFsbChTdGFj
ayYgY3VycmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydAogICAgIHJldHVybiBh
ZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0YSk7CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRz
KSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFj
aGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWdu
YXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFs
UmVzdWx0CiB7CiAgICAgVG1wIGJ1ZmZlciA9IGVtaXRDYXRjaEltcGwoQ2F0Y2hLaW5kOjpDYXRj
aCwgZGF0YSwgZXhjZXB0aW9uSW5kZXgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgVHlwZSB0eXBlID0gc2ln
bmF0dXJlLmFyZ3VtZW50KGkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1
cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAg
ICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1l
bnRUeXBlKGkpOwogICAgICAgICBUeXBlZFRtcCB0bXAgPSB0bXBGb3JUeXBlKHR5cGUpOwogICAg
ICAgICBlbWl0TG9hZChidWZmZXIsIGkgKiBzaXplb2YodWludDY0X3QpLCB0bXApOwogICAgICAg
ICByZXN1bHRzLmFwcGVuZCh0bXApOwpAQCAtMzQxOSw3ICszNDE5LDcgQEAgYXV0byBBaXJJUkdl
bmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYg
cmV0dXJuVmFsdWUKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChyZXAuaXNSZWcoKSk7Ci0g
ICAgICAgIGlmIChkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLmlzSTMyKCkpCisgICAg
ICAgIGlmIChkYXRhLnNpZ25hdHVyZSgpLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJu
VHlwZShpKS5pc0kzMigpKQogICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgdG1wLCB0bXApOwog
ICAgICAgICByZXR1cm5Db25zdHJhaW50cy5hcHBlbmQoQ29uc3RyYWluZWRUbXAodG1wLCB3YXNt
Q2FsbEluZm8ucmVzdWx0c1tpXSkpOwogICAgIH0KQEAgLTM1NTUsMTcgKzM1NTUsMTcgQEAgYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5
LCBjb25zdCBTdGFjayYgZXhwcmUKIAogICAgIGlmIChkYXRhLmJsb2NrVHlwZSgpID09IEJsb2Nr
VHlwZTo6TG9vcCkgewogICAgICAgICBtX291dGVyTG9vcHMucmVtb3ZlTGFzdCgpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQo
KTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVy
ZSgpLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CiAgICAg
ICAgICAgICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkpCiAgICAgICAgICAgICAgICAg
ZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7
CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBUeXBlIHR5cGUgPSBkYXRhLnNp
Z25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAgICAgICAgIFR5cGUgdHlwZSA9IGRh
dGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpOwog
ICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFu
ZEFwcGVuZCh0eXBlLCBhZGRCb3R0b20obV9jdXJyZW50QmxvY2ssIHR5cGUpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgICAg
ICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5z
aWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSwgZGF0YS5yZXN1bHRzW2ldKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0
dXJlPigpLT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4
cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+YXM8RnVu
Y3Rpb25TaWduYXR1cmU+KCktPnJldHVyblR5cGUoaSksIGRhdGEucmVzdWx0c1tpXSk7CiAgICAg
fQogCiAgICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkgY29kZSBhZnRlciB0aGlzIHNv
IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4gaGVyZS4KQEAgLTM1NzUsNyAr
MzU3NSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJv
bEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlCiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
c3RkOjpwYWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
PiBBaXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29u
c3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBwYXRjaEFy
Z3MpCitzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGU+IEFpcklSR2VuZXJhdG9yOjplbWl0Q2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayogYmxv
Y2ssIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIGNvbnN0IFJlc3VsdExpc3QmIHJl
c3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRt
cD4gcGF0Y2hBcmdzKQogewogICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KHRv
QjNSZXN1bHRUeXBlKCZzaWduYXR1cmUpKTsKICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRl
c1Bpbm5lZCA9IHRydWU7CkBAIC0zNjA1LDE0ICszNjA1LDE0IEBAIHN0ZDo6cGFpcjxCMzo6UGF0
Y2hwb2ludFZhbHVlKiwgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gQWlySVJHZW5lcmF0b3I6
OmVtaXRDCiAgICAgcmV0dXJuIHsgcGF0Y2hwb2ludCwgZXhjZXB0aW9uSGFuZGxlIH07CiB9CiAK
LWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJl
c3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mIHNp
Z25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0
cykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpID09IGFyZ3Muc2l6ZSgpKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogCiAgICAgbV9tYWtl
c0NhbGxzID0gdHJ1ZTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUu
cmV0dXJuQ291bnQoKTsgKytpKQotICAgICAgICByZXN1bHRzLmFwcGVuZCh0bXBGb3JUeXBlKHNp
Z25hdHVyZS5yZXR1cm5UeXBlKGkpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
Z25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsgKytpKQorICAg
ICAgICByZXN1bHRzLmFwcGVuZCh0bXBGb3JUeXBlKHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25h
dHVyZT4oKS0+cmV0dXJuVHlwZShpKSkpOwogCiAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzOwogCkBAIC0zNzA4LDEwICszNzA4LDEwIEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENh
bGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAg
ICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJ
bmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOwotICAgIEFTU0VS
VChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKKyAgICBBU1NFUlQo
c2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkgPT0gYXJn
cy5zaXplKCkpOwogICAgIEFTU0VSVChtX2luZm8udGFibGVDb3VudCgpID4gdGFibGVJbmRleCk7
CiAgICAgQVNTRVJUKG1faW5mby50YWJsZXNbdGFibGVJbmRleF0udHlwZSgpID09IFRhYmxlRWxl
bWVudFR5cGU6OkZ1bmNyZWYpOwogCkBAIC0zNzYxLDcgKzM3NjEsNyBAQCBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNuJ3QuIEFuICJpbnZh
bGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlhbGl6ZWQuCiAgICAg
ICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0
IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCi0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OnNpZ25hdHVyZUlu
ZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTY0Iik7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
OnR5cGVJbmRleCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkxvYWQgY29kZWdlbiBhc3N1bWVzIGk2
NCIpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdhc3RlZnVsIHRvIGRvIHR3byBj
aGVja3MganVzdCBmb3IgYSBuaWNlciBlcnJvciBtZXNzYWdlLgogICAgICAgICAvLyBXZSBzaG91
bGQgbW92ZSBqdXN0IHRvIHVzZSBhIHNpbmdsZSBicmFuY2ggYW5kIHRoZW4gZmlndXJlIG91dCB3
aGF0CkBAIC0zNzcwLDE0ICszNzcwLDE0IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJ
bmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAgICAg
ICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0dXJlSW5kZXgsIFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSksIGNhbGxlZVNp
Z25hdHVyZUluZGV4KTsKIAogICAgICAgICBlbWl0Q2hlY2soWyZdIHsKLSAgICAgICAgICAgIHN0
YXRpY19hc3NlcnQoU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggPT0gMCk7CisgICAgICAgICAgICBz
dGF0aWNfYXNzZXJ0KCFUeXBlRGVmaW5pdGlvbjo6aW52YWxpZEluZGV4LCAiIik7CiAgICAgICAg
ICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0NjQsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNy
b0Fzc2VtYmxlcjo6WmVybyksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBjYWxsZWVTaWduYXR1cmVJ
bmRleCk7CiAgICAgICAgIH0sIFs9LCB0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICB0aGlzLT5lbWl0VGhy
b3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7CiAgICAgICAg
IH0pOwogCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBn
NjQoKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlKSksIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBh
cHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oVHlwZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSks
IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBlbWl0Q2hlY2soWyZdIHsKICAgICAg
ICAgICAgIHJldHVybiBJbnN0KEJyYW5jaDY0LCBudWxscHRyLCBBcmc6OnJlbENvbmQoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsKSwgY2FsbGVlU2lnbmF0dXJlSW5kZXgsIGV4cGVjdGVkU2lnbmF0
dXJlSW5kZXgpOwogICAgICAgICB9LCBbPSwgdGhpc10gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewpAQCAtMzc5MSw3ICszNzkxLDcgQEAg
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICByZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChjYWxs
ZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwgc2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKTsKIH0KIAot
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBUeXBl
RGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1
bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgbV9tYWtlc0NhbGxzID0g
dHJ1ZTsKICAgICAvLyBOb3RlOiBjYWxsIHJlZiBjYW4gY2FsbCBlaXRoZXIgV2ViQXNzZW1ibHlG
dW5jdGlvbiBvciBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi4gQmVjYXVzZQpAQCAtMzgxOSw3
ICszODE5LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXAKICAgICByZXR1cm4gZW1pdEluZGly
ZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwgc2lnbmF0dXJlLCBhcmdzLCByZXN1
bHRzKTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChUeXBlZFRt
cCBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3Vs
dExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmVt
aXRJbmRpcmVjdENhbGwoVHlwZWRUbXAgY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNh
bGxlZUNvZGUsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBhdXRvIGN1cnJlbnRJbnN0YW5jZSA9IGc2NCgpOwogICAgIGFwcGVuZChNb3Zl
LCBpbnN0YW5jZVZhbHVlKCksIGN1cnJlbnRJbnN0YW5jZSk7CkBAIC0zODczLDggKzM4NzMsOCBA
QCBhdXRvIEFpcklSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFR5cGVkVG1wIGNhbGxlZUlu
c3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYQogICAgIFZlY3RvcjxDb25zdHJhaW5lZFRtcD4gZXh0
cmFBcmdzOwogICAgIGV4dHJhQXJncy5hcHBlbmQoY2FsbGVlQ29kZSk7CiAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKLSAgICAgICAg
cmVzdWx0cy5hcHBlbmQodG1wRm9yVHlwZShzaWduYXR1cmUucmV0dXJuVHlwZShpKSkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+
KCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQodG1wRm9yVHlw
ZShzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVyblR5cGUoaSkpKTsKIAog
ICAgIGF1dG8gcGFpciA9IGVtaXRDYWxsUGF0Y2hwb2ludChtX2N1cnJlbnRCbG9jaywgc2lnbmF0
dXJlLCByZXN1bHRzLCBhcmdzLCBXVEZNb3ZlKGV4dHJhQXJncykpOwogICAgIGF1dG8qIHBhdGNo
cG9pbnQgPSBwYWlyLmZpcnN0OwpAQCAtMzk0NCw3ICszOTQ0LDcgQEAgYXV0byBBaXJJUkdlbmVy
YXRvcjo6b3JpZ2luKCkgLT4gQjM6Ok9yaWdpbgogICAgIHJldHVybiBCMzo6T3JpZ2luKCk7CiB9
CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBw
YXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQs
IGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxz
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwKQorRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21w
aWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBm
dW5jdGlvbiwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2Vk
V2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5m
b3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
VGllclVwQ291bnQqIHRpZXJVcCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8SW50
ZXJuYWxGdW5jdGlvbj4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUFpcklSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuaAppbmRleCAwYjhlZjQwYTBmNjQzMzYzNDIzNTBhODU1ZDk0MWVhYTNj
MTNiZTVlLi4wZTdiNTU1YmM4ZGE3MWE5YmVkNDlmMmYzM2ZjZDg1MmU2OWE0YTBlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaApAQCAtMzEs
NyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi1FeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21w
aWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNp
Z25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291
bnQqID0gbnVsbHB0cik7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlv
bj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0
IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDU3MGRmMzZmYjI0OWFmOTNlZTA5ZTQ1NWVkY2VkMDEw
NTAzOWZmOWIuLjM3NTQyNjE1N2Q4OGFkMzk3OTE2YzNkMTYyZWRmNzIwYThlYmI0MGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAg
LTYzLDggKzYzLDggQEAKICNpbmNsdWRlICJXYXNtT1NSRW50cnlEYXRhLmgiCiAjaW5jbHVkZSAi
V2FzbU9wY29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIldhc21PcGVyYXRpb25zLmgiCi0jaW5jbHVk
ZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCisjaW5j
bHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTEwMywxNCArMTAzLDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHR5cGUgIT0gQmxvY2tUeXBlOjpUcnkg
JiYgdHlwZSAhPSBCbG9ja1R5cGU6OkNhdGNoKTsKICAgICAgICAgICAgIGlmICh0eXBlICE9IEJs
b2NrVHlwZTo6VG9wTGV2ZWwpCi0gICAgICAgICAgICAgICAgbV9zdGFja1NpemUgLT0gc2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAgICAgbV9zdGFja1NpemUgLT0gc2ln
bmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOwogCiAgICAg
ICAgICAgICBpZiAodHlwZSA9PSBCbG9ja1R5cGU6Okxvb3ApIHsKLSAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9C
M1R5cGUoc2lnbmF0dXJlLT5hcmd1bWVudChpKSksIG9yaWdpbikpOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBl
bmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpKSwgb3JpZ2luKSk7CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUt
PnJldHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJv
Yy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpKSwgb3Jp
Z2luKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2ln
bmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZShpKSksIG9yaWdpbikp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEyMyw4ICsxMjMsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAsIG1fdHJ5U3RhcnQodHJ5U3RhcnQpCiAgICAgICAgICAgICAsIG1fdHJ5
Q2F0Y2hEZXB0aCh0cnlEZXB0aCkKICAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKQotICAgICAgICAgICAg
ICAgIHBoaXMuYXBwZW5kKHByb2MuYWRkPFZhbHVlPihQaGksIHRvQjNUeXBlKHNpZ25hdHVyZS0+
cmV0dXJuVHlwZShpKSksIG9yaWdpbikpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7
ICsraSkKKyAgICAgICAgICAgICAgICBwaGlzLmFwcGVuZChwcm9jLmFkZDxWYWx1ZT4oUGhpLCB0
b0IzVHlwZShzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkp
KSwgb3JpZ2luKSk7CiAgICAgICAgIH0KIAogICAgICAgICBDb250cm9sRGF0YSgpCkBAIC0xNzcs
NyArMTc3LDcgQEAgcHVibGljOgogCiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9CiAKLSAgICAgICAgYm9vbCBoYXNOb25Wb2lk
cmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVybnNWb2lkKCk7IH0KKyAg
ICAgICAgYm9vbCBoYXNOb25Wb2lkcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUt
PmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5zVm9pZCgpOyB9CiAKICAgICAgICAgQmFz
aWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goKQogICAgICAgICB7CkBAIC0yMTEsMTkgKzIx
MSwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKICAg
ICAgICAgfQogCi0gICAgICAgIFNpZ25hdHVyZUFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkg
Y29uc3QKKyAgICAgICAgRnVuY3Rpb25BcmdDb3VudCBicmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxv
b3ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVybkNvdW50KCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJn
dW1lbnRDb3VudCgpOworICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hczxGdW5jdGlv
blNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIFR5cGUg
YnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAg
ICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOwogICAgICAgICAgICAgaWYgKGJsb2Nr
VHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWdu
YXR1cmUtPmFyZ3VtZW50KGkpOwotICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1
cm5UeXBlKGkpOworICAgICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXM8RnVuY3Rp
b25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Np
Z25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVyblR5cGUoaSk7CiAgICAgICAg
IH0KIAogICAgICAgICB1bnNpZ25lZCB0cnlTdGFydCgpIGNvbnN0CkBAIC0zMDUsNyArMzA1LDcg
QEAgcHVibGljOgogCiAgICAgQjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgTWVtb3J5TW9kZSwg
Q29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBsb29wSW5k
ZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqKTsKIAotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVHlwZURlZmluaXRp
b24mKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBl
LCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0
X3QpOwogCkBAIC0zNzEsOCArMzcxLDggQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUs
IFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0
YWNrKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNp
Z25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlw
ZSYsIFJlc3VsdExpc3QmKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25h
dHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBU
eXBlRGVmaW5pdGlvbiYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVu
c2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIENvbnRyb2xUeXBl
JiwgUmVzdWx0TGlzdCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKICAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9sVHlw
ZSYsIENvbnRyb2xUeXBlJik7CkBAIC0zODksMTIgKzM4OSwxMiBAQCBwdWJsaWM6CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUs
IGNvbnN0IFN0YWNrJikgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBDYWxscwotICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgs
IGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExp
c3QmIHJlc3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
bGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKLSAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVmKGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOworICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5k
ZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
UmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0
aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7
CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBU
eXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3Qm
IHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVh
Y2hhYmxlKCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGly
ZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7Ci0g
ICAgQjM6OlZhbHVlKiBjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgT3JpZ2luLCBj
b25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBjb25zdCBTY29w
ZWRMYW1iZGE8dm9pZChQYXRjaHBvaW50VmFsdWUqLCBCb3g8UGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZT4pPiYgcGF0Y2hwb2ludEZ1bmN0b3IpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBWYWx1ZSog
Y2FsbGVlQ29kZSwgY29uc3QgVHlwZURlZmluaXRpb24mLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBSZXN1bHRMaXN0Jik7CisgICAgQjM6OlZhbHVlKiBjcmVhdGVDYWxsUGF0Y2hwb2lu
dChCYXNpY0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFBhdGNocG9pbnRWYWx1
ZSosIEJveDxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPik+JiBwYXRjaHBvaW50RnVuY3Rvcik7
CiAKICAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwgY29uc3QgU3RhY2sqIGV4cHJl
c3Npb25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVy
YXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsKQEAgLTg2OSwxNiArODY5LDE2
IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6aW5zZXJ0Q29uc3RhbnRzKCkKIAogQjM6OlR5cGUgQjNJ
UkdlbmVyYXRvcjo6dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1cmUgcmV0dXJuVHlwZSkKIHsK
LSAgICBpZiAocmV0dXJuVHlwZS0+cmV0dXJuc1ZvaWQoKSkKKyAgICBpZiAocmV0dXJuVHlwZS0+
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybnNWb2lkKCkpCiAgICAgICAgIHJldHVybiBC
Mzo6Vm9pZDsKIAotICAgIGlmIChyZXR1cm5UeXBlLT5yZXR1cm5Db3VudCgpID09IDEpCi0gICAg
ICAgIHJldHVybiB0b0IzVHlwZShyZXR1cm5UeXBlLT5yZXR1cm5UeXBlKDApKTsKKyAgICBpZiAo
cmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCkgPT0gMSkK
KyAgICAgICAgcmV0dXJuIHRvQjNUeXBlKHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5yZXR1cm5UeXBlKDApKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbV90dXBsZU1hcC5lbnN1
cmUocmV0dXJuVHlwZSwgWyZdIHsKICAgICAgICAgVmVjdG9yPEIzOjpUeXBlPiByZXN1bHQ7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXR1cm5UeXBlLT5yZXR1cm5Db3VudCgp
OyArK2kpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvQjNUeXBlKHJldHVyblR5cGUtPnJl
dHVyblR5cGUoaSkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJldHVyblR5
cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHRvQjNUeXBlKHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0
dXJlPigpLT5yZXR1cm5UeXBlKGkpKSk7CiAgICAgICAgIHJldHVybiBtX3Byb2MuYWRkVHVwbGUo
V1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKQEAgLTkwMCwxNiArOTAwLDE2IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9jYWwo
VHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7
IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEFy
Z3VtZW50cyhjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0
CiB7CiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwotICAgIFdBU01fQ09NUElMRV9GQUlM
X0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCksICIgYXJndW1lbnRzIik7CisgICAgV0FTTV9DT01QSUxFX0ZBSUxfSUYoIW1fbG9jYWxzLnRy
eVJlc2VydmVDYXBhY2l0eShzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3Vt
ZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHNpZ25hdHVyZS5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOwogCi0g
ICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKKyAgICBtX2xvY2Fs
cy5ncm93KHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgp
KTsKICAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7CiAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsr
aSkgewotICAgICAgICBCMzo6VHlwZSB0eXBlID0gdG9CM1R5cGUoc2lnbmF0dXJlLmFyZ3VtZW50
KGkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgQjM6OlR5cGUgdHlw
ZSA9IHRvQjNUeXBlKHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRU
eXBlKGkpKTsKICAgICAgICAgQjM6OlZhbHVlKiBhcmd1bWVudDsKICAgICAgICAgYXV0byByZXAg
PSB3YXNtQ2FsbEluZm8ucGFyYW1zW2ldOwogICAgICAgICBpZiAocmVwLmlzUmVnKCkpIHsKQEAg
LTEwOTYsNyArMTA5Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9y
OjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgVmFsdWUqIGNhbGxlZUNv
ZGUsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5l
cmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBWYWx1ZSogY2Fs
bGVlQ29kZSwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgogICAgIHsKQEAgLTExNzAsNyAr
MTE3MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2Fs
bGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjCiAgICAgfQogICAgIGNhc2UgQjM6OlR1
cGxlOiB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlwZT4mIHR1cGxlID0gbV9wcm9jLnR1
cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7
ICsraSkKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2gobV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVz
dWx0LCBpKSkpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMzAzLDcgKzEzMDMsNyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5
cGUmIHJlc3VsdCkgLT4gUGFydGlhbAogICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFs
LnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAq
IHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xv
YmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewotICAgICAgICBBU1NFUlQo
Z2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6
Ok11dGFibGUpOworICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6TXV0
YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6SW50NjQsIG9yaWdp
bigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOwogICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBvcmlnaW4o
KSwgcG9pbnRlcikpOwogICAgICAgICBicmVhazsKQEAgLTEzMjQsNyArMTMyNCw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2
YWx1ZSkgLT4gUGFydGlhbFJlCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFw
cGVyKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246
OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewotICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxp
dHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOworICAg
ICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJs
ZSk7CiAgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6SW50NjQsIG9yaWdpbigpLCBnbG9iYWxzQXJy
YXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBv
cmlnaW4oKSwgZ2V0KHZhbHVlKSwgcG9pbnRlcik7CiAgICAgICAgIC8vIFdlIGVtaXQgYSB3cml0
ZS1iYXJyaWVyIG9udG8gSlNXZWJBc3NlbWJseUdsb2JhbCwgbm90IEpTV2ViQXNzZW1ibHlJbnN0
YW5jZS4KQEAgLTI0MTMsOCArMjQxMyw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkTG9vcChC
bG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29uCiAKICAg
ICBibG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCksIHNpZ25hdHVyZSwgQmxvY2tU
eXBlOjpMb29wLCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9uLCBib2R5KTsKIAotICAgIHVuc2ln
bmVkIG9mZnNldCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKTsgKytpKSB7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gZW5jbG9zaW5nU3RhY2suc2l6
ZSgpIC0gc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICBUeXBlZEV4cHJlc3Np
b24gdmFsdWUgPSBlbmNsb3NpbmdTdGFjay5hdChvZmZzZXQgKyBpKTsKICAgICAgICAgVmFsdWUq
IHBoaSA9IGJsb2NrLnBoaXNbaV07CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnZXQodmFsdWUpLCBwaGkpOwpAQCAtMjUx
NCw3ICsyNTE0LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xEYXRhJiBk
YXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXIKIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRhdGEpIC0+IFBhcnRpYWxSZXN1
bHQKIHsKICAgICBBU1NFUlQoZGF0YS5ibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6OklmKTsKLSAg
ICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5t
X3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsKICAg
ICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKICAgICBkYXRhLmNvbnZlcnRJZlRvQmxv
Y2soKTsKICAgICByZXR1cm4geyB9OwpAQCAtMjUzMCw3ICsyNTMwLDcgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5n
U3RhY2ssIENvbnQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJl
c3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2godW5z
aWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFN0
YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRz
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0
YWNrLCBkYXRhKTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1f
cHJvYywgSnVtcCwgb3JpZ2luKCksIGRhdGEuY29udGludWF0aW9uKTsKQEAgLTI1NjQsMTIgKzI1
NjQsMTIgQEAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBCM0lSR2VuZXJhdG9yOjpwcmVwYXJl
UGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoQmFzaWNCbG8KICAgICByZXR1cm4gUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZSB7IG1fY2FsbFNpdGVJbmRleCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxp
dmVWYWx1ZXMuc2l6ZSgpKSB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoVG9V
bnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25l
ZCBleGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgQ29udHJv
bFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICBWYWx1ZSogb3BlcmF0aW9uUmVzdWx0ID0gZW1pdENhdGNoSW1wbChDYXRjaEtpbmQ6OkNhdGNo
LCBkYXRhLCBleGNlcHRpb25JbmRleCk7CiAgICAgVmFsdWUqIHBheWxvYWQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgcG9pbnRlclR5
cGUoKSwgb3BlcmF0aW9uUmVzdWx0LCAxKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAgIFR5cGUgdHlwZSA9IHNp
Z25hdHVyZS5hcmd1bWVudChpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0
dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAg
ICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3Vt
ZW50VHlwZShpKTsKICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZSh0eXBlKSwgb3JpZ2luKCks
IHBheWxvYWQsIGkgKiBzaXplb2YodWludDY0X3QpKTsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
cHVzaCh2YWx1ZSkpOwogICAgIH0KQEAgLTI3OTAsNyArMjc5MCw3IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Npb25TdGFj
aykgLT4gUGFyCiB7CiAgICAgQ29udHJvbERhdGEmIGRhdGEgPSBlbnRyeS5jb250cm9sRGF0YTsK
IAotICAgIEFTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGRhdGEuc2lnbmF0dXJlKCkt
PnJldHVybkNvdW50KCkpOworICAgIEFTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGRh
dGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpKTsK
ICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6Okxvb3ApCiAgICAgICAgIHVu
aWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0YSk7CiAKQEAgLTI4MTMsMTkg
KzI4MTMsMTkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRy
b2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXMKICAgICAgICAgLS1tX3RyeUNhdGNo
RGVwdGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6Okxvb3ApIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPnJldHVy
bkNvdW50KCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5z
aWduYXR1cmUoKS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7ICsraSkg
ewogICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IGRhdGEucGhpc1tpXTsKICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgICAgIGVudHJ5LmVuY2xv
c2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRhLnNpZ25hdHVyZSgpLT5y
ZXR1cm5UeXBlKGkpLCBwdXNoKHJlc3VsdCkpOworICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRF
eHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEuc2lnbmF0dXJlKCktPmFzPEZ1
bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpLCBwdXNoKHJlc3VsdCkpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9vdXRlckxvb3BzLnJlbW92ZUxhc3QoKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNv
dW50KCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWdu
YXR1cmUoKS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7ICsraSkgewog
ICAgICAgICAgICAgaWYgKGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpKSB7CiAgICAgICAgICAg
ICAgICAgKyttX3N0YWNrU2l6ZTsKICAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJl
c3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgVHlwZSByZXR1cm5UeXBlID0gZGF0YS5zaWduYXR1cmUoKS0+
cmV0dXJuVHlwZShpKTsKKyAgICAgICAgICAgICAgICBUeXBlIHJldHVyblR5cGUgPSBkYXRhLnNp
Z25hdHVyZSgpLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZShpKTsKICAgICAg
ICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBl
bmQocmV0dXJuVHlwZSwgcHVzaChjb25zdGFudCh0b0IzVHlwZShyZXR1cm5UeXBlKSwgMHhiYmFk
YmVlZikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjg0MCw3ICsyODQwLDcgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50
cnksIGNvbnN0IFN0YWNrJiBleHByZXMKIH0KIAogCi1CMzo6VmFsdWUqIEIzSVJHZW5lcmF0b3I6
OmNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2NrLCBPcmlnaW4gb3JpZ2luLCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
Y29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoUGF0Y2hwb2ludFZhbHVlKiwgQm94PFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGU+KT4mIHBhdGNocG9pbnRGdW5jdG9yKQorQjM6OlZhbHVlKiBCM0lSR2Vu
ZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywgT3JpZ2luIG9y
aWdpbiwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoUGF0Y2hwb2ludFZhbHVlKiwgQm94
PFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+KT4mIHBhdGNocG9pbnRGdW5jdG9yKQogewogICAg
IFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1ZT4gY29uc3RyYWluZWRBcmd1bWVudHM7CiAgICAg
Q2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNh
bGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOwpAQCAtMjg3MCw5ICsyODcwLDkgQEAgQjM6OlZh
bHVlKiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9j
aywgT3JpZ2luIG9yaWdpbiwKICAgICByZXR1cm4gcGF0Y2hwb2ludDsKIH0KIAotYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiBy
ZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVj
dG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlh
bFJlc3VsdAogewotICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Mu
c2l6ZSgpKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5h
cmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogCiAgICAgbV9tYWtlc0NhbGxzID0gdHJ1
ZTsKICAgICBCMzo6VHlwZSByZXR1cm5UeXBlID0gdG9CM1Jlc3VsdFR5cGUoJnNpZ25hdHVyZSk7
CkBAIC0yODg2LDggKzI4ODYsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMy
X3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBCMzo6VHVwbGU6IHsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6
VHlwZT4mIHR1cGxlID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKLSAgICAgICAg
ICAgIEFTU0VSVChzaWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSB0dXBsZS5zaXplKCkpOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgp
OyArK2kpCisgICAgICAgICAgICBBU1NFUlQoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5yZXR1cm5Db3VudCgpID09IHR1cGxlLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1
cm5Db3VudCgpOyArK2kpCiAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocHVzaChtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHVw
bGVbaV0sIGNhbGxSZXN1bHQsIGkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMjk5NCwxMCArMjk5NCwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMy
X3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQg
dGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0
IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogY2Fs
bGVlSW5kZXggPSBnZXQoYXJncy50YWtlTGFzdCgpKTsKLSAgICBBU1NFUlQoc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAog
ICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CiAgICAgLy8gTm90ZTogY2FsbCBpbmRpcmVjdCBjYW4g
Y2FsbCBlaXRoZXIgV2ViQXNzZW1ibHlGdW5jdGlvbiBvciBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi4gQmVjYXVzZQpAQCAtMzA0MCwxMyArMzA0MCwxMyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdAogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVu
Y3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNuJ3QuIEFuICJpbnZhbGlkIiBT
aWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlhbGl6ZWQuCiAgICAgICAgIC8v
IEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBj
YWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCi0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9
PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTY0Iik7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OnR5cGVJ
bmRleCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkxvYWQgY29kZWdlbiBhc3N1bWVzIGk2NCIpOwog
ICAgICAgICBWYWx1ZSogY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgY2FsbGFi
bGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
bjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSk7CiAgICAgICAgIHsKICAgICAgICAgICAgIENo
ZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPiht
X3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKICAgICAgICAgICAgICAg
ICAgICAgY2FsbGVlU2lnbmF0dXJlSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1
cmU6OmludmFsaWRJbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIFR5cGVEZWZpbml0aW9u
OjppbnZhbGlkSW5kZXgpKSk7CiAKICAgICAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz0s
IHRoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKICAgICAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBF
eGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7CkBAIC0zMDU1LDcgKzMwNTUsNyBAQCBhdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdAogCiAgICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbWF0
Y2hlcyB0aGUgdmFsdWUgd2UgZXhwZWN0LgogICAgICAgICB7Ci0gICAgICAgICAgICBWYWx1ZSog
ZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZSkpOworICAgICAgICAgICAgVmFsdWUqIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgVHlw
ZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSk7CiAgICAgICAgICAgICBDaGVja1ZhbHVlKiBj
aGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVj
aywgb3JpZ2luKCksCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBOb3RFcXVhbCwgb3JpZ2luKCksIGNhbGxlZVNpZ25hdHVyZUluZGV4LCBl
eHBlY3RlZFNpZ25hdHVyZUluZGV4KSk7CiAKQEAgLTMwNzYsMTAgKzMwNzYsMTAgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXQKICAgICByZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChjYWxsZWVJbnN0
YW5jZSwgY2FsbGVlQ29kZSwgc2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKTsKIH0KIAotYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFs
UmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3QgVHlwZURlZmluaXRp
b24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYg
cmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFZhbHVlKiBjYWxsZWUgPSBnZXQoYXJn
cy50YWtlTGFzdCgpKTsKLSAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBh
cmdzLnNpemUoKSk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKICAgICBtX21ha2VzQ2FsbHMgPSB0
cnVlOwogCiAgICAgLy8gTm90ZTogY2FsbCByZWYgY2FuIGNhbGwgZWl0aGVyIFdlYkFzc2VtYmx5
RnVuY3Rpb24gb3IgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uIEJlY2F1c2UKQEAgLTMxNzMs
NyArMzE3Myw3IEBAIHN0YXRpYyBib29sIHNob3VsZER1bXBJUkZvcih1aW50MzJfdCBmdW5jdGlv
bkluZGV4KQogICAgIHJldHVybiBkdW1wQWxsb3dsaXN0LT5zaG91bGREdW1wV2FzbUZ1bmN0aW9u
KGZ1bmN0aW9uSW5kZXgpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQjMoQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5
TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqIHRp
ZXJVcCkKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5n
PiBwYXJzZUFuZENvbXBpbGVCMyhDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4
dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgVHlwZURlZmluaXRpb24mIHNp
Z25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dh
c21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwg
Q29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
dWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiB0aWVyVXApCiB7CiAg
ICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCmluZGV4IGMxZTNk
OWI2ZTJhN2JiNjNiNWM5NGQ0MWZiY2Y2MjliY2UwMWNkZmIuLjcwMGI1YzA1ODNhNTRjMzVjM2Y2
MzEwMTc2ZWRmNGNmODBmNDA4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25D
b250ZXh0IHsKICAgICBCb3g8UENUb0NvZGVPcmlnaW5NYXA+IHBjVG9Db2RlT3JpZ2luTWFwOwog
fTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+
IHBhcnNlQW5kQ29tcGlsZUIzKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0
YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVw
Q291bnQqID0gbnVsbHB0cik7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQjMoQ29tcGlsYXRpb25Db250ZXh0JiwgY29u
c3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgVHlwZURlZmluaXRpb24mLCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENv
bXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4
Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwogCiB2b2lkIGNvbXB1dGVQQ1Rv
Q29kZU9yaWdpbk1hcChDb21waWxhdGlvbkNvbnRleHQmLCBMaW5rQnVmZmVyJik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAzMTc4NjY1MjcwN2M4
NGJmMjkxZWQwNzM4ODAyNTVmNzVkNjc1ZWMwLi44ZTE4YTc3MjIzMjBhNGNiZDRlZTBlOGMyM2I3
NzQyNWZmZDJhMDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4u
Y3BwCkBAIC0zNyw4ICszNyw4IEBACiAjaW5jbHVkZSAiV2FzbUNhbGxlZUdyb3VwLmgiCiAjaW5j
bHVkZSAiV2FzbUNhbGxlZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2FzbUlSR2VuZXJhdG9ySGVs
cGVycy5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Fz
bVRpZXJVcENvdW50LmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgog
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTEyMyw4ICsxMjMsOCBAQCB2b2lkIEJCUVBsYW46
OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIGNvbXB1dGVQQ1RvQ29kZU9yaWdp
bk1hcChjb250ZXh0LCBsaW5rQnVmZmVyKTsKIAogICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3Bh
Y2UgPSBtX2Z1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlv
bkNvdW50KCk7Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1ttX2Z1bmN0aW9uSW5k
ZXhdOwotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlc1ttX2Z1bmN0aW9uSW5k
ZXhdOworICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRp
b246OmdldCh0eXBlSW5kZXgpOwogICAgIGZ1bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9u
ID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgIEZJTkFMSVpFX1dBU01fQ09ERV9G
T1JfTU9ERShDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0
aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9m
dW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0
cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwK
ICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwpAQCAt
MTkyLDggKzE5Miw4IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgpCiAKICAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlcy5jb250YWlu
cyhmdW5jdGlvbkluZGV4KSB8fCBtX21vZHVsZUluZm9ybWF0aW9uLT5yZWZlcmVuY2VkRnVuY3Rp
b25zKCkuY29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7
IG1fbG9jayB9OwotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9u
SW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBUeXBlSW5kZXggdHlwZUlu
ZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2VzW2Z1
bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlID0g
VHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKIAogICAgICAgICBtX2NvbXBpbGF0aW9u
Q29udGV4dHNbZnVuY3Rpb25JbmRleF0uZW1iZWRkZXJFbnRyeXBvaW50SklUID0gbWFrZVVuaXF1
ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgICAgIGF1dG8gZW1iZWRkZXJUb1dhc21JbnRlcm5hbEZ1
bmN0aW9uID0gY3JlYXRlSlNUb1dhc21XcmFwcGVyKCptX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVu
Y3Rpb25JbmRleF0uZW1iZWRkZXJFbnRyeXBvaW50SklULCBzaWduYXR1cmUsICZtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgp
LCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpOwpAQCAtMjA3LDEwICsyMDcsMTAgQEAgdm9pZCBCQlFQ
bGFuOjpjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkKIHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24odWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0LCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBUaWVyVXBDb3VudCog
dGllclVwKQogewogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9uID0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+ZnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdOwotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICBUeXBlSW5kZXgg
dHlwZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblR5cGVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdOworICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUg
PSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBlSW5kZXgpOwogICAgIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSAr
IGZ1bmN0aW9uSW5kZXg7Ci0gICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShm
dW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKKyAgICBBU1NFUlRfVU5VU0VE
KGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+dHlwZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHR5cGVJbmRleCk7CiAgICAg
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZVJlc3VsdDsKIAogICAgIC8vIEZJWE1FOiBTb21lIHdlYnBhZ2VzIHVzZSB2ZXJ5
IGxhcmdlIFdhc20gbW9kdWxlLCBhbmQgaXQgZXhoYXVzdHMgYWxsIGV4ZWN1dGFibGUgbWVtb3J5
IGluIEFSTTY0IGRldmljZXMgc2luY2UgdGhlIHNpemUgb2YgZXhlY3V0YWJsZSBtZW1vcnkgcmVn
aW9uIGlzIG9ubHkgbGltaXRlZCB0byAxMjhNQi4KQEAgLTI0NCw4ICsyNDQsOCBAQCB2b2lkIEJC
UVBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oKQogewogICAgIGZvciAodWludDMyX3QgZnVu
Y3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5j
dGlvbnMuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKICAgICAgICAgQ29tcGlsYXRpb25Db250
ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdOwotICAg
ICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24t
PmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAg
ICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOworICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwor
ICAgICAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlID0gVHlwZUluZm9ybWF0aW9u
OjpnZXQodHlwZUluZGV4KTsKICAgICAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNw
YWNlID0gZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9u
Q291bnQoKTsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlSW5m
b3JtYXRpb24tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAgICAgICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAppbmRleCA2ZWY2NjQ3ZTJmNDM3N2M2YzBjMWY4
MTdkZmM5MjQ0Y2ZkYjg4MTJjLi5kOGFkZjRiMTMwZmE0ZTg0YWZhNjgyZmUwN2IzM2IxZjVkYjZm
MzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5oCkBAIC0yNjUsNyAr
MjY1LDcgQEAgcHVibGljOgogCiAgICAgTExJbnRUaWVyVXBDb3VudGVyJiB0aWVyVXBDb3VudGVy
KCkgeyByZXR1cm4gbV90aWVyVXBDb3VudGVyOyB9CiAKLSAgICBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVy
ZSYgc2lnbmF0dXJlKHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
ICptX3NpZ25hdHVyZXNbaW5kZXhdOwogICAgIH0KQEAgLTMwNCw3ICszMDQsNyBAQCBwcml2YXRl
OgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rp
b25zOwogICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlciB7IG51bGxwdHIg
fTsKICAgICBGaXhlZFZlY3RvcjxXYXNtSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9qdW1w
VGFyZ2V0czsKLSAgICBGaXhlZFZlY3Rvcjxjb25zdCBTaWduYXR1cmUqPiBtX3NpZ25hdHVyZXM7
CisgICAgRml4ZWRWZWN0b3I8Y29uc3QgRnVuY3Rpb25TaWduYXR1cmUqPiBtX3NpZ25hdHVyZXM7
CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAgICBM
TEludFRpZXJVcENvdW50ZXIgbV90aWVyVXBDb3VudGVyOwogICAgIEZpeGVkVmVjdG9yPEp1bXBU
YWJsZT4gbV9qdW1wVGFibGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaAppbmRleCA1OTFlZWIyN2IwMTY5MDA3YWZhMTgzZDQzMjcy
OWZhMGNhNTZhZDgxLi40Mjg4ZjgwMWRlMWJlMzRiMzg5NWJhZjJmM2FjNTUxZWM0OGFiNTc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0Lmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5j
bHVkZSAiV2FzbVNpZ25hdHVyZS5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbi5oIgog
I2luY2x1ZGUgIldhc21WYWx1ZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CkBAIC0xMjAsOCArMTIwLDkgQEAgcHJpdmF0ZToKICAgICB9CiAKIHB1YmxpYzoK
LSAgICBDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBDYWxsUm9sZSByb2xlID0gQ2FsbFJvbGU6OkNhbGxlcikgY29uc3QKKyAgICBD
YWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0
eXBlLCBDYWxsUm9sZSByb2xlID0gQ2FsbFJvbGU6OkNhbGxlcikgY29uc3QKICAgICB7CisgICAg
ICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9ICp0eXBlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
OwogICAgICAgICBib29sIGFyZ3VtZW50c0luY2x1ZGVJNjQgPSBmYWxzZTsKICAgICAgICAgYm9v
bCByZXN1bHRzSW5jbHVkZUk2NCA9IGZhbHNlOwogICAgICAgICBzaXplX3QgZ3BBcmd1bWVudENv
dW50ID0gMDsKQEAgLTEzMiw4ICsxMzMsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgVmVjdG9yPEFy
Z3VtZW50TG9jYXRpb24+IHBhcmFtcyhzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kp
IHsKLSAgICAgICAgICAgIGFyZ3VtZW50c0luY2x1ZGVJNjQgfD0gc2lnbmF0dXJlLmFyZ3VtZW50
KGkpLmlzSTY0KCk7Ci0gICAgICAgICAgICBwYXJhbXNbaV0gPSBtYXJzaGFsbExvY2F0aW9uKHJv
bGUsIHNpZ25hdHVyZS5hcmd1bWVudChpKSwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291
bnQsIGFyZ1N0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIGFyZ3VtZW50c0luY2x1ZGVJNjQgfD0g
c2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKS5pc0k2NCgpOworICAgICAgICAgICAgcGFyYW1zW2ld
ID0gbWFyc2hhbGxMb2NhdGlvbihyb2xlLCBzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLCBncEFy
Z3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgYXJnU3RhY2tPZmZzZXQpOwogICAgICAgICB9
CiAgICAgICAgIGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAgIGZwQXJndW1lbnRDb3VudCA9
IDA7CkBAIC0yMTAsNyArMjExLDcgQEAgcHJpdmF0ZToKICAgICB9CiAKIHB1YmxpYzoKLSAgICBD
YWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBDYWxsUm9sZSByb2xlID0gQ2FsbFJvbGU6OkNhbGxlZSkgY29uc3QKKyAgICBDYWxsSW5m
b3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1
cmUsIENhbGxSb2xlIHJvbGUgPSBDYWxsUm9sZTo6Q2FsbGVlKSBjb25zdAogICAgIHsKICAgICAg
ICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAgIHNpemVfdCBmcEFyZ3VtZW50
Q291bnQgPSAwOwpAQCAtMjE5LDggKzIyMCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0YWNr
T2Zmc2V0IC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKIAogICAgICAgICBWZWN0b3I8QXJn
dW1lbnRMb2NhdGlvbj4gcGFyYW1zOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQo
bWFyc2hhbGxMb2NhdGlvbihyb2xlLCBzaWduYXR1cmUuYXJndW1lbnQoaSksIGdwQXJndW1lbnRD
b3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCkpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRD
b3VudCgpOyArK2kpCisgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKG1hcnNoYWxsTG9jYXRpb24o
cm9sZSwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudFR5cGUoaSks
IGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCkpOwogCiAgICAg
ICAgIFZlY3RvcjxBcmd1bWVudExvY2F0aW9uLCAxPiByZXN1bHRzIHsgQXJndW1lbnRMb2NhdGlv
bjo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSB9OwogICAgICAgICByZXR1cm4gQ2FsbElu
Zm9ybWF0aW9uKFdURk1vdmUocGFyYW1zKSwgV1RGTW92ZShyZXN1bHRzKSwgc3RhY2tPZmZzZXQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAppbmRleCA5OTBlNDZm
NDM4MTNhMTRiZjRhMTFmMDkyMTA4Yzk1MTE1Zjc0YjQ2Li4yNDE4NWFiODZlNTllMmYyMDM0MTRi
OTU0ZTgxNGNmMjhmZjc1NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRW1iZWRkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1i
ZWRkZXIuaApAQCAtNDUsMTEgKzQ1LDExIEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CiBj
bGFzcyBJbnN0YW5jZTsKIHN0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uOwogc3RydWN0IE1vZHVsZUlu
Zm9ybWF0aW9uOwotY2xhc3MgU2lnbmF0dXJlOworY2xhc3MgVHlwZURlZmluaXRpb247CiBzdHJ1
Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsKIAogLy8gQ3JlYXRlIHdyYXBwZXIgY29kZSB0byBj
YWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNzZW1ibHkuCi11c2luZyBDcmVhdGVFbWJlZGRlcldy
YXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPihD
Q2FsbEhlbHBlcnMmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90KT47
Cit1c2luZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPihDQ2FsbEhlbHBlcnMmLCBjb25zdCBUeXBlRGVmaW5pdGlv
biYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QpPjsKIAogLy8gQ2FsbGVkIGFzIHNvb24gYXMgYW4g
ZXhjZXB0aW9uIGlzIGRldGVjdGVkLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBQQyB0byBjb250
aW51ZSBhdC4KIHVzaW5nIFRocm93V2FzbUV4Y2VwdGlvbiA9IHZvaWQqICgqKShDYWxsRnJhbWUq
LCBXYXNtOjpFeGNlcHRpb25UeXBlLCBJbnN0YW5jZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRW50cnlQbGFuLmNwcAppbmRleCA0MTEwZjRlN2QwMTQxYWMwNDNiMTUyYmE1
NTEzYjlmZmI2NDk3M2M3Li43NmJmM2FiYmM3ODM4MjM2Yjk4YzViNWVlYmUxNDJhMjczZThkZGY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmNwcApAQCAt
MTE1LDcgKzExNSw3IEBAIHZvaWQgRW50cnlQbGFuOjpwcmVwYXJlKCkKIAogICAgIGNvbnN0IGF1
dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uczsKICAgICBtX251
bWJlck9mRnVuY3Rpb25zID0gZnVuY3Rpb25zLnNpemUoKTsKLSAgICBpZiAoIXRyeVJlc2VydmVD
YXBhY2l0eShtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9y
dEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCksICIgV2ViQXNzZW1ibHkgdG8gSmF2YVNj
cmlwdCBzdHVicyIpCisgICAgaWYgKCF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtVG9XYXNtRXhp
dFN0dWJzLCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzLnNp
emUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJzIikKICAgICAgICAgfHwgIXRy
eVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbnMuc2l6
ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFzc2VtYmx5IGNhbGxzIikpCiAgICAg
ICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCmluZGV4
IDk3MDYzYWFiOWU2YjdmNTYwZmUyOGQ1NDIwNjBjNTJiODg0NmU1ZDkuLmFjZTg1N2ZkMjBiZjlm
OTA1ZGQ0OGQ1MmU3MTVkOTNiMmQ2ODc2ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmgKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJXYXNtT1NSRW50cnlEYXRh
LmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldhc21QYWdlQ291bnQuaCIKLSNp
bmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uLmgi
CiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8bWVtb3J5
PgpAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0Owogc3RydWN0IE1v
ZHVsZUluZm9ybWF0aW9uOwogc3RydWN0IFVubGlua2VkSGFuZGxlckluZm87CiAKLXVzaW5nIEJs
b2NrU2lnbmF0dXJlID0gY29uc3QgU2lnbmF0dXJlKjsKK3VzaW5nIEJsb2NrU2lnbmF0dXJlID0g
Y29uc3QgVHlwZURlZmluaXRpb24qOwogCiBlbnVtIGNsYXNzIFRhYmxlRWxlbWVudFR5cGUgOiB1
aW50OF90IHsKICAgICBFeHRlcm5yZWYsCkBAIC0xMDUsMjggKzEwNSwyOCBAQCBpbmxpbmUgYm9v
bCBpc1JlZlR5cGUoVHlwZSB0eXBlKQogaW5saW5lIGJvb2wgaXNFeHRlcm5yZWYoVHlwZSB0eXBl
KQogewogICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rpb25SZWZlcmVu
Y2VzKCkpCi0gICAgICAgIHJldHVybiBpc1JlZlR5cGUodHlwZSkgJiYgdHlwZS5pbmRleCA9PSBz
dGF0aWNfY2FzdDxTaWduYXR1cmVJbmRleD4oVHlwZUtpbmQ6OkV4dGVybnJlZik7CisgICAgICAg
IHJldHVybiBpc1JlZlR5cGUodHlwZSkgJiYgdHlwZS5pbmRleCA9PSBzdGF0aWNfY2FzdDxUeXBl
SW5kZXg+KFR5cGVLaW5kOjpFeHRlcm5yZWYpOwogICAgIHJldHVybiB0eXBlLmtpbmQgPT0gVHlw
ZUtpbmQ6OkV4dGVybnJlZjsKIH0KIAogaW5saW5lIGJvb2wgaXNGdW5jcmVmKFR5cGUgdHlwZSkK
IHsKICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNl
cygpKQotICAgICAgICByZXR1cm4gaXNSZWZUeXBlKHR5cGUpICYmIHR5cGUuaW5kZXggPT0gc3Rh
dGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+KFR5cGVLaW5kOjpGdW5jcmVmKTsKKyAgICAgICAgcmV0
dXJuIGlzUmVmVHlwZSh0eXBlKSAmJiB0eXBlLmluZGV4ID09IHN0YXRpY19jYXN0PFR5cGVJbmRl
eD4oVHlwZUtpbmQ6OkZ1bmNyZWYpOwogICAgIHJldHVybiB0eXBlLmtpbmQgPT0gVHlwZUtpbmQ6
OkZ1bmNyZWY7CiB9CiAKIGlubGluZSBUeXBlIGZ1bmNyZWZUeXBlKCkKIHsKICAgICBpZiAoT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcygpKQotICAgICAgICBy
ZXR1cm4gV2FzbTo6VHlwZSB7IFdhc206OlR5cGVLaW5kOjpSZWZOdWxsLCBXYXNtOjpOdWxsYWJs
ZTo6WWVzLCBzdGF0aWNfY2FzdDxXYXNtOjpTaWduYXR1cmVJbmRleD4oV2FzbTo6VHlwZUtpbmQ6
OkZ1bmNyZWYpIH07CisgICAgICAgIHJldHVybiBXYXNtOjpUeXBlIHsgV2FzbTo6VHlwZUtpbmQ6
OlJlZk51bGwsIFdhc206Ok51bGxhYmxlOjpZZXMsIHN0YXRpY19jYXN0PFdhc206OlR5cGVJbmRl
eD4oV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWYpIH07CiAgICAgcmV0dXJuIFR5cGVzOjpGdW5jcmVm
OwogfQogCiBpbmxpbmUgVHlwZSBleHRlcm5yZWZUeXBlKCkKIHsKICAgICBpZiAoT3B0aW9uczo6
dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcygpKQotICAgICAgICByZXR1cm4g
V2FzbTo6VHlwZSB7IFdhc206OlR5cGVLaW5kOjpSZWZOdWxsLCBXYXNtOjpOdWxsYWJsZTo6WWVz
LCBzdGF0aWNfY2FzdDxXYXNtOjpTaWduYXR1cmVJbmRleD4oV2FzbTo6VHlwZUtpbmQ6OkV4dGVy
bnJlZikgfTsKKyAgICAgICAgcmV0dXJuIFdhc206OlR5cGUgeyBXYXNtOjpUeXBlS2luZDo6UmVm
TnVsbCwgV2FzbTo6TnVsbGFibGU6Olllcywgc3RhdGljX2Nhc3Q8V2FzbTo6VHlwZUluZGV4PihX
YXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmKSB9OwogICAgIHJldHVybiBUeXBlczo6RXh0ZXJucmVm
OwogfQogCkBAIC0yMzgsMTEgKzIzOCw2IEBAIFN0cmluZyBtYWtlU3RyaW5nKGNvbnN0IE5hbWUm
IGNoYXJhY3RlcnMpOwogCiBzdHJ1Y3QgR2xvYmFsSW5mb3JtYXRpb24gewogICAgIFdURl9NQUtF
X1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBlbnVtIE11dGFiaWxpdHkgOiB1aW50OF90IHsK
LSAgICAgICAgLy8gRklYTUUgYXV0by1nZW5lcmF0ZSB0aGlzLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MjMxCi0gICAgICAgIE11dGFibGUgPSAxLAotICAgICAg
ICBJbW11dGFibGUgPSAwCi0gICAgfTsKIAogICAgIGVudW0gSW5pdGlhbGl6YXRpb25UeXBlIDog
dWludDhfdCB7CiAgICAgICAgIElzSW1wb3J0LApAQCAtNDU2LDExICs0NTEsMTEgQEAgc3RydWN0
IEludGVybmFsRnVuY3Rpb24gewogc3RydWN0IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24g
ewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKICAgICB1c2luZyBMb2FkTG9j
YXRpb24gPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPio7Ci0gICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIHNpZ25hdHVyZUluZGV4KTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCB0eXBlSW5kZXgpOyB9
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgZW50
cnlwb2ludExvYWRMb2NhdGlvbik7IH0KIAotICAgIC8vIEZJWE1FOiBQYWNrIHNpZ25hdHVyZSBp
bmRleCBhbmQgY29kZSBwb2ludGVyIGludG8gb25lIDY0LWJpdCB2YWx1ZS4gU2VlIDxodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTExPi4KLSAgICBTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCB7IFNpZ25hdHVyZTo6aW52YWxpZEluZGV4IH07CisgICAgLy8g
RklYTUU6IFBhY2sgdHlwZSBpbmRleCBhbmQgY29kZSBwb2ludGVyIGludG8gb25lIDY0LWJpdCB2
YWx1ZS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEx
Pi4KKyAgICBUeXBlSW5kZXggdHlwZUluZGV4IHsgVHlwZURlZmluaXRpb246OmludmFsaWRJbmRl
eCB9OwogICAgIExvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uOwogfTsKIHVzaW5n
IEZ1bmN0aW9uSW5kZXhTcGFjZSA9IFZlY3RvcjxXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNv
ZGVCbG9ja0dlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVu
Y3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuY3BwCmluZGV4IDMxZWUyMTVkZWRmNzgxODAxMTVmZDI0
ZmJhNmZhM2Y5NzJiODNhOWUuLjBjNmY3OWI2YzE5OWJkOWFmNDgwYTU5M2ZjYzE0NTQyOTAyYTNl
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNv
ZGVCbG9ja0dlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcApAQCAtNTEsNyArNTEsNyBAQCBXYXNtSW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6b3V0T2ZM
aW5lSnVtcE9mZnNldChXYQogICAgIHJldHVybiBtX291dE9mTGluZUp1bXBUYXJnZXRzLmdldChi
eXRlY29kZU9mZnNldCk7CiB9CiAKLXVuc2lnbmVkIEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9y
OjphZGRTaWduYXR1cmUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCit1bnNpZ25lZCBGdW5j
dGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2lnbmF0dXJlKGNvbnN0IEZ1bmN0aW9uU2lnbmF0
dXJlJiBzaWduYXR1cmUpCiB7CiAgICAgdW5zaWduZWQgaW5kZXggPSBtX3NpZ25hdHVyZXMuc2l6
ZSgpOwogICAgIG1fc2lnbmF0dXJlcy5hcHBlbmQoJnNpZ25hdHVyZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVy
YXRvci5oCmluZGV4IGExZTM5YTFlNmQ2MWVlMWIxZmViZTEwMmZiODJlMGY1ZTI3Zjg4YjcuLjQ4
OWZlNjZjNTdmZTk3ZjJmZDRhZWNjY2ZmMWFkNjg3ODI0ZGIyMzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVy
YXRvci5oCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTsKIG5h
bWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgTExJbnRDYWxsZWU7Ci1jbGFzcyBTaWduYXR1cmU7Citj
bGFzcyBGdW5jdGlvblNpZ25hdHVyZTsKIHN0cnVjdCBHZW5lcmF0b3JUcmFpdHM7CiAKIHN0cnVj
dCBKdW1wVGFibGVFbnRyeSB7CkBAIC0xMTYsNyArMTE2LDcgQEAgcHVibGljOgogCiAgICAgSGFz
aE1hcDxXYXNtSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgTExJbnRUaWVyVXBDb3VudGVyOjpP
U1JFbnRyeURhdGE+JiB0aWVyVXBDb3VudGVyKCkgeyByZXR1cm4gbV90aWVyVXBDb3VudGVyOyB9
CiAKLSAgICB1bnNpZ25lZCBhZGRTaWduYXR1cmUoY29uc3QgU2lnbmF0dXJlJik7CisgICAgdW5z
aWduZWQgYWRkU2lnbmF0dXJlKGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlJik7CiAKICAgICBKdW1w
VGFibGUmIGFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRyaWVzKTsKICAgICB1bnNpZ25l
ZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsKQEAgLTE0MCw3ICsxNDAsNyBAQCBwcml2YXRl
OgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW5zdHJ1Y3Rpb25TdHJlYW0+IG1faW5zdHJ1Y3Rp
b25zOwogICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlciB7IG51bGxwdHIg
fTsKICAgICBWZWN0b3I8V2FzbUluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fanVtcFRhcmdl
dHM7Ci0gICAgVmVjdG9yPGNvbnN0IFNpZ25hdHVyZSo+IG1fc2lnbmF0dXJlczsKKyAgICBWZWN0
b3I8Y29uc3QgRnVuY3Rpb25TaWduYXR1cmUqPiBtX3NpZ25hdHVyZXM7CiAgICAgT3V0T2ZMaW5l
SnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAgICBIYXNoTWFwPFdhc21JbnN0
cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBMTEludFRpZXJVcENvdW50ZXI6Ok9TUkVudHJ5RGF0YT4g
bV90aWVyVXBDb3VudGVyOwogICAgIFZlY3RvcjxKdW1wVGFibGU+IG1fanVtcFRhYmxlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKaW5kZXgg
OWJmOTY2M2M4YTM1ZmU3OTBmY2M0YmUxYmVkMWY3NDVkYTAxNTM3NC4uZGIxYzlhZWY4MmQ2NWE1
ODAxMjU0MjdjM2ZjMTUyOTQyN2ExZGQxZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtUGFyc2VyLmgiCi0jaW5jbHVkZSAiV2FzbVNp
Z25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgi
CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKQEAgLTUwLDEwICs1MCwxMCBAQCBlbnVtIGNsYXNzIENhdGNoS2luZCB7CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBFbmNsb3NpbmdTdGFjaywgdHlwZW5hbWUgTmV3U3RhY2s+CiB2b2lkIHNwbGl0
U3RhY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBFbmNsb3NpbmdTdGFjayYgZW5jbG9zaW5n
U3RhY2ssIE5ld1N0YWNrJiBuZXdTdGFjaykKIHsKLSAgICBuZXdTdGFjay5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKLSAgICBBU1NFUlQoZW5jbG9z
aW5nU3RhY2suc2l6ZSgpID49IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKLSAgICB1bnNp
Z25lZCBvZmZzZXQgPSBlbmNsb3NpbmdTdGFjay5zaXplKCkgLSBzaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCk7ICsraSkKKyAgICBuZXdTdGFjay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25h
dHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSk7CisgICAgQVNT
RVJUKGVuY2xvc2luZ1N0YWNrLnNpemUoKSA+PSBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0
dXJlPigpLT5hcmd1bWVudENvdW50KCkpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGVuY2xvc2lu
Z1N0YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3Vt
ZW50Q291bnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgIG5ld1N0
YWNrLnVuY2hlY2tlZEFwcGVuZChlbmNsb3NpbmdTdGFjay5hdChpICsgb2Zmc2V0KSk7CiAgICAg
ZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7CiB9CkBAIC0xMDEsMTMgKzEwMSwxMyBAQCBw
dWJsaWM6CiAgICAgICAgIENvbnRyb2xUeXBlIGNvbnRyb2xEYXRhOwogICAgIH07CiAKLSAgICBG
dW5jdGlvblBhcnNlcihDb250ZXh0JiwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6
ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYpOworICAgIEZ1bmN0aW9uUGFyc2VyKENvbnRleHQmLCBjb25zdCB1aW50OF90KiBmdW5j
dGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKIAogICAgIFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gcGFyc2UoKTsKIAogICAgIE9wVHlwZSBjdXJyZW50T3Bjb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50T3Bjb2RlOyB9CiAgICAgc2l6ZV90IGN1cnJlbnRPcGNvZGVTdGFydGluZ09mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZVN0YXJ0aW5nT2Zmc2V0OyB9Ci0gICAg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsg
fQorICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBt
X3NpZ25hdHVyZTsgfQogCiAgICAgQ29udHJvbFN0YWNrJiBjb250cm9sU3RhY2soKSB7IHJldHVy
biBtX2NvbnRyb2xTdGFjazsgfQogICAgIFN0YWNrJiBleHByZXNzaW9uU3RhY2soKSB7IHJldHVy
biBtX2V4cHJlc3Npb25TdGFjazsgfQpAQCAtMjA5LDcgKzIwOSw3IEBAIHByaXZhdGU6CiAgICAg
U3RhY2sgbV9leHByZXNzaW9uU3RhY2s7CiAgICAgQ29udHJvbFN0YWNrIG1fY29udHJvbFN0YWNr
OwogICAgIFZlY3RvcjxUeXBlLCAxNj4gbV9sb2NhbHM7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBt
X3NpZ25hdHVyZTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgbV9zaWduYXR1cmU7CiAgICAg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKIAogICAgIE9wVHlwZSBtX2N1cnJlbnRP
cGNvZGU7CkBAIC0yMjYsNyArMjI2LDcgQEAgc3RhdGljIGJvb2wgaXNUcnlPckNhdGNoKENvbnRy
b2xUeXBlJiBkYXRhKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgotRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvKQorRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQmIGNvbnRleHQsIGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgVHlwZURl
ZmluaXRpb24mIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiAgICAg
OiBQYXJzZXIoZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgpCiAgICAgLCBtX2NvbnRleHQo
Y29udGV4dCkKICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkKQEAgLTI0MiwxNCArMjQyLDE1
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlKCkgLT4gUmVzdWx0CiB7CiAg
ICAgdWludDMyX3QgbG9jYWxHcm91cHNDb3VudDsKIAotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1fY29udGV4dC5hZGRBcmd1bWVudHMobV9zaWduYXR1cmUpLCAiY2FuJ3QgYWRkICIsIG1fc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMgdG8gRnVuY3Rpb24iKTsKKyAgICBj
b25zdCBhdXRvJiBzaWduYXR1cmUgPSAqbV9zaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+
KCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9jb250ZXh0LmFkZEFyZ3VtZW50cyhtX3Np
Z25hdHVyZSksICJjYW4ndCBhZGQgIiwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1
bWVudHMgdG8gRnVuY3Rpb24iKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJ
bnQzMihsb2NhbEdyb3Vwc0NvdW50KSwgImNhbid0IGdldCBsb2NhbCBncm91cHMgY291bnQiKTsK
IAotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eSht
X3NpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9y
eSBmb3IgZnVuY3Rpb24ncyAiLCBtX3NpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1l
bnRzIik7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgKytpKQotICAgICAgICBtX2xvY2Fscy51bmNoZWNrZWRBcHBlbmQobV9zaWduYXR1
cmUuYXJndW1lbnQoaSkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fbG9jYWxzLnRyeVJl
c2VydmVDYXBhY2l0eShzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRl
IGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0aW9uJ3MgIiwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSwgIiBhcmd1bWVudHMiKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICBtX2xvY2Fscy51bmNoZWNrZWRBcHBlbmQo
c2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKSk7CiAKLSAgICB1aW50NjRfdCB0b3RhbE51bWJlck9m
TG9jYWxzID0gbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOworICAgIHVpbnQ2NF90IHRvdGFs
TnVtYmVyT2ZMb2NhbHMgPSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOwogICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBsb2NhbEdyb3Vwc0NvdW50OyArK2kpIHsKICAgICAgICAgdWludDMy
X3QgbnVtYmVyT2ZMb2NhbHM7CiAgICAgICAgIFR5cGUgdHlwZU9mTG9jYWw7CkBAIC03MzIsOSAr
NzMzLDExIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OmNoZWNrQnJhbmNoVGFyZ2V0
KGNvbnN0IENvbnRyb2xUeXBlJiB0YXJnZXQpIC0+IFBhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250
ZXh0PgogYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6dW5pZnkoY29uc3QgQ29udHJvbFR5
cGUmIGNvbnRyb2xEYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKSAhPSBtX2V4cHJl
c3Npb25TdGFjay5zaXplKCksICIgYmxvY2sgd2l0aCB0eXBlOiAiLCBjb250cm9sRGF0YS5zaWdu
YXR1cmUoKS0+dG9TdHJpbmcoKSwgIiByZXR1cm5zOiAiLCBjb250cm9sRGF0YS5zaWduYXR1cmUo
KS0+cmV0dXJuQ291bnQoKSwgIiBidXQgc3RhY2sgaGFzOiAiLCBtX2V4cHJlc3Npb25TdGFjay5z
aXplKCksICIgdmFsdWVzIik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbnRyb2xE
YXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoIWlzU3VidHlwZShtX2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCksIGNvbnRy
b2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpKSwgImNvbnRyb2wgZmxvdyByZXR1cm5z
IHdpdGggdW5leHBlY3RlZCB0eXBlLiAiLCBtX2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCkua2lu
ZCwgIiBpcyBub3QgYSAiLCBjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKS5r
aW5kKTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiogdHlwZURlZmluaXRpb24gPSBjb250cm9s
RGF0YS5zaWduYXR1cmUoKTsgLy8ganVzdCB0byBhdm9pZCBhIHdlaXJkIGNvbXBpbGVyIGVycm9y
IHdpdGggdGVtcGxhdGVzIGF0IHRoZSBuZXh0IGxpbmUuCisgICAgY29uc3QgRnVuY3Rpb25TaWdu
YXR1cmUqIHNpZ25hdHVyZSA9IHR5cGVEZWZpbml0aW9uLT5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSAh
PSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgYmxvY2sgd2l0aCB0eXBlOiAiLCBzaWduYXR1
cmUtPnRvU3RyaW5nKCksICIgcmV0dXJuczogIiwgc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpLCAi
IGJ1dCBzdGFjayBoYXM6ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyAr
K2kpCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShtX2V4cHJlc3Np
b25TdGFja1tpXS50eXBlKCksIHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSksICJjb250cm9sIGZs
b3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZS4gIiwgbV9leHByZXNzaW9uU3RhY2tbaV0u
dHlwZSgpLmtpbmQsICIgaXMgbm90IGEgIiwgc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpLmtpbmQp
OwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTEwODIsMTAgKzEwODUsMTAgQEAgRk9SX0VBQ0hf
V0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgICAgICBpbnQzMl90IGhl
YXBUeXBlOwogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VIZWFwVHlwZSht
X2luZm8sIGhlYXBUeXBlKSwgInJlZi5udWxsIGhlYXB0eXBlIG11c3QgYmUgZnVuY3JlZiwgZXh0
ZXJucmVmIG9yIHR5cGVfaWR4Iik7CiAgICAgICAgICAgICBpZiAoaXNUeXBlSW5kZXhIZWFwVHlw
ZShoZWFwVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLnVzZWRTaWduYXR1cmVzW2hl
YXBUeXBlXS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBl
S2luZDo6UmVmTnVsbCwgTnVsbGFibGU6Olllcywgc2lnbmF0dXJlSW5kZXggfTsKKyAgICAgICAg
ICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gVHlwZUluZm9ybWF0aW9uOjpnZXQobV9pbmZv
LnR5cGVTaWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7CisgICAgICAgICAgICAgICAgdHlwZU9m
TnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6OlllcywgdHlwZUluZGV4
IH07CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB0eXBlT2ZOdWxsID0gVHlw
ZSB7IFR5cGVLaW5kOjpSZWZOdWxsLCBOdWxsYWJsZTo6WWVzLCBzdGF0aWNfY2FzdDxTaWduYXR1
cmVJbmRleD4oaGVhcFR5cGUpIH07CisgICAgICAgICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUg
eyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6Olllcywgc3RhdGljX2Nhc3Q8VHlwZUluZGV4
PihoZWFwVHlwZSkgfTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVJlZlR5cGUobV9pbmZvLCB0eXBlT2ZOdWxsKSwgInJlZi5udWxsIHR5cGUg
bXVzdCBiZSBhIHJlZmVyZW5jZSB0eXBlIik7CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNv
bnN0cnVjdEFuZEFwcGVuZCh0eXBlT2ZOdWxsLCBtX2NvbnRleHQuYWRkQ29uc3RhbnQodHlwZU9m
TnVsbCwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOwpAQCAtMTExMyw4ICsxMTE2LDggQEAg
Rk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKGFkZFJlZkZ1bmMoaW5kZXgsIHJlc3VsdCkpOwogCiAgICAgICAg
IGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rpb25SZWZlcmVuY2VzKCkpIHsK
LSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25h
dHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7Ci0gICAgICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoVHlwZSB7IFR5cGVLaW5kOjpSZWYsIE51
bGxhYmxlOjpObywgc2lnbmF0dXJlSW5kZXggfSwgcmVzdWx0KTsKKyAgICAgICAgICAgIFR5cGVJ
bmRleCB0eXBlSW5kZXggPSBtX2luZm8udHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShp
bmRleCk7CisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQo
VHlwZSB7IFR5cGVLaW5kOjpSZWYsIE51bGxhYmxlOjpObywgdHlwZUluZGV4IH0sIHJlc3VsdCk7
CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAKQEAgLTExNzUsNyArMTE3OCw3
IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBU
eXBlZEV4cHJlc3Npb24gdmFsdWU7CiAgICAgICAgIFdBU01fVFJZX1BPUF9FWFBSRVNTSU9OX1NU
QUNLX0lOVE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7CiAgICAgICAgIFdBU01fVkFMSURB
VE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLmdsb2JhbHMuc2l6ZSgpLCAic2V0X2dsb2JhbCAi
LCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMgIiwgbV9pbmZvLmdsb2JhbHMu
c2l6ZSgpKTsKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2luZm8uZ2xvYmFsc1tp
bmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWxJbmZvcm1hdGlvbjo6SW1tdXRhYmxlLCAic2V0X2ds
b2JhbCAiLCBpbmRleCwgIiBpcyBpbW11dGFibGUiKTsKKyAgICAgICAgV0FTTV9WQUxJREFUT1Jf
RkFJTF9JRihtX2luZm8uZ2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBNdXRhYmlsaXR5OjpJ
bW11dGFibGUsICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIGlzIGltbXV0YWJsZSIpOwogCiAgICAg
ICAgIFR5cGUgZ2xvYmFsVHlwZSA9IG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlOwogICAgICAg
ICBBU1NFUlQoaXNWYWx1ZVR5cGUoZ2xvYmFsVHlwZSkpOwpAQCAtMTE4OSw4ICsxMTkyLDkgQEAg
Rk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFy
c2VGdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpKTsKIAotICAgICAgICBTaWduYXR1cmVJbmRl
eCBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1faW5mby5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgY2Fs
bGVlU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChjYWxsZWVTaWduYXR1cmVJ
bmRleCk7CisgICAgICAgIFR5cGVJbmRleCBjYWxsZWVUeXBlSW5kZXggPSBtX2luZm8udHlwZUlu
ZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgY29uc3Qg
VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uID0gVHlwZUluZm9ybWF0aW9uOjpnZXQoY2Fs
bGVlVHlwZUluZGV4KTsKKyAgICAgICAgY29uc3QgYXV0byYgY2FsbGVlU2lnbmF0dXJlID0gKnR5
cGVEZWZpbml0aW9uLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPiBtX2V4cHJlc3Npb25T
dGFjay5zaXplKCksICJjYWxsIGZ1bmN0aW9uIGluZGV4ICIsIGZ1bmN0aW9uSW5kZXgsICIgaGFz
ICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzLCBidXQgdGhl
IGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIsIG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSwgIiB2YWx1ZXMiKTsKIAogICAgICAgICBzaXplX3QgZmlyc3RBcmd1bWVudEluZGV4ID0g
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KTsKQEAgLTExOTgsNyArMTIwMiw3IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENS
RUFURV9DQVNFKQogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2VydmVD
YXBhY2l0eShjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9jYXRl
IGVub3VnaCBtZW1vcnkgZm9yIGNhbGwncyAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpLCAiIGFyZ3VtZW50cyIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVu
dEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25TdGFjay5hdChpKTsKLSAgICAgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShhcmcudHlwZSgpLCBjYWxsZWVT
aWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkpLCAiYXJndW1lbnQgdHlw
ZSBtaXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJnLnR5cGUoKS5raW5kLCAiLCBleHBlY3RlZCAi
LCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkua2luZCk7
CisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoYXJnLnR5cGUo
KSwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0gZmlyc3RBcmd1bWVudEluZGV4KSks
ICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGwsIGdvdCAiLCBhcmcudHlwZSgpLmtpbmQs
ICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSAtIGZpcnN0QXJn
dW1lbnRJbmRleCkua2luZCk7CiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChhcmcp
OwogICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAg
IH0KQEAgLTEyMDcsNyArMTIxMSw3IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENS
RUFURV9DQVNFKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVTaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7
Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwg
Y2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7CisgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwgdHlwZURlZmluaXRpb24sIGFyZ3MsIHJl
c3VsdHMpKTsKIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVTaWduYXR1cmUucmV0dXJu
Q291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CiAKQEAgLTEyMjQsMTAgKzEyMjgsMTEgQEAgRk9S
X0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCBj
YWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4Iik7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKHRhYmxlSW5kZXgpLCAiY2FuJ3QgZ2V0IGNhbGxfaW5kaXJl
Y3QncyB0YWJsZSBpbmRleCIpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHRhYmxlSW5k
ZXggPj0gbV9pbmZvLnRhYmxlQ291bnQoKSwgImNhbGxfaW5kaXJlY3QncyB0YWJsZSBpbmRleCAi
LCB0YWJsZUluZGV4LCAiIGludmFsaWQsIGxpbWl0IGlzICIsIG1faW5mby50YWJsZUNvdW50KCkp
OwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5mby51c2VkU2lnbmF0dXJlcy5zaXpl
KCkgPD0gc2lnbmF0dXJlSW5kZXgsICJjYWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4ICIs
IHNpZ25hdHVyZUluZGV4LCAiIGV4Y2VlZHMga25vd24gc2lnbmF0dXJlcyAiLCBtX2luZm8udXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8u
dHlwZUNvdW50KCkgPD0gc2lnbmF0dXJlSW5kZXgsICJjYWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJl
IGluZGV4ICIsIHNpZ25hdHVyZUluZGV4LCAiIGV4Y2VlZHMga25vd24gc2lnbmF0dXJlcyAiLCBt
X2luZm8udHlwZUNvdW50KCkpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5mby50
YWJsZXNbdGFibGVJbmRleF0udHlwZSgpICE9IFRhYmxlRWxlbWVudFR5cGU6OkZ1bmNyZWYsICJj
YWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRhYmxlIGhhcyB0eXBlIGZ1bmNyZWYi
KTsKIAotICAgICAgICBjb25zdCBTaWduYXR1cmUmIGNhbGxlZVNpZ25hdHVyZSA9IG1faW5mby51
c2VkU2lnbmF0dXJlc1tzaWduYXR1cmVJbmRleF0uZ2V0KCk7CisgICAgICAgIGNvbnN0IFR5cGVE
ZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiA9IG1faW5mby50eXBlU2lnbmF0dXJlc1tzaWduYXR1
cmVJbmRleF0uZ2V0KCk7CisgICAgICAgIGNvbnN0IGF1dG8mIGNhbGxlZVNpZ25hdHVyZSA9ICp0
eXBlRGVmaW5pdGlvbi5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKICAgICAgICAgc2l6ZV90IGFy
Z3VtZW50Q291bnQgPSBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpICsgMTsgLy8gQWRk
IHRoZSBjYWxsZWUncyBpbmRleC4KICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVu
dENvdW50ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbF9pbmRpcmVjdCBleHBlY3Rz
ICIsIGFyZ3VtZW50Q291bnQsICIgYXJndW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sg
Y3VycmVudGx5IGhvbGRzICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsK
IApAQCAtMTIzOSwxNCArMTI0NCwxNCBAQCBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChD
UkVBVEVfQ0FTRSkKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXJndW1lbnRJbmRleDsg
aSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBUeXBlZEV4
cHJlc3Npb24gYXJnID0gbV9leHByZXNzaW9uU3RhY2suYXQoaSk7CiAgICAgICAgICAgICBpZiAo
aSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIDEpCi0gICAgICAgICAgICAgICAgV0FTTV9W
QUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGFyZy50eXBlKCksIGNhbGxlZVNpZ25hdHVyZS5h
cmd1bWVudChpIC0gZmlyc3RBcmd1bWVudEluZGV4KSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNo
IGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmcudHlwZSgpLmtpbmQsICIsIGV4cGVjdGVkICIs
IGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0gZmlyc3RBcmd1bWVudEluZGV4KS5raW5kKTsK
KyAgICAgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoYXJnLnR5
cGUoKSwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0gZmlyc3RBcmd1bWVudEluZGV4
KSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmcu
dHlwZSgpLmtpbmQsICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudFR5cGUo
aSAtIGZpcnN0QXJndW1lbnRJbmRleCkua2luZCk7CiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tl
ZEFwcGVuZChhcmcpOwogICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNr
KCk7CiAgICAgICAgIH0KICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJn
dW1lbnRJbmRleCk7CiAKICAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOwotICAgICAgICBXQVNN
X1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxsSW5kaXJlY3QodGFibGVJbmRleCwgY2FsbGVlU2ln
bmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhU
KGFkZENhbGxJbmRpcmVjdCh0YWJsZUluZGV4LCB0eXBlRGVmaW5pdGlvbiwgYXJncywgcmVzdWx0
cykpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYWxsZWVTaWduYXR1cmUu
cmV0dXJuQ291bnQoKTsgKytpKQogICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3Ry
dWN0QW5kQXBwZW5kKGNhbGxlZVNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpLCByZXN1bHRzW2ldKTsK
QEAgLTEyNTgsOCArMTI2Myw5IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFU
RV9DQVNFKQogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFPcHRpb25zOjp1c2VXZWJBc3Nl
bWJseVR5cGVkRnVuY3Rpb25SZWZlcmVuY2VzKCksICJmdW5jdGlvbiByZWZlcmVuY2VzIGFyZSBu
b3QgZW5hYmxlZCIpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1JlZldpdGhU
eXBlSW5kZXgobV9leHByZXNzaW9uU3RhY2subGFzdCgpLnR5cGUoKSksICJub24tZnVuY3JlZiBj
YWxsX3JlZiB2YWx1ZSAiLCBtX2V4cHJlc3Npb25TdGFjay5sYXN0KCkudHlwZSgpLmtpbmQpOwog
Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZUluZGV4IGNhbGxlZVNpZ25hdHVyZUluZGV4ID0gbV9l
eHByZXNzaW9uU3RhY2subGFzdCgpLnR5cGUoKS5pbmRleDsKLSAgICAgICAgY29uc3QgU2lnbmF0
dXJlJiBjYWxsZWVTaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KGNhbGxlZVNp
Z25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3QgVHlwZUluZGV4IGNhbGxlZVR5cGVJbmRleCA9
IG1fZXhwcmVzc2lvblN0YWNrLmxhc3QoKS50eXBlKCkuaW5kZXg7CisgICAgICAgIGNvbnN0IFR5
cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KGNhbGxl
ZVR5cGVJbmRleCk7CisgICAgICAgIGNvbnN0IGF1dG8mIGNhbGxlZVNpZ25hdHVyZSA9ICp0eXBl
RGVmaW5pdGlvbi5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKICAgICAgICAgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQgPSBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpICsgMTsgLy8gQWRkIHRo
ZSBjYWxsZWUncyB2YWx1ZS4KICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVudENv
dW50ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbF9yZWYgZXhwZWN0cyAiLCBhcmd1
bWVudENvdW50LCAiIGFyZ3VtZW50cywgYnV0IHRoZSBleHByZXNzaW9uIHN0YWNrIGN1cnJlbnRs
eSBob2xkcyAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgdmFsdWVzIik7CiAKQEAgLTEy
NjksMTQgKzEyNzUsMTQgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NB
U0UpCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4
cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVHlwZWRFeHByZXNzaW9u
IGFyZyA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpOwogICAgICAgICAgICAgaWYgKGkgPCBtX2V4
cHJlc3Npb25TdGFjay5zaXplKCkgLSAxKQotICAgICAgICAgICAgICAgIFdBU01fVkFMSURBVE9S
X0ZBSUxfSUYoYXJnLnR5cGUoKSAhPSBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0
QXJndW1lbnRJbmRleCksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3Qs
IGdvdCAiLCBhcmcudHlwZSgpLmtpbmQsICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25hdHVyZS5h
cmd1bWVudChpIC0gZmlyc3RBcmd1bWVudEluZGV4KS5raW5kKTsKKyAgICAgICAgICAgICAgICBX
QVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZy50eXBlKCkgIT0gY2FsbGVlU2lnbmF0dXJlLmFyZ3Vt
ZW50VHlwZShpIC0gZmlyc3RBcmd1bWVudEluZGV4KSwgImFyZ3VtZW50IHR5cGUgbWlzbWF0Y2gg
aW4gY2FsbF9pbmRpcmVjdCwgZ290ICIsIGFyZy50eXBlKCkua2luZCwgIiwgZXhwZWN0ZWQgIiwg
Y2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0gZmlyc3RBcmd1bWVudEluZGV4KS5raW5k
KTsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKGFyZyk7CiAgICAgICAgICAgICBt
X2NvbnRleHQuZGlkUG9wVmFsdWVGcm9tU3RhY2soKTsKICAgICAgICAgfQogICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4KTsKIAogICAgICAgICBSZXN1
bHRMaXN0IHJlc3VsdHM7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxS
ZWYoY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7CisgICAgICAgIFdBU01fVFJZX0FE
RF9UT19DT05URVhUKGFkZENhbGxSZWYodHlwZURlZmluaXRpb24sIGFyZ3MsIHJlc3VsdHMpKTsK
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbGVlU2lnbmF0dXJlLnJldHVy
bkNvdW50KCk7ICsraSkKICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFu
ZEFwcGVuZChjYWxsZWVTaWduYXR1cmUucmV0dXJuVHlwZShpKSwgcmVzdWx0c1tpXSk7CkBAIC0x
Mjg1LDIwICsxMjkxLDIxIEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9D
QVNFKQogICAgIH0KIAogICAgIGNhc2UgQmxvY2s6IHsKLSAgICAgICAgQmxvY2tTaWduYXR1cmUg
aW5saW5lU2lnbmF0dXJlOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2Nr
U2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCBibG9jaydzIHNp
Z25hdHVyZSIpOworICAgICAgICBCbG9ja1NpZ25hdHVyZSBpbmxpbmVTaWduYXR1cmVBc1R5cGU7
CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlQmxvY2tTaWduYXR1cmUobV9pbmZv
LCBpbmxpbmVTaWduYXR1cmVBc1R5cGUpLCAiY2FuJ3QgZ2V0IGJsb2NrJ3Mgc2lnbmF0dXJlIik7
CiAKKyAgICAgICAgY29uc3QgRnVuY3Rpb25TaWduYXR1cmUqIGlubGluZVNpZ25hdHVyZSA9IGlu
bGluZVNpZ25hdHVyZUFzVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgaW5saW5lU2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IHZhbHVlcyBvbiBzdGFjayBmb3IgYmxv
Y2suIEJsb2NrIGV4cGVjdHMgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICIs
IGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNlbnQuIEJs
b2NrIGhhcyBpbmxpbmVTaWduYXR1cmU6ICIsIGlubGluZVNpZ25hdHVyZS0+dG9TdHJpbmcoKSk7
CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGlu
bGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAg
ICAgICAgVHlwZSB0eXBlID0gbV9leHByZXNzaW9uU3RhY2suYXQob2Zmc2V0ICsgaSkudHlwZSgp
OwotICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0eXBlICE9IGlubGluZVNpZ25h
dHVyZS0+YXJndW1lbnQoaSksICJCbG9jayBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIs
IGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBh
cmd1bWVudCBoYXMgdHlwZSAiLCB0eXBlLmtpbmQpOworICAgICAgICAgICAgV0FTTV9WQUxJREFU
T1JfRkFJTF9JRih0eXBlICE9IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLCAiQmxv
Y2sgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNp
Z25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIs
IHR5cGUua2luZCk7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQ2NF90IG9sZFNpemUgPSBtX2V4
cHJlc3Npb25TdGFjay5zaXplKCk7CiAgICAgICAgIFN0YWNrIG5ld1N0YWNrOwogICAgICAgICBD
b250cm9sVHlwZSBibG9jazsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQmxv
Y2soaW5saW5lU2lnbmF0dXJlLCBtX2V4cHJlc3Npb25TdGFjaywgYmxvY2ssIG5ld1N0YWNrKSk7
CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEJsb2NrKGlubGluZVNpZ25hdHVy
ZUFzVHlwZSwgbV9leHByZXNzaW9uU3RhY2ssIGJsb2NrLCBuZXdTdGFjaykpOwogICAgICAgICBB
U1NFUlRfVU5VU0VEKG9sZFNpemUsIG9sZFNpemUgLSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkg
PT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwogICAgICAgICBBU1NFUlQobmV3
U3RhY2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKIApAQCAt
MTMwOCwyMCArMTMxNSwyMSBAQCBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVf
Q0FTRSkKICAgICB9CiAKICAgICBjYXNlIExvb3A6IHsKLSAgICAgICAgQmxvY2tTaWduYXR1cmUg
aW5saW5lU2lnbmF0dXJlOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2Nr
U2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCBsb29wJ3Mgc2ln
bmF0dXJlIik7CisgICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZUFzVHlwZTsK
KyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VCbG9ja1NpZ25hdHVyZShtX2luZm8s
IGlubGluZVNpZ25hdHVyZUFzVHlwZSksICJjYW4ndCBnZXQgbG9vcCdzIHNpZ25hdHVyZSIpOwog
CisgICAgICAgIGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlKiBpbmxpbmVTaWduYXR1cmUgPSBpbmxp
bmVTaWduYXR1cmVBc1R5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOwogICAgICAgICBXQVNN
X1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGluZVNpZ25h
dHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyB2YWx1ZXMgb24gc3RhY2sgZm9yIGxvb3Ag
YmxvY2suIExvb3AgZXhwZWN0cyAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwg
IiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4g
TG9vcCBoYXMgaW5saW5lU2lnbmF0dXJlOiAiLCBpbmxpbmVTaWduYXR1cmUtPnRvU3RyaW5nKCkp
OwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBp
bmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAg
ICAgICAgIFR5cGUgdHlwZSA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KG9mZnNldCArIGkpLnR5cGUo
KTsKLSAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodHlwZSAhPSBpbmxpbmVTaWdu
YXR1cmUtPmFyZ3VtZW50KGkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIs
IGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBh
cmd1bWVudCBoYXMgdHlwZSAiLCB0eXBlLmtpbmQpOworICAgICAgICAgICAgV0FTTV9WQUxJREFU
T1JfRkFJTF9JRih0eXBlICE9IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLCAiTG9v
cCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2ln
bmF0dXJlLT5hcmd1bWVudFR5cGUoaSkua2luZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwg
dHlwZS5raW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIGludDY0X3Qgb2xkU2l6ZSA9IG1fZXhw
cmVzc2lvblN0YWNrLnNpemUoKTsKICAgICAgICAgU3RhY2sgbmV3U3RhY2s7CiAgICAgICAgIENv
bnRyb2xUeXBlIGxvb3A7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZExvb3Ao
aW5saW5lU2lnbmF0dXJlLCBtX2V4cHJlc3Npb25TdGFjaywgbG9vcCwgbmV3U3RhY2ssIG1fbG9v
cEluZGV4KyspKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkTG9vcChpbmxp
bmVTaWduYXR1cmVBc1R5cGUsIG1fZXhwcmVzc2lvblN0YWNrLCBsb29wLCBuZXdTdGFjaywgbV9s
b29wSW5kZXgrKykpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFNpemUsIG9sZFNpemUgLSBt
X2V4cHJlc3Npb25TdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCkpOwogICAgICAgICBBU1NFUlQobmV3U3RhY2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpKTsKIApAQCAtMTMzMSwyMSArMTMzOSwyMiBAQCBGT1JfRUFDSF9XQVNN
X01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICB9CiAKICAgICBjYXNlIElmOiB7Ci0g
ICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZTsKKyAgICAgICAgQmxvY2tTaWdu
YXR1cmUgaW5saW5lU2lnbmF0dXJlQXNUeXBlOwogICAgICAgICBUeXBlZEV4cHJlc3Npb24gY29u
ZGl0aW9uOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJl
KG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCBpZidzIHNpZ25hdHVyZSIpOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywg
aW5saW5lU2lnbmF0dXJlQXNUeXBlKSwgImNhbid0IGdldCBpZidzIHNpZ25hdHVyZSIpOwogICAg
ICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKGNvbmRpdGlvbiwgImlmIGNv
bmRpdGlvbiIpOwogCisgICAgICAgIGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlKiBpbmxpbmVTaWdu
YXR1cmUgPSBpbmxpbmVTaWduYXR1cmVBc1R5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOwog
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFjb25kaXRpb24udHlwZSgpLmlzSTMyKCks
ICJpZiBjb25kaXRpb24gbXVzdCBiZSBpMzIsIGdvdCAiLCBjb25kaXRpb24udHlwZSgpLmtpbmQp
OwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUo
KSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1bWVudHMg
b24gc3RhY2sgZm9yIGlmIGJsb2NrLiBJZiBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIg
d2VyZSBwcmVzZW50LiBJZiBibG9jayBoYXMgc2lnbmF0dXJlOiAiLCBpbmxpbmVTaWduYXR1cmUt
PnRvU3RyaW5nKCkpOwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Npb25TdGFj
ay5zaXplKCkgLSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyAr
K2kpCi0gICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNr
W29mZnNldCArIGldLnR5cGUoKSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiTG9v
cCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2ln
bmF0dXJlLT5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4
cHJlc3Npb25TdGFja1tpXS50eXBlKCkua2luZCk7CisgICAgICAgICAgICBXQVNNX1ZBTElEQVRP
Ul9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCArIGldLnR5cGUoKSAhPSBpbmxpbmVT
aWduYXR1cmUtPmFyZ3VtZW50VHlwZShpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQg
aW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLmtp
bmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIG1fZXhwcmVzc2lvblN0YWNrW2ldLnR5cGUo
KS5raW5kKTsKIAogICAgICAgICBpbnQ2NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5z
aXplKCk7CiAgICAgICAgIFN0YWNrIG5ld1N0YWNrOwogICAgICAgICBDb250cm9sVHlwZSBjb250
cm9sOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRJZihjb25kaXRpb24sIGlu
bGluZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGNvbnRyb2wsIG5ld1N0YWNrKSk7Cisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZElmKGNvbmRpdGlvbiwgaW5saW5lU2ln
bmF0dXJlQXNUeXBlLCBtX2V4cHJlc3Npb25TdGFjaywgY29udHJvbCwgbmV3U3RhY2spKTsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChvbGRTaXplLCBvbGRTaXplIC0gbV9leHByZXNzaW9uU3RhY2su
c2l6ZSgpID09IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICAgICAgQVNT
RVJUKG5ld1N0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7
CiAKQEAgLTEzNjksMTggKzEzNzgsMTkgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1Ao
Q1JFQVRFX0NBU0UpCiAgICAgY2FzZSBUcnk6IHsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCksICJ3YXNtIGV4Y2VwdGlvbnMg
YXJlIG5vdCBlbmFibGVkIik7CiAKLSAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0
dXJlOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1f
aW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCB0cnkncyBzaWduYXR1cmUiKTsKKyAg
ICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlQXNUeXBlOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0
dXJlQXNUeXBlKSwgImNhbid0IGdldCB0cnkncyBzaWduYXR1cmUiKTsKIAorICAgICAgICBjb25z
dCBGdW5jdGlvblNpZ25hdHVyZSogaW5saW5lU2lnbmF0dXJlID0gaW5saW5lU2lnbmF0dXJlQXNU
eXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRihtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciB0cnkgYmxvY2suIFRyeWUg
ZXhwZWN0cyAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkg
IiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4gVHJ5IGJsb2NrIGhh
cyBzaWduYXR1cmU6ICIsIGlubGluZVNpZ25hdHVyZS0+dG9TdHJpbmcoKSk7CiAgICAgICAgIHVu
c2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5s
aW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgICAgIFdBU01fVkFM
SURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2tbb2Zmc2V0ICsgaV0udHlwZSgpICE9IGlu
bGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSksICJUcnkgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQg
aW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSkua2luZCwg
IiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbV9leHByZXNzaW9uU3RhY2tbaV0udHlwZSgpLmtp
bmQpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFj
a1tvZmZzZXQgKyBpXS50eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudFR5cGUoaSks
ICJUcnkgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGlu
ZVNpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBl
ICIsIG1fZXhwcmVzc2lvblN0YWNrW2ldLnR5cGUoKS5raW5kKTsKIAogICAgICAgICBpbnQ2NF90
IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CiAgICAgICAgIFN0YWNrIG5ld1N0
YWNrOwogICAgICAgICBDb250cm9sVHlwZSBjb250cm9sOwotICAgICAgICBXQVNNX1RSWV9BRERf
VE9fQ09OVEVYVChhZGRUcnkoaW5saW5lU2lnbmF0dXJlLCBtX2V4cHJlc3Npb25TdGFjaywgY29u
dHJvbCwgbmV3U3RhY2spKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVHJ5
KGlubGluZVNpZ25hdHVyZUFzVHlwZSwgbV9leHByZXNzaW9uU3RhY2ssIGNvbnRyb2wsIG5ld1N0
YWNrKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU2l6ZSwgb2xkU2l6ZSAtIG1fZXhwcmVz
c2lvblN0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAg
ICAgICAgIEFTU0VSVChuZXdTdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVu
dENvdW50KCkpOwogCkBAIC0xMzk2LDggKzE0MDYsOCBAQCBGT1JfRUFDSF9XQVNNX01FTU9SWV9T
VE9SRV9PUChDUkVBVEVfQ0FTRSkKIAogICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsK
ICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4
Y2VwdGlvbkluZGV4KSk7Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0g
bV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5k
ZXgpOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBUeXBlSW5kZXgg
dHlwZUluZGV4ID0gbV9pbmZvLnR5cGVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2Vw
dGlvbkluZGV4KTsKKyAgICAgICAgY29uc3QgVHlwZURlZmluaXRpb24mIGV4Y2VwdGlvblNpZ25h
dHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCk7CiAKICAgICAgICAgQ29udHJv
bEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5sYXN0KCk7CiAgICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChjb250cm9sRW50cnkuY29udHJvbERh
dGEpLCAiY2F0Y2ggYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBhIHRyeSIpOwpAQCAtMTQwOCw5
ICsxNDE4LDkgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAg
ICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAocHJlQ2F0Y2hTdGFjayk7CiAgICAgICAgIFdB
U01fVFJZX0FERF9UT19DT05URVhUKGFkZENhdGNoKGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb25T
aWduYXR1cmUsIHByZUNhdGNoU3RhY2ssIGNvbnRyb2xFbnRyeS5jb250cm9sRGF0YSwgcmVzdWx0
cykpOwogCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCkgPT0gcmVzdWx0cy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICAg
ICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGV4Y2VwdGlvblNpZ25hdHVy
ZS5hcmd1bWVudChpKSwgcmVzdWx0c1tpXSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2Vw
dGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpID09
IHJlc3VsdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2Vw
dGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyAr
K2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhj
ZXB0aW9uU2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudFR5cGUoaSks
IHJlc3VsdHNbaV0pOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMTQ1Nyw4ICsx
NDY3LDggQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAKICAg
ICAgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CiAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQ
RVJfRkFJTFMocGFyc2VFeGNlcHRpb25JbmRleChleGNlcHRpb25JbmRleCkpOwotICAgICAgICBT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5mby5zaWduYXR1cmVJbmRleEZyb21F
eGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KTsKLSAgICAgICAgY29uc3QgU2lnbmF0
dXJlJiBleGNlcHRpb25TaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KTsKKyAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IG1faW5mby50eXBlSW5k
ZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7CisgICAgICAgIGNvbnN0
IGF1dG8mIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0RnVuY3Rpb25T
aWduYXR1cmUodHlwZUluZGV4KTsKIAogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCksICJUb28gZmV3IGFyZ3VtZW50cyBvbiBzdGFjayBmb3IgdGhlIGV4Y2VwdGlvbiBiZWluZyB0
aHJvd24uIFRoZSBleGNlcHRpb24gZXhwZWN0cyAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgd2Vy
ZSBwcmVzZW50LiBFeGNlcHRpb24gaGFzIHNpZ25hdHVyZTogIiwgZXhjZXB0aW9uU2lnbmF0dXJl
LnRvU3RyaW5nKCkpOwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Npb25TdGFj
ay5zaXplKCkgLSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOwpAQCAtMTQ2Niw3
ICsxNDc2LDcgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAg
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1l
bW9yeSBmb3IgdGhyb3cncyAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAi
IGFyZ3VtZW50cyIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9u
U2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICBUeXBlZEV4cHJl
c3Npb24gYXJnID0gbV9leHByZXNzaW9uU3RhY2suYXQob2Zmc2V0ICsgaSk7Ci0gICAgICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZy50eXBlKCkgIT0gZXhjZXB0aW9uU2lnbmF0dXJl
LmFyZ3VtZW50KGkpLCAiVGhlIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24gZXhwZWN0cyB0aGUgYXJn
dW1lbnQgYXQgaW5kZXggIiwgaSwgIiB0byBiZSAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1l
bnQoaSkua2luZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgYXJnLnR5cGUoKS5raW5kKTsK
KyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnLnR5cGUoKSAhPSBleGNlcHRp
b25TaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLCAiVGhlIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24g
ZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXggIiwgaSwgIiB0byBiZSAiLCBleGNlcHRpb25T
aWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIs
IGFyZy50eXBlKCkua2luZCk7CiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChhcmcp
OwogICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAg
IH0KQEAgLTE2NTAsOCArMTY2MCw4IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBh
cnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgICAgIHVp
bnQzMl90IGV4Y2VwdGlvbkluZGV4OwogICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxT
KHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgpKTsKLSAgICAgICAgU2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9u
SW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7Ci0gICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgZXhj
ZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CisgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBtX2luZm8udHlwZUluZGV4RnJvbUV4
Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAgICAgICBjb25zdCBUeXBlRGVm
aW5pdGlvbiYgZXhjZXB0aW9uU2lnbmF0dXJlID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUlu
ZGV4KTsKIAogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2NrcyA+IDEpCiAgICAgICAgICAg
ICByZXR1cm4geyB9OwpAQCAtMTY2NCw5ICsxNjc0LDkgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxD
b250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKICAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRF
WFQoYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb25TaWduYXR1
cmUsIGRhdGEuY29udHJvbERhdGEsIHJlc3VsdHMpKTsKIAotICAgICAgICBSRUxFQVNFX0FTU0VS
VChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IHJlc3VsdHMuc2l6ZSgpKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVj
dEFuZEFwcGVuZChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSksIHJlc3VsdHNbaV0pOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25TaWduYXR1cmUuYXM8RnVuY3Rpb25TaWdu
YXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXM8RnVuY3Rpb25TaWdu
YXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICAgICAgbV9leHByZXNzaW9u
U3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpLCByZXN1bHRzW2ldKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21HbG9iYWwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAK
aW5kZXggZWQxYjBmN2QxNjkyMmU2MmE2ZTc3NmYxOGVhMGE5NWI0M2UzYTQzZS4uMzJlMGE3YTk5
ZGY1MjUzNTM4ODIxYjRkZTUxZjU0OTE2ZWRmMGUxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUdsb2JhbC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBHbG9iYWw6OnNldChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFyZ3VtZW50KQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBBU1NFUlQobV9tdXRhYmlsaXR5ICE9IFdhc206Okdsb2Jh
bEluZm9ybWF0aW9uOjpJbW11dGFibGUpOworICAgIEFTU0VSVChtX211dGFiaWxpdHkgIT0gV2Fz
bTo6SW1tdXRhYmxlKTsKICAgICBzd2l0Y2ggKG1fdHlwZS5raW5kKSB7CiAgICAgY2FzZSBUeXBl
S2luZDo6STMyOiB7CiAgICAgICAgIGludDMyX3QgdmFsdWUgPSBhcmd1bWVudC50b0ludDMyKGds
b2JhbE9iamVjdCk7CkBAIC0xMDQsOCArMTA0LDggQEAgdm9pZCBHbG9iYWw6OnNldChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFyZ3VtZW50KQogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAoaXNSZWZXaXRoVHlwZUluZGV4KG1fdHlwZSkgJiYgIWFyZ3VtZW50
LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggcGFyYW1J
bmRleCA9IG1fdHlwZS5pbmRleDsKLSAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRl
eCBhcmdJbmRleCA9IHdhc21GdW5jdGlvbiA/IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgo
KSA6IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAg
ICAgV2FzbTo6VHlwZUluZGV4IHBhcmFtSW5kZXggPSBtX3R5cGUuaW5kZXg7CisgICAgICAgICAg
ICAgICAgV2FzbTo6VHlwZUluZGV4IGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9uID8gd2FzbUZ1bmN0
aW9uLT50eXBlSW5kZXgoKSA6IHdhc21XcmFwcGVyRnVuY3Rpb24tPnR5cGVJbmRleCgpOwogICAg
ICAgICAgICAgICAgIGlmIChwYXJhbUluZGV4ICE9IGFyZ0luZGV4KSB7CiAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiQXJndW1lbnQgZnVuY3Rp
b24gZGlkIG5vdCBtYXRjaCB0aGUgcmVmZXJlbmNlIHR5cGUiX3MpKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUdsb2JhbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCmluZGV4
IDE3Zjg4NjgxZTA2ZTQwMjI4MGQxOWFmYTJlZWJiY2FlOGQ5YmQxNWUuLjQzOGE3Zjc0MGZmOTkz
MTZjNzY1ODEzZWFlODcyZjdkNjc5NDBmOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21HbG9iYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtR2xvYmFsLmgKQEAgLTQ4LDEzICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIFZhbHVlKiBt
X3BvaW50ZXI7CiAgICAgfTsKIAotICAgIHN0YXRpYyBSZWY8R2xvYmFsPiBjcmVhdGUoV2FzbTo6
VHlwZSB0eXBlLCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eSBtdXRhYmlsaXR5
LCB1aW50NjRfdCBpbml0aWFsVmFsdWUgPSAwKQorICAgIHN0YXRpYyBSZWY8R2xvYmFsPiBjcmVh
dGUoV2FzbTo6VHlwZSB0eXBlLCBXYXNtOjpNdXRhYmlsaXR5IG11dGFiaWxpdHksIHVpbnQ2NF90
IGluaXRpYWxWYWx1ZSA9IDApCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBH
bG9iYWwodHlwZSwgbXV0YWJpbGl0eSwgaW5pdGlhbFZhbHVlKSk7CiAgICAgfQogCiAgICAgV2Fz
bTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgV2FzbTo6R2xvYmFs
SW5mb3JtYXRpb246Ok11dGFiaWxpdHkgbXV0YWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0
YWJpbGl0eTsgfQorICAgIFdhc206Ok11dGFiaWxpdHkgbXV0YWJpbGl0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fbXV0YWJpbGl0eTsgfQogICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KikgY29u
c3Q7CiAgICAgdWludDY0X3QgZ2V0UHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5t
X3ByaW1pdGl2ZTsgfQogICAgIHZvaWQgc2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CkBA
IC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBWYWx1ZSogdmFsdWVQb2ludGVyKCkgeyByZXR1
cm4gJm1fdmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBHbG9iYWwoV2FzbTo6VHlwZSB0eXBlLCBX
YXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eSBtdXRhYmlsaXR5LCB1aW50NjRfdCBp
bml0aWFsVmFsdWUpCisgICAgR2xvYmFsKFdhc206OlR5cGUgdHlwZSwgV2FzbTo6TXV0YWJpbGl0
eSBtdXRhYmlsaXR5LCB1aW50NjRfdCBpbml0aWFsVmFsdWUpCiAgICAgICAgIDogbV90eXBlKHR5
cGUpCiAgICAgICAgICwgbV9tdXRhYmlsaXR5KG11dGFiaWxpdHkpCiAgICAgICAgICwgbV92YWx1
ZSgpCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgV2FzbTo6VHlwZSBt
X3R5cGU7Ci0gICAgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHkgbV9tdXRhYmls
aXR5OworICAgIFdhc206Ok11dGFiaWxpdHkgbV9tdXRhYmlsaXR5OwogICAgIEpTT2JqZWN0KiBt
X293bmVyIHsgbnVsbHB0ciB9OwogICAgIFZhbHVlIG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKaW5kZXggYWVmNjIxOTAyZTExZjNjZGRl
NzYyYWVjYTU3YjhkZDg0YmYwMWNlNy4uMjFlZDIxODk1NjUwNWFlZTlmMDNkZGE2NjUzZWUwMjAw
ZmEwYzNhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3Rh
bmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3Bw
CkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIK
LSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21UYWcuaCIK
KyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0No
ZWNrZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBA
IC0yMzIsNyArMjMyLDcgQEAgdm9pZCBJbnN0YW5jZTo6aW5pdEVsZW1lbnRTZWdtZW50KHVpbnQz
Ml90IHRhYmxlSW5kZXgsIGNvbnN0IEVsZW1lbnQmIHNlZ21lbnQsIHUKICAgICAgICAgLy8gZm9y
IHRoZSBpbXBvcnQuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjU1MTAKICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IHNlZ21lbnQu
ZnVuY3Rpb25JbmRpY2VzW3NyY0luZGV4XTsKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXgpOworICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9tb2R1bGUt
PnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CiAgICAgICAg
IGlmIChpc0ltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAgICAgICBKU09i
amVjdCogZnVuY3Rpb25JbXBvcnQgPSBpbXBvcnRGdW5jdGlvbjxXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+PihmdW5jdGlvbkluZGV4KS0+Z2V0KCk7CiAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJs
eUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb25JbXBvcnQpKSB7CkBAIC0yNTEsMTQgKzI1MSwxNCBA
QCB2b2lkIEluc3RhbmNlOjppbml0RWxlbWVudFNlZ21lbnQodWludDMyX3QgdGFibGVJbmRleCwg
Y29uc3QgRWxlbWVudCYgc2VnbWVudCwgdQogICAgICAgICAgICAgICAgIGZ1bmN0aW9uSW1wb3J0
LAogICAgICAgICAgICAgICAgIGZ1bmN0aW9uSW5kZXgsCiAgICAgICAgICAgICAgICAganNJbnN0
YW5jZSwKLSAgICAgICAgICAgICAgICBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAg
dHlwZUluZGV4KTsKICAgICAgICAgICAgIGpzVGFibGUtPnNldChkc3RJbmRleCwgd3JhcHBlckZ1
bmN0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgQ2Fs
bGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjYWxsZWVHcm91cCgpLT5lbWJlZGRlckVu
dHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwogICAg
ICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2lu
dExvYWRMb2NhdGlvbiA9IGNhbGxlZUdyb3VwKCktPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICBjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OworICAgICAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldEZ1
bmN0aW9uU2lnbmF0dXJlKHR5cGVJbmRleCk7CiAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhw
b3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCiAgICAgICAgIC8v
IFdoYXQgaWYgd2UgYWxzbyBzZXQgaXQgdG8gdGhlIHRhYmxlIGFuIEVsZW1lbnQgdy8gaW5kZXgg
MC4KICAgICAgICAgLy8gRG9lcyAobmV3IEluc3RhbmNlKC4uLikpLmV4cG9ydHMuZm9vID09PSB0
YWJsZS5nZXQoMCk/CkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBJbnN0YW5jZTo6aW5pdEVsZW1l
bnRTZWdtZW50KHVpbnQzMl90IHRhYmxlSW5kZXgsIGNvbnN0IEVsZW1lbnQmIHNlZ21lbnQsIHUK
ICAgICAgICAgICAgIGpzSW5zdGFuY2UsCiAgICAgICAgICAgICBlbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWUsCiAgICAgICAgICAgICBlbnRyeXBvaW50TG9hZExvY2F0aW9uLAotICAgICAgICAgICAg
c2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgdHlwZUluZGV4KTsKICAgICAgICAganNUYWJs
ZS0+c2V0KGRzdEluZGV4LCBmdW5jdGlvbik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggMTM1NjkwZGEyZDYw
YjdjYmM2OTliYTI1NjM0ZGIyNWU0N2MwZGQwMS4uNzFlMDY0N2M1NjY2NmVhMGZmZDNjYzQ1YTRk
ZTYxMWUwNzkyNzdmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TExJbnRHZW5lcmF0b3IuY3BwCkBAIC05NSwyNyArOTUsMjcgQEAgcHVibGljOgogCiAgICAgICAg
IHN0YXRpYyBDb250cm9sVHlwZSBsb29wKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWdu
ZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgYm9keSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVh
dGlvbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVy
ZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGlu
dWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3ZlKGJvZHkpIH0pOworICAgICAgICAgICAgcmV0
dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hczxGdW5j
dGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiks
IENvbnRyb2xMb29wIHsgV1RGTW92ZShib2R5KSB9KTsKICAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyBDb250cm9sVHlwZSBibG9jayhCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVk
IHN0YWNrU2l6ZSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbEJsb2Nr
IHsgfSk7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1Np
emUgLSBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCks
IFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbEJsb2NrIHsgfSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgaWZfKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
dW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgYWx0ZXJuYXRlLCBSZWZQdHI8TGFiZWw+
JiYgY29udGludWF0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5
cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgV1RG
TW92ZShjb250aW51YXRpb24pLCBDb250cm9sSWYgeyBXVEZNb3ZlKGFsdGVybmF0ZSkgfSk7Cisg
ICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWdu
YXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUo
Y29udGludWF0aW9uKSwgQ29udHJvbElmIHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOwogICAgICAg
ICB9CiAKICAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGNyZWF0ZVRyeShCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIHRyeUxhYmVsLCBS
ZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uLCB1bnNpZ25lZCB0cnlEZXB0aCkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0g
c2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJv
bFRyeSB7IFdURk1vdmUodHJ5TGFiZWwpLCB0cnlEZXB0aCB9KTsKKyAgICAgICAgICAgIHJldHVy
biBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXM8RnVuY3Rp
b25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBD
b250cm9sVHJ5IHsgV1RGTW92ZSh0cnlMYWJlbCksIHRyeURlcHRoIH0pOwogICAgICAgICB9CiAK
ICAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGNyZWF0ZUNhdGNoKEJsb2NrU2lnbmF0dXJlIHNp
Z25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgdHJ5U3RhcnQsIFJlZlB0
cjxMYWJlbD4mJiBjb250aW51YXRpb24sIFJlZjxMYWJlbD4gdHJ5RW5kLCB1bnNpZ25lZCB0cnlE
ZXB0aCwgVmlydHVhbFJlZ2lzdGVyIGV4Y2VwdGlvbikKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbENhdGNoIHsgQ2F0Y2hL
aW5kOjpDYXRjaCwgV1RGTW92ZSh0cnlTdGFydCksIFdURk1vdmUodHJ5RW5kKSwgdHJ5RGVwdGgs
IGV4Y2VwdGlvbiB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUs
IHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50
Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sQ2F0Y2ggeyBDYXRjaEtpbmQ6
OkNhdGNoLCBXVEZNb3ZlKHRyeVN0YXJ0KSwgV1RGTW92ZSh0cnlFbmQpLCB0cnlEZXB0aCwgZXhj
ZXB0aW9uIH0pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNMb29wKGNvbnN0
IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENv
bnRyb2xMb29wPihjb250cm9sKTsgfQpAQCAtMTQyLDE5ICsxNDIsMTkgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIG1fY29udGludWF0aW9uOwogICAgICAgICB9CiAKLSAgICAgICAgU2ln
bmF0dXJlQXJnQ291bnQgYnJhbmNoVGFyZ2V0QXJpdHkoKSBjb25zdAorICAgICAgICBGdW5jdGlv
bkFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KCp0aGlzKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICAgICAg
ICAgIHJldHVybiBtX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50
KCk7CisgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5yZXR1cm5Db3VudCgpOwogICAgICAgICB9CiAKICAgICAgICAgVHlwZSBicmFuY2hUYXJn
ZXRUeXBlKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChp
IDwgYnJhbmNoVGFyZ2V0QXJpdHkoKSk7CiAgICAgICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxDb250cm9sTG9vcD4oKnRoaXMpKQotICAgICAgICAgICAgICAgIHJldHVybiBtX3Np
Z25hdHVyZS0+YXJndW1lbnQoaSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJl
dHVyblR5cGUoaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hczxGdW5j
dGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpOworICAgICAgICAgICAgcmV0dXJuIG1f
c2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZShpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIG1fc2lnbmF0dXJlOwpAQCAtMTkxLDcgKzE5
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXN1bHQobWFrZVN0cmlu
ZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6ICJfcywgbWFrZVN0cmluZyhh
cmdzKS4uLikpOwogICAgIH0KIAotICAgIExMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9u
JiwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJik7CisgICAgTExJbnRH
ZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25z
dCBUeXBlRGVmaW5pdGlvbiYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJs
b2NrR2VuZXJhdG9yPiBmaW5hbGl6ZSgpOwogCkBAIC0yMjMsNyArMjIzLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgLS1tX3N0YWNrU2l6ZTsgfQogCi0g
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFNp
Z25hdHVyZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3Vt
ZW50cyhjb25zdCBUeXBlRGVmaW5pdGlvbiYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAgICBFeHByZXNzaW9uVHlwZSBh
ZGRDb25zdGFudChUeXBlLCBpbnQ2NF90KTsKIApAQCAtMjg3LDggKzI4Nyw4IEBAIHB1YmxpYzoK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJs
ZShDb250cm9sVHlwZSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBl
JiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7Ci0gICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2Vw
dGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBTdGFjayYsIENvbnRyb2xUeXBl
JiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURl
ZmluaXRpb24mLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbChTdGFjayYsIENvbnRyb2xUeXBlJik7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGxUb1VucmVhY2hh
YmxlKENvbnRyb2xUeXBlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOwpAQCAtMzA0LDkgKzMwNCw5
IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbmRUb3BM
ZXZlbChCbG9ja1NpZ25hdHVyZSwgY29uc3QgU3RhY2smKTsKIAogICAgIC8vIENhbGxzCi0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJ
bmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVz
dWx0TGlzdCYgcmVzdWx0cyk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwotICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJl
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7Cisg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxs
ZWVJbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgVHlwZURl
ZmluaXRpb24mLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1
bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVmKGNv
bnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0
TGlzdCYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
VW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZGlkRmluaXNoUGFyc2luZ0xvY2FscygpOwpAQCAt
MzI4LDggKzMyOCw4IEBAIHByaXZhdGU6CiAgICAgICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
UmVzdWx0TGlzdCYpPiBjb21taXRSZXN1bHRzOwogICAgIH07CiAKLSAgICBMTEludENhbGxJbmZv
cm1hdGlvbiBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJik7Ci0gICAg
VmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKGNvbnN0
IFNpZ25hdHVyZSYpOworICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGNhbGxJbmZvcm1hdGlvbkZv
ckNhbGxlcihjb25zdCBGdW5jdGlvblNpZ25hdHVyZSYpOworICAgIFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXIsIDI+IGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShjb25zdCBGdW5jdGlvblNpZ25hdHVy
ZSYpOwogICAgIHZvaWQgbGlua1N3aXRjaFRhcmdldHMoTGFiZWwmLCB1bnNpZ25lZCBsb2NhdGlv
bik7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyRm9yV2FzbUxvY2FsKHVp
bnQzMl90IGluZGV4KQpAQCAtNTAwLDcgKzUwMCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Vz
ZXNFeGNlcHRpb25zIHsgZmFsc2UgfTsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0ZWNv
ZGUoY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2Rl
QmxvY2tHZW5lcmF0b3I+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVp
bnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgVHlwZURl
ZmluaXRpb24mIHNpZ25hdHVyZSwgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgpCiB7CiAgICAgTExJbnRHZW5lcmF0b3IgbGxpbnRHZW5lcmF0b3IoaW5mbywg
ZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlKTsKICAgICBGdW5jdGlvblBhcnNlcjxMTEludEdlbmVy
YXRvcj4gcGFyc2VyKGxsaW50R2VuZXJhdG9yLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBpbmZvKTsKQEAgLTUyNCw3ICs1MjQsNyBAQCBzdGF0aWMgVGhyZWFkU3Bl
Y2lmaWM8QnVmZmVyPiYgdGhyZWFkU3BlY2lmaWNCdWZmZXIoKQogICAgIHJldHVybiAqdGhyZWFk
U3BlY2lmaWNCdWZmZXJQdHI7CiB9CiAKLUxMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihN
b2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2ln
bmF0dXJlJikKK0xMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRvcihNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mKQog
ICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8RnVuY3Rpb25Db2RlQmxvY2tH
ZW5lcmF0b3I+KGZ1bmN0aW9uSW5kZXgpLCAwKQogICAgICwgbV9pbmZvKGluZm8pCiAgICAgLCBt
X2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKQEAgLTU2NSw3ICs1NjUsNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+IExMSW50R2VuZXJhdG9yOjpmaW5h
bGl6ZSgpCiAvLyBHZW5lcmF0ZWQgZnJvbSB3YXNtLmpzb24KICNpbmNsdWRlICJXYXNtTExJbnRH
ZW5lcmF0b3JJbmxpbmVzLmgiCiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlv
bkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJbnRDYWxsSW5mb3Jt
YXRpb24KK2F1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25z
dCBGdW5jdGlvblNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEludENhbGxJbmZvcm1hdGlvbgog
ewogICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgc3RhY2sgbGF5b3V0IGZvciBjYWxs
cy4gVGhlIGRlc2lyZWQgc3RhY2sgbGF5b3V0IGlzOgogCkBAIC02MjIsMTMgKzYyMiwxNCBAQCBh
dXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUpIC0+IExMSQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
VHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAgICAgIGNh
c2UgVHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KICAgICB9OwogCiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKQotICAgICAgICBhbGxvY2F0ZVN0YWNr
UmVnaXN0ZXIoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgYWxsb2NhdGVTdGFja1Jl
Z2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSkpOwogCiAgICAgZ3BySW5kZXggPSAwOwog
ICAgIGZwckluZGV4ID0gMDsKQEAgLTY1OCw3ICs2NTksNyBAQCBhdXRvIExMSW50R2VuZXJhdG9y
OjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+
IExMSQogICAgIGdwckluZGV4ID0gYmFzZSAtIHN0YWNrQ291bnQ7CiAgICAgZnBySW5kZXggPSBn
cHJJbmRleCAtIGdwckNvdW50OwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJn
dW1lbnQoaSkua2luZCkgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudFR5cGUo
aSkua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6CiAgICAgICAgIGNhc2UgVHlw
ZUtpbmQ6Okk2NDoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6RXh0ZXJucmVmOgpAQCAtNjc5LDYg
KzY4MCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBUeXBlS2luZDo6Vm9pZDoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6RnVuYzoK
KyAgICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTcwOCw2ICs3MTAsNyBAQCBh
dXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUpIC0+IExMSQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
VHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAgICAgIGNh
c2UgVHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC03MjYsNyArNzI5LDcgQEAgYXV0byBMTEludEdl
bmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlKSAtPiBMTEkKICAgICByZXR1cm4gTExJbnRDYWxsSW5mb3JtYXRpb24geyBzdGFja09mZnNl
dCwgc3RhY2tDb3VudCwgV1RGTW92ZShhcmd1bWVudHMpLCBXVEZNb3ZlKGNvbW1pdFJlc3VsdHMp
IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4K
K2F1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShjb25zdCBGdW5j
dGlvblNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAyPgog
ewogICAgIGlmIChtX3Jlc3VsdHMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbV9yZXN1bHRzOwpA
QCAtNzY1LDYgKzc2OCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZv
ckNhbGxlZShjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6Vm9pZDoKICAgICAgICAgY2FzZSBUeXBlS2lu
ZDo6RnVuYzoKKyAgICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0OgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTc3MiwxMSAr
Nzc2LDExIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjCiAgICAgcmV0dXJuIG1fcmVzdWx0czsK
IH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRBcmd1
bWVudHMoY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIG1fY29kZUJsb2NrLT5tX251bUFyZ3Vt
ZW50cyA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CisgICAgbV9jb2RlQmxvY2stPm1fbnVt
QXJndW1lbnRzID0gc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENv
dW50KCk7CiAgICAgbV9ub3JtYWxpemVkQXJndW1lbnRzLnJlc2l6ZShtX2NvZGVCbG9jay0+bV9u
dW1Bcmd1bWVudHMpOwogCiAgICAgY29uc3QgYXV0byYgY2FsbGluZ0NvbnZlbnRpb24gPSB3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKTsKQEAgLTc5OSw4ICs4MDMsOCBAQCBhdXRvIExMSW50R2VuZXJh
dG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxS
ZXN1bHQKICAgICAgICAgICAgIG1fbm9ybWFsaXplZEFyZ3VtZW50c1tpbmRleF0gPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoc3RhY2tJbmRleCsrKTsKICAgICB9Owog
Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
IGkrKykgewotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKS5raW5kKSB7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVy
ZT4oKS0+YXJndW1lbnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUu
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKS5raW5kKSB7CiAgICAgICAg
IGNhc2UgVHlwZUtpbmQ6OkkzMjoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6STY0OgogICAgICAg
ICBjYXNlIFR5cGVLaW5kOjpFeHRlcm5yZWY6CkBAIC04MTUsNiArODE5LDcgQEAgYXV0byBMTElu
dEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6
Vm9pZDoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6RnVuYzoKKyAgICAgICAgY2FzZSBUeXBlS2lu
ZDo6U3RydWN0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTEwMjAsNyArMTAyNSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6
OmFkZEVsc2UoQ29udHJvbFR5cGUmIGRhdGEsIFN0YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBh
cnRpCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xU
eXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgbV9zdGFja1NpemUgPSBkYXRhLnN0
YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgIG1fc3Rh
Y2tTaXplID0gZGF0YS5zdGFja1NpemUoKSArIGRhdGEubV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9u
U2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7CiAKICAgICBDb250cm9sSWYmIGNvbnRyb2wg
PSBzdGQ6OmdldDxDb250cm9sSWY+KGRhdGEpOwogICAgIGVtaXRMYWJlbChjb250cm9sLm1fYWx0
ZXJuYXRlLmdldCgpKTsKQEAgLTEwNTYsMTMgKzEwNjEsMTMgQEAgdm9pZCBMTEludEdlbmVyYXRv
cjo6ZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goQ29udHJvbFR5cGUmIGRhdGEsIFN0YWNr
JiBleHAKICAgICBXYXNtSm1wOjplbWl0KHRoaXMsIGRhdGEubV9jb250aW51YXRpb24tPmJpbmQo
dGhpcykpOwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBleGNl
cHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25TaWduYXR1cmUsIFN0YWNrJiBl
eHByZXNzaW9uU3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mIGV4Y2VwdGlvblNpZ25hdHVyZSwg
U3RhY2smIGV4cHJlc3Npb25TdGFjaywgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJl
c3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBmaW5hbGl6ZVByZXZpb3VzQmxvY2tGb3JD
YXRjaChkYXRhLCBleHByZXNzaW9uU3RhY2spOwogICAgIHJldHVybiBhZGRDYXRjaFRvVW5yZWFj
aGFibGUoZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvblNpZ25hdHVyZSwgZGF0YSwgcmVzdWx0cyk7
CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25l
ZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25TaWduYXR1cmUsIENv
bnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cith
dXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0
aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBleGNlcHRpb25TaWduYXR1cmUsIENvbnRy
b2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CiAgICAgUmVmPExhYmVsPiBjYXRjaExhYmVsID0g
bmV3RW1pdHRlZExhYmVsKCk7CkBAIC0xMDczLDE3ICsxMDc4LDE3IEBAIGF1dG8gTExJbnRHZW5l
cmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29u
c3QgU2lnbmF0CiAgICAgICAgIENvbnRyb2xUcnkmIHRyeURhdGEgPSBzdGQ6OmdldDxDb250cm9s
VHJ5PihkYXRhKTsKICAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBlOjpjcmVhdGVDYXRjaChkYXRh
Lm1fc2lnbmF0dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3ZlKHRyeURhdGEubV90cnkpLCBX
VEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pLCBjYXRjaExhYmVsLCB0cnlEYXRhLm1fdHJ5RGVw
dGgsIGV4Y2VwdGlvbik7CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNl
cHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJn
dW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2goKSk7CiAKICAg
ICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQotICAgICAgICBXYXNtQ2F0Y2g6OmVtaXQodGhp
cywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3VsdHNbMF0ub2Zmc2V0KCkpOwor
ICAgICAgICBXYXNtQ2F0Y2g6OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwg
ZXhjZXB0aW9uU2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50
KCksIHJlc3VsdHMuaXNFbXB0eSgpID8gMCA6IC1yZXN1bHRzWzBdLm9mZnNldCgpKTsKICAgICBl
bHNlCi0gICAgICAgIFdhc21DYXRjaE5vVGxzOjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBl
eGNlcHRpb24sIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIHJlc3VsdHMuaXNF
bXB0eSgpID8gMCA6IC1yZXN1bHRzWzBdLm9mZnNldCgpKTsKKyAgICAgICAgV2FzbUNhdGNoTm9U
bHM6OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9uU2lnbmF0
dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCksIHJlc3VsdHMuaXNF
bXB0eSgpID8gMCA6IC1yZXN1bHRzWzBdLm9mZnNldCgpKTsKIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFzPEZ1bmN0aW9u
U2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gcmVzdWx0c1tpXTsKLSAgICAgICAgVHlwZSB0eXBlID0gZXhjZXB0aW9uU2ln
bmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBUeXBlIHR5cGUgPSBleGNlcHRpb25TaWduYXR1
cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKICAgICAgICAgc3dp
dGNoICh0eXBlLmtpbmQpIHsKICAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjMyOgogICAg
ICAgICAgICAgV2FzbUYzMlJlaW50ZXJwcmV0STMyOjplbWl0KHRoaXMsIGRzdCwgZHN0KTsKQEAg
LTExODUsMTMgKzExOTAsMTMgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0aHJvdyh1bnNp
Z25lZCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1bHQKIAogYXV0byBMTEludEdl
bmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xUeXBlJiBkYXRhLCBTdGFjayYgcmV0dXJu
VmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgaWYgKCFkYXRhLm1fc2lnbmF0dXJlLT5y
ZXR1cm5Db3VudCgpKSB7CisgICAgaWYgKCFkYXRhLm1fc2lnbmF0dXJlLT5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKSkgewogICAgICAgICBXYXNtUmV0Vm9pZDo6ZW1pdCh0
aGlzKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICAvLyBubyBuZWVkIHRvIGRy
b3Aga2VlcCBoZXJlLCBzaW5jZSB3ZSBoYXZlIHRvIG1vdmUgYW55d2F5Ci0gICAgdW5pZnlWYWx1
ZXNXaXRoQmxvY2soY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpkYXRhLm1fc2lnbmF0dXJlKSwg
cmV0dXJuVmFsdWVzKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZWUoKmRhdGEubV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpKSwgcmV0
dXJuVmFsdWVzKTsKICAgICBXYXNtUmV0OjplbWl0KHRoaXMpOwogCiAgICAgcmV0dXJuIHsgfTsK
QEAgLTEyNjksMTQgKzEyNzQsMTQgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJl
YWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblMKICAgICB1bnNp
Z25lZCBzdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOwogICAgIGlmIChDb250cm9sVHlwZTo6
aXNBbnlDYXRjaChlbnRyeS5jb250cm9sRGF0YSkpCiAgICAgICAgICsrc3RhY2tTaXplOyAvLyBB
Y2NvdW50IGZvciB0aGUgY2F1Z2h0IGV4Y2VwdGlvbgotICAgIFJFTEVBU0VfQVNTRVJUKHVucmVh
Y2hhYmxlIHx8IG1fc3RhY2tTaXplID09ICBzdGFja1NpemUgKyBkYXRhLm1fc2lnbmF0dXJlLT5y
ZXR1cm5Db3VudCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh1bnJlYWNoYWJsZSB8fCBtX3N0YWNr
U2l6ZSA9PSAgc3RhY2tTaXplICsgZGF0YS5tX3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1
cmU+KCktPnJldHVybkNvdW50KCkpOwogCiAgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6
ZSgpOwogCiAgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeShkYXRhKSB8fCBzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbnRyb2xDYXRjaD4oZGF0YSkpCiAgICAgICAgIC0tbV90cnlEZXB0aDsKIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3Vu
dCgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3NpZ25hdHVy
ZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7ICsraSkgewogICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGRvIGEgY29uc2lzdGVuY3kgY2hlY2sgaGVyZSBiZWNhdXNl
IHdlIGp1c3QgcmVzZXQgdGhlIHN0YWNrIHNpemUKICAgICAgICAgLy8gYXJlIHB1c2hpbmcgbmV3
IHZhbHVlcywgd2hpbGUgd2UgYWxyZWFkeSBoYXZlIHRoZSBzYW1lIHZhbHVlcyBpbiB0aGUgc3Rh
Y2suCiAgICAgICAgIC8vIFRoZSBvbmx5IHJlYXNvbiB3ZSBkbyB0aGluZ3MgdGhpcyB3YXkgaXMg
c28gdGhhdCBpdCBhbHNvIHdvcmtzIGZvciB1bnJlYWNoYWJsZSBibG9ja3MsCkBAIC0xMjg1LDcg
KzEyOTAsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKENvbnRy
b2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uUwogICAgICAgICBhdXRvIHRtcCA9IHB1
c2goTm9Db25zaXN0ZW5jeUNoZWNrKTsKICAgICAgICAgQVNTRVJUKHVucmVhY2hhYmxlIHx8IHRt
cCA9PSBleHByZXNzaW9uU3RhY2tbaV0udmFsdWUoKSk7CiAgICAgICAgIGlmICh1bnJlYWNoYWJs
ZSkKLSAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFu
ZEFwcGVuZChkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpLCB0bXApOworICAgICAgICAg
ICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEu
bV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpLCB0bXAp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
ay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKICAgICB9CkBAIC0xMzAyLDI0ICsxMzA3LDI0
IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5
JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Npb25TCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmVuZFRv
cExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29uc3QgU3RhY2smIGV4cHJlc3Npb25T
dGFjaykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0VfQVNTRVJUKGV4cHJlc3Npb25T
dGFjay5zaXplKCkgPT0gc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWdu
YXR1cmU+KCktPnJldHVybkNvdW50KCkpOwogCi0gICAgaWYgKCFzaWduYXR1cmUtPnJldHVybkNv
dW50KCkpIHsKKyAgICBpZiAoIXNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJl
dHVybkNvdW50KCkpIHsKICAgICAgICAgV2FzbVJldFZvaWQ6OmVtaXQodGhpcyk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHVuaWZ5
VmFsdWVzV2l0aEJsb2NrKGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZSgqc2lnbmF0dXJlKSwgZXhw
cmVzc2lvblN0YWNrKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjYWxsSW5mb3JtYXRpb25G
b3JDYWxsZWUoKnNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpLCBleHByZXNzaW9u
U3RhY2spOwogICAgIFdhc21SZXQ6OmVtaXQodGhpcyk7CiAKICAgICByZXR1cm4geyB9OwogfQog
Ci1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9y
OjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBz
aWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3Vs
dHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSA9PSBhcmdzLnNpemUoKSk7Ci0gICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNh
bGxJbmZvcm1hdGlvbkZvckNhbGxlcihzaWduYXR1cmUpOworICAgIEFTU0VSVChzaWduYXR1cmUu
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7
CisgICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvckNhbGxl
cigqc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpKTsKICAgICB1bmlmeVZhbHVlc1dp
dGhCbG9jayhpbmZvLmFyZ3VtZW50cywgYXJncyk7CiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RU
TFMoKSkKICAgICAgICAgV2FzbUNhbGw6OmVtaXQodGhpcywgZnVuY3Rpb25JbmRleCwgaW5mby5z
dGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1lbnRzKTsKQEAgLTEzMzAsMzUgKzEz
MzUsMzUgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICByZXR1cm4geyB9OwogfQogCi1h
dXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwg
Y29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBUeXBlRGVmaW5p
dGlvbiYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0
JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVl
SW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CiAKLSAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hczxGdW5jdGlv
blNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKICAgICBBU1NF
UlQobV9pbmZvLnRhYmxlQ291bnQoKSA+IHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChtX2luZm8u
dGFibGVzW3RhYmxlSW5kZXhdLnR5cGUoKSA9PSBUYWJsZUVsZW1lbnRUeXBlOjpGdW5jcmVmKTsK
IAotICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3JDYWxs
ZXIoc2lnbmF0dXJlKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbEluZm9y
bWF0aW9uRm9yQ2FsbGVyKCpzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpOwogICAg
IHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGluZm8uYXJndW1lbnRzLCBhcmdzKTsKICAgICBpZiAoQ29u
dGV4dDo6dXNlRmFzdFRMUygpKQotICAgICAgICBXYXNtQ2FsbEluZGlyZWN0OjplbWl0KHRoaXMs
IGNhbGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKHNpZ25hdHVyZSksIGluZm8u
c3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cywgdGFibGVJbmRleCk7Cisg
ICAgICAgIFdhc21DYWxsSW5kaXJlY3Q6OmVtaXQodGhpcywgY2FsbGVlSW5kZXgsIG1fY29kZUJs
b2NrLT5hZGRTaWduYXR1cmUoKnNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKSksIGlu
Zm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cywgdGFibGVJbmRleCk7
CiAgICAgZWxzZQotICAgICAgICBXYXNtQ2FsbEluZGlyZWN0Tm9UbHM6OmVtaXQodGhpcywgY2Fs
bGVlSW5kZXgsIG1fY29kZUJsb2NrLT5hZGRTaWduYXR1cmUoc2lnbmF0dXJlKSwgaW5mby5zdGFj
a09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1lbnRzLCB0YWJsZUluZGV4KTsKKyAgICAg
ICAgV2FzbUNhbGxJbmRpcmVjdE5vVGxzOjplbWl0KHRoaXMsIGNhbGxlZUluZGV4LCBtX2NvZGVC
bG9jay0+YWRkU2lnbmF0dXJlKCpzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpLCBp
bmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVudHMsIHRhYmxlSW5kZXgp
OwogICAgIGluZm8uY29tbWl0UmVzdWx0cyhyZXN1bHRzKTsKIAogICAgIHJldHVybiB7IH07CiB9
CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMp
IC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3Qg
VHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
UmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEV4cHJlc3Npb25U
eXBlIGNhbGxlZSA9IGFyZ3MudGFrZUxhc3QoKTsKIAotICAgIExMSW50Q2FsbEluZm9ybWF0aW9u
IGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKKyAgICBMTEludENh
bGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKCpzaWduYXR1cmUu
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpOwogICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGluZm8u
YXJndW1lbnRzLCBhcmdzKTsKICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQotICAgICAg
ICBXYXNtQ2FsbFJlZjo6ZW1pdCh0aGlzLCBjYWxsZWUsIG1fY29kZUJsb2NrLT5hZGRTaWduYXR1
cmUoc2lnbmF0dXJlKSwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1l
bnRzKTsKKyAgICAgICAgV2FzbUNhbGxSZWY6OmVtaXQodGhpcywgY2FsbGVlLCBtX2NvZGVCbG9j
ay0+YWRkU2lnbmF0dXJlKCpzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpLCBpbmZv
LnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVudHMpOwogICAgIGVsc2UKLSAg
ICAgICAgV2FzbUNhbGxSZWZOb1Rsczo6ZW1pdCh0aGlzLCBjYWxsZWUsIG1fY29kZUJsb2NrLT5h
ZGRTaWduYXR1cmUoc2lnbmF0dXJlKSwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0
YWNrQXJndW1lbnRzKTsKKyAgICAgICAgV2FzbUNhbGxSZWZOb1Rsczo6ZW1pdCh0aGlzLCBjYWxs
ZWUsIG1fY29kZUJsb2NrLT5hZGRTaWduYXR1cmUoKnNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25h
dHVyZT4oKSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cyk7
CiAgICAgaW5mby5jb21taXRSZXN1bHRzKHJlc3VsdHMpOwogCiAgICAgcmV0dXJuIHsgfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKaW5kZXgg
YjU1Y2E1MjAxZDA4NTMyMmRjZTc0MTVjMTAzYmRkN2ZhNmNjZmVmOS4uYmRmZjQ0NTkyODI4ODM0
YTEwNjY4ODViMzE2YjY1YjBiZjdkMjU5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKQEAgLTMzLDEwICszMywxMCBAQAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0
b3I7Ci1jbGFzcyBTaWduYXR1cmU7CitjbGFzcyBUeXBlRGVmaW5pdGlvbjsKIHN0cnVjdCBNb2R1
bGVJbmZvcm1hdGlvbjsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJs
b2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1aW50
OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBNb2R1bGVJbmZvcm1hdGlvbiYsIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCeXRlY29kZShjb25zdCB1
aW50OF90Kiwgc2l6ZV90LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIE1vZHVsZUluZm9ybWF0aW9u
JiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKaW5kZXgg
YzI0OWY5MmNmMDViYjBjOGMzNDRlYTVhYjcxYjM5NmYxYWRiOTRjMS4uOGI0MzZkMmRjZjU2ZWY2
MmVkMmU0NDcyOGI0NDEzMTVmY2M5ODM3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUxMSW50UGxhbi5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21MTEludEdlbmVy
YXRvci5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2Fz
bVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdh
c20gewogCkBAIC03OSwxMCArNzksMTAgQEAgYm9vbCBMTEludFBsYW46OnByZXBhcmVJbXBsKCkK
IHZvaWQgTExJbnRQbGFuOjpjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCkK
IHsKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbiA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0
aW9uc1tmdW5jdGlvbkluZGV4XTsKLSAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1
bmN0aW9uSW5kZXhdOwotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgVHlwZUluZGV4IHR5cGVJbmRl
eCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlc1tmdW5j
dGlvbkluZGV4XTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlID0gVHlwZUlu
Zm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKICAgICB1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3Bh
Y2UgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpICsgZnVuY3Rpb25JbmRleDsKLSAgICBB
U1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2ln
bmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0g
c2lnbmF0dXJlSW5kZXgpOworICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rpb25JbmRleFNwYWNlLCBt
X21vZHVsZUluZm9ybWF0aW9uLT50eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXhTcGFjZSkgPT0gdHlwZUluZGV4KTsKIAogICAgIG1fdW5saW5rZWRXYXNtVG9XYXNt
Q2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsK
ICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+
LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZUJ5dGVjb2Rl
KGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgc2lnbmF0dXJlLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBmdW5jdGlvbkluZGV4KTsKQEAgLTE0OCw4ICsxNDgs
OCBAQCB2b2lkIExMSW50UGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbigpCiAKICAgICBmb3Ig
KHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJbmZv
cm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAgICAgIGlm
IChtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpIHx8IG1f
bW9kdWxlSW5mb3JtYXRpb24tPnJlZmVyZW5jZWRGdW5jdGlvbnMoKS5jb250YWlucyhmdW5jdGlv
bkluZGV4KSkgewotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5j
dGlvbkluZGV4XTsKLSAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBUeXBl
SW5kZXggdHlwZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblR5
cGVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAgY29uc3QgVHlwZURlZmluaXRp
b24mIHNpZ25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCk7CiAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgICAgICAgICAgLy8gVGhlIExMSW50IGFsd2F5cyBi
b3VuZHMgY2hlY2tzCiAgICAgICAgICAgICBNZW1vcnlNb2RlIG1vZGUgPSBNZW1vcnlNb2RlOjpC
b3VuZHNDaGVja2luZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MaW1pdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaAppbmRl
eCBmOGYwNTNiNTg2MGU3ZGY5N2RiNDQ2NGFhMGVhMTc0OGQ5Yjg3ZjM2Li41ODcwMzQ3MzQ2NjM4
ZDRhMmRlNTMyMGI0NTM3NDY0MzdmZWFkODI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTGltaXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUxpbWl0cy5oCkBAIC00NCw2ICs0NCw3IEBAIGNvbnN0ZXhwciBzaXplX3QgbWF4RXhwb3J0
cyA9IDEwMDAwMDsKIGNvbnN0ZXhwciBzaXplX3QgbWF4RXhjZXB0aW9ucyA9IDEwMDAwMDsKIGNv
bnN0ZXhwciBzaXplX3QgbWF4R2xvYmFscyA9IDEwMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1h
eERhdGFTZWdtZW50cyA9IDEwMDAwMDsKK2NvbnN0ZXhwciBzaXplX3QgbWF4U3RydWN0RmllbGRD
b3VudCA9IDEwMDAwOwogCiBjb25zdGV4cHIgc2l6ZV90IG1heFN0cmluZ1NpemUgPSAxMDAwMDA7
CiBjb25zdGV4cHIgc2l6ZV90IG1heE1vZHVsZVNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCmluZGV4IDE5NTk4YWFiZDA3
NTQ2M2Y3YTc2ZDkzNGM5ZGFmZWYwNDY1NjU5MTkuLmI5ZDUzMzMwMGNkYTcyMWQxN2NmZjgxNTY2
MTI5NDM1ZTAwMjM1YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
Y3BwCkBAIC00Myw5ICs0Myw5IEBAIE1vZHVsZTo6TW9kdWxlKExMSW50UGxhbiYgcGxhbikKIAog
TW9kdWxlOjp+TW9kdWxlKCkgeyB9CiAKLVdhc206OlNpZ25hdHVyZUluZGV4IE1vZHVsZTo6c2ln
bmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhT
cGFjZSkgY29uc3QKK1dhc206OlR5cGVJbmRleCBNb2R1bGU6OnR5cGVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdAogewotICAgIHJl
dHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOwog
fQogCiBzdGF0aWMgTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IG1ha2VWYWxpZGF0aW9uUmVzdWx0
KExMSW50UGxhbiYgcGxhbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApp
bmRleCA2MmM2OTI3ZjJjOWE5ODFiODQwZGNkNjljNmJkYjBkNDM0Y2RkOWJmLi43OTdhODFjMTc0
YTIwZTdhM2U4NWM1NGZlMGMyMTI3YzE5MGE2YTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1vZHVsZS5oCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgTW9kdWxlKHBsYW4pKTsKICAgICB9CiAKLSAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVu
Y3Rpb25JbmRleFNwYWNlKSBjb25zdDsKKyAgICBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0Owog
ICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KIAogICAgIFJlZjxDYWxs
ZWVHcm91cD4gY29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9yeU1vZGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAppbmRleCBhZTZi
YmVlZGYyMTg2MTk0M2I4OTBmNzIzMTUzYzc4ODhjZmM0OTY3Li44MGY3YjllMTI4M2VlMDA3YjFl
YzQwMWUzYTViMmQ4MjI4MDZlZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaApAQCAtNTAsMzYgKzUwLDM2IEBAIHN0cnVjdCBN
b2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGVJbmZv
cm1hdGlvbj4gewogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1vZHVsZUluZm9ybWF0aW9uKCk7
CiAgICAgCi0gICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSBjb25zdCB7IHJldHVy
biBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpICsgaW50ZXJuYWxGdW5jdGlv
blNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CisgICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFj
ZVNpemUoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzLnNpemUoKSAr
IGludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlcy5zaXplKCk7IH0KICAgICBib29sIGlzSW1wb3J0
ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc2l6ZV90IGZ1bmN0aW9uSW5kZXgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleCA8IGZ1bmN0aW9uSW5kZXhT
cGFjZVNpemUoKSk7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbkluZGV4IDwgaW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uSW5kZXgg
PCBpbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzLnNpemUoKTsKICAgICB9Ci0gICAgU2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHNpemVfdCBmdW5jdGlv
bkluZGV4KSBjb25zdAorICAgIFR5cGVJbmRleCB0eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHNpemVfdCBmdW5jdGlvbkluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlz
SW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCkKLSAg
ICAgICAgICAgID8gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhd
Ci0gICAgICAgICAgICA6IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9u
SW5kZXggLSBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpXTsKKyAgICAgICAg
ICAgID8gaW1wb3J0RnVuY3Rpb25UeXBlSW5kaWNlc1tmdW5jdGlvbkluZGV4XQorICAgICAgICAg
ICAgOiBpbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXNbZnVuY3Rpb25JbmRleCAtIGltcG9ydEZ1
bmN0aW9uVHlwZUluZGljZXMuc2l6ZSgpXTsKICAgICB9CiAKLSAgICBzaXplX3QgZXhjZXB0aW9u
SW5kZXhTcGFjZVNpemUoKSBjb25zdCB7IHJldHVybiBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJ
bmRpY2VzLnNpemUoKSArIGludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7
IH0KKyAgICBzaXplX3QgZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSBjb25zdCB7IHJldHVybiBp
bXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCkgKyBpbnRlcm5hbEV4Y2VwdGlvblR5cGVJ
bmRpY2VzLnNpemUoKTsgfQogICAgIGJvb2wgaXNJbXBvcnRlZEV4Y2VwdGlvbkZyb21FeGNlcHRp
b25JbmRleFNwYWNlKHNpemVfdCBleGNlcHRpb25JbmRleCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChleGNlcHRpb25JbmRleCA8IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkpOwotICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uSW5kZXggPCBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRp
Y2VzLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkluZGV4IDwgaW1wb3J0RXhjZXB0
aW9uVHlwZUluZGljZXMuc2l6ZSgpOwogICAgIH0KLSAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1
cmVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKHNpemVfdCBleGNlcHRpb25JbmRleCkgY29u
c3QKKyAgICBUeXBlSW5kZXggdHlwZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2Uoc2l6ZV90
IGV4Y2VwdGlvbkluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlzSW1wb3J0ZWRF
eGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCkKLSAgICAgICAg
ICAgID8gaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlc1tleGNlcHRpb25JbmRleF0KLSAg
ICAgICAgICAgIDogaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzW2V4Y2VwdGlvbklu
ZGV4IC0gaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCldOworICAgICAgICAg
ICAgPyBpbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlc1tleGNlcHRpb25JbmRleF0KKyAgICAgICAg
ICAgIDogaW50ZXJuYWxFeGNlcHRpb25UeXBlSW5kaWNlc1tleGNlcHRpb25JbmRleCAtIGltcG9y
dEV4Y2VwdGlvblR5cGVJbmRpY2VzLnNpemUoKV07CiAgICAgfQogCi0gICAgdWludDMyX3QgaW1w
b3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5zaXplKCk7IH0KLSAgICB1aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBj
b25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0K
LSAgICB1aW50MzJfdCBpbXBvcnRFeGNlcHRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9y
dEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9Ci0gICAgdWludDMyX3QgaW50ZXJu
YWxFeGNlcHRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsRXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50KCkg
Y29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25UeXBlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1
aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1
bmN0aW9uVHlwZUluZGljZXMuc2l6ZSgpOyB9CisgICAgdWludDMyX3QgaW1wb3J0RXhjZXB0aW9u
Q291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCk7
IH0KKyAgICB1aW50MzJfdCBpbnRlcm5hbEV4Y2VwdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4g
aW50ZXJuYWxFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCk7IH0KIAogICAgIC8vIEN1cnJlbnRs
eSwgb3VyIHdhc20gaW1wbGVtZW50YXRpb24gYWxsb3dzIG9ubHkgb25lIG1lbW9yeSBhbmQgdGFi
bGUuCiAgICAgLy8gSWYgd2UgbmVlZCB0byByZW1vdmUgdGhpcyBsaW1pdGF0aW9uLCB3ZSB3b3Vs
ZCBoYXZlIE1lbW9yeUluZm9ybWF0aW9uIGFuZCBUYWJsZUluZm9ybWF0aW9uIGluIHRoZSBWZWN0
b3JzLgpAQCAtOTksNiArOTksOCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICBib29sIGlzRGVj
bGFyZWRFeGNlcHRpb24odWludDMyX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjbGFyZWRF
eGNlcHRpb25zLmNvbnRhaW5zKGluZGV4KTsgfQogICAgIHZvaWQgYWRkRGVjbGFyZWRFeGNlcHRp
b24odWludDMyX3QgaW5kZXgpIHsgbV9kZWNsYXJlZEV4Y2VwdGlvbnMuc2V0KGluZGV4KTsgfQog
CisgICAgdWludDMyX3QgdHlwZUNvdW50KCkgY29uc3QgeyByZXR1cm4gdHlwZVNpZ25hdHVyZXMu
c2l6ZSgpOyB9CisKICAgICBib29sIGhhc01lbW9yeUltcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1l
bW9yeS5pc0ltcG9ydCgpOyB9CiAKICAgICBCcmFuY2hIaW50IGdldEJyYW5jaEhpbnQodWludDMy
X3QgZnVuY3Rpb25PZmZzZXQsIHVpbnQzMl90IGJyYW5jaE9mZnNldCkgY29uc3QKQEAgLTExMCwx
MSArMTEyLDExIEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxNb2R1bGVJbmZvcm1hdGlvbj4gewogICAgIH0KIAogICAgIFZlY3RvcjxJbXBv
cnQ+IGltcG9ydHM7Ci0gICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbXBvcnRGdW5jdGlvblNp
Z25hdHVyZUluZGljZXM7Ci0gICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbnRlcm5hbEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlczsKLSAgICBWZWN0b3I8U2lnbmF0dXJlSW5kZXg+IGltcG9ydEV4
Y2VwdGlvblNpZ25hdHVyZUluZGljZXM7Ci0gICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4PiBpbnRl
cm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXM7Ci0gICAgVmVjdG9yPFJlZjxTaWduYXR1cmU+
PiB1c2VkU2lnbmF0dXJlczsKKyAgICBWZWN0b3I8VHlwZUluZGV4PiBpbXBvcnRGdW5jdGlvblR5
cGVJbmRpY2VzOworICAgIFZlY3RvcjxUeXBlSW5kZXg+IGludGVybmFsRnVuY3Rpb25UeXBlSW5k
aWNlczsKKyAgICBWZWN0b3I8VHlwZUluZGV4PiBpbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlczsK
KyAgICBWZWN0b3I8VHlwZUluZGV4PiBpbnRlcm5hbEV4Y2VwdGlvblR5cGVJbmRpY2VzOworICAg
IFZlY3RvcjxSZWY8VHlwZURlZmluaXRpb24+PiB0eXBlU2lnbmF0dXJlczsKIAogICAgIE1lbW9y
eUluZm9ybWF0aW9uIG1lbW9yeTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9N
R1BsYW4uY3BwCmluZGV4IDI1MTI1MWY4YWFlMTlhZTA3MDUyMTZjMDkxOGQwZWUyMjlmMTViYzku
LjEwYjM2NzE2MWM1ZWJkMDRjNmFiM2IyMzA2NGEzZGIyNWE3NDdjNDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNs
dWRlICJXYXNtQ2FsbGVlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXYXNtSVJHZW5lcmF0b3JIZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25h
dHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCiAj
aW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNjgsOCArNjgsOCBAQCB2b2lkIE9NR1BsYW46Ondv
cmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNw
YWNlID0gbV9mdW5jdGlvbkluZGV4ICsgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1w
b3J0RnVuY3Rpb25Db3VudCgpOwogICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBtX21v
ZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogCi0g
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOwotICAgIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWdu
YXR1cmVJbmRleCk7CisgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRp
b24tPmludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOworICAgIGNv
bnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBl
SW5kZXgpOwogCiAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+IHVubGlua2VkQ2Fs
bHM7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCmluZGV4IGUyZTVjZTU3ZjUwZTAzNmM2
ZWI2ODMzMWE4M2VlYzFhZTA2NGJhMjQuLmE1MGI4NjdiOGJmNzQ4OGNjODBkMWI2NDI5NmIyNGI4
NjBkODI2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JF
bnRyeVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRy
eVBsYW4uY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiV2FzbUlSR2VuZXJhdG9ySGVs
cGVycy5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUgIldhc21O
YW1lU2VjdGlvbi5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
QEAgLTcwLDggKzcwLDggQEAgdm9pZCBPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZv
cnQpCiAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gbV9mdW5jdGlvbklu
ZGV4ICsgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgp
OwogICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKS5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogCi0gICAgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOwotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAg
VHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rp
b25UeXBlSW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOworICAgIGNvbnN0IFR5cGVEZWZpbml0aW9u
JiBzaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBlSW5kZXgpOwogCiAgICAgQ29t
cGlsYXRpb25Nb2RlIHRhcmdldENvbXBpbGF0aW9uTW9kZSA9IG1fY2FsbGVlLT5jb21waWxhdGlv
bk1vZGUoKSA9PSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZSA/IENvbXBpbGF0aW9uTW9kZTo6
QkJRRm9yT1NSRW50cnlNb2RlIDogQ29tcGlsYXRpb25Nb2RlOjpPTUdGb3JPU1JFbnRyeU1vZGU7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25z
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAppbmRl
eCBiYjQ2ZjhhODEzMmQxZWQ1NWUxYzM0YWY2YTAwZjBkMjQ5ZmYwZmMzLi4yZWYyNDhkYzI2YmIz
YjU2M2JkMjg3NDA0NjAyMWNjYTlkZTJlYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCkBAIC01MTQsNyArNTE0LDcgQEAgSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0JpZ0ludCwgRW5jb2RlZEpTVmFsdWUsIChD
YWxsRnJhbWUqIGMKIH0KIAogLy8gaHR0cHM6Ly93ZWJhc3NlbWJseS5naXRodWIuaW8vbXVsdGkt
dmFsdWUvanMtYXBpL2luZGV4Lmh0bWwjcnVuLWEtaG9zdC1mdW5jdGlvbgotSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRzLCB2b2lkLCAoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUs
IEpTVmFsdWUgcmVzdWx0LCB1aW50NjRfdCogcmVnaXN0ZXJSZXN1bHRzLCB1aW50NjRfdCogY2Fs
bGVlRnJhbWVQb2ludGVyKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25JdGVy
YXRlUmVzdWx0cywgdm9pZCwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFu
Y2UsIGNvbnN0IFR5cGVEZWZpbml0aW9uKiB0eXBlLCBKU1ZhbHVlIHJlc3VsdCwgdWludDY0X3Qq
IHJlZ2lzdGVyUmVzdWx0cywgdWludDY0X3QqIGNhbGxlZUZyYW1lUG9pbnRlcikpCiB7CiAgICAg
Ly8gRklYTUU6IENvbnNpZGVyIHBhc3NpbmcgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0ZWFk
LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMyMDYK
QEAgLTUyNCw3ICs1MjQsOSBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSXRl
cmF0ZVJlc3VsdHMsIHZvaWQsIChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSQogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBhdXRvIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcigqc2lnbmF0dXJlLCBDYWxsUm9sZTo6Q2FsbGVl
KTsKKyAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSogc2lnbmF0dXJlID0gdHlwZS0+YXM8RnVu
Y3Rpb25TaWduYXR1cmU+KCk7CisKKyAgICBhdXRvIHdhc21DYWxsSW5mbyA9IHdhc21DYWxsaW5n
Q29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcigqdHlwZSwgQ2FsbFJvbGU6OkNhbGxlZSk7
CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJSZXN1bHRPZmZzZXRzID0gd2FzbUNh
bGxJbmZvLmNvbXB1dGVSZXN1bHRzT2Zmc2V0TGlzdCgpOwogCiAgICAgdW5zaWduZWQgaXRlcmF0
aW9uQ291bnQgPSAwOwpAQCAtNTg4LDcgKzU5MCw3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25JdGVyYXRlUmVzdWx0cywgdm9pZCwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJ
CiAvLyBGSVhNRTogSXQgd291bGQgYmUgbXVjaCBlYXNpZXIgdG8gaW5saW5lIHRoaXMgd2hlbiB3
ZSBoYXZlIGEgZ2xvYmFsIEdDLCB3aGljaCBjb3VsZCBwcm9iYWJseSBtZWFuIHdlIGNvdWxkIGF2
b2lkCiAvLyBzcGlsbGluZyB0aGUgcmVzdWx0cyBvbnRvIHRoZSBzdGFjay4KIC8vIFNhdmVkIHJl
c3VsdCByZWdpc3RlcnMgc2hvdWxkIGJlIHBsYWNlZCBvbiB0aGUgc3RhY2sganVzdCBhYm92ZSB0
aGUgbGFzdCBzdGFjayByZXN1bHQuCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
QWxsb2NhdGVSZXN1bHRzQXJyYXksIEpTQXJyYXkqLCAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdh
c206Okluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUsIEpTVmFsdWUqIHN0YWNrUG9pbnRlckZyb21DYWxsZWUpKQor
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5LCBK
U0FycmF5KiwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2Us
IGNvbnN0IFR5cGVEZWZpbml0aW9uKiB0eXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBK
U1ZhbHVlKiBzdGFja1BvaW50ZXJGcm9tQ2FsbGVlKSkKIHsKICAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNl
PigpOwogICAgIFZNJiB2bSA9IGpzSW5zdGFuY2UtPnZtKCk7CkBAIC01OTYsMTIgKzU5OCwxMyBA
QCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXks
IEpTQXJyYXkqLCAoQ2FsbEZyYW1lKiBjYQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwogICAgIE9iamVjdEluaXRpYWxpemF0
aW9uU2NvcGUgaW5pdGlhbGl6YXRpb25TY29wZShnbG9iYWxPYmplY3QtPnZtKCkpOworICAgIGNv
bnN0IEZ1bmN0aW9uU2lnbmF0dXJlKiBzaWduYXR1cmUgPSB0eXBlLT5hczxGdW5jdGlvblNpZ25h
dHVyZT4oKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkUmVzdHJpY3RlZChpbml0aWFsaXphdGlvblNjb3BlLCBudWxscHRyLCBnbG9iYWxPYmpl
Y3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbmRleGlu
Z1R5cGUpLCBzaWduYXR1cmUtPnJldHVybkNvdW50KCkpOwogCiAgICAgLy8gRklYTUU6IEhhbmRs
ZSBhbGxvY2F0aW9uIGZhaWx1cmUuLi4KICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwogCi0g
ICAgYXV0byB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3Jt
YXRpb25Gb3IoKnNpZ25hdHVyZSk7CisgICAgYXV0byB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGlu
Z0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKnR5cGUpOwogICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0IHJlZ2lzdGVyUmVzdWx0cyA9IHdhc21DYWxsSW5mby5jb21wdXRlUmVzdWx0c09m
ZnNldExpc3QoKTsKIAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEpTVmFsdWUpID09IHNpemVv
ZihDUFVSZWdpc3RlciksICJUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcy4iKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oCmluZGV4IGNmN2MwZDVmZWY0
ZGZkMzVjN2NjYTMzNDc5M2ViMjQ0ZWNiYWRkMTUuLjU4ZDE1OTc1ZTg4ZDIwM2RiYzk4NDRjMTRl
NTQyNDAyYTYxNmNiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJh
dGlvbnMuaApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBDb250ZXh0OwogbmFtZXNwYWNlIFdhc20g
ewogCiBjbGFzcyBJbnN0YW5jZTsKLWNsYXNzIFNpZ25hdHVyZTsKK2NsYXNzIFR5cGVEZWZpbml0
aW9uOwogCiB2b2lkIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKFByb2JlOjpDb250ZXh0JiwgY29uc3Qg
U3RhY2tNYXAmLCB1aW50NjRfdCogYnVmZmVyKTsKIApAQCAtNjIsOCArNjIsOCBAQCBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0YzMiwgZmxvYXQsIChDYWxsRnJh
bWUqLCBKU1ZhbHVlKSk7CiAKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29u
dmVydFRvQmlnSW50LCBFbmNvZGVkSlNWYWx1ZSwgKENhbGxGcmFtZSosIEluc3RhbmNlKiwgaW50
NjRfdCkpOwogCi1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkl0ZXJhdGVSZXN1
bHRzLCB2b2lkLCAoQ2FsbEZyYW1lKiwgSW5zdGFuY2UqLCBjb25zdCBTaWduYXR1cmUqLCBKU1Zh
bHVlLCB1aW50NjRfdCosIHVpbnQ2NF90KikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25BbGxvY2F0ZVJlc3VsdHNBcnJheSwgSlNBcnJheSosIChDYWxsRnJhbWUqLCBXYXNt
OjpJbnN0YW5jZSosIGNvbnN0IFNpZ25hdHVyZSosIEluZGV4aW5nVHlwZSwgSlNWYWx1ZSopKTsK
K0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMsIHZvaWQs
IChDYWxsRnJhbWUqLCBJbnN0YW5jZSosIGNvbnN0IFR5cGVEZWZpbml0aW9uKiwgSlNWYWx1ZSwg
dWludDY0X3QqLCB1aW50NjRfdCopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXksIEpTQXJyYXkqLCAoQ2FsbEZyYW1lKiwgV2FzbTo6SW5z
dGFuY2UqLCBjb25zdCBUeXBlRGVmaW5pdGlvbiosIEluZGV4aW5nVHlwZSwgSlNWYWx1ZSopKTsK
IAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtV3JpdGVCYXJyaWVyU2xv
d1BhdGgsIHZvaWQsIChKU0NlbGwqLCBWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uUG9wY291bnQzMiwgdWludDMyX3QsIChpbnQzMl90KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKaW5kZXggZWQwMGQ5YTBhNDJiNzlhZGMxZjNjOGFiMGYz
NDZmYzRmNmRhODlhZS4uNDM4ZmYzZjcyZDliNjY0OGFhZjcwYTQ5YTBhYTdiMTUxOGI2YjlhZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApAQCAtMTExLDE1ICsxMTEs
MTUgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBjb25zdCB1aW50OF90KiBtX3NvdXJjZTsK
ICAgICBzaXplX3QgbV9zb3VyY2VMZW5ndGg7Ci0gICAgLy8gV2Uga2VlcCBhIGxvY2FsIHJlZmVy
ZW5jZSB0byB0aGUgZ2xvYmFsIHRhYmxlIHNvIHdlIGRvbid0IGhhdmUgdG8gZmV0Y2ggaXQgdG8g
ZmluZCB0aHVuayBzaWduYXR1cmVzLgotICAgIGNvbnN0IFNpZ25hdHVyZUluZm9ybWF0aW9uJiBt
X3NpZ25hdHVyZUluZm9ybWF0aW9uOworICAgIC8vIFdlIGtlZXAgYSBsb2NhbCByZWZlcmVuY2Ug
dG8gdGhlIGdsb2JhbCB0YWJsZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGZldGNoIGl0IHRvIGZpbmQg
dGh1bmsgdHlwZXMuCisgICAgY29uc3QgVHlwZUluZm9ybWF0aW9uJiBtX3R5cGVJbmZvcm1hdGlv
bjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBlPgogQUxXQVlTX0lOTElORSBQ
YXJzZXI8U3VjY2Vzc1R5cGU+OjpQYXJzZXIoY29uc3QgdWludDhfdCogc291cmNlQnVmZmVyLCBz
aXplX3Qgc291cmNlTGVuZ3RoKQogICAgIDogbV9zb3VyY2Uoc291cmNlQnVmZmVyKQogICAgICwg
bV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQotICAgICwgbV9zaWduYXR1cmVJbmZvcm1hdGlv
bihTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2luZ2xldG9uKCkpCisgICAgLCBtX3R5cGVJbmZvcm1h
dGlvbihUeXBlSW5mb3JtYXRpb246OnNpbmdsZXRvbigpKQogewogfQogCkBAIC0yODAsNyArMjgw
LDcgQEAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpQYXJ0aWFs
UmVzdWx0IFBhcnNlcjxTdWNjZXNzVHlwZT46OnAKICAgICBpZiAocGVla0ludDcodHlwZUtpbmQp
ICYmIGlzVmFsaWRUeXBlS2luZCh0eXBlS2luZCkpIHsKICAgICAgICAgVHlwZSB0eXBlID0ge3N0
YXRpY19jYXN0PFR5cGVLaW5kPih0eXBlS2luZCksIE51bGxhYmxlOjpZZXMsIDB9OwogICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCEoaXNWYWx1ZVR5cGUodHlwZSkgfHwgdHlwZS5pc1ZvaWQo
KSksICJyZXN1bHQgdHlwZSBvZiBibG9jazogIiwgbWFrZVN0cmluZyh0eXBlLmtpbmQpLCAiIGlz
IG5vdCBhIHZhbHVlIHR5cGUgb3IgVm9pZCIpOwotICAgICAgICByZXN1bHQgPSBtX3NpZ25hdHVy
ZUluZm9ybWF0aW9uLnRodW5rRm9yKHR5cGUpOworICAgICAgICByZXN1bHQgPSBtX3R5cGVJbmZv
cm1hdGlvbi50aHVua0Zvcih0eXBlKTsKICAgICAgICAgbV9vZmZzZXQrKzsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CkBAIC0yODgsOSArMjg4LDkgQEAgQUxXQVlTX0lOTElORSB0eXBlbmFt
ZSBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpQYXJ0aWFsUmVzdWx0IFBhcnNlcjxTdWNjZXNzVHlwZT46
OnAKICAgICBpbnQ2NF90IGluZGV4OwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFy
SW50NjQoaW5kZXgpLCAiQmxvY2stbGlrZSBpbnN0cnVjdGlvbiBkb2Vzbid0IHJldHVybiB2YWx1
ZSB0eXBlIGJ1dCBjYW4ndCBkZWNvZGUgdHlwZSBzZWN0aW9uIGluZGV4Iik7CiAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihpbmRleCA8IDAsICJCbG9jay1saWtlIGluc3RydWN0aW9uIHNpZ25hdHVy
ZSBpbmRleCBpcyBuZWdhdGl2ZSIpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhdGljX2Nh
c3Q8c2l6ZV90PihpbmRleCkgPj0gaW5mby51c2VkU2lnbmF0dXJlcy5zaXplKCksICJCbG9jay1s
aWtlIGluc3RydWN0aW9uIHNpZ25hdHVyZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBJbmRleDog
IiwgaW5kZXgsICIgdHlwZSBpbmRleCBzcGFjZTogIiwgaW5mby51c2VkU2lnbmF0dXJlcy5zaXpl
KCkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkg
Pj0gaW5mby50eXBlQ291bnQoKSwgIkJsb2NrLWxpa2UgaW5zdHJ1Y3Rpb24gc2lnbmF0dXJlIGlu
ZGV4IGlzIG91dCBvZiBib3VuZHMuIEluZGV4OiAiLCBpbmRleCwgIiB0eXBlIGluZGV4IHNwYWNl
OiAiLCBpbmZvLnR5cGVDb3VudCgpKTsKIAotICAgIHJlc3VsdCA9ICZpbmZvLnVzZWRTaWduYXR1
cmVzW2luZGV4XS5nZXQoKTsKKyAgICByZXN1bHQgPSAmaW5mby50eXBlU2lnbmF0dXJlc1tpbmRl
eF0uZ2V0KCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMzEyLDcgKzMxMiw3IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZUhlYXBUeXBlKGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiBpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBp
ZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihoZWFwVHlwZSkgPj0gaW5mby51c2VkU2lnbmF0dXJlcy5z
aXplKCkpCisgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oaGVhcFR5cGUpID49IGluZm8udHlw
ZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJlc3VsdCA9IGhlYXBUeXBl
OwpAQCAtMzMwLDIwICszMzAsMTkgQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjxTdWNjZXNz
VHlwZT46OnBhcnNlVmFsdWVUeXBlKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJgogCiAgICAgVHlw
ZUtpbmQgdHlwZUtpbmQgPSBzdGF0aWNfY2FzdDxUeXBlS2luZD4oa2luZCk7CiAgICAgYm9vbCBp
c051bGxhYmxlID0gdHJ1ZTsKLSAgICBTaWduYXR1cmVJbmRleCBzaWdJbmRleCA9IDA7Ci0KKyAg
ICBUeXBlSW5kZXggdHlwZUluZGV4ID0gMDsKICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1i
bHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcygpICYmICh0eXBlS2luZCA9PSBUeXBlS2luZDo6RnVu
Y3JlZiB8fCB0eXBlS2luZCA9PSBUeXBlS2luZDo6RXh0ZXJucmVmKSkgewotICAgICAgICBzaWdJ
bmRleCA9IHN0YXRpY19jYXN0PFNpZ25hdHVyZUluZGV4Pih0eXBlS2luZCk7CisgICAgICAgIHR5
cGVJbmRleCA9IHN0YXRpY19jYXN0PFR5cGVJbmRleD4odHlwZUtpbmQpOwogICAgICAgICB0eXBl
S2luZCA9IFR5cGVLaW5kOjpSZWZOdWxsOwogICAgIH0gZWxzZSBpZiAodHlwZUtpbmQgPT0gVHlw
ZUtpbmQ6OlJlZiB8fCB0eXBlS2luZCA9PSBUeXBlS2luZDo6UmVmTnVsbCkgewogICAgICAgICBp
c051bGxhYmxlID0gdHlwZUtpbmQgPT0gVHlwZUtpbmQ6OlJlZk51bGw7CiAgICAgICAgIGludDMy
X3QgaGVhcFR5cGU7CiAgICAgICAgIGlmICghcGFyc2VIZWFwVHlwZShpbmZvLCBoZWFwVHlwZSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHNpZ0luZGV4ID0gaGVhcFR5cGUg
PCAwID8gc3RhdGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+KGhlYXBUeXBlKSA6IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoaW5mby51c2VkU2lnbmF0dXJlc1toZWFwVHlwZV0uZ2V0KCkpOworICAg
ICAgICB0eXBlSW5kZXggPSBoZWFwVHlwZSA8IDAgPyBzdGF0aWNfY2FzdDxUeXBlSW5kZXg+KGhl
YXBUeXBlKSA6IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KGluZm8udHlwZVNpZ25hdHVyZXNbaGVhcFR5
cGVdLmdldCgpKTsKICAgICB9CiAKLSAgICBUeXBlIHR5cGUgPSB7IHR5cGVLaW5kLCBzdGF0aWNf
Y2FzdDxOdWxsYWJsZT4oaXNOdWxsYWJsZSksIHNpZ0luZGV4IH07CisgICAgVHlwZSB0eXBlID0g
eyB0eXBlS2luZCwgc3RhdGljX2Nhc3Q8TnVsbGFibGU+KGlzTnVsbGFibGUpLCB0eXBlSW5kZXgg
fTsKICAgICBpZiAoIWlzVmFsdWVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmVzdWx0ID0gdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TZWN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
ZWN0aW9uUGFyc2VyLmNwcAppbmRleCAwOGQ5YzYzN2JiNzM0MzNjZGE3ZGQzNDVlNjg1YTczY2Q3
MWM2ZGZiLi5kMmRiNWRiZjZjOTYxOTc2MGVkMzQyOWQwMDhhYWJiOGM2NjFhMzBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCkBAIC0z
NCw3ICszNCw3IEBACiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVk
ZSAiV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgotI2luY2x1
ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9u
SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTQ1LDQxICs0NSwzMCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6
OnBhcnNlVHlwZSgpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBlIHNlY3Rpb24ncyBjb3VudCIp
OwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhUeXBlcywgIlR5cGUgc2VjdGlv
bidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAiLCBtYXhUeXBlcyk7Ci0g
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2lnbmF0dXJlcy50cnlSZXNlcnZl
Q2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBz
ZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IW1faW5mby0+dHlwZVNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGNvdW50LCAiIGVu
dHJpZXMiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0g
ICAgICAgIGludDhfdCB0eXBlOwotICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50OwotICAg
ICAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRUeXBlczsKLQotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZUludDcodHlwZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUncyB0eXBl
Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZSAhPSBzdGF0aWNfY2FzdDxpbnQ4
X3Q+KFR5cGVLaW5kOjpGdW5jKSwgaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMgIiwgdHlwZSk7Ci0g
ICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGFyZ3VtZW50Q291bnQp
LCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgYXJndW1lbnQgY291bnQiKTsKLSAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4gbWF4RnVuY3Rpb25QYXJhbXMsIGks
ICJ0aCBhcmd1bWVudCBjb3VudCBpcyB0b28gYmlnICIsIGFyZ3VtZW50Q291bnQsICIgbWF4aW11
bSAiLCBtYXhGdW5jdGlvblBhcmFtcyk7Ci0gICAgICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudHM7
Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3VtZW50cy50cnlSZXNlcnZlQ2FwYWNp
dHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBl
IHNlY3Rpb24ncyAiLCBpLCAidGggc2lnbmF0dXJlIik7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgewotICAgICAgICAgICAgVHlwZSBhcmd1
bWVudFR5cGU7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlw
ZShtX2luZm8sIGFyZ3VtZW50VHlwZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50IFR5
cGUiKTsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnRUeXBlKTsKKyAgICAg
ICAgaW50OF90IHR5cGVLaW5kOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUlu
dDcodHlwZUtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgdHlwZSIpOworICAgICAg
ICBSZWZQdHI8VHlwZURlZmluaXRpb24+IHNpZ25hdHVyZTsKKyAgICAgICAgc3dpdGNoIChzdGF0
aWNfY2FzdDxUeXBlS2luZD4odHlwZUtpbmQpKSB7CisgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1
bmM6IHsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VGdW5jdGlv
blR5cGUoaSwgc2lnbmF0dXJlKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAg
ICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6IHsKKyAgICAgICAgICAgIGlmICghT3B0aW9uczo6
dXNlV2ViQXNzZW1ibHlHQygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKGksICJ0aCB0
eXBlIGZhaWxlZCB0byBwYXJzZSBiZWNhdXNlIHN0cnVjdCB0eXBlcyBhcmUgbm90IGVuYWJsZWQi
KTsKIAotICAgICAgICB1aW50MzJfdCByZXR1cm5Db3VudDsKLSAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VWYXJVSW50MzIocmV0dXJuQ291bnQpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0
aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7Ci0KLSAgICAgICAgVmVjdG9yPFR5cGUsIDE+IHJldHVy
blR5cGVzOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFyZXR1cm5UeXBlcy50cnlSZXNl
cnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5
IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBpLCAidGggc2lnbmF0dXJlIik7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZXR1cm5Db3VudDsgKytpKSB7Ci0gICAgICAgICAgICBUeXBl
IHZhbHVlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUo
bV9pbmZvLCB2YWx1ZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUncyByZXR1cm4gdmFsdWUi
KTsKLSAgICAgICAgICAgIHJldHVyblR5cGVzLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICBX
QVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlU3RydWN0VHlwZShpLCBzaWduYXR1cmUpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFpbChpLCAidGggVHlwZSBpcyBub24tRnVuYyAiLCB0eXBlS2luZCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8U2lnbmF0dXJlPiBzaWduYXR1cmUgPSBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlRm9yKHJldHVyblR5cGVzLCBhcmd1bWVudHMpOwogICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzaWduYXR1cmUsICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBpLCAidGggc2lnbmF0dXJlIik7Ci0KLSAg
ICAgICAgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlLnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICBtX2luZm8tPnR5cGVTaWduYXR1cmVzLnVuY2hlY2tl
ZEFwcGVuZChzaWduYXR1cmUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQogICAgIHJldHVybiB7
IH07CiB9CkBAIC05MSw5ICs4MCw5IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQo
KSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbXBvcnRDb3VudCA+
IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgaW1wb3J0
Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGdsb2JhbHMiKTsg
Ly8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93
LgogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0cy50cnlSZXNlcnZlQ2Fw
YWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwg
aW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdo
ZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9p
bmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGlt
cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENv
dW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1h
bGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFtX2luZm8tPmltcG9ydEZ1bmN0aW9uVHlwZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGlt
cG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMg
b3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KICAgICBpZiAoT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCkpCi0gICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIW1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZl
Q2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Ig
IiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGV4Y2VwdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1F
IHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KKyAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNl
cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGV4Y2VwdGlvbiBzaWduYXR1cmVz
Iik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBi
ZWxvdy4KIAogICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVyID0gMDsgaW1wb3J0TnVtYmVy
IDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CiAgICAgICAgIHVpbnQzMl90IG1vZHVs
ZUxlbjsKQEAgLTExMiwxMiArMTAxLDEyIEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbXBv
cnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
RXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9y
dCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0
cmluZywgIiciKTsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgRXh0ZXJu
YWxLaW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25TaWduYXR1
cmVJbmRleDsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMy
KGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRo
IEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywg
IicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMu
c2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwg
InRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ug
b2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIgaW4gbW9kdWxlICciLCBtb2R1
bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIGtp
bmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsK
LSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1bmN0aW9uU2lnbmF0dXJlSW5k
ZXhdKTsKLSAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2Vz
LnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICB1aW50MzJfdCBm
dW5jdGlvblR5cGVJbmRleDsKKyAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKGZ1bmN0aW9uVHlwZUluZGV4KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIs
ICJ0aCBJbXBvcnQncyBmdW5jdGlvbiBzaWduYXR1cmUgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJp
bmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZnVuY3Rpb25UeXBlSW5kZXggPj0gbV9pbmZvLT50eXBlQ291bnQoKSwgImlu
dmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQs
ICIsIGZ1bmN0aW9uVHlwZUluZGV4LCAiIGlzIG91dCBvZiByYW5nZSBvZiAiLCBtX2luZm8tPnR5
cGVDb3VudCgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmll
bGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmltcG9ydEZ1
bmN0aW9uVHlwZUluZGljZXMuc2l6ZSgpOworICAgICAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRl
eCA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dHlwZVNpZ25hdHVyZXNbZnVuY3Rpb25U
eXBlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rpb25UeXBlSW5kaWNl
cy51bmNoZWNrZWRBcHBlbmQodHlwZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTogewpAQCAtMTM5LDcgKzEyOCw3
IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAg
ICAgICAgICAgICBHbG9iYWxJbmZvcm1hdGlvbiBnbG9iYWw7CiAgICAgICAgICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKTsKICAgICAgICAgICAg
IC8vIE9ubHkgbXV0YWJsZSBnbG9iYWxzIG5lZWQgZmxvYXRpbmcgYmluZGluZ3MuCi0gICAgICAg
ICAgICBpZiAoZ2xvYmFsLm11dGFiaWxpdHkgPT0gR2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxp
dHk6Ok11dGFibGUpCisgICAgICAgICAgICBpZiAoZ2xvYmFsLm11dGFiaWxpdHkgPT0gTXV0YWJp
bGl0eTo6TXV0YWJsZSkKICAgICAgICAgICAgICAgICBnbG9iYWwuYmluZGluZ01vZGUgPSBHbG9i
YWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOwogICAgICAgICAgICAga2luZElu
ZGV4ID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKICAgICAgICAgICAgIG1faW5mby0+Z2xvYmFs
cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKQEAgLTE1NCwxMCArMTQzLDEwIEBA
IGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAg
ICAgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4OwogICAgICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhjZXB0aW9uU2lnbmF0dXJlSW5k
ZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGV4Y2VwdGlvbiBz
aWduYXR1cmUgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0
cmluZywgIiciKTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZXhjZXB0aW9uU2ln
bmF0dXJlSW5kZXggPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICJpbnZhbGlkIGV4
Y2VwdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZXhj
ZXB0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0IG9mIHJhbmdlIG9mICIsIG1faW5mby0+dXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVs
ZCAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8t
PmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOwotICAgICAgICAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1f
aW5mby0+dXNlZFNpZ25hdHVyZXNbZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXhdKTsKLSAgICAgICAg
ICAgIG1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBl
bmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleGNl
cHRpb25TaWduYXR1cmVJbmRleCA+PSBtX2luZm8tPnR5cGVDb3VudCgpLCAiaW52YWxpZCBleGNl
cHRpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQsICIsIGV4Y2Vw
dGlvblNpZ25hdHVyZUluZGV4LCAiIGlzIG91dCBvZiByYW5nZSBvZiAiLCBtX2luZm8tPnR5cGVD
b3VudCgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRT
dHJpbmcsICInIik7CisgICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmltcG9ydEV4Y2Vw
dGlvblR5cGVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXgg
PSBUeXBlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnR5cGVTaWduYXR1cmVzW2V4Y2VwdGlvblNp
Z25hdHVyZUluZGV4XSk7CisgICAgICAgICAgICBtX2luZm8tPmltcG9ydEV4Y2VwdGlvblR5cGVJ
bmRpY2VzLnVuY2hlY2tlZEFwcGVuZCh0eXBlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMTc0LDE5ICsxNjMsMTkgQEAgYXV0byBTZWN0aW9uUGFy
c2VyOjpwYXJzZUZ1bmN0aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgIHVpbnQzMl90IGNvdW50
OwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0
IGdldCBGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KGNvdW50ID4gbWF4RnVuY3Rpb25zLCAiRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50IGlzIHRvbyBi
aWcgIiwgY291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvbnMpOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIW1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIs
IGNvdW50LCAiIEZ1bmN0aW9uIHNpZ25hdHVyZXMiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHko
Y291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICIgRnVu
Y3Rpb24gc2lnbmF0dXJlcyIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+ZnVu
Y3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2gg
bWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9ucyIpOwogCiAgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgdWludDMyX3QgdHlwZU51
bWJlcjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodHlwZU51
bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3MgdHlwZSBudW1iZXIiKTsKLSAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNlZFNpZ25h
dHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1iZXIgaXMgaW52YWxpZCAiLCB0
eXBlTnVtYmVyKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1f
aW5mby0+dHlwZUNvdW50KCksIGksICJ0aCBGdW5jdGlvbiB0eXBlIG51bWJlciBpcyBpbnZhbGlk
ICIsIHR5cGVOdW1iZXIpOwogCi0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4
ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW3R5cGVO
dW1iZXJdKTsKKyAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IFR5cGVJbmZvcm1hdGlvbjo6
Z2V0KG1faW5mby0+dHlwZVNpZ25hdHVyZXNbdHlwZU51bWJlcl0pOwogICAgICAgICAvLyBUaGUg
Q29kZSBzZWN0aW9uIGZpeGVzIHVwIHN0YXJ0IGFuZCBlbmQuCiAgICAgICAgIHNpemVfdCBzdGFy
dCA9IDA7CiAgICAgICAgIHNpemVfdCBlbmQgPSAwOwotICAgICAgICBtX2luZm8tPmludGVybmFs
RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7
CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2VzLnVuY2hlY2tlZEFw
cGVuZCh0eXBlSW5kZXgpOwogICAgICAgICBtX2luZm8tPmZ1bmN0aW9ucy51bmNoZWNrZWRBcHBl
bmQoeyBzdGFydCwgZW5kLCBWZWN0b3I8dWludDhfdD4oKSB9KTsKICAgICB9CiAKQEAgLTM3Miw3
ICszNjEsNyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhwb3J0KCkgLT4gUGFydGlhbFJl
c3VsdAogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihraW5kSW5kZXggPj0gbV9pbmZv
LT5nbG9iYWxzLnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhwb3J0IGhhcyBpbnZhbGlkIGds
b2JhbCBudW1iZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMgdGhlIGdsb2JhbHMgY291bnQg
IiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIsIGZpZWxkU3RyaW5nLCAiJyIp
OwogICAgICAgICAgICAgLy8gT25seSBtdXRhYmxlIGdsb2JhbHMgbmVlZCBmbG9hdGluZyBiaW5k
aW5ncy4KICAgICAgICAgICAgIEdsb2JhbEluZm9ybWF0aW9uJiBnbG9iYWwgPSBtX2luZm8tPmds
b2JhbHNba2luZEluZGV4XTsKLSAgICAgICAgICAgIGlmIChnbG9iYWwubXV0YWJpbGl0eSA9PSBH
bG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSkKKyAgICAgICAgICAgIGlmIChn
bG9iYWwubXV0YWJpbGl0eSA9PSBNdXRhYmlsaXR5OjpNdXRhYmxlKQogICAgICAgICAgICAgICAg
IGdsb2JhbC5iaW5kaW5nTW9kZSA9IEdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9y
dGFibGU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzk2LDggKzM4NSw4IEBA
IGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VTdGFydCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICB1
aW50MzJfdCBzdGFydEZ1bmN0aW9uSW5kZXg7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KSwgImNhbid0IGdldCBTdGFydCBpbmRleCIp
OwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhcnRGdW5jdGlvbkluZGV4ID49IG1faW5mby0+
ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiU3RhcnQgaW5kZXggIiwgc3RhcnRGdW5jdGlvbklu
ZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwgbV9pbmZvLT5mdW5jdGlvbklu
ZGV4U3BhY2VTaXplKCkpOwotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9p
bmZvLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbklu
ZGV4KTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBtX2lu
Zm8tPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4KTsK
KyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldEZ1bmN0aW9u
U2lnbmF0dXJlKHR5cGVJbmRleCk7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpLCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3QgaGF2ZSBhcmd1bWVudHMiKTsK
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzaWduYXR1cmUucmV0dXJuc1ZvaWQoKSwgIlN0YXJ0
IGZ1bmN0aW9uIGNhbid0IHJldHVybiBhIHZhbHVlIik7CiAgICAgbV9pbmZvLT5zdGFydEZ1bmN0
aW9uSW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKQEAgLTYxMCw3ICs1OTksNyBAQCBh
dXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRf
dCYgYml0c09ySW1wb3J0TnVtYmVyLAogCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5k
ZXggPj0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgImdldF9nbG9iYWwncyBpbmRleCAiLCBpbmRl
eCwgIiBleGNlZWRzIHRoZSBudW1iZXIgb2YgZ2xvYmFscyAiLCBtX2luZm8tPmdsb2JhbHMuc2l6
ZSgpKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8tPmZpcnN0
SW50ZXJuYWxHbG9iYWwsICJnZXRfZ2xvYmFsIGltcG9ydCBraW5kIGluZGV4ICIsIGluZGV4LCAi
IGV4Y2VlZHMgdGhlIGZpcnN0IGludGVybmFsIGdsb2JhbCAiLCBtX2luZm8tPmZpcnN0SW50ZXJu
YWxHbG9iYWwpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5mby0+Z2xvYmFsc1tp
bmRleF0ubXV0YWJpbGl0eSAhPSBHbG9iYWxJbmZvcm1hdGlvbjo6SW1tdXRhYmxlLCAiZ2V0X2ds
b2JhbCBpbXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBpcyBtdXRhYmxlICIpOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5mby0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSAh
PSBNdXRhYmlsaXR5OjpJbW11dGFibGUsICJnZXRfZ2xvYmFsIGltcG9ydCBraW5kIGluZGV4ICIs
IGluZGV4LCAiIGlzIG11dGFibGUgIik7CiAKICAgICAgICAgcmVzdWx0VHlwZSA9IG1faW5mby0+
Z2xvYmFsc1tpbmRleF0udHlwZTsKICAgICAgICAgYml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7
CkBAIC02MjMsMTAgKzYxMiwxMCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW5pdEV4cHIo
dWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyLAogICAgICAgICAg
ICAgaW50MzJfdCBoZWFwVHlwZTsKICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBh
cnNlSGVhcFR5cGUobV9pbmZvLCBoZWFwVHlwZSksICJyZWYubnVsbCBoZWFwdHlwZSBtdXN0IGJl
IGZ1bmNyZWYsIGV4dGVybnJlZiBvciB0eXBlX2lkeCIpOwogICAgICAgICAgICAgaWYgKGlzVHlw
ZUluZGV4SGVhcFR5cGUoaGVhcFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgU2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNl
ZFNpZ25hdHVyZXNbaGVhcFR5cGVdLmdldCgpKTsKLSAgICAgICAgICAgICAgICB0eXBlT2ZOdWxs
ID0gVHlwZSB7IFR5cGVLaW5kOjpSZWZOdWxsLCBOdWxsYWJsZTo6WWVzLCBzaWduYXR1cmVJbmRl
eCB9OworICAgICAgICAgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBUeXBlSW5mb3JtYXRp
b246OmdldChtX2luZm8tPnR5cGVTaWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6
OlllcywgdHlwZUluZGV4IH07CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB0
eXBlT2ZOdWxsID0gVHlwZSB7IFR5cGVLaW5kOjpSZWZOdWxsLCBOdWxsYWJsZTo6WWVzLCBzdGF0
aWNfY2FzdDxTaWduYXR1cmVJbmRleD4oaGVhcFR5cGUpIH07CisgICAgICAgICAgICAgICAgdHlw
ZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6Olllcywgc3RhdGlj
X2Nhc3Q8VHlwZUluZGV4PihoZWFwVHlwZSkgfTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlZlR5cGUobV9pbmZvLCB0eXBlT2ZOdWxsKSwg
InJlZi5udWxsIHR5cGUgbXVzdCBiZSBhIHJlZmVyZW5jZSB0eXBlIik7CiAKQEAgLTY0MSw4ICs2
MzAsOCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2Rl
LCB1aW50NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyLAogICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGluZGV4ID49IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSwgInJlZi5mdW5jIGluZGV4Iiwg
aW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9ucyAiLCBtX2luZm8tPmZ1bmN0
aW9ucy5zaXplKCkpOwogCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseVR5cGVk
RnVuY3Rpb25SZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4ID0gbV9pbmZvLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
aW5kZXgpOwotICAgICAgICAgICAgcmVzdWx0VHlwZSA9IHsgVHlwZUtpbmQ6OlJlZiwgTnVsbGFi
bGU6Ok5vLCBzaWduYXR1cmVJbmRleCB9OworICAgICAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRl
eCA9IG1faW5mby0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CisgICAg
ICAgICAgICByZXN1bHRUeXBlID0geyBUeXBlS2luZDo6UmVmLCBOdWxsYWJsZTo6Tm8sIHR5cGVJ
bmRleCB9OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdFR5cGUgPSBUeXBlczo6
RnVuY3JlZjsKIApAQCAtNjgxLDYgKzY3MCw2MCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNl
STMySW5pdEV4cHIoc3RkOjpvcHRpb25hbDxJMzJJbml0RXhwcj4mIGluaXRFeHByLCBBU0NJSQog
ICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VGdW5jdGlvblR5
cGUodWludDMyX3QgcG9zaXRpb24sIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4mIGZ1bmN0aW9uU2ln
bmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMyX3QgYXJndW1lbnRDb3VudDsK
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihhcmd1bWVudENvdW50KSwg
ImNhbid0IGdldCAiLCBwb3NpdGlvbiwgInRoIFR5cGUncyBhcmd1bWVudCBjb3VudCIpOworICAg
IFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1heEZ1bmN0aW9uUGFyYW1zLCBw
b3NpdGlvbiwgInRoIGFyZ3VtZW50IGNvdW50IGlzIHRvbyBiaWcgIiwgYXJndW1lbnRDb3VudCwg
IiBtYXhpbXVtICIsIG1heEZ1bmN0aW9uUGFyYW1zKTsKKyAgICBWZWN0b3I8VHlwZT4gYXJndW1l
bnRUeXBlczsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmd1bWVudFR5cGVzLnRyeVJlc2Vy
dmVDYXBhY2l0eShhcmd1bWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkg
Zm9yIFR5cGUgc2VjdGlvbidzICIsIHBvc2l0aW9uLCAidGggc2lnbmF0dXJlIik7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CisgICAgICAgIFR5
cGUgYXJndW1lbnRUeXBlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVl
VHlwZShtX2luZm8sIGFyZ3VtZW50VHlwZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIGFyZ3VtZW50
IFR5cGUiKTsKKyAgICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQoYXJndW1lbnRUeXBlKTsKKyAg
ICB9CisKKyAgICB1aW50MzJfdCByZXR1cm5Db3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihyZXR1cm5Db3VudCksICJjYW4ndCBnZXQgIiwgcG9zaXRpb24sICJ0
aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CisKKyAgICBWZWN0b3I8VHlwZSwgMT4gcmV0dXJuVHlw
ZXM7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcmV0dXJuVHlwZXMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlw
ZSBzZWN0aW9uJ3MgIiwgcG9zaXRpb24sICJ0aCBzaWduYXR1cmUiKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmV0dXJuQ291bnQ7ICsraSkgeworICAgICAgICBUeXBlIHZhbHVlOwor
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZShtX2luZm8sIHZhbHVl
KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiB2YWx1ZSIpOworICAgICAgICBy
ZXR1cm5UeXBlcy5hcHBlbmQodmFsdWUpOworICAgIH0KKworICAgIGZ1bmN0aW9uU2lnbmF0dXJl
ID0gVHlwZUluZm9ybWF0aW9uOjp0eXBlRGVmaW5pdGlvbkZvckZ1bmN0aW9uKHJldHVyblR5cGVz
LCBhcmd1bWVudFR5cGVzKTsKKyAgICByZXR1cm4geyB9OworfQorCithdXRvIFNlY3Rpb25QYXJz
ZXI6OnBhcnNlU3RydWN0VHlwZSh1aW50MzJfdCBwb3NpdGlvbiwgUmVmUHRyPFR5cGVEZWZpbml0
aW9uPiYgc3RydWN0VHlwZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIEFTU0VSVChPcHRpb25z
Ojp1c2VXZWJBc3NlbWJseUdDKCkpOworCisgICAgdWludDMyX3QgZmllbGRDb3VudDsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVsZENvdW50KSwgImNhbid0IGdl
dCAiLCBwb3NpdGlvbiwgInRoIHN0cnVjdCB0eXBlJ3MgZmllbGQgY291bnQiKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKGZpZWxkQ291bnQgPiBtYXhTdHJ1Y3RGaWVsZENvdW50LCAibnVtYmVy
IG9mIGZpZWxkcyBmb3Igc3RydWN0IHR5cGUgYXQgcG9zaXRpb24gIiwgcG9zaXRpb24sICIgaXMg
dG9vIGJpZyAiLCBmaWVsZENvdW50LCAiIG1heGltdW0gIiwgbWF4U3RydWN0RmllbGRDb3VudCk7
CisgICAgVmVjdG9yPFN0cnVjdEZpZWxkPiBmaWVsZHM7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighZmllbGRzLnRyeVJlc2VydmVDYXBhY2l0eShmaWVsZENvdW50KSwgImNhbid0IGFsbG9jYXRl
IGVub3VnaCBtZW1vcnkgZm9yIHN0cnVjdCBmaWVsZHMgIiwgZmllbGRDb3VudCwgIiBlbnRyaWVz
Iik7CisKKyAgICBmb3IgKHVpbnQzMl90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmll
bGRDb3VudDsgKytmaWVsZEluZGV4KSB7CisgICAgICAgIFR5cGUgZmllbGRUeXBlOworICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZShtX2luZm8sIGZpZWxkVHlwZSks
ICJjYW4ndCBnZXQgIiwgZmllbGRJbmRleCwgInRoIGZpZWxkIFR5cGUiKTsKKworICAgICAgICB1
aW50OF90IG11dGFiaWxpdHk7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUlu
dDgobXV0YWJpbGl0eSksIHBvc2l0aW9uLCAiY2FuJ3QgZ2V0ICIsIGZpZWxkSW5kZXgsICJ0aCBm
aWVsZCBtdXRhYmlsaXR5Iik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYobXV0YWJpbGl0
eSAhPSAweDAgJiYgbXV0YWJpbGl0eSAhPSAweDEsICJpbnZhbGlkIEZpZWxkJ3MgbXV0YWJpbGl0
eTogMHgiLCBoZXgobXV0YWJpbGl0eSwgMiwgTG93ZXJjYXNlKSk7CisKKyAgICAgICAgZmllbGRz
LnVuY2hlY2tlZEFwcGVuZChTdHJ1Y3RGaWVsZCB7IGZpZWxkVHlwZSwgc3RhdGljX2Nhc3Q8TXV0
YWJpbGl0eT4obXV0YWJpbGl0eSkgfSk7CisgICAgfQorCisgICAgc3RydWN0VHlwZSA9IFR5cGVJ
bmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JTdHJ1Y3QoZmllbGRzKTsKKyAgICByZXR1cm4g
eyB9OworfQorCiBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSTMySW5pdEV4cHJGb3JFbGVtZW50
U2VjdGlvbihzdGQ6Om9wdGlvbmFsPEkzMkluaXRFeHByPiYgaW5pdEV4cHIpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKICAgICByZXR1cm4gcGFyc2VJMzJJbml0RXhwcihpbml0RXhwciwgIkVsZW1lbnQg
aW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiX3MpOwpAQCAtNzU5LDcgKzgwMiw3IEBAIGF1
dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VHbG9iYWxUeXBlKEdsb2JhbEluZm9ybWF0aW9uJiBnbG9i
YWwpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVl
VHlwZShtX2luZm8sIGdsb2JhbC50eXBlKSwgImNhbid0IGdldCBHbG9iYWwncyB2YWx1ZSB0eXBl
Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50OChtdXRhYmlsaXR5KSwgImNh
bid0IGdldCBHbG9iYWwgdHlwZSdzIG11dGFiaWxpdHkiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKG11dGFiaWxpdHkgIT0gMHgwICYmIG11dGFiaWxpdHkgIT0gMHgxLCAiaW52YWxpZCBHbG9i
YWwncyBtdXRhYmlsaXR5OiAweCIsIGhleChtdXRhYmlsaXR5LCAyLCBMb3dlcmNhc2UpKTsKLSAg
ICBnbG9iYWwubXV0YWJpbGl0eSA9IHN0YXRpY19jYXN0PEdsb2JhbEluZm9ybWF0aW9uOjpNdXRh
YmlsaXR5PihtdXRhYmlsaXR5KTsKKyAgICBnbG9iYWwubXV0YWJpbGl0eSA9IHN0YXRpY19jYXN0
PE11dGFiaWxpdHk+KG11dGFiaWxpdHkpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTg1OSw3
ICs5MDIsNyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhjZXB0aW9uKCkgLT4gUGFydGlh
bFJlc3VsdAogICAgIHVpbnQzMl90IGV4Y2VwdGlvbkNvdW50OwogICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvbkNvdW50KSwgImNhbid0IGdldCBFeGNlcHRp
b24gc2VjdGlvbidzIGNvdW50Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihleGNlcHRpb25D
b3VudCA+IG1heEV4Y2VwdGlvbnMsICJFeHBvcnQgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcg
IiwgZXhjZXB0aW9uQ291bnQsICIgbWF4aW11bSAiLCBtYXhFeGNlcHRpb25zKTsKLSAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNl
cy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uQ291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5v
dWdoIG1lbW9yeSBmb3IgIiwgZXhjZXB0aW9uQ291bnQsICIgZXhjZXB0aW9ucyIpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW50ZXJuYWxFeGNlcHRpb25UeXBlSW5kaWNlcy50
cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uQ291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgIiwgZXhjZXB0aW9uQ291bnQsICIgZXhjZXB0aW9ucyIpOwogCiAgICAgZm9y
ICh1aW50MzJfdCBleGNlcHRpb25OdW1iZXIgPSAwOyBleGNlcHRpb25OdW1iZXIgPCBleGNlcHRp
b25Db3VudDsgKytleGNlcHRpb25OdW1iZXIpIHsKICAgICAgICAgdWludDhfdCB0YWdUeXBlOwpA
QCAtODY4LDkgKzkxMSw5IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VFeGNlcHRpb24oKSAt
PiBQYXJ0aWFsUmVzdWx0CiAKICAgICAgICAgdWludDMyX3QgdHlwZU51bWJlcjsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBn
ZXQgIiwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uJ3MgdHlwZSBudW1iZXIiKTsKLSAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dXNlZFNpZ25h
dHVyZXMuc2l6ZSgpLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNlcHRpb24gdHlwZSBudW1iZXIg
aXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNlZFNpZ25hdHVy
ZXNbdHlwZU51bWJlcl0pOwotICAgICAgICBtX2luZm8tPmludGVybmFsRXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT50eXBlQ291bnQoKSwgZXhjZXB0
aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uIHR5cGUgbnVtYmVyIGlzIGludmFsaWQgIiwgdHlwZU51
bWJlcik7CisgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBUeXBlSW5mb3JtYXRpb246Omdl
dChtX2luZm8tPnR5cGVTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKKyAgICAgICAgbV9pbmZvLT5p
bnRlcm5hbEV4Y2VwdGlvblR5cGVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZCh0eXBlSW5kZXgpOwog
ICAgIH0KIAogICAgIHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNlY3Rpb25QYXJzZXIuaAppbmRleCA5MWZkM2VkODM0MjI1YzgxM2UyZDAxMzkyYjQ5ZThk
OWMzYmUyYjg3Li45NTZhNTAyODdjYjkyNjNkMjk4ZWY5MTZiNjNlZGRkODhiZDVjZGY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmgKQEAgLTY5
LDYgKzY5LDkgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVS
TiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYsIFR5cGUmIGluaXRFeHByVHlwZSk7
CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJMzJJbml0RXhwcihz
dGQ6Om9wdGlvbmFsPEkzMkluaXRFeHByPiYsIEFTQ0lJTGl0ZXJhbCBmYWlsTWVzc2FnZSk7CiAK
KyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUZ1bmN0aW9uVHlwZSh1
aW50MzJfdCBwb3NpdGlvbiwgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiYpOworICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlU3RydWN0VHlwZSh1aW50MzJfdCBwb3NpdGlv
biwgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiYpOworCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gdmFsaWRhdGVFbGVtZW50VGFibGVJZHgodWludDMyX3QpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSTMySW5pdEV4cHJGb3JFbGVtZW50U2Vj
dGlvbihzdGQ6Om9wdGlvbmFsPEkzMkluaXRFeHByPiYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlRWxlbWVudEtpbmQodWludDhfdCYgZWxlbWVudEtpbmQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhNTYxYjg1MGZjNWMxOTM5ZDBlZjU5ZThhOWZkMmI2MDU5
NzhmOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5o
IgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlu
bGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKLQotU2lnbmF0dXJlSW5mb3JtYXRpb24qIFNpZ25h
dHVyZUluZm9ybWF0aW9uOjp0aGVPbmUgeyBudWxscHRyIH07Ci1zdGQ6Om9uY2VfZmxhZyBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlSW5mb3JtYXRpb25GbGFnOwotCi1TdHJpbmcgU2ln
bmF0dXJlOjp0b1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6dG9TdHJpbmcoKnRo
aXMpOwotfQotCi12b2lkIFNpZ25hdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAot
ewotICAgIHsKLSAgICAgICAgb3V0LnByaW50KCIoIik7Ci0gICAgICAgIENvbW1hUHJpbnRlciBj
b21tYTsKLSAgICAgICAgZm9yIChTaWduYXR1cmVBcmdDb3VudCBhcmcgPSAwOyBhcmcgPCBhcmd1
bWVudENvdW50KCk7ICsrYXJnKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtYWtlU3Ry
aW5nKGFyZ3VtZW50KGFyZykua2luZCkpOwotICAgICAgICBvdXQucHJpbnQoIikiKTsKLSAgICB9
Ci0KLSAgICB7Ci0gICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAgb3V0LnByaW50
KCIgLT4gWyIpOwotICAgICAgICBmb3IgKFNpZ25hdHVyZUFyZ0NvdW50IHJldCA9IDA7IHJldCA8
IHJldHVybkNvdW50KCk7ICsrcmV0KQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtYWtl
U3RyaW5nKHJldHVyblR5cGUocmV0KS5raW5kKSk7Ci0gICAgICAgIG91dC5wcmludCgiXSIpOwot
ICAgIH0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKHNpemVfdCByZXR1cm5Db3Vu
dCwgY29uc3QgVHlwZSogcmV0dXJuVHlwZXMsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBU
eXBlKiBhcmd1bWVudFR5cGVzKQotewotICAgIHVuc2lnbmVkIGFjY3VtdWxhdG9yID0gMHhhMWJj
ZWRkOHU7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkg
ewotICAgICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdU
Rjo6SW50SGFzaDx1aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90Pihhcmd1bWVudFR5
cGVzW2ldLmtpbmQpKSk7Ci0gICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChh
Y2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KGFyZ3VtZW50VHlwZXNbaV0ubnVsbGFibGUpKSk7Ci0gICAgICAgIGFjY3VtdWxhdG9yID0g
V1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPjo6aGFz
aChhcmd1bWVudFR5cGVzW2ldLmluZGV4KSk7Ci0gICAgfQotICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCByZXR1cm5Db3VudDsgKytpKSB7Ci0gICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpw
YWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHJldHVyblR5cGVzW2ldLmtpbmQpKSk7Ci0gICAgICAgIGFjY3VtdWxh
dG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+
OjpoYXNoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJldHVyblR5cGVzW2ldLm51bGxhYmxlKSkpOwot
ICAgICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6
SW50SGFzaDx1bnNpZ25lZD46Omhhc2gocmV0dXJuVHlwZXNbaV0uaW5kZXgpKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGFjY3VtdWxhdG9yOwotfQotCi11bnNpZ25lZCBTaWduYXR1cmU6Omhhc2goKSBj
b25zdAotewotICAgIHJldHVybiBjb21wdXRlSGFzaChyZXR1cm5Db3VudCgpLCBzdG9yYWdlKDAp
LCBhcmd1bWVudENvdW50KCksIHN0b3JhZ2UocmV0dXJuQ291bnQoKSkpOwotfQotCi1SZWZQdHI8
U2lnbmF0dXJlPiBTaWduYXR1cmU6OnRyeUNyZWF0ZShTaWduYXR1cmVBcmdDb3VudCByZXR1cm5D
b3VudCwgU2lnbmF0dXJlQXJnQ291bnQgYXJndW1lbnRDb3VudCkKLXsKLSAgICAvLyBXZSB1c2Ug
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQgZm9yIHRoaXMgY2xhc3MuCi0gICAgYXV0byByZXN1bHQg
PSB0cnlGYXN0TWFsbG9jKGFsbG9jYXRlZFNpemUocmV0dXJuQ291bnQsIGFyZ3VtZW50Q291bnQp
KTsKLSAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOwotICAgIGlmICghcmVzdWx0LmdldFZhbHVl
KG1lbW9yeSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFNpZ25hdHVyZSogc2lnbmF0
dXJlID0gbmV3IChOb3ROdWxsLCBtZW1vcnkpIFNpZ25hdHVyZShyZXR1cm5Db3VudCwgYXJndW1l
bnRDb3VudCk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKHNpZ25hdHVyZSk7Ci19Ci0KLVNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1hdGlvbigpCi17Ci0jZGVmaW5lIE1BS0VfVEhV
TktfU0lHTkFUVVJFKHR5cGUsIGVuYywgc3RyLCB2YWwsIF8pICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChUeXBlS2luZDo6dHlwZSAhPSBU
eXBlS2luZDo6Vm9pZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICBSZWZQdHI8U2lnbmF0dXJlPiBzaWcgPSBTaWduYXR1cmU6OnRyeUNyZWF0ZSgxLCAwKTsgICAg
ICAgICAgICBcCi0gICAgICAgICAgICBzaWctPnJlZigpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBzaWctPmdldFJldHVy
blR5cGUoMCkgPSBUeXBlczo6dHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICB0aHVua1NpZ25hdHVyZXNbbGluZWFyaXplVHlwZShUeXBlS2luZDo6dHlwZSldID0g
c2lnLmdldCgpOyAgICBcCi0gICAgICAgICAgICBtX3NpZ25hdHVyZVNldC5hZGQoU2lnbmF0dXJl
SGFzaCB7IHNpZy5yZWxlYXNlTm9uTnVsbCgpIH0pOyAgICBcCi0gICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSB3aGlsZSAoZmFsc2UpOwotCi0gICAgRk9SX0VBQ0hfV0FTTV9UWVBFKE1BS0VfVEhV
TktfU0lHTkFUVVJFKTsKLQotICAgIC8vIE1ha2UgVm9pZCBhZ2FpbiBiZWNhdXNlIHdlIGRvbid0
IHVzZSB0aGUgb25lIHRoYXQgaGFzIHZvaWQgaW4gaXQuCi0gICAgewotICAgICAgICBSZWZQdHI8
U2lnbmF0dXJlPiBzaWcgPSBTaWduYXR1cmU6OnRyeUNyZWF0ZSgwLCAwKTsKLSAgICAgICAgc2ln
LT5yZWYoKTsKLSAgICAgICAgdGh1bmtTaWduYXR1cmVzW2xpbmVhcml6ZVR5cGUoVHlwZUtpbmQ6
OlZvaWQpXSA9IHNpZy5nZXQoKTsKLSAgICAgICAgbV9zaWduYXR1cmVTZXQuYWRkKFNpZ25hdHVy
ZUhhc2ggeyBzaWcucmVsZWFzZU5vbk51bGwoKSB9KTsKLSAgICB9Ci19Ci0KLQotCi1zdHJ1Y3Qg
UGFyYW1ldGVyVHlwZXMgewotICAgIGNvbnN0IFZlY3RvcjxUeXBlLCAxPiYgcmV0dXJuVHlwZXM7
Ci0gICAgY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudFR5cGVzOwotCi0gICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgUGFyYW1ldGVyVHlwZXMmIHBhcmFtcykKLSAgICB7Ci0gICAgICAg
IHJldHVybiBjb21wdXRlSGFzaChwYXJhbXMucmV0dXJuVHlwZXMuc2l6ZSgpLCBwYXJhbXMucmV0
dXJuVHlwZXMuZGF0YSgpLCBwYXJhbXMuYXJndW1lbnRUeXBlcy5zaXplKCksIHBhcmFtcy5hcmd1
bWVudFR5cGVzLmRhdGEoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
U2lnbmF0dXJlSGFzaCYgc2lnLCBjb25zdCBQYXJhbWV0ZXJUeXBlcyYgcGFyYW1zKQotICAgIHsK
LSAgICAgICAgaWYgKHNpZy5rZXktPmFyZ3VtZW50Q291bnQoKSAhPSBwYXJhbXMuYXJndW1lbnRU
eXBlcy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChzaWcu
a2V5LT5yZXR1cm5Db3VudCgpICE9IHBhcmFtcy5yZXR1cm5UeXBlcy5zaXplKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
Zy5rZXktPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc2lnLmtleS0+
YXJndW1lbnQoaSkgIT0gcGFyYW1zLmFyZ3VtZW50VHlwZXNbaV0pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpZy5rZXktPnJldHVybkNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHNpZy5r
ZXktPnJldHVyblR5cGUoaSkgIT0gcGFyYW1zLnJldHVyblR5cGVzW2ldKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU2lnbmF0dXJlSGFzaCYgZW50cnksIGNvbnN0
IFBhcmFtZXRlclR5cGVzJiBwYXJhbXMsIHVuc2lnbmVkKQotICAgIHsKLSAgICAgICAgUmVmUHRy
PFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gU2lnbmF0dXJlOjp0cnlDcmVhdGUocGFyYW1zLnJldHVy
blR5cGVzLnNpemUoKSwgcGFyYW1zLmFyZ3VtZW50VHlwZXMuc2l6ZSgpKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2lnbmF0dXJlKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1zLnJldHVyblR5cGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgc2lnbmF0dXJl
LT5nZXRSZXR1cm5UeXBlKGkpID0gcGFyYW1zLnJldHVyblR5cGVzW2ldOwotCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbXMuYXJndW1lbnRUeXBlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgIHNpZ25hdHVyZS0+Z2V0QXJndW1lbnQoaSkgPSBwYXJhbXMuYXJndW1lbnRU
eXBlc1tpXTsKLQotICAgICAgICBlbnRyeS5rZXkgPSBXVEZNb3ZlKHNpZ25hdHVyZSk7Ci0gICAg
fQotfTsKLQotUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVy
ZUZvcihjb25zdCBWZWN0b3I8VHlwZSwgMT4mIHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlPiYg
YXJncykKLXsKLSAgICBpZiBjb25zdGV4cHIgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgIEFT
U0VSVCghcmVzdWx0cy5jb250YWlucyhXYXNtOjpUeXBlczo6Vm9pZCkpOwotICAgICAgICBBU1NF
UlQoIWFyZ3MuY29udGFpbnMoV2FzbTo6VHlwZXM6OlZvaWQpKTsKLSAgICB9Ci0gICAgU2lnbmF0
dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24oKTsKLSAgICBMb2NrZXIgbG9ja2VyIHsg
aW5mby5tX2xvY2sgfTsKLQotICAgIGF1dG8gYWRkUmVzdWx0ID0gaW5mby5tX3NpZ25hdHVyZVNl
dC50ZW1wbGF0ZSBhZGQ8UGFyYW1ldGVyVHlwZXM+KFBhcmFtZXRlclR5cGVzIHsgcmVzdWx0cywg
YXJncyB9KTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT5rZXk7Ci19Ci0KLXZvaWQg
U2lnbmF0dXJlSW5mb3JtYXRpb246OnRyeUNsZWFudXAoKQotewotICAgIFNpZ25hdHVyZUluZm9y
bWF0aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7Ci0gICAgTG9ja2VyIGxvY2tlciB7IGluZm8ubV9s
b2NrIH07Ci0KLSAgICBpbmZvLm1fc2lnbmF0dXJlU2V0LnJlbW92ZUlmKFsmXSAoYXV0byYgaGFz
aCkgewotICAgICAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBoYXNoLmtleTsKLSAgICAgICAg
cmV0dXJuIHNpZ25hdHVyZS0+cmVmQ291bnQoKSA9PSAxOwotICAgIH0pOwotfQotCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzYWNlOWFmYjE3NTc4OTY2MzgyYTcwYjk1MGVjYjM4YjlmNDcwNmY2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIldh
c21PcHMuaCIKLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotbmFtZXNwYWNlIFdhc20gewotCi11c2luZyBTaWduYXR1cmVBcmdDb3VudCA9
IHVpbnQzMl90OwotCi1jbGFzcyBTaWduYXR1cmUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8U2lnbmF0dXJlPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLSAgICBTaWdu
YXR1cmUoKSA9IGRlbGV0ZTsKLSAgICBTaWduYXR1cmUoY29uc3QgU2lnbmF0dXJlJikgPSBkZWxl
dGU7Ci0gICAgU2lnbmF0dXJlKFNpZ25hdHVyZUFyZ0NvdW50IHJldENvdW50LCBTaWduYXR1cmVB
cmdDb3VudCBhcmdDb3VudCkKLSAgICAgICAgOiBtX3JldENvdW50KHJldENvdW50KQotICAgICAg
ICAsIG1fYXJnQ291bnQoYXJnQ291bnQpCi0gICAgewotICAgIH0KLQotICAgIFR5cGUqIHN0b3Jh
Z2UoU2lnbmF0dXJlQXJnQ291bnQgaSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpICsgcmVpbnRl
cnByZXRfY2FzdDxUeXBlKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBzaXplb2Yo
U2lnbmF0dXJlKSk7Ci0gICAgfQotICAgIFR5cGUqIHN0b3JhZ2UoU2lnbmF0dXJlQXJnQ291bnQg
aSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxTaWduYXR1cmUqPih0aGlzKS0+c3RvcmFnZShp
KTsgfQotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGVkU2l6ZShDaGVja2VkPFNpZ25hdHVyZUFy
Z0NvdW50PiByZXRDb3VudCwgQ2hlY2tlZDxTaWduYXR1cmVBcmdDb3VudD4gYXJnQ291bnQpCi0g
ICAgewotICAgICAgICByZXR1cm4gc2l6ZW9mKFNpZ25hdHVyZSkgKyAocmV0Q291bnQgKyBhcmdD
b3VudCkgKiBzaXplb2YoVHlwZSk7Ci0gICAgfQotCi1wdWJsaWM6Ci0gICAgU2lnbmF0dXJlQXJn
Q291bnQgcmV0dXJuQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3JldENvdW50OyB9Ci0gICAgU2ln
bmF0dXJlQXJnQ291bnQgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJnQ291bnQ7
IH0KLQotICAgIFR5cGUgcmV0dXJuVHlwZShTaWduYXR1cmVBcmdDb3VudCBpKSBjb25zdCB7IEFT
U0VSVChpIDwgcmV0dXJuQ291bnQoKSk7IHJldHVybiBjb25zdF9jYXN0PFNpZ25hdHVyZSo+KHRo
aXMpLT5nZXRSZXR1cm5UeXBlKGkpOyB9Ci0gICAgYm9vbCByZXR1cm5zVm9pZCgpIGNvbnN0IHsg
cmV0dXJuICFyZXR1cm5Db3VudCgpOyB9Ci0gICAgVHlwZSBhcmd1bWVudChTaWduYXR1cmVBcmdD
b3VudCBpKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PFNpZ25hdHVyZSo+KHRoaXMpLT5nZXRB
cmd1bWVudChpKTsgfQotICAgIFNpZ25hdHVyZUluZGV4IGluZGV4KCkgY29uc3QgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PFNpZ25hdHVyZUluZGV4Pih0aGlzKTsgfQotCi0gICAgV1RGOjpTdHJpbmcg
dG9TdHJpbmcoKSBjb25zdDsKLSAgICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2lnbmF0dXJlJiByaHMpIGNvbnN0IHsg
cmV0dXJuIHRoaXMgPT0gJnJoczsgfQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLQotICAg
IC8vIFNpZ25hdHVyZXMgYXJlIHVuaXF1ZWQgYW5kLCBmb3IgY2FsbF9pbmRpcmVjdCwgdmFsaWRh
dGVkIGF0IHJ1bnRpbWUuIFRhYmxlcyBjYW4gY3JlYXRlIGludmFsaWQgU2lnbmF0dXJlSW5kZXgg
dmFsdWVzIHdoaWNoIGNhdXNlIGNhbGxfaW5kaXJlY3QgdG8gZmFpbC4gV2UgdXNlIDAgYXMgdGhl
IGludmFsaWRJbmRleCBzbyB0aGF0IHRoZSBjb2RlZ2VuIGNhbiBlYXNpbHkgdGVzdCBmb3IgaXQg
YW5kIHRyYXAsIGFuZCB3ZSBhZGQgYSB0b2tlbiBpbnZhbGlkIGVudHJ5IGluIFNpZ25hdHVyZUlu
Zm9ybWF0aW9uLgotICAgIHN0YXRpYyBjb25zdCBjb25zdGV4cHIgU2lnbmF0dXJlSW5kZXggaW52
YWxpZEluZGV4ID0gMDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgU2lnbmF0dXJlSW5m
b3JtYXRpb247Ci0gICAgZnJpZW5kIHN0cnVjdCBQYXJhbWV0ZXJUeXBlczsKLQotICAgIHN0YXRp
YyBSZWZQdHI8U2lnbmF0dXJlPiB0cnlDcmVhdGUoU2lnbmF0dXJlQXJnQ291bnQgcmV0dXJuQ291
bnQsIFNpZ25hdHVyZUFyZ0NvdW50IGFyZ3VtZW50Q291bnQpOwotICAgIFR5cGUmIGdldFJldHVy
blR5cGUoU2lnbmF0dXJlQXJnQ291bnQgaSkgeyBBU1NFUlQoaSA8IHJldHVybkNvdW50KCkpOyBy
ZXR1cm4gKnN0b3JhZ2UoaSk7IH0KLSAgICBUeXBlJiBnZXRBcmd1bWVudChTaWduYXR1cmVBcmdD
b3VudCBpKSB7IEFTU0VSVChpIDwgYXJndW1lbnRDb3VudCgpKTsgcmV0dXJuICpzdG9yYWdlKHJl
dHVybkNvdW50KCkgKyBpKTsgfQotCi0gICAgU2lnbmF0dXJlQXJnQ291bnQgbV9yZXRDb3VudDsK
LSAgICBTaWduYXR1cmVBcmdDb3VudCBtX2FyZ0NvdW50OwotICAgIC8vIFJldHVybiBUeXBlIGFu
ZCBhcmd1bWVudHMgYXJlIHN0b3JlZCBoZXJlLgotfTsKLQotc3RydWN0IFNpZ25hdHVyZUhhc2gg
ewotICAgIFJlZlB0cjxTaWduYXR1cmU+IGtleSB7IG51bGxwdHIgfTsKLSAgICBTaWduYXR1cmVI
YXNoKCkgPSBkZWZhdWx0OwotICAgIGV4cGxpY2l0IFNpZ25hdHVyZUhhc2goUmVmPFNpZ25hdHVy
ZT4mJiBrZXkpCi0gICAgICAgIDoga2V5KFdURk1vdmUoa2V5KSkKLSAgICB7IH0KLSAgICBleHBs
aWNpdCBTaWduYXR1cmVIYXNoKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICAg
ICAgOiBrZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCi0gICAgeyB9Ci0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFNpZ25hdHVyZUhhc2gmIHJocykgY29uc3QgeyByZXR1cm4gZXF1YWwo
KnRoaXMsIHJocyk7IH0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBTaWduYXR1cmVIYXNo
JiBsaHMsIGNvbnN0IFNpZ25hdHVyZUhhc2gmIHJocykgeyByZXR1cm4gbGhzLmtleSA9PSByaHMu
a2V5OyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU2lnbmF0dXJlSGFzaCYgc2ln
bmF0dXJlKSB7IHJldHVybiBzaWduYXR1cmUua2V5ID8gc2lnbmF0dXJlLmtleS0+aGFzaCgpIDog
MDsgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IGZhbHNlOwotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiBrZXkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotfTsKLQotfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KLQotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwotdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8
SlNDOjpXYXNtOjpTaWduYXR1cmVIYXNoPiA6IEpTQzo6V2FzbTo6U2lnbmF0dXJlSGFzaCB7IH07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwotdGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaFRyYWl0czxKU0M6Oldhc206OlNpZ25hdHVyZUhhc2g+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPEpTQzo6V2FzbTo6U2lnbmF0dXJlSGFzaD4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdU
RgotCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7Ci0KLS8vIFNpZ25hdHVyZSBp
bmZvcm1hdGlvbiBpcyBoZWxkIGdsb2JhbGx5IGFuZCBzaGFyZWQgYnkgdGhlIGVudGlyZSBwcm9j
ZXNzIHRvIGFsbG93IGFsbCBzaWduYXR1cmVzIHRvIGJlIHVuaXF1ZS4gVGhpcyBpcyByZXF1aXJl
ZCB3aGVuIHdhc20gY2FsbHMgYW5vdGhlciB3YXNtIGluc3RhbmNlLCBhbmQgbXVzdCB3b3JrIHdo
ZW4gbW9kdWxlcyBhcmUgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgVk1zLgotY2xhc3MgU2lnbmF0
dXJlSW5mb3JtYXRpb24gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNpZ25hdHVyZUluZm9y
bWF0aW9uKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLQotICAgIFNpZ25hdHVyZUlu
Zm9ybWF0aW9uKCk7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgU2lnbmF0dXJlSW5mb3JtYXRpb24m
IHNpbmdsZXRvbigpOwotCi0gICAgc3RhdGljIFJlZlB0cjxTaWduYXR1cmU+IHNpZ25hdHVyZUZv
cihjb25zdCBWZWN0b3I8VHlwZSwgMT4mIHJldHVyblR5cGVzLCBjb25zdCBWZWN0b3I8VHlwZT4m
IGFyZ3VtZW50VHlwZXMpOwotICAgIEFMV0FZU19JTkxJTkUgY29uc3QgU2lnbmF0dXJlKiB0aHVu
a0ZvcihUeXBlIHR5cGUpIGNvbnN0IHsgcmV0dXJuIHRodW5rU2lnbmF0dXJlc1tsaW5lYXJpemVU
eXBlKHR5cGUua2luZCldOyB9Ci0KLSAgICBzdGF0aWMgY29uc3QgU2lnbmF0dXJlJiBnZXQoU2ln
bmF0dXJlSW5kZXgpOwotICAgIHN0YXRpYyBTaWduYXR1cmVJbmRleCBnZXQoY29uc3QgU2lnbmF0
dXJlJik7Ci0gICAgc3RhdGljIHZvaWQgdHJ5Q2xlYW51cCgpOwotCi1wcml2YXRlOgotICAgIEhh
c2hTZXQ8V2FzbTo6U2lnbmF0dXJlSGFzaD4gbV9zaWduYXR1cmVTZXQ7Ci0gICAgY29uc3QgU2ln
bmF0dXJlKiB0aHVua1NpZ25hdHVyZXNbbnVtVHlwZXNdOwotICAgIExvY2sgbV9sb2NrOwotCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFNpZ25hdHVyZUluZm9ybWF0aW9uKiB0aGVPbmU7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHNpZ25hdHVyZUlu
Zm9ybWF0aW9uRmxhZzsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2lnbmF0dXJlSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNpZ25hdHVyZUlubGluZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OGM2OTg2ZGZmNmM1YjU0MjMxM2YyNTgxNTg5YWQ5MjVmODBkNmU1Ny4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2lnbmF0dXJlSW5saW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lA
c2xvd3N0YXJ0Lm9yZz4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAi
V2FzbVNpZ25hdHVyZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewotCi1p
bmxpbmUgU2lnbmF0dXJlSW5mb3JtYXRpb24mIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpzaW5nbGV0
b24oKQotewotICAgIHN0ZDo6Y2FsbF9vbmNlKHNpZ25hdHVyZUluZm9ybWF0aW9uRmxhZywgW10g
KCkgewotICAgICAgICB0aGVPbmUgPSBuZXcgU2lnbmF0dXJlSW5mb3JtYXRpb247Ci0gICAgfSk7
Ci0gICAgcmV0dXJuICp0aGVPbmU7Ci19Ci0KLWlubGluZSBjb25zdCBTaWduYXR1cmUmIFNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoU2lnbmF0dXJlSW5kZXggaW5kZXgpCi17Ci0gICAgQVNTRVJU
KGluZGV4ICE9IFNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsKLSAgICByZXR1cm4gKmJpdHdpc2Vf
Y2FzdDxjb25zdCBTaWduYXR1cmUqPihpbmRleCk7Ci19Ci0KLWlubGluZSBTaWduYXR1cmVJbmRl
eCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQot
ewotICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICBTaWduYXR1cmVJbmZvcm1hdGlv
biYgaW5mbyA9IHNpbmdsZXRvbigpOwotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaW5mby5tX2xv
Y2sgfTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChpbmZvLCBpbmZvLm1fc2lnbmF0dXJlU2V0LmNv
bnRhaW5zKFNpZ25hdHVyZUhhc2ggeyBjb25zdF9jYXN0PFNpZ25hdHVyZSY+KHNpZ25hdHVyZSkg
fSkpOwotICAgIH0KLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PFNpZ25hdHVyZUluZGV4Pigmc2ln
bmF0dXJlKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KLQotI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQ
YXRocy5jcHAKaW5kZXggMmE4NjdkNmM3M2ZkZWYzZTkxODcwNmEzZjA3MmMwZDU4Mjk5M2NkNy4u
YzUxMWNiM2YyOWI2MWMxMmNkZDdhNWM1NzUyYjBhMWYxYWU3ZTRmMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKQEAgLTQxLDcgKzQxLDcgQEAKICNp
bmNsdWRlICJXYXNtT01HUGxhbi5oIgogI2luY2x1ZGUgIldhc21PU1JFbnRyeVBsYW4uaCIKICNp
bmNsdWRlICJXYXNtT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIldh
c21Xb3JrbGlzdC5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKIApAQCAtNDg2
LDcgKzQ4Niw3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0woY2FsbF9ub190bHMpCiAgICAgcmV0dXJu
IGRvV2FzbUNhbGwoaW5zdGFuY2UsIGluc3RydWN0aW9uLm1fZnVuY3Rpb25JbmRleCk7CiB9CiAK
LWlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2FsbEluZGlyZWN0KENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVuc2lnbmVkIHNpZ25hdHVyZUluZGV4KQoraW5saW5l
IFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsSW5kaXJlY3QoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgdW5z
aWduZWQgdGFibGVJbmRleCwgdW5zaWduZWQgdHlwZUluZGV4KQogewogICAgIFdhc206OkZ1bmNS
ZWZUYWJsZSogdGFibGUgPSBpbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPmFzRnVuY3JlZlRh
YmxlKCk7CiAKQEAgLTQ5NiwxMSArNDk2LDExIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUg
ZG9XYXNtQ2FsbEluZGlyZWN0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJbnN0YW5jCiAg
ICAgV2FzbTo6SW5zdGFuY2UqIHRhcmdldEluc3RhbmNlID0gdGFibGUtPmluc3RhbmNlKGZ1bmN0
aW9uSW5kZXgpOwogICAgIGNvbnN0IFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24m
IGZ1bmN0aW9uID0gdGFibGUtPmZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpOwogCi0gICAgaWYgKGZ1
bmN0aW9uLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KQor
ICAgIGlmIChmdW5jdGlvbi50eXBlSW5kZXggPT0gV2FzbTo6VHlwZURlZmluaXRpb246OmludmFs
aWRJbmRleCkKICAgICAgICAgV0FTTV9USFJPVyhXYXNtOjpFeGNlcHRpb25UeXBlOjpOdWxsVGFi
bGVFbnRyeSk7CiAKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIGNhbGxTaWduYXR1cmUgPSBD
QUxMRUUoKS0+c2lnbmF0dXJlKHNpZ25hdHVyZUluZGV4KTsKLSAgICBpZiAoZnVuY3Rpb24uc2ln
bmF0dXJlSW5kZXggIT0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChjYWxsU2lnbmF0
dXJlKSkKKyAgICBjb25zdCBhdXRvJiBjYWxsU2lnbmF0dXJlID0gQ0FMTEVFKCktPnNpZ25hdHVy
ZSh0eXBlSW5kZXgpOworICAgIGlmIChmdW5jdGlvbi50eXBlSW5kZXggIT0gV2FzbTo6VHlwZUlu
Zm9ybWF0aW9uOjpnZXQoY2FsbFNpZ25hdHVyZSkpCiAgICAgICAgIFdBU01fVEhST1coV2FzbTo6
RXhjZXB0aW9uVHlwZTo6QmFkU2lnbmF0dXJlKTsKIAogICAgIGlmICh0YXJnZXRJbnN0YW5jZSAh
PSBpbnN0YW5jZSkKQEAgLTUxMywxNyArNTEzLDE3IEBAIFdBU01fU0xPV19QQVRIX0RFQ0woY2Fs
bF9pbmRpcmVjdCkKIHsKICAgICBhdXRvIGluc3RydWN0aW9uID0gcGMtPmFzPFdhc21DYWxsSW5k
aXJlY3Q+KCk7CiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IFJFQUQoaW5zdHJ1Y3Rpb24u
bV9mdW5jdGlvbkluZGV4KS51bmJveGVkSW50MzIoKTsKLSAgICByZXR1cm4gZG9XYXNtQ2FsbElu
ZGlyZWN0KGNhbGxGcmFtZSwgaW5zdGFuY2UsIGZ1bmN0aW9uSW5kZXgsIGluc3RydWN0aW9uLm1f
dGFibGVJbmRleCwgaW5zdHJ1Y3Rpb24ubV9zaWduYXR1cmVJbmRleCk7CisgICAgcmV0dXJuIGRv
V2FzbUNhbGxJbmRpcmVjdChjYWxsRnJhbWUsIGluc3RhbmNlLCBmdW5jdGlvbkluZGV4LCBpbnN0
cnVjdGlvbi5tX3RhYmxlSW5kZXgsIGluc3RydWN0aW9uLm1fdHlwZUluZGV4KTsKIH0KIAogV0FT
TV9TTE9XX1BBVEhfREVDTChjYWxsX2luZGlyZWN0X25vX3RscykKIHsKICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gcGMtPmFzPFdhc21DYWxsSW5kaXJlY3ROb1Rscz4oKTsKICAgICB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4ID0gUkVBRChpbnN0cnVjdGlvbi5tX2Z1bmN0aW9uSW5kZXgpLnVuYm94ZWRJ
bnQzMigpOwotICAgIHJldHVybiBkb1dhc21DYWxsSW5kaXJlY3QoY2FsbEZyYW1lLCBpbnN0YW5j
ZSwgZnVuY3Rpb25JbmRleCwgaW5zdHJ1Y3Rpb24ubV90YWJsZUluZGV4LCBpbnN0cnVjdGlvbi5t
X3NpZ25hdHVyZUluZGV4KTsKKyAgICByZXR1cm4gZG9XYXNtQ2FsbEluZGlyZWN0KGNhbGxGcmFt
ZSwgaW5zdGFuY2UsIGZ1bmN0aW9uSW5kZXgsIGluc3RydWN0aW9uLm1fdGFibGVJbmRleCwgaW5z
dHJ1Y3Rpb24ubV90eXBlSW5kZXgpOwogfQogCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRv
V2FzbUNhbGxSZWYoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206Okluc3RhbmNlKiBjYWxsZXJJ
bnN0YW5jZSwgSlNWYWx1ZSB0YXJnZXRSZWZlcmVuY2UsIHVuc2lnbmVkIHNpZ25hdHVyZUluZGV4
KQoraW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsUmVmKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBXYXNtOjpJbnN0YW5jZSogY2FsbGVySW5zdGFuY2UsIEpTVmFsdWUgdGFyZ2V0UmVm
ZXJlbmNlLCB1bnNpZ25lZCB0eXBlSW5kZXgpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CiAKQEAgLTU0MSw4ICs1NDEsOCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRvV2Fz
bUNhbGxSZWYoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdhc206Okluc3RhbmNlKiBjYQogICAgIGlm
IChjYWxsZWVJbnN0YW5jZSAhPSBjYWxsZXJJbnN0YW5jZSkKICAgICAgICAgY2FsbGVlSW5zdGFu
Y2UtPnNldENhY2hlZFN0YWNrTGltaXQoY2FsbGVySW5zdGFuY2UtPmNhY2hlZFN0YWNrTGltaXQo
KSk7CiAKLSAgICBBU1NFUlQoZnVuY3Rpb24uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChDQUxMRUUoKS0+c2lnbmF0dXJlKHNpZ25hdHVyZUluZGV4KSkp
OwotICAgIFVOVVNFRF9QQVJBTShzaWduYXR1cmVJbmRleCk7CisgICAgQVNTRVJUKGZ1bmN0aW9u
LnR5cGVJbmRleCA9PSBXYXNtOjpUeXBlSW5mb3JtYXRpb246OmdldChDQUxMRUUoKS0+c2lnbmF0
dXJlKHR5cGVJbmRleCkpKTsKKyAgICBVTlVTRURfUEFSQU0odHlwZUluZGV4KTsKICAgICBXQVNN
X0NBTExfUkVUVVJOKGNhbGxlZUluc3RhbmNlLCBmdW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0
aW9uLT5leGVjdXRhYmxlQWRkcmVzcygpLCBXYXNtRW50cnlQdHJUYWcpOwogfQogCkBAIC01NTAs
MTQgKzU1MCwxNCBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKGNhbGxfcmVmKQogewogICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBwYy0+YXM8V2FzbUNhbGxSZWY+KCk7CiAgICAgSlNWYWx1ZSByZWZlcmVu
Y2UgPSBKU1ZhbHVlOjpkZWNvZGUoUkVBRChpbnN0cnVjdGlvbi5tX2Z1bmN0aW9uUmVmZXJlbmNl
KS5lbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gZG9XYXNtQ2FsbFJlZihjYWxsRnJhbWUs
IGluc3RhbmNlLCByZWZlcmVuY2UsIGluc3RydWN0aW9uLm1fc2lnbmF0dXJlSW5kZXgpOworICAg
IHJldHVybiBkb1dhc21DYWxsUmVmKGNhbGxGcmFtZSwgaW5zdGFuY2UsIHJlZmVyZW5jZSwgaW5z
dHJ1Y3Rpb24ubV90eXBlSW5kZXgpOwogfQogCiBXQVNNX1NMT1dfUEFUSF9ERUNMKGNhbGxfcmVm
X25vX3RscykKIHsKICAgICBhdXRvIGluc3RydWN0aW9uID0gcGMtPmFzPFdhc21DYWxsUmVmTm9U
bHM+KCk7CiAgICAgSlNWYWx1ZSByZWZlcmVuY2UgPSBKU1ZhbHVlOjpkZWNvZGUoUkVBRChpbnN0
cnVjdGlvbi5tX2Z1bmN0aW9uUmVmZXJlbmNlKS5lbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1
cm4gZG9XYXNtQ2FsbFJlZihjYWxsRnJhbWUsIGluc3RhbmNlLCByZWZlcmVuY2UsIGluc3RydWN0
aW9uLm1fc2lnbmF0dXJlSW5kZXgpOworICAgIHJldHVybiBkb1dhc21DYWxsUmVmKGNhbGxGcmFt
ZSwgaW5zdGFuY2UsIHJlZmVyZW5jZSwgaW5zdHJ1Y3Rpb24ubV90eXBlSW5kZXgpOwogfQogCiBX
QVNNX1NMT1dfUEFUSF9ERUNMKHNldF9nbG9iYWxfcmVmKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmNwcAppbmRleCBmYTU1MmVmZmYxNzQx
ZWNiNWE0YjZjMmY4OWZjYTA5NzU5ZWUzMTVkLi5hNTZhNjgwMDdlNjE5ODRkNTkzYmQ2NDdjZDdl
NjUzYmYxZWNjZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U3RyZWFtaW5nUGFyc2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldhc21PcHMu
aCIKICNpbmNsdWRlICJXYXNtUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbVNlY3Rpb25QYXJzZXIu
aCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UeXBl
RGVmaW5pdGlvbklubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvVW5hbGlnbmVkQWNjZXNzLmg+CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nUGxhbi5jcHAKaW5kZXggODEzNWExMWJiODU1YTRhZGMx
ZTdiYjI1NGFmZjY5YzkxMDIyMTA5ZC4uY2RmNGZlODBjNDdjNmVjN2ZlODkzYmM1ODEzMWQxNjgz
MWM2MTkyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVh
bWluZ1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1p
bmdQbGFuLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNp
bmNsdWRlICJXYXNtTExJbnRQbGFuLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uLmgiCi0j
aW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmlu
aXRpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYv
TG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKaW5kZXggYjUzYzVhNDJmYzg2Mjc5NDE3NDRlNzFlYjEz
NWFlNDZkYjM4MzRhYS4uMDg4MDg0NTZjNDc2NDExMjRjMDE1NTRlYTJiN2ZhZDk4OWFlMzdhNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCkBAIC0xNDEsNyArMTQx
LDcgQEAgdm9pZCBUYWJsZTo6Y2xlYXIodWludDMyX3QgaW5kZXgpCiAgICAgUkVMRUFTRV9BU1NF
UlQobV9vd25lcik7CiAgICAgaWYgKGF1dG8qIGZ1bmNSZWZUYWJsZSA9IGFzRnVuY3JlZlRhYmxl
KCkpIHsKICAgICAgICAgZnVuY1JlZlRhYmxlLT5tX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0KClb
aW5kZXhdID0gV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbigpOwotICAgICAgICBBU1NFUlQo
ZnVuY1JlZlRhYmxlLT5tX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnNpZ25hdHVy
ZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0
aGlzIGluIGNvbXBpbGVkIGNvZGUuCisgICAgICAgIEFTU0VSVChmdW5jUmVmVGFibGUtPm1faW1w
b3J0YWJsZUZ1bmN0aW9ucy5nZXQoKVtpbmRleF0udHlwZUluZGV4ID09IFdhc206OlR5cGVEZWZp
bml0aW9uOjppbnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29k
ZS4KICAgICAgICAgZnVuY1JlZlRhYmxlLT5tX2luc3RhbmNlcy5nZXQoKVtpbmRleF0gPSBudWxs
cHRyOwogICAgIH0KICAgICBtX2pzVmFsdWVzLmdldCgpW2luZGV4XS5zZXRTdGFydGluZ1ZhbHVl
KGpzTnVsbCgpKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBGdW5jUmVmVGFibGU6OkZ1bmNSZWZUYWJs
ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQogICAg
IG1faW5zdGFuY2VzID0gTWFsbG9jUHRyPEluc3RhbmNlKiwgVk1NYWxsb2M+OjptYWxsb2Moc2l6
ZW9mKEluc3RhbmNlKikgKiBDaGVja2VkPHNpemVfdD4oYWxsb2NhdGVkTGVuZ3RoKG1fbGVuZ3Ro
KSkpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhbGxvY2F0ZWRMZW5ndGgobV9sZW5n
dGgpOyArK2kpIHsKICAgICAgICAgbmV3ICgmbV9pbXBvcnRhYmxlRnVuY3Rpb25zLmdldCgpW2ld
KSBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uKCk7Ci0gICAgICAgIEFTU0VSVChtX2ltcG9y
dGFibGVGdW5jdGlvbnMuZ2V0KClbaV0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJl
OjppbnZhbGlkSW5kZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KKyAg
ICAgICAgQVNTRVJUKG1faW1wb3J0YWJsZUZ1bmN0aW9ucy5nZXQoKVtpXS50eXBlSW5kZXggPT0g
V2FzbTo6VHlwZURlZmluaXRpb246OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBp
biBjb21waWxlZCBjb2RlLgogICAgICAgICBtX2luc3RhbmNlcy5nZXQoKVtpXSA9IG51bGxwdHI7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRh
Zy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhZy5oCmluZGV4IGJkZmNmYjY4
OGUyZDFlOTc5YWQwY2NmNGMxYWFmMDZmOTkyNDA1MjQuLmYzNmFkYTZhMjRlMTRlNTg5NzNmN2Q2
Y2NmOTA0NGVkNTViNTRhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKQEAg
LTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIldh
c21TaWduYXR1cmUuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb24uaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtMzUsMjUgKzM1LDI3IEBAIGNsYXNzIFRh
ZyBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUYWc+IHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUYWcpOwogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8VGFnPiBjcmVhdGUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGFnKHNpZ25hdHVyZSkpOyB9CisgICAgc3RhdGljIFJl
ZjxUYWc+IGNyZWF0ZShjb25zdCBUeXBlRGVmaW5pdGlvbiYgdHlwZSkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBUYWcodHlwZSkpOyB9CiAKLSAgICBTaWduYXR1cmVBcmdDb3VudCBwYXJhbWV0ZXJD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7IH0KLSAg
ICBUeXBlIHBhcmFtZXRlcihTaWduYXR1cmVBcmdDb3VudCBpKSBjb25zdCB7IHJldHVybiBtX3Np
Z25hdHVyZS0+YXJndW1lbnQoaSk7IH0KKyAgICBGdW5jdGlvbkFyZ0NvdW50IHBhcmFtZXRlckNv
dW50KCkgY29uc3QgeyByZXR1cm4gbV90eXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJn
dW1lbnRDb3VudCgpOyB9CisgICAgVHlwZSBwYXJhbWV0ZXIoRnVuY3Rpb25BcmdDb3VudCBpKSBj
b25zdCB7IHJldHVybiBtX3R5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudFR5
cGUoaSk7IH0KKyAgICBUeXBlSW5kZXggdHlwZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV90eXBl
LT5pbmRleCgpOyB9CiAKICAgICAvLyBTaW5jZSAoMSkgd2UgZG8gbm90IGNvcHkgV2FzbTo6VGFn
IGFuZCAoMikgd2UgYWx3YXlzIGFsbG9jYXRlIFdhc206OlRhZyBmcm9tIGhlYXAsIHdlIGNhbiB1
c2UKICAgICAvLyBwb2ludGVyIGNvbXBhcmlzb24gZm9yIGlkZW50aXR5IGNoZWNrLgogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBUYWcmIG90aGVyKSBjb25zdCB7IHJldHVybiB0aGlzID09ICZv
dGhlcjsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUYWcmIG90aGVyKSBjb25zdCB7IHJl
dHVybiB0aGlzICE9ICZvdGhlcjsgfQogCi0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUo
KSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZS5nZXQoKTsgfQorICAgIGNvbnN0IEZ1bmN0aW9u
U2lnbmF0dXJlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fdHlwZS0+YXM8RnVuY3Rpb25TaWdu
YXR1cmU+KCk7IH0KIAogcHJpdmF0ZToKLSAgICBUYWcoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUpCi0gICAgICAgIDogbV9zaWduYXR1cmUoUmVmIHsgc2lnbmF0dXJlIH0pCisgICAgVGFnKGNv
bnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlKQorICAgICAgICA6IG1fdHlwZShSZWYgeyB0eXBlIH0p
CiAgICAgeworICAgICAgICBBU1NFUlQodHlwZS5pczxGdW5jdGlvblNpZ25hdHVyZT4oKSk7CiAg
ICAgfQogCi0gICAgUmVmPGNvbnN0IFNpZ25hdHVyZT4gbV9zaWduYXR1cmU7CisgICAgUmVmPGNv
bnN0IFR5cGVEZWZpbml0aW9uPiBtX3R5cGU7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVR5cGVEZWZp
bml0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVmaW5pdGlv
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjQ0ODkxY2MzMWY3ZDUxZjlkNWIyZDU5MTViMzAwYzMwNDMxYjRi
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBl
RGVmaW5pdGlvbi5jcHAKQEAgLTAsMCArMSwyOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXYXNtVHlwZURlZmluaXRpb24uaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQ
cmludGVyLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKKwor
U3RyaW5nIFR5cGVEZWZpbml0aW9uOjp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdU
Rjo6dG9TdHJpbmcoKnRoaXMpOworfQorCit2b2lkIFR5cGVEZWZpbml0aW9uOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKGlzPEZ1bmN0aW9uU2lnbmF0dXJlPigpKQor
ICAgICAgICByZXR1cm4gYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmR1bXAob3V0KTsKKworICAg
IEFTU0VSVChpczxTdHJ1Y3RUeXBlPigpKTsKKyAgICByZXR1cm4gYXM8U3RydWN0VHlwZT4oKS0+
ZHVtcChvdXQpOworfQorCitTdHJpbmcgRnVuY3Rpb25TaWduYXR1cmU6OnRvU3RyaW5nKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gV1RGOjp0b1N0cmluZygqdGhpcyk7Cit9CisKK3ZvaWQgRnVuY3Rp
b25TaWduYXR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICB7CisgICAg
ICAgIG91dC5wcmludCgiKCIpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAg
IGZvciAoRnVuY3Rpb25BcmdDb3VudCBhcmcgPSAwOyBhcmcgPCBhcmd1bWVudENvdW50KCk7ICsr
YXJnKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtYWtlU3RyaW5nKGFyZ3VtZW50VHlw
ZShhcmcpLmtpbmQpKTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgfQorCisgICAgewor
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIG91dC5wcmludCgiIC0+IFsiKTsK
KyAgICAgICAgZm9yIChGdW5jdGlvbkFyZ0NvdW50IHJldCA9IDA7IHJldCA8IHJldHVybkNvdW50
KCk7ICsrcmV0KQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBtYWtlU3RyaW5nKHJldHVy
blR5cGUocmV0KS5raW5kKSk7CisgICAgICAgIG91dC5wcmludCgiXSIpOworICAgIH0KK30KKwor
U3RyaW5nIFN0cnVjdFR5cGU6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjp0
b1N0cmluZygqdGhpcyk7Cit9CisKK3ZvaWQgU3RydWN0VHlwZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21t
YTsKKyAgICBmb3IgKFN0cnVjdEZpZWxkQ291bnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXgg
PCBmaWVsZENvdW50KCk7ICsrZmllbGRJbmRleCkgeworICAgICAgICBvdXQucHJpbnQoY29tbWEs
IG1ha2VTdHJpbmcoZmllbGQoZmllbGRJbmRleCkudHlwZS5raW5kKSk7CisgICAgICAgIG91dC5w
cmludChjb21tYSwgZmllbGQoZmllbGRJbmRleCkubXV0YWJpbGl0eSA/ICJpbW11dGFibGUiIDog
Im11dGFibGUiKTsKKyAgICB9CisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK3N0YXRpYyB1bnNp
Z25lZCBjb21wdXRlU2lnbmF0dXJlSGFzaChzaXplX3QgcmV0dXJuQ291bnQsIGNvbnN0IFR5cGUq
IHJldHVyblR5cGVzLCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgVHlwZSogYXJndW1lbnRU
eXBlcykKK3sKKyAgICB1bnNpZ25lZCBhY2N1bXVsYXRvciA9IDB4YTFiY2VkZDh1OworICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgYWNj
dW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWlu
dDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4oYXJndW1lbnRUeXBlc1tpXS5raW5kKSkp
OworICAgICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdU
Rjo6SW50SGFzaDx1aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90Pihhcmd1bWVudFR5
cGVzW2ldLm51bGxhYmxlKSkpOworICAgICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhh
c2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD46Omhhc2goYXJndW1lbnRUeXBl
c1tpXS5pbmRleCkpOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcmV0dXJu
Q291bnQ7ICsraSkgeworICAgICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNj
dW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90
PihyZXR1cm5UeXBlc1tpXS5raW5kKSkpOworICAgICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFp
ckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFzaChzdGF0aWNf
Y2FzdDx1aW50OF90PihyZXR1cm5UeXBlc1tpXS5udWxsYWJsZSkpKTsKKyAgICAgICAgYWNjdW11
bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dW5zaWdu
ZWQ+OjpoYXNoKHJldHVyblR5cGVzW2ldLmluZGV4KSk7CisgICAgfQorICAgIHJldHVybiBhY2N1
bXVsYXRvcjsKK30KKworc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVTdHJ1Y3RUeXBlSGFzaChzaXpl
X3QgZmllbGRDb3VudCwgY29uc3QgU3RydWN0RmllbGQqIGZpZWxkcykKK3sKKyAgICB1bnNpZ25l
ZCBhY2N1bXVsYXRvciA9IDB4MTVkMjU0NjsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
ZmllbGRDb3VudDsgKytpKSB7CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFz
aChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGZpZWxkc1tpXS50eXBlLmtpbmQpKSk7CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RG
OjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KGZpZWxkc1tpXS50eXBlLm51bGxhYmxlKSkpOworICAgICAgICBh
Y2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1
aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihmaWVsZHNbaV0udHlwZS5pbmRleCkp
KTsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBX
VEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4oZmllbGRzW2ld
Lm11dGFiaWxpdHkpKSk7CisgICAgfQorICAgIHJldHVybiBhY2N1bXVsYXRvcjsKK30KKwordW5z
aWduZWQgVHlwZURlZmluaXRpb246Omhhc2goKSBjb25zdAoreworICAgIGlmIChpczxGdW5jdGlv
blNpZ25hdHVyZT4oKSkgeworICAgICAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSogc2lnbmF0
dXJlID0gYXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CisgICAgICAgIHJldHVybiBjb21wdXRlU2ln
bmF0dXJlSGFzaChzaWduYXR1cmUtPnJldHVybkNvdW50KCksIHNpZ25hdHVyZS0+c3RvcmFnZSgw
KSwgc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIHNpZ25hdHVyZS0+c3RvcmFnZShzaWduYXR1
cmUtPnJldHVybkNvdW50KCkpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaXM8U3RydWN0VHlwZT4o
KSk7CisgICAgY29uc3QgU3RydWN0VHlwZSogc3RydWN0VHlwZSA9IGFzPFN0cnVjdFR5cGU+KCk7
CisgICAgcmV0dXJuIGNvbXB1dGVTdHJ1Y3RUeXBlSGFzaChzdHJ1Y3RUeXBlLT5maWVsZENvdW50
KCksIHN0cnVjdFR5cGUtPnN0b3JhZ2UoMCkpOworfQorCitSZWZQdHI8VHlwZURlZmluaXRpb24+
IFR5cGVEZWZpbml0aW9uOjp0cnlDcmVhdGVGdW5jdGlvblNpZ25hdHVyZShGdW5jdGlvbkFyZ0Nv
dW50IHJldHVybkNvdW50LCBGdW5jdGlvbkFyZ0NvdW50IGFyZ3VtZW50Q291bnQpCit7CisgICAg
Ly8gV2UgdXNlIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIGZvciB0aGlzIGNsYXNzLgorICAgIGF1
dG8gcmVzdWx0ID0gdHJ5RmFzdE1hbGxvYyhhbGxvY2F0ZWRGdW5jdGlvblNpemUocmV0dXJuQ291
bnQsIGFyZ3VtZW50Q291bnQpKTsKKyAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOworICAgIGlm
ICghcmVzdWx0LmdldFZhbHVlKG1lbW9yeSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IFR5cGVEZWZpbml0aW9uKiBzaWduYXR1cmUgPSBuZXcgKE5vdE51bGwsIG1lbW9yeSkgVHlwZURl
ZmluaXRpb24ocmV0dXJuQ291bnQsIGFyZ3VtZW50Q291bnQpOworICAgIHJldHVybiBhZG9wdFJl
ZihzaWduYXR1cmUpOworfQorCitSZWZQdHI8VHlwZURlZmluaXRpb24+IFR5cGVEZWZpbml0aW9u
Ojp0cnlDcmVhdGVTdHJ1Y3RUeXBlKFN0cnVjdEZpZWxkQ291bnQgZmllbGRDb3VudCkKK3sKKyAg
ICAvLyBXZSB1c2UgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgZm9yIHRoaXMgY2xhc3MuCisgICAg
YXV0byByZXN1bHQgPSB0cnlGYXN0TWFsbG9jKGFsbG9jYXRlZFN0cnVjdFNpemUoZmllbGRDb3Vu
dCkpOworICAgIHZvaWQqIG1lbW9yeSA9IG51bGxwdHI7CisgICAgaWYgKCFyZXN1bHQuZ2V0VmFs
dWUobWVtb3J5KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgVHlwZURlZmluaXRpb24q
IHNpZ25hdHVyZSA9IG5ldyAoTm90TnVsbCwgbWVtb3J5KSBUeXBlRGVmaW5pdGlvbihmaWVsZENv
dW50KTsKKyAgICByZXR1cm4gYWRvcHRSZWYoc2lnbmF0dXJlKTsKK30KKworVHlwZUluZm9ybWF0
aW9uOjpUeXBlSW5mb3JtYXRpb24oKQoreworI2RlZmluZSBNQUtFX1RIVU5LX1NJR05BVFVSRSh0
eXBlLCBlbmMsIHN0ciwgdmFsLCBfKSBcCisgICAgZG8geyBcCisgICAgICAgIGlmIChUeXBlS2lu
ZDo6dHlwZSAhPSBUeXBlS2luZDo6Vm9pZCkgeyBcCisgICAgICAgICAgICBSZWZQdHI8VHlwZURl
ZmluaXRpb24+IHNpZyA9IFR5cGVEZWZpbml0aW9uOjp0cnlDcmVhdGVGdW5jdGlvblNpZ25hdHVy
ZSgxLCAwKTsgXAorICAgICAgICAgICAgc2lnLT5yZWYoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIHNpZy0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmdldFJldHVyblR5cGUoMCkgPSBUeXBl
czo6dHlwZTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0aHVua1R5cGVzW2xpbmVh
cml6ZVR5cGUoVHlwZUtpbmQ6OnR5cGUpXSA9IHNpZy5nZXQoKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgbV90eXBlU2V0LmFkZChUeXBlSGFzaCB7IHNpZy5yZWxlYXNl
Tm9uTnVsbCgpIH0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpOworCisgICAgRk9S
X0VBQ0hfV0FTTV9UWVBFKE1BS0VfVEhVTktfU0lHTkFUVVJFKTsKKworICAgIC8vIE1ha2UgVm9p
ZCBhZ2FpbiBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGUgb25lIHRoYXQgaGFzIHZvaWQgaW4gaXQu
CisgICAgeworICAgICAgICBSZWZQdHI8VHlwZURlZmluaXRpb24+IHNpZyA9IFR5cGVEZWZpbml0
aW9uOjp0cnlDcmVhdGVGdW5jdGlvblNpZ25hdHVyZSgwLCAwKTsKKyAgICAgICAgc2lnLT5yZWYo
KTsKKyAgICAgICAgdGh1bmtUeXBlc1tsaW5lYXJpemVUeXBlKFR5cGVLaW5kOjpWb2lkKV0gPSBz
aWcuZ2V0KCk7CisgICAgICAgIG1fdHlwZVNldC5hZGQoVHlwZUhhc2ggeyBzaWcucmVsZWFzZU5v
bk51bGwoKSB9KTsKKyAgICB9Cit9CisKK3N0cnVjdCBGdW5jdGlvblBhcmFtZXRlclR5cGVzIHsK
KyAgICBjb25zdCBWZWN0b3I8VHlwZSwgMT4mIHJldHVyblR5cGVzOworICAgIGNvbnN0IFZlY3Rv
cjxUeXBlPiYgYXJndW1lbnRUeXBlczsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEZ1bmN0aW9uUGFyYW1ldGVyVHlwZXMmIHBhcmFtcykKKyAgICB7CisgICAgICAgIHJldHVybiBj
b21wdXRlU2lnbmF0dXJlSGFzaChwYXJhbXMucmV0dXJuVHlwZXMuc2l6ZSgpLCBwYXJhbXMucmV0
dXJuVHlwZXMuZGF0YSgpLCBwYXJhbXMuYXJndW1lbnRUeXBlcy5zaXplKCksIHBhcmFtcy5hcmd1
bWVudFR5cGVzLmRhdGEoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
VHlwZUhhc2gmIHNpZywgY29uc3QgRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyYgcGFyYW1zKQorICAg
IHsKKyAgICAgICAgaWYgKHNpZy5rZXktPmlzPFN0cnVjdFR5cGU+KCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY29uc3QgRnVuY3Rpb25TaWduYXR1cmUqIHNpZ25hdHVy
ZSA9IHNpZy5rZXktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOworICAgICAgICBpZiAoc2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCkgIT0gcGFyYW1zLmFyZ3VtZW50VHlwZXMuc2l6ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoc2lnbmF0dXJlLT5yZXR1cm5Db3Vu
dCgpICE9IHBhcmFtcy5yZXR1cm5UeXBlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzaWduYXR1cmUtPmFyZ3VtZW50VHlw
ZShpKSAhPSBwYXJhbXMuYXJndW1lbnRUeXBlc1tpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzaWduYXR1cmUt
PnJldHVyblR5cGUoaSkgIT0gcGFyYW1zLnJldHVyblR5cGVzW2ldKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVHlwZUhhc2gmIGVudHJ5LCBjb25zdCBGdW5jdGlv
blBhcmFtZXRlclR5cGVzJiBwYXJhbXMsIHVuc2lnbmVkKQorICAgIHsKKyAgICAgICAgUmVmUHRy
PFR5cGVEZWZpbml0aW9uPiBzaWduYXR1cmUgPSBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlRnVu
Y3Rpb25TaWduYXR1cmUocGFyYW1zLnJldHVyblR5cGVzLnNpemUoKSwgcGFyYW1zLmFyZ3VtZW50
VHlwZXMuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2lnbmF0dXJlKTsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1zLnJldHVyblR5cGVzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+Z2V0
UmV0dXJuVHlwZShpKSA9IHBhcmFtcy5yZXR1cm5UeXBlc1tpXTsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1zLmFyZ3VtZW50VHlwZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5nZXRBcmd1bWVudFR5
cGUoaSkgPSBwYXJhbXMuYXJndW1lbnRUeXBlc1tpXTsKKworICAgICAgICBlbnRyeS5rZXkgPSBX
VEZNb3ZlKHNpZ25hdHVyZSk7CisgICAgfQorfTsKKworc3RydWN0IFN0cnVjdFBhcmFtZXRlclR5
cGVzIHsKKyAgICBjb25zdCBWZWN0b3I8U3RydWN0RmllbGQ+JiBmaWVsZHM7CisKKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBTdHJ1Y3RQYXJhbWV0ZXJUeXBlcyYgcGFyYW1zKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVTdHJ1Y3RUeXBlSGFzaChwYXJhbXMuZmllbGRzLnNp
emUoKSwgcGFyYW1zLmZpZWxkcy5kYXRhKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFR5cGVIYXNoJiBzaWcsIGNvbnN0IFN0cnVjdFBhcmFtZXRlclR5cGVzJiBwYXJh
bXMpCisgICAgeworICAgICAgICBpZiAoc2lnLmtleS0+aXM8RnVuY3Rpb25TaWduYXR1cmU+KCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY29uc3QgU3RydWN0VHlwZSog
c3RydWN0VHlwZSA9IHNpZy5rZXktPmFzPFN0cnVjdFR5cGU+KCk7CisgICAgICAgIGlmIChzdHJ1
Y3RUeXBlLT5maWVsZENvdW50KCkgIT0gcGFyYW1zLmZpZWxkcy5zaXplKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0cnVj
dFR5cGUtPmZpZWxkQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoc3RydWN0VHlwZS0+
ZmllbGQoaSkgIT0gcGFyYW1zLmZpZWxkc1tpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCB0cmFuc2xhdGUoVHlwZUhhc2gmIGVudHJ5LCBjb25zdCBTdHJ1Y3RQYXJhbWV0ZXJU
eXBlcyYgcGFyYW1zLCB1bnNpZ25lZCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxUeXBlRGVmaW5p
dGlvbj4gc2lnbmF0dXJlID0gVHlwZURlZmluaXRpb246OnRyeUNyZWF0ZVN0cnVjdFR5cGUocGFy
YW1zLmZpZWxkcy5zaXplKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaWduYXR1cmUpOwor
CisgICAgICAgIFN0cnVjdFR5cGUqIHN0cnVjdFR5cGUgPSBzaWduYXR1cmUtPmFzPFN0cnVjdFR5
cGU+KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbXMuZmllbGRzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgc3RydWN0VHlwZS0+Z2V0RmllbGQoaSkgPSBwYXJhbXMu
ZmllbGRzW2ldOworCisgICAgICAgIGVudHJ5LmtleSA9IFdURk1vdmUoc2lnbmF0dXJlKTsKKyAg
ICB9Cit9OworCitSZWZQdHI8VHlwZURlZmluaXRpb24+IFR5cGVJbmZvcm1hdGlvbjo6dHlwZURl
ZmluaXRpb25Gb3JGdW5jdGlvbihjb25zdCBWZWN0b3I8VHlwZSwgMT4mIHJlc3VsdHMsIGNvbnN0
IFZlY3RvcjxUeXBlPiYgYXJncykKK3sKKyAgICBpZiBjb25zdGV4cHIgKEFTU0VSVF9FTkFCTEVE
KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0cy5jb250YWlucyhXYXNtOjpUeXBlczo6Vm9pZCkp
OworICAgICAgICBBU1NFUlQoIWFyZ3MuY29udGFpbnMoV2FzbTo6VHlwZXM6OlZvaWQpKTsKKyAg
ICB9CisgICAgVHlwZUluZm9ybWF0aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7CisgICAgTG9ja2Vy
IGxvY2tlciB7IGluZm8ubV9sb2NrIH07CisKKyAgICBhdXRvIGFkZFJlc3VsdCA9IGluZm8ubV90
eXBlU2V0LnRlbXBsYXRlIGFkZDxGdW5jdGlvblBhcmFtZXRlclR5cGVzPihGdW5jdGlvblBhcmFt
ZXRlclR5cGVzIHsgcmVzdWx0cywgYXJncyB9KTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJh
dG9yLT5rZXk7Cit9CisKK1JlZlB0cjxUeXBlRGVmaW5pdGlvbj4gVHlwZUluZm9ybWF0aW9uOjp0
eXBlRGVmaW5pdGlvbkZvclN0cnVjdChjb25zdCBWZWN0b3I8U3RydWN0RmllbGQ+JiBmaWVsZHMp
Cit7CisgICAgVHlwZUluZm9ybWF0aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7CisgICAgTG9ja2Vy
IGxvY2tlciB7IGluZm8ubV9sb2NrIH07CisKKyAgICBhdXRvIGFkZFJlc3VsdCA9IGluZm8ubV90
eXBlU2V0LnRlbXBsYXRlIGFkZDxTdHJ1Y3RQYXJhbWV0ZXJUeXBlcz4oU3RydWN0UGFyYW1ldGVy
VHlwZXMgeyBmaWVsZHMgfSk7CisgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5Owor
fQorCit2b2lkIFR5cGVJbmZvcm1hdGlvbjo6dHJ5Q2xlYW51cCgpCit7CisgICAgVHlwZUluZm9y
bWF0aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7CisgICAgTG9ja2VyIGxvY2tlciB7IGluZm8ubV9s
b2NrIH07CisKKyAgICBpbmZvLm1fdHlwZVNldC5yZW1vdmVJZihbJl0gKGF1dG8mIGhhc2gpIHsK
KyAgICAgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gaGFzaC5rZXk7CisgICAgICAgIHJldHVy
biBzaWduYXR1cmUtPnJlZkNvdW50KCkgPT0gMTsKKyAgICB9KTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVmaW5pdGlvbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVR5cGVEZWZpbml0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MmFmMzljODYxYjMzYWFjNjc1NTY1N2RkMGNmMThmNzNjYTZiMTUxMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVmaW5pdGlvbi5oCkBAIC0w
LDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHZhcmlhbnQ+CisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtT3BzLmgiCisjaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsK
KwordXNpbmcgRnVuY3Rpb25BcmdDb3VudCA9IHVpbnQzMl90OwordXNpbmcgU3RydWN0RmllbGRD
b3VudCA9IHVpbnQzMl90OworCitjbGFzcyBGdW5jdGlvblNpZ25hdHVyZSB7CitwdWJsaWM6Cisg
ICAgRnVuY3Rpb25TaWduYXR1cmUoY29uc3QgY2hhciogcGF5bG9hZCwgRnVuY3Rpb25BcmdDb3Vu
dCBhcmd1bWVudENvdW50LCBGdW5jdGlvbkFyZ0NvdW50IHJldHVybkNvdW50KQorICAgICAgICA6
IG1fcGF5bG9hZChwYXlsb2FkKQorICAgICAgICAsIG1fYXJnQ291bnQoYXJndW1lbnRDb3VudCkK
KyAgICAgICAgLCBtX3JldENvdW50KHJldHVybkNvdW50KQorICAgIHsKKyAgICB9CisKKyAgICBG
dW5jdGlvbkFyZ0NvdW50IGFyZ3VtZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2FyZ0NvdW50
OyB9CisgICAgRnVuY3Rpb25BcmdDb3VudCByZXR1cm5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmV0Q291bnQ7IH0KKyAgICBUeXBlIHJldHVyblR5cGUoRnVuY3Rpb25BcmdDb3VudCBpKSBjb25z
dCB7IEFTU0VSVChpIDwgcmV0dXJuQ291bnQoKSk7IHJldHVybiBjb25zdF9jYXN0PEZ1bmN0aW9u
U2lnbmF0dXJlKj4odGhpcyktPmdldFJldHVyblR5cGUoaSk7IH0KKyAgICBib29sIHJldHVybnNW
b2lkKCkgY29uc3QgeyByZXR1cm4gIXJldHVybkNvdW50KCk7IH0KKyAgICBUeXBlIGFyZ3VtZW50
VHlwZShGdW5jdGlvbkFyZ0NvdW50IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RnVuY3Rp
b25TaWduYXR1cmUqPih0aGlzKS0+Z2V0QXJndW1lbnRUeXBlKGkpOyB9CisKKyAgICBXVEY6OlN0
cmluZyB0b1N0cmluZygpIGNvbnN0OworICAgIHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OworCisgICAgVHlwZSYgZ2V0UmV0dXJuVHlwZShGdW5jdGlvbkFyZ0NvdW50IGkp
IHsgQVNTRVJUKGkgPCByZXR1cm5Db3VudCgpKTsgcmV0dXJuICpzdG9yYWdlKGkpOyB9CisgICAg
VHlwZSYgZ2V0QXJndW1lbnRUeXBlKEZ1bmN0aW9uQXJnQ291bnQgaSkgeyBBU1NFUlQoaSA8IGFy
Z3VtZW50Q291bnQoKSk7IHJldHVybiAqc3RvcmFnZShyZXR1cm5Db3VudCgpICsgaSk7IH0KKwor
ICAgIFR5cGUqIHN0b3JhZ2UoRnVuY3Rpb25BcmdDb3VudCBpKSB7IHJldHVybiBpICsgcmVpbnRl
cnByZXRfY2FzdDxUeXBlKj4oY29uc3RfY2FzdDxjaGFyKj4obV9wYXlsb2FkKSk7IH0KKyAgICBU
eXBlKiBzdG9yYWdlKEZ1bmN0aW9uQXJnQ291bnQgaSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2Fz
dDxGdW5jdGlvblNpZ25hdHVyZSo+KHRoaXMpLT5zdG9yYWdlKGkpOyB9CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIFR5cGVJbmZvcm1hdGlvbjsKKworICAgIGNvbnN0IGNoYXIqIG1fcGF5
bG9hZDsKKyAgICBGdW5jdGlvbkFyZ0NvdW50IG1fYXJnQ291bnQ7CisgICAgRnVuY3Rpb25BcmdD
b3VudCBtX3JldENvdW50OworfTsKKworLy8gRklYTUUgYXV0by1nZW5lcmF0ZSB0aGlzLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MjMxCitlbnVtIE11dGFiaWxp
dHkgOiB1aW50OF90IHsKKyAgICBNdXRhYmxlID0gMSwKKyAgICBJbW11dGFibGUgPSAwCit9Owor
CitzdHJ1Y3QgU3RydWN0RmllbGQgeworICAgIFR5cGUgdHlwZTsKKyAgICBNdXRhYmlsaXR5IG11
dGFiaWxpdHk7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0RmllbGQmIHJocykg
Y29uc3QgeyByZXR1cm4gdHlwZSA9PSByaHMudHlwZSAmJiBtdXRhYmlsaXR5ID09IHJocy5tdXRh
YmlsaXR5OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cnVjdEZpZWxkJiByaHMpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gcmhzKTsgfQorfTsKKworY2xhc3MgU3RydWN0VHlwZSB7
CitwdWJsaWM6CisgICAgU3RydWN0VHlwZShjb25zdCBjaGFyKiBwYXlsb2FkLCBTdHJ1Y3RGaWVs
ZENvdW50IGZpZWxkQ291bnQpCisgICAgICAgIDogbV9wYXlsb2FkKHBheWxvYWQpCisgICAgICAg
ICwgbV9maWVsZENvdW50KGZpZWxkQ291bnQpCisgICAgeworICAgIH0KKworICAgIFN0cnVjdEZp
ZWxkQ291bnQgZmllbGRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmllbGRDb3VudDsgfQorICAg
IFN0cnVjdEZpZWxkIGZpZWxkKFN0cnVjdEZpZWxkQ291bnQgaSkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxTdHJ1Y3RUeXBlKj4odGhpcyktPmdldEZpZWxkKGkpOyB9CisKKyAgICBXVEY6OlN0
cmluZyB0b1N0cmluZygpIGNvbnN0OworICAgIHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OworCisgICAgU3RydWN0RmllbGQmIGdldEZpZWxkKFN0cnVjdEZpZWxkQ291bnQg
aSkgeyBBU1NFUlQoaSA8IGZpZWxkQ291bnQoKSk7IHJldHVybiAqc3RvcmFnZShpKTsgfQorICAg
IFN0cnVjdEZpZWxkKiBzdG9yYWdlKFN0cnVjdEZpZWxkQ291bnQgaSkgeyByZXR1cm4gaSArIHJl
aW50ZXJwcmV0X2Nhc3Q8U3RydWN0RmllbGQqPihjb25zdF9jYXN0PGNoYXIqPihtX3BheWxvYWQp
KTsgfQorICAgIFN0cnVjdEZpZWxkKiBzdG9yYWdlKFN0cnVjdEZpZWxkQ291bnQgaSkgY29uc3Qg
eyByZXR1cm4gY29uc3RfY2FzdDxTdHJ1Y3RUeXBlKj4odGhpcyktPnN0b3JhZ2UoaSk7IH0KKwor
cHJpdmF0ZToKKyAgICBjb25zdCBjaGFyKiBtX3BheWxvYWQ7CisgICAgU3RydWN0RmllbGRDb3Vu
dCBtX2ZpZWxkQ291bnQ7Cit9OworCitjbGFzcyBUeXBlRGVmaW5pdGlvbiA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxUeXBlRGVmaW5pdGlvbj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworCisgICAgVHlwZURlZmluaXRpb24oKSA9IGRlbGV0ZTsKKyAgICBUeXBlRGVmaW5p
dGlvbihjb25zdCBUeXBlRGVmaW5pdGlvbiYpID0gZGVsZXRlOworCisgICAgVHlwZURlZmluaXRp
b24oRnVuY3Rpb25BcmdDb3VudCByZXRDb3VudCwgRnVuY3Rpb25BcmdDb3VudCBhcmdDb3VudCkK
KyAgICAgICAgOiBtX3R5cGVIZWFkZXIgeyBGdW5jdGlvblNpZ25hdHVyZSB7IHBheWxvYWQoKSwg
YXJnQ291bnQsIHJldENvdW50IH0gfQorICAgIHsKKyAgICB9CisKKyAgICBUeXBlRGVmaW5pdGlv
bihTdHJ1Y3RGaWVsZENvdW50IGZpZWxkQ291bnQpCisgICAgICAgIDogbV90eXBlSGVhZGVyIHsg
U3RydWN0VHlwZSB7IHBheWxvYWQoKSwgZmllbGRDb3VudCB9IH0KKyAgICB7CisgICAgfQorCisg
ICAgY2hhciogcGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
ICsgc2l6ZW9mKFR5cGVEZWZpbml0aW9uKTsgfQorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGVk
RnVuY3Rpb25TaXplKENoZWNrZWQ8RnVuY3Rpb25BcmdDb3VudD4gcmV0Q291bnQsIENoZWNrZWQ8
RnVuY3Rpb25BcmdDb3VudD4gYXJnQ291bnQpIHsgcmV0dXJuIHNpemVvZihUeXBlRGVmaW5pdGlv
bikgKyAocmV0Q291bnQgKyBhcmdDb3VudCkgKiBzaXplb2YoVHlwZSk7IH0KKyAgICBzdGF0aWMg
c2l6ZV90IGFsbG9jYXRlZFN0cnVjdFNpemUoQ2hlY2tlZDxTdHJ1Y3RGaWVsZENvdW50PiBmaWVs
ZENvdW50KSB7IHJldHVybiBzaXplb2YoVHlwZURlZmluaXRpb24pICsgZmllbGRDb3VudCAqIHNp
emVvZihTdHJ1Y3RGaWVsZCk7IH0KKworcHVibGljOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgorICAgIGJvb2wgaXMoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFQ+
KG1fdHlwZUhlYWRlcik7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIFQqIGFz
KCkgeyBBU1NFUlQoaXM8VD4oKSk7IHJldHVybiBzdGQ6OmdldF9pZjxUPigmbV90eXBlSGVhZGVy
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PFR5cGVEZWZpbml0aW9uKj4odGhpcyktPmFzPFQ+KCk7IH0K
KworICAgIFR5cGVJbmRleCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxUeXBl
SW5kZXg+KHRoaXMpOyB9CisKKyAgICBXVEY6OlN0cmluZyB0b1N0cmluZygpIGNvbnN0OworICAg
IHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUeXBlRGVmaW5pdGlvbiYgcmhzKSBjb25zdCB7IHJldHVybiB0aGlzID09ICZy
aHM7IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisKKyAgICAvLyBUeXBlIGRlZmluaXRp
b25zIGFyZSB1bmlxdWVkIGFuZCwgZm9yIGNhbGxfaW5kaXJlY3QsIHZhbGlkYXRlZCBhdCBydW50
aW1lLiBUYWJsZXMgY2FuIGNyZWF0ZSBpbnZhbGlkIFR5cGVJbmRleCB2YWx1ZXMgd2hpY2ggY2F1
c2UgY2FsbF9pbmRpcmVjdCB0byBmYWlsLiBXZSB1c2UgMCBhcyB0aGUgaW52YWxpZEluZGV4IHNv
IHRoYXQgdGhlIGNvZGVnZW4gY2FuIGVhc2lseSB0ZXN0IGZvciBpdCBhbmQgdHJhcCwgYW5kIHdl
IGFkZCBhIHRva2VuIGludmFsaWQgZW50cnkgaW4gVHlwZUluZm9ybWF0aW9uLgorICAgIHN0YXRp
YyBjb25zdCBjb25zdGV4cHIgVHlwZUluZGV4IGludmFsaWRJbmRleCA9IDA7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFR5cGVJbmZvcm1hdGlvbjsKKyAgICBmcmllbmQgc3RydWN0IEZ1
bmN0aW9uUGFyYW1ldGVyVHlwZXM7CisgICAgZnJpZW5kIHN0cnVjdCBTdHJ1Y3RQYXJhbWV0ZXJU
eXBlczsKKworICAgIHN0YXRpYyBSZWZQdHI8VHlwZURlZmluaXRpb24+IHRyeUNyZWF0ZUZ1bmN0
aW9uU2lnbmF0dXJlKEZ1bmN0aW9uQXJnQ291bnQgcmV0dXJuQ291bnQsIEZ1bmN0aW9uQXJnQ291
bnQgYXJndW1lbnRDb3VudCk7CisgICAgc3RhdGljIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4gdHJ5
Q3JlYXRlU3RydWN0VHlwZShTdHJ1Y3RGaWVsZENvdW50KTsKKworICAgIHN0ZDo6dmFyaWFudDxG
dW5jdGlvblNpZ25hdHVyZSwgU3RydWN0VHlwZT4gbV90eXBlSGVhZGVyOworICAgIC8vIFBheWxv
YWQgaXMgc3RvcmVkIGhlcmUuCit9OworCitzdHJ1Y3QgVHlwZUhhc2ggeworICAgIFJlZlB0cjxU
eXBlRGVmaW5pdGlvbj4ga2V5IHsgbnVsbHB0ciB9OworICAgIFR5cGVIYXNoKCkgPSBkZWZhdWx0
OworICAgIGV4cGxpY2l0IFR5cGVIYXNoKFJlZjxUeXBlRGVmaW5pdGlvbj4mJiBrZXkpCisgICAg
ICAgIDoga2V5KFdURk1vdmUoa2V5KSkKKyAgICB7IH0KKyAgICBleHBsaWNpdCBUeXBlSGFzaChX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDoga2V5KFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlKQorICAgIHsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUeXBl
SGFzaCYgcmhzKSBjb25zdCB7IHJldHVybiBlcXVhbCgqdGhpcywgcmhzKTsgfQorICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFR5cGVIYXNoJiBsaHMsIGNvbnN0IFR5cGVIYXNoJiByaHMpIHsg
cmV0dXJuIGxocy5rZXkgPT0gcmhzLmtleTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IFR5cGVIYXNoJiB0eXBlSGFzaCkgeyByZXR1cm4gdHlwZUhhc2gua2V5ID8gdHlwZUhhc2gu
a2V5LT5oYXNoKCkgOiAwOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGtleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxKU0M6Oldhc206OlR5cGVIYXNoPiA6IEpTQzo6V2FzbTo6VHlwZUhhc2gg
eyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpXYXNtOjpUeXBlSGFzaD4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SlNDOjpXYXNtOjpUeXBlSGFzaD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKKy8vIFR5cGUgaW5mb3JtYXRpb24g
aXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5IHRoZSBlbnRpcmUgcHJvY2VzcyB0byBhbGxv
dyBhbGwgdHlwZSBkZWZpbml0aW9ucyB0byBiZSB1bmlxdWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hl
biB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwgYW5kIG11c3Qgd29yayB3aGVuIG1v
ZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZNcy4KK2NsYXNzIFR5cGVJbmZvcm1h
dGlvbiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVHlwZUluZm9ybWF0aW9uKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworICAgIFR5cGVJbmZvcm1hdGlvbigpOworCitwdWJs
aWM6CisgICAgc3RhdGljIFR5cGVJbmZvcm1hdGlvbiYgc2luZ2xldG9uKCk7CisKKyAgICBzdGF0
aWMgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiB0eXBlRGVmaW5pdGlvbkZvckZ1bmN0aW9uKGNvbnN0
IFZlY3RvcjxUeXBlLCAxPiYgcmV0dXJuVHlwZXMsIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1l
bnRUeXBlcyk7CisgICAgc3RhdGljIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4gdHlwZURlZmluaXRp
b25Gb3JTdHJ1Y3QoY29uc3QgVmVjdG9yPFN0cnVjdEZpZWxkPiYgZmllbGRzKTsKKyAgICBBTFdB
WVNfSU5MSU5FIGNvbnN0IFR5cGVEZWZpbml0aW9uKiB0aHVua0ZvcihUeXBlIHR5cGUpIGNvbnN0
IHsgcmV0dXJuIHRodW5rVHlwZXNbbGluZWFyaXplVHlwZSh0eXBlLmtpbmQpXTsgfQorCisgICAg
c3RhdGljIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBnZXQoVHlwZUluZGV4KTsKKyAgICBzdGF0aWMg
VHlwZUluZGV4IGdldChjb25zdCBUeXBlRGVmaW5pdGlvbiYpOworCisgICAgc3RhdGljIFR5cGVJ
bmRleCBnZXQoY29uc3QgRnVuY3Rpb25TaWduYXR1cmUmKTsKKyAgICBzdGF0aWMgY29uc3QgRnVu
Y3Rpb25TaWduYXR1cmUmIGdldEZ1bmN0aW9uU2lnbmF0dXJlKFR5cGVJbmRleCk7CisKKyAgICBz
dGF0aWMgdm9pZCB0cnlDbGVhbnVwKCk7Citwcml2YXRlOgorICAgIEhhc2hTZXQ8V2FzbTo6VHlw
ZUhhc2g+IG1fdHlwZVNldDsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiogdGh1bmtUeXBlc1tu
dW1UeXBlc107CisgICAgTG9jayBtX2xvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkwZTc2YTRkMWVlYWI3NjYxMjE0MGY5NjdhOGNmYTFhMjBlZjRjYjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVHlwZURlZmluaXRpb25Jbmxp
bmVzLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1
a2UgU3V6dWtpIDx5dXN1a2VzdXp1a2lAc2xvd3N0YXJ0Lm9yZz4uCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK2lubGluZSBUeXBlSW5mb3JtYXRpb24mIFR5cGVJ
bmZvcm1hdGlvbjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgVHlwZUluZm9ybWF0aW9uKiB0
aGVPbmU7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIHR5cGVJbmZvcm1hdGlvbkZsYWc7CisK
KyAgICBzdGQ6OmNhbGxfb25jZSh0eXBlSW5mb3JtYXRpb25GbGFnLCBbXSAoKSB7CisgICAgICAg
IHRoZU9uZSA9IG5ldyBUeXBlSW5mb3JtYXRpb247CisgICAgfSk7CisgICAgcmV0dXJuICp0aGVP
bmU7Cit9CisKK2lubGluZSBjb25zdCBUeXBlRGVmaW5pdGlvbiYgVHlwZUluZm9ybWF0aW9uOjpn
ZXQoVHlwZUluZGV4IGluZGV4KQoreworICAgIEFTU0VSVChpbmRleCAhPSBUeXBlRGVmaW5pdGlv
bjo6aW52YWxpZEluZGV4KTsKKyAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxjb25zdCBUeXBlRGVm
aW5pdGlvbio+KGluZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlJiBU
eXBlSW5mb3JtYXRpb246OmdldEZ1bmN0aW9uU2lnbmF0dXJlKFR5cGVJbmRleCBpbmRleCkKK3sK
KyAgICByZXR1cm4gKmdldChpbmRleCkuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7Cit9CisKK2lu
bGluZSBUeXBlSW5kZXggVHlwZUluZm9ybWF0aW9uOjpnZXQoY29uc3QgVHlwZURlZmluaXRpb24m
IHR5cGUpCit7CisgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgIFR5cGVJbmZvcm1h
dGlvbiYgaW5mbyA9IHNpbmdsZXRvbigpOworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgaW5mby5t
X2xvY2sgfTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpbmZvLCBpbmZvLm1fdHlwZVNldC5jb250
YWlucyhUeXBlSGFzaCB7IGNvbnN0X2Nhc3Q8VHlwZURlZmluaXRpb24mPih0eXBlKSB9KSk7Cisg
ICAgfQorICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VHlwZUluZGV4PigmdHlwZSk7Cit9CisKK2lu
bGluZSBUeXBlSW5kZXggVHlwZUluZm9ybWF0aW9uOjpnZXQoY29uc3QgRnVuY3Rpb25TaWduYXR1
cmUmIGZ1bmN0aW9uVHlwZSkKK3sKKyAgICByZXR1cm4gZ2V0KCpyZWludGVycHJldF9jYXN0PFR5
cGVEZWZpbml0aW9uKj4oY29uc3RfY2FzdDxjaGFyKj4oZnVuY3Rpb25UeXBlLm1fcGF5bG9hZCkg
LSBzaXplb2YoVHlwZURlZmluaXRpb24pKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKaW5kZXggNjU3NmE2OWM1
NjgzNTNhYjY3N2I4ZTFiNGM4NDE0NmE3NGMwMzVmZi4uODZhNWNiZmU3YzMzMzFiYTFjOTUzMTc0
ZjZjNThhYmVlYjhjN2FkOSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
Z2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQpAQCAtMjE4LDEyICsyMTgsMTIgQEAgZW51bSBjbGFz
cyBOdWxsYWJsZSA6IGJvb2wgewogICBZZXMgPSB0cnVlLAogfTsKIAotdXNpbmcgU2lnbmF0dXJl
SW5kZXggPSB1aW50cHRyX3Q7Cit1c2luZyBUeXBlSW5kZXggPSB1aW50cHRyX3Q7CiAKIHN0cnVj
dCBUeXBlIHsKICAgICBUeXBlS2luZCBraW5kOwogICAgIE51bGxhYmxlIG51bGxhYmxlOwotICAg
IFNpZ25hdHVyZUluZGV4IGluZGV4OworICAgIFR5cGVJbmRleCBpbmRleDsKIAogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBUeXBlJiBvdGhlcikgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKaW5kZXggMWY0NjRmZTk4YmFkODM0NDA0ZDEx
MDE4OWRkY2Y4ZjI1NDQzYmQzYS4uNGY0NTVjYzQ3YTA0ODZmNWM5NWU0YTZjNDA1NWNkMGM4NTIz
ODM1ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAt
MzgsOCArMzgsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi12b2lk
IG1hcnNoYWxsSlNSZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlLCBjb25zdCBDYWxsSW5mb3JtYXRpb24mIHdhc21GcmFtZUNvbnZlbnRpb24sIGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBzYXZlZFJlc3VsdFJlZ2lzdGVycykKK3ZvaWQgbWFyc2hh
bGxKU1Jlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgVHlwZURlZmluaXRpb24mIHR5cGVE
ZWZpbml0aW9uLCBjb25zdCBDYWxsSW5mb3JtYXRpb24mIHdhc21GcmFtZUNvbnZlbnRpb24sIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBzYXZlZFJlc3VsdFJlZ2lzdGVycykKIHsKKyAgICBj
b25zdCBhdXRvJiBzaWduYXR1cmUgPSAqdHlwZURlZmluaXRpb24uYXM8RnVuY3Rpb25TaWduYXR1
cmU+KCk7CiAgICAgYXV0byBib3hXYXNtUmVzdWx0ID0gW10oQ0NhbGxIZWxwZXJzJiBqaXQsIFR5
cGUgdHlwZSwgUmVnIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KSB7CiAgICAgICAgIHN3aXRjaCAodHlw
ZS5raW5kKSB7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CkBAIC0xNjQsMTIgKzE2NSwx
MiBAQCB2b2lkIG1hcnNoYWxsSlNSZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlLCBjb25zdCBDYWxsSQogICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29u
dGV4dEluc3RhbmNlKHdhc21Db250ZXh0SW5zdGFuY2VHUFIpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0Fy
cmF5KT4od2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KCZzaWduYXR1cmUpLCBpbmRleGluZ1R5cGUsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQWxs
b2NhdGVSZXN1bHRzQXJyYXkpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJnR5cGVEZWZpbml0aW9uKSwgaW5kZXhpbmdUeXBlLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgaml0LmNhbGxPcGVyYXRpb24oRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25BbGxvY2F0ZVJlc3VsdHNBcnJheSkp
OwogICAgIH0KIH0KIAotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpT
VG9XYXNtV3JhcHBlcihDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXgpCitzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3Jl
YXRlSlNUb1dhc21XcmFwcGVyKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBUeXBlRGVmaW5pdGlv
biYgdHlwZURlZmluaXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlN
b2RlIG1vZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgYXV0byByZXN1bHQgPSBt
YWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CiAgICAgaml0LmVtaXRGdW5jdGlvblByb2xv
Z3VlKCk7CkBAIC0xOTcsNyArMTk4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QKICAgICBy
ZXN1bHQtPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHJlZ2lzdGVyc1RvU3BpbGw7
CiAKICAgICBzaXplX3QgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAq
IHNpemVvZihDUFVSZWdpc3Rlcik7Ci0gICAgQ2FsbEluZm9ybWF0aW9uIHdhc21GcmFtZUNvbnZl
bnRpb24gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3Ioc2lnbmF0
dXJlKTsKKyAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUZyYW1lQ29udmVudGlvbiA9IHdhc21DYWxs
aW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcih0eXBlRGVmaW5pdGlvbik7CiAgICAg
UmVnaXN0ZXJBdE9mZnNldExpc3Qgc2F2ZWRSZXN1bHRSZWdpc3RlcnMgPSB3YXNtRnJhbWVDb252
ZW50aW9uLmNvbXB1dGVSZXN1bHRzT2Zmc2V0TGlzdCgpOwogICAgIHRvdGFsRnJhbWVTaXplICs9
IHdhc21GcmFtZUNvbnZlbnRpb24uaGVhZGVyQW5kQXJndW1lbnRTdGFja1NpemVJbkJ5dGVzOwog
ICAgIHRvdGFsRnJhbWVTaXplICs9IHNhdmVkUmVzdWx0UmVnaXN0ZXJzLnNpemUoKSAqIHNpemVv
ZihDUFVSZWdpc3Rlcik7CkBAIC0yMTgsNyArMjE5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QKICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9IHBpbm5lZFJlZ3Mud2FzbUNv
bnRleHRJbnN0YW5jZVBvaW50ZXI7CiAKICAgICB7Ci0gICAgICAgIENhbGxJbmZvcm1hdGlvbiBq
c0ZyYW1lQ29udmVudGlvbiA9IGpzQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25G
b3Ioc2lnbmF0dXJlLCBDYWxsUm9sZTo6Q2FsbGVlKTsKKyAgICAgICAgQ2FsbEluZm9ybWF0aW9u
IGpzRnJhbWVDb252ZW50aW9uID0ganNDYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlv
bkZvcih0eXBlRGVmaW5pdGlvbiwgQ2FsbFJvbGU6OkNhbGxlZSk7CiAKICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgMCk7CiAKQEAgLTIzMSwxMCArMjMyLDEx
IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0CiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZkluc3RhbmNlKCkpLCB3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAg
ICAgICAgfQogCisgICAgICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9ICp0eXBlRGVmaW5pdGlv
bi5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgewogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoanNGcmFtZUNvbnZlbnRpb24ucGFyYW1zW2ldLmlzU3RhY2soKSk7CiAKLSAgICAg
ICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgICAgIFR5
cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSk7CiAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MganNQYXJhbShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNGcmFt
ZUNvbnZlbnRpb24ucGFyYW1zW2ldLm9mZnNldEZyb21GUCgpKTsKICAgICAgICAgICAgIGlmICh3
YXNtRnJhbWVDb252ZW50aW9uLnBhcmFtc1tpXS5pc1N0YWNrQXJndW1lbnQoKSkgewogICAgICAg
ICAgICAgICAgIGlmICh0eXBlLmlzSTMyKCkgfHwgdHlwZS5pc0YzMigpKSB7CkBAIC0yODIsNyAr
Mjg0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNt
V3JhcHBlcihDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QKICAgICAgICAgdW5saW5rZWRXYXNtVG9X
YXNtQ2FsbHMtPmFwcGVuZCh7IGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsPFdhc21FbnRy
eVB0clRhZz4oY2FsbCksIGZ1bmN0aW9uSW5kZXhTcGFjZSB9KTsKICAgICB9KTsKIAotICAgIG1h
cnNoYWxsSlNSZXN1bHQoaml0LCBzaWduYXR1cmUsIHdhc21GcmFtZUNvbnZlbnRpb24sIHNhdmVk
UmVzdWx0UmVnaXN0ZXJzKTsKKyAgICBtYXJzaGFsbEpTUmVzdWx0KGppdCwgdHlwZURlZmluaXRp
b24sIHdhc21GcmFtZUNvbnZlbnRpb24sIHNhdmVkUmVzdWx0UmVnaXN0ZXJzKTsKIAogICAgIGZv
ciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxs
KSB7CiAgICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCmluZGV4IGVkNjRlYzlkMDEwMDViNDVk
NzAzYTYwMTVhYmU4NzVmNDU3MzlhNDkuLjZjNmViMmM0MTI0N2IwNTQxYjJkZjczMGI4MGQ4YmVl
YmY1NDM5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9X
YXNtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaApAQCAt
MzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVt
b3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCi0jaW5jbHVkZSAiV2Fz
bVNpZ25hdHVyZS5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDMsOCArNDMsOCBAQCBuYW1l
c3BhY2UgV2FzbSB7CiAKIHN0cnVjdCBDYWxsSW5mb3JtYXRpb247CiAKLXZvaWQgbWFyc2hhbGxK
U1Jlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU2lnbmF0dXJlJiwgY29uc3QgQ2FsbElu
Zm9ybWF0aW9uJiB3YXNtRnJhbWVDb252ZW50aW9uLCBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlz
dCYgc2F2ZWRSZXN1bHRSZWdpc3RlcnMpOwotc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDQ2FsbEhlbHBlcnMmLCBjb25zdCBTaWduYXR1cmUm
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwordm9pZCBtYXJzaGFsbEpT
UmVzdWx0KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIGNvbnN0IENh
bGxJbmZvcm1hdGlvbiYgd2FzbUZyYW1lQ29udmVudGlvbiwgY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dExpc3QmIHNhdmVkUmVzdWx0UmVnaXN0ZXJzKTsKK3N0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiwgY29uc3QgVHlwZURl
ZmluaXRpb24mLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCmluZGV4IDAyZjhiYjBkOGNj
NWQ4NDZhYWFlMGQxOTFiM2EzNTAxNDI4NWNlYmQuLjI2YTc3ZTU2ODE1ZjhhZjRkMjgxZmMyNWUw
NWZmZjgyMzVjNmIyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlFeGNlcHRpb24uY3BwCkBAIC01OCw5ICs1OCw5IEBAIHZvaWQg
SlNXZWJBc3NlbWJseUV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBW
aXNpdG9yJiB2aXNpdG9yKQogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7
CiAKICAgICBhdXRvKiBleGNlcHRpb24gPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUV4Y2VwdGlvbio+
KGNlbGwpOwotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gZXhjZXB0aW9u
LT50YWcoKS5zaWduYXR1cmUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpc1JlZlR5cGUoc2lnbmF0
dXJlLmFyZ3VtZW50KGkpKSkKKyAgICBjb25zdCBhdXRvJiB0YWdUeXBlID0gZXhjZXB0aW9uLT50
YWcoKS50eXBlKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhZ1R5cGUuYXJndW1l
bnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGlzUmVmVHlwZSh0YWdUeXBlLmFyZ3VtZW50
VHlwZShpKSkpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZChiaXR3aXNlX2Nhc3Q8V3JpdGVC
YXJyaWVyPFVua25vd24+PihleGNlcHRpb24tPnBheWxvYWQoKVtpXSkpOwogICAgIH0KIH0KQEAg
LTc0LDkgKzc0LDggQEAgdm9pZCBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKIAogSlNWYWx1ZSBKU1dlYkFzc2VtYmx5RXhjZXB0aW9uOjpnZXRBcmcoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaSkgY29uc3QKIHsKLSAgICBjb25zdCBX
YXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IHRhZygpLnNpZ25hdHVyZSgpOwotICAgIEFTU0VS
VChpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgcmV0dXJuIHRvSlNWYWx1ZShn
bG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudChpKSwgcGF5bG9hZCgpW2ldKTsKKyAgICBB
U1NFUlQoaSA8IHRhZygpLnR5cGUoKS5hcmd1bWVudENvdW50KCkpOworICAgIHJldHVybiB0b0pT
VmFsdWUoZ2xvYmFsT2JqZWN0LCB0YWcoKS50eXBlKCkuYXJndW1lbnRUeXBlKGkpLCBwYXlsb2Fk
KClbaV0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAKaW5kZXggYjg1MmI3MWNj
YmZkZjVkZWZiZWNiMWVmMmFiZmUwNjAzNGQ5NTdhMC4uYjVlYjBlMjMwYzE2Mzg5MjliMjZlYzIy
NmM2NDEyMDI4ZWVjZmU1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUdsb2JhbC5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgSlNPYmplY3Qq
IEpTV2ViQXNzZW1ibHlHbG9iYWw6OnR5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCksIDIpOwogCi0gICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtdXRhYmxlIl9zKSwganNC
b29sZWFuKG1fZ2xvYmFsLT5tdXRhYmlsaXR5KCkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246
Ok11dGFibGUpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgIm11dGFibGUiX3MpLCBqc0Jvb2xlYW4obV9nbG9iYWwtPm11dGFiaWxpdHkoKSA9
PSBXYXNtOjpNdXRhYmxlKSk7CiAKICAgICBXYXNtOjpUeXBlIHZhbHVlVHlwZSA9IG1fZ2xvYmFs
LT50eXBlKCk7CiAgICAgSlNTdHJpbmcqIHZhbHVlU3RyaW5nID0gbnVsbHB0cjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCmlu
ZGV4IDg3ZTUwYjQ1MzVmZTQ1MTNjODJkYmFkN2YxMzNmMjBmZGU4MDAyOWEuLmIwYmUyZGVhOWU4
MjA3NTliNThkYWE5ZGUzOTY0NGQ1MzIyMzRjMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaApAQCAtMTk4LDggKzE5OCw4
IEBAIEFMV0FZU19JTkxJTkUgdWludDY0X3QgZnJvbUpTVmFsdWUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgV2FzbTo6VHlwCiAgICAgICAgICAgICBpZiAoIWlzV2ViQXNzZW1i
bHlIb3N0RnVuY3Rpb24odm0sIHZhbHVlLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rp
b24pICYmICghdHlwZS5pc051bGxhYmxlKCkgfHwgIXZhbHVlLmlzTnVsbCgpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTUV4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKGdsb2JhbE9iamVjdCwgdm0sICJGdW5jcmVmIG11
c3QgYmUgYW4gZXhwb3J0ZWQgd2FzbSBmdW5jdGlvbiJfcykpOwogICAgICAgICAgICAgaWYgKGlz
UmVmV2l0aFR5cGVJbmRleCh0eXBlKSAmJiAhdmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
ICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBwYXJhbUluZGV4ID0gdHlwZS5pbmRleDsKLSAgICAg
ICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBhcmdJbmRleCA9IHdhc21GdW5jdGlvbiA/
IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKSA6IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNp
Z25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IHBhcmFtSW5k
ZXggPSB0eXBlLmluZGV4OworICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBhcmdJbmRl
eCA9IHdhc21GdW5jdGlvbiA/IHdhc21GdW5jdGlvbi0+dHlwZUluZGV4KCkgOiB3YXNtV3JhcHBl
ckZ1bmN0aW9uLT50eXBlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBpZiAocGFyYW1JbmRleCAh
PSBhcmdJbmRleCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24o
Z2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9i
YWxPYmplY3QsIHZtLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUgcmVmZXJl
bmNlIHR5cGUiX3MpKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKaW5kZXggYmM0NGExMmE2ZTAw
MzczMzYyODcwYzMzNzg4MWQzYTlmMmUxMGI5OC4uNzJjNmM0ZDI5MjUwOGM0YmM4ZmIyYWQ4Zjkz
MmU4MjgzMDRmMDFhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHZvaWQgSlNXZWJBc3NlbWJs
eU1vZHVsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJB
c3NlbWJseU1vZHVsZSo+KGNlbGwpLT5KU1dlYkFzc2VtYmx5TW9kdWxlOjp+SlNXZWJBc3NlbWJs
eU1vZHVsZSgpOwotICAgIFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKCk7
CisgICAgV2FzbTo6VHlwZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKCk7CiB9CiAKIGNvbnN0IFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uJiBKU1dlYkFzc2VtYmx5TW9kdWxlOjptb2R1bGVJbmZvcm1h
dGlvbigpIGNvbnN0CkBAIC0xMTMsOSArMTEzLDkgQEAgU3ltYm9sVGFibGUqIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmV4cG9ydFN5bWJvbFRhYmxlKCkgY29uc3QKICAgICByZXR1cm4gbV9leHBvcnRT
eW1ib2xUYWJsZS5nZXQoKTsKIH0KIAotV2FzbTo6U2lnbmF0dXJlSW5kZXggSlNXZWJBc3NlbWJs
eU1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKK1dhc206OlR5cGVJbmRleCBKU1dlYkFzc2VtYmx5TW9k
dWxlOjp0eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5k
ZXhTcGFjZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpOworICAgIHJldHVybiBtX21v
ZHVsZS0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2Up
OwogfQogCiBXYXNtOjpNb2R1bGUmIEpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZSgpCkBAIC0x
NTQsOCArMTU0LDggQEAgRXhwZWN0ZWQ8dm9pZCwgV2FzbTo6QmluZGluZ0ZhaWx1cmU+IEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmdlbmVyYXRlV2FzbVRvSlNTdHVicygKICAgICAgICAgQmFnPE9wdGlt
aXppbmdDYWxsTGlua0luZm8+IGNhbGxMaW5rSW5mb3M7CiAgICAgICAgIEZpeGVkVmVjdG9yPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+PiBzdHVicyhtb2R1bGVJbmZvcm1h
dGlvbi5pbXBvcnRGdW5jdGlvbkNvdW50KCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGltcG9y
dEluZGV4ID0gMDsgaW1wb3J0SW5kZXggPCBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlv
bkNvdW50KCk7ICsraW1wb3J0SW5kZXgpIHsKLSAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25TaWdu
YXR1cmVJbmRpY2VzLmF0KGltcG9ydEluZGV4KTsKLSAgICAgICAgICAgIGF1dG8gYmluZGluZyA9
IFdhc206Ondhc21Ub0pTKHZtLCBjYWxsTGlua0luZm9zLCBzaWduYXR1cmVJbmRleCwgaW1wb3J0
SW5kZXgpOworICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IHR5cGVJbmRleCA9IG1vZHVsZUlu
Zm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uVHlwZUluZGljZXMuYXQoaW1wb3J0SW5kZXgpOworICAg
ICAgICAgICAgYXV0byBiaW5kaW5nID0gV2FzbTo6d2FzbVRvSlModm0sIGNhbGxMaW5rSW5mb3Ms
IHR5cGVJbmRleCwgaW1wb3J0SW5kZXgpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFiaW5k
aW5nKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoYmluZGluZy5lcnJv
cigpKTsKICAgICAgICAgICAgIHN0dWJzW2ltcG9ydEluZGV4XSA9IGJpbmRpbmcudmFsdWUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuaAppbmRleCBiZDUxYWJlYWIwYjFkNTEyNjEwZWExODIxZTIzMWMxOTk3NTY3ODY3Li4xNjhi
YjljMThmYjQ4NDIyNDJjNDE3ZmM0MjRmZDY3MzNkZTI0NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCkBAIC03MCw3ICs3
MCw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1
bGVJbmZvcm1hdGlvbigpIGNvbnN0OwogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJs
ZSgpIGNvbnN0OwotICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OworICAg
IFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3Q7CiAKICAgICBFeHBlY3RlZDx2b2lkLCBXYXNtOjpC
aW5kaW5nRmFpbHVyZT4gZ2VuZXJhdGVXYXNtVG9KU1N0dWJzKFZNJik7CiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gd2FzbVRvRW1iZWRkZXJTdHViKHNpemVfdCBp
bXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gbV93YXNtVG9KU0V4aXRTdHVic1tpbXBvcnRGdW5j
dGlvbk51bV0uY29kZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFnLmgKaW5kZXggZGM0YzBmMjZmNzNjNDcxZWRhYzlhMDI1YTZlYTYxZDUy
Y2I1NTYzMS4uNDkyNTA3MjRhNmMxMGFiMWU4YjAyYjYyMWJlYzFiMzc5OTYzOWNlMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWcuaApAQCAt
NTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIGNvbnN0IFdhc206OlRh
ZyYgdGFnKCkgY29uc3QgeyByZXR1cm4gbV90YWc7IH0KLSAgICBjb25zdCBXYXNtOjpTaWduYXR1
cmUmIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIHRhZygpLnNpZ25hdHVyZSgpOyB9CisgICAg
Y29uc3QgV2FzbTo6RnVuY3Rpb25TaWduYXR1cmUmIHR5cGUoKSBjb25zdCB7IHJldHVybiB0YWco
KS50eXBlKCk7IH0KIAogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5VGFnKFZNJiwgU3RydWN0
dXJlKiwgY29uc3QgV2FzbTo6VGFnJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5jcHAKaW5kZXggN2IwMTQ4YjkxZGM1ODQwNzk5ZTBiZTU1ZGVlMWIzYWE3OTI3NTRj
Zi4uMmJlMGYzY2ZlYmY3NmQ1ZWU1NTNmNmU2NjRlOGFjMWFhZjVjZDBlMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtMzcsNyArMzcsNyBAQAogI2lu
Y2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiV2FzbU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5l
cy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKICNpbmNsdWRlIDx3
dGYvRnVuY3Rpb25UcmFpdHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsK
QEAgLTUxLDE3ICs1MSwxOCBAQCBzdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChK
SVQmIGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bAogICAgIGppdC5sb2Fk
UHRyKEpJVDo6QWRkcmVzcyhyZXN1bHQsIEluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9u
KGltcG9ydEluZGV4KSksIHJlc3VsdCk7CiB9CiAKLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZtLCBC
YWc8T3B0aW1pemluZ0NhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKK0V4cGVjdGVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMo
Vk0mIHZtLCBCYWc8T3B0aW1pemluZ0NhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFR5cGVJ
bmRleCB0eXBlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KQogewogICAgIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcHJvcGVybHkgYWJzdHJhY3QgYXdheSB0aGUgY2FsbGluZyBj
b252ZW50aW9uLgogICAgIC8vIEl0J2QgYmUgc3VwZXIgZWFzeSB0byBkbyBzbzogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTQwMQogICAgIGNvbnN0IGF1dG8mIHdh
c21DQyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpOwogICAgIGNvbnN0IGF1dG8mIGpzQ0MgPSBq
c0NhbGxpbmdDb252ZW50aW9uKCk7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICBjb25zdCBUeXBl
RGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24gPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBlSW5k
ZXgpOworICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9ICp0eXBlRGVmaW5pdGlvbi5hczxGdW5j
dGlvblNpZ25hdHVyZT4oKTsKICAgICB1bnNpZ25lZCBhcmdDb3VudCA9IHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCk7CiAgICAgSklUIGppdDsKIAotICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtQ2Fs
bEluZm8gPSB3YXNtQ0MuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSwgQ2FsbFJvbGU6OkNh
bGxlZSk7CisgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DQy5jYWxsSW5m
b3JtYXRpb25Gb3IodHlwZURlZmluaXRpb24sIENhbGxSb2xlOjpDYWxsZWUpOwogICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0IHNhdmVkUmVzdWx0UmVnaXN0ZXJzID0gd2FzbUNhbGxJbmZvLmNvbXB1
dGVSZXN1bHRzT2Zmc2V0TGlzdCgpOwogCiAgICAgLy8gTm90ZTogV2FzbUIzSVJHZW5lcmF0b3Ig
YXNzdW1lcyB0aGF0IHRoaXMgc3R1YiB0cmVhdHMgU1AgYXMgYSBjYWxsZWUgc2F2ZS4KQEAgLTkx
LDcgKzkyLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRh
Zz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICBqaXQuc3ViUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxlcjo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxs
SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogCi0gICAg
Ly8gRklYTUUgbWFrZSB0aGVzZSBsb29wcyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0dXJlIGlmIHRo
ZXJlIGFyZSBtYW55IGFyZ3VtZW50cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBo
dWdlIGZvciBodWdlIHNpZ25hdHVyZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjU1NDcKKyAgICAvLyBGSVhNRSBtYWtlIHRoZXNlIGxvb3BzIHdoaWNoIHN3aXRj
aCBvbiBzaWduYXR1cmUgaWYgdGhlcmUgYXJlIG1hbnkgYXJndW1lbnRzIG9uIHRoZSBzdGFjay4g
SXQnbGwgb3RoZXJ3aXNlIGJlIGh1Z2UgZm9yIGh1Z2UgdHlwZSBkZWZpbml0aW9ucy4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTU0NwogCiAgICAgLy8gRmlyc3Qg
Z28gdGhyb3VnaCB0aGUgaW50ZWdlciBwYXJhbWV0ZXJzLCBmcmVlaW5nIHVwIHRoZWlyIHJlZ2lz
dGVyIGZvciB1c2UgYWZ0ZXJ3YXJkcy4KICAgICB7CkBAIC0xMDAsMTAgKzEwMSwxMSBAQCBFeHBl
Y3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1
cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9
IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpOwogICAgICAgICB1bnNpZ25lZCBmck9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZp
cnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkg
ewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7
CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRUeXBlKGFyZ051
bSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUua2luZCkgewogICAgICAgICAgICAgY2Fz
ZSBUeXBlS2luZDo6Vm9pZDoKICAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAg
ICAgICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6CiAgICAgICAgICAgICBjYXNlIFR5cGVLaW5k
OjpSZWZOdWxsOgogICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6UmVmOgogICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCkBAIC0x
NzQsMTAgKzE3NiwxMSBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5
UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICB9OwogCiAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJn
TnVtKSB7Ci0gICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoYXJn
TnVtKTsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudFR5cGUo
YXJnTnVtKTsKICAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZS5raW5kKSB7CiAgICAgICAgICAg
ICBjYXNlIFR5cGVLaW5kOjpWb2lkOgogICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6RnVuYzoK
KyAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAgICAgIGNhc2UgVHlw
ZUtpbmQ6OlJlZk51bGw6CiAgICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpSZWY6CiAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4K
QEAgLTIzMCw3ICsyMzMsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVu
dHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICAvLyBX
ZSBjYWxsIGZ1bmN0aW9ucyB0byBjb252ZXJ0IEk2NCB0byBCaWdJbnQuCiAgICAgICAgIHVuc2ln
bmVkIGNhbGxlZUZyYW1lT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
YXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgICAgICBp
ZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGFyZ051bSkuaXNJNjQoKSkgeworICAgICAgICAgICAgaWYg
KHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoYXJnTnVtKS5pc0k2NCgpKSB7CiAgICAgICAgICAgICAg
ICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAg
ICAgICAgICAgICAgICAgaml0LmxvYWQ2NChjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KGNhbGxlZUZy
YW1lT2Zmc2V0KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICAgICAgICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ29udmVydFRvQmlnSW50KT4oR1BSSW5m
bzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwpAQCAtMzgxLDcgKzM4NCw3
IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5k
aW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZtCiAgICAgICAgICAgICBpZiAoV2FzbTo6aXNGdW5j
cmVmKHJldHVyblR5cGUpIHx8IFdhc206OmlzRXh0ZXJucmVmKHJldHVyblR5cGUpKQogICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCB3YXNtQ2FsbEluZm8u
cmVzdWx0c1swXS5ncHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgLy8g
Rm9yIHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRoIHRoZXNlIHR5cGVzIGlu
IHRoZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIHZhbGlkYXRp
b24gZXJyb3IuCisgICAgICAgICAgICAgICAgLy8gRm9yIHRoZSBKYXZhU2NyaXB0IGVtYmVkZGlu
ZywgaW1wb3J0cyB3aXRoIHRoZXNlIHR5cGVzIGluIHRoZWlyIHR5cGUgZGVmaW5pdGlvbiByZXR1
cm4gYXJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIHZhbGlkYXRpb24gZXJyb3IuCiAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgICAgICB9
CkBAIC0zOTMsNyArMzk2LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21F
bnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAg
IGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZSh3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25J
dGVyYXRlUmVzdWx0cyk+KHdhc21Db250ZXh0SW5zdGFuY2VHUFIsICZzaWduYXR1cmUsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBD
Q2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRzKT4od2FzbUNvbnRleHRJbnN0
YW5jZUdQUiwgJnR5cGVEZWZpbml0aW9uLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgICAgIGppdC5jYWxsT3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpKTsKICAgICAgICAgZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaAppbmRleCAxOTdiODA3ZjFiNTMyNWFiMjlmMGQ1OTYw
ZDk0MjcxMDJiMTkyM2M2Li5iZDUyYWY4Y2Q4ZTQ5ZjI2OTZhYTVlZTViMTA0MzBlOWE0YjQxZGNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKQEAgLTQyLDcgKzQy
LDcgQEAgbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBJbnN0YW5jZTsKIAotRXhwZWN0ZWQ8TWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNt
VG9KUyhWTSYsIEJhZzxPcHRpbWl6aW5nQ2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2ln
bmF0dXJlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKK0V4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0m
LCBCYWc8T3B0aW1pemluZ0NhbGxMaW5rSW5mbz4mIGNhbGxMaW5rSW5mb3MsIFR5cGVJbmRleCwg
dW5zaWduZWQgaW1wb3J0SW5kZXgpOwogCiB2b2lkIGVtaXRUaHJvd1dhc21Ub0pTRXhjZXB0aW9u
KENDYWxsSGVscGVycyYsIEdQUlJlZyB3YXNtSW5zdGFuY2UsIFdhc206OkV4Y2VwdGlvblR5cGUp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCmluZGV4IGY0YjFlMjNmOWNiOThi
MjUwODFhNjUwMGUxMDMyNDMxMzI5ZTRiN2QuLjc3YjI2YzEyNmY3YWViOTEwNjI0NDE4N2YxODU0
YmM3MWQyMDhjZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwCkBAIC02Niwx
MyArNjYsMTQgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2ViQXNzZW1i
bHlFeGNlcHRpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmEKICAgICB9KTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gdGFn
LT5zaWduYXR1cmUoKS5hcmd1bWVudENvdW50KCkpCisgICAgY29uc3QgYXV0byYgdGFnRnVuY3Rp
b25UeXBlID0gdGFnLT50eXBlKCk7CisgICAgaWYgKHZhbHVlcy5zaXplKCkgIT0gdGFnRnVuY3Rp
b25UeXBlLmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgIldlYkFzc2VtYmx5LkV4Y2VwdGlvbiBjb25zdHJ1Y3RvciBl
eHBlY3RzIHRoZSBudW1iZXIgb2YgcGFyZW1ldGVycyBpbiBXZWJBc3NlbWJseS5UYWcgdG8gbWF0
Y2ggdGhlIHRhZ3MgcGFyYW1ldGVyIGNvdW50LiJfcyk7CiAKICAgICAvLyBBbnkgR0MnZCB2YWx1
ZXMgaW4gaGVyZSB3aWxsIGJlIG1hcmtlZCBieSB0aGUgTWFya2VkQXJ1Z2VtZW50QnVmZmVyIHVu
dGlsIHN0b3JlZCBpbiB0aGUgRXhjZXB0aW9uLgogICAgIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiBw
YXlsb2FkKHZhbHVlcy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgcGF5bG9hZFtpXSA9IGZyb21KU1ZhbHVlKGdsb2Jh
bE9iamVjdCwgdGFnLT5zaWduYXR1cmUoKS5hcmd1bWVudChpKSwgdmFsdWVzLmF0KGkpKTsKKyAg
ICAgICAgcGF5bG9hZFtpXSA9IGZyb21KU1ZhbHVlKGdsb2JhbE9iamVjdCwgdGFnRnVuY3Rpb25U
eXBlLmFyZ3VtZW50VHlwZShpKSwgdmFsdWVzLmF0KGkpKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKaW5kZXggODg5MTIwN2RjMTIw
M2I1MTkxMzY0MTVmZDQwMzhjNWY3M2I5MGM5My4uYzRkMmI5NmMyOTMwNzE1NTFmOTZiOGZhNGRj
ZWFmNTA5NWEwOWI5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVk
ZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL1N0YWNrUG9pbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFjaW5nLmg+CiAKQEAg
LTYzLDggKzYzLDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1
bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzQ2FzdDxXZWJBc3Nl
bWJseUZ1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKLSAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsK
LSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIFdhc206OlR5cGVJbmRleCB0eXBl
SW5kZXggPSB3YXNtRnVuY3Rpb24tPnR5cGVJbmRleCgpOworICAgIGNvbnN0IFdhc206OkZ1bmN0
aW9uU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpUeXBlSW5mb3JtYXRpb246OmdldEZ1bmN0
aW9uU2lnbmF0dXJlKHR5cGVJbmRleCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgbWVt
b3J5IHdlIHRoaW5rIHdlIGFyZSBnb2luZyB0byBydW4gd2l0aCBtYXRjaGVzIHRoZSBvbmUgd2Ug
ZXhwZWN0LgogICAgIEFTU0VSVCh3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCku
Y2FsbGVlR3JvdXAoKS0+aXNTYWZlVG9SdW4od2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5tZW1v
cnkoKS0+bWVtb3J5KCkubW9kZSgpKSk7CkBAIC03OCw3ICs3OCw3IEBAIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsCiAgICAgV2FzbTo6SW5zdGFuY2UqIHdhc21JbnN0YW5jZSA9ICZpbnN0YW5jZS0+
aW5zdGFuY2UoKTsKIAogICAgIGZvciAodW5zaWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsrYXJnSW5kZXgpIHsKLSAgICAgICAgdWludDY0
X3QgdmFsdWUgPSBmcm9tSlNWYWx1ZShnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudChh
cmdJbmRleCksIGNhbGxGcmFtZS0+YXJndW1lbnQoYXJnSW5kZXgpKTsKKyAgICAgICAgdWludDY0
X3QgdmFsdWUgPSBmcm9tSlNWYWx1ZShnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS5hcmd1bWVudFR5
cGUoYXJnSW5kZXgpLCBjYWxsRnJhbWUtPmFyZ3VtZW50KGFyZ0luZGV4KSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBib3hl
ZEFyZ3MuYXBwZW5kKEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogICAgIH0KQEAgLTEzMiw3ICsx
MzIsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24s
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogCiBib29sIFdlYkFzc2VtYmx5RnVuY3Rp
b246OnVzZXNUYWdSZWdpc3RlcnMoKSBjb25zdAogewotICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVy
ZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgoKSk7Cisg
ICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpnZXRGdW5j
dGlvblNpZ25hdHVyZSh0eXBlSW5kZXgoKSk7CiAgICAgcmV0dXJuIHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCkgfHwgIXNpZ25hdHVyZS5yZXR1cm5zVm9pZCgpOwogfQogCkBAIC0xODEsMTUgKzE4
MSwxNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlG
dW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7
CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAotICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IFdh
c206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgoKSk7CisgICAgY29u
c3QgYXV0byYgdHlwZURlZmluaXRpb24gPSBXYXNtOjpUeXBlSW5mb3JtYXRpb246OmdldCh0eXBl
SW5kZXgoKSk7CisgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gKnR5cGVEZWZpbml0aW9uLmFz
PFdhc206OkZ1bmN0aW9uU2lnbmF0dXJlPigpOwogICAgIGNvbnN0IGF1dG8mIHBpbm5lZFJlZ3Mg
PSBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwogICAgIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0IHJlZ2lzdGVyc1RvU3BpbGwgPSB1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAgICAg
YXV0byYgbW9kdWxlSW5mb3JtYXRpb24gPSBpbnN0YW5jZSgpLT5pbnN0YW5jZSgpLm1vZHVsZSgp
Lm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAgICBjb25zdCBXYXNtOjpXYXNtQ2FsbGluZ0NvbnZl
bnRpb24mIHdhc21DQyA9IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpOwotICAgIFdhc206
OkNhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ0MuY2FsbEluZm9ybWF0aW9uRm9y
KHNpZ25hdHVyZSk7Ci0gICAgV2FzbTo6Q2FsbEluZm9ybWF0aW9uIGpzQ2FsbEluZm8gPSBXYXNt
Ojpqc0NhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSwgV2Fz
bTo6Q2FsbFJvbGU6OkNhbGxlZSk7CisgICAgV2FzbTo6Q2FsbEluZm9ybWF0aW9uIHdhc21DYWxs
SW5mbyA9IHdhc21DQy5jYWxsSW5mb3JtYXRpb25Gb3IodHlwZURlZmluaXRpb24pOworICAgIFdh
c206OkNhbGxJbmZvcm1hdGlvbiBqc0NhbGxJbmZvID0gV2FzbTo6anNDYWxsaW5nQ29udmVudGlv
bigpLmNhbGxJbmZvcm1hdGlvbkZvcih0eXBlRGVmaW5pdGlvbiwgV2FzbTo6Q2FsbFJvbGU6OkNh
bGxlZSk7CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qgc2F2ZWRSZXN1bHRSZWdpc3RlcnMgPSB3
YXNtQ2FsbEluZm8uY29tcHV0ZVJlc3VsdHNPZmZzZXRMaXN0KCk7CiAKICAgICB1bnNpZ25lZCB0
b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKENQVVJlZ2lz
dGVyKTsKQEAgLTI0Miw3ICsyNDMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MganNQYXJhbShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwganNDYWxsSW5mby5wYXJhbXNbaV0ub2Zmc2V0RnJvbUZQKCkpOwogICAgICAgICBib29sIGlz
U3RhY2sgPSB3YXNtQ2FsbEluZm8ucGFyYW1zW2ldLmlzU3RhY2tBcmd1bWVudCgpOwogCi0gICAg
ICAgIGF1dG8gdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgYXV0byB0eXBl
ID0gc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKTsKICAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQp
IHsKICAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOiB7CiAgICAgICAgICAgICBqaXQu
bG9hZDY0KGpzUGFyYW0sIHNjcmF0Y2hHUFIpOwpAQCAtMzA1LDcgKzMwNiw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxF
bnRyeXBvaW50U2xvdygpCiAgICAgICAgICAgICAgICAgc2NyYXRjaEZQUiA9IHdhc21DYWxsSW5m
by5wYXJhbXNbaV0uZnByKCk7CiAgICAgICAgICAgICBhdXRvIG1vdmVUb0Rlc3RpbmF0aW9uID0g
WyZdICgpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNTdGFjaykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLmlzRjMyKCkpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLmlzRjMyKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQuc3RvcmVGbG9hdChzY3JhdGNoRlBSLCBjYWxsZWVGcmFtZS53aXRoT2Zm
c2V0KHdhc21DYWxsSW5mby5wYXJhbXNbaV0ub2Zmc2V0RnJvbVNQKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlRG91YmxlKHNj
cmF0Y2hGUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbUNhbGxJbmZvLnBhcmFtc1tpXS5v
ZmZzZXRGcm9tU1AoKSkpOwpAQCAtMzE3LDEzICszMTgsMTMgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRT
bG93KCkKICAgICAgICAgICAgIGF1dG8gaXNJbnQzMiA9IGppdC5icmFuY2hJZkludDMyKHNjcmF0
Y2hHUFIpOwogCiAgICAgICAgICAgICBqaXQudW5ib3hEb3VibGUoc2NyYXRjaEdQUiwgc2NyYXRj
aEdQUiwgc2NyYXRjaEZQUik7Ci0gICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkp
LmlzRjMyKCkpCisgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKS5pc0Yz
MigpKQogICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChzY3JhdGNoRlBS
LCBzY3JhdGNoRlBSKTsKICAgICAgICAgICAgIG1vdmVUb0Rlc3RpbmF0aW9uKCk7CiAgICAgICAg
ICAgICBhdXRvIGRvbmUgPSBqaXQuanVtcCgpOwogCiAgICAgICAgICAgICBpc0ludDMyLmxpbmso
JmppdCk7Ci0gICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLmlzRjMyKCkpIHsK
KyAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLmlzRjMyKCkpIHsKICAg
ICAgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9GbG9hdChzY3JhdGNoR1BSLCBzY3JhdGNo
RlBSKTsKICAgICAgICAgICAgICAgICBtb3ZlVG9EZXN0aW5hdGlvbigpOwogICAgICAgICAgICAg
fSBlbHNlIHsKQEAgLTM5Miw3ICszOTMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRy
eVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAg
IGppdC5sb2FkUHRyKGVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSwgc2NyYXRjaEdQUik7CiAgICAg
aml0LmNhbGwoc2NyYXRjaEdQUiwgV2FzbUVudHJ5UHRyVGFnKTsKIAotICAgIG1hcnNoYWxsSlNS
ZXN1bHQoaml0LCBzaWduYXR1cmUsIHdhc21DYWxsSW5mbywgc2F2ZWRSZXN1bHRSZWdpc3RlcnMp
OworICAgIG1hcnNoYWxsSlNSZXN1bHQoaml0LCB0eXBlRGVmaW5pdGlvbiwgd2FzbUNhbGxJbmZv
LCBzYXZlZFJlc3VsdFJlZ2lzdGVycyk7CiAKICAgICBBU1NFUlQoIVJlZ2lzdGVyU2V0OjpydW50
aW1lVGFnUmVnaXN0ZXJzKCkuY29udGFpbnMoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKSk7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKQEAgLTQzMywxMCArNDM0LDEwIEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBv
aW50U2xvdygpCiAgICAgcmV0dXJuIG1fanNDYWxsRW50cnlwb2ludC5jb2RlKCk7CiB9CiAKLVdl
YkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25l
ZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlv
biwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3NlbWJseUZ1bmN0
aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNh
bGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpM
b2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlR5cGVJ
bmRleCB0eXBlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZt
LmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgV2FzbUZ1bmN0aW9uSW50
cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0g
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2bSkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGV4
ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dh
c21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CisgICAgV2ViQXNzZW1i
bHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3Nl
bWJseUZ1bmN0aW9uPih2bSkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50
TG9hZExvY2F0aW9uLCB0eXBlSW5kZXgpOwogICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2
bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSk7CiAgICAgcmV0dXJuIGZ1bmN0
aW9uOwogfQpAQCAtNDQ3LDggKzQ0OCw4IEBAIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlGdW5jdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKLSAgICA6IEJh
c2UgeyB2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24gfSB9CitXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1
bmN0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYganNF
bnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRp
b24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlR5cGVJbmRleCB0eXBl
SW5kZXgpCisgICAgOiBCYXNlIHsgdm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgdHlwZUluZGV4LCB3YXNt
VG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9IH0KICAgICAsIG1fanNFbnRyeXBvaW50IHsg
anNFbnRyeXBvaW50LmVudHJ5cG9pbnQoKSB9CiB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCmluZGV4IDdjZGYyZWZkOWM0
NGNhMmUwYmRmNTE5NDI4NWRhNDUwNTY1MGFiZjYuLjY2OGYxNTJlMWIyMWU4ODBhMjBhZDU1Yjgx
ZjAzYWE3YjcwYTZjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogCiAgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpD
YWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExv
Y2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSos
IFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9u
OjpMb2FkTG9jYXRpb24sIFdhc206OlR5cGVJbmRleCk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGpzRW50cnlwb2ludChBcml0eUNo
ZWNrTW9kZSBhcml0eSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IERFQ0xBUkVfVklTSVRfQ0hJTERSRU47Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIE5h
dGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxl
ZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRp
b24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206
OlR5cGVJbmRleCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
anNDYWxsRW50cnlwb2ludFNsb3coKTsKICAgICBwdHJkaWZmX3QgcHJldmlvdXNJbnN0YW5jZU9m
ZnNldCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKaW5kZXggYmE3Y2IxNzY1YTI2ZTBiZjNlYTA3ZmRi
YTg5OWY3MjFhYTg3NGQzYS4uMWI3NDYyMzgwMmNjNzQ4ZjM2MDYzMTNlN2FlMDNkZmNjZDM5NzRl
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZS5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlLmdl
dCgpOyB9CiAKLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4OyB9CisgICAgV2Fz
bTo6VHlwZUluZGV4IHR5cGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0
aW9uLnR5cGVJbmRleDsgfQogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRM
b2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRh
YmxlRnVuY3Rpb24uZW50cnlwb2ludExvYWRMb2NhdGlvbjsgfQogICAgIFdhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb24gaW1wb3J0YWJsZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pbXBv
cnRhYmxlRnVuY3Rpb247IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAppbmRleCAwZWU2
ODdhM2IxY2ViMWE1YjY0NDFkYzQyOTZjOGI2NDE2ZDEyZjhiLi5hODdhOTliNGJjZGRlNDI1ODUy
ZDc5NWY5MGMzMWY0ZThlYWIwYzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcApAQCAt
NjYsNyArNjYsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3Nl
bWJseUdsb2JhbCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBnbG9iYWxEZXNj
cmlwdG9yID0ganNDYXN0PEpTT2JqZWN0Kj4oYXJndW1lbnQpOwogICAgIH0KIAotICAgIFdhc206
Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5IG11dGFiaWxpdHk7CisgICAgV2FzbTo6TXV0
YWJpbGl0eSBtdXRhYmlsaXR5OwogICAgIHsKICAgICAgICAgSWRlbnRpZmllciBtdXRhYmxlSWRl
bnQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibXV0YWJsZSJfcyk7CiAgICAgICAgIEpT
VmFsdWUgbXV0YWJsZVZhbHVlID0gZ2xvYmFsRGVzY3JpcHRvci0+Z2V0KGdsb2JhbE9iamVjdCwg
bXV0YWJsZUlkZW50KTsKQEAgLTc0LDkgKzc0LDkgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlHbG9iYWwsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IK
ICAgICAgICAgYm9vbCBtdXRhYmxlQm9vbGVhbiA9IG11dGFibGVWYWx1ZS50b0Jvb2xlYW4oZ2xv
YmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgaWYgKG11dGFibGVCb29sZWFuKQotICAgICAgICAgICAg
bXV0YWJpbGl0eSA9IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmxlOworICAgICAgICAg
ICAgbXV0YWJpbGl0eSA9IFdhc206Ok11dGFibGU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG11dGFiaWxpdHkgPSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6SW1tdXRhYmxlOworICAgICAg
ICAgICAgbXV0YWJpbGl0eSA9IFdhc206OkltbXV0YWJsZTsKICAgICB9CiAKICAgICBXYXNtOjpU
eXBlIHR5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUdsb2JhbFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5jcHAKaW5kZXggYTViZGY5YjYzNjAwNThlMjE0
NWZjMGEyOTdlNjFiODJlZmRjYjk3NC4uMDZhNDFiOTU5ZWExYjViYmNhNTkzZDE2YTJhNWM2MDBi
ZjYyMmNjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTih3ZWJBc3NlbWJseUdsb2JhbFByb3RvU2V0dGVyRnVuY1Zh
bHVlLCAoSlNHbG9iYWxPYmplY3QqCiAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCogZ2xvYmFsID0g
Z2V0R2xvYmFsKGdsb2JhbE9iamVjdCwgdm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAg
ICBpZiAoZ2xvYmFsLT5nbG9iYWwoKS0+bXV0YWJpbGl0eSgpID09IFdhc206Okdsb2JhbEluZm9y
bWF0aW9uOjpNdXRhYmlsaXR5OjpJbW11dGFibGUpCisgICAgaWYgKGdsb2JhbC0+Z2xvYmFsKCkt
Pm11dGFiaWxpdHkoKSA9PSBXYXNtOjpNdXRhYmlsaXR5OjpJbW11dGFibGUpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiV2ViQXNzZW1ibHkuR2xvYmFsLnBy
b3RvdHlwZS52YWx1ZSBhdHRlbXB0cyB0byBtb2RpZnkgaW1tdXRhYmxlIGdsb2JhbCB2YWx1ZSJf
cykpKTsKIAogICAgIGdsb2JhbC0+Z2xvYmFsKCktPnNldChnbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IDI1ZTA4OWZhMjA3MWIzZjQ3
ZjQ1OWVjNjM2ODE4ZWJkYjExM2E5OWMuLmE5MTU1YTFkOTcxNTMwMDU0ODdkNWM1YTlmZGU4Nzll
MTY1YThjZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRl
ICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVRhZy5oIgog
I2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTIwNywxOCAr
MjA3LDE4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJbXBvcnRz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgICAgICAgICBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKICAgICAgICAgICAgIGlmIChp
c1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCBmdW5jdGlvbiwgd2FzbUZ1bmN0aW9uLCB3YXNt
V3JhcHBlckZ1bmN0aW9uKSkgewogICAgICAgICAgICAgICAgIC8vIGEuIElmIHRoZSBzaWduYXR1
cmUgb2YgdiBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIGksIHRocm93IGEgV2ViQXNz
ZW1ibHkuTGlua0Vycm9yLgotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGlt
cG9ydGVkU2lnbmF0dXJlSW5kZXg7CisgICAgICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IGlt
cG9ydGVkVHlwZUluZGV4OwogICAgICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21GdW5jdGlvbi0+
c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRUeXBlSW5kZXgg
PSB3YXNtRnVuY3Rpb24tPnR5cGVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBjYWxsZWVJ
bnN0YW5jZSA9ICZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSB3YXNtRnVuY3Rpb24tPmVudHJ5
cG9pbnRMb2FkTG9jYXRpb24oKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+
c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRUeXBlSW5kZXgg
PSB3YXNtV3JhcHBlckZ1bmN0aW9uLT50eXBlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAg
Ly8gYi4gTGV0IGNsb3N1cmUgYmUgdi5bW0Nsb3N1cmVdXS4KICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gPSB3YXNtV3JhcHBlckZ1bmN0aW9uLT5mdW5jdGlvbigpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBleHBlY3RlZFNpZ25h
dHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2ltcG9ydC5raW5kSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChpbXBvcnRlZFNpZ25h
dHVyZUluZGV4ICE9IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpCisgICAgICAgICAgICAgICAgV2Fz
bTo6VHlwZUluZGV4IGV4cGVjdGVkVHlwZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0
RnVuY3Rpb25UeXBlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKKyAgICAgICAgICAgICAgICBp
ZiAoaW1wb3J0ZWRUeXBlSW5kZXggIT0gZXhwZWN0ZWRUeXBlSW5kZXgpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9i
YWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBvcnRlZCBmdW5jdGlv
biIsICJzaWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgcHJvdmlkZWQgV2ViQXNzZW1ibHkgZnVu
Y3Rpb24ncyBzaWduYXR1cmUiKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gaWlp
LiBPdGhlcndpc2U6CkBAIC0yMzcsMTIgKzIzNywxMiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjppbml0aWFsaXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
UwogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsS2luZDo6R2xvYmFsOiB7CiAgICAgICAgICAg
ICAvLyA1LiBJZiBpIGlzIGEgZ2xvYmFsIGltcG9ydDoKICAgICAgICAgICAgIGNvbnN0IFdhc206
Okdsb2JhbEluZm9ybWF0aW9uJiBnbG9iYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2lt
cG9ydC5raW5kSW5kZXhdOwotICAgICAgICAgICAgaWYgKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdh
c206Okdsb2JhbEluZm9ybWF0aW9uOjpJbW11dGFibGUpIHsKKyAgICAgICAgICAgIGlmIChnbG9i
YWwubXV0YWJpbGl0eSA9PSBXYXNtOjpJbW11dGFibGUpIHsKICAgICAgICAgICAgICAgICBpZiAo
dmFsdWUuaW5oZXJpdHM8SlNXZWJBc3NlbWJseUdsb2JhbD4odm0pKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwqIGdsb2JhbFZhbHVlID0ganNDYXN0PEpTV2ViQXNz
ZW1ibHlHbG9iYWwqPih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxWYWx1
ZS0+Z2xvYmFsKCktPnR5cGUoKSAhPSBnbG9iYWwudHlwZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxP
YmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBvcnRlZCBnbG9iYWwiLCAi
bXVzdCBiZSBhIHNhbWUgdHlwZSIpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxW
YWx1ZS0+Z2xvYmFsKCktPm11dGFiaWxpdHkoKSAhPSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6
SW1tdXRhYmxlKQorICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsVmFsdWUtPmdsb2JhbCgp
LT5tdXRhYmlsaXR5KCkgIT0gV2FzbTo6SW1tdXRhYmxlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9i
amVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIGdsb2JhbCIsICJt
dXN0IGJlIGEgc2FtZSBtdXRhYmlsaXR5IikpKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
YXV0byYgZGVjbGFyZWRHbG9iYWxUeXBlID0gbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tpbXBv
cnQua2luZEluZGV4XS50eXBlOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlY2xhcmVk
R2xvYmFsVHlwZS5raW5kKSB7CkBAIC0yNzAsOCArMjcwLDggQEAgdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUltcG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoV2FzbTo6aXNSZWZXaXRoVHlwZUluZGV4KGRlY2xhcmVkR2xvYmFsVHlw
ZSkgJiYgIXZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IHBhcmFtSW5kZXggPSBnbG9iYWwudHlwZS5pbmRleDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggYXJnSW5k
ZXggPSB3YXNtRnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCkgOiB3YXNt
V3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXYXNtOjpUeXBlSW5kZXggcGFyYW1JbmRleCA9IGdsb2JhbC50eXBlLmluZGV4
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNtOjpUeXBlSW5kZXggYXJnSW5k
ZXggPSB3YXNtRnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24tPnR5cGVJbmRleCgpIDogd2FzbVdyYXBw
ZXJGdW5jdGlvbi0+dHlwZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYXJhbUluZGV4ICE9IGFyZ0luZGV4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGds
b2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIGdsb2Jh
bCIsICJBcmd1bWVudCBmdW5jdGlvbiBkaWQgbm90IG1hdGNoIHRoZSByZWZlcmVuY2UgdHlwZSIp
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzI0LDggKzMyNCw4IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJbXBvcnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdhc206OmlzUmVmV2l0aFR5cGVJbmRleChn
bG9iYWxUeXBlKSAmJiAhdmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IGdsb2JhbC50eXBlLmlu
ZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRl
eCBhcmdJbmRleCA9IHdhc21GdW5jdGlvbiA/IHdhc21GdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgo
KSA6IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBwYXJhbUluZGV4ID0gZ2xvYmFsLnR5
cGUuaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRl
eCBhcmdJbmRleCA9IHdhc21GdW5jdGlvbiA/IHdhc21GdW5jdGlvbi0+dHlwZUluZGV4KCkgOiB3
YXNtV3JhcHBlckZ1bmN0aW9uLT50eXBlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcmFtSW5kZXggIT0gYXJnSW5kZXgpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5r
RXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0
ZWQgZ2xvYmFsIiwgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3QgbWF0Y2ggdGhlIHJlZmVyZW5j
ZSB0eXBlIikpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0zODYsOSArMzg2
LDkgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUltcG9ydHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlMKICAgICAgICAgICAgIGlmICghdGFnKQogICAg
ICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJv
cihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJUYWcgaW1wb3J0
IiwgImlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJBc3NlbWJseS5UYWciKSkpOwogCi0gICAgICAg
ICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbW9kdWxl
SW5mb3JtYXRpb24uaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZElu
ZGV4XTsKKyAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBleHBlY3RlZFR5cGVJbmRleCA9IG1v
ZHVsZUluZm9ybWF0aW9uLmltcG9ydEV4Y2VwdGlvblR5cGVJbmRpY2VzW2ltcG9ydC5raW5kSW5k
ZXhdOwogCi0gICAgICAgICAgICBpZiAoZXhwZWN0ZWRTaWduYXR1cmVJbmRleCAhPSB0YWctPnRh
ZygpLnNpZ25hdHVyZSgpLmluZGV4KCkpCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUeXBlSW5k
ZXggIT0gdGFnLT50YWcoKS50eXBlSW5kZXgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1w
b3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0ZWQgVGFnIiwgInNpZ25hdHVyZSBkb2Vzbid0
IG1hdGNoIHRoZSBpbXBvcnRlZCBXZWJBc3NlbWJseSBUYWcncyBzaWduYXR1cmUiKSkpOwogCiAg
ICAgICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnNldFRhZyhpbXBvcnQua2luZEluZGV4
LCB0YWctPnRhZygpKTsKQEAgLTQ4MSw5ICs0ODEsOSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgbG9va2VkIHVwIGFmdGVyIHRoZSBtZW1vcnkgaXMgaW5p
dGlhbGl6ZWQsIGFzIHRoZSBjb2RlQmxvY2sgZGVwZW5kcyBvbiB0aGUgbWVtb3J5IG1vZGUuCiAg
ICAgV2FzbTo6Q2FsbGVlR3JvdXAqIGNhbGxlZUdyb3VwID0gbV9pbnN0YW5jZS0+aW5zdGFuY2Uo
KS5jYWxsZWVHcm91cCgpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
bW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUo
KTsgKytpbmRleCkgewotICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlc1tp
bmRleF07Ci0gICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0VGFnKG1vZHVsZUluZm9y
bWF0aW9uLmltcG9ydEV4Y2VwdGlvbkNvdW50KCkgKyBpbmRleCwgV2FzbTo6VGFnOjpjcmVhdGUo
V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCkpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtb2R1bGVJbmZvcm1hdGlvbi5pbnRlcm5h
bEV4Y2VwdGlvblR5cGVJbmRpY2VzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBXYXNtOjpU
eXBlSW5kZXggdHlwZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxFeGNlcHRpb25U
eXBlSW5kaWNlc1tpbmRleF07CisgICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0VGFn
KG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEV4Y2VwdGlvbkNvdW50KCkgKyBpbmRleCwgV2FzbTo6
VGFnOjpjcmVhdGUoV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KSkpOwogICAg
IH0KIAogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW1wb3J0Q291bnQgPSBjYWxsZWVHcm91cC0+ZnVu
Y3Rpb25JbXBvcnRDb3VudCgpOwpAQCAtNTAyLDggKzUwMiw4IEBAIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmluaXRpYWxpemVFeHBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rp
b25JbXBvcnQpKQogICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBmdW5jdGlvbkltcG9ydDsKICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoaW5kZXgpOwotICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgZnVuY3Rpb25JbXBvcnQsIGluZGV4LCBtX2lu
c3RhbmNlLmdldCgpLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgV2FzbTo6VHlw
ZUluZGV4IHR5cGVJbmRleCA9IG1vZHVsZS0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShpbmRleCk7CisgICAgICAgICAgICAgICAgd3JhcHBlciA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCBmdW5jdGlvbkltcG9ydCwgaW5kZXgsIG1faW5z
dGFuY2UuZ2V0KCksIHR5cGVJbmRleCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyAgIGlpaS4gT3RoZXJ3aXNlOgpAQCAtNTEyLDkgKzUxMiw5IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVFeHBvcnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCiAg
ICAgICAgICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNhbGxl
ZUdyb3VwLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGlu
ZGV4KTsKICAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Okxv
YWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY2FsbGVlR3JvdXAtPmVudHJ5cG9p
bnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKLSAgICAgICAgICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJ
bmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwotICAgICAgICAgICAgY29uc3QgV2Fz
bTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpLCBtYWtlU3RyaW5nKGluZGV4KSwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJF
bnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7
CisgICAgICAgICAgICBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4ID0gbW9kdWxlLT50eXBlSW5k
ZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8m
IHNpZ25hdHVyZSA9IFdhc206OlR5cGVJbmZvcm1hdGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1cmUo
dHlwZUluZGV4KTsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0g
V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpLCBtYWtlU3RyaW5nKGluZGV4KSwgbV9pbnN0YW5jZS5nZXQoKSwgZW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCB0eXBlSW5kZXgpOwogICAgICAgICAg
ICAgd3JhcHBlciA9IGZ1bmN0aW9uOwogICAgICAgICB9CiAKQEAgLTU0OSw4ICs1NDksOCBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6
OlBvcnRhYmxlOiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09
IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKLSAgICAgICAg
ICAgICAgICBSZWY8V2FzbTo6R2xvYmFsPiBnbG9iYWxSZWYgPSBXYXNtOjpHbG9iYWw6OmNyZWF0
ZShnbG9iYWwudHlwZSwgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFi
bGUsIGluaXRpYWxCaXRzKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxp
dHkgPT0gV2FzbTo6TXV0YWJsZSk7CisgICAgICAgICAgICAgICAgUmVmPFdhc206Okdsb2JhbD4g
Z2xvYmFsUmVmID0gV2FzbTo6R2xvYmFsOjpjcmVhdGUoZ2xvYmFsLnR5cGUsIFdhc206Ok11dGFi
aWxpdHk6Ok11dGFibGUsIGluaXRpYWxCaXRzKTsKICAgICAgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5R2xvYmFsKiBnbG9iYWxWYWx1ZSA9IEpTV2ViQXNzZW1ibHlHbG9iYWw6OnRyeUNyZWF0ZShn
bG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5R2xvYmFsU3RydWN0dXJl
KCksIFdURk1vdmUoZ2xvYmFsUmVmKSk7CiAgICAgICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICBtX2luc3RhbmNlLT5saW5rR2xvYmFsKHZtLCBn
bG9iYWxJbmRleCwgZ2xvYmFsVmFsdWUpOwpAQCAtNjA1LDEyICs2MDUsMTIgQEAgdm9pZCBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTV2ViQXNz
ZW1ibHlHbG9iYWw6OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPndl
YkFzc2VtYmx5R2xvYmFsU3RydWN0dXJlKCksIFdURk1vdmUoZ2xvYmFsUmVmKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09
IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Ok11dGFiaWxpdHk6
Ok11dGFibGUpOwogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8V2FzbTo6R2xvYmFsPiBnbG9i
YWxSZWYgPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmdldEdsb2JhbEJpbmRpbmcoZXhwLmtpbmRJ
bmRleCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxSZWYpOwogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoZ2xvYmFsUmVmLT50eXBlKCkgPT0gZ2xvYmFsLnR5cGUpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsUmVmLT5tdXRhYmlsaXR5KCkgPT0gZ2xvYmFs
Lm11dGFiaWxpdHkpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsUmVmLT5tdXRh
YmlsaXR5KCkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUp
OworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsUmVmLT5tdXRhYmlsaXR5KCkgPT0g
V2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChn
bG9iYWxSZWYtPm93bmVyPEpTV2ViQXNzZW1ibHlHbG9iYWw+KCkpOwogICAgICAgICAgICAgICAg
ICAgICBleHBvcnRlZFZhbHVlID0gZ2xvYmFsUmVmLT5vd25lcjxKU1dlYkFzc2VtYmx5R2xvYmFs
PigpOwogICAgICAgICAgICAgICAgIH0KQEAgLTY1MCw4ICs2NTAsOCBAQCB2b2lkIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQogICAgIGJvb2wgaGFzU3RhcnQgPSAhIW1vZHVsZUluZm9ybWF0aW9uLnN0YXJ0RnVu
Y3Rpb25JbmRleFNwYWNlOwogICAgIGlmIChoYXNTdGFydCkgewogICAgICAgICBhdXRvIHN0YXJ0
RnVuY3Rpb25JbmRleFNwYWNlID0gbW9kdWxlSW5mb3JtYXRpb24uc3RhcnRGdW5jdGlvbkluZGV4
U3BhY2UudmFsdWVfb3IoMCk7Ci0gICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVy
ZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3Rh
cnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgp
OworICAgICAgICBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4ID0gbW9kdWxlLT50eXBlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICAgICAg
Y29uc3QgYXV0byYgc2lnbmF0dXJlID0gV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlv
blNpZ25hdHVyZSh0eXBlSW5kZXgpOwogICAgICAgICAvLyBUaGUgc3RhcnQgZnVuY3Rpb24gbXVz
dCBub3QgdGFrZSBhbnkgYXJndW1lbnRzIG9yIHJldHVybiBhbnl0aGluZy4gVGhpcyBpcyBlbmZv
cmNlZCBieSB0aGUgcGFyc2VyLgogICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCkpOwogICAgICAgICBBU1NFUlQoc2lnbmF0dXJlLnJldHVybnNWb2lkKCkpOwpAQCAtNjYx
LDcgKzY2MSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVFeHBv
cnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBXYXNtOjpDYWxsZWUmIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSA9IGNhbGxlZUdy
b3VwLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0
RnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgIFdhc206Oldhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gY2FsbGVl
R3JvdXAtPmVudHJ5cG9pbnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0
RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1
bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpLCAic3RhcnQiX3MsIG1faW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlw
b2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOworICAg
ICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1
bmN0aW9uU3RydWN0dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICJzdGFydCIsIG1f
aW5zdGFuY2UuZ2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRM
b2NhdGlvbiwgdHlwZUluZGV4KTsKICAgICAgICAgICAgIG1fc3RhcnRGdW5jdGlvbi5zZXQodm0s
IHRoaXMsIGZ1bmN0aW9uKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3IuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAK
aW5kZXggZDY3MWUwYzQyM2MzY2E2NTBkMGVhZGEyYjdkNThmZTU0MWQ3ZDM2ZC4uYmM4ZWJlMTZl
MTJkNGI4OTJhMjUxYTE3MjEzNzFlYzJhMjhlMTdkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWdDb25zdHJ1Y3Rvci5jcHAK
QEAgLTg0LDkgKzg0LDkgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpTV2Vi
QXNzZW1ibHlUYWcsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICB9KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgUmVmUHRyPFdhc206OlNpZ25h
dHVyZT4gc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUZv
cih7IH0sIHBhcmFtZXRlcnMpOworICAgIFJlZlB0cjxXYXNtOjpUeXBlRGVmaW5pdGlvbj4gdHlw
ZURlZmluaXRpb24gPSBXYXNtOjpUeXBlSW5mb3JtYXRpb246OnR5cGVEZWZpbml0aW9uRm9yRnVu
Y3Rpb24oeyB9LCBwYXJhbWV0ZXJzKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpTQ19H
RVRfREVSSVZFRF9TVFJVQ1RVUkUodm0sIHdlYkFzc2VtYmx5VGFnU3RydWN0dXJlLCBhc09iamVj
dChjYWxsRnJhbWUtPm5ld1RhcmdldCgpKSwgY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKLSAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFn
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBXYXNtOjpUYWc6OmNyZWF0ZSgq
c2lnbmF0dXJlKS5nZXQoKSkpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlLCBXYXNtOjpUYWc6OmNyZWF0ZSgqdHlwZURlZmluaXRpb24pLmdldCgpKSkpOwogfQog
CiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbEpTV2ViQXNzZW1ibHlUYWcsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNw
cAppbmRleCBiNWQ3OGNlNDhkYTcwZDI2OWMzZTU5OWRhN2YzOWRjZjkwMDZmYjlmLi4wNDY4ODQ4
NGE5NDQ4ZDY3ZTEzMjZlMjAwZGFhODMxN2IxMzQzNWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJKU09iamVjdElubGluZXMuaCIKICNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJl
SW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTQyLDEzICs0MiwxMyBAQCBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbjo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxl
KgogICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGlt
cG9ydGFibGVGdW5jdGlvbikKIHsgfQogCi1XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogZnVuY3Rpb24sIHVu
c2lnbmVkIGltcG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNt
OjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBmdW5j
dGlvbiwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFu
Y2UsIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXgpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghZnVuY3Rpb24tPmluaGVyaXRzPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bSksICJX
ZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9uLiIpOwogICAgIFN0
cmluZyBuYW1lID0gZW1wdHlTdHJpbmcoKTsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwg
Tm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1l
KTsKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtKSkgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsICZp
bnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5kZXgpLT53YXNt
VG9FbWJlZGRlclN0dWIgfSApOwotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJl
ID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bSkpIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6
V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiB7IHR5cGVJbmRleCwgJmluc3RhbmNlLT5pbnN0
YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRJbmRleCktPndhc21Ub0VtYmVkZGVyU3R1
YiB9ICk7CisgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gV2FzbTo6VHlwZUluZm9ybWF0aW9u
OjpnZXRGdW5jdGlvblNpZ25hdHVyZSh0eXBlSW5kZXgpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3Jl
YXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1
bmN0aW9uLCBpbnN0YW5jZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oCmluZGV4IDhkZDE4M2NjMjJkMWQwZTgwZjhlMzQ4NDg4MjY4OWVhOTY3Yzg0YzcuLmFlYmM3
MmZkMzQ1OTY2NTY0MGNkMjZhNDk2OTkwOWFmM2Q3M2Y5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
aApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBz
dGF0aWMgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIHN0YXRpYyBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBKU09iamVjdCosIHVuc2lnbmVkIGltcG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqLCBXYXNtOjpUeXBlSW5kZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBKU09iamVjdCog
ZnVuY3Rpb24oKSB7IHJldHVybiBtX2Z1bmN0aW9uLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS93YXNtLmpzb24KaW5kZXggY2FiZGUyMGFlY2VhNjM0NTM5Y2Q4MGI0Y2ExYTEzMTM4ODM2
YTEwOC4uYzZlZTY3ZmQwZTBjMGI0NWNmODMwYjRkMzc0ZDFlMjZhZjQ1NDQ0MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgpAQCAtMTYsNiArMTYsNyBAQAogICAgICAgICAicmVm
X251bGwiOiAgeyAidHlwZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0yMCwgImIzdHlwZSI6ICJC
Mzo6SW50NjQiIH0sCiAgICAgICAgICJyZWYiOiAgICAgICB7ICJ0eXBlIjogInZhcmludDciLCAi
dmFsdWUiOiAgLTIxLCAiYjN0eXBlIjogIkIzOjpJbnQ2NCIgfSwKICAgICAgICAgImZ1bmMiOiAg
ICAgIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6ICAtMzIsICJiM3R5cGUiOiAiQjM6OlZv
aWQiIH0sCisgICAgICAgICJzdHJ1Y3QiOiAgICB7ICJ0eXBlIjogInZhcmludDciLCAidmFsdWUi
OiAgLTMzLCAiYjN0eXBlIjogIkIzOjpWb2lkIiB9LAogICAgICAgICAidm9pZCI6ICAgICAgeyAi
dHlwZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC02NCwgImIzdHlwZSI6ICJCMzo6Vm9pZCIgfQog
ICAgIH0sCiAgICAgInZhbHVlX3R5cGUiOiBbImkzMiIsICJpNjQiLCAiZjMyIiwgImY2NCIsICJl
eHRlcm5yZWYiLCAiZnVuY3JlZiJdLApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9K
U1Rlc3RzL0NoYW5nZUxvZwppbmRleCBhYzdmOGE1OTI0YzY1MThmMGY1M2M2NGQ0ZTI4N2MxYWEy
MTgzZDkzLi4wNWNiN2U3MTEzYmQxNjBhMDE4ZTM0MTUwYmQzYTFlOWYwZDhhZmIzIDEwMDY0NAot
LS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE4IEBACisyMDIyLTAzLTMxICBEbWl0cnkgQmV6aGV0c2tvdiAgPGRiZXpoZXRza292QGlnYWxp
YS5jb20+CisKKyAgICAgICAgW1dBU00tR0NdIEludHJvZHVjZSBzdHJ1Y3RzIHR5cGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcwMjkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBiYXNpYyB0
ZXN0cyBmb3Igc3RydWN0IHR5cGVzIGRlY2xhcmF0aW9uLgorCisgICAgICAgICogd2FzbS55YW1s
OgorICAgICAgICAqIHdhc20vZ2Mvc3RydWN0cy5qczogQWRkZWQuCisgICAgICAgIChtb2R1bGUp
OgorICAgICAgICAodGVzdFN0cnVjdERlY2xhcmF0aW9uKToKKyAgICAgICAgKiB3YXNtL3dhc20u
anNvbjoKKwogMjAyMi0wMy0zMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbW92ZSB1c2VQcm9iZU9TUkV4aXQ9MSBmbGFnIGZyb20gdGVzdHMKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvd2FzbS55YW1sIGIvSlNUZXN0cy93YXNtLnlhbWwKaW5kZXggYWVlYmJj
MDRjZDlkODQ4NzRmMjM0MWExYjExOGJjOWNlYmEzZWFmZC4uOWNkNDBlYmY5OGI5MzlmMWIwZjdi
NzQwMmU2ZDAxNTEzMGE0OTQ4MiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtLnlhbWwKKysrIGIv
SlNUZXN0cy93YXNtLnlhbWwKQEAgLTM1LDYgKzM1LDggQEAKICAgY21kOiBydW5XZWJBc3NlbWJs
eVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAtIHBhdGg6IHdhc20vZnVuY3Rpb24tcmVm
ZXJlbmNlcwogICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFu
ZHMKKy0gcGF0aDogd2FzbS9nYworICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUgdW5sZXNzIHBh
cnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2FzbS9mdXp6CiAgIGNtZDogcnVuV2ViQXNzZW1ibHlT
dWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogLSBwYXRoOiB3YXNtL2xvd0V4ZWN1dGFibGVN
ZW1vcnkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9nYy9zdHJ1Y3RzLmpzIGIvSlNUZXN0cy93
YXNtL2djL3N0cnVjdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNThlYTBjODIyZjhjNTM0YjNlZWUxOWRiYTk0
NmNmNzZiMmY3NjExNAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9nYy9zdHJ1Y3Rz
LmpzCkBAIC0wLDAgKzEsODMgQEAKKy8vQCBydW5XZWJBc3NlbWJseVN1aXRlKCItLXVzZVdlYkFz
c2VtYmx5VHlwZWRGdW5jdGlvblJlZmVyZW5jZXM9dHJ1ZSIsICItLXVzZVdlYkFzc2VtYmx5R0M9
dHJ1ZSIpCisKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICIuLi9hc3NlcnQuanMiOworaW1wb3J0
IHsgaW5zdGFudGlhdGUgfSBmcm9tICIuLi93YWJ0LXdyYXBwZXIuanMiOworCitmdW5jdGlvbiBt
b2R1bGUoYnl0ZXMsIHZhbGlkID0gdHJ1ZSkgeworICBsZXQgYnVmZmVyID0gbmV3IEFycmF5QnVm
ZmVyKGJ5dGVzLmxlbmd0aCk7CisgIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTsK
KyAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7ICsraSkgeworICAgIHZpZXdbaV0g
PSBieXRlcy5jaGFyQ29kZUF0KGkpOworICB9CisgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJ1ZmZlcik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTdHJ1Y3REZWNsYXJhdGlvbigpIHsKKyAg
LyoKKyAgICogKG1vZHVsZQorICAgKiAgICh0eXBlIChzdHJ1Y3QpKQorICAgKiApCisgICAqLwor
ICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKCJceDAwXHg2MVx4NzNceDZkXHgwMVx4
MDBceDAwXHgwMFx4MDFceDAzXHgwMVx4NWZceDAwIikpOworCisgIC8qCisgICAqIChtb2R1bGUK
KyAgICogICAodHlwZSAoc3RydWN0IChmaWVsZCBpMzIpKSkKKyAgICogKQorICAgKi8KKyAgbmV3
IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSgiXHgwMFx4NjFceDczXHg2ZFx4MDFceDAwXHgw
MFx4MDBceDAxXHgwNVx4MDFceDVmXHgwMVx4N2ZceDAwIikpOworCisgIC8qCisgICAqIChtb2R1
bGUKKyAgICogICAodHlwZSAoc3RydWN0IChmaWVsZCBpMzIpIChmaWVsZCBpMzIpKSkKKyAgICog
KQorICAgKi8KKyAgbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSgiXHgwMFx4NjFceDcz
XHg2ZFx4MDFceDAwXHgwMFx4MDBceDAxXHgwN1x4MDFceDVmXHgwMlx4N2ZceDAwXHg3Zlx4MDAi
KSk7CisKKyAgLyoKKyAgICogKG1vZHVsZQorICAgKiAgICh0eXBlIChzdHJ1Y3QgKGZpZWxkICht
dXQgaTMyKSkpKQorICAgKiApCisgICAqLworICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlKCJceDAwXHg2MVx4NzNceDZkXHgwMVx4MDBceDAwXHgwMFx4MDFceDA1XHgwMVx4NWZceDAx
XHg3Zlx4MDEiKSk7CisKKyAgLyoKKyAgICogKG1vZHVsZQorICAgKiAgICh0eXBlICRQb2ludCAo
c3RydWN0IChmaWVsZCAobXV0IGkzMikgKG11dCBpMzIpKSkpCisgICAqICAgKHR5cGUgJExpbmUg
KHN0cnVjdCAoZmllbGQgKG11dCAocmVmICRQb2ludCkpIChtdXQgKHJlZiAkUG9pbnQpKSkpKQor
ICAgKiApCisgICAqLworICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKCJceDAwXHg2
MVx4NzNceDZkXHgwMVx4MDBceDAwXHgwMFx4MDFceDBmXHgwMlx4NWZceDAyXHg3Zlx4MDFceDdm
XHgwMVx4NWZceDAyXHg2Ylx4MDBceDAxXHg2Ylx4MDBceDAxIikpOworCisgIC8qCisgICAqIHRv
byBtYW55IGZpZWxkcworICAgKiAobW9kdWxlCisgICAqICAgKHR5cGUgKHN0cnVjdCAoZmllbGQg
aTMyKSkpCisgICAqICkKKyAgICovCisgIGFzc2VydC50aHJvd3MoCisgICAgKCkgPT4KKyAgICAg
IG1vZHVsZSgKKyAgICAgICAgIlx4MDBceDYxXHg3M1x4NmRceDAxXHgwMFx4MDBceDAwXHgwMVx4
MDdceDAxXHg1Zlx4ZmZceGZmXHhmZlx4N2ZceDAwIgorICAgICAgKSwKKyAgICBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IsCisgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0
IGJ5dGUgMTY6IG51bWJlciBvZiBmaWVsZHMgZm9yIHN0cnVjdCB0eXBlIGF0IHBvc2l0aW9uIDAg
aXMgdG9vIGJpZyAyNjg0MzU0NTUgbWF4aW11bSAxMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShidWZmZXIpJykiCisgICk7CisKKyAgLyoKKyAgICogaW52YWxpZCBtdXRh
YmlsaXR5CisgICAqIChtb2R1bGUKKyAgICogICAodHlwZSAoc3RydWN0IChmaWVsZCAobXV0IGkz
MikpKSkKKyAgICogKQorICAgKi8KKyAgYXNzZXJ0LnRocm93cygKKyAgICAoKSA9PgorICAgICAg
bW9kdWxlKAorICAgICAgICAiXHgwMFx4NjFceDczXHg2ZFx4MDFceDAwXHgwMFx4MDBceDAxXHgw
NVx4MDFceDVmXHgwMVx4N2ZceDAyIgorICAgICAgKSwKKyAgICBXZWJBc3NlbWJseS5Db21waWxl
RXJyb3IsCisgICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTU6
IGludmFsaWQgRmllbGQncyBtdXRhYmlsaXR5OiAweDAyIChldmFsdWF0aW5nICduZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJ1ZmZlciknKSIKKyAgKTsKK30KKwordGVzdFN0cnVjdERlY2xhcmF0aW9u
KCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vd2FzbS5qc29uIGIvSlNUZXN0cy93YXNtL3dh
c20uanNvbgppbmRleCAzMmM4YWY4YmJmNTdlYTYwNWIzMzU1YTU2ZDg4MmU4ZGRlMWUwZWVkLi43
NDI4MTJjZGViMDNkNWE1NDg0NWEwNzdhYmIxZDc0YjUyN2ZlNTM1IDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3dhc20vd2FzbS5qc29uCisrKyBiL0pTVGVzdHMvd2FzbS93YXNtLmpzb24KQEAgLTE2LDYg
KzE2LDcgQEAKICAgICAgICAgInJlZl9udWxsIjogIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1
ZSI6ICAtMjAsICJiM3R5cGUiOiAiQjM6OkludDY0IiB9LAogICAgICAgICAicmVmIjogICAgICAg
eyAidHlwZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0yMSwgImIzdHlwZSI6ICJCMzo6SW50NjQi
IH0sCiAgICAgICAgICJmdW5jIjogICAgICB7ICJ0eXBlIjogInZhcmludDciLCAidmFsdWUiOiAg
LTMyLCAiYjN0eXBlIjogIkIzOjpWb2lkIiB9LAorICAgICAgICAic3RydWN0IjogICAgeyAidHlw
ZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0zMywgImIzdHlwZSI6ICJCMzo6Vm9pZCIgfSwKICAg
ICAgICAgInZvaWQiOiAgICAgIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6ICAtNjQsICJi
M3R5cGUiOiAiQjM6OlZvaWQiIH0KICAgICB9LAogICAgICJ2YWx1ZV90eXBlIjogWyJpMzIiLCAi
aTY0IiwgImYzMiIsICJmNjQiLCAiZXh0ZXJucmVmIiwgImZ1bmNyZWYiXSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456503</attachid>
            <date>2022-04-03 00:45:55 -0700</date>
            <delta_ts>2022-04-07 04:11:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237029-20220403144553.patch</filename>
            <type>text/plain</type>
            <size>303073</size>
            <attacher name="Dmitry">dbezhetskov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyMjA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
MWUyNTU0ZGQ5MDY5YWRmYTUwYzJlYjIyMmVjMTMwYTM0YzE1MGFhLi4yZWY4OGY5ZGZkM2YxM2Fl
NDA3YjIzMGQ5ODEyYzA2MDc5N2FmOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMDYgQEAKKzIwMjItMDMtMzEgIERtaXRyeSBCZXpoZXRza292ICA8ZGJlemhldHNrb3ZA
aWdhbGlhLmNvbT4KKworICAgICAgICBbV0FTTS1HQ10gSW50cm9kdWNlIHN0cnVjdHMgdHlwZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzAyOQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVj
ZSBzdHJ1Y3QgdHlwZXMgdmlhIGV4dGVuZGluZyBleGlzdGluZyBTaWduYXR1cmUgaW5mcmFzdHJ1
Y3R1cmUuCisgICAgICAgIFNpZ25hdHVyZSBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiBX
YXNtIGZ1bmN0aW9uIHR5cGVzIGFuZCB3ZSB1c2UgdGhlbQorICAgICAgICB0byBjb21wYXJlIHNp
Z25hdHVyZXMgZnJvbSBkaWZmZXJlbnQgd2FzbSBtb2R1bGVzLiBTaWduYXR1cmVzIGFyZSBoZWxk
IGdsb2JhbGx5CisgICAgICAgIGluIGEgaGFzaCBzZXQgYW5kIGhhdmUgb25lIHBvaW50IG9mIGFj
Y2Vzcy4KKworICAgICAgICBXaXRoIEdDIHByb3Bvc2FsIGFuZCBuZXcgc3RydWN0IHR5cGVzIHdl
IHdhbnQgdG8gcmVwcmVzZW50IG5ldyB0eXBlcyB1bmlmb3JtbHkgd2l0aCBleGlzdGluZworICAg
ICAgICBTaWduYXR1cmUgaW5mcmFzdHJ1Y3R1cmUuIFNvLCBpbiB0aGlzIHBhdGNoIHdlIGV4dGVu
ZCBTaWduYXR1cmUgY2xhc3Mgd2l0aCB0d28gb3B0aW9ucyAtCisgICAgICAgIEZ1bmN0aW9uU2ln
bmF0dXJlIGFuZCBTdHJ1Y3RUeXBlLiBGdW5jdGlvblNpZ25hdHVyZSAoY2FuIGJlIG5hbWVkIGFz
IEZ1bmN0aW9uVHlwZSkgaXMgYQorICAgICAgICByZXByZXNlbnRhdGlvbiBvZiBzaWduYXR1cmVz
IGFzIGl0IHdhcyBiZWZvcmUgdGhlIHBhdGNoIGFuZCBTdHJ1Y3RUeXBlIGlzIGEgbmV3IG9wdGlv
biB3aGljaAorICAgICAgICBpcyByZXByZXNlbnRpbmcgc3RydWN0IHR5cGVzIGZyb20gR0MgcHJv
cG9zYWwuIEdlbmVyYWxseSBzcGVha2luZyB3ZSByZXBsYWNlIFNpZ25hdHVyZSBjbGFzcworICAg
ICAgICB3aXRoIG5ldyBhbGdlYnJhaWMgdHlwZSBUeXBlRGVmaW5pdGlvbiA9IFNpZ25hdHVyZSB8
IFN0cnVjdFR5cGUuCisKKyAgICAgICAgVGhpcyByZXByZXNlbnRhdGlvbiBvZiBzdHJ1Y3QgdHlw
ZXMgYWxsb3dzIHVzIG5vdCB0byBjaGFuZ2UgV2FzbVR5cGUgcmVwcmVzZW50YXRpb24gYW5kIAor
ICAgICAgICB1bmlmb3JtbHkgc3RvcmUgRnVuY3Rpb25UeXBlIChha2EgRnVuY3Rpb25TaWduYXR1
cmUpIG9yIFN0cnVjdFR5cGUuIE5ldyBvcHRpb25zIGZvciB0eXBlcywKKyAgICAgICAgZm9yIGV4
YW1wbGUgYXJyYXlzLCBhbHNvIGNhbiBiZSBlYXNpbHkgYWRkZWQuIEFsc28sIHdlIHNhdmUgbWVt
b3J5IGJlY2F1c2Ugd2UgcmV1c2UgZXhpc3RpbmcKKyAgICAgICAgdW5pcXVlbmVzcyBvZiBzaWdu
YXR1cmVzLiBBZGRpdGlvbmFsbHkgd2UgY2FuIGNvbXBhcmUgZGlmZmVyZW50IHN0cnVjdCB0eXBl
cyBhcyBmYXN0IGFzIHdlIGRvIGl0IGZvciAKKyAgICAgICAgc2lnbmF0dXJlcy4KKworICAgICAg
ICBBcyBTaWduYXR1cmUgY2xhc3Mgbm93IGRvZXNuJ3Qgb25seSBob2xkcyBTaWduYXR1cmUgaXQg
aGFzIGJlZW4gcmVuYW1lZCBpbnRvIFR5cGVEZWZpbml0aW9uLgorICAgICAgICBBbGwgY29ycmVz
cG9uZGluZyBzaWduYXR1cmUgcmVsYXRlZCB0aGluZ3MgYWxzbyBoYXZlIGJlZW4gcmVuYW1lZC4K
KworICAgICAgICBUbyBhY2Nlc3Mgc3BlY2lmaWMgb3B0aW9uIHR3byBjbGFzc2VzIHdhcyBpbnRy
b2R1Y2VkIFN0cnVjdFR5cGUgYW5kIEZ1bmN0aW9uU2lnbmF0dXJlLCBzbyBUeXBlRGVmaW5pdGlv
bgorICAgICAgICBjYW4gYmUgY2FzdGVkIHRvIHNwZWNpZmljIG9wdGlvbiBhbmQgb25seSB2aWEg
aXQgb3B0aW9uIG1ldGhvZHMgb2YgdGhhdCBvcHRpb24gY2FuIGJlIGNhbGxlZC4KKyAgICAgICAg
VGhpcyBpcyBkb25lIHdpdGggcHJlc2VydmluZyB0aGUgY2FjaGUtbG9jYWxpdHkgb3B0aW1pemF0
aW9uIGZvciBhbGxvY2F0aW9uIHNpZ25hdHVyZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1
bXBlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVjb2RlRHVtcGVyOjpkdW1wQmxvY2sp
OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBydW50aW1l
L09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmJyYW5jaFRh
cmdldEFyaXR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNv
bnRyb2xEYXRhOjpicmFuY2hUYXJnZXRUeXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjp0bXBzRm9yU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRSZWZGdW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6Omdl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpzZXRHbG9iYWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2gpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFJldHVybik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZENhbGxSZWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5k
Q29tcGlsZUFpcik6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6Omhhc05vblZvaWRyZXN1bHQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6YnJhbmNoVGFy
Z2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6ZW1pdEluZGlyZWN0Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmdldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnNldEdsb2Jh
bCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Y3JlYXRlQ2FsbFBhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbFJlZik6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUIzKToK
KyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNt
QkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dh
c21DYWxsZWUuaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmNhbGxJbmZvcm1hdGlvbkZv
ciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ2FsbGluZ0NvbnZlbnRpb246OmNhbGxJ
bmZvcm1hdGlvbkZvciBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtRW1iZWRkZXIuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21FbnRyeVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpFbnRy
eVBsYW46OnByZXBhcmUpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAo
SlNDOjpXYXNtOjppc0V4dGVybnJlZik6CisgICAgICAgIChKU0M6Oldhc206OmlzRnVuY3JlZik6
CisgICAgICAgIChKU0M6Oldhc206OmZ1bmNyZWZUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
ZXh0ZXJucmVmVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206Oldhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3I6OmFkZFNpZ25hdHVyZSk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpzcGxpdFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OnNpZ25hdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcik6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSk6CisgICAgICAgIChK
U0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmlmeSk6CisgICAgICAgIChKU0M6
Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4
cHJlc3Npb24pOgorICAgICAgICAqIHdhc20vV2FzbUdsb2JhbC5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Okdsb2JhbDo6c2V0KToKKyAgICAgICAgKiB3YXNtL1dhc21HbG9iYWwuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojppbml0RWxlbWVudFNlZ21lbnQpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjps
b29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpi
bG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6
aWZfKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpj
cmVhdGVUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5
cGU6OmNyZWF0ZUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNv
bnRyb2xUeXBlOjpicmFuY2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcik6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjplbmRUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjphZGRDYWxsUmVmKToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5oOgor
ICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxM
SW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFu
OjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoK
KyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1
bGU6OnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmg6CisgICAgICAgICogd2Fz
bS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjp0
eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2VwdGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25G
cm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZUluZm9ybWF0aW9uOjp0eXBlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjppbXBvcnRGdW5jdGlvbkNvdW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmludGVybmFs
RnVuY3Rpb25Db3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjppbXBvcnRFeGNlcHRpb25Db3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZUluZm9ybWF0aW9uOjppbnRlcm5hbEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OnR5cGVDb3VudCBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbjo6c2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Ok9NR1BsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbU9TUkVudHJ5UGxhbi5j
cHA6CisgICAgICAgIChKU0M6Oldhc206Ok9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICog
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAg
ICAqIHdhc20vV2FzbVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpQYXJzZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vzc1R5cGU+
OjpwYXJzZUJsb2NrU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyPFN1Y2Nl
c3NUeXBlPjo6cGFyc2VIZWFwVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxTdWNj
ZXNzVHlwZT46OnBhcnNlVmFsdWVUeXBlKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlv
blBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJz
ZXI6OnBhcnNlRnVuY3Rpb25UeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VTdHJ1Y3RUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6
cGFyc2VHbG9iYWxUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFy
c2VFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25QYXJzZXIuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21TaWduYXR1cmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vV2Fz
bVNpZ25hdHVyZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50Ojpkb1dhc21DYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlND
OjpMTEludDo6V0FTTV9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpkb1dh
c21DYWxsUmVmKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAg
ICAgICAqIHdhc20vV2FzbVN0cmVhbWluZ1BsYW4uY3BwOgorICAgICAgICAqIHdhc20vV2FzbVRh
YmxlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY1JlZlRhYmxlOjpGdW5jUmVmVGFibGUpOgorICAgICAgICAqIHdhc20vV2Fz
bVRhZy5oOgorICAgICAgICAqIHdhc20vV2FzbVR5cGVEZWZpbml0aW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjp0b1N0cmluZyBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpTdHJ1Y3RUeXBlOjp0b1N0cmluZyBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlN0
cnVjdFR5cGU6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpjb21wdXRlU2lnbmF0
dXJlSGFzaCk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVTdHJ1Y3RUeXBlSGFzaCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjpoYXNoIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OnRyeUNyZWF0ZUZ1bmN0aW9uU2lnbmF0dXJlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OnRyeUNyZWF0ZVN0cnVjdFR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlSW5mb3JtYXRpb246OlR5cGVJbmZvcm1hdGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyYW1ldGVyVHlwZXM6Omhhc2gpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcmFtZXRlclR5cGVzOjplcXVhbCk6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uUGFyYW1ldGVyVHlwZXM6OnRyYW5zbGF0ZSk6CisgICAgICAg
IChKU0M6Oldhc206OlN0cnVjdFBhcmFtZXRlclR5cGVzOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6U3RydWN0UGFyYW1ldGVyVHlwZXM6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
U3RydWN0UGFyYW1ldGVyVHlwZXM6OnRyYW5zbGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlR5
cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JGdW5jdGlvbik6CisgICAgICAgIChKU0M6
Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JTdHJ1Y3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUeXBlSW5mb3JtYXRpb246OnRyeUNsZWFudXApOgorICAgICAgICAqIHdh
c20vV2FzbVR5cGVEZWZpbml0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5j
dGlvblNpZ25hdHVyZTo6RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblNpZ25hdHVyZTo6YXJndW1lbnRDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uU2lnbmF0dXJlOjpyZXR1cm5Db3VudCBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OkZ1bmN0aW9uU2lnbmF0dXJlOjpyZXR1cm5UeXBlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnJldHVybnNWb2lkIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OmFyZ3VtZW50VHlwZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkZ1bmN0aW9uU2lnbmF0dXJlOjpnZXRSZXR1cm5UeXBlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OmdldEFyZ3VtZW50VHlwZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkZ1bmN0aW9uU2lnbmF0dXJlOjpzdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnN0b3JhZ2UgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpTdHJ1Y3RGaWVsZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlN0cnVjdEZpZWxkOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
U3RydWN0VHlwZTo6U3RydWN0VHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OlN0cnVjdFR5cGU6
OmZpZWxkQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJ1Y3RUeXBlOjpmaWVs
ZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cnVjdFR5cGU6OmdldEZpZWxkKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U3RydWN0VHlwZTo6c3RvcmFnZSk6CisgICAgICAgIChKU0M6Oldh
c206OlN0cnVjdFR5cGU6OnN0b3JhZ2UgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBl
RGVmaW5pdGlvbjo6VHlwZURlZmluaXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlRGVm
aW5pdGlvbjo6cGF5bG9hZCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjph
bGxvY2F0ZWRGdW5jdGlvblNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlRGVmaW5pdGlv
bjo6YWxsb2NhdGVkU3RydWN0U2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0
aW9uOjppcyBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjphcyk6
CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjphcyBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjppbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OlR5cGVEZWZpbml0aW9uOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VHlwZUhhc2g6OlR5cGVIYXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZUhhc2g6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlSGFzaDo6ZXF1YWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6Oldh
c206OlR5cGVIYXNoOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6dGh1bmtGb3IgY29uc3QpOgorICAgICAgICAqIHdh
c20vV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZUlubGluZXMuaC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6VHlwZUluZm9ybWF0aW9uOjpzaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBl
SW5mb3JtYXRpb246OmdldCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6
Z2V0RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3BzSGVh
ZGVyLnB5OgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpX
YXNtOjptYXJzaGFsbEpTUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNUb1dh
c21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmg6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseUV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uOjpnZXRBcmcgY29uc3QpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseUdsb2JhbC5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlHbG9iYWw6OnR5
cGUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6ZnJvbUpTVmFsdWUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3kpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjp0eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Z2VuZXJh
dGVXYXNtVG9KU1N0dWJzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6c2ln
bmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWcuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuaDoK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OnVzZXNUYWdS
ZWdpc3RlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0Nh
bGxFbnRyeXBvaW50U2xvdyk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVu
Y3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaDoKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2U6OnR5cGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpzaWduYXR1cmVJbmRleCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJ
bXBvcnRzKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxp
emVFeHBvcnRzKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg6CisgICAgICAgICogd2FzbS93YXNtLmpzb246CisK
IDIwMjItMDMtMzEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZG9wdCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKEFTQ0lJTGl0ZXJhbCkgbW9yZSBicm9hZGx5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMjlhN2FmOWEyZGU2ODYyOWI3OGYw
MjBmMWQ5ZDgxNzA5ZGEzYjI1ZS4uMjNjNGE3NGY4ODY4NjNhMWVmY2UwYjNjYTM2YmYxNjYxM2Vm
NDk1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTI0Myw3ICsxMjQz
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICB3
YXNtL1dhc21PU1JFbnRyeURhdGEuaAogICAgIHdhc20vV2FzbVBhZ2VDb3VudC5oCiAgICAgd2Fz
bS9XYXNtU2VjdGlvbnMuaAotICAgIHdhc20vV2FzbVNpZ25hdHVyZS5oCisgICAgd2FzbS9XYXNt
VHlwZURlZmluaXRpb24uaAogICAgIHdhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmgKICAgICB3
YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuaAogICAgIHdhc20vV2FzbVRpZXJVcENvdW50LmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTAyZjJkNjQ3ODdjNmQ0MGY4Mjk2ZjcwM2M5
NTZiMDc5YmU4ZmNiNi4uMTEwZGM4MzMzNDlmZDY0NWRiZGRhOGFiMGQ2YmQ4Njk2NmJjMDhjNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg3Miw3ICs4NzIsNiBAQAogCQk0NDQz
QUUzMzE2RTE4OEQ5MDA3NkYxMTAgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBF
NkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTQ1MTUzOUI5MTJEQzk5NDUw
MEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ3M0RBNEE0NzY0QzQ1RkU4NzFC
MDQ4NSAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE2OTk0OEVERTY4RDQwNTRCMDFFRjc5NyAvKiBEZWZp
bmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQk0QkFBMDdDRUI4MUY0OUEyOTZFMDIyMDMgLyogV2FzbVNpZ25hdHVy
ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMwQTVGNDAzRjExQzRGNTk5Q0Q1OTZENSAvKiBXYXNtU2lnbmF0dXJlSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyMEQ5OUYxMjM4
OENDODEwMDA1MDlBMyAvKiBHZXRCeVZhbEhpc3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMEQ5OUYwMjM4OENDNzgwMDA1MDlBMyAvKiBHZXRC
eVZhbEhpc3RvcnkuaCAqLzsgfTsKIAkJNTIxMTMxRjcxRjgyQkYxNDAwN0NDRUVFIC8qIFBvbHlQ
cm90b0FjY2Vzc0NoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjExMzFGNjFGODJCRjExMDA3Q0NFRUUgLyogUG9seVByb3RvQWNjZXNzQ2hhaW4u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MjEz
MjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMTMyMjQ0MUVDQkNFODIw
MEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICovOyB9OwpAQCAtMTY1OSw3ICsx
NjU4LDYgQEAKIAkJQUQ1QzM2RUIxRjc1QUQ3MzAwMEJDQUFGIC8qIEpTV2ViQXNzZW1ibHkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFERDA5QUYzMUY2
MjQ4MkUwMDEzMTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ1QzM2RUMxRjc1QUQ3QzAwMEJDQUFGIC8qIFdh
c21Ub0pTLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
REQwOUFFRTFGNUY2MjNGMDAxMzEzQzIgLyogV2FzbVRvSlMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDVDMzZFRjFGN0EyNjNBMDAwQkNBQUYg
LyogV2FzbU1lbW9yeU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUFENzQzOEMw
MUUwNDU3QTQwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2Fz
bVNpZ25hdHVyZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUFEN0I0QjJFMUZBM0UyOTgwMEM5REY3OSAvKiBXYXNtTmFtZVNlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEN0I0QjJEMUZBM0Uy
ODYwMEM5REY3OSAvKiBXYXNtTmFtZVNlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vh
a0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDhGRjM5ODFF
QjVCREIyMDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2Fz
bUluZGV4T3JOYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTM3NjgsNyArMzc2Niw2IEBACiAJCTJBRDg5MzI5MTdFMzg2OEYwMDY2ODI3NiAv
KiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SGVhcEl0ZXJhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBREZB
MjYyMThFRjM1NDAwMDRGOUZDQyAvKiBHQ0xvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR0NMb2dnaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzAzMjE3NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NvdXJjZUNvZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMzBBNUY0MDNGMTFDNEY1OTlDRDU5NkQ1IC8qIFdhc21TaWduYXR1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TaWduYXR1cmVJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNzcwQzRGMjdCOTRDRTQw
MDMwODA5MSAvKiBUZW1wb3JhbFBsYWluRGF0ZUNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBvcmFsUGxhaW5EYXRlQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE3NzBDNTAyN0I5NENFNDAwMzA4MDkxIC8qIFRlbXBv
cmFsUGxhaW5EYXRlQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGVtcG9yYWxQbGFpbkRhdGVDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMxNzcwQzUxMjdCOTRDRTQwMDMwODA5MSAvKiBUZW1wb3JhbFBsYWlu
RGF0ZVByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3Jh
bFBsYWluRGF0ZVByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTA2
Miw4ICs1MDU5LDYgQEAKIAkJQUQ1QzM2RTQxRjY5RUM4QjAwMEJDQUFGIC8qIFdhc21UYWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQUQ1QzM2RUUxRjdBMjYyOTAwMEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21NZW1vcnlNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFE
NUMzNkYwMUY3QTI2QkYwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUFENzQzOEJFMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtU2lnbmF0dXJlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21TaWduYXR1cmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBRDc0MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25h
dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtU2lnbmF0dXJlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEN0I0QjJEMUZBM0UyODYwMEM5REY3OSAv
KiBXYXNtTmFtZVNlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Fz
bU5hbWVTZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEODZBOTNEMUFB
NEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYWtHQ01hcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9XYXNtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEpTVG9XYXNtLmg7IHBhdGggPSBqcy9KU1RvV2FzbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzQ2OCw5ICs3NDYzLDYgQEAKIAkJCQlFM0EwNTMxNzIxMzQyQjY2MDAyMkVD
MTQgLyogV2FzbVNlY3Rpb25QYXJzZXIuY3BwICovLAogCQkJCUUzQTA1MzE4MjEzNDJCNjcwMDIy
RUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oICovLAogCQkJCTUzRjQwRTg0MUQ1OEY5NzcwMDk5
QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKLQkJCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEg
LyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCi0JCQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8q
IFdhc21TaWduYXR1cmUuaCAqLywKLQkJCQkzMEE1RjQwM0YxMUM0RjU5OUNENTk2RDUgLyogV2Fz
bVNpZ25hdHVyZUlubGluZXMuaCAqLywKIAkJCQkxNEFCMEM5MjIzMTc0N0I3MDAwMjUwQkMgLyog
V2FzbVNsb3dQYXRocy5jcHAgKi8sCiAJCQkJMTRBQjBDOTMyMzE3NDdCNzAwMDI1MEJDIC8qIFdh
c21TbG93UGF0aHMuaCAqLywKIAkJCQlFMzNCQkUwNzI1QkZBMDNDMDA1MzY5MEYgLyogV2FzbVN0
cmVhbWluZ0NvbXBpbGVyLmNwcCAqLywKQEAgLTExMjY3LDggKzExMjU5LDYgQEAKIAkJCQk1MzEz
NzRCRDFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
QTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTNGNDBFODUxRDU4Rjk3NzAwOTlBMUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUu
aCBpbiBIZWFkZXJzICovLAotCQkJCTRCQUEwN0NFQjgxRjQ5QTI5NkUwMjIwMyAvKiBXYXNtU2ln
bmF0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzQkJFMDkyNUJGQTA0MTAwNTM2
OTBGIC8qIFdhc21TdHJlYW1pbmdDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNBMDUz
MUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJlYW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzQzczQTkxMjVCRkE3M0IwMEVGRTMwMyAvKiBXYXNtU3RyZWFtaW5nUGxhbi5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggMDUwNjljNTQ4OTI0
OGE3ZDAyYzU3NmQwMGI5MzEyMTZhNDAzZWEyNi4uMzM0NTI4OTE3MjgzNDE0ZGQ0MzkzY2M3Njgz
N2ZlNDI5NThlYTUzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMTEwMyw3ICsx
MTAzLDcgQEAgd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKIHdhc20vV2FzbVBhZ2VDb3VudC5jcHAK
IHdhc20vV2FzbVBsYW4uY3BwCiB3YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcAotd2FzbS9XYXNt
U2lnbmF0dXJlLmNwcAord2FzbS9XYXNtVHlwZURlZmluaXRpb24uY3BwCiB3YXNtL1dhc21TbG93
UGF0aHMuY3BwCiB3YXNtL1dhc21TdHJlYW1pbmdDb21waWxlci5jcHAKIHdhc20vV2FzbVN0cmVh
bWluZ1BhcnNlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVEdW1wZXIuY3BwCmluZGV4IDA4YTIzNTgwNDRmZDYzNTk3MDMyM2IwMTJjOWM4N2UzOTVl
M2U2OTguLmQ1NGM3NGZjNjNjNjUwZTA4ZDc0ZjQ3OTdjOTExMWQzNTYyNjc2YmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcApAQCAt
MzcsNyArMzcsNyBAQAogI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5o
IgogI2luY2x1ZGUgIldhc21HZW5lcmF0b3JUcmFpdHMuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxl
SW5mb3JtYXRpb24uaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1
ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTM0OSw5ICszNDksOSBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyOjpkdW1wQmxvY2soRnVuY3Rpb25D
b2RlQmxvY2tHZW5lcmF0b3IqIGJsb2NrLCBjb25zdCBNb2R1bGVJbgogICAgIG91dC5wcmludCht
YWtlU3RyaW5nKEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbW9kdWxlSW5mb3JtYXRp
b24ubmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkpOwogCiAgICAgY29uc3Qg
YXV0byYgZnVuY3Rpb24gPSBtb2R1bGVJbmZvcm1hdGlvbi5mdW5jdGlvbnNbYmxvY2stPmZ1bmN0
aW9uSW5kZXgoKV07Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJ
bmZvcm1hdGlvbi5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tibG9jay0+ZnVuY3Rp
b25JbmRleCgpXTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgIG91dC5wcmludCgiIDogIiwgc2ln
bmF0dXJlLCAiXG4iKTsKKyAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRp
b24uaW50ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2VzW2Jsb2NrLT5mdW5jdGlvbkluZGV4KCldOwor
ICAgIGNvbnN0IGF1dG8mIHR5cGVEZWZpbml0aW9uID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlw
ZUluZGV4KTsKKyAgICBvdXQucHJpbnQoIiA6ICIsIHR5cGVEZWZpbml0aW9uLCAiXG4iKTsKICAg
ICBvdXQucHJpbnQoIndhc20gc2l6ZTogIiwgZnVuY3Rpb24uZGF0YS5zaXplKCksICIgYnl0ZXNc
biIpOwogCiAgICAgb3V0LnByaW50ZigKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IGI5NjJiMjhjZTYyZjJjODE3YzY0MWY3YmY5NDEwZTU2
Y2YxMDcwMjAuLjRlNTllOWY5MDc3OTY1NWY3NDE1NWI4OTViZDVlMzhlMDE0NzMxZjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgpAQCAtMTY4
OSw3ICsxNjg5LDcgQEAgb3AgOmNhbGxfbm9fdGxzLAogb3AgOmNhbGxfaW5kaXJlY3QsCiAgICAg
YXJnczogewogICAgICAgICBmdW5jdGlvbkluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IHNpZ25hdHVyZUluZGV4OiB1bnNpZ25lZCwKKyAgICAgICAgdHlwZUluZGV4OiB1bnNpZ25lZCwK
ICAgICAgICAgc3RhY2tPZmZzZXQ6IHVuc2lnbmVkLAogICAgICAgICBudW1iZXJPZlN0YWNrQXJn
czogdW5zaWduZWQsCiAgICAgICAgIHRhYmxlSW5kZXg6IHVuc2lnbmVkLApAQCAtMTY5OCw3ICsx
Njk4LDcgQEAgb3AgOmNhbGxfaW5kaXJlY3QsCiBvcCA6Y2FsbF9pbmRpcmVjdF9ub190bHMsCiAg
ICAgYXJnczogewogICAgICAgICBmdW5jdGlvbkluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAg
ICAgIHNpZ25hdHVyZUluZGV4OiB1bnNpZ25lZCwKKyAgICAgICAgdHlwZUluZGV4OiB1bnNpZ25l
ZCwKICAgICAgICAgc3RhY2tPZmZzZXQ6IHVuc2lnbmVkLAogICAgICAgICBudW1iZXJPZlN0YWNr
QXJnczogdW5zaWduZWQsCiAgICAgICAgIHRhYmxlSW5kZXg6IHVuc2lnbmVkLApAQCAtMTcwNyw3
ICsxNzA3LDcgQEAgb3AgOmNhbGxfaW5kaXJlY3Rfbm9fdGxzLAogb3AgOmNhbGxfcmVmLAogICAg
IGFyZ3M6IHsKICAgICAgICAgZnVuY3Rpb25SZWZlcmVuY2U6IFZpcnR1YWxSZWdpc3RlciwKLSAg
ICAgICAgc2lnbmF0dXJlSW5kZXg6IHVuc2lnbmVkLAorICAgICAgICB0eXBlSW5kZXg6IHVuc2ln
bmVkLAogICAgICAgICBzdGFja09mZnNldDogdW5zaWduZWQsCiAgICAgICAgIG51bWJlck9mU3Rh
Y2tBcmdzOiB1bnNpZ25lZCwKICAgICB9CkBAIC0xNzE1LDcgKzE3MTUsNyBAQCBvcCA6Y2FsbF9y
ZWYsCiBvcCA6Y2FsbF9yZWZfbm9fdGxzLAogICAgIGFyZ3M6IHsKICAgICAgICAgZnVuY3Rpb25S
ZWZlcmVuY2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgc2lnbmF0dXJlSW5kZXg6IHVuc2ln
bmVkLAorICAgICAgICB0eXBlSW5kZXg6IHVuc2lnbmVkLAogICAgICAgICBzdGFja09mZnNldDog
dW5zaWduZWQsCiAgICAgICAgIG51bWJlck9mU3RhY2tBcmdzOiB1bnNpZ25lZCwKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCBjNGRkNDA2
NjI1NTY1NWQ5YjBjNjU1ODkxMjU4ZWRmZTM1NmY2MjJmLi5iMDBhNzY3ZGMyNzk2ZTAzMmM4MmRh
ZDkwMzk3NmJhMThiZTlhNTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgKQEAgLTU0Nyw2ICs1NDcsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFz
dE1lbW9yeSgpOwogICAgIHYoQm9vbCwgdXNlVGVtcG9yYWwsIGZhbHNlLCBOb3JtYWwsICJFeHBv
c2UgdGhlIFRlbXBvcmFsIG9iamVjdC4iKSBcCiAgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseVRo
cmVhZGluZywgdHJ1ZSwgTm9ybWFsLCAiQWxsb3cgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIHdhc20g
dGhyZWFkaW5nIHNwZWMuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0
aW9uUmVmZXJlbmNlcywgZmFsc2UsIE5vcm1hbCwgIkFsbG93IGZ1bmN0aW9uIHR5cGVzIGZyb20g
dGhlIHdhc20gdHlwZWQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzcGVjLiIpIFwKKyAgICB2KEJvb2ws
IHVzZVdlYkFzc2VtYmx5R0MsIGZhbHNlLCBOb3JtYWwsICJBbGxvdyBnYyB0eXBlcyBmcm9tIHRo
ZSB3YXNtIGdjIHByb3Bvc2FsLiIpIFwKICAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5RXhjZXB0
aW9ucywgdHJ1ZSwgTm9ybWFsLCAiQWxsb3cgdGhlIG5ldyBzZWN0aW9uIGFuZCBpbnN0cnVjdGlv
bnMgZnJvbSB0aGUgd2FzbSBleGNlcHRpb24gaGFuZGxpbmcgc3BlYy4iKSBcCiAgICAgdihCb29s
LCB1c2VXZWJBc3NlbWJseUJyYW5jaEhpbnRzLCB0cnVlLCBOb3JtYWwsICJBbGxvdyB0aGUgbmV3
IHNlY3Rpb24gZnJvbSB0aGUgd2FzbSBicmFuY2ggaGludGluZyBzcGVjLiIpIFwKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKaW5kZXgg
MmQ3MjlhZTI1ZWQzMjRhNTcyYzdlZDNkZDRmMGZiNDJiYWE1MzJiMy4uMDFkYjI4YmIzYjMyYzcz
MTVmYmFhZmQzOWUzODZkN2FlMWEyOGExNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCkBAIC01NSw4ICs1NSw4IEBACiAjaW5jbHVk
ZSAiV2FzbU9TUkVudHJ5RGF0YS5oIgogI2luY2x1ZGUgIldhc21PcGNvZGVPcmlnaW4uaCIKICNp
bmNsdWRlICJXYXNtT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlv
bklubGluZXMuaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTIxOCwxOSArMjE4LDE5IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHNwZWNpYWwgPSBudWxscHRyOwogICAgICAgICB9CiAKLSAgICAgICAgU2ln
bmF0dXJlQXJnQ291bnQgYnJhbmNoVGFyZ2V0QXJpdHkoKSBjb25zdAorICAgICAgICBGdW5jdGlv
bkFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0dXJuVHlwZS0+YXJndW1lbnRDb3VudCgpOwotICAgICAgICAgICAgcmV0dXJuIHJl
dHVyblR5cGUtPnJldHVybkNvdW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5
cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAg
ICByZXR1cm4gcmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50
KCk7CiAgICAgICAgIH0KIAogICAgICAgICBUeXBlIGJyYW5jaFRhcmdldFR5cGUodW5zaWduZWQg
aSkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGkgPCBicmFuY2hUYXJnZXRB
cml0eSgpKTsKICAgICAgICAgICAgIGlmIChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3Ap
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGUtPmFyZ3VtZW50KGkpOwotICAgICAg
ICAgICAgcmV0dXJuIHJldHVyblR5cGUtPnJldHVyblR5cGUoaSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudFR5cGUo
aSk7CisgICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+
KCktPnJldHVyblR5cGUoaSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNvbnZlcnRUcnlU
b0NhdGNoKHVuc2lnbmVkIHRyeUVuZENhbGxTaXRlSW5kZXgsIFR5cGVkVG1wIGV4Y2VwdGlvbikK
QEAgLTMyMywxMSArMzIzLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWlsKF9f
VkFfQVJHU19fKTsgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKLSAgICBBaXJJUkdl
bmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBJbnRlcm5h
bEZ1bmN0aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwg
dW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBjb25zdCBTaWduYXR1cmUmLCB1
bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSk7CisgICAgQWlySVJHZW5lcmF0b3Io
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBCMzo6UHJvY2VkdXJlJiwgSW50ZXJuYWxGdW5jdGlv
biosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIE1lbW9yeU1vZGUsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiwgY29uc3QgVHlwZURlZmluaXRpb24mLCB1bnNp
Z25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSk7CiAKICAgICB2b2lkIGZpbmFsaXplRW50
cnlwb2ludHMoKTsKIAotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFy
Z3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVHlwZURlZmluaXRpb24mKTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAg
RXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgdWludDY0X3QpOwogICAgIEV4cHJlc3Np
b25UeXBlIGFkZENvbnN0YW50KEJhc2ljQmxvY2sqLCBUeXBlLCB1aW50NjRfdCk7CkBAIC0zOTMs
OCArMzkzLDggQEAgcHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJik7CiAKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRUcnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgQ29udHJvbFR5cGUmIHJlc3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKLSAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3Qm
KTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFj
aGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xU
eXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYs
IFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlv
bkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYp
OwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsKFN0YWNr
JiwgQ29udHJvbFR5cGUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGREZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBl
Jik7CkBAIC00MTEsMTIgKzQxMSwxMiBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUsIGNvbnN0IFN0YWNrJikg
eyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBDYWxscwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwot
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNp
Z25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYWxsUmVmKGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFR5cGVE
ZWZpbml0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVz
dWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGly
ZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25zdCBUeXBlRGVmaW5pdGlvbiYs
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7Ci0gICAg
UGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChUeXBlZFRt
cCBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSwgY29uc3QgU2lnbmF0
dXJlJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYpOwot
ICAgIHN0ZDo6cGFpcjxCMzo6UGF0Y2hwb2ludFZhbHVlKiwgUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwg
Y29uc3QgU2lnbmF0dXJlJiwgY29uc3QgUmVzdWx0TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9y
PFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0cmFpbmVkVG1wPiBleHRyYUFyZ3MgPSB7IH0p
OworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwo
VHlwZWRUbXAgY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0
IFR5cGVEZWZpbml0aW9uJiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVz
dWx0TGlzdCYpOworICAgIHN0ZDo6cGFpcjxCMzo6UGF0Y2hwb2ludFZhbHVlKiwgUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRDYWxsUGF0Y2hwb2ludChC
YXNpY0Jsb2NrKiwgY29uc3QgVHlwZURlZmluaXRpb24mLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1
bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+
IGV4dHJhQXJncyA9IHsgfSk7CiAKICAgICBQYXJ0aWFsUmVzdWx0IGFkZFNoaWZ0KFR5cGUsIEIz
OjpBaXI6Ok9wY29kZSwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlIHNoaWZ0
LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKICAgICBQYXJ0aWFsUmVzdWx0IGFkZEludGVnZXJT
dWIoQjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSBsaHMsIEV4cHJlc3Npb25UeXBlIHJo
cywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CkBAIC01NDEsOSArNTQxLDkgQEAgcHJpdmF0ZToK
IAogICAgIFJlc3VsdExpc3QgdG1wc0ZvclNpZ25hdHVyZShCbG9ja1NpZ25hdHVyZSBzaWduYXR1
cmUpCiAgICAgewotICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdChzaWduYXR1cmUtPnJldHVybkNv
dW50KCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5yZXR1
cm5Db3VudCgpOyArK2kpCi0gICAgICAgICAgICByZXN1bHRbaV0gPSB0bXBGb3JUeXBlKHNpZ25h
dHVyZS0+cmV0dXJuVHlwZShpKSk7CisgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0KHNpZ25hdHVy
ZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCkpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+
cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAgICAgcmVzdWx0W2ldID0gdG1wRm9yVHlwZShz
aWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTkzMyw3ICs5MzMsNyBAQCB2b2lkIEFpcklS
R2VuZXJhdG9yOjpyZXN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShCYXNpY0Jsb2NrKiBibG9jaywg
VHlwZWRUbXAgaW5zdAogICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAo
KSwgaW5zdGFuY2UpOwogfQogCi1BaXJJUkdlbmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1cmUmIHByb2NlZHVyZSwgSW50ZXJu
YWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUgbW9kZSwgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKQorQWlySVJHZW5lcmF0b3I6OkFp
cklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6UHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBNZW1vcnlNb2RlIG1v
ZGUsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXAsIGNvbnN0IFR5
cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplKQogICAgIDogbV9pbmZvKGluZm8pCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fZnVu
Y3Rpb25JbmRleChmdW5jdGlvbkluZGV4KQpAQCAtMTAzOSw5ICsxMDM5LDkgQEAgQWlySVJHZW5l
cmF0b3I6OkFpcklSR2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBCMzo6
UHJvY2VkdXJlJiBwcm8KICAgICBtX2N1cnJlbnRCbG9jayA9IG1fbWFpbkVudHJ5cG9pbnRTdGFy
dDsKIAogICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKLSAgICBtX2xvY2Fscy5ncm93KHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgVHlwZSB0eXBlID0gc2ln
bmF0dXJlLmFyZ3VtZW50KGkpOworICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLmFzPEZ1bmN0
aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQo
KTsgKytpKSB7CisgICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25h
dHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpOwogICAgICAgICBtX2xvY2Fsc1tpXSA9IHRtcEZvclR5
cGUodHlwZSk7CiAgICAgfQogCkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBBaXJJUkdlbmVyYXRvcjo6
QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1
cmUmIHBybwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3YXNtQ2FsbEluZm8ucGFyYW1z
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIEIzOjpWYWx1ZVJlcCBsb2NhdGlvbiA9IHdhc21DYWxs
SW5mby5wYXJhbXNbaV07CiAgICAgICAgIEFyZyBhcmcgPSBsb2NhdGlvbi5pc1JlZygpID8gQXJn
KFRtcChsb2NhdGlvbi5yZWcoKSkpIDogQXJnOjphZGRyKFRtcChHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciksIGxvY2F0aW9uLm9mZnNldEZyb21GUCgpKTsKLSAgICAgICAgc3dpdGNoIChzaWdu
YXR1cmUuYXJndW1lbnQoaSkua2luZCkgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpLmtpbmQpIHsKICAgICAgICAgY2Fz
ZSBUeXBlS2luZDo6STMyOgogICAgICAgICAgICAgYXBwZW5kKE1vdmUzMiwgYXJnLCBtX2xvY2Fs
c1tpXSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTExMjcsMTYgKzExMjcsMTYgQEAgdm9pZCBB
aXJJUkdlbmVyYXRvcjo6ZmluYWxpemVFbnRyeXBvaW50cygpCiAKIEIzOjpUeXBlIEFpcklSR2Vu
ZXJhdG9yOjp0b0IzUmVzdWx0VHlwZShCbG9ja1NpZ25hdHVyZSByZXR1cm5UeXBlKQogewotICAg
IGlmIChyZXR1cm5UeXBlLT5yZXR1cm5zVm9pZCgpKQorICAgIGlmIChyZXR1cm5UeXBlLT5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuc1ZvaWQoKSkKICAgICAgICAgcmV0dXJuIEIzOjpW
b2lkOwogCi0gICAgaWYgKHJldHVyblR5cGUtPnJldHVybkNvdW50KCkgPT0gMSkKLSAgICAgICAg
cmV0dXJuIHRvQjNUeXBlKHJldHVyblR5cGUtPnJldHVyblR5cGUoMCkpOworICAgIGlmIChyZXR1
cm5UeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKSA9PSAxKQorICAg
ICAgICByZXR1cm4gdG9CM1R5cGUocmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCkt
PnJldHVyblR5cGUoMCkpOwogCiAgICAgYXV0byByZXN1bHQgPSBtX3R1cGxlTWFwLmVuc3VyZShy
ZXR1cm5UeXBlLCBbJl0gewogICAgICAgICBWZWN0b3I8QjM6OlR5cGU+IHJlc3VsdDsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJldHVyblR5cGUtPnJldHVybkNvdW50KCk7ICsr
aSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9CM1R5cGUocmV0dXJuVHlwZS0+cmV0dXJu
VHlwZShpKSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmV0dXJuVHlwZS0+
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQodG9CM1R5cGUocmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+
KCktPnJldHVyblR5cGUoaSkpKTsKICAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGRUdXBsZShXVEZN
b3ZlKHJlc3VsdCkpOwogICAgIH0pOwogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwpAQCAtMTI4OCw5ICsxMjg4LDkgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQm90dG9tKEJh
c2ljQmxvY2sqIGJsb2NrLCBUeXBlIHR5cGUpIC0+IEV4cHJlc3Npb25UeXBlCiAgICAgcmV0dXJu
IGFkZENvbnN0YW50KHR5cGUsIDApOwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRBcmd1
bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0
dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9sb2NhbHMuc2l6
ZSgpID09IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOyAvLyBXZSBoYW5kbGUgYXJndW1lbnRz
IGluIHRoZSBwcm9sb2d1ZQorICAgIFJFTEVBU0VfQVNTRVJUKG1fbG9jYWxzLnNpemUoKSA9PSBz
aWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSk7IC8vIFdl
IGhhbmRsZSBhcmd1bWVudHMgaW4gdGhlIHByb2xvZ3VlCiAgICAgcmV0dXJuIHsgfTsKIH0KIApA
QCAtMTMxMCw4ICsxMzEwLDggQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGkKIHsKICAgICAvLyBG
SVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODUwNj4uCiAgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5VHlwZWRGdW5j
dGlvblJlZmVyZW5jZXMoKSkgewotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1faW5mby5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwot
ICAgICAgICByZXN1bHQgPSB0bXBGb3JUeXBlKFR5cGUgeyBUeXBlS2luZDo6UmVmLCBOdWxsYWJs
ZTo6Tm8sIHNpZ25hdHVyZUluZGV4IH0pOworICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0g
bV9pbmZvLnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOworICAgICAgICBy
ZXN1bHQgPSB0bXBGb3JUeXBlKFR5cGUgeyBUeXBlS2luZDo6UmVmLCBOdWxsYWJsZTo6Tm8sIHR5
cGVJbmRleCB9KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0gdG1wRm9yVHlwZShUeXBl
czo6RnVuY3JlZik7CiAgICAgZW1pdENDYWxsKCZvcGVyYXRpb25XYXNtUmVmRnVuYywgcmVzdWx0
LCBpbnN0YW5jZVZhbHVlKCksIGFkZENvbnN0YW50KFR5cGVzOjpJMzIsIGluZGV4KSk7CkBAIC0x
NjI0LDcgKzE2MjQsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3Qg
aW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYQogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2Rl
OjpQb3J0YWJsZToKLSAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okds
b2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKKyAgICAgICAgQVNTRVJUKGds
b2JhbC5tdXRhYmlsaXR5ID09IFdhc206Ok11dGFiaWxpdHk6Ok11dGFibGUpOwogICAgICAgICBp
ZiAoQXJnOjppc1ZhbGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6V2lkdGg2NCkpCiAgICAgICAgICAg
ICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHRlbXApOwogICAgICAgICBl
bHNlIHsKQEAgLTE2NjQsNyArMTY2NCw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OnNldEdsb2Jh
bCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSCiAgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZToK
LSAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0
aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKKyAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmls
aXR5ID09IFdhc206Ok11dGFiaWxpdHk6Ok11dGFibGUpOwogICAgICAgICBpZiAoQXJnOjppc1Zh
bGlkQWRkckZvcm0ob2Zmc2V0LCBCMzo6V2lkdGg2NCkpCiAgICAgICAgICAgICBhcHBlbmQoTW92
ZSwgQXJnOjphZGRyKHRlbXAsIG9mZnNldCksIHRlbXApOwogICAgICAgICBlbHNlIHsKQEAgLTMy
MjksNyArMzIyOSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRyeShCbG9ja1NpZ25hdHVy
ZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29uCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBTdGFjayYgY3VycmVudFN0YWNrLCBDb250
cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0
IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xU
eXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAg
dW5pZnlWYWx1ZXNXaXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhLnJlc3VsdHMpOwogICAgIGFw
cGVuZChKdW1wKTsKQEAgLTMyNDUsMTEgKzMyNDUsMTEgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2F0Y2hBbGwoU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBh
cnQKICAgICByZXR1cm4gYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKGRhdGEpOwogfQogCi1hdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVz
dWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBUeXBl
RGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVz
dWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFRtcCBidWZmZXIgPSBlbWl0Q2F0Y2hJbXBs
KENhdGNoS2luZDo6Q2F0Y2gsIGRhdGEsIGV4Y2VwdGlvbkluZGV4KTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAg
IFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50
KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWdu
YXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKICAgICAgICAgVHlwZWRUbXAgdG1wID0gdG1wRm9y
VHlwZSh0eXBlKTsKICAgICAgICAgZW1pdExvYWQoYnVmZmVyLCBpICogc2l6ZW9mKHVpbnQ2NF90
KSwgdG1wKTsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQodG1wKTsKQEAgLTM0MTksNyArMzQxOSw3
IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sRGF0YSYgZGF0
YSwgY29uc3QgU3RhY2smIHJldHVyblZhbHVlCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQo
cmVwLmlzUmVnKCkpOwotICAgICAgICBpZiAoZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShp
KS5pc0kzMigpKQorICAgICAgICBpZiAoZGF0YS5zaWduYXR1cmUoKS0+YXM8RnVuY3Rpb25TaWdu
YXR1cmU+KCktPnJldHVyblR5cGUoaSkuaXNJMzIoKSkKICAgICAgICAgICAgIGFwcGVuZChNb3Zl
MzIsIHRtcCwgdG1wKTsKICAgICAgICAgcmV0dXJuQ29uc3RyYWludHMuYXBwZW5kKENvbnN0cmFp
bmVkVG1wKHRtcCwgd2FzbUNhbGxJbmZvLnJlc3VsdHNbaV0pKTsKICAgICB9CkBAIC0zNTU1LDE3
ICszNTU1LDE3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29u
dHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlCiAKICAgICBpZiAoZGF0YS5ibG9j
a1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApIHsKICAgICAgICAgbV9vdXRlckxvb3BzLnJlbW92
ZUxhc3QoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJl
KCktPnJldHVybkNvdW50KCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS5zaWduYXR1cmUoKS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50
KCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGkgPCBleHByZXNzaW9uU3RhY2suc2l6ZSgpKQog
ICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmFwcGVuZChleHBy
ZXNzaW9uU3RhY2tbaV0pOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgVHlw
ZSB0eXBlID0gZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKTsKKyAgICAgICAgICAgICAg
ICBUeXBlIHR5cGUgPSBkYXRhLnNpZ25hdHVyZSgpLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+
cmV0dXJuVHlwZShpKTsKICAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQodHlwZSwgYWRkQm90dG9tKG1fY3VycmVudEJsb2NrLCB0
eXBlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsg
KytpKQotICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0
QW5kQXBwZW5kKGRhdGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSksIGRhdGEucmVzdWx0c1tp
XSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5h
czxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAgICAg
ZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEuc2ln
bmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpLCBkYXRhLnJl
c3VsdHNbaV0pOwogICAgIH0KIAogICAgIC8vIFRvcExldmVsIGRvZXMgbm90IGhhdmUgYW55IGNv
ZGUgYWZ0ZXIgdGhpcyBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBlbWl0IGEgcmV0dXJuIGhl
cmUuCkBAIC0zNTc1LDcgKzM1NzUsNyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1Vu
cmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZQogICAgIHJl
dHVybiB7IH07CiB9CiAKLXN0ZDo6cGFpcjxCMzo6UGF0Y2hwb2ludFZhbHVlKiwgUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZT4gQWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludChCYXNp
Y0Jsb2NrKiBibG9jaywgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFJlc3VsdExp
c3QmIHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJh
aW5lZFRtcD4gcGF0Y2hBcmdzKQorc3RkOjpwYWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlPiBBaXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50
KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBjb25z
dCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0
b3I8Q29uc3RyYWluZWRUbXA+IHBhdGNoQXJncykKIHsKICAgICBhdXRvKiBwYXRjaHBvaW50ID0g
YWRkUGF0Y2hwb2ludCh0b0IzUmVzdWx0VHlwZSgmc2lnbmF0dXJlKSk7CiAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cy53cml0ZXNQaW5uZWQgPSB0cnVlOwpAQCAtMzYwNSwxNCArMzYwNSwxNCBAQCBz
dGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+
IEFpcklSR2VuZXJhdG9yOjplbWl0QwogICAgIHJldHVybiB7IHBhdGNocG9pbnQsIGV4Y2VwdGlv
bkhhbmRsZSB9OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFR5
cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJl
c3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBBU1NFUlQoc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKHNpZ25hdHVy
ZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgp
KTsKIAogICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgcmVzdWx0cy5hcHBl
bmQodG1wRm9yVHlwZShzaWduYXR1cmUucmV0dXJuVHlwZShpKSkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNv
dW50KCk7ICsraSkKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQodG1wRm9yVHlwZShzaWduYXR1cmUu
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVyblR5cGUoaSkpKTsKIAogICAgIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiogdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMgPSAmbV91bmxp
bmtlZFdhc21Ub1dhc21DYWxsczsKIApAQCAtMzcwOCwxMCArMzcwOCwxMCBAQCBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6
OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNp
Z25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0
cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRp
YWxSZXN1bHQKIHsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVJbmRleCA9IGFyZ3MudGFrZUxh
c3QoKTsKLSAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUo
KSk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1l
bnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKICAgICBBU1NFUlQobV9pbmZvLnRhYmxlQ291bnQo
KSA+IHRhYmxlSW5kZXgpOwogICAgIEFTU0VSVChtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLnR5
cGUoKSA9PSBUYWJsZUVsZW1lbnRUeXBlOjpGdW5jcmVmKTsKIApAQCAtMzc2MSw3ICszNzYxLDcg
QEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKIAogICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0
IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGlu
aXRpYWxpemVkLgogICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMs
IHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlk
SW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIx
MAotICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkxvYWQgY29kZWdlbiBh
c3N1bWVzIGk2NCIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uOjp0eXBlSW5kZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNv
ZGVnZW4gYXNzdW1lcyBpNjQiKTsKIAogICAgICAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyB3YXN0
ZWZ1bCB0byBkbyB0d28gY2hlY2tzIGp1c3QgZm9yIGEgbmljZXIgZXJyb3IgbWVzc2FnZS4KICAg
ICAgICAgLy8gV2Ugc2hvdWxkIG1vdmUganVzdCB0byB1c2UgYSBzaW5nbGUgYnJhbmNoIGFuZCB0
aGVuIGZpZ3VyZSBvdXQgd2hhdApAQCAtMzc3MCwxNCArMzc3MCwxNCBAQCBhdXRvIEFpcklSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYQogICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjphZGRyKGNhbGxlZVNpZ25hdHVy
ZUluZGV4LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZlNpZ25hdHVyZUlu
ZGV4KCkpLCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CiAKICAgICAgICAgZW1pdENoZWNrKFsmXSB7
Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KFNpZ25hdHVyZTo6aW52YWxpZEluZGV4ID09IDAp
OworICAgICAgICAgICAgc3RhdGljX2Fzc2VydCghVHlwZURlZmluaXRpb246OmludmFsaWRJbmRl
eCwgIiIpOwogICAgICAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDY0LCBudWxscHRyLCBB
cmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBjYWxsZWVTaWduYXR1cmVJbmRleCwg
Y2FsbGVlU2lnbmF0dXJlSW5kZXgpOwogICAgICAgICB9LCBbPSwgdGhpc10gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAgICAgICAg
ICAgdGhpcy0+ZW1pdFRocm93RXhjZXB0aW9uKGppdCwgRXhjZXB0aW9uVHlwZTo6TnVsbFRhYmxl
RW50cnkpOwogICAgICAgICB9KTsKIAogICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNp
Z25hdHVyZUluZGV4ID0gZzY0KCk7Ci0gICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmJpZ0ltbShT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpLCBleHBlY3RlZFNpZ25hdHVyZUlu
ZGV4KTsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1tKFR5cGVJbmZvcm1hdGlvbjo6
Z2V0KHNpZ25hdHVyZSkpLCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgZW1pdENo
ZWNrKFsmXSB7CiAgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2g2NCwgbnVsbHB0ciwgQXJn
OjpyZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCksIGNhbGxlZVNpZ25hdHVyZUluZGV4
LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KTsKICAgICAgICAgfSwgWz0sIHRoaXNdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKQEAgLTM3
OTEsNyArMzc5MSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNp
Z25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hCiAgICAgcmV0dXJuIGVtaXRJ
bmRpcmVjdENhbGwoY2FsbGVlSW5zdGFuY2UsIGNhbGxlZUNvZGUsIHNpZ25hdHVyZSwgYXJncywg
cmVzdWx0cyk7CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExp
c3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENh
bGxSZWYoY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAg
IG1fbWFrZXNDYWxscyA9IHRydWU7CiAgICAgLy8gTm90ZTogY2FsbCByZWYgY2FuIGNhbGwgZWl0
aGVyIFdlYkFzc2VtYmx5RnVuY3Rpb24gb3IgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uIEJl
Y2F1c2UKQEAgLTM4MTksNyArMzgxOSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxS
ZWYoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwCiAgICAg
cmV0dXJuIGVtaXRJbmRpcmVjdENhbGwoY2FsbGVlSW5zdGFuY2UsIGNhbGxlZUNvZGUsIHNpZ25h
dHVyZSwgYXJncywgcmVzdWx0cyk7CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmVtaXRJbmRp
cmVjdENhbGwoVHlwZWRUbXAgY2FsbGVlSW5zdGFuY2UsIEV4cHJlc3Npb25UeXBlIGNhbGxlZUNv
ZGUsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5
cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFp
cklSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFR5cGVkVG1wIGNhbGxlZUluc3RhbmNlLCBF
eHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJl
LCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRz
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgYXV0byBjdXJyZW50SW5zdGFuY2UgPSBnNjQoKTsK
ICAgICBhcHBlbmQoTW92ZSwgaW5zdGFuY2VWYWx1ZSgpLCBjdXJyZW50SW5zdGFuY2UpOwpAQCAt
Mzg3Myw4ICszODczLDggQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChU
eXBlZFRtcCBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2EKICAgICBWZWN0b3I8Q29u
c3RyYWluZWRUbXA+IGV4dHJhQXJnczsKICAgICBleHRyYUFyZ3MuYXBwZW5kKGNhbGxlZUNvZGUp
OwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgp
OyArK2kpCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHRtcEZvclR5cGUoc2lnbmF0dXJlLnJldHVy
blR5cGUoaSkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFzPEZ1
bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgIHJlc3VsdHMu
YXBwZW5kKHRtcEZvclR5cGUoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1
cm5UeXBlKGkpKSk7CiAKICAgICBhdXRvIHBhaXIgPSBlbWl0Q2FsbFBhdGNocG9pbnQobV9jdXJy
ZW50QmxvY2ssIHNpZ25hdHVyZSwgcmVzdWx0cywgYXJncywgV1RGTW92ZShleHRyYUFyZ3MpKTsK
ICAgICBhdXRvKiBwYXRjaHBvaW50ID0gcGFpci5maXJzdDsKQEAgLTM5NDQsNyArMzk0NCw3IEBA
IGF1dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KICAgICByZXR1cm4g
QjM6Ok9yaWdpbigpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5j
dGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYgY29t
cGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1bmN0aW9uLCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtl
ZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1v
ZGUgbW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkKK0V4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFu
ZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0
IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUs
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMs
IGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBNZW1vcnlNb2RlIG1vZGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIFRpZXJVcENvdW50KiB0aWVyVXApCiB7CiAgICAgYXV0byByZXN1bHQg
PSBtYWtlVW5pcXVlPEludGVybmFsRnVuY3Rpb24+KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmgKaW5kZXggMGI4ZWY0MGEwZjY0MzM2MzQy
MzUwYTg1NWQ5NDFlYWEzYzEzYmU1ZS4uMGU3YjU1NWJjOGRhNzFhOWJlZDQ5ZjJmMzNmY2Q4NTJl
NjlhNGEwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2Vu
ZXJhdG9yLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBX
YXNtIHsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlv
bkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgsIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUFpcihDb21waWxhdGlv
bkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwg
TWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0
cik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCA1NzBkZjM2ZmIyNDlhZjkz
ZWUwOWU0NTVlZGNlZDAxMDUwMzlmZjliLi4zNzU0MjYxNTdkODhhZDM5NzkxNmMzZDE2MmVkZjcy
MGE4ZWJiNDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCkBAIC02Myw4ICs2Myw4IEBACiAjaW5jbHVkZSAiV2FzbU9TUkVudHJ5RGF0
YS5oIgogI2luY2x1ZGUgIldhc21PcGNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJXYXNtT3BlcmF0
aW9ucy5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Fz
bVRodW5rcy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKICNpbmNs
dWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0xMDMsMTQg
KzEwMywxNCBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh0eXBlICE9
IEJsb2NrVHlwZTo6VHJ5ICYmIHR5cGUgIT0gQmxvY2tUeXBlOjpDYXRjaCk7CiAgICAgICAgICAg
ICBpZiAodHlwZSAhPSBCbG9ja1R5cGU6OlRvcExldmVsKQotICAgICAgICAgICAgICAgIG1fc3Rh
Y2tTaXplIC09IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgICAgIG1f
c3RhY2tTaXplIC09IHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50
Q291bnQoKTsKIAogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQmxvY2tUeXBlOjpMb29wKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRk
PFZhbHVlPihQaGksIHRvQjNUeXBlKHNpZ25hdHVyZS0+YXJndW1lbnQoaSkpLCBvcmlnaW4pKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRkPFZhbHVlPihQaGksIHRvQjNUeXBlKHNpZ25hdHVy
ZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKSksIG9yaWdpbikpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAg
IHBoaXMuYXBwZW5kKHByb2MuYWRkPFZhbHVlPihQaGksIHRvQjNUeXBlKHNpZ25hdHVyZS0+cmV0
dXJuVHlwZShpKSksIG9yaWdpbikpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgp
OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRkPFZhbHVlPihQ
aGksIHRvQjNUeXBlKHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVyblR5
cGUoaSkpLCBvcmlnaW4pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMjMsOCAr
MTIzLDggQEAgcHVibGljOgogICAgICAgICAgICAgLCBtX3RyeVN0YXJ0KHRyeVN0YXJ0KQogICAg
ICAgICAgICAgLCBtX3RyeUNhdGNoRGVwdGgodHJ5RGVwdGgpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsr
aSkKLSAgICAgICAgICAgICAgICBwaGlzLmFwcGVuZChwcm9jLmFkZDxWYWx1ZT4oUGhpLCB0b0Iz
VHlwZShzaWduYXR1cmUtPnJldHVyblR5cGUoaSkpLCBvcmlnaW4pKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
LT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5h
ZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+cmV0dXJuVHlwZShpKSksIG9yaWdpbikpOwogICAgICAgICB9CiAKICAgICAgICAgQ29udHJv
bERhdGEoKQpAQCAtMTc3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKIAogICAgICAgICBCbG9ja1NpZ25h
dHVyZSBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogCi0gICAgICAg
IGJvb2wgaGFzTm9uVm9pZHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1
cm5zVm9pZCgpOyB9CisgICAgICAgIGJvb2wgaGFzTm9uVm9pZHJlc3VsdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuc1ZvaWQoKTsg
fQogCiAgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrRm9yQnJhbmNoKCkKICAgICAgICAg
ewpAQCAtMjExLDE5ICsyMTEsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgbV9leGNlcHRpb24g
PSBleGNlcHRpb247CiAgICAgICAgIH0KIAotICAgICAgICBTaWduYXR1cmVBcmdDb3VudCBicmFu
Y2hUYXJnZXRBcml0eSgpIGNvbnN0CisgICAgICAgIEZ1bmN0aW9uQXJnQ291bnQgYnJhbmNoVGFy
Z2V0QXJpdHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYmxvY2tUeXBlKCkg
PT0gQmxvY2tUeXBlOjpMb29wKQotICAgICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpOwotICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5yZXR1cm5D
b3VudCgpOworICAgICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25T
aWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NpZ25h
dHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7CiAgICAgICAgIH0K
IAogICAgICAgICBUeXBlIGJyYW5jaFRhcmdldFR5cGUodW5zaWduZWQgaSkgY29uc3QKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKGkgPCBicmFuY2hUYXJnZXRBcml0eSgpKTsKICAgICAg
ICAgICAgIGlmIChibG9ja1R5cGUoKSA9PSBCbG9ja1R5cGU6Okxvb3ApCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudChpKTsKLSAgICAgICAgICAgIHJldHVybiBt
X3NpZ25hdHVyZS0+cmV0dXJuVHlwZShpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWdu
YXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudFR5cGUoaSk7CisgICAgICAg
ICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5U
eXBlKGkpOwogICAgICAgICB9CiAKICAgICAgICAgdW5zaWduZWQgdHJ5U3RhcnQoKSBjb25zdApA
QCAtMzA1LDcgKzMwNSw3IEBAIHB1YmxpYzoKIAogICAgIEIzSVJHZW5lcmF0b3IoY29uc3QgTW9k
dWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0aW9uKiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwg
dW5zaWduZWQgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50Kik7CiAKLSAgICBQYXJ0
aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJl
Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNv
bnN0IFR5cGVEZWZpbml0aW9uJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwogICAgIEV4cHJlc3Npb25UeXBlIGFkZENvbnN0
YW50KFR5cGUsIHVpbnQ2NF90KTsKIApAQCAtMzcxLDggKzM3MSw4IEBAIHB1YmxpYzoKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRFbHNlVG9VbnJlYWNoYWJsZShDb250
cm9sRGF0YSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVHJ5
KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnRyb2xUeXBlJiByZXN1
bHQsIFN0YWNrJiBuZXdTdGFjayk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFN0
YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbklu
ZGV4LCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVz
dWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNo
VG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRp
b24mLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbChTdGFjayYsIENvbnRyb2xUeXBlJik7CiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGxUb1VucmVhY2hhYmxlKENv
bnRyb2xUeXBlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVs
ZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYpOwpAQCAtMzg5LDEyICszODksMTIgQEAg
cHVibGljOgogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVuZFRvcExldmVs
KEJsb2NrU2lnbmF0dXJlLCBjb25zdCBTdGFjayYpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8g
Q2FsbHMKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVpbnQz
Ml90IGNhbGxlZUluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2ln
bmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0
cyk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbFJlZihjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiBy
ZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsKHVp
bnQzMl90IGNhbGxlZUluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBj
b25zdCBUeXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3Vs
dExpc3QmIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFk
ZENhbGxSZWYoY29uc3QgVHlwZURlZmluaXRpb24mLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRVbnJlYWNoYWJsZSgpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURf
UkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBWYWx1ZSogY2Fs
bGVlQ29kZSwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
UmVzdWx0TGlzdCYpOwotICAgIEIzOjpWYWx1ZSogY3JlYXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNC
bG9jayosIE9yaWdpbiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoUGF0Y2hwb2ludFZhbHVlKiwgQm94PFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGU+KT4mIHBhdGNocG9pbnRGdW5jdG9yKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJ
bnN0YW5jZSwgVmFsdWUqIGNhbGxlZUNvZGUsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9y
PEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYpOworICAgIEIzOjpWYWx1ZSogY3Jl
YXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayosIE9yaWdpbiwgY29uc3QgVHlwZURlZmluaXRp
b24mLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBjb25zdCBTY29wZWRMYW1iZGE8dm9p
ZChQYXRjaHBvaW50VmFsdWUqLCBCb3g8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4pPiYgcGF0
Y2hwb2ludEZ1bmN0b3IpOwogCiAgICAgdm9pZCBkdW1wKGNvbnN0IENvbnRyb2xTdGFjayYsIGNv
bnN0IFN0YWNrKiBleHByZXNzaW9uU3RhY2spOwogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9u
UGFyc2VyPEIzSVJHZW5lcmF0b3I+KiBwYXJzZXIpIHsgbV9wYXJzZXIgPSBwYXJzZXI7IH07CkBA
IC04NjksMTYgKzg2OSwxNiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6Omluc2VydENvbnN0YW50cygp
CiAKIEIzOjpUeXBlIEIzSVJHZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKEJsb2NrU2lnbmF0dXJl
IHJldHVyblR5cGUpCiB7Ci0gICAgaWYgKHJldHVyblR5cGUtPnJldHVybnNWb2lkKCkpCisgICAg
aWYgKHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5zVm9pZCgpKQog
ICAgICAgICByZXR1cm4gQjM6OlZvaWQ7CiAKLSAgICBpZiAocmV0dXJuVHlwZS0+cmV0dXJuQ291
bnQoKSA9PSAxKQotICAgICAgICByZXR1cm4gdG9CM1R5cGUocmV0dXJuVHlwZS0+cmV0dXJuVHlw
ZSgwKSk7CisgICAgaWYgKHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1
cm5Db3VudCgpID09IDEpCisgICAgICAgIHJldHVybiB0b0IzVHlwZShyZXR1cm5UeXBlLT5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZSgwKSk7CiAKICAgICBhdXRvIHJlc3VsdCA9
IG1fdHVwbGVNYXAuZW5zdXJlKHJldHVyblR5cGUsIFsmXSB7CiAgICAgICAgIFZlY3RvcjxCMzo6
VHlwZT4gcmVzdWx0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmV0dXJuVHlw
ZS0+cmV0dXJuQ291bnQoKTsgKytpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b0IzVHlw
ZShyZXR1cm5UeXBlLT5yZXR1cm5UeXBlKGkpKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZXR1cm5UeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQo
KTsgKytpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b0IzVHlwZShyZXR1cm5UeXBlLT5h
czxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZShpKSkpOwogICAgICAgICByZXR1cm4g
bV9wcm9jLmFkZFR1cGxlKFdURk1vdmUocmVzdWx0KSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CkBAIC05MDAsMTYgKzkwMCwxNiBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZExvY2FsKFR5cGUgdHlwZSwgdWludDMyX3QgY291bnQpIC0+IFBhcnRpYWxSZXN1
bHQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50
cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lS
R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSkg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIEFTU0VSVCghbV9sb2NhbHMuc2l6ZSgpKTsKLSAgICBX
QVNNX0NPTVBJTEVfRkFJTF9JRighbV9sb2NhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiLCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOworICAgIFdBU01fQ09NUElMRV9GQUlM
X0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAi
LCBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSwgIiBh
cmd1bWVudHMiKTsKIAotICAgIG1fbG9jYWxzLmdyb3coc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSk7CisgICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCkt
PmFyZ3VtZW50Q291bnQoKSk7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdh
c21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUsIENhbGxS
b2xlOjpDYWxsZWUpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgQjM6OlR5cGUgdHlwZSA9IHRvQjNUeXBlKHNp
Z25hdHVyZS5hcmd1bWVudChpKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1
cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAg
ICAgIEIzOjpUeXBlIHR5cGUgPSB0b0IzVHlwZShzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1
cmU+KCktPmFyZ3VtZW50VHlwZShpKSk7CiAgICAgICAgIEIzOjpWYWx1ZSogYXJndW1lbnQ7CiAg
ICAgICAgIGF1dG8gcmVwID0gd2FzbUNhbGxJbmZvLnBhcmFtc1tpXTsKICAgICAgICAgaWYgKHJl
cC5pc1JlZygpKSB7CkBAIC0xMDk2LDcgKzEwOTYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZFVucmVhY2hhYmxlKCkgLT4gUGFydGlhbFJlc3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1
dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2Us
IFZhbHVlKiBjYWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3Vs
dAorYXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0
YW5jZSwgVmFsdWUqIGNhbGxlZUNvZGUsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUs
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICAvLyBEbyBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KICAg
ICB7CkBAIC0xMTcwLDcgKzExNzAsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVj
dENhbGwoVmFsdWUqIGNhbGxlZUluc3RhbmNlLCBWYWx1ZSogY2FsbGVlQ29kZSwgYwogICAgIH0K
ICAgICBjYXNlIEIzOjpUdXBsZTogewogICAgICAgICBjb25zdCBWZWN0b3I8QjM6OlR5cGU+JiB0
dXBsZSA9IG1fcHJvYy50dXBsZUZvclR5cGUocmV0dXJuVHlwZSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
LT5yZXR1cm5Db3VudCgpOyArK2kpCiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChwdXNoKG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8RXh0cmFjdFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0
dXBsZVtpXSwgY2FsbFJlc3VsdCwgaSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTMw
Myw3ICsxMzAzLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWwKICAgICAgICAgcmVzdWx0ID0g
cHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIGdsb2JhbHNBcnJheSwgc2FmZUNhc3Q8
aW50MzJfdD4oaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsK
LSAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0
aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKKyAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmls
aXR5ID09IFdhc206Ok11dGFiaWxpdHk6Ok11dGFibGUpOwogICAgICAgICBWYWx1ZSogcG9pbnRl
ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
QjM6OkludDY0LCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRl
eCAqIHNpemVvZihSZWdpc3RlcikpKTsKICAgICAgICAgcmVzdWx0ID0gcHVzaChtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2Jh
bC50eXBlKSwgb3JpZ2luKCksIHBvaW50ZXIpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMzI0LDcg
KzEzMjQsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwg
RXhwcmVzc2lvblR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSZQogICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllckZvckpTV3JhcHBlcigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc206Okds
b2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsKLSAgICAgICAgQVNTRVJU
KGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5
OjpNdXRhYmxlKTsKKyAgICAgICAgQVNTRVJUKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Ok11
dGFiaWxpdHk6Ok11dGFibGUpOwogICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmln
aW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2FzdDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdp
c3RlcikpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGdldCh2YWx1ZSksIHBvaW50ZXIpOwogICAgICAgICAv
LyBXZSBlbWl0IGEgd3JpdGUtYmFycmllciBvbnRvIEpTV2ViQXNzZW1ibHlHbG9iYWwsIG5vdCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UuCkBAIC0yNDEzLDggKzI0MTMsOCBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZExvb3AoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5n
U3RhY2ssIENvbgogCiAgICAgYmxvY2sgPSBDb250cm9sRGF0YShtX3Byb2MsIG9yaWdpbigpLCBz
aWduYXR1cmUsIEJsb2NrVHlwZTo6TG9vcCwgbV9zdGFja1NpemUsIGNvbnRpbnVhdGlvbiwgYm9k
eSk7CiAKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSBlbmNsb3NpbmdTdGFjay5zaXplKCkgLSBzaWdu
YXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgIHVuc2lnbmVkIG9mZnNldCA9IGVu
Y2xvc2luZ1N0YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCkt
PmFyZ3VtZW50Q291bnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJl
LT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAg
ICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlID0gZW5jbG9zaW5nU3RhY2suYXQob2Zmc2V0ICsgaSk7
CiAgICAgICAgIFZhbHVlKiBwaGkgPSBibG9jay5waGlzW2ldOwogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgZ2V0KHZhbHVl
KSwgcGhpKTsKQEAgLTI1MTQsNyArMjUxNCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxz
ZShDb250cm9sRGF0YSYgZGF0YSwgY29uc3QgU3RhY2smIGN1cnJlbnRTdGFjaykgLT4gUGFyCiBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKENvbnRyb2xEYXRhJiBkYXRh
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKGRhdGEuYmxvY2tUeXBlKCkgPT0gQmxv
Y2tUeXBlOjpJZik7Ci0gICAgbV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5t
X3NpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFj
a1NpemUoKSArIGRhdGEubV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1
bWVudENvdW50KCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBkYXRhLnNwZWNpYWw7CiAgICAgZGF0
YS5jb252ZXJ0SWZUb0Jsb2NrKCk7CiAgICAgcmV0dXJuIHsgfTsKQEAgLTI1MzAsNyArMjUzMCw3
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwg
U3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb250CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2ln
bmF0dXJlJiBzaWduYXR1cmUsIFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRh
LCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlv
biYgc2lnbmF0dXJlLCBTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSwgUmVz
dWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHVuaWZ5VmFsdWVzV2l0
aEJsb2NrKGN1cnJlbnRTdGFjaywgZGF0YSk7CiAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBkYXRhLmNvbnRpbnVhdGlvbik7
CkBAIC0yNTY0LDEyICsyNTY0LDEyIEBAIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgQjNJUkdl
bmVyYXRvcjo6cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKEJhc2ljQmxvCiAgICAgcmV0
dXJuIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgeyBtX2NhbGxTaXRlSW5kZXgsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsaXZlVmFsdWVzLnNpemUoKSkgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVz
dWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYXRjaFRvVW5y
ZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBz
aWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0
aWFsUmVzdWx0CiB7CiAgICAgVmFsdWUqIG9wZXJhdGlvblJlc3VsdCA9IGVtaXRDYXRjaEltcGwo
Q2F0Y2hLaW5kOjpDYXRjaCwgZGF0YSwgZXhjZXB0aW9uSW5kZXgpOwogICAgIFZhbHVlKiBwYXls
b2FkID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3Jp
Z2luKCksIHBvaW50ZXJUeXBlKCksIG9wZXJhdGlvblJlc3VsdCwgMSk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAg
ICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3Vu
dCgpOyArK2kpIHsKKyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpLT5hcmd1bWVudFR5cGUoaSk7CiAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUo
dHlwZSksIG9yaWdpbigpLCBwYXlsb2FkLCBpICogc2l6ZW9mKHVpbnQ2NF90KSk7CiAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHB1c2godmFsdWUpKTsKICAgICB9CkBAIC0yNzkwLDcgKzI3OTAsNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmVuZEJsb2NrKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNr
JiBleHByZXNzaW9uU3RhY2spIC0+IFBhcgogewogICAgIENvbnRyb2xEYXRhJiBkYXRhID0gZW50
cnkuY29udHJvbERhdGE7CiAKLSAgICBBU1NFUlQoZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9PSBk
YXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpKTsKKyAgICBBU1NFUlQoZXhwcmVzc2lvblN0
YWNrLnNpemUoKSA9PSBkYXRhLnNpZ25hdHVyZSgpLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+
cmV0dXJuQ291bnQoKSk7CiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgIT0gQmxvY2tUeXBlOjpM
b29wKQogICAgICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhleHByZXNzaW9uU3RhY2ssIGRhdGEp
OwogCkBAIC0yODEzLDE5ICsyODEzLDE5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9V
bnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmVzCiAgICAg
ICAgIC0tbV90cnlDYXRjaERlcHRoOwogCiAgICAgaWYgKGRhdGEuYmxvY2tUeXBlKCkgIT0gQmxv
Y2tUeXBlOjpMb29wKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNp
Z25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1
cm5Db3VudCgpOyArK2kpIHsKICAgICAgICAgICAgIFZhbHVlKiByZXN1bHQgPSBkYXRhLnBoaXNb
aV07CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0gICAgICAg
ICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0
YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSwgcHVzaChyZXN1bHQpKTsKKyAgICAgICAgICAg
IGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRhLnNp
Z25hdHVyZSgpLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZShpKSwgcHVzaChy
ZXN1bHQpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fb3V0ZXJMb29wcy5y
ZW1vdmVMYXN0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25h
dHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRhdGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5D
b3VudCgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChpIDwgZXhwcmVzc2lvblN0YWNrLnNpemUo
KSkgewogICAgICAgICAgICAgICAgICsrbV9zdGFja1NpemU7CiAgICAgICAgICAgICAgICAgZW50
cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFR5cGUgcmV0dXJuVHlwZSA9IGRh
dGEuc2lnbmF0dXJlKCktPnJldHVyblR5cGUoaSk7CisgICAgICAgICAgICAgICAgVHlwZSByZXR1
cm5UeXBlID0gZGF0YS5zaWduYXR1cmUoKS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVy
blR5cGUoaSk7CiAgICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2su
Y29uc3RydWN0QW5kQXBwZW5kKHJldHVyblR5cGUsIHB1c2goY29uc3RhbnQodG9CM1R5cGUocmV0
dXJuVHlwZSksIDB4YmJhZGJlZWYpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI4
NDAsNyArMjg0MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShD
b250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmVzCiB9CiAKIAotQjM6OlZhbHVl
KiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiBibG9jaywg
T3JpZ2luIG9yaWdpbiwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFBhdGNocG9pbnRWYWx1ZSos
IEJveDxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPik+JiBwYXRjaHBvaW50RnVuY3RvcikKK0Iz
OjpWYWx1ZSogQjNJUkdlbmVyYXRvcjo6Y3JlYXRlQ2FsbFBhdGNocG9pbnQoQmFzaWNCbG9jayog
YmxvY2ssIE9yaWdpbiBvcmlnaW4sIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZl
Y3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKFBhdGNo
cG9pbnRWYWx1ZSosIEJveDxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPik+JiBwYXRjaHBvaW50
RnVuY3RvcikKIHsKICAgICBWZWN0b3I8QjM6OkNvbnN0cmFpbmVkVmFsdWU+IGNvbnN0cmFpbmVk
QXJndW1lbnRzOwogICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGlu
Z0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3Ioc2lnbmF0dXJlKTsKQEAgLTI4NzAsOSAr
Mjg3MCw5IEBAIEIzOjpWYWx1ZSogQjNJUkdlbmVyYXRvcjo6Y3JlYXRlQ2FsbFBhdGNocG9pbnQo
QmFzaWNCbG9jayogYmxvY2ssIE9yaWdpbiBvcmlnaW4sCiAgICAgcmV0dXJuIHBhdGNocG9pbnQ7
CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4
LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJn
cywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9u
JiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJl
c3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hczxGdW5jdGlv
blNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgIG1f
bWFrZXNDYWxscyA9IHRydWU7CiAgICAgQjM6OlR5cGUgcmV0dXJuVHlwZSA9IHRvQjNSZXN1bHRU
eXBlKCZzaWduYXR1cmUpOwpAQCAtMjg4Niw4ICsyODg2LDggQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLAogICAgICAgICB9CiAgICAgICAgIGNhc2UgQjM6OlR1cGxlOiB7CiAgICAgICAgICAgICBj
b25zdCBWZWN0b3I8QjM6OlR5cGU+JiB0dXBsZSA9IG1fcHJvYy50dXBsZUZvclR5cGUocmV0dXJu
VHlwZSk7Ci0gICAgICAgICAgICBBU1NFUlQoc2lnbmF0dXJlLnJldHVybkNvdW50KCkgPT0gdHVw
bGUuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1
cmUucmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZS5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKSA9PSB0dXBsZS5zaXplKCkpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsgKytpKQogICAgICAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKHB1c2gobV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTI5OTQsMTAgKzI5OTQsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBW
ZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0
aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0
YWJsZUluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7
CiAgICAgVmFsdWUqIGNhbGxlZUluZGV4ID0gZ2V0KGFyZ3MudGFrZUxhc3QoKSk7Ci0gICAgQVNT
RVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworICAgIEFTU0VS
VChzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSA9PSBh
cmdzLnNpemUoKSk7CiAKICAgICBtX21ha2VzQ2FsbHMgPSB0cnVlOwogICAgIC8vIE5vdGU6IGNh
bGwgaW5kaXJlY3QgY2FuIGNhbGwgZWl0aGVyIFdlYkFzc2VtYmx5RnVuY3Rpb24gb3IgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24uIEJlY2F1c2UKQEAgLTMwNDAsMTMgKzMwNDAsMTMgQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXQKIAogICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBXYXNtVG9X
YXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0
LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxp
emVkLgogICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNh
biBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgg
aXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpz
aWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkxvYWQgY29kZWdlbiBhc3N1bWVz
IGk2NCIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjp0eXBlSW5kZXgpID09IHNpemVvZih1aW50NjRfdCksICJMb2FkIGNvZGVnZW4g
YXNzdW1lcyBpNjQiKTsKICAgICAgICAgVmFsdWUqIGNhbGxlZVNpZ25hdHVyZUluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwg
b3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sIHNhZmVDYXN0PGludDMyX3Q+KFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgoKSkpOwogICAgICAgICB7
CiAgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCiAgICAgICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2luKCks
CiAgICAgICAgICAgICAgICAgICAgIGNhbGxlZVNpZ25hdHVyZUluZGV4LAotICAgICAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCBUeXBlRGVmaW5pdGlvbjo6aW52YWxpZEluZGV4KSkpOwogCiAgICAgICAgICAgICBjaGVjay0+
c2V0R2VuZXJhdG9yKFs9LCB0aGlzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2Vw
dGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkpOwpAQCAtMzA1NSw3
ICszMDU1LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQg
dGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKIAogICAgICAgICAvLyBDaGVjayB0
aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIHZhbHVlIHdlIGV4cGVjdC4KICAgICAgICAgewotICAg
ICAgICAgICAgVmFsdWUqIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmUpKTsKKyAgICAgICAgICAgIFZhbHVlKiBleHBlY3RlZFNpZ25h
dHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpOwogICAgICAgICAg
ICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIG9yaWdpbigpLCBjYWxsZWVT
aWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkpOwogCkBAIC0zMDc2LDEwICsz
MDc2LDEwIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRh
YmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0CiAgICAgcmV0dXJuIGVtaXRJbmRpcmVj
dENhbGwoY2FsbGVlSW5zdGFuY2UsIGNhbGxlZUNvZGUsIHNpZ25hdHVyZSwgYXJncywgcmVzdWx0
cyk7CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVz
dWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKGNv
bnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFy
Z3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSog
Y2FsbGVlID0gZ2V0KGFyZ3MudGFrZUxhc3QoKSk7Ci0gICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworICAgIEFTU0VSVChzaWduYXR1cmUuYXM8RnVu
Y3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CiAgICAg
bV9tYWtlc0NhbGxzID0gdHJ1ZTsKIAogICAgIC8vIE5vdGU6IGNhbGwgcmVmIGNhbiBjYWxsIGVp
dGhlciBXZWJBc3NlbWJseUZ1bmN0aW9uIG9yIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLiBC
ZWNhdXNlCkBAIC0zMTczLDcgKzMxNzMsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGREdW1wSVJGb3Io
dWludDMyX3QgZnVuY3Rpb25JbmRleCkKICAgICByZXR1cm4gZHVtcEFsbG93bGlzdC0+c2hvdWxk
RHVtcFdhc21GdW5jdGlvbihmdW5jdGlvbkluZGV4KTsKIH0KIAotRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUIzKENvbXBp
bGF0aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBjb25zdCBGdW5jdGlvbkRhdGEmIGZ1
bmN0aW9uLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9k
ZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnks
IFRpZXJVcENvdW50KiB0aWVyVXApCitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxG
dW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQjMoQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFR5
cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBN
ZW1vcnlNb2RlIG1vZGUsIENvbXBpbGF0aW9uTW9kZSBjb21waWxhdGlvbk1vZGUsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3Vu
dCogdGllclVwKQogewogICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0
aW9uPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuaAppbmRleCBjMWUzZDliNmUyYTdiYjYzYjVjOTRkNDFmYmNmNjI5YmNlMDFjZGZiLi43MDBi
NWMwNTgzYTU0YzM1YzNmNjMxMDE3NmVkZjRjZjgwZjQwODhlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKQEAgLTU3LDcgKzU3LDcgQEAgc3Ry
dWN0IENvbXBpbGF0aW9uQ29udGV4dCB7CiAgICAgQm94PFBDVG9Db2RlT3JpZ2luTWFwPiBwY1Rv
Q29kZU9yaWdpbk1hcDsKIH07CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCMyhDb21waWxhdGlvbkNvbnRleHQmLCBj
b25zdCBGdW5jdGlvbkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIENvbXBp
bGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9y
T1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOworRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUIzKENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
LCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVp
bnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsKIAog
dm9pZCBjb21wdXRlUENUb0NvZGVPcmlnaW5NYXAoQ29tcGlsYXRpb25Db250ZXh0JiwgTGlua0J1
ZmZlciYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
UGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKaW5k
ZXggMzE3ODY2NTI3MDdjODRiZjI5MWVkMDczODgwMjU1Zjc1ZDY3NWVjMC4uOGUxOGE3NzIyMzIw
YTRjYmQ0ZWUwZThjMjNiNzc0MjVmZmQyYTA0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtMzcsOCArMzcsOCBAQAogI2luY2x1ZGUgIldhc21DYWxs
ZWVHcm91cC5oIgogI2luY2x1ZGUgIldhc21DYWxsZWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldh
c21JUkdlbmVyYXRvckhlbHBlcnMuaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5o
IgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5p
dGlvbklubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC0xMjMsOCArMTIzLDgg
QEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICBjb21w
dXRlUENUb0NvZGVPcmlnaW5NYXAoY29udGV4dCwgbGlua0J1ZmZlcik7CiAKICAgICBzaXplX3Qg
ZnVuY3Rpb25JbmRleFNwYWNlID0gbV9mdW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpOwotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGlj
ZXNbbV9mdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNp
Z25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIFR5cGVJbmRleCB0
eXBlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGlj
ZXNbbV9mdW5jdGlvbkluZGV4XTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJl
ID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKICAgICBmdW5jdGlvbi0+ZW50cnlw
b2ludC5jb21waWxhdGlvbiA9IG1ha2VVbmlxdWU8Q29tcGlsYXRpb24+KAogICAgICAgICBGSU5B
TElaRV9XQVNNX0NPREVfRk9SX01PREUoQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBsaW5rQnVm
ZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBmdW5jdGlvblslaV0g
JXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21v
ZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5h
c2NpaSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5
cHJvZHVjdHMpKTsKQEAgLTE5Miw4ICsxOTIsOCBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5j
dGlvbih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogCiAgICAgaWYgKG1fZXhwb3J0ZWRGdW5jdGlv
bkluZGljZXMuY29udGFpbnMoZnVuY3Rpb25JbmRleCkgfHwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
cmVmZXJlbmNlZEZ1bmN0aW9ucygpLmNvbnRhaW5zKGZ1bmN0aW9uSW5kZXgpKSB7CiAgICAgICAg
IExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAg
VHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rp
b25UeXBlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgY29uc3QgVHlwZURlZmluaXRp
b24mIHNpZ25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCk7CiAKICAgICAg
ICAgbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLmVtYmVkZGVyRW50cnlwb2lu
dEpJVCA9IG1ha2VVbmlxdWU8Q0NhbGxIZWxwZXJzPigpOwogICAgICAgICBhdXRvIGVtYmVkZGVy
VG9XYXNtSW50ZXJuYWxGdW5jdGlvbiA9IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcigqbV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLmVtYmVkZGVyRW50cnlwb2ludEpJVCwgc2lnbmF0
dXJlLCAmbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBmdW5jdGlvbkluZGV4KTsKQEAgLTIwNywxMCArMjA3
LDEwIEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgpCiBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gQkJRUGxhbjo6Y29tcGlsZUZ1
bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4
dCwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgVGllclVwQ291bnQqIHRpZXJVcCkKIHsKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbiA9IG1f
bW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XTsKLSAgICBTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVu
Y3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
CisgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFs
RnVuY3Rpb25UeXBlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKKyAgICBjb25zdCBUeXBlRGVmaW5p
dGlvbiYgc2lnbmF0dXJlID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKICAgICB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRG
dW5jdGlvbkNvdW50KCkgKyBmdW5jdGlvbkluZGV4OwotICAgIEFTU0VSVF9VTlVTRUQoZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSBzaWduYXR1cmVJbmRleCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
PnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKSA9PSB0
eXBlSW5kZXgpOwogICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQ7CiAKICAgICAvLyBGSVhNRTogU29tZSB3
ZWJwYWdlcyB1c2UgdmVyeSBsYXJnZSBXYXNtIG1vZHVsZSwgYW5kIGl0IGV4aGF1c3RzIGFsbCBl
eGVjdXRhYmxlIG1lbW9yeSBpbiBBUk02NCBkZXZpY2VzIHNpbmNlIHRoZSBzaXplIG9mIGV4ZWN1
dGFibGUgbWVtb3J5IHJlZ2lvbiBpcyBvbmx5IGxpbWl0ZWQgdG8gMTI4TUIuCkBAIC0yNDQsOCAr
MjQ0LDggQEAgdm9pZCBCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkKIHsKICAgICBm
b3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRleCsrKSB7CiAgICAgICAg
IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCA9IG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5j
dGlvbkluZGV4XTsKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21v
ZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1tmdW5jdGlv
bkluZGV4XTsKLSAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgVHlwZUluZGV4IHR5cGVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlc1tm
dW5jdGlvbkluZGV4XTsKKyAgICAgICAgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSA9
IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCk7CiAgICAgICAgIGNvbnN0IHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IGZ1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0aW9u
LT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAgICAgICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3Bh
Y2UgPCBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogICAg
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKaW5kZXggNmVmNjY0
N2UyZjQzNzdjNmMwYzFmODE3ZGZjOTI0NGNmZGI4ODEyYy4uZDhhZGY0YjEzMGZhNGU4NGFmYTY4
MmZlMDdiMzNiMWY1ZGI2ZjMzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhbGxlZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
ZWUuaApAQCAtMjY1LDcgKzI2NSw3IEBAIHB1YmxpYzoKIAogICAgIExMSW50VGllclVwQ291bnRl
ciYgdGllclVwQ291bnRlcigpIHsgcmV0dXJuIG1fdGllclVwQ291bnRlcjsgfQogCi0gICAgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgY29uc3Qg
RnVuY3Rpb25TaWduYXR1cmUmIHNpZ25hdHVyZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiAqbV9zaWduYXR1cmVzW2luZGV4XTsKICAgICB9CkBAIC0zMDQsNyAr
MzA0LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbUluc3RydWN0aW9uU3Ry
ZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBjb25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jhd1Bv
aW50ZXIgeyBudWxscHRyIH07CiAgICAgRml4ZWRWZWN0b3I8V2FzbUluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQ+IG1fanVtcFRhcmdldHM7Ci0gICAgRml4ZWRWZWN0b3I8Y29uc3QgU2lnbmF0dXJl
Kj4gbV9zaWduYXR1cmVzOworICAgIEZpeGVkVmVjdG9yPGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJl
Kj4gbV9zaWduYXR1cmVzOwogICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1fb3V0T2ZMaW5lSnVt
cFRhcmdldHM7CiAgICAgTExJbnRUaWVyVXBDb3VudGVyIG1fdGllclVwQ291bnRlcjsKICAgICBG
aXhlZFZlY3RvcjxKdW1wVGFibGU+IG1fanVtcFRhYmxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgKaW5kZXggNTkxZWViMjdiMDE2
OTAwN2FmYTE4M2Q0MzI3MjlmYTBjYTU2YWQ4MS4uNDI4OGY4MDFkZTFiZTM0YjM4OTViYWYyZjNh
YzU1MWVjNDhhYjU3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJSZWdpc3Rl
ckF0T2Zmc2V0TGlzdC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAjaW5jbHVkZSAiV2Fz
bUZvcm1hdC5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKKyNpbmNsdWRlICJXYXNtVHlw
ZURlZmluaXRpb24uaCIKICNpbmNsdWRlICJXYXNtVmFsdWVMb2NhdGlvbi5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpAQCAtMTIwLDggKzEyMCw5IEBAIHByaXZhdGU6CiAg
ICAgfQogCiBwdWJsaWM6Ci0gICAgQ2FsbEluZm9ybWF0aW9uIGNhbGxJbmZvcm1hdGlvbkZvcihj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9sZSA9IENhbGxSb2xlOjpDYWxs
ZXIpIGNvbnN0CisgICAgQ2FsbEluZm9ybWF0aW9uIGNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBU
eXBlRGVmaW5pdGlvbiYgdHlwZSwgQ2FsbFJvbGUgcm9sZSA9IENhbGxSb2xlOjpDYWxsZXIpIGNv
bnN0CiAgICAgeworICAgICAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSAqdHlwZS5hczxGdW5j
dGlvblNpZ25hdHVyZT4oKTsKICAgICAgICAgYm9vbCBhcmd1bWVudHNJbmNsdWRlSTY0ID0gZmFs
c2U7CiAgICAgICAgIGJvb2wgcmVzdWx0c0luY2x1ZGVJNjQgPSBmYWxzZTsKICAgICAgICAgc2l6
ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CkBAIC0xMzIsOCArMTMzLDggQEAgcHVibGljOgogCiAg
ICAgICAgIFZlY3RvcjxBcmd1bWVudExvY2F0aW9uPiBwYXJhbXMoc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICBhcmd1bWVudHNJbmNsdWRlSTY0IHw9IHNp
Z25hdHVyZS5hcmd1bWVudChpKS5pc0k2NCgpOwotICAgICAgICAgICAgcGFyYW1zW2ldID0gbWFy
c2hhbGxMb2NhdGlvbihyb2xlLCBzaWduYXR1cmUuYXJndW1lbnQoaSksIGdwQXJndW1lbnRDb3Vu
dCwgZnBBcmd1bWVudENvdW50LCBhcmdTdGFja09mZnNldCk7CisgICAgICAgICAgICBhcmd1bWVu
dHNJbmNsdWRlSTY0IHw9IHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSkuaXNJNjQoKTsKKyAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IG1hcnNoYWxsTG9jYXRpb24ocm9sZSwgc2lnbmF0dXJlLmFyZ3Vt
ZW50VHlwZShpKSwgZ3BBcmd1bWVudENvdW50LCBmcEFyZ3VtZW50Q291bnQsIGFyZ1N0YWNrT2Zm
c2V0KTsKICAgICAgICAgfQogICAgICAgICBncEFyZ3VtZW50Q291bnQgPSAwOwogICAgICAgICBm
cEFyZ3VtZW50Q291bnQgPSAwOwpAQCAtMjEwLDcgKzIxMSw3IEBAIHByaXZhdGU6CiAgICAgfQog
CiBwdWJsaWM6Ci0gICAgQ2FsbEluZm9ybWF0aW9uIGNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgQ2FsbFJvbGUgcm9sZSA9IENhbGxSb2xlOjpDYWxsZWUpIGNv
bnN0CisgICAgQ2FsbEluZm9ybWF0aW9uIGNhbGxJbmZvcm1hdGlvbkZvcihjb25zdCBUeXBlRGVm
aW5pdGlvbiYgc2lnbmF0dXJlLCBDYWxsUm9sZSByb2xlID0gQ2FsbFJvbGU6OkNhbGxlZSkgY29u
c3QKICAgICB7CiAgICAgICAgIHNpemVfdCBncEFyZ3VtZW50Q291bnQgPSAwOwogICAgICAgICBz
aXplX3QgZnBBcmd1bWVudENvdW50ID0gMDsKQEAgLTIxOSw4ICsyMjAsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBzdGFja09mZnNldCAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7CiAKICAg
ICAgICAgVmVjdG9yPEFyZ3VtZW50TG9jYXRpb24+IHBhcmFtczsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgICAg
ICBwYXJhbXMuYXBwZW5kKG1hcnNoYWxsTG9jYXRpb24ocm9sZSwgc2lnbmF0dXJlLmFyZ3VtZW50
KGkpLCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tPZmZzZXQpKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1
cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICAgICAgcGFyYW1zLmFwcGVuZCht
YXJzaGFsbExvY2F0aW9uKHJvbGUsIHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+
YXJndW1lbnRUeXBlKGkpLCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgc3RhY2tP
ZmZzZXQpKTsKIAogICAgICAgICBWZWN0b3I8QXJndW1lbnRMb2NhdGlvbiwgMT4gcmVzdWx0cyB7
IEFyZ3VtZW50TG9jYXRpb246OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikgfTsKICAgICAg
ICAgcmV0dXJuIENhbGxJbmZvcm1hdGlvbihXVEZNb3ZlKHBhcmFtcyksIFdURk1vdmUocmVzdWx0
cyksIHN0YWNrT2Zmc2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21FbWJlZGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVy
LmgKaW5kZXggOTkwZTQ2ZjQzODEzYTE0YmY0YTExZjA5MjEwOGM5NTExNWY3NGI0Ni4uMjQxODVh
Yjg2ZTU5ZTJmMjAzNDE0Yjk1NGU4MTRjZjI4ZmY3NTUyMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUVtYmVkZGVyLmgKQEAgLTQ1LDExICs0NSwxMSBAQCBzdHJ1Y3QgQ29tcGls
YXRpb25Db250ZXh0OwogY2xhc3MgSW5zdGFuY2U7CiBzdHJ1Y3QgSW50ZXJuYWxGdW5jdGlvbjsK
IHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKLWNsYXNzIFNpZ25hdHVyZTsKK2NsYXNzIFR5cGVE
ZWZpbml0aW9uOwogc3RydWN0IFVubGlua2VkV2FzbVRvV2FzbUNhbGw7CiAKIC8vIENyZWF0ZSB3
cmFwcGVyIGNvZGUgdG8gY2FsbCBmcm9tIGVtYmVkZGVyIC0+IFdlYkFzc2VtYmx5LgotdXNpbmcg
Q3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8SW50
ZXJuYWxGdW5jdGlvbj4oQ0NhbGxIZWxwZXJzJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlN
b2RlLCB1aW50MzJfdCk+OwordXNpbmcgQ3JlYXRlRW1iZWRkZXJXcmFwcGVyID0gV1RGOjpGdW5j
dGlvbjxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4oQ0NhbGxIZWxwZXJzJiwgY29u
c3QgVHlwZURlZmluaXRpb24mLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9yeU1vZGUsIHVpbnQzMl90KT47CiAKIC8vIENhbGxl
ZCBhcyBzb29uIGFzIGFuIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4gVGhlIHJldHVybiB2YWx1ZSBp
cyB0aGUgUEMgdG8gY29udGludWUgYXQuCiB1c2luZyBUaHJvd1dhc21FeGNlcHRpb24gPSB2b2lk
KiAoKikoQ2FsbEZyYW1lKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwgSW5zdGFuY2UqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FbnRyeVBsYW4uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAKaW5kZXggNDExMGY0ZTdk
MDE0MWFjMDQzYjE1MmJhNTUxM2I5ZmZiNjQ5NzNjNy4uNzZiZjNhYmJjNzgzODIzNmI5OGM1YjVl
ZWJlMTQyYTI3M2U4ZGRmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUVudHJ5UGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVu
dHJ5UGxhbi5jcHAKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEVudHJ5UGxhbjo6cHJlcGFyZSgp
CiAKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbnMgPSBtX21vZHVsZUluZm9ybWF0aW9uLT5mdW5j
dGlvbnM7CiAgICAgbV9udW1iZXJPZkZ1bmN0aW9ucyA9IGZ1bmN0aW9ucy5zaXplKCk7Ci0gICAg
aWYgKCF0cnlSZXNlcnZlQ2FwYWNpdHkobV93YXNtVG9XYXNtRXhpdFN0dWJzLCBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpLCAiIFdlYkFz
c2VtYmx5IHRvIEphdmFTY3JpcHQgc3R1YnMiKQorICAgIGlmICghdHJ5UmVzZXJ2ZUNhcGFjaXR5
KG1fd2FzbVRvV2FzbUV4aXRTdHVicywgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rp
b25UeXBlSW5kaWNlcy5zaXplKCksICIgV2ViQXNzZW1ibHkgdG8gSmF2YVNjcmlwdCBzdHVicyIp
CiAgICAgICAgIHx8ICF0cnlSZXNlcnZlQ2FwYWNpdHkobV91bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgZnVuY3Rpb25zLnNpemUoKSwgIiB1bmxpbmtlZCBXZWJBc3NlbWJseSB0byBXZWJBc3NlbWJs
eSBjYWxscyIpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Gb3JtYXQuaAppbmRleCA5NzA2M2FhYjllNmI3ZjU2MGZlMjhkNTQyMDYwYzUyYjg4NDZlNWQ5
Li5hY2U4NTdmZDIwYmY5ZjkwNWRkNDhkNTJlNzE1ZDkzYjJkNjg3NmZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAi
V2FzbU9TUkVudHJ5RGF0YS5oIgogI2luY2x1ZGUgIldhc21PcHMuaCIKICNpbmNsdWRlICJXYXNt
UGFnZUNvdW50LmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5oIgorI2luY2x1ZGUgIldhc21U
eXBlRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgPGNzdGRpbnQ+CiAjaW5jbHVkZSA8bGltaXRzPgog
I2luY2x1ZGUgPG1lbW9yeT4KQEAgLTU0LDcgKzU0LDcgQEAgc3RydWN0IENvbXBpbGF0aW9uQ29u
dGV4dDsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIHN0cnVjdCBVbmxpbmtlZEhhbmRsZXJJ
bmZvOwogCi11c2luZyBCbG9ja1NpZ25hdHVyZSA9IGNvbnN0IFNpZ25hdHVyZSo7Cit1c2luZyBC
bG9ja1NpZ25hdHVyZSA9IGNvbnN0IFR5cGVEZWZpbml0aW9uKjsKIAogZW51bSBjbGFzcyBUYWJs
ZUVsZW1lbnRUeXBlIDogdWludDhfdCB7CiAgICAgRXh0ZXJucmVmLApAQCAtMTA1LDI4ICsxMDUs
MjggQEAgaW5saW5lIGJvb2wgaXNSZWZUeXBlKFR5cGUgdHlwZSkKIGlubGluZSBib29sIGlzRXh0
ZXJucmVmKFR5cGUgdHlwZSkKIHsKICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBl
ZEZ1bmN0aW9uUmVmZXJlbmNlcygpKQotICAgICAgICByZXR1cm4gaXNSZWZUeXBlKHR5cGUpICYm
IHR5cGUuaW5kZXggPT0gc3RhdGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+KFR5cGVLaW5kOjpFeHRl
cm5yZWYpOworICAgICAgICByZXR1cm4gaXNSZWZUeXBlKHR5cGUpICYmIHR5cGUuaW5kZXggPT0g
c3RhdGljX2Nhc3Q8VHlwZUluZGV4PihUeXBlS2luZDo6RXh0ZXJucmVmKTsKICAgICByZXR1cm4g
dHlwZS5raW5kID09IFR5cGVLaW5kOjpFeHRlcm5yZWY7CiB9CiAKIGlubGluZSBib29sIGlzRnVu
Y3JlZihUeXBlIHR5cGUpCiB7CiAgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5VHlwZWRG
dW5jdGlvblJlZmVyZW5jZXMoKSkKLSAgICAgICAgcmV0dXJuIGlzUmVmVHlwZSh0eXBlKSAmJiB0
eXBlLmluZGV4ID09IHN0YXRpY19jYXN0PFNpZ25hdHVyZUluZGV4PihUeXBlS2luZDo6RnVuY3Jl
Zik7CisgICAgICAgIHJldHVybiBpc1JlZlR5cGUodHlwZSkgJiYgdHlwZS5pbmRleCA9PSBzdGF0
aWNfY2FzdDxUeXBlSW5kZXg+KFR5cGVLaW5kOjpGdW5jcmVmKTsKICAgICByZXR1cm4gdHlwZS5r
aW5kID09IFR5cGVLaW5kOjpGdW5jcmVmOwogfQogCiBpbmxpbmUgVHlwZSBmdW5jcmVmVHlwZSgp
CiB7CiAgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5VHlwZWRGdW5jdGlvblJlZmVyZW5j
ZXMoKSkKLSAgICAgICAgcmV0dXJuIFdhc206OlR5cGUgeyBXYXNtOjpUeXBlS2luZDo6UmVmTnVs
bCwgV2FzbTo6TnVsbGFibGU6Olllcywgc3RhdGljX2Nhc3Q8V2FzbTo6U2lnbmF0dXJlSW5kZXg+
KFdhc206OlR5cGVLaW5kOjpGdW5jcmVmKSB9OworICAgICAgICByZXR1cm4gV2FzbTo6VHlwZSB7
IFdhc206OlR5cGVLaW5kOjpSZWZOdWxsLCBXYXNtOjpOdWxsYWJsZTo6WWVzLCBzdGF0aWNfY2Fz
dDxXYXNtOjpUeXBlSW5kZXg+KFdhc206OlR5cGVLaW5kOjpGdW5jcmVmKSB9OwogICAgIHJldHVy
biBUeXBlczo6RnVuY3JlZjsKIH0KIAogaW5saW5lIFR5cGUgZXh0ZXJucmVmVHlwZSgpCiB7CiAg
ICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5VHlwZWRGdW5jdGlvblJlZmVyZW5jZXMoKSkK
LSAgICAgICAgcmV0dXJuIFdhc206OlR5cGUgeyBXYXNtOjpUeXBlS2luZDo6UmVmTnVsbCwgV2Fz
bTo6TnVsbGFibGU6Olllcywgc3RhdGljX2Nhc3Q8V2FzbTo6U2lnbmF0dXJlSW5kZXg+KFdhc206
OlR5cGVLaW5kOjpFeHRlcm5yZWYpIH07CisgICAgICAgIHJldHVybiBXYXNtOjpUeXBlIHsgV2Fz
bTo6VHlwZUtpbmQ6OlJlZk51bGwsIFdhc206Ok51bGxhYmxlOjpZZXMsIHN0YXRpY19jYXN0PFdh
c206OlR5cGVJbmRleD4oV2FzbTo6VHlwZUtpbmQ6OkV4dGVybnJlZikgfTsKICAgICByZXR1cm4g
VHlwZXM6OkV4dGVybnJlZjsKIH0KIApAQCAtMjM4LDExICsyMzgsNiBAQCBTdHJpbmcgbWFrZVN0
cmluZyhjb25zdCBOYW1lJiBjaGFyYWN0ZXJzKTsKIAogc3RydWN0IEdsb2JhbEluZm9ybWF0aW9u
IHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZW51bSBNdXRhYmls
aXR5IDogdWludDhfdCB7Ci0gICAgICAgIC8vIEZJWE1FIGF1dG8tZ2VuZXJhdGUgdGhpcy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTIzMQotICAgICAgICBNdXRh
YmxlID0gMSwKLSAgICAgICAgSW1tdXRhYmxlID0gMAotICAgIH07CiAKICAgICBlbnVtIEluaXRp
YWxpemF0aW9uVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBJc0ltcG9ydCwKQEAgLTQ1NiwxMSAr
NDUxLDExIEBAIHN0cnVjdCBJbnRlcm5hbEZ1bmN0aW9uIHsKIHN0cnVjdCBXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uIHsKICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAg
ICAgdXNpbmcgTG9hZExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0
clRhZz4qOwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBzaWdu
YXR1cmVJbmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2lnbmF0dXJlSW5k
ZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
biwgdHlwZUluZGV4KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZFbnRyeXBvaW50
TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb24sIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24pOyB9CiAKLSAgICAvLyBGSVhNRTog
UGFjayBzaWduYXR1cmUgaW5kZXggYW5kIGNvZGUgcG9pbnRlciBpbnRvIG9uZSA2NC1iaXQgdmFs
dWUuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMT4u
Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggeyBTaWduYXR1cmU6OmludmFsaWRJ
bmRleCB9OworICAgIC8vIEZJWE1FOiBQYWNrIHR5cGUgaW5kZXggYW5kIGNvZGUgcG9pbnRlciBp
bnRvIG9uZSA2NC1iaXQgdmFsdWUuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NTUxMT4uCisgICAgVHlwZUluZGV4IHR5cGVJbmRleCB7IFR5cGVEZWZpbml0
aW9uOjppbnZhbGlkSW5kZXggfTsKICAgICBMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2Nh
dGlvbjsKIH07CiB1c2luZyBGdW5jdGlvbkluZGV4U3BhY2UgPSBWZWN0b3I8V2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbj47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcAppbmRleCAzMWVlMjE1
ZGVkZjc4MTgwMTE1ZmQyNGZiYTZmYTNmOTcyYjgzYTllLi4wYzZmNzliNmMxOTliZDlhZjQ4MGE1
OTNmY2MxNDU0MjkwMmEzZTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHAKQEAgLTUxLDcg
KzUxLDcgQEAgV2FzbUluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgRnVuY3Rpb25Db2RlQmxvY2tH
ZW5lcmF0b3I6Om91dE9mTGluZUp1bXBPZmZzZXQoV2EKICAgICByZXR1cm4gbV9vdXRPZkxpbmVK
dW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOwogfQogCi11bnNpZ25lZCBGdW5jdGlvbkNv
ZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2lnbmF0dXJlKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
KQordW5zaWduZWQgRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I6OmFkZFNpZ25hdHVyZShjb25z
dCBGdW5jdGlvblNpZ25hdHVyZSYgc2lnbmF0dXJlKQogewogICAgIHVuc2lnbmVkIGluZGV4ID0g
bV9zaWduYXR1cmVzLnNpemUoKTsKICAgICBtX3NpZ25hdHVyZXMuYXBwZW5kKCZzaWduYXR1cmUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29k
ZUJsb2NrR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3IuaAppbmRleCBhMWUzOWExZTZkNjFlZTFiMWZlYmUxMDJmYjgy
ZTBmNWUyN2Y4OGI3Li40ODlmZTY2YzU3ZmU5N2YyZmQ0YWVjY2NmZjFhZDY4NzgyNGRiMjM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxv
Y2tHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3IuaApAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBCeXRlY29kZUdl
bmVyYXRvckJhc2U7CiBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIExMSW50Q2FsbGVlOwotY2xh
c3MgU2lnbmF0dXJlOworY2xhc3MgRnVuY3Rpb25TaWduYXR1cmU7CiBzdHJ1Y3QgR2VuZXJhdG9y
VHJhaXRzOwogCiBzdHJ1Y3QgSnVtcFRhYmxlRW50cnkgewpAQCAtMTE2LDcgKzExNiw3IEBAIHB1
YmxpYzoKIAogICAgIEhhc2hNYXA8V2FzbUluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIExMSW50
VGllclVwQ291bnRlcjo6T1NSRW50cnlEYXRhPiYgdGllclVwQ291bnRlcigpIHsgcmV0dXJuIG1f
dGllclVwQ291bnRlcjsgfQogCi0gICAgdW5zaWduZWQgYWRkU2lnbmF0dXJlKGNvbnN0IFNpZ25h
dHVyZSYpOworICAgIHVuc2lnbmVkIGFkZFNpZ25hdHVyZShjb25zdCBGdW5jdGlvblNpZ25hdHVy
ZSYpOwogCiAgICAgSnVtcFRhYmxlJiBhZGRKdW1wVGFibGUoc2l6ZV90IG51bWJlck9mRW50cmll
cyk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZKdW1wVGFibGVzKCkgY29uc3Q7CkBAIC0xNDAsNyAr
MTQwLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbUluc3RydWN0aW9uU3Ry
ZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBjb25zdCB2b2lkKiBtX2luc3RydWN0aW9uc1Jhd1Bv
aW50ZXIgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPFdhc21JbnN0cnVjdGlvblN0cmVhbTo6T2Zm
c2V0PiBtX2p1bXBUYXJnZXRzOwotICAgIFZlY3Rvcjxjb25zdCBTaWduYXR1cmUqPiBtX3NpZ25h
dHVyZXM7CisgICAgVmVjdG9yPGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlKj4gbV9zaWduYXR1cmVz
OwogICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHM7CiAgICAg
SGFzaE1hcDxXYXNtSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgTExJbnRUaWVyVXBDb3VudGVy
OjpPU1JFbnRyeURhdGE+IG1fdGllclVwQ291bnRlcjsKICAgICBWZWN0b3I8SnVtcFRhYmxlPiBt
X2p1bXBUYWJsZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oCmluZGV4IDliZjk2NjNjOGEzNWZlNzkwZmNjNGJlMWJlZDFmNzQ1ZGEwMTUzNzQu
LmRiMWM5YWVmODJkNjVhNTgwMTI1NDI3YzNmYzE1Mjk0MjdhMWRkMWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCkBAIC0yOCw3ICsyOCw3
IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiV2FzbVBhcnNlci5oIgot
I2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZp
bml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC01MCwxMCArNTAsMTAgQEAgZW51bSBjbGFzcyBDYXRj
aEtpbmQgewogdGVtcGxhdGU8dHlwZW5hbWUgRW5jbG9zaW5nU3RhY2ssIHR5cGVuYW1lIE5ld1N0
YWNrPgogdm9pZCBzcGxpdFN0YWNrKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgRW5jbG9zaW5n
U3RhY2smIGVuY2xvc2luZ1N0YWNrLCBOZXdTdGFjayYgbmV3U3RhY2spCiB7Ci0gICAgbmV3U3Rh
Y2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7Ci0g
ICAgQVNTRVJUKGVuY2xvc2luZ1N0YWNrLnNpemUoKSA+PSBzaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKSk7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0gZW5jbG9zaW5nU3RhY2suc2l6ZSgpIC0gc2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgbmV3U3RhY2sucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENv
dW50KCkpOworICAgIEFTU0VSVChlbmNsb3NpbmdTdGFjay5zaXplKCkgPj0gc2lnbmF0dXJlLT5h
czxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBlbmNsb3NpbmdTdGFjay5zaXplKCkgLSBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgKytp
KQogICAgICAgICBuZXdTdGFjay51bmNoZWNrZWRBcHBlbmQoZW5jbG9zaW5nU3RhY2suYXQoaSAr
IG9mZnNldCkpOwogICAgIGVuY2xvc2luZ1N0YWNrLnNocmluayhvZmZzZXQpOwogfQpAQCAtMTAx
LDEzICsxMDEsMTMgQEAgcHVibGljOgogICAgICAgICBDb250cm9sVHlwZSBjb250cm9sRGF0YTsK
ICAgICB9OwogCi0gICAgRnVuY3Rpb25QYXJzZXIoQ29udGV4dCYsIGNvbnN0IHVpbnQ4X3QqIGZ1
bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKKyAgICBGdW5jdGlvblBhcnNlcihDb250ZXh0JiwgY29u
c3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBU
eXBlRGVmaW5pdGlvbiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJik7CiAKICAgICBSZXN1bHQg
V0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlKCk7CiAKICAgICBPcFR5cGUgY3VycmVudE9wY29kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZTsgfQogICAgIHNpemVfdCBjdXJyZW50T3Bj
b2RlU3RhcnRpbmdPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRPcGNvZGVTdGFydGlu
Z09mZnNldDsgfQotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9zaWduYXR1cmU7IH0KKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0KIAogICAgIENvbnRyb2xTdGFjayYgY29udHJv
bFN0YWNrKCkgeyByZXR1cm4gbV9jb250cm9sU3RhY2s7IH0KICAgICBTdGFjayYgZXhwcmVzc2lv
blN0YWNrKCkgeyByZXR1cm4gbV9leHByZXNzaW9uU3RhY2s7IH0KQEAgLTIwOSw3ICsyMDksNyBA
QCBwcml2YXRlOgogICAgIFN0YWNrIG1fZXhwcmVzc2lvblN0YWNrOwogICAgIENvbnRyb2xTdGFj
ayBtX2NvbnRyb2xTdGFjazsKICAgICBWZWN0b3I8VHlwZSwgMTY+IG1fbG9jYWxzOwotICAgIGNv
bnN0IFNpZ25hdHVyZSYgbV9zaWduYXR1cmU7CisgICAgY29uc3QgVHlwZURlZmluaXRpb24mIG1f
c2lnbmF0dXJlOwogICAgIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBtX2luZm87CiAKICAgICBP
cFR5cGUgbV9jdXJyZW50T3Bjb2RlOwpAQCAtMjI2LDcgKzIyNiw3IEBAIHN0YXRpYyBib29sIGlz
VHJ5T3JDYXRjaChDb250cm9sVHlwZSYgZGF0YSkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29u
dGV4dD4KLUZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBj
b250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5n
dGgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYg
aW5mbykKK0Z1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcihDb250ZXh0JiBj
b250ZXh0LCBjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5n
dGgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvKQogICAgIDogUGFyc2VyKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoKQog
ICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpZ25hdHVyZShzaWduYXR1cmUpCkBA
IC0yNDIsMTQgKzI0MiwxNSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSgp
IC0+IFJlc3VsdAogewogICAgIHVpbnQzMl90IGxvY2FsR3JvdXBzQ291bnQ7CiAKLSAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX2NvbnRleHQuYWRkQXJndW1lbnRzKG1fc2lnbmF0dXJlKSwgImNh
bid0IGFkZCAiLCBtX3NpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIHRvIEZ1
bmN0aW9uIik7CisgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gKm1fc2lnbmF0dXJlLmFzPEZ1
bmN0aW9uU2lnbmF0dXJlPigpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4dC5h
ZGRBcmd1bWVudHMobV9zaWduYXR1cmUpLCAiY2FuJ3QgYWRkICIsIHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCksICIgYXJndW1lbnRzIHRvIEZ1bmN0aW9uIik7CiAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYXJVSW50MzIobG9jYWxHcm91cHNDb3VudCksICJjYW4ndCBnZXQgbG9jYWwg
Z3JvdXBzIGNvdW50Iik7CiAKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2xvY2Fscy50cnlS
ZXNlcnZlQ2FwYWNpdHkobV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0aW9uJ3MgIiwgbV9zaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpLCAiIGFyZ3VtZW50cyIpOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX3Np
Z25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgbV9sb2NhbHMudW5jaGVja2Vk
QXBwZW5kKG1fc2lnbmF0dXJlLmFyZ3VtZW50KGkpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSks
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBmdW5jdGlvbidzICIsIHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CisgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgbV9sb2NhbHMu
dW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSkpOwogCi0gICAgdWludDY0
X3QgdG90YWxOdW1iZXJPZkxvY2FscyA9IG1fc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsKKyAg
ICB1aW50NjRfdCB0b3RhbE51bWJlck9mTG9jYWxzID0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbG9jYWxHcm91cHNDb3VudDsgKytpKSB7
CiAgICAgICAgIHVpbnQzMl90IG51bWJlck9mTG9jYWxzOwogICAgICAgICBUeXBlIHR5cGVPZkxv
Y2FsOwpAQCAtNzMyLDkgKzczMywxMSBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpj
aGVja0JyYW5jaFRhcmdldChjb25zdCBDb250cm9sVHlwZSYgdGFyZ2V0KSAtPiBQYQogdGVtcGxh
dGU8dHlwZW5hbWUgQ29udGV4dD4KIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnVuaWZ5
KGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sRGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewotICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoY29udHJvbERhdGEuc2lnbmF0dXJlKCktPnJldHVybkNv
dW50KCkgIT0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIGJsb2NrIHdpdGggdHlwZTogIiwg
Y29udHJvbERhdGEuc2lnbmF0dXJlKCktPnRvU3RyaW5nKCksICIgcmV0dXJuczogIiwgY29udHJv
bERhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCksICIgYnV0IHN0YWNrIGhhczogIiwgbV9l
eHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZhbHVlcyIpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKQotICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUobV9leHByZXNzaW9uU3RhY2tb
aV0udHlwZSgpLCBjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSksICJjb250
cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZS4gIiwgbV9leHByZXNzaW9uU3Rh
Y2tbaV0udHlwZSgpLmtpbmQsICIgaXMgbm90IGEgIiwgY29udHJvbERhdGEuc2lnbmF0dXJlKCkt
PnJldHVyblR5cGUoaSkua2luZCk7CisgICAgY29uc3QgVHlwZURlZmluaXRpb24qIHR5cGVEZWZp
bml0aW9uID0gY29udHJvbERhdGEuc2lnbmF0dXJlKCk7IC8vIGp1c3QgdG8gYXZvaWQgYSB3ZWly
ZCBjb21waWxlciBlcnJvciB3aXRoIHRlbXBsYXRlcyBhdCB0aGUgbmV4dCBsaW5lLgorICAgIGNv
bnN0IEZ1bmN0aW9uU2lnbmF0dXJlKiBzaWduYXR1cmUgPSB0eXBlRGVmaW5pdGlvbi0+YXM8RnVu
Y3Rpb25TaWduYXR1cmU+KCk7CisgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihzaWduYXR1cmUt
PnJldHVybkNvdW50KCkgIT0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIGJsb2NrIHdpdGgg
dHlwZTogIiwgc2lnbmF0dXJlLT50b1N0cmluZygpLCAiIHJldHVybnM6ICIsIHNpZ25hdHVyZS0+
cmV0dXJuQ291bnQoKSwgIiBidXQgc3RhY2sgaGFzOiAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXpl
KCksICIgdmFsdWVzIik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+
cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1
YnR5cGUobV9leHByZXNzaW9uU3RhY2tbaV0udHlwZSgpLCBzaWduYXR1cmUtPnJldHVyblR5cGUo
aSkpLCAiY29udHJvbCBmbG93IHJldHVybnMgd2l0aCB1bmV4cGVjdGVkIHR5cGUuICIsIG1fZXhw
cmVzc2lvblN0YWNrW2ldLnR5cGUoKS5raW5kLCAiIGlzIG5vdCBhICIsIHNpZ25hdHVyZS0+cmV0
dXJuVHlwZShpKS5raW5kKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xMDgyLDEwICsxMDg1
LDEwIEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAg
ICAgICAgaW50MzJfdCBoZWFwVHlwZTsKICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlSGVhcFR5cGUobV9pbmZvLCBoZWFwVHlwZSksICJyZWYubnVsbCBoZWFwdHlwZSBtdXN0
IGJlIGZ1bmNyZWYsIGV4dGVybnJlZiBvciB0eXBlX2lkeCIpOwogICAgICAgICAgICAgaWYgKGlz
VHlwZUluZGV4SGVhcFR5cGUoaGVhcFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgU2lnbmF0dXJl
SW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby51
c2VkU2lnbmF0dXJlc1toZWFwVHlwZV0uZ2V0KCkpOwotICAgICAgICAgICAgICAgIHR5cGVPZk51
bGwgPSBUeXBlIHsgVHlwZUtpbmQ6OlJlZk51bGwsIE51bGxhYmxlOjpZZXMsIHNpZ25hdHVyZUlu
ZGV4IH07CisgICAgICAgICAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IFR5cGVJbmZvcm1h
dGlvbjo6Z2V0KG1faW5mby50eXBlU2lnbmF0dXJlc1toZWFwVHlwZV0uZ2V0KCkpOworICAgICAg
ICAgICAgICAgIHR5cGVPZk51bGwgPSBUeXBlIHsgVHlwZUtpbmQ6OlJlZk51bGwsIE51bGxhYmxl
OjpZZXMsIHR5cGVJbmRleCB9OwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
dHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6Olllcywgc3Rh
dGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+KGhlYXBUeXBlKSB9OworICAgICAgICAgICAgICAgIHR5
cGVPZk51bGwgPSBUeXBlIHsgVHlwZUtpbmQ6OlJlZk51bGwsIE51bGxhYmxlOjpZZXMsIHN0YXRp
Y19jYXN0PFR5cGVJbmRleD4oaGVhcFR5cGUpIH07CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZWZUeXBlKG1faW5mbywgdHlwZU9mTnVsbCks
ICJyZWYubnVsbCB0eXBlIG11c3QgYmUgYSByZWZlcmVuY2UgdHlwZSIpOwogICAgICAgICBtX2V4
cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQodHlwZU9mTnVsbCwgbV9jb250ZXh0LmFk
ZENvbnN0YW50KHR5cGVPZk51bGwsIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKQEAgLTEx
MTMsOCArMTExNiw4IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNF
KQogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRSZWZGdW5jKGluZGV4LCByZXN1
bHQpKTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9u
UmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1faW5mby5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwot
ICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKFR5cGUgeyBU
eXBlS2luZDo6UmVmLCBOdWxsYWJsZTo6Tm8sIHNpZ25hdHVyZUluZGV4IH0sIHJlc3VsdCk7Cisg
ICAgICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9pbmZvLnR5cGVJbmRleEZyb21GdW5j
dGlvbkluZGV4U3BhY2UoaW5kZXgpOworICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29u
c3RydWN0QW5kQXBwZW5kKFR5cGUgeyBUeXBlS2luZDo6UmVmLCBOdWxsYWJsZTo6Tm8sIHR5cGVJ
bmRleCB9LCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQogCkBA
IC0xMTc1LDcgKzExNzgsNyBAQCBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVf
Q0FTRSkKICAgICAgICAgVHlwZWRFeHByZXNzaW9uIHZhbHVlOwogICAgICAgICBXQVNNX1RSWV9Q
T1BfRVhQUkVTU0lPTl9TVEFDS19JTlRPKHZhbHVlLCAic2V0X2dsb2JhbCB2YWx1ZSIpOwogICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby5nbG9iYWxzLnNpemUo
KSwgInNldF9nbG9iYWwgIiwgaW5kZXgsICIgb2YgdW5rbm93biBnbG9iYWwsIGxpbWl0IGlzICIs
IG1faW5mby5nbG9iYWxzLnNpemUoKSk7Ci0gICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
bV9pbmZvLmdsb2JhbHNbaW5kZXhdLm11dGFiaWxpdHkgPT0gR2xvYmFsSW5mb3JtYXRpb246Oklt
bXV0YWJsZSwgInNldF9nbG9iYWwgIiwgaW5kZXgsICIgaXMgaW1tdXRhYmxlIik7CisgICAgICAg
IFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9pbmZvLmdsb2JhbHNbaW5kZXhdLm11dGFiaWxpdHkg
PT0gTXV0YWJpbGl0eTo6SW1tdXRhYmxlLCAic2V0X2dsb2JhbCAiLCBpbmRleCwgIiBpcyBpbW11
dGFibGUiKTsKIAogICAgICAgICBUeXBlIGdsb2JhbFR5cGUgPSBtX2luZm8uZ2xvYmFsc1tpbmRl
eF0udHlwZTsKICAgICAgICAgQVNTRVJUKGlzVmFsdWVUeXBlKGdsb2JhbFR5cGUpKTsKQEAgLTEx
ODksOCArMTE5Miw5IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNF
KQogICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwogICAgICAgICBXQVNNX0ZBSUxfSUZf
SEVMUEVSX0ZBSUxTKHBhcnNlRnVuY3Rpb25JbmRleChmdW5jdGlvbkluZGV4KSk7CiAKLSAgICAg
ICAgU2lnbmF0dXJlSW5kZXggY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJl
SW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICBjb25z
dCBTaWduYXR1cmUmIGNhbGxlZVNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
Y2FsbGVlU2lnbmF0dXJlSW5kZXgpOworICAgICAgICBUeXBlSW5kZXggY2FsbGVlVHlwZUluZGV4
ID0gbV9pbmZvLnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7
CisgICAgICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiA9IFR5cGVJbmZv
cm1hdGlvbjo6Z2V0KGNhbGxlZVR5cGVJbmRleCk7CisgICAgICAgIGNvbnN0IGF1dG8mIGNhbGxl
ZVNpZ25hdHVyZSA9ICp0eXBlRGVmaW5pdGlvbi5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbCBmdW5jdGlvbiBpbmRleCAiLCBmdW5j
dGlvbkluZGV4LCAiIGhhcyAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFy
Z3VtZW50cywgYnV0IHRoZSBleHByZXNzaW9uIHN0YWNrIGN1cnJlbnRseSBob2xkcyAiLCBtX2V4
cHJlc3Npb25TdGFjay5zaXplKCksICIgdmFsdWVzIik7CiAKICAgICAgICAgc2l6ZV90IGZpcnN0
QXJndW1lbnRJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIGNhbGxlZVNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCk7CkBAIC0xMTk4LDcgKzEyMDIsNyBAQCBGT1JfRUFDSF9XQVNNX01F
TU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRigh
YXJncy50cnlSZXNlcnZlQ2FwYWNpdHkoY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSks
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBjYWxsJ3MgIiwgY2FsbGVlU2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IGZpcnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gYXJnID0gbV9leHByZXNzaW9uU3RhY2su
YXQoaSk7Ci0gICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1N1YnR5cGUoYXJn
LnR5cGUoKSwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgp
KSwgImFyZ3VtZW50IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbCwgZ290ICIsIGFyZy50eXBlKCkua2lu
ZCwgIiwgZXhwZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50KGkgLSBmaXJzdEFyZ3Vt
ZW50SW5kZXgpLmtpbmQpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNT
dWJ0eXBlKGFyZy50eXBlKCksIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSAtIGZpcnN0
QXJndW1lbnRJbmRleCkpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwg
YXJnLnR5cGUoKS5raW5kLCAiLCBleHBlY3RlZCAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRU
eXBlKGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpLmtpbmQpOwogICAgICAgICAgICAgYXJncy51bmNo
ZWNrZWRBcHBlbmQoYXJnKTsKICAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21T
dGFjaygpOwogICAgICAgICB9CkBAIC0xMjA3LDcgKzEyMTEsNyBAQCBGT1JfRUFDSF9XQVNNX01F
TU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVl
U2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CiAKICAgICAgICAgUmVz
dWx0TGlzdCByZXN1bHRzOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxs
KGZ1bmN0aW9uSW5kZXgsIGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0cykpOworICAgICAg
ICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxsKGZ1bmN0aW9uSW5kZXgsIHR5cGVEZWZp
bml0aW9uLCBhcmdzLCByZXN1bHRzKSk7CiAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVl
U2lnbmF0dXJlLnJldHVybkNvdW50KCkgPT0gcmVzdWx0cy5zaXplKCkpOwogCkBAIC0xMjI0LDEw
ICsxMjI4LDExIEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihzaWduYXR1cmVJbmRl
eCksICJjYW4ndCBnZXQgY2FsbF9pbmRpcmVjdCdzIHNpZ25hdHVyZSBpbmRleCIpOwogICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMih0YWJsZUluZGV4KSwgImNhbid0
IGdldCBjYWxsX2luZGlyZWN0J3MgdGFibGUgaW5kZXgiKTsKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRih0YWJsZUluZGV4ID49IG1faW5mby50YWJsZUNvdW50KCksICJjYWxsX2luZGlyZWN0
J3MgdGFibGUgaW5kZXggIiwgdGFibGVJbmRleCwgIiBpbnZhbGlkLCBsaW1pdCBpcyAiLCBtX2lu
Zm8udGFibGVDb3VudCgpKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8udXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpIDw9IHNpZ25hdHVyZUluZGV4LCAiY2FsbF9pbmRpcmVjdCdzIHNp
Z25hdHVyZSBpbmRleCAiLCBzaWduYXR1cmVJbmRleCwgIiBleGNlZWRzIGtub3duIHNpZ25hdHVy
ZXMgIiwgbV9pbmZvLnVzZWRTaWduYXR1cmVzLnNpemUoKSk7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobV9pbmZvLnR5cGVDb3VudCgpIDw9IHNpZ25hdHVyZUluZGV4LCAiY2FsbF9pbmRp
cmVjdCdzIHNpZ25hdHVyZSBpbmRleCAiLCBzaWduYXR1cmVJbmRleCwgIiBleGNlZWRzIGtub3du
IHNpZ25hdHVyZXMgIiwgbV9pbmZvLnR5cGVDb3VudCgpKTsKICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLnR5cGUoKSAhPSBUYWJsZUVsZW1lbnRU
eXBlOjpGdW5jcmVmLCAiY2FsbF9pbmRpcmVjdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSB0YWJsZSBo
YXMgdHlwZSBmdW5jcmVmIik7CiAKLSAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBjYWxsZWVTaWdu
YXR1cmUgPSBtX2luZm8udXNlZFNpZ25hdHVyZXNbc2lnbmF0dXJlSW5kZXhdLmdldCgpOworICAg
ICAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24gPSBtX2luZm8udHlwZVNp
Z25hdHVyZXNbc2lnbmF0dXJlSW5kZXhdLmdldCgpOworICAgICAgICBjb25zdCBhdXRvJiBjYWxs
ZWVTaWduYXR1cmUgPSAqdHlwZURlZmluaXRpb24uYXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAg
ICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKSArIDE7IC8vIEFkZCB0aGUgY2FsbGVlJ3MgaW5kZXguCiAgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbGxf
aW5kaXJlY3QgZXhwZWN0cyAiLCBhcmd1bWVudENvdW50LCAiIGFyZ3VtZW50cywgYnV0IHRoZSBl
eHByZXNzaW9uIHN0YWNrIGN1cnJlbnRseSBob2xkcyAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXpl
KCksICIgdmFsdWVzIik7CiAKQEAgLTEyMzksMTQgKzEyNDQsMTQgQEAgRk9SX0VBQ0hfV0FTTV9N
RU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJz
dEFyZ3VtZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgVHlwZWRFeHByZXNzaW9uIGFyZyA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpOwog
ICAgICAgICAgICAgaWYgKGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSAxKQotICAgICAg
ICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShhcmcudHlwZSgpLCBj
YWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkpLCAiYXJndW1l
bnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsX2luZGlyZWN0LCBnb3QgIiwgYXJnLnR5cGUoKS5raW5k
LCAiLCBleHBlY3RlZCAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1l
bnRJbmRleCkua2luZCk7CisgICAgICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRigh
aXNTdWJ0eXBlKGFyZy50eXBlKCksIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSAtIGZp
cnN0QXJndW1lbnRJbmRleCkpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsX2luZGly
ZWN0LCBnb3QgIiwgYXJnLnR5cGUoKS5raW5kLCAiLCBleHBlY3RlZCAiLCBjYWxsZWVTaWduYXR1
cmUuYXJndW1lbnRUeXBlKGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpLmtpbmQpOwogICAgICAgICAg
ICAgYXJncy51bmNoZWNrZWRBcHBlbmQoYXJnKTsKICAgICAgICAgICAgIG1fY29udGV4dC5kaWRQ
b3BWYWx1ZUZyb21TdGFjaygpOwogICAgICAgICB9CiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNr
LnNocmluayhmaXJzdEFyZ3VtZW50SW5kZXgpOwogCiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0
czsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2FsbEluZGlyZWN0KHRhYmxl
SW5kZXgsIGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0cykpOworICAgICAgICBXQVNNX1RS
WV9BRERfVE9fQ09OVEVYVChhZGRDYWxsSW5kaXJlY3QodGFibGVJbmRleCwgdHlwZURlZmluaXRp
b24sIGFyZ3MsIHJlc3VsdHMpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y2FsbGVlU2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKICAgICAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChjYWxsZWVTaWduYXR1cmUucmV0dXJuVHlwZShp
KSwgcmVzdWx0c1tpXSk7CkBAIC0xMjU4LDggKzEyNjMsOSBAQCBGT1JfRUFDSF9XQVNNX01FTU9S
WV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcygpLCAiZnVuY3Rpb24g
cmVmZXJlbmNlcyBhcmUgbm90IGVuYWJsZWQiKTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJ
TF9JRighaXNSZWZXaXRoVHlwZUluZGV4KG1fZXhwcmVzc2lvblN0YWNrLmxhc3QoKS50eXBlKCkp
LCAibm9uLWZ1bmNyZWYgY2FsbF9yZWYgdmFsdWUgIiwgbV9leHByZXNzaW9uU3RhY2subGFzdCgp
LnR5cGUoKS5raW5kKTsKIAotICAgICAgICBjb25zdCBTaWduYXR1cmVJbmRleCBjYWxsZWVTaWdu
YXR1cmVJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNrLmxhc3QoKS50eXBlKCkuaW5kZXg7Ci0gICAg
ICAgIGNvbnN0IFNpZ25hdHVyZSYgY2FsbGVlU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRp
b246OmdldChjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIGNvbnN0IFR5cGVJbmRleCBj
YWxsZWVUeXBlSW5kZXggPSBtX2V4cHJlc3Npb25TdGFjay5sYXN0KCkudHlwZSgpLmluZGV4Owor
ICAgICAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24gPSBUeXBlSW5mb3Jt
YXRpb246OmdldChjYWxsZWVUeXBlSW5kZXgpOworICAgICAgICBjb25zdCBhdXRvJiBjYWxsZWVT
aWduYXR1cmUgPSAqdHlwZURlZmluaXRpb24uYXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAg
ICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KSArIDE7IC8vIEFkZCB0aGUgY2FsbGVlJ3MgdmFsdWUuCiAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoYXJndW1lbnRDb3VudCA+IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgImNhbGxfcmVm
IGV4cGVjdHMgIiwgYXJndW1lbnRDb3VudCwgIiBhcmd1bWVudHMsIGJ1dCB0aGUgZXhwcmVzc2lv
biBzdGFjayBjdXJyZW50bHkgaG9sZHMgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHZh
bHVlcyIpOwogCkBAIC0xMjY5LDE0ICsxMjc1LDE0IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NU
T1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBcmd1bWVu
dEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25TdGFjay5hdChpKTsKICAgICAgICAg
ICAgIGlmIChpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gMSkKLSAgICAgICAgICAgICAg
ICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZy50eXBlKCkgIT0gY2FsbGVlU2lnbmF0dXJlLmFy
Z3VtZW50KGkgLSBmaXJzdEFyZ3VtZW50SW5kZXgpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBp
biBjYWxsX2luZGlyZWN0LCBnb3QgIiwgYXJnLnR5cGUoKS5raW5kLCAiLCBleHBlY3RlZCAiLCBj
YWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkua2luZCk7Cisg
ICAgICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihhcmcudHlwZSgpICE9IGNhbGxl
ZVNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSAtIGZpcnN0QXJndW1lbnRJbmRleCksICJhcmd1bWVu
dCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmcudHlwZSgpLmtpbmQs
ICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSAtIGZpcnN0QXJn
dW1lbnRJbmRleCkua2luZCk7CiAgICAgICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChhcmcp
OwogICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAg
IH0KICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7
CiAKICAgICAgICAgUmVzdWx0TGlzdCByZXN1bHRzOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChhZGRDYWxsUmVmKGNhbGxlZVNpZ25hdHVyZSwgYXJncywgcmVzdWx0cykpOworICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxsUmVmKHR5cGVEZWZpbml0aW9uLCBh
cmdzLCByZXN1bHRzKSk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxl
ZVNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCiAgICAgICAgICAgICBtX2V4cHJlc3Npb25T
dGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoY2FsbGVlU2lnbmF0dXJlLnJldHVyblR5cGUoaSksIHJl
c3VsdHNbaV0pOwpAQCAtMTI4NSwyMCArMTI5MSwyMSBAQCBGT1JfRUFDSF9XQVNNX01FTU9SWV9T
VE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICB9CiAKICAgICBjYXNlIEJsb2NrOiB7Ci0gICAgICAg
IEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VCbG9ja1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZSksICJjYW4n
dCBnZXQgYmxvY2sncyBzaWduYXR1cmUiKTsKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5l
U2lnbmF0dXJlQXNUeXBlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2Nr
U2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlQXNUeXBlKSwgImNhbid0IGdldCBibG9j
aydzIHNpZ25hdHVyZSIpOwogCisgICAgICAgIGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlKiBpbmxp
bmVTaWduYXR1cmUgPSBpbmxpbmVTaWduYXR1cmVBc1R5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyB2YWx1ZXMg
b24gc3RhY2sgZm9yIGJsb2NrLiBCbG9jayBleHBlY3RzICIsIGlubGluZVNpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIg
d2VyZSBwcmVzZW50LiBCbG9jayBoYXMgaW5saW5lU2lnbmF0dXJlOiAiLCBpbmxpbmVTaWduYXR1
cmUtPnRvU3RyaW5nKCkpOwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Npb25T
dGFjay5zaXplKCkgLSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
OyArK2kpIHsKICAgICAgICAgICAgIFR5cGUgdHlwZSA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KG9m
ZnNldCArIGkpLnR5cGUoKTsKLSAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodHlw
ZSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiQmxvY2sgZXhwZWN0cyB0aGUgYXJn
dW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQo
aSkua2luZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgdHlwZS5raW5kKTsKKyAgICAgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodHlwZSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3Vt
ZW50VHlwZShpKSwgIkJsb2NrIGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IiwgaSwgIiB0
byBiZSAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50VHlwZShpKS5raW5kLCAiIGJ1dCBhcmd1
bWVudCBoYXMgdHlwZSAiLCB0eXBlLmtpbmQpOwogICAgICAgICB9CiAKICAgICAgICAgaW50NjRf
dCBvbGRTaXplID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOwogICAgICAgICBTdGFjayBuZXdT
dGFjazsKICAgICAgICAgQ29udHJvbFR5cGUgYmxvY2s7Ci0gICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZEJsb2NrKGlubGluZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGJs
b2NrLCBuZXdTdGFjaykpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRCbG9j
ayhpbmxpbmVTaWduYXR1cmVBc1R5cGUsIG1fZXhwcmVzc2lvblN0YWNrLCBibG9jaywgbmV3U3Rh
Y2spKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRTaXplLCBvbGRTaXplIC0gbV9leHByZXNz
aW9uU3RhY2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKICAg
ICAgICAgQVNTRVJUKG5ld1N0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKSk7CiAKQEAgLTEzMDgsMjAgKzEzMTUsMjEgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllf
U1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgfQogCiAgICAgY2FzZSBMb29wOiB7Ci0gICAgICAg
IEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VCbG9ja1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZSksICJjYW4n
dCBnZXQgbG9vcCdzIHNpZ25hdHVyZSIpOworICAgICAgICBCbG9ja1NpZ25hdHVyZSBpbmxpbmVT
aWduYXR1cmVBc1R5cGU7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlQmxvY2tT
aWduYXR1cmUobV9pbmZvLCBpbmxpbmVTaWduYXR1cmVBc1R5cGUpLCAiY2FuJ3QgZ2V0IGxvb3An
cyBzaWduYXR1cmUiKTsKIAorICAgICAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSogaW5saW5l
U2lnbmF0dXJlID0gaW5saW5lU2lnbmF0dXJlQXNUeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5zaXpl
KCkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgdmFsdWVzIG9u
IHN0YWNrIGZvciBsb29wIGJsb2NrLiBMb29wIGV4cGVjdHMgIiwgaW5saW5lU2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwg
IiB3ZXJlIHByZXNlbnQuIExvb3AgaGFzIGlubGluZVNpZ25hdHVyZTogIiwgaW5saW5lU2lnbmF0
dXJlLT50b1N0cmluZygpKTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpIC0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQo
KTsgKytpKSB7CiAgICAgICAgICAgICBUeXBlIHR5cGUgPSBtX2V4cHJlc3Npb25TdGFjay5hdChv
ZmZzZXQgKyBpKS50eXBlKCk7Ci0gICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHR5
cGUgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJn
dW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQo
aSkua2luZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgdHlwZS5raW5kKTsKKyAgICAgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYodHlwZSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3Vt
ZW50VHlwZShpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRv
IGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0IGFyZ3Vt
ZW50IGhhcyB0eXBlICIsIHR5cGUua2luZCk7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQ2NF90
IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CiAgICAgICAgIFN0YWNrIG5ld1N0
YWNrOwogICAgICAgICBDb250cm9sVHlwZSBsb29wOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9f
Q09OVEVYVChhZGRMb29wKGlubGluZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGxvb3As
IG5ld1N0YWNrLCBtX2xvb3BJbmRleCsrKSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05U
RVhUKGFkZExvb3AoaW5saW5lU2lnbmF0dXJlQXNUeXBlLCBtX2V4cHJlc3Npb25TdGFjaywgbG9v
cCwgbmV3U3RhY2ssIG1fbG9vcEluZGV4KyspKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRT
aXplLCBvbGRTaXplIC0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVy
ZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICAgICAgQVNTRVJUKG5ld1N0YWNrLnNpemUoKSA9PSBp
bmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSk7CiAKQEAgLTEzMzEsMjEgKzEzMzksMjIg
QEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgfQogCiAg
ICAgY2FzZSBJZjogewotICAgICAgICBCbG9ja1NpZ25hdHVyZSBpbmxpbmVTaWduYXR1cmU7Cisg
ICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZUFzVHlwZTsKICAgICAgICAgVHlw
ZWRFeHByZXNzaW9uIGNvbmRpdGlvbjsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VCbG9ja1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgaWYn
cyBzaWduYXR1cmUiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VCbG9ja1Np
Z25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZUFzVHlwZSksICJjYW4ndCBnZXQgaWYncyBz
aWduYXR1cmUiKTsKICAgICAgICAgV0FTTV9UUllfUE9QX0VYUFJFU1NJT05fU1RBQ0tfSU5UTyhj
b25kaXRpb24sICJpZiBjb25kaXRpb24iKTsKIAorICAgICAgICBjb25zdCBGdW5jdGlvblNpZ25h
dHVyZSogaW5saW5lU2lnbmF0dXJlID0gaW5saW5lU2lnbmF0dXJlQXNUeXBlLT5hczxGdW5jdGlv
blNpZ25hdHVyZT4oKTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighY29uZGl0aW9u
LnR5cGUoKS5pc0kzMigpLCAiaWYgY29uZGl0aW9uIG11c3QgYmUgaTMyLCBnb3QgIiwgY29uZGl0
aW9uLnR5cGUoKS5raW5kKTsKICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJl
c3Npb25TdGFjay5zaXplKCkgPCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIlRv
byBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZvciBpZiBibG9jay4gSWYgZXhwZWN0cyAiLCBpbmxp
bmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9u
U3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4gSWYgYmxvY2sgaGFzIHNpZ25hdHVyZTogIiwg
aW5saW5lU2lnbmF0dXJlLT50b1N0cmluZygpKTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVTaWduYXR1cmUtPmFy
Z3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRiht
X2V4cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5h
cmd1bWVudChpKSwgIkxvb3AgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRv
IGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSkua2luZCwgIiBidXQgYXJndW1lbnQg
aGFzIHR5cGUgIiwgbV9leHByZXNzaW9uU3RhY2tbaV0udHlwZSgpLmtpbmQpOworICAgICAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50
eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudFR5cGUoaSksICJMb29wIGV4cGVjdHMg
dGhlIGFyZ3VtZW50IGF0IGluZGV4IiwgaSwgIiB0byBiZSAiLCBpbmxpbmVTaWduYXR1cmUtPmFy
Z3VtZW50VHlwZShpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Np
b25TdGFja1tpXS50eXBlKCkua2luZCk7CiAKICAgICAgICAgaW50NjRfdCBvbGRTaXplID0gbV9l
eHByZXNzaW9uU3RhY2suc2l6ZSgpOwogICAgICAgICBTdGFjayBuZXdTdGFjazsKICAgICAgICAg
Q29udHJvbFR5cGUgY29udHJvbDsKLSAgICAgICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRk
SWYoY29uZGl0aW9uLCBpbmxpbmVTaWduYXR1cmUsIG1fZXhwcmVzc2lvblN0YWNrLCBjb250cm9s
LCBuZXdTdGFjaykpOworICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRJZihjb25k
aXRpb24sIGlubGluZVNpZ25hdHVyZUFzVHlwZSwgbV9leHByZXNzaW9uU3RhY2ssIGNvbnRyb2ws
IG5ld1N0YWNrKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU2l6ZSwgb2xkU2l6ZSAtIG1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQo
KSk7CiAgICAgICAgIEFTU0VSVChuZXdTdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCkpOwogCkBAIC0xMzY5LDE4ICsxMzc4LDE5IEBAIEZPUl9FQUNIX1dBU01f
TUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgIGNhc2UgVHJ5OiB7CiAgICAgICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpLCAi
d2FzbSBleGNlcHRpb25zIGFyZSBub3QgZW5hYmxlZCIpOwogCi0gICAgICAgIEJsb2NrU2lnbmF0
dXJlIGlubGluZVNpZ25hdHVyZTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VC
bG9ja1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZSksICJjYW4ndCBnZXQgdHJ5J3Mg
c2lnbmF0dXJlIik7CisgICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZUFzVHlw
ZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VCbG9ja1NpZ25hdHVyZShtX2lu
Zm8sIGlubGluZVNpZ25hdHVyZUFzVHlwZSksICJjYW4ndCBnZXQgdHJ5J3Mgc2lnbmF0dXJlIik7
CiAKKyAgICAgICAgY29uc3QgRnVuY3Rpb25TaWduYXR1cmUqIGlubGluZVNpZ25hdHVyZSA9IGlu
bGluZVNpZ25hdHVyZUFzVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAgICAgIFdB
U01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIDwgaW5saW5lU2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IGFyZ3VtZW50cyBvbiBzdGFjayBmb3Ig
dHJ5IGJsb2NrLiBUcnllIGV4cGVjdHMgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB3ZXJlIHByZXNl
bnQuIFRyeSBibG9jayBoYXMgc2lnbmF0dXJlOiAiLCBpbmxpbmVTaWduYXR1cmUtPnRvU3RyaW5n
KCkpOwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkg
LSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAg
ICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCAr
IGldLnR5cGUoKSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiVHJ5IGV4cGVjdHMg
dGhlIGFyZ3VtZW50IGF0IGluZGV4IiwgaSwgIiB0byBiZSAiLCBpbmxpbmVTaWduYXR1cmUtPmFy
Z3VtZW50KGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIG1fZXhwcmVzc2lvblN0
YWNrW2ldLnR5cGUoKS5raW5kKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
bV9leHByZXNzaW9uU3RhY2tbb2Zmc2V0ICsgaV0udHlwZSgpICE9IGlubGluZVNpZ25hdHVyZS0+
YXJndW1lbnRUeXBlKGkpLCAiVHJ5IGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IiwgaSwg
IiB0byBiZSAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50VHlwZShpKS5raW5kLCAiIGJ1dCBh
cmd1bWVudCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCkua2luZCk7CiAK
ICAgICAgICAgaW50NjRfdCBvbGRTaXplID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOwogICAg
ICAgICBTdGFjayBuZXdTdGFjazsKICAgICAgICAgQ29udHJvbFR5cGUgY29udHJvbDsKLSAgICAg
ICAgV0FTTV9UUllfQUREX1RPX0NPTlRFWFQoYWRkVHJ5KGlubGluZVNpZ25hdHVyZSwgbV9leHBy
ZXNzaW9uU3RhY2ssIGNvbnRyb2wsIG5ld1N0YWNrKSk7CisgICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZFRyeShpbmxpbmVTaWduYXR1cmVBc1R5cGUsIG1fZXhwcmVzc2lvblN0YWNr
LCBjb250cm9sLCBuZXdTdGFjaykpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFNpemUsIG9s
ZFNpemUgLSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCkpOwogICAgICAgICBBU1NFUlQobmV3U3RhY2suc2l6ZSgpID09IGlubGluZVNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKIApAQCAtMTM5Niw4ICsxNDA2LDggQEAgRk9SX0VB
Q0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAKICAgICAgICAgdWludDMyX3Qg
ZXhjZXB0aW9uSW5kZXg7CiAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VF
eGNlcHRpb25JbmRleChleGNlcHRpb25JbmRleCkpOwotICAgICAgICBTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCA9IG1faW5mby5zaWduYXR1cmVJbmRleEZyb21FeGNlcHRpb25JbmRleFNw
YWNlKGV4Y2VwdGlvbkluZGV4KTsKLSAgICAgICAgY29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25T
aWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAg
ICAgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IG1faW5mby50eXBlSW5kZXhGcm9tRXhjZXB0aW9u
SW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7CisgICAgICAgIGNvbnN0IFR5cGVEZWZpbml0aW9u
JiBleGNlcHRpb25TaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBlSW5kZXgpOwog
CiAgICAgICAgIENvbnRyb2xFbnRyeSYgY29udHJvbEVudHJ5ID0gbV9jb250cm9sU3RhY2subGFz
dCgpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFpc1RyeU9yQ2F0Y2goY29udHJv
bEVudHJ5LmNvbnRyb2xEYXRhKSwgImNhdGNoIGJsb2NrIGlzbid0IGFzc29jaWF0ZWQgdG8gYSB0
cnkiKTsKQEAgLTE0MDgsOSArMTQxOCw5IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09Q
KENSRUFURV9DQVNFKQogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zd2FwKHByZUNhdGNoU3Rh
Y2spOwogICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYXRjaChleGNlcHRpb25J
bmRleCwgZXhjZXB0aW9uU2lnbmF0dXJlLCBwcmVDYXRjaFN0YWNrLCBjb250cm9sRW50cnkuY29u
dHJvbERhdGEsIHJlc3VsdHMpKTsKIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25T
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IHJlc3VsdHMuc2l6ZSgpKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
ICsraSkKLSAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChl
eGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQoaSksIHJlc3VsdHNbaV0pOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChleGNlcHRpb25TaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFy
Z3VtZW50Q291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFy
Z3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3Ry
dWN0QW5kQXBwZW5kKGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+
YXJndW1lbnRUeXBlKGkpLCByZXN1bHRzW2ldKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
CiAKQEAgLTE0NTcsOCArMTQ2Nyw4IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENS
RUFURV9DQVNFKQogCiAgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OwogICAgICAgICBX
QVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5k
ZXgpKTsKLSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2ln
bmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7Ci0gICAg
ICAgIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3Jt
YXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXgg
PSBtX2luZm8udHlwZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgp
OworICAgICAgICBjb25zdCBhdXRvJiBleGNlcHRpb25TaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRp
b246OmdldEZ1bmN0aW9uU2lnbmF0dXJlKHR5cGVJbmRleCk7CiAKICAgICAgICAgV0FTTV9WQUxJ
REFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPCBleGNlcHRpb25TaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sgZm9yIHRoZSBl
eGNlcHRpb24gYmVpbmcgdGhyb3duLiBUaGUgZXhjZXB0aW9uIGV4cGVjdHMgIiwgZXhjZXB0aW9u
U2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9uU3Rh
Y2suc2l6ZSgpLCAiIHdlcmUgcHJlc2VudC4gRXhjZXB0aW9uIGhhcyBzaWduYXR1cmU6ICIsIGV4
Y2VwdGlvblNpZ25hdHVyZS50b1N0cmluZygpKTsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKTsKQEAgLTE0NjYsNyArMTQ3Niw3IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09Q
KENSRUFURV9DQVNFKQogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmdzLnRyeVJlc2Vy
dmVDYXBhY2l0eShleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpKSwgImNhbid0IGFs
bG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHRocm93J3MgIiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAg
ICAgICAgVHlwZWRFeHByZXNzaW9uIGFyZyA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KG9mZnNldCAr
IGkpOwotICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihhcmcudHlwZSgpICE9IGV4
Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKSwgIlRoZSBleGNlcHRpb24gYmVpbmcgdGhyb3du
IGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4ICIsIGksICIgdG8gYmUgIiwgZXhjZXB0aW9u
U2lnbmF0dXJlLmFyZ3VtZW50KGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIGFy
Zy50eXBlKCkua2luZCk7CisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZy50
eXBlKCkgIT0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKSwgIlRoZSBleGNlcHRp
b24gYmVpbmcgdGhyb3duIGV4cGVjdHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4ICIsIGksICIgdG8g
YmUgIiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKS5raW5kLCAiIGJ1dCBhcmd1
bWVudCBoYXMgdHlwZSAiLCBhcmcudHlwZSgpLmtpbmQpOwogICAgICAgICAgICAgYXJncy51bmNo
ZWNrZWRBcHBlbmQoYXJnKTsKICAgICAgICAgICAgIG1fY29udGV4dC5kaWRQb3BWYWx1ZUZyb21T
dGFjaygpOwogICAgICAgICB9CkBAIC0xNjUwLDggKzE2NjAsOCBAQCBhdXRvIEZ1bmN0aW9uUGFy
c2VyPENvbnRleHQ+OjpwYXJzZVVucmVhY2hhYmxlRXhwcmVzc2lvbigpIC0+IFBhcnRpYWxSZXN1
bHQKIAogICAgICAgICB1aW50MzJfdCBleGNlcHRpb25JbmRleDsKICAgICAgICAgV0FTTV9GQUlM
X0lGX0hFTFBFUl9GQUlMUyhwYXJzZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7Ci0g
ICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUlu
ZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOwotICAgICAgICBjb25z
dCBTaWduYXR1cmUmIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9pbmZv
LnR5cGVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KTsKKyAgICAg
ICAgY29uc3QgVHlwZURlZmluaXRpb24mIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFR5cGVJbmZvcm1h
dGlvbjo6Z2V0KHR5cGVJbmRleCk7CiAKICAgICAgICAgaWYgKG1fdW5yZWFjaGFibGVCbG9ja3Mg
PiAxKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTE2NjQsOSArMTY3NCw5IEBAIGF1dG8g
RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4g
UGFydGlhbFJlc3VsdAogICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7CiAgICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKGFkZENhdGNoVG9VbnJlYWNoYWJsZShleGNlcHRpb25JbmRleCwg
ZXhjZXB0aW9uU2lnbmF0dXJlLCBkYXRhLmNvbnRyb2xEYXRhLCByZXN1bHRzKSk7CiAKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBy
ZXN1bHRzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRp
b25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkp
LCByZXN1bHRzW2ldKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uU2lnbmF0dXJl
LmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkgPT0gcmVzdWx0cy5zaXpl
KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJl
LmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAg
ICAgIG1fZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChleGNlcHRpb25TaWduYXR1
cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKSwgcmVzdWx0c1tpXSk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21HbG9iYWwuY3BwCmluZGV4IGVkMWIwZjdkMTY5MjJlNjJhNmU3NzZmMThlYTBhOTViNDNl
M2E0M2UuLjMyZTBhN2E5OWRmNTI1MzUzODgyMWI0ZGU1MWY1NDkxNmVkZjBlMWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZv
aWQgR2xvYmFsOjpzZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1
bWVudCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgQVNTRVJUKG1fbXV0YWJpbGl0
eSAhPSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6SW1tdXRhYmxlKTsKKyAgICBBU1NFUlQobV9t
dXRhYmlsaXR5ICE9IFdhc206OkltbXV0YWJsZSk7CiAgICAgc3dpdGNoIChtX3R5cGUua2luZCkg
ewogICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjogewogICAgICAgICBpbnQzMl90IHZhbHVlID0gYXJn
dW1lbnQudG9JbnQzMihnbG9iYWxPYmplY3QpOwpAQCAtMTA0LDggKzEwNCw4IEBAIHZvaWQgR2xv
YmFsOjpzZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudCkK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGlzUmVmV2l0aFR5cGVJbmRleChtX3R5
cGUpICYmICFhcmd1bWVudC5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IHBhcmFtSW5kZXggPSBtX3R5cGUuaW5kZXg7Ci0gICAgICAgICAgICAgICAgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24t
PnNpZ25hdHVyZUluZGV4KCkgOiB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgp
OworICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBwYXJhbUluZGV4ID0gbV90eXBlLmlu
ZGV4OworICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBhcmdJbmRleCA9IHdhc21GdW5j
dGlvbiA/IHdhc21GdW5jdGlvbi0+dHlwZUluZGV4KCkgOiB3YXNtV3JhcHBlckZ1bmN0aW9uLT50
eXBlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBpZiAocGFyYW1JbmRleCAhPSBhcmdJbmRleCkg
ewogICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwg
IkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3QgbWF0Y2ggdGhlIHJlZmVyZW5jZSB0eXBlIl9zKSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21HbG9iYWwuaAppbmRleCAxN2Y4ODY4MWUwNmU0MDIyODBkMTlhZmEyZWViYmNhZThkOWJkMTVl
Li40MzhhN2Y3NDBmZjk5MzE2Yzc2NTgxM2VhZTg3MmY3ZDY3OTQwZjk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCkBAIC00OCwxMyArNDgsMTMgQEAgcHVibGljOgog
ICAgICAgICBWYWx1ZSogbV9wb2ludGVyOwogICAgIH07CiAKLSAgICBzdGF0aWMgUmVmPEdsb2Jh
bD4gY3JlYXRlKFdhc206OlR5cGUgdHlwZSwgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFi
aWxpdHkgbXV0YWJpbGl0eSwgdWludDY0X3QgaW5pdGlhbFZhbHVlID0gMCkKKyAgICBzdGF0aWMg
UmVmPEdsb2JhbD4gY3JlYXRlKFdhc206OlR5cGUgdHlwZSwgV2FzbTo6TXV0YWJpbGl0eSBtdXRh
YmlsaXR5LCB1aW50NjRfdCBpbml0aWFsVmFsdWUgPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgR2xvYmFsKHR5cGUsIG11dGFiaWxpdHksIGluaXRpYWxWYWx1ZSkpOwog
ICAgIH0KIAogICAgIFdhc206OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQot
ICAgIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5IG11dGFiaWxpdHkoKSBjb25z
dCB7IHJldHVybiBtX211dGFiaWxpdHk7IH0KKyAgICBXYXNtOjpNdXRhYmlsaXR5IG11dGFiaWxp
dHkoKSBjb25zdCB7IHJldHVybiBtX211dGFiaWxpdHk7IH0KICAgICBKU1ZhbHVlIGdldChKU0ds
b2JhbE9iamVjdCopIGNvbnN0OwogICAgIHVpbnQ2NF90IGdldFByaW1pdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUubV9wcmltaXRpdmU7IH0KICAgICB2b2lkIHNldChKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUpOwpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIHZhbHVl
UG9pbnRlcigpIHsgcmV0dXJuICZtX3ZhbHVlOyB9CiAKIHByaXZhdGU6Ci0gICAgR2xvYmFsKFdh
c206OlR5cGUgdHlwZSwgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHkgbXV0YWJp
bGl0eSwgdWludDY0X3QgaW5pdGlhbFZhbHVlKQorICAgIEdsb2JhbChXYXNtOjpUeXBlIHR5cGUs
IFdhc206Ok11dGFiaWxpdHkgbXV0YWJpbGl0eSwgdWludDY0X3QgaW5pdGlhbFZhbHVlKQogICAg
ICAgICA6IG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fbXV0YWJpbGl0eShtdXRhYmlsaXR5KQog
ICAgICAgICAsIG1fdmFsdWUoKQpAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogICAgIH0KIAog
ICAgIFdhc206OlR5cGUgbV90eXBlOwotICAgIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRh
YmlsaXR5IG1fbXV0YWJpbGl0eTsKKyAgICBXYXNtOjpNdXRhYmlsaXR5IG1fbXV0YWJpbGl0eTsK
ICAgICBKU09iamVjdCogbV9vd25lciB7IG51bGxwdHIgfTsKICAgICBWYWx1ZSBtX3ZhbHVlOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCmluZGV4IGFl
ZjYyMTkwMmUxMWYzY2RkZTc2MmFlY2E1N2I4ZGQ4NGJmMDFjZTcuLjIxZWQyMTg5NTY1MDVhZWU5
ZjAzZGRhNjY1M2VlMDIwMGZhMGMzYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmNwcApAQCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNs
dWRlICJXYXNtVGFnLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgog
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgSW5zdGFuY2U6OmluaXRFbGVt
ZW50U2VnbWVudCh1aW50MzJfdCB0YWJsZUluZGV4LCBjb25zdCBFbGVtZW50JiBzZWdtZW50LCB1
CiAgICAgICAgIC8vIGZvciB0aGUgaW1wb3J0LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEwCiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXggPSBzZWdtZW50LmZ1bmN0aW9uSW5kaWNlc1tzcmNJbmRleF07Ci0gICAgICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgVHlwZUluZGV4IHR5cGVJ
bmRleCA9IG1fbW9kdWxlLT50eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXgpOwogICAgICAgICBpZiAoaXNJbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KSkgewog
ICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0gaW1wb3J0RnVuY3Rpb248V3Jp
dGVCYXJyaWVyPEpTT2JqZWN0Pj4oZnVuY3Rpb25JbmRleCktPmdldCgpOwogICAgICAgICAgICAg
aWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkgewpAQCAt
MjUxLDE0ICsyNTEsMTQgQEAgdm9pZCBJbnN0YW5jZTo6aW5pdEVsZW1lbnRTZWdtZW50KHVpbnQz
Ml90IHRhYmxlSW5kZXgsIGNvbnN0IEVsZW1lbnQmIHNlZ21lbnQsIHUKICAgICAgICAgICAgICAg
ICBmdW5jdGlvbkltcG9ydCwKICAgICAgICAgICAgICAgICBmdW5jdGlvbkluZGV4LAogICAgICAg
ICAgICAgICAgIGpzSW5zdGFuY2UsCi0gICAgICAgICAgICAgICAgc2lnbmF0dXJlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIHR5cGVJbmRleCk7CiAgICAgICAgICAgICBqc1RhYmxlLT5zZXQoZHN0
SW5kZXgsIHdyYXBwZXJGdW5jdGlvbik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCiAgICAgICAgIENhbGxlZSYgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlID0gY2FsbGVlR3Jv
dXAoKS0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4KTsKICAgICAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExv
Y2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjYWxsZWVHcm91cCgpLT5lbnRyeXBvaW50
TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAgICAg
ICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gVHlwZUlu
Zm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZSh0eXBlSW5kZXgpOwogICAgICAgICAvLyBG
SVhNRTogU2F5IHdlIGV4cG9ydCBsb2NhbCBmdW5jdGlvbiAiZm9vIiBhdCBmdW5jdGlvbiBpbmRl
eCAwLgogICAgICAgICAvLyBXaGF0IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBF
bGVtZW50IHcvIGluZGV4IDAuCiAgICAgICAgIC8vIERvZXMgKG5ldyBJbnN0YW5jZSguLi4pKS5l
eHBvcnRzLmZvbyA9PT0gdGFibGUuZ2V0KDApPwpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgSW5z
dGFuY2U6OmluaXRFbGVtZW50U2VnbWVudCh1aW50MzJfdCB0YWJsZUluZGV4LCBjb25zdCBFbGVt
ZW50JiBzZWdtZW50LCB1CiAgICAgICAgICAgICBqc0luc3RhbmNlLAogICAgICAgICAgICAgZW1i
ZWRkZXJFbnRyeXBvaW50Q2FsbGVlLAogICAgICAgICAgICAgZW50cnlwb2ludExvYWRMb2NhdGlv
biwKLSAgICAgICAgICAgIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIHR5cGVJbmRleCk7
CiAgICAgICAgIGpzVGFibGUtPnNldChkc3RJbmRleCwgZnVuY3Rpb24pOwogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCmlu
ZGV4IDEzNTY5MGRhMmQ2MGI3Y2JjNjk5YmEyNTYzNGRiMjVlNDdjMGRkMDEuLjcxZTA2NDdjNTY2
NjZlYTBmZmQzY2M0NWE0ZGU2MTFlMDc5Mjc3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtOTUsMjcgKzk1LDI3IEBAIHB1
YmxpYzoKIAogICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgbG9vcChCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIGJvZHksIFJlZlB0cjxM
YWJlbD4mJiBjb250aW51YXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb250
cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgp
LCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xMb29wIHsgV1RGTW92ZShib2R5KSB9KTsK
KyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNp
Z25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92
ZShjb250aW51YXRpb24pLCBDb250cm9sTG9vcCB7IFdURk1vdmUoYm9keSkgfSk7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgYmxvY2soQmxvY2tTaWduYXR1cmUgc2ln
bmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24p
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0
YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlv
biksIENvbnRyb2xCbG9jayB7IH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNp
Z25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+
YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xCbG9jayB7IH0p
OwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGlmXyhCbG9ja1NpZ25h
dHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYmIGFsdGVybmF0
ZSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElmIHsgV1RGTW92ZShh
bHRlcm5hdGUpIH0pOworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwg
c3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRD
b3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xJZiB7IFdURk1vdmUoYWx0ZXJu
YXRlKSB9KTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBjcmVhdGVU
cnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCB1bnNpZ25lZCBzdGFja1NpemUsIFJlZjxMYWJl
bD4mJiB0cnlMYWJlbCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlvbiwgdW5zaWduZWQgdHJ5
RGVwdGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1
cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRp
bnVhdGlvbiksIENvbnRyb2xUcnkgeyBXVEZNb3ZlKHRyeUxhYmVsKSwgdHJ5RGVwdGggfSk7Cisg
ICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWdu
YXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUo
Y29udGludWF0aW9uKSwgQ29udHJvbFRyeSB7IFdURk1vdmUodHJ5TGFiZWwpLCB0cnlEZXB0aCB9
KTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBjcmVhdGVDYXRjaChC
bG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExhYmVsPiYm
IHRyeVN0YXJ0LCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uLCBSZWY8TGFiZWw+IHRyeUVu
ZCwgdW5zaWduZWQgdHJ5RGVwdGgsIFZpcnR1YWxSZWdpc3RlciBleGNlcHRpb24pCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAt
IHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBXVEZNb3ZlKGNvbnRpbnVhdGlvbiksIENvbnRy
b2xDYXRjaCB7IENhdGNoS2luZDo6Q2F0Y2gsIFdURk1vdmUodHJ5U3RhcnQpLCBXVEZNb3ZlKHRy
eUVuZCksIHRyeURlcHRoLCBleGNlcHRpb24gfSk7CisgICAgICAgICAgICByZXR1cm4gQ29udHJv
bFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0
dXJlPigpLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbENh
dGNoIHsgQ2F0Y2hLaW5kOjpDYXRjaCwgV1RGTW92ZSh0cnlTdGFydCksIFdURk1vdmUodHJ5RW5k
KSwgdHJ5RGVwdGgsIGV4Y2VwdGlvbiB9KTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBi
b29sIGlzTG9vcChjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oY29udHJvbCk7IH0KQEAgLTE0MiwxOSArMTQyLDE5
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBtX2NvbnRpbnVhdGlvbjsKICAgICAgICAg
fQogCi0gICAgICAgIFNpZ25hdHVyZUFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QK
KyAgICAgICAgRnVuY3Rpb25BcmdDb3VudCBicmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0CiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29w
PigqdGhpcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudENv
dW50KCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVybkNvdW50KCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsKICAgICAgICAgfQogCiAgICAgICAg
IFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAogICAgICAgICB7CiAgICAg
ICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOwogICAgICAgICAgICAgaWYg
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KCp0aGlzKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOwotICAgICAgICAgICAgcmV0dXJu
IG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAgICAgICAgIHJldHVybiBtX3Np
Z25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVy
blR5cGUoaSk7CiAgICAgICAgIH0KIAogICAgICAgICBCbG9ja1NpZ25hdHVyZSBtX3NpZ25hdHVy
ZTsKQEAgLTE5MSw3ICsxOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
UmVzdWx0KG1ha2VTdHJpbmcoIldlYkFzc2VtYmx5Lk1vZHVsZSBmYWlsZWQgY29tcGlsaW5nOiAi
X3MsIG1ha2VTdHJpbmcoYXJncykuLi4pKTsKICAgICB9CiAKLSAgICBMTEludEdlbmVyYXRvcihN
b2R1bGVJbmZvcm1hdGlvbiYsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVy
ZSYpOworICAgIExMSW50R2VuZXJhdG9yKE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4gZmluYWxpemUoKTsKIApAQCAtMjIzLDcgKzIy
Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkUG9wVmFsdWVGcm9tU3RhY2soKSB7IC0tbV9z
dGFja1NpemU7IH0KIAotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFy
Z3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVHlwZURlZmluaXRpb24mKTsKICAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAg
RXhwcmVzc2lvblR5cGUgYWRkQ29uc3RhbnQoVHlwZSwgaW50NjRfdCk7CiAKQEAgLTI4Nyw4ICsy
ODcsOCBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
RWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbFR5cGUmKTsKIAogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0
YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOwotICAgIFBhcnRpYWxS
ZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4
LCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOwot
ICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJs
ZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJvbFR5cGUm
LCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgU3Rh
Y2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5k
ZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3RhY2smLCBD
b250cm9sVHlwZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
dGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5cGUmKTsK
QEAgLTMwNCw5ICszMDQsOSBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gZW5kVG9wTGV2ZWwoQmxvY2tTaWduYXR1cmUsIGNvbnN0IFN0YWNrJik7CiAKICAg
ICAvLyBDYWxscwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwo
dWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25z
dCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiBy
ZXN1bHRzKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVm
KGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExp
c3QmIHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENh
bGwodWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4
cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJl
c3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5k
ZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
UmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQ2FsbFJlZihjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7CiAKICAgICB2b2lkIGRpZEZpbmlzaFBhcnNp
bmdMb2NhbHMoKTsKQEAgLTMyOCw4ICszMjgsOCBAQCBwcml2YXRlOgogICAgICAgICBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFJlc3VsdExpc3QmKT4gY29tbWl0UmVzdWx0czsKICAgICB9OwogCi0g
ICAgTExJbnRDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNp
Z25hdHVyZSYpOwotICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IGNhbGxJbmZvcm1hdGlv
bkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlvbiBj
YWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgRnVuY3Rpb25TaWduYXR1cmUmKTsKKyAgICBW
ZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAyPiBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoY29uc3Qg
RnVuY3Rpb25TaWduYXR1cmUmKTsKICAgICB2b2lkIGxpbmtTd2l0Y2hUYXJnZXRzKExhYmVsJiwg
dW5zaWduZWQgbG9jYXRpb24pOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ckZvcldhc21Mb2NhbCh1aW50MzJfdCBpbmRleCkKQEAgLTUwMCw3ICs1MDAsNyBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV91c2VzRXhjZXB0aW9ucyB7IGZhbHNlIH07CiB9OwogCi1FeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBm
dW5jdGlvbkxlbmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIE1vZHVsZUluZm9ybWF0
aW9uJiBpbmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQorRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVC
eXRlY29kZShjb25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5n
dGgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIE1vZHVsZUluZm9ybWF0aW9uJiBp
bmZvLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogewogICAgIExMSW50R2VuZXJhdG9yIGxsaW50
R2VuZXJhdG9yKGluZm8sIGZ1bmN0aW9uSW5kZXgsIHNpZ25hdHVyZSk7CiAgICAgRnVuY3Rpb25Q
YXJzZXI8TExJbnRHZW5lcmF0b3I+IHBhcnNlcihsbGludEdlbmVyYXRvciwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgaW5mbyk7CkBAIC01MjQsNyArNTI0LDcgQEAg
c3RhdGljIFRocmVhZFNwZWNpZmljPEJ1ZmZlcj4mIHRocmVhZFNwZWNpZmljQnVmZmVyKCkKICAg
ICByZXR1cm4gKnRocmVhZFNwZWNpZmljQnVmZmVyUHRyOwogfQogCi1MTEludEdlbmVyYXRvcjo6
TExJbnRHZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYpCitMTEludEdlbmVyYXRvcjo6TExJbnRHZW5lcmF0b3Io
TW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFR5
cGVEZWZpbml0aW9uJikKICAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShtYWtlVW5pcXVlPEZ1
bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPihmdW5jdGlvbkluZGV4KSwgMCkKICAgICAsIG1faW5m
byhpbmZvKQogICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCkBAIC01NjUsNyAr
NTY1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiBMTElu
dEdlbmVyYXRvcjo6ZmluYWxpemUoKQogLy8gR2VuZXJhdGVkIGZyb20gd2FzbS5qc29uCiAjaW5j
bHVkZSAiV2FzbUxMSW50R2VuZXJhdG9ySW5saW5lcy5oIgogCi1hdXRvIExMSW50R2VuZXJhdG9y
OjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+
IExMSW50Q2FsbEluZm9ybWF0aW9uCithdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRp
b25Gb3JDYWxsZXIoY29uc3QgRnVuY3Rpb25TaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJbnRD
YWxsSW5mb3JtYXRpb24KIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIHN0YWNr
IGxheW91dCBmb3IgY2FsbHMuIFRoZSBkZXNpcmVkIHN0YWNrIGxheW91dCBpczoKIApAQCAtNjIy
LDEzICs2MjIsMTQgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2Fs
bGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpWb2lkOgogICAgICAgICBjYXNlIFR5cGVLaW5kOjpG
dW5jOgorICAgICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfTsKIAogCiAgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykKLSAgICAg
ICAgYWxsb2NhdGVTdGFja1JlZ2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudChpKSk7CisgICAgICAg
IGFsbG9jYXRlU3RhY2tSZWdpc3RlcihzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpKTsKIAogICAg
IGdwckluZGV4ID0gMDsKICAgICBmcHJJbmRleCA9IDA7CkBAIC02NTgsNyArNjU5LDcgQEAgYXV0
byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlKSAtPiBMTEkKICAgICBncHJJbmRleCA9IGJhc2UgLSBzdGFja0NvdW50Owog
ICAgIGZwckluZGV4ID0gZ3BySW5kZXggLSBncHJDb3VudDsKICAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Ci0gICAgICAgIHN3aXRj
aCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpLmtpbmQpIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1
cmUuYXJndW1lbnRUeXBlKGkpLmtpbmQpIHsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6STMyOgog
ICAgICAgICBjYXNlIFR5cGVLaW5kOjpJNjQ6CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkV4dGVy
bnJlZjoKQEAgLTY3OSw2ICs2ODAsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3Jt
YXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgIGNhc2Ug
VHlwZUtpbmQ6OkZ1bmM6CisgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC03
MDgsNiArNzEwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2Fs
bGVyKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFR5cGVLaW5kOjpWb2lkOgogICAgICAgICBjYXNlIFR5cGVLaW5kOjpG
dW5jOgorICAgICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzI2LDcgKzcyOSw3
IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAgICAgcmV0dXJuIExMSW50Q2FsbEluZm9ybWF0
aW9uIHsgc3RhY2tPZmZzZXQsIHN0YWNrQ291bnQsIFdURk1vdmUoYXJndW1lbnRzKSwgV1RGTW92
ZShjb21taXRSZXN1bHRzKSB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3Jt
YXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFZlY3RvcjxWaXJ0
dWFsUmVnaXN0ZXIsIDI+CithdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JD
YWxsZWUoY29uc3QgRnVuY3Rpb25TaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjdG9yPFZpcnR1
YWxSZWdpc3RlciwgMj4KIHsKICAgICBpZiAobV9yZXN1bHRzLnNpemUoKSkKICAgICAgICAgcmV0
dXJuIG1fcmVzdWx0czsKQEAgLTc2NSw2ICs3NjgsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpj
YWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFZl
YwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAgICAg
ICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlN0cnVjdDoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC03NzIsMTEgKzc3NiwxMSBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3Jt
YXRpb25Gb3JDYWxsZWUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IFZlYwogICAgIHJl
dHVybiBtX3Jlc3VsdHM7CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdl
bmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUpIC0+
IFBhcnRpYWxSZXN1bHQKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBtX2NvZGVC
bG9jay0+bV9udW1Bcmd1bWVudHMgPSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOworICAgIG1f
Y29kZUJsb2NrLT5tX251bUFyZ3VtZW50cyA9IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVy
ZT4oKS0+YXJndW1lbnRDb3VudCgpOwogICAgIG1fbm9ybWFsaXplZEFyZ3VtZW50cy5yZXNpemUo
bV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzKTsKIAogICAgIGNvbnN0IGF1dG8mIGNhbGxpbmdD
b252ZW50aW9uID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCk7CkBAIC03OTksOCArODAzLDggQEAg
YXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICBtX25vcm1hbGl6ZWRBcmd1bWVudHNb
aW5kZXhdID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKHN0YWNrSW5k
ZXgrKyk7CiAgICAgfTsKIAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1l
bnQoaSkua2luZCkgeworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXM8
RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgIHN3
aXRjaCAoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudFR5cGUoaSku
a2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6CiAgICAgICAgIGNhc2UgVHlwZUtp
bmQ6Okk2NDoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6RXh0ZXJucmVmOgpAQCAtODE1LDYgKzgx
OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAg
ICAgIGNhc2UgVHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDIwLDcgKzEwMjUsNyBAQCBhdXRv
IExMSW50R2VuZXJhdG9yOjphZGRFbHNlKENvbnRyb2xUeXBlJiBkYXRhLCBTdGFjayYgZXhwcmVz
c2lvblN0YWNrKSAtPiBQYXJ0aQogCiBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbHNlVG9VbnJl
YWNoYWJsZShDb250cm9sVHlwZSYgZGF0YSkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIG1fc3Rh
Y2tTaXplID0gZGF0YS5zdGFja1NpemUoKSArIGRhdGEubV9zaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKTsKKyAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRhLm1fc2lnbmF0
dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOwogCiAgICAgQ29u
dHJvbElmJiBjb250cm9sID0gc3RkOjpnZXQ8Q29udHJvbElmPihkYXRhKTsKICAgICBlbWl0TGFi
ZWwoY29udHJvbC5tX2FsdGVybmF0ZS5nZXQoKSk7CkBAIC0xMDU2LDEzICsxMDYxLDEzIEBAIHZv
aWQgTExJbnRHZW5lcmF0b3I6OmZpbmFsaXplUHJldmlvdXNCbG9ja0ZvckNhdGNoKENvbnRyb2xU
eXBlJiBkYXRhLCBTdGFjayYgZXhwCiAgICAgV2FzbUptcDo6ZW1pdCh0aGlzLCBkYXRhLm1fY29u
dGludWF0aW9uLT5iaW5kKHRoaXMpKTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2F0
Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2ln
bmF0dXJlLCBTdGFjayYgZXhwcmVzc2lvblN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0
TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRk
Q2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBleGNl
cHRpb25TaWduYXR1cmUsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xUeXBlJiBkYXRh
LCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgZmluYWxpemVQ
cmV2aW91c0Jsb2NrRm9yQ2F0Y2goZGF0YSwgZXhwcmVzc2lvblN0YWNrKTsKICAgICByZXR1cm4g
YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb25TaWduYXR1cmUs
IGRhdGEsIHJlc3VsdHMpOwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaFRvVW5y
ZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgZXhjZXB0
aW9uU2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4g
UGFydGlhbFJlc3VsdAorYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxl
KHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgZXhjZXB0aW9u
U2lnbmF0dXJlLCBDb250cm9sVHlwZSYgZGF0YSwgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOwogICAgIFJlZjxMYWJl
bD4gY2F0Y2hMYWJlbCA9IG5ld0VtaXR0ZWRMYWJlbCgpOwpAQCAtMTA3MywxNyArMTA3OCwxNyBA
QCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhj
ZXB0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdAogICAgICAgICBDb250cm9sVHJ5JiB0cnlEYXRhID0g
c3RkOjpnZXQ8Q29udHJvbFRyeT4oZGF0YSk7CiAgICAgICAgIGRhdGEgPSBDb250cm9sVHlwZTo6
Y3JlYXRlQ2F0Y2goZGF0YS5tX3NpZ25hdHVyZSwgZGF0YS5zdGFja1NpemUoKSwgV1RGTW92ZSh0
cnlEYXRhLm1fdHJ5KSwgV1RGTW92ZShkYXRhLm1fY29udGludWF0aW9uKSwgY2F0Y2hMYWJlbCwg
dHJ5RGF0YS5tX3RyeURlcHRoLCBleGNlcHRpb24pOwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXM8RnVuY3Rpb25T
aWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgKytpKQogICAgICAgICByZXN1bHRzLmFwcGVu
ZChwdXNoKCkpOwogCiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKLSAgICAgICAgV2Fz
bUNhdGNoOjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb24sIGV4Y2VwdGlvblNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCksIHJlc3VsdHMuaXNFbXB0eSgpID8gMCA6IC1yZXN1bHRz
WzBdLm9mZnNldCgpKTsKKyAgICAgICAgV2FzbUNhdGNoOjplbWl0KHRoaXMsIGV4Y2VwdGlvbklu
ZGV4LCBleGNlcHRpb24sIGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+YXJndW1lbnRDb3VudCgpLCByZXN1bHRzLmlzRW1wdHkoKSA/IDAgOiAtcmVzdWx0c1swXS5v
ZmZzZXQoKSk7CiAgICAgZWxzZQotICAgICAgICBXYXNtQ2F0Y2hOb1Rsczo6ZW1pdCh0aGlzLCBl
eGNlcHRpb25JbmRleCwgZXhjZXB0aW9uLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpLCByZXN1bHRzLmlzRW1wdHkoKSA/IDAgOiAtcmVzdWx0c1swXS5vZmZzZXQoKSk7CisgICAg
ICAgIFdhc21DYXRjaE5vVGxzOjplbWl0KHRoaXMsIGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb24s
IGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3Vu
dCgpLCByZXN1bHRzLmlzRW1wdHkoKSA/IDAgOiAtcmVzdWx0c1swXS5vZmZzZXQoKSk7CiAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291
bnQoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25h
dHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IHJlc3VsdHNbaV07Ci0gICAgICAgIFR5cGUgdHlw
ZSA9IGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICAgICAgVHlwZSB0eXBlID0g
ZXhjZXB0aW9uU2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudFR5cGUo
aSk7CiAgICAgICAgIHN3aXRjaCAodHlwZS5raW5kKSB7CiAgICAgICAgIGNhc2UgV2FzbTo6VHlw
ZUtpbmQ6OkYzMjoKICAgICAgICAgICAgIFdhc21GMzJSZWludGVycHJldEkzMjo6ZW1pdCh0aGlz
LCBkc3QsIGRzdCk7CkBAIC0xMTg1LDEzICsxMTkwLDEzIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6
OmFkZFJldGhyb3codW5zaWduZWQsIENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0
CiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZFJldHVybihjb25zdCBDb250cm9sVHlwZSYgZGF0
YSwgU3RhY2smIHJldHVyblZhbHVlcykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGlmICghZGF0
YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSkgeworICAgIGlmICghZGF0YS5tX3NpZ25hdHVy
ZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCkpIHsKICAgICAgICAgV2Fz
bVJldFZvaWQ6OmVtaXQodGhpcyk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAg
Ly8gbm8gbmVlZCB0byBkcm9wIGtlZXAgaGVyZSwgc2luY2Ugd2UgaGF2ZSB0byBtb3ZlIGFueXdh
eQotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZSgqZGF0
YS5tX3NpZ25hdHVyZSksIHJldHVyblZhbHVlcyk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpkYXRhLm1fc2lnbmF0dXJlLT5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKSksIHJldHVyblZhbHVlcyk7CiAgICAgV2FzbVJldDo6ZW1pdCh0aGlzKTsKIAog
ICAgIHJldHVybiB7IH07CkBAIC0xMjY5LDE0ICsxMjc0LDE0IEBAIGF1dG8gTExJbnRHZW5lcmF0
b3I6OmFkZEVuZFRvVW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJl
c3Npb25TCiAgICAgdW5zaWduZWQgc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKTsKICAgICBp
ZiAoQ29udHJvbFR5cGU6OmlzQW55Q2F0Y2goZW50cnkuY29udHJvbERhdGEpKQogICAgICAgICAr
K3N0YWNrU2l6ZTsgLy8gQWNjb3VudCBmb3IgdGhlIGNhdWdodCBleGNlcHRpb24KLSAgICBSRUxF
QVNFX0FTU0VSVCh1bnJlYWNoYWJsZSB8fCBtX3N0YWNrU2l6ZSA9PSAgc3RhY2tTaXplICsgZGF0
YS5tX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQodW5yZWFj
aGFibGUgfHwgbV9zdGFja1NpemUgPT0gIHN0YWNrU2l6ZSArIGRhdGEubV9zaWduYXR1cmUtPmFz
PEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpKTsKIAogICAgIG1fc3RhY2tTaXpl
ID0gZGF0YS5zdGFja1NpemUoKTsKIAogICAgIGlmIChDb250cm9sVHlwZTo6aXNUcnkoZGF0YSkg
fHwgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sQ2F0Y2g+KGRhdGEpKQogICAgICAgICAt
LW1fdHJ5RGVwdGg7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3NpZ25h
dHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRhdGEubV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgp
OyArK2kpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkbyBhIGNvbnNpc3RlbmN5IGNo
ZWNrIGhlcmUgYmVjYXVzZSB3ZSBqdXN0IHJlc2V0IHRoZSBzdGFjayBzaXplCiAgICAgICAgIC8v
IGFyZSBwdXNoaW5nIG5ldyB2YWx1ZXMsIHdoaWxlIHdlIGFscmVhZHkgaGF2ZSB0aGUgc2FtZSB2
YWx1ZXMgaW4gdGhlIHN0YWNrLgogICAgICAgICAvLyBUaGUgb25seSByZWFzb24gd2UgZG8gdGhp
bmdzIHRoaXMgd2F5IGlzIHNvIHRoYXQgaXQgYWxzbyB3b3JrcyBmb3IgdW5yZWFjaGFibGUgYmxv
Y2tzLApAQCAtMTI4NSw3ICsxMjkwLDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9V
bnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhwcmVzc2lvblMKICAgICAg
ICAgYXV0byB0bXAgPSBwdXNoKE5vQ29uc2lzdGVuY3lDaGVjayk7CiAgICAgICAgIEFTU0VSVCh1
bnJlYWNoYWJsZSB8fCB0bXAgPT0gZXhwcmVzc2lvblN0YWNrW2ldLnZhbHVlKCkpOwogICAgICAg
ICBpZiAodW5yZWFjaGFibGUpCi0gICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25T
dGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5tX3NpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSwg
dG1wKTsKKyAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVj
dEFuZEFwcGVuZChkYXRhLm1fc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0
dXJuVHlwZShpKSwgdG1wKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZW50cnkuZW5jbG9z
ZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4cHJlc3Npb25TdGFja1tpXSk7CiAgICAgfQpAQCAt
MTMwMiwyNCArMTMwNywyNCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hh
YmxlKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uUwogCiBhdXRvIExMSW50
R2VuZXJhdG9yOjplbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIGNvbnN0IFN0
YWNrJiBleHByZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9PSBzaWduYXR1cmUt
PmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpKTsKIAotICAgIGlmICghc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7CisgICAgaWYgKCFzaWduYXR1cmUtPmFzPEZ1bmN0aW9u
U2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpKSB7CiAgICAgICAgIFdhc21SZXRWb2lkOjplbWl0
KHRoaXMpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKLSAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUo
KnNpZ25hdHVyZSksIGV4cHJlc3Npb25TdGFjayk7CisgICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2so
Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpKSwgZXhwcmVzc2lvblN0YWNrKTsKICAgICBXYXNtUmV0OjplbWl0KHRoaXMpOwogCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBU
eXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgQVNTRVJUKHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwotICAgIExMSW50Q2FsbEluZm9y
bWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKKyAgICBB
U1NFUlQoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkg
PT0gYXJncy5zaXplKCkpOworICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5m
b3JtYXRpb25Gb3JDYWxsZXIoKnNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKSk7CiAg
ICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soaW5mby5hcmd1bWVudHMsIGFyZ3MpOwogICAgIGlmIChD
b250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgIFdhc21DYWxsOjplbWl0KHRoaXMsIGZ1bmN0
aW9uSW5kZXgsIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cyk7
CkBAIC0xMzMwLDM1ICsxMzM1LDM1IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhbGwodWlu
dDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2ln
bmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cith
dXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwg
Y29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIEV4cHJl
c3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtlTGFzdCgpOwogCi0gICAgQVNTRVJUKHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOworICAgIEFTU0VSVChzaWdu
YXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNp
emUoKSk7CiAgICAgQVNTRVJUKG1faW5mby50YWJsZUNvdW50KCkgPiB0YWJsZUluZGV4KTsKICAg
ICBBU1NFUlQobV9pbmZvLnRhYmxlc1t0YWJsZUluZGV4XS50eXBlKCkgPT0gVGFibGVFbGVtZW50
VHlwZTo6RnVuY3JlZik7CiAKLSAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbElu
Zm9ybWF0aW9uRm9yQ2FsbGVyKHNpZ25hdHVyZSk7CisgICAgTExJbnRDYWxsSW5mb3JtYXRpb24g
aW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcigqc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpKTsKICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhpbmZvLmFyZ3VtZW50cywgYXJn
cyk7CiAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKLSAgICAgICAgV2FzbUNhbGxJbmRp
cmVjdDo6ZW1pdCh0aGlzLCBjYWxsZWVJbmRleCwgbV9jb2RlQmxvY2stPmFkZFNpZ25hdHVyZShz
aWduYXR1cmUpLCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVudHMs
IHRhYmxlSW5kZXgpOworICAgICAgICBXYXNtQ2FsbEluZGlyZWN0OjplbWl0KHRoaXMsIGNhbGxl
ZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKCpzaWduYXR1cmUuYXM8RnVuY3Rpb25T
aWduYXR1cmU+KCkpLCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVu
dHMsIHRhYmxlSW5kZXgpOwogICAgIGVsc2UKLSAgICAgICAgV2FzbUNhbGxJbmRpcmVjdE5vVGxz
OjplbWl0KHRoaXMsIGNhbGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKHNpZ25h
dHVyZSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cywgdGFi
bGVJbmRleCk7CisgICAgICAgIFdhc21DYWxsSW5kaXJlY3ROb1Rsczo6ZW1pdCh0aGlzLCBjYWxs
ZWVJbmRleCwgbV9jb2RlQmxvY2stPmFkZFNpZ25hdHVyZSgqc2lnbmF0dXJlLmFzPEZ1bmN0aW9u
U2lnbmF0dXJlPigpKSwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1l
bnRzLCB0YWJsZUluZGV4KTsKICAgICBpbmZvLmNvbW1pdFJlc3VsdHMocmVzdWx0cyk7CiAKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsUmVmKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1
bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRDYWxsUmVmKGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsK
ICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWUgPSBhcmdzLnRha2VMYXN0KCk7CiAKLSAgICBMTElu
dENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKHNpZ25hdHVy
ZSk7CisgICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvckNh
bGxlcigqc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpKTsKICAgICB1bmlmeVZhbHVl
c1dpdGhCbG9jayhpbmZvLmFyZ3VtZW50cywgYXJncyk7CiAgICAgaWYgKENvbnRleHQ6OnVzZUZh
c3RUTFMoKSkKLSAgICAgICAgV2FzbUNhbGxSZWY6OmVtaXQodGhpcywgY2FsbGVlLCBtX2NvZGVC
bG9jay0+YWRkU2lnbmF0dXJlKHNpZ25hdHVyZSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVt
YmVyT2ZTdGFja0FyZ3VtZW50cyk7CisgICAgICAgIFdhc21DYWxsUmVmOjplbWl0KHRoaXMsIGNh
bGxlZSwgbV9jb2RlQmxvY2stPmFkZFNpZ25hdHVyZSgqc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpKSwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1lbnRz
KTsKICAgICBlbHNlCi0gICAgICAgIFdhc21DYWxsUmVmTm9UbHM6OmVtaXQodGhpcywgY2FsbGVl
LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKHNpZ25hdHVyZSksIGluZm8uc3RhY2tPZmZzZXQs
IGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50cyk7CisgICAgICAgIFdhc21DYWxsUmVmTm9UbHM6
OmVtaXQodGhpcywgY2FsbGVlLCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKCpzaWduYXR1cmUu
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpLCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9m
U3RhY2tBcmd1bWVudHMpOwogICAgIGluZm8uY29tbWl0UmVzdWx0cyhyZXN1bHRzKTsKIAogICAg
IHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TExJbnRHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdl
bmVyYXRvci5oCmluZGV4IGI1NWNhNTIwMWQwODUzMjJkY2U3NDE1YzEwM2JkZDdmYTZjY2ZlZjku
LmJkZmY0NDU5MjgyODgzNGExMDY2ODg1YjMxNmI2NWIwYmY3ZDI1OTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5oCkBAIC0zMywxMCArMzMs
MTAgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIEZ1bmN0aW9u
Q29kZUJsb2NrR2VuZXJhdG9yOwotY2xhc3MgU2lnbmF0dXJlOworY2xhc3MgVHlwZURlZmluaXRp
b247CiBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb247CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQnl0
ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgU2lnbmF0dXJlJiwgTW9kdWxlSW5m
b3JtYXRpb24mLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsKK0V4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxl
Qnl0ZWNvZGUoY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBN
b2R1bGVJbmZvcm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTExJbnRQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTElu
dFBsYW4uY3BwCmluZGV4IGMyNDlmOTJjZjA1YmIwYzhjMzQ0ZWE1YWI3MWIzOTZmMWFkYjk0YzEu
LjhiNDM2ZDJkY2Y1NmVmNjJlZDJlNDQ3MjhiNDQxMzE1ZmNjOTgzN2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludFBsYW4uY3BwCkBAIC0zOCw3ICszOCw3IEBACiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRl
ICJXYXNtTExJbnRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5o
IgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNzksMTAgKzc5LDEwIEBAIGJvb2wgTExJbnRQbGFu
OjpwcmVwYXJlSW1wbCgpCiB2b2lkIExMSW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uKHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBtX21vZHVsZUlu
Zm9ybWF0aW9uLT5mdW5jdGlvbnNbZnVuY3Rpb25JbmRleF07Ci0gICAgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIFR5
cGVJbmRleCB0eXBlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9u
VHlwZUluZGljZXNbZnVuY3Rpb25JbmRleF07CisgICAgY29uc3QgVHlwZURlZmluaXRpb24mIHNp
Z25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCk7CiAgICAgdW5zaWduZWQg
ZnVuY3Rpb25JbmRleFNwYWNlID0gbV93YXNtVG9XYXNtRXhpdFN0dWJzLnNpemUoKSArIGZ1bmN0
aW9uSW5kZXg7Ci0gICAgQVNTRVJUX1VOVVNFRChmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxl
SW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlv
bkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsKKyAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0
aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+dHlwZUluZGV4RnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHR5cGVJbmRleCk7CiAKICAgICBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+KCk7CiAgICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFu
ZENvbXBpbGVCeXRlY29kZShmdW5jdGlvbi5kYXRhLmRhdGEoKSwgZnVuY3Rpb24uZGF0YS5zaXpl
KCksIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgZnVuY3Rpb25JbmRleCk7
CkBAIC0xNDgsOCArMTQ4LDggQEAgdm9pZCBMTEludFBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRp
b24oKQogCiAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRl
eCA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9ucy5zaXplKCk7IGZ1bmN0aW9uSW5kZXgr
KykgewogICAgICAgICBpZiAobV9leHBvcnRlZEZ1bmN0aW9uSW5kaWNlcy5jb250YWlucyhmdW5j
dGlvbkluZGV4KSB8fCBtX21vZHVsZUluZm9ybWF0aW9uLT5yZWZlcmVuY2VkRnVuY3Rpb25zKCku
Y29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25h
dHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgICAgICAgICBjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwor
ICAgICAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmlu
dGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgICAgIGNv
bnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBl
SW5kZXgpOwogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdDsKICAgICAgICAgICAgIC8vIFRo
ZSBMTEludCBhbHdheXMgYm91bmRzIGNoZWNrcwogICAgICAgICAgICAgTWVtb3J5TW9kZSBtb2Rl
ID0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTGltaXRzLmgKaW5kZXggZjhmMDUzYjU4NjBlN2RmOTdkYjQ0NjRhYTBlYTE3NDhkOWI4N2Yz
Ni4uNTg3MDM0NzM0NjYzOGQ0YTJkZTUzMjBiNDUzNzQ2NDM3ZmVhZDgyNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaApAQCAtNDQsNiArNDQsNyBAQCBjb25zdGV4cHIg
c2l6ZV90IG1heEV4cG9ydHMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEV4Y2VwdGlv
bnMgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heEdsb2JhbHMgPSAxMDAwMDAwOwogY29u
c3RleHByIHNpemVfdCBtYXhEYXRhU2VnbWVudHMgPSAxMDAwMDA7Citjb25zdGV4cHIgc2l6ZV90
IG1heFN0cnVjdEZpZWxkQ291bnQgPSAxMDAwMDsKIAogY29uc3RleHByIHNpemVfdCBtYXhTdHJp
bmdTaXplID0gMTAwMDAwOwogY29uc3RleHByIHNpemVfdCBtYXhNb2R1bGVTaXplID0gMTAyNCAq
IDEwMjQgKiAxMDI0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcApp
bmRleCAxOTU5OGFhYmQwNzU0NjNmN2E3NmQ5MzRjOWRhZmVmMDQ2NTY1OTE5Li5iOWQ1MzMzMDBj
ZGE3MjFkMTdjZmY4MTU2NjEyOTQzNWUwMDIzNWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlLmNwcApAQCAtNDMsOSArNDMsOSBAQCBNb2R1bGU6Ok1vZHVsZShMTElu
dFBsYW4mIHBsYW4pCiAKIE1vZHVsZTo6fk1vZHVsZSgpIHsgfQogCi1XYXNtOjpTaWduYXR1cmVJ
bmRleCBNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0CitXYXNtOjpUeXBlSW5kZXggTW9kdWxlOjp0eXBl
SW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9tb2R1bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CisgICAgcmV0dXJuIG1f
bW9kdWxlSW5mb3JtYXRpb24tPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rp
b25JbmRleFNwYWNlKTsKIH0KIAogc3RhdGljIE1vZHVsZTo6VmFsaWRhdGlvblJlc3VsdCBtYWtl
VmFsaWRhdGlvblJlc3VsdChMTEludFBsYW4mIHBsYW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlLmgKaW5kZXggNjJjNjkyN2YyYzlhOTgxYjg0MGRjZDY5YzZiZGIwZDQzNGNk
ZDliZi4uNzk3YTgxYzE3NGEyMGU3YTNlODVjNTRmZTBjMjEyN2MxOTBhNmE3MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1vZHVsZShwbGFuKSk7CiAgICAgfQogCi0g
ICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3Q7CisgICAgV2FzbTo6VHlwZUlu
ZGV4IHR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRl
eFNwYWNlKSBjb25zdDsKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxl
SW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpOyB9
CiAKICAgICBSZWY8Q2FsbGVlR3JvdXA+IGNvbXBpbGVTeW5jKENvbnRleHQqLCBNZW1vcnlNb2Rl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVJbmZv
cm1hdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0
aW9uLmgKaW5kZXggYWU2YmJlZWRmMjE4NjE5NDNiODkwZjcyMzE1M2M3ODg4Y2ZjNDk2Ny4uODBm
N2I5ZTEyODNlZTAwN2IxZWM0MDFlM2E1YjJkODIyODA2ZWUzYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgKQEAgLTUwLDM2ICs1
MCwzNiBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Nb2R1
bGVJbmZvcm1hdGlvbigpOwogICAgIAotICAgIHNpemVfdCBmdW5jdGlvbkluZGV4U3BhY2VTaXpl
KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSAr
IGludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQorICAgIHNpemVfdCBm
dW5jdGlvbkluZGV4U3BhY2VTaXplKCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25UeXBl
SW5kaWNlcy5zaXplKCkgKyBpbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXMuc2l6ZSgpOyB9CiAg
ICAgYm9vbCBpc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKHNpemVfdCBm
dW5jdGlvbkluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXgg
PCBmdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwotICAgICAgICByZXR1cm4gZnVuY3Rpb25JbmRl
eCA8IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7CisgICAgICAgIHJldHVy
biBmdW5jdGlvbkluZGV4IDwgaW1wb3J0RnVuY3Rpb25UeXBlSW5kaWNlcy5zaXplKCk7CiAgICAg
fQotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFj
ZShzaXplX3QgZnVuY3Rpb25JbmRleCkgY29uc3QKKyAgICBUeXBlSW5kZXggdHlwZUluZGV4RnJv
bUZ1bmN0aW9uSW5kZXhTcGFjZShzaXplX3QgZnVuY3Rpb25JbmRleCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBpc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpCi0gICAgICAgICAgICA/IGltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNl
c1tmdW5jdGlvbkluZGV4XQotICAgICAgICAgICAgOiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlc1tmdW5jdGlvbkluZGV4IC0gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNp
emUoKV07CisgICAgICAgICAgICA/IGltcG9ydEZ1bmN0aW9uVHlwZUluZGljZXNbZnVuY3Rpb25J
bmRleF0KKyAgICAgICAgICAgIDogaW50ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2VzW2Z1bmN0aW9u
SW5kZXggLSBpbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzLnNpemUoKV07CiAgICAgfQogCi0gICAg
c2l6ZV90IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RXhj
ZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCkgKyBpbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVy
ZUluZGljZXMuc2l6ZSgpOyB9CisgICAgc2l6ZV90IGV4Y2VwdGlvbkluZGV4U3BhY2VTaXplKCkg
Y29uc3QgeyByZXR1cm4gaW1wb3J0RXhjZXB0aW9uVHlwZUluZGljZXMuc2l6ZSgpICsgaW50ZXJu
YWxFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCk7IH0KICAgICBib29sIGlzSW1wb3J0ZWRFeGNl
cHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShzaXplX3QgZXhjZXB0aW9uSW5kZXgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uSW5kZXggPCBleGNlcHRpb25JbmRleFNw
YWNlU2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkluZGV4IDwgaW1wb3J0RXhjZXB0
aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7CisgICAgICAgIHJldHVybiBleGNlcHRpb25JbmRl
eCA8IGltcG9ydEV4Y2VwdGlvblR5cGVJbmRpY2VzLnNpemUoKTsKICAgICB9Ci0gICAgU2lnbmF0
dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShzaXplX3QgZXhj
ZXB0aW9uSW5kZXgpIGNvbnN0CisgICAgVHlwZUluZGV4IHR5cGVJbmRleEZyb21FeGNlcHRpb25J
bmRleFNwYWNlKHNpemVfdCBleGNlcHRpb25JbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBpc0ltcG9ydGVkRXhjZXB0aW9uRnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9u
SW5kZXgpCi0gICAgICAgICAgICA/IGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXNbZXhj
ZXB0aW9uSW5kZXhdCi0gICAgICAgICAgICA6IGludGVybmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5k
aWNlc1tleGNlcHRpb25JbmRleCAtIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6
ZSgpXTsKKyAgICAgICAgICAgID8gaW1wb3J0RXhjZXB0aW9uVHlwZUluZGljZXNbZXhjZXB0aW9u
SW5kZXhdCisgICAgICAgICAgICA6IGludGVybmFsRXhjZXB0aW9uVHlwZUluZGljZXNbZXhjZXB0
aW9uSW5kZXggLSBpbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCldOwogICAgIH0KIAot
ICAgIHVpbnQzMl90IGltcG9ydEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRG
dW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9Ci0gICAgdWludDMyX3QgaW50ZXJuYWxG
dW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUlu
ZGljZXMuc2l6ZSgpOyB9Ci0gICAgdWludDMyX3QgaW1wb3J0RXhjZXB0aW9uQ291bnQoKSBjb25z
dCB7IHJldHVybiBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsgfQotICAg
IHVpbnQzMl90IGludGVybmFsRXhjZXB0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5h
bEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CisgICAgdWludDMyX3QgaW1wb3J0
RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9uVHlwZUluZGljZXMu
c2l6ZSgpOyB9CisgICAgdWludDMyX3QgaW50ZXJuYWxGdW5jdGlvbkNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gaW50ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2VzLnNpemUoKTsgfQorICAgIHVpbnQzMl90
IGltcG9ydEV4Y2VwdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RXhjZXB0aW9uVHlw
ZUluZGljZXMuc2l6ZSgpOyB9CisgICAgdWludDMyX3QgaW50ZXJuYWxFeGNlcHRpb25Db3VudCgp
IGNvbnN0IHsgcmV0dXJuIGludGVybmFsRXhjZXB0aW9uVHlwZUluZGljZXMuc2l6ZSgpOyB9CiAK
ICAgICAvLyBDdXJyZW50bHksIG91ciB3YXNtIGltcGxlbWVudGF0aW9uIGFsbG93cyBvbmx5IG9u
ZSBtZW1vcnkgYW5kIHRhYmxlLgogICAgIC8vIElmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoaXMgbGlt
aXRhdGlvbiwgd2Ugd291bGQgaGF2ZSBNZW1vcnlJbmZvcm1hdGlvbiBhbmQgVGFibGVJbmZvcm1h
dGlvbiBpbiB0aGUgVmVjdG9ycy4KQEAgLTk5LDYgKzk5LDggQEAgc3RydWN0IE1vZHVsZUluZm9y
bWF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1vZHVsZUluZm9ybWF0aW9uPiB7
CiAgICAgYm9vbCBpc0RlY2xhcmVkRXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2RlY2xhcmVkRXhjZXB0aW9ucy5jb250YWlucyhpbmRleCk7IH0KICAgICB2b2lkIGFk
ZERlY2xhcmVkRXhjZXB0aW9uKHVpbnQzMl90IGluZGV4KSB7IG1fZGVjbGFyZWRFeGNlcHRpb25z
LnNldChpbmRleCk7IH0KIAorICAgIHVpbnQzMl90IHR5cGVDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IHR5cGVTaWduYXR1cmVzLnNpemUoKTsgfQorCiAgICAgYm9vbCBoYXNNZW1vcnlJbXBvcnQoKSBj
b25zdCB7IHJldHVybiBtZW1vcnkuaXNJbXBvcnQoKTsgfQogCiAgICAgQnJhbmNoSGludCBnZXRC
cmFuY2hIaW50KHVpbnQzMl90IGZ1bmN0aW9uT2Zmc2V0LCB1aW50MzJfdCBicmFuY2hPZmZzZXQp
IGNvbnN0CkBAIC0xMTAsMTEgKzExMiwxMSBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+IHsKICAgICB9CiAK
ICAgICBWZWN0b3I8SW1wb3J0PiBpbXBvcnRzOwotICAgIFZlY3RvcjxTaWduYXR1cmVJbmRleD4g
aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzOwotICAgIFZlY3RvcjxTaWduYXR1cmVJbmRl
eD4gaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7Ci0gICAgVmVjdG9yPFNpZ25hdHVy
ZUluZGV4PiBpbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOwotICAgIFZlY3RvcjxTaWdu
YXR1cmVJbmRleD4gaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzOwotICAgIFZlY3Rv
cjxSZWY8U2lnbmF0dXJlPj4gdXNlZFNpZ25hdHVyZXM7CisgICAgVmVjdG9yPFR5cGVJbmRleD4g
aW1wb3J0RnVuY3Rpb25UeXBlSW5kaWNlczsKKyAgICBWZWN0b3I8VHlwZUluZGV4PiBpbnRlcm5h
bEZ1bmN0aW9uVHlwZUluZGljZXM7CisgICAgVmVjdG9yPFR5cGVJbmRleD4gaW1wb3J0RXhjZXB0
aW9uVHlwZUluZGljZXM7CisgICAgVmVjdG9yPFR5cGVJbmRleD4gaW50ZXJuYWxFeGNlcHRpb25U
eXBlSW5kaWNlczsKKyAgICBWZWN0b3I8UmVmPFR5cGVEZWZpbml0aW9uPj4gdHlwZVNpZ25hdHVy
ZXM7CiAKICAgICBNZW1vcnlJbmZvcm1hdGlvbiBtZW1vcnk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAppbmRleCAyNTEyNTFmOGFhZTE5YWUwNzA1MjE2YzA5
MThkMGVlMjI5ZjE1YmM5Li4xMGIzNjcxNjFjNWViZDA0YzZhYjNiMjMwNjRhM2RiMjVhNzQ3YzQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCkBAIC0zNSw3
ICszNSw3IEBACiAjaW5jbHVkZSAiV2FzbUNhbGxlZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2Fz
bUlSR2VuZXJhdG9ySGVscGVycy5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvbi5oIgotI2lu
Y2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0
aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0xv
Y2tlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTY4LDggKzY4LDggQEAg
dm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbnN0IHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKICAgICBBU1NFUlQoZnVuY3Rpb25J
bmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZnVuY3Rpb25JbmRleFNw
YWNlU2l6ZSgpKTsKIAotICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1
bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlv
bkluZGV4XTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9y
bWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBt
X21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXNbbV9mdW5jdGlv
bkluZGV4XTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlID0gVHlwZUluZm9y
bWF0aW9uOjpnZXQodHlwZUluZGV4KTsKIAogICAgIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiB1bmxpbmtlZENhbGxzOwogICAgIENvbXBpbGF0aW9uQ29udGV4dCBjb250ZXh0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9TUkVudHJ5UGxhbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAppbmRleCBl
MmU1Y2U1N2Y1MGUwMzZjNmViNjgzMzFhODNlZWMxYWUwNjRiYTI0Li5hNTBiODY3YjhiZjc0ODhj
YzgwZDFiNjQyOTZiMjRiODYwZDgyNjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT1NSRW50cnlQbGFuLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIldh
c21JUkdlbmVyYXRvckhlbHBlcnMuaCIKICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIK
ICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKICNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CkBAIC03MCw4ICs3MCw4IEBAIHZvaWQgT1NSRW50cnlQbGFuOjp3b3Jr
KENvbXBpbGF0aW9uRWZmb3J0KQogICAgIGNvbnN0IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFj
ZSA9IG1fZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9y
dEZ1bmN0aW9uQ291bnQoKTsKICAgICBBU1NFUlQoZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1
bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKIAotICAg
IFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50
ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKLSAgICBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0
dXJlSW5kZXgpOworICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9u
LT5pbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKKyAgICBjb25z
dCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUlu
ZGV4KTsKIAogICAgIENvbXBpbGF0aW9uTW9kZSB0YXJnZXRDb21waWxhdGlvbk1vZGUgPSBtX2Nh
bGxlZS0+Y29tcGlsYXRpb25Nb2RlKCkgPT0gQ29tcGlsYXRpb25Nb2RlOjpMTEludE1vZGUgPyBD
b21waWxhdGlvbk1vZGU6OkJCUUZvck9TUkVudHJ5TW9kZSA6IENvbXBpbGF0aW9uTW9kZTo6T01H
Rm9yT1NSRW50cnlNb2RlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bl
cmF0aW9ucy5jcHAKaW5kZXggYmI0NmY4YTgxMzJkMWVkNTVlMWMzNGFmNmEwMGYwZDI0OWZmMGZj
My4uMmVmMjQ4ZGMyNmJiM2I1NjNiZDI4NzQwNDYwMjFjY2E5ZGUyZWM4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcApAQCAtNTE0LDcgKzUxNCw3
IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9CaWdJbnQsIEVu
Y29kZWRKU1ZhbHVlLCAoQ2FsbEZyYW1lKiBjCiB9CiAKIC8vIGh0dHBzOi8vd2ViYXNzZW1ibHku
Z2l0aHViLmlvL211bHRpLXZhbHVlL2pzLWFwaS9pbmRleC5odG1sI3J1bi1hLWhvc3QtZnVuY3Rp
b24KLUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25JdGVyYXRlUmVzdWx0cywgdm9p
ZCwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IFNpZ25h
dHVyZSogc2lnbmF0dXJlLCBKU1ZhbHVlIHJlc3VsdCwgdWludDY0X3QqIHJlZ2lzdGVyUmVzdWx0
cywgdWludDY0X3QqIGNhbGxlZUZyYW1lUG9pbnRlcikpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMsIHZvaWQsIChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBUeXBlRGVmaW5pdGlvbiogdHlwZSwgSlNWYWx1ZSBy
ZXN1bHQsIHVpbnQ2NF90KiByZWdpc3RlclJlc3VsdHMsIHVpbnQ2NF90KiBjYWxsZWVGcmFtZVBv
aW50ZXIpKQogewogICAgIC8vIEZJWE1FOiBDb25zaWRlciBwYXNzaW5nIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGVhZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAzMjA2CkBAIC01MjQsNyArNTI0LDkgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRzLCB2b2lkLCAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEkKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgYXV0byB3YXNtQ2FsbEluZm8g
PSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKnNpZ25hdHVyZSwg
Q2FsbFJvbGU6OkNhbGxlZSk7CisgICAgY29uc3QgRnVuY3Rpb25TaWduYXR1cmUqIHNpZ25hdHVy
ZSA9IHR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOworCisgICAgYXV0byB3YXNtQ2FsbElu
Zm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKnR5cGUsIENh
bGxSb2xlOjpDYWxsZWUpOwogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyUmVzdWx0
T2Zmc2V0cyA9IHdhc21DYWxsSW5mby5jb21wdXRlUmVzdWx0c09mZnNldExpc3QoKTsKIAogICAg
IHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50ID0gMDsKQEAgLTU4OCw3ICs1OTAsNyBAQCBKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMsIHZvaWQsIChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSQogLy8gRklYTUU6IEl0IHdvdWxkIGJlIG11Y2ggZWFzaWVyIHRvIGlu
bGluZSB0aGlzIHdoZW4gd2UgaGF2ZSBhIGdsb2JhbCBHQywgd2hpY2ggY291bGQgcHJvYmFibHkg
bWVhbiB3ZSBjb3VsZCBhdm9pZAogLy8gc3BpbGxpbmcgdGhlIHJlc3VsdHMgb250byB0aGUgc3Rh
Y2suCiAvLyBTYXZlZCByZXN1bHQgcmVnaXN0ZXJzIHNob3VsZCBiZSBwbGFjZWQgb24gdGhlIHN0
YWNrIGp1c3QgYWJvdmUgdGhlIGxhc3Qgc3RhY2sgcmVzdWx0LgotSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5LCBKU0FycmF5KiwgKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IFNpZ25hdHVyZSog
c2lnbmF0dXJlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBKU1ZhbHVlKiBzdGFja1BvaW50
ZXJGcm9tQ2FsbGVlKSkKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25BbGxvY2F0
ZVJlc3VsdHNBcnJheSwgSlNBcnJheSosIChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5z
dGFuY2UqIGluc3RhbmNlLCBjb25zdCBUeXBlRGVmaW5pdGlvbiogdHlwZSwgSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSwgSlNWYWx1ZSogc3RhY2tQb2ludGVyRnJvbUNhbGxlZSkpCiB7CiAgICAg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZT4oKTsKICAgICBWTSYgdm0gPSBqc0luc3RhbmNlLT52bSgpOwpAQCAt
NTk2LDEyICs1OTgsMTMgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkFsbG9j
YXRlUmVzdWx0c0FycmF5LCBKU0FycmF5KiwgKENhbGxGcmFtZSogY2EKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKICAgICBP
YmplY3RJbml0aWFsaXphdGlvblNjb3BlIGluaXRpYWxpemF0aW9uU2NvcGUoZ2xvYmFsT2JqZWN0
LT52bSgpKTsKKyAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSogc2lnbmF0dXJlID0gdHlwZS0+
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gSlNBcnJheTo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlc3RyaWN0ZWQoaW5pdGlhbGl6YXRpb25TY29wZSwgbnVs
bHB0ciwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24oaW5kZXhpbmdUeXBlKSwgc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKIAogICAg
IC8vIEZJWE1FOiBIYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlLi4uCiAgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0KTsKIAotICAgIGF1dG8gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50
aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKCpzaWduYXR1cmUpOworICAgIGF1dG8gd2FzbUNhbGxJ
bmZvID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKCp0eXBlKTsK
ICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlclJlc3VsdHMgPSB3YXNtQ2FsbEluZm8u
Y29tcHV0ZVJlc3VsdHNPZmZzZXRMaXN0KCk7CiAKICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihK
U1ZhbHVlKSA9PSBzaXplb2YoQ1BVUmVnaXN0ZXIpLCAiVGhlIGNvZGUgYmVsb3cgcmVsaWVzIG9u
IHRoaXMuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bl
cmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaApp
bmRleCBjZjdjMGQ1ZmVmNGRmZDM1YzdjY2EzMzQ3OTNlYjI0NGVjYmFkZDE1Li41OGQxNTk3NWU4
OGQyMDNkYmM5ODQ0YzE0ZTU0MjQwMmE2MTZjYjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PcGVyYXRpb25zLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ29udGV4dDsK
IG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgSW5zdGFuY2U7Ci1jbGFzcyBTaWduYXR1cmU7Citj
bGFzcyBUeXBlRGVmaW5pdGlvbjsKIAogdm9pZCBsb2FkVmFsdWVzSW50b0J1ZmZlcihQcm9iZTo6
Q29udGV4dCYsIGNvbnN0IFN0YWNrTWFwJiwgdWludDY0X3QqIGJ1ZmZlcik7CiAKQEAgLTYyLDgg
KzYyLDggQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9GMzIs
IGZsb2F0LCAoQ2FsbEZyYW1lKiwgSlNWYWx1ZSkpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkNvbnZlcnRUb0JpZ0ludCwgRW5jb2RlZEpTVmFsdWUsIChDYWxsRnJhbWUq
LCBJbnN0YW5jZSosIGludDY0X3QpKTsKIAotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25JdGVyYXRlUmVzdWx0cywgdm9pZCwgKENhbGxGcmFtZSosIEluc3RhbmNlKiwgY29uc3Qg
U2lnbmF0dXJlKiwgSlNWYWx1ZSwgdWludDY0X3QqLCB1aW50NjRfdCopKTsKLUpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXksIEpTQXJyYXkqLCAo
Q2FsbEZyYW1lKiwgV2FzbTo6SW5zdGFuY2UqLCBjb25zdCBTaWduYXR1cmUqLCBJbmRleGluZ1R5
cGUsIEpTVmFsdWUqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkl0ZXJh
dGVSZXN1bHRzLCB2b2lkLCAoQ2FsbEZyYW1lKiwgSW5zdGFuY2UqLCBjb25zdCBUeXBlRGVmaW5p
dGlvbiosIEpTVmFsdWUsIHVpbnQ2NF90KiwgdWludDY0X3QqKSk7CitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5LCBKU0FycmF5KiwgKENhbGxG
cmFtZSosIFdhc206Okluc3RhbmNlKiwgY29uc3QgVHlwZURlZmluaXRpb24qLCBJbmRleGluZ1R5
cGUsIEpTVmFsdWUqKSk7CiAKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bVdyaXRlQmFycmllclNsb3dQYXRoLCB2b2lkLCAoSlNDZWxsKiwgVk0qKSk7CiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblBvcGNvdW50MzIsIHVpbnQzMl90LCAoaW50MzJfdCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCmluZGV4IGVkMDBkOWEwYTQy
Yjc5YWRjMWYzYzhhYjBmMzQ2ZmM0ZjZkYTg5YWUuLjQzOGZmM2Y3MmQ5YjY2NDhhYWY3MGE0OWEw
YWE3YjE1MThiNmI5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgK
QEAgLTExMSwxNSArMTExLDE1IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgY29uc3QgdWlu
dDhfdCogbV9zb3VyY2U7CiAgICAgc2l6ZV90IG1fc291cmNlTGVuZ3RoOwotICAgIC8vIFdlIGtl
ZXAgYSBsb2NhbCByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCB0YWJsZSBzbyB3ZSBkb24ndCBoYXZl
IHRvIGZldGNoIGl0IHRvIGZpbmQgdGh1bmsgc2lnbmF0dXJlcy4KLSAgICBjb25zdCBTaWduYXR1
cmVJbmZvcm1hdGlvbiYgbV9zaWduYXR1cmVJbmZvcm1hdGlvbjsKKyAgICAvLyBXZSBrZWVwIGEg
bG9jYWwgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgdGFibGUgc28gd2UgZG9uJ3QgaGF2ZSB0byBm
ZXRjaCBpdCB0byBmaW5kIHRodW5rIHR5cGVzLgorICAgIGNvbnN0IFR5cGVJbmZvcm1hdGlvbiYg
bV90eXBlSW5mb3JtYXRpb247CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzVHlwZT4K
IEFMV0FZU19JTkxJTkUgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6UGFyc2VyKGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZUJ1ZmZlciwgc2l6ZV90IHNvdXJjZUxlbmd0aCkKICAgICA6IG1fc291cmNlKHNvdXJj
ZUJ1ZmZlcikKICAgICAsIG1fc291cmNlTGVuZ3RoKHNvdXJjZUxlbmd0aCkKLSAgICAsIG1fc2ln
bmF0dXJlSW5mb3JtYXRpb24oU2lnbmF0dXJlSW5mb3JtYXRpb246OnNpbmdsZXRvbigpKQorICAg
ICwgbV90eXBlSW5mb3JtYXRpb24oVHlwZUluZm9ybWF0aW9uOjpzaW5nbGV0b24oKSkKIHsKIH0K
IApAQCAtMjgwLDcgKzI4MCw3IEBAIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgUGFyc2VyPFN1Y2Nl
c3NUeXBlPjo6UGFydGlhbFJlc3VsdCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwCiAgICAgaWYgKHBl
ZWtJbnQ3KHR5cGVLaW5kKSAmJiBpc1ZhbGlkVHlwZUtpbmQodHlwZUtpbmQpKSB7CiAgICAgICAg
IFR5cGUgdHlwZSA9IHtzdGF0aWNfY2FzdDxUeXBlS2luZD4odHlwZUtpbmQpLCBOdWxsYWJsZTo6
WWVzLCAwfTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighKGlzVmFsdWVUeXBlKHR5cGUp
IHx8IHR5cGUuaXNWb2lkKCkpLCAicmVzdWx0IHR5cGUgb2YgYmxvY2s6ICIsIG1ha2VTdHJpbmco
dHlwZS5raW5kKSwgIiBpcyBub3QgYSB2YWx1ZSB0eXBlIG9yIFZvaWQiKTsKLSAgICAgICAgcmVz
dWx0ID0gbV9zaWduYXR1cmVJbmZvcm1hdGlvbi50aHVua0Zvcih0eXBlKTsKKyAgICAgICAgcmVz
dWx0ID0gbV90eXBlSW5mb3JtYXRpb24udGh1bmtGb3IodHlwZSk7CiAgICAgICAgIG1fb2Zmc2V0
Kys7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtMjg4LDkgKzI4OCw5IEBAIEFMV0FZ
U19JTkxJTkUgdHlwZW5hbWUgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6UGFydGlhbFJlc3VsdCBQYXJz
ZXI8U3VjY2Vzc1R5cGU+OjpwCiAgICAgaW50NjRfdCBpbmRleDsKICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhckludDY0KGluZGV4KSwgIkJsb2NrLWxpa2UgaW5zdHJ1Y3Rpb24gZG9l
c24ndCByZXR1cm4gdmFsdWUgdHlwZSBidXQgY2FuJ3QgZGVjb2RlIHR5cGUgc2VjdGlvbiBpbmRl
eCIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXggPCAwLCAiQmxvY2stbGlrZSBpbnN0
cnVjdGlvbiBzaWduYXR1cmUgaW5kZXggaXMgbmVnYXRpdmUiKTsKLSAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpID49IGluZm8udXNlZFNpZ25hdHVyZXMu
c2l6ZSgpLCAiQmxvY2stbGlrZSBpbnN0cnVjdGlvbiBzaWduYXR1cmUgaW5kZXggaXMgb3V0IG9m
IGJvdW5kcy4gSW5kZXg6ICIsIGluZGV4LCAiIHR5cGUgaW5kZXggc3BhY2U6ICIsIGluZm8udXNl
ZFNpZ25hdHVyZXMuc2l6ZSgpKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHN0YXRpY19jYXN0
PHNpemVfdD4oaW5kZXgpID49IGluZm8udHlwZUNvdW50KCksICJCbG9jay1saWtlIGluc3RydWN0
aW9uIHNpZ25hdHVyZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLiBJbmRleDogIiwgaW5kZXgsICIg
dHlwZSBpbmRleCBzcGFjZTogIiwgaW5mby50eXBlQ291bnQoKSk7CiAKLSAgICByZXN1bHQgPSAm
aW5mby51c2VkU2lnbmF0dXJlc1tpbmRleF0uZ2V0KCk7CisgICAgcmVzdWx0ID0gJmluZm8udHlw
ZVNpZ25hdHVyZXNbaW5kZXhdLmdldCgpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTMxMiw3
ICszMTIsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyPFN1Y2Nlc3NUeXBlPjo6cGFyc2VI
ZWFwVHlwZShjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oaGVhcFR5cGUpID49IGluZm8u
dXNlZFNpZ25hdHVyZXMuc2l6ZSgpKQorICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGhlYXBU
eXBlKSA+PSBpbmZvLnR5cGVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXN1bHQgPSBoZWFwVHlwZTsKQEAgLTMzMCwyMCArMzMwLDE5IEBAIEFMV0FZU19JTkxJTkUgYm9v
bCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJzZVZhbHVlVHlwZShjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYKIAogICAgIFR5cGVLaW5kIHR5cGVLaW5kID0gc3RhdGljX2Nhc3Q8VHlwZUtpbmQ+KGtp
bmQpOwogICAgIGJvb2wgaXNOdWxsYWJsZSA9IHRydWU7Ci0gICAgU2lnbmF0dXJlSW5kZXggc2ln
SW5kZXggPSAwOwotCisgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IDA7CiAgICAgaWYgKE9wdGlv
bnM6OnVzZVdlYkFzc2VtYmx5VHlwZWRGdW5jdGlvblJlZmVyZW5jZXMoKSAmJiAodHlwZUtpbmQg
PT0gVHlwZUtpbmQ6OkZ1bmNyZWYgfHwgdHlwZUtpbmQgPT0gVHlwZUtpbmQ6OkV4dGVybnJlZikp
IHsKLSAgICAgICAgc2lnSW5kZXggPSBzdGF0aWNfY2FzdDxTaWduYXR1cmVJbmRleD4odHlwZUtp
bmQpOworICAgICAgICB0eXBlSW5kZXggPSBzdGF0aWNfY2FzdDxUeXBlSW5kZXg+KHR5cGVLaW5k
KTsKICAgICAgICAgdHlwZUtpbmQgPSBUeXBlS2luZDo6UmVmTnVsbDsKICAgICB9IGVsc2UgaWYg
KHR5cGVLaW5kID09IFR5cGVLaW5kOjpSZWYgfHwgdHlwZUtpbmQgPT0gVHlwZUtpbmQ6OlJlZk51
bGwpIHsKICAgICAgICAgaXNOdWxsYWJsZSA9IHR5cGVLaW5kID09IFR5cGVLaW5kOjpSZWZOdWxs
OwogICAgICAgICBpbnQzMl90IGhlYXBUeXBlOwogICAgICAgICBpZiAoIXBhcnNlSGVhcFR5cGUo
aW5mbywgaGVhcFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzaWdJ
bmRleCA9IGhlYXBUeXBlIDwgMCA/IHN0YXRpY19jYXN0PFNpZ25hdHVyZUluZGV4PihoZWFwVHlw
ZSkgOiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KGluZm8udXNlZFNpZ25hdHVyZXNbaGVhcFR5
cGVdLmdldCgpKTsKKyAgICAgICAgdHlwZUluZGV4ID0gaGVhcFR5cGUgPCAwID8gc3RhdGljX2Nh
c3Q8VHlwZUluZGV4PihoZWFwVHlwZSkgOiBUeXBlSW5mb3JtYXRpb246OmdldChpbmZvLnR5cGVT
aWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7CiAgICAgfQogCi0gICAgVHlwZSB0eXBlID0geyB0
eXBlS2luZCwgc3RhdGljX2Nhc3Q8TnVsbGFibGU+KGlzTnVsbGFibGUpLCBzaWdJbmRleCB9Owor
ICAgIFR5cGUgdHlwZSA9IHsgdHlwZUtpbmQsIHN0YXRpY19jYXN0PE51bGxhYmxlPihpc051bGxh
YmxlKSwgdHlwZUluZGV4IH07CiAgICAgaWYgKCFpc1ZhbHVlVHlwZSh0eXBlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdCA9IHR5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5jcHAKaW5kZXggMDhkOWM2MzdiYjczNDMzY2Rh
N2RkMzQ1ZTY4NWE3M2NkNzFjNmRmYi4uZDJkYjVkYmY2Yzk2MTk3NjBlZDM0MjlkMDA4YWFiYjhj
NjYxYTMwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rp
b25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9u
UGFyc2VyLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1h
dGlvbi5oIgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldh
c21PcHMuaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldh
c21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC00NSw0MSArNDUsMzAgQEAgYXV0
byBTZWN0aW9uUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihjb3VudCksICJjYW4ndCBnZXQgVHlwZSBz
ZWN0aW9uJ3MgY291bnQiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gbWF4VHlw
ZXMsICJUeXBlIHNlY3Rpb24ncyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGltdW0g
IiwgbWF4VHlwZXMpOwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+dXNlZFNpZ25h
dHVyZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBt
ZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIGNvdW50LCAiIGVudHJpZXMiKTsKKyAgICBXQVNN
X1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPnR5cGVTaWduYXR1cmVzLnRyeVJlc2VydmVDYXBhY2l0
eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24n
cyAiLCBjb3VudCwgIiBlbnRyaWVzIik7CiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgewotICAgICAgICBpbnQ4X3QgdHlwZTsKLSAgICAgICAgdWludDMyX3QgYXJn
dW1lbnRDb3VudDsKLSAgICAgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7Ci0KLSAgICAg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VJbnQ3KHR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGks
ICJ0aCBUeXBlJ3MgdHlwZSIpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGUgIT0g
c3RhdGljX2Nhc3Q8aW50OF90PihUeXBlS2luZDo6RnVuYyksIGksICJ0aCBUeXBlIGlzIG5vbi1G
dW5jICIsIHR5cGUpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihhcmd1bWVudENvdW50KSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIGFyZ3VtZW50IGNv
dW50Iik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1heEZ1
bmN0aW9uUGFyYW1zLCBpLCAidGggYXJndW1lbnQgY291bnQgaXMgdG9vIGJpZyAiLCBhcmd1bWVu
dENvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25QYXJhbXMpOwotICAgICAgICBWZWN0b3I8
VHlwZT4gYXJndW1lbnRzOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmd1bWVudHMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIpOwotCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKLSAgICAg
ICAgICAgIFR5cGUgYXJndW1lbnRUeXBlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYWx1ZVR5cGUobV9pbmZvLCBhcmd1bWVudFR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGks
ICJ0aCBhcmd1bWVudCBUeXBlIik7Ci0gICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGFyZ3Vt
ZW50VHlwZSk7CisgICAgICAgIGludDhfdCB0eXBlS2luZDsKKyAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRighcGFyc2VJbnQ3KHR5cGVLaW5kKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdz
IHR5cGUiKTsKKyAgICAgICAgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiBzaWduYXR1cmU7CisgICAg
ICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VHlwZUtpbmQ+KHR5cGVLaW5kKSkgeworICAgICAgICBj
YXNlIFR5cGVLaW5kOjpGdW5jOiB7CisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZB
SUxTKHBhcnNlRnVuY3Rpb25UeXBlKGksIHNpZ25hdHVyZSkpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0OiB7CisgICAgICAgICAg
ICBpZiAoIU9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5R0MoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFpbChpLCAidGggdHlwZSBmYWlsZWQgdG8gcGFyc2UgYmVjYXVzZSBzdHJ1Y3QgdHlwZXMg
YXJlIG5vdCBlbmFibGVkIik7CiAKLSAgICAgICAgdWludDMyX3QgcmV0dXJuQ291bnQ7Ci0gICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHJldHVybkNvdW50KSwgImNh
bid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiBjb3VudCIpOwotCi0gICAgICAgIFZlY3Rv
cjxUeXBlLCAxPiByZXR1cm5UeXBlczsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcmV0
dXJuVHlwZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2Nh
dGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNpZ25hdHVyZSIp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmV0dXJuQ291bnQ7ICsraSkgewot
ICAgICAgICAgICAgVHlwZSB2YWx1ZTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
IXBhcnNlVmFsdWVUeXBlKG1faW5mbywgdmFsdWUpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBl
J3MgcmV0dXJuIHZhbHVlIik7Ci0gICAgICAgICAgICByZXR1cm5UeXBlcy5hcHBlbmQodmFsdWUp
OworICAgICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZVN0cnVjdFR5cGUo
aSwgc2lnbmF0dXJlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhaWwoaSwgInRoIFR5cGUgaXMgbm9uLUZ1bmMg
IiwgdHlwZUtpbmQpOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2ln
bmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUZvcihyZXR1cm5UeXBlcywg
YXJndW1lbnRzKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2lnbmF0dXJlLCAiY2Fu
J3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgaSwgInRoIHNp
Z25hdHVyZSIpOwotCi0gICAgICAgIG1faW5mby0+dXNlZFNpZ25hdHVyZXMudW5jaGVja2VkQXBw
ZW5kKHNpZ25hdHVyZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgbV9pbmZvLT50eXBlU2ln
bmF0dXJlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlLnJlbGVhc2VOb25OdWxsKCkpOwogICAg
IH0KICAgICByZXR1cm4geyB9OwogfQpAQCAtOTEsOSArODAsOSBAQCBhdXRvIFNlY3Rpb25QYXJz
ZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoaW1wb3J0Q291bnQgPiBtYXhJbXBvcnRzLCAiSW1wb3J0IHNlY3Rpb24ncyBjb3VudCBpcyB0
b28gYmlnICIsIGltcG9ydENvdW50LCAiIG1heGltdW0gIiwgbWF4SW1wb3J0cyk7CiAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5nbG9iYWxzLnRyeVJlc2VydmVDYXBhY2l0eShpbXBv
cnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBpbXBvcnRDb3Vu
dCwgIiBnbG9iYWxzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXgg
dGhlIEZJWE1FcyBiZWxvdy4KICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmltcG9y
dHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydHMiKTsgLy8gRklYTUUgdGhpcyBv
dmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93LgotICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnRyeVJl
c2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5
IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlcyIpOyAvLyBG
SVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCisg
ICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblR5cGVJbmRpY2Vz
LnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2gg
bWVtb3J5IGZvciAiLCBpbXBvcnRDb3VudCwgIiBpbXBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlcyIp
OyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVs
b3cuCiAgICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RXhjZXB0aW9ucygpKQotICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUlu
ZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBleGNlcHRpb24gc2lnbmF0
dXJlcyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhN
RXMgYmVsb3cuCisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RXhj
ZXB0aW9uVHlwZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBleGNl
cHRpb24gc2lnbmF0dXJlcyIpOyAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2Ug
Zml4IHRoZSBGSVhNRXMgYmVsb3cuCiAKICAgICBmb3IgKHVpbnQzMl90IGltcG9ydE51bWJlciA9
IDA7IGltcG9ydE51bWJlciA8IGltcG9ydENvdW50OyArK2ltcG9ydE51bWJlcikgewogICAgICAg
ICB1aW50MzJfdCBtb2R1bGVMZW47CkBAIC0xMTIsMTIgKzEwMSwxMiBAQCBhdXRvIFNlY3Rpb25Q
YXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZUV4dGVybmFsS2luZChraW5kKSwgImNhbid0IGdldCAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQncyBraW5kIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBm
aWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAg
ICAgICBjYXNlIEV4dGVybmFsS2luZDo6RnVuY3Rpb246IHsKLSAgICAgICAgICAgIHVpbnQzMl90
IGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXg7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCAiLCBp
bXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmdW5jdGlvbiBzaWduYXR1cmUgaW4gbW9kdWxlICci
LCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25TaWduYXR1cmVJbmRleCA+PSBtX2luZm8t
PnVzZWRTaWduYXR1cmVzLnNpemUoKSwgImludmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciAi
LCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQsICIsIGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgsICIg
aXMgb3V0IG9mIHJhbmdlIG9mICIsIG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiIGlu
IG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7
Ci0gICAgICAgICAgICBraW5kSW5kZXggPSBtX2luZm8tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5zaXplKCk7Ci0gICAgICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2VkU2lnbmF0dXJlc1tmdW5j
dGlvblNpZ25hdHVyZUluZGV4XSk7Ci0gICAgICAgICAgICBtX2luZm8tPmltcG9ydEZ1bmN0aW9u
U2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25UeXBlSW5kZXg7CisgICAgICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvblR5cGVJbmRleCksICJjYW4ndCBnZXQg
IiwgaW1wb3J0TnVtYmVyLCAidGggSW1wb3J0J3MgZnVuY3Rpb24gc2lnbmF0dXJlIGluIG1vZHVs
ZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAg
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZ1bmN0aW9uVHlwZUluZGV4ID49IG1faW5mby0+
dHlwZUNvdW50KCksICJpbnZhbGlkIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgIiwgaW1wb3J0TnVt
YmVyLCAidGggSW1wb3J0LCAiLCBmdW5jdGlvblR5cGVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ug
b2YgIiwgbV9pbmZvLT50eXBlQ291bnQoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywg
IicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAga2luZEluZGV4ID0g
bV9pbmZvLT5pbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFR5
cGVJbmRleCB0eXBlSW5kZXggPSBUeXBlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnR5cGVTaWdu
YXR1cmVzW2Z1bmN0aW9uVHlwZUluZGV4XSk7CisgICAgICAgICAgICBtX2luZm8tPmltcG9ydEZ1
bmN0aW9uVHlwZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHR5cGVJbmRleCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEV4dGVybmFsS2luZDo6VGFibGU6IHsK
QEAgLTEzOSw3ICsxMjgsNyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4g
UGFydGlhbFJlc3VsdAogICAgICAgICAgICAgR2xvYmFsSW5mb3JtYXRpb24gZ2xvYmFsOwogICAg
ICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJzZUdsb2JhbFR5cGUoZ2xvYmFs
KSk7CiAgICAgICAgICAgICAvLyBPbmx5IG11dGFibGUgZ2xvYmFscyBuZWVkIGZsb2F0aW5nIGJp
bmRpbmdzLgotICAgICAgICAgICAgaWYgKGdsb2JhbC5tdXRhYmlsaXR5ID09IEdsb2JhbEluZm9y
bWF0aW9uOjpNdXRhYmlsaXR5OjpNdXRhYmxlKQorICAgICAgICAgICAgaWYgKGdsb2JhbC5tdXRh
YmlsaXR5ID09IE11dGFiaWxpdHk6Ok11dGFibGUpCiAgICAgICAgICAgICAgICAgZ2xvYmFsLmJp
bmRpbmdNb2RlID0gR2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTsKICAg
ICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+Z2xvYmFscy5zaXplKCk7CiAgICAgICAgICAg
ICBtX2luZm8tPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7CkBAIC0x
NTQsMTAgKzE0MywxMCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW1wb3J0KCkgLT4gUGFy
dGlhbFJlc3VsdAogCiAgICAgICAgICAgICB1aW50MzJfdCBleGNlcHRpb25TaWduYXR1cmVJbmRl
eDsKICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2Vw
dGlvblNpZ25hdHVyZUluZGV4KSwgImNhbid0IGdldCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBv
cnQncyBleGNlcHRpb24gc2lnbmF0dXJlIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAiJyBm
aWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6
ZSgpLCAiaW52YWxpZCBleGNlcHRpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0
aCBJbXBvcnQsICIsIGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4LCAiIGlzIG91dCBvZiByYW5nZSBv
ZiAiLCBtX2luZm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVs
ZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAgICAgICAga2lu
ZEluZGV4ID0gbV9pbmZvLT5pbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsK
LSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2V4Y2VwdGlvblNpZ25hdHVyZUlu
ZGV4XSk7Ci0gICAgICAgICAgICBtX2luZm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGlj
ZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXggPj0gbV9pbmZvLT50eXBlQ291bnQo
KSwgImludmFsaWQgZXhjZXB0aW9uIHNpZ25hdHVyZSBmb3IgIiwgaW1wb3J0TnVtYmVyLCAidGgg
SW1wb3J0LCAiLCBleGNlcHRpb25TaWduYXR1cmVJbmRleCwgIiBpcyBvdXQgb2YgcmFuZ2Ugb2Yg
IiwgbV9pbmZvLT50eXBlQ291bnQoKSwgIiBpbiBtb2R1bGUgJyIsIG1vZHVsZVN0cmluZywgIicg
ZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOworICAgICAgICAgICAga2luZEluZGV4ID0gbV9p
bmZvLT5pbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCk7CisgICAgICAgICAgICBUeXBl
SW5kZXggdHlwZUluZGV4ID0gVHlwZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT50eXBlU2lnbmF0
dXJlc1tleGNlcHRpb25TaWduYXR1cmVJbmRleF0pOworICAgICAgICAgICAgbV9pbmZvLT5pbXBv
cnRFeGNlcHRpb25UeXBlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQodHlwZUluZGV4KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3NCwxOSArMTYzLDE5IEBA
IGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VGdW5jdGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAg
ICB1aW50MzJfdCBjb3VudDsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihjb3VudCksICJjYW4ndCBnZXQgRnVuY3Rpb24gc2VjdGlvbidzIGNvdW50Iik7CiAgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRihjb3VudCA+IG1heEZ1bmN0aW9ucywgIkZ1bmN0aW9uIHNlY3Rpb24n
cyBjb3VudCBpcyB0b28gYmlnICIsIGNvdW50LCAiIG1heGltdW0gIiwgbWF4RnVuY3Rpb25zKTsK
LSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIiBGdW5jdGlvbiBzaWduYXR1cmVzIik7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXMudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9y
ICIsIGNvdW50LCAiIEZ1bmN0aW9uIHNpZ25hdHVyZXMiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFtX2luZm8tPmZ1bmN0aW9ucy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3Qg
YWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgY291bnQsICJGdW5jdGlvbiBsb2NhdGlvbnMi
KTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAg
IHVpbnQzMl90IHR5cGVOdW1iZXI7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNl
VmFyVUludDMyKHR5cGVOdW1iZXIpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBGdW5jdGlvbidzIHR5
cGUgbnVtYmVyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZU51bWJlciA+PSBt
X2luZm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgaSwgInRoIEZ1bmN0aW9uIHR5cGUgbnVtYmVy
IGlzIGludmFsaWQgIiwgdHlwZU51bWJlcik7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYo
dHlwZU51bWJlciA+PSBtX2luZm8tPnR5cGVDb3VudCgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBu
dW1iZXIgaXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKIAotICAgICAgICBTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT51c2Vk
U2lnbmF0dXJlc1t0eXBlTnVtYmVyXSk7CisgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBU
eXBlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnR5cGVTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsK
ICAgICAgICAgLy8gVGhlIENvZGUgc2VjdGlvbiBmaXhlcyB1cCBzdGFydCBhbmQgZW5kLgogICAg
ICAgICBzaXplX3Qgc3RhcnQgPSAwOwogICAgICAgICBzaXplX3QgZW5kID0gMDsKLSAgICAgICAg
bV9pbmZvLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQo
c2lnbmF0dXJlSW5kZXgpOworICAgICAgICBtX2luZm8tPmludGVybmFsRnVuY3Rpb25UeXBlSW5k
aWNlcy51bmNoZWNrZWRBcHBlbmQodHlwZUluZGV4KTsKICAgICAgICAgbV9pbmZvLT5mdW5jdGlv
bnMudW5jaGVja2VkQXBwZW5kKHsgc3RhcnQsIGVuZCwgVmVjdG9yPHVpbnQ4X3Q+KCkgfSk7CiAg
ICAgfQogCkBAIC0zNzIsNyArMzYxLDcgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUV4cG9y
dCgpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoa2lu
ZEluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCksIGV4cG9ydE51bWJlciwgInRoIEV4cG9y
dCBoYXMgaW52YWxpZCBnbG9iYWwgbnVtYmVyICIsIGtpbmRJbmRleCwgIiBpdCBleGNlZWRzIHRo
ZSBnbG9iYWxzIGNvdW50ICIsIG1faW5mby0+Z2xvYmFscy5zaXplKCksICIsIG5hbWVkICciLCBm
aWVsZFN0cmluZywgIiciKTsKICAgICAgICAgICAgIC8vIE9ubHkgbXV0YWJsZSBnbG9iYWxzIG5l
ZWQgZmxvYXRpbmcgYmluZGluZ3MuCiAgICAgICAgICAgICBHbG9iYWxJbmZvcm1hdGlvbiYgZ2xv
YmFsID0gbV9pbmZvLT5nbG9iYWxzW2tpbmRJbmRleF07Ci0gICAgICAgICAgICBpZiAoZ2xvYmFs
Lm11dGFiaWxpdHkgPT0gR2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpCisg
ICAgICAgICAgICBpZiAoZ2xvYmFsLm11dGFiaWxpdHkgPT0gTXV0YWJpbGl0eTo6TXV0YWJsZSkK
ICAgICAgICAgICAgICAgICBnbG9iYWwuYmluZGluZ01vZGUgPSBHbG9iYWxJbmZvcm1hdGlvbjo6
QmluZGluZ01vZGU6OlBvcnRhYmxlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTM5Niw4ICszODUsOCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlU3RhcnQoKSAtPiBQYXJ0
aWFsUmVzdWx0CiAgICAgdWludDMyX3Qgc3RhcnRGdW5jdGlvbkluZGV4OwogICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHN0YXJ0RnVuY3Rpb25JbmRleCksICJjYW4ndCBn
ZXQgU3RhcnQgaW5kZXgiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHN0YXJ0RnVuY3Rpb25J
bmRleCA+PSBtX2luZm8tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSwgIlN0YXJ0IGluZGV4ICIs
IHN0YXJ0RnVuY3Rpb25JbmRleCwgIiBleGNlZWRzIGZ1bmN0aW9uIGluZGV4IHNwYWNlICIsIG1f
aW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpKTsKLSAgICBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IG1faW5mby0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KHN0YXJ0RnVuY3Rpb25JbmRleCk7Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICBUeXBlSW5kZXgg
dHlwZUluZGV4ID0gbV9pbmZvLT50eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0
RnVuY3Rpb25JbmRleCk7CisgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gVHlwZUluZm9ybWF0
aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZSh0eXBlSW5kZXgpOwogICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IGhh
dmUgYXJndW1lbnRzIik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighc2lnbmF0dXJlLnJldHVy
bnNWb2lkKCksICJTdGFydCBmdW5jdGlvbiBjYW4ndCByZXR1cm4gYSB2YWx1ZSIpOwogICAgIG1f
aW5mby0+c3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPSBzdGFydEZ1bmN0aW9uSW5kZXg7CkBAIC02
MTAsNyArNTk5LDcgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUluaXRFeHByKHVpbnQ4X3Qm
IG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51bWJlciwKIAogICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+Z2xvYmFscy5zaXplKCksICJnZXRfZ2xvYmFs
J3MgaW5kZXggIiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGdsb2JhbHMgIiwgbV9p
bmZvLT5nbG9iYWxzLnNpemUoKSk7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoaW5kZXgg
Pj0gbV9pbmZvLT5maXJzdEludGVybmFsR2xvYmFsLCAiZ2V0X2dsb2JhbCBpbXBvcnQga2luZCBp
bmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBmaXJzdCBpbnRlcm5hbCBnbG9iYWwgIiwgbV9p
bmZvLT5maXJzdEludGVybmFsR2xvYmFsKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRiht
X2luZm8tPmdsb2JhbHNbaW5kZXhdLm11dGFiaWxpdHkgIT0gR2xvYmFsSW5mb3JtYXRpb246Oklt
bXV0YWJsZSwgImdldF9nbG9iYWwgaW1wb3J0IGtpbmQgaW5kZXggIiwgaW5kZXgsICIgaXMgbXV0
YWJsZSAiKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihtX2luZm8tPmdsb2JhbHNbaW5k
ZXhdLm11dGFiaWxpdHkgIT0gTXV0YWJpbGl0eTo6SW1tdXRhYmxlLCAiZ2V0X2dsb2JhbCBpbXBv
cnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBpcyBtdXRhYmxlICIpOwogCiAgICAgICAgIHJlc3Vs
dFR5cGUgPSBtX2luZm8tPmdsb2JhbHNbaW5kZXhdLnR5cGU7CiAgICAgICAgIGJpdHNPckltcG9y
dE51bWJlciA9IGluZGV4OwpAQCAtNjIzLDEwICs2MTIsMTAgQEAgYXV0byBTZWN0aW9uUGFyc2Vy
OjpwYXJzZUluaXRFeHByKHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51
bWJlciwKICAgICAgICAgICAgIGludDMyX3QgaGVhcFR5cGU7CiAgICAgICAgICAgICBXQVNNX1BB
UlNFUl9GQUlMX0lGKCFwYXJzZUhlYXBUeXBlKG1faW5mbywgaGVhcFR5cGUpLCAicmVmLm51bGwg
aGVhcHR5cGUgbXVzdCBiZSBmdW5jcmVmLCBleHRlcm5yZWYgb3IgdHlwZV9pZHgiKTsKICAgICAg
ICAgICAgIGlmIChpc1R5cGVJbmRleEhlYXBUeXBlKGhlYXBUeXBlKSkgewotICAgICAgICAgICAg
ICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6Olll
cywgc2lnbmF0dXJlSW5kZXggfTsKKyAgICAgICAgICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4
ID0gVHlwZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT50eXBlU2lnbmF0dXJlc1toZWFwVHlwZV0u
Z2V0KCkpOworICAgICAgICAgICAgICAgIHR5cGVPZk51bGwgPSBUeXBlIHsgVHlwZUtpbmQ6OlJl
Zk51bGwsIE51bGxhYmxlOjpZZXMsIHR5cGVJbmRleCB9OwogICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVs
bGFibGU6Olllcywgc3RhdGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+KGhlYXBUeXBlKSB9OworICAg
ICAgICAgICAgICAgIHR5cGVPZk51bGwgPSBUeXBlIHsgVHlwZUtpbmQ6OlJlZk51bGwsIE51bGxh
YmxlOjpZZXMsIHN0YXRpY19jYXN0PFR5cGVJbmRleD4oaGVhcFR5cGUpIH07CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VSZWZUeXBlKG1faW5m
bywgdHlwZU9mTnVsbCksICJyZWYubnVsbCB0eXBlIG11c3QgYmUgYSByZWZlcmVuY2UgdHlwZSIp
OwogCkBAIC02NDEsOCArNjMwLDggQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUluaXRFeHBy
KHVpbnQ4X3QmIG9wY29kZSwgdWludDY0X3QmIGJpdHNPckltcG9ydE51bWJlciwKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA+PSBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCksICJy
ZWYuZnVuYyBpbmRleCIsIGluZGV4LCAiIGV4Y2VlZHMgdGhlIG51bWJlciBvZiBmdW5jdGlvbnMg
IiwgbV9pbmZvLT5mdW5jdGlvbnMuc2l6ZSgpKTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6dXNl
V2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICBTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5mby0+c2lnbmF0dXJlSW5kZXhGcm9tRnVu
Y3Rpb25JbmRleFNwYWNlKGluZGV4KTsKLSAgICAgICAgICAgIHJlc3VsdFR5cGUgPSB7IFR5cGVL
aW5kOjpSZWYsIE51bGxhYmxlOjpObywgc2lnbmF0dXJlSW5kZXggfTsKKyAgICAgICAgICAgIFR5
cGVJbmRleCB0eXBlSW5kZXggPSBtX2luZm8tPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoaW5kZXgpOworICAgICAgICAgICAgcmVzdWx0VHlwZSA9IHsgVHlwZUtpbmQ6OlJlZiwgTnVs
bGFibGU6Ok5vLCB0eXBlSW5kZXggfTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXN1
bHRUeXBlID0gVHlwZXM6OkZ1bmNyZWY7CiAKQEAgLTY4MSw2ICs2NzAsNjAgQEAgYXV0byBTZWN0
aW9uUGFyc2VyOjpwYXJzZUkzMkluaXRFeHByKHN0ZDo6b3B0aW9uYWw8STMySW5pdEV4cHI+JiBp
bml0RXhwciwgQVNDSUkKICAgICByZXR1cm4geyB9OwogfQogCithdXRvIFNlY3Rpb25QYXJzZXI6
OnBhcnNlRnVuY3Rpb25UeXBlKHVpbnQzMl90IHBvc2l0aW9uLCBSZWZQdHI8VHlwZURlZmluaXRp
b24+JiBmdW5jdGlvblNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAoreworICAgIHVpbnQzMl90
IGFyZ3VtZW50Q291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIo
YXJndW1lbnRDb3VudCksICJjYW4ndCBnZXQgIiwgcG9zaXRpb24sICJ0aCBUeXBlJ3MgYXJndW1l
bnQgY291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGFyZ3VtZW50Q291bnQgPiBtYXhG
dW5jdGlvblBhcmFtcywgcG9zaXRpb24sICJ0aCBhcmd1bWVudCBjb3VudCBpcyB0b28gYmlnICIs
IGFyZ3VtZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvblBhcmFtcyk7CisgICAgVmVj
dG9yPFR5cGU+IGFyZ3VtZW50VHlwZXM7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighYXJndW1l
bnRUeXBlcy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0
ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBwb3NpdGlvbiwgInRoIHNpZ25h
dHVyZSIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsr
aSkgeworICAgICAgICBUeXBlIGFyZ3VtZW50VHlwZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYWx1ZVR5cGUobV9pbmZvLCBhcmd1bWVudFR5cGUpLCAiY2FuJ3QgZ2V0ICIs
IGksICJ0aCBhcmd1bWVudCBUeXBlIik7CisgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKGFy
Z3VtZW50VHlwZSk7CisgICAgfQorCisgICAgdWludDMyX3QgcmV0dXJuQ291bnQ7CisgICAgV0FT
TV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIocmV0dXJuQ291bnQpLCAiY2FuJ3QgZ2V0
ICIsIHBvc2l0aW9uLCAidGggVHlwZSdzIHJldHVybiBjb3VudCIpOworCisgICAgVmVjdG9yPFR5
cGUsIDE+IHJldHVyblR5cGVzOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXJldHVyblR5cGVz
LnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIHBvc2l0aW9uLCAidGggc2lnbmF0dXJlIik7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJldHVybkNvdW50OyArK2kpIHsKKyAgICAg
ICAgVHlwZSB2YWx1ZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5
cGUobV9pbmZvLCB2YWx1ZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5cGUncyByZXR1cm4gdmFs
dWUiKTsKKyAgICAgICAgcmV0dXJuVHlwZXMuYXBwZW5kKHZhbHVlKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvblNpZ25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JGdW5j
dGlvbihyZXR1cm5UeXBlcywgYXJndW1lbnRUeXBlcyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
YXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZVN0cnVjdFR5cGUodWludDMyX3QgcG9zaXRpb24sIFJl
ZlB0cjxUeXBlRGVmaW5pdGlvbj4mIHN0cnVjdFR5cGUpIC0+IFBhcnRpYWxSZXN1bHQKK3sKKyAg
ICBBU1NFUlQoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlHQygpKTsKKworICAgIHVpbnQzMl90IGZp
ZWxkQ291bnQ7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZmllbGRD
b3VudCksICJjYW4ndCBnZXQgIiwgcG9zaXRpb24sICJ0aCBzdHJ1Y3QgdHlwZSdzIGZpZWxkIGNv
dW50Iik7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmaWVsZENvdW50ID4gbWF4U3RydWN0Rmll
bGRDb3VudCwgIm51bWJlciBvZiBmaWVsZHMgZm9yIHN0cnVjdCB0eXBlIGF0IHBvc2l0aW9uICIs
IHBvc2l0aW9uLCAiIGlzIHRvbyBiaWcgIiwgZmllbGRDb3VudCwgIiBtYXhpbXVtICIsIG1heFN0
cnVjdEZpZWxkQ291bnQpOworICAgIFZlY3RvcjxTdHJ1Y3RGaWVsZD4gZmllbGRzOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIWZpZWxkcy50cnlSZXNlcnZlQ2FwYWNpdHkoZmllbGRDb3VudCks
ICJjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBzdHJ1Y3QgZmllbGRzICIsIGZpZWxk
Q291bnQsICIgZW50cmllcyIpOworCisgICAgZm9yICh1aW50MzJfdCBmaWVsZEluZGV4ID0gMDsg
ZmllbGRJbmRleCA8IGZpZWxkQ291bnQ7ICsrZmllbGRJbmRleCkgeworICAgICAgICBUeXBlIGZp
ZWxkVHlwZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYWx1ZVR5cGUobV9p
bmZvLCBmaWVsZFR5cGUpLCAiY2FuJ3QgZ2V0ICIsIGZpZWxkSW5kZXgsICJ0aCBmaWVsZCBUeXBl
Iik7CisKKyAgICAgICAgdWludDhfdCBtdXRhYmlsaXR5OworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVVJbnQ4KG11dGFiaWxpdHkpLCBwb3NpdGlvbiwgImNhbid0IGdldCAiLCBm
aWVsZEluZGV4LCAidGggZmllbGQgbXV0YWJpbGl0eSIpOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKG11dGFiaWxpdHkgIT0gMHgwICYmIG11dGFiaWxpdHkgIT0gMHgxLCAiaW52YWxpZCBG
aWVsZCdzIG11dGFiaWxpdHk6IDB4IiwgaGV4KG11dGFiaWxpdHksIDIsIExvd2VyY2FzZSkpOwor
CisgICAgICAgIGZpZWxkcy51bmNoZWNrZWRBcHBlbmQoU3RydWN0RmllbGQgeyBmaWVsZFR5cGUs
IHN0YXRpY19jYXN0PE11dGFiaWxpdHk+KG11dGFiaWxpdHkpIH0pOworICAgIH0KKworICAgIHN0
cnVjdFR5cGUgPSBUeXBlSW5mb3JtYXRpb246OnR5cGVEZWZpbml0aW9uRm9yU3RydWN0KGZpZWxk
cyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwogYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUkzMklu
aXRFeHByRm9yRWxlbWVudFNlY3Rpb24oc3RkOjpvcHRpb25hbDxJMzJJbml0RXhwcj4mIGluaXRF
eHByKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgcmV0dXJuIHBhcnNlSTMySW5pdEV4cHIoaW5p
dEV4cHIsICJFbGVtZW50IGluaXRfZXhwciBtdXN0IHByb2R1Y2UgYW4gaTMyIl9zKTsKQEAgLTc1
OSw3ICs4MDIsNyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlR2xvYmFsVHlwZShHbG9iYWxJ
bmZvcm1hdGlvbiYgZ2xvYmFsKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRighcGFyc2VWYWx1ZVR5cGUobV9pbmZvLCBnbG9iYWwudHlwZSksICJjYW4ndCBnZXQgR2xv
YmFsJ3MgdmFsdWUgdHlwZSIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVUludDgo
bXV0YWJpbGl0eSksICJjYW4ndCBnZXQgR2xvYmFsIHR5cGUncyBtdXRhYmlsaXR5Iik7CiAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRihtdXRhYmlsaXR5ICE9IDB4MCAmJiBtdXRhYmlsaXR5ICE9IDB4
MSwgImludmFsaWQgR2xvYmFsJ3MgbXV0YWJpbGl0eTogMHgiLCBoZXgobXV0YWJpbGl0eSwgMiwg
TG93ZXJjYXNlKSk7Ci0gICAgZ2xvYmFsLm11dGFiaWxpdHkgPSBzdGF0aWNfY2FzdDxHbG9iYWxJ
bmZvcm1hdGlvbjo6TXV0YWJpbGl0eT4obXV0YWJpbGl0eSk7CisgICAgZ2xvYmFsLm11dGFiaWxp
dHkgPSBzdGF0aWNfY2FzdDxNdXRhYmlsaXR5PihtdXRhYmlsaXR5KTsKICAgICByZXR1cm4geyB9
OwogfQogCkBAIC04NTksNyArOTAyLDcgQEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUV4Y2Vw
dGlvbigpIC0+IFBhcnRpYWxSZXN1bHQKICAgICB1aW50MzJfdCBleGNlcHRpb25Db3VudDsKICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihleGNlcHRpb25Db3VudCksICJj
YW4ndCBnZXQgRXhjZXB0aW9uIHNlY3Rpb24ncyBjb3VudCIpOwogICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoZXhjZXB0aW9uQ291bnQgPiBtYXhFeGNlcHRpb25zLCAiRXhwb3J0IHNlY3Rpb24ncyBj
b3VudCBpcyB0b28gYmlnICIsIGV4Y2VwdGlvbkNvdW50LCAiIG1heGltdW0gIiwgbWF4RXhjZXB0
aW9ucyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbnRlcm5hbEV4Y2VwdGlv
blNpZ25hdHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvbkNvdW50KSwgImNh
bid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGV4Y2VwdGlvbkNvdW50LCAiIGV4Y2Vw
dGlvbnMiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRXhjZXB0
aW9uVHlwZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvbkNvdW50KSwgImNhbid0
IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGV4Y2VwdGlvbkNvdW50LCAiIGV4Y2VwdGlv
bnMiKTsKIAogICAgIGZvciAodWludDMyX3QgZXhjZXB0aW9uTnVtYmVyID0gMDsgZXhjZXB0aW9u
TnVtYmVyIDwgZXhjZXB0aW9uQ291bnQ7ICsrZXhjZXB0aW9uTnVtYmVyKSB7CiAgICAgICAgIHVp
bnQ4X3QgdGFnVHlwZTsKQEAgLTg2OCw5ICs5MTEsOSBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBh
cnNlRXhjZXB0aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogCiAgICAgICAgIHVpbnQzMl90IHR5cGVO
dW1iZXI7CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHR5cGVO
dW1iZXIpLCAiY2FuJ3QgZ2V0ICIsIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbidzIHR5
cGUgbnVtYmVyIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZU51bWJlciA+PSBt
X2luZm8tPnVzZWRTaWduYXR1cmVzLnNpemUoKSwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0
aW9uIHR5cGUgbnVtYmVyIGlzIGludmFsaWQgIiwgdHlwZU51bWJlcik7Ci0gICAgICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2lu
Zm8tPnVzZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKLSAgICAgICAgbV9pbmZvLT5pbnRlcm5h
bEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZUluZGV4
KTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49IG1faW5mby0+dHlw
ZUNvdW50KCksIGV4Y2VwdGlvbk51bWJlciwgInRoIEV4Y2VwdGlvbiB0eXBlIG51bWJlciBpcyBp
bnZhbGlkICIsIHR5cGVOdW1iZXIpOworICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gVHlw
ZUluZm9ybWF0aW9uOjpnZXQobV9pbmZvLT50eXBlU2lnbmF0dXJlc1t0eXBlTnVtYmVyXSk7Cisg
ICAgICAgIG1faW5mby0+aW50ZXJuYWxFeGNlcHRpb25UeXBlSW5kaWNlcy51bmNoZWNrZWRBcHBl
bmQodHlwZUluZGV4KTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmgKaW5kZXggOTFmZDNlZDgzNDIyNWM4
MTNlMmQwMTM5MmI0OWU4ZDljM2JlMmI4Ny4uOTU2YTUwMjg3Y2I5MjYzZDI5OGVmOTE2YjYzZWRk
ZDg4YmQ1Y2RmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNl
Y3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlv
blBhcnNlci5oCkBAIC02OSw2ICs2OSw5IEBAIHByaXZhdGU6CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50OF90JiwgdWludDY0X3QmLCBUeXBl
JiBpbml0RXhwclR5cGUpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBh
cnNlSTMySW5pdEV4cHIoc3RkOjpvcHRpb25hbDxJMzJJbml0RXhwcj4mLCBBU0NJSUxpdGVyYWwg
ZmFpbE1lc3NhZ2UpOwogCisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFy
c2VGdW5jdGlvblR5cGUodWludDMyX3QgcG9zaXRpb24sIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4m
KTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVN0cnVjdFR5cGUo
dWludDMyX3QgcG9zaXRpb24sIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4mKTsKKwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHZhbGlkYXRlRWxlbWVudFRhYmxlSWR4KHVpbnQz
Ml90KTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUkzMkluaXRF
eHByRm9yRWxlbWVudFNlY3Rpb24oc3RkOjpvcHRpb25hbDxJMzJJbml0RXhwcj4mKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUVsZW1lbnRLaW5kKHVpbnQ4X3Qm
IGVsZW1lbnRLaW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21TaWduYXR1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVy
ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YTU2MWI4NTBmYzVjMTkzOWQw
ZWY1OWU4YTlmZDJiNjA1OTc4ZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Ildhc21TaWduYXR1cmUuaCIKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUg
Ildhc21TaWduYXR1cmVJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgot
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7Ci0KLVNpZ25hdHVyZUlu
Zm9ybWF0aW9uKiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6dGhlT25lIHsgbnVsbHB0ciB9Owotc3Rk
OjpvbmNlX2ZsYWcgU2lnbmF0dXJlSW5mb3JtYXRpb246OnNpZ25hdHVyZUluZm9ybWF0aW9uRmxh
ZzsKLQotU3RyaW5nIFNpZ25hdHVyZTo6dG9TdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBX
VEY6OnRvU3RyaW5nKCp0aGlzKTsKLX0KLQotdm9pZCBTaWduYXR1cmU6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKLXsKLSAgICB7Ci0gICAgICAgIG91dC5wcmludCgiKCIpOwotICAgICAg
ICBDb21tYVByaW50ZXIgY29tbWE7Ci0gICAgICAgIGZvciAoU2lnbmF0dXJlQXJnQ291bnQgYXJn
ID0gMDsgYXJnIDwgYXJndW1lbnRDb3VudCgpOyArK2FyZykKLSAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgbWFrZVN0cmluZyhhcmd1bWVudChhcmcpLmtpbmQpKTsKLSAgICAgICAgb3V0LnBy
aW50KCIpIik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0g
ICAgICAgIG91dC5wcmludCgiIC0+IFsiKTsKLSAgICAgICAgZm9yIChTaWduYXR1cmVBcmdDb3Vu
dCByZXQgPSAwOyByZXQgPCByZXR1cm5Db3VudCgpOyArK3JldCkKLSAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgbWFrZVN0cmluZyhyZXR1cm5UeXBlKHJldCkua2luZCkpOwotICAgICAgICBv
dXQucHJpbnQoIl0iKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChz
aXplX3QgcmV0dXJuQ291bnQsIGNvbnN0IFR5cGUqIHJldHVyblR5cGVzLCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgVHlwZSogYXJndW1lbnRUeXBlcykKLXsKLSAgICB1bnNpZ25lZCBhY2N1
bXVsYXRvciA9IDB4YTFiY2VkZDh1OwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhcmd1
bWVudENvdW50OyArK2kpIHsKLSAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNo
KGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oYXJndW1lbnRUeXBlc1tpXS5raW5kKSkpOwotICAgICAgICBhY2N1bXVsYXRvciA9IFdU
Rjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFzaChz
dGF0aWNfY2FzdDx1aW50OF90Pihhcmd1bWVudFR5cGVzW2ldLm51bGxhYmxlKSkpOwotICAgICAg
ICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFz
aDx1bnNpZ25lZD46Omhhc2goYXJndW1lbnRUeXBlc1tpXS5pbmRleCkpOwotICAgIH0KLSAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcmV0dXJuQ291bnQ7ICsraSkgewotICAgICAgICBhY2N1
bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50
OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihyZXR1cm5UeXBlc1tpXS5raW5kKSkpOwot
ICAgICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6
SW50SGFzaDx1aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihyZXR1cm5UeXBlc1tp
XS5udWxsYWJsZSkpKTsKLSAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFj
Y3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+OjpoYXNoKHJldHVyblR5cGVzW2ldLmlu
ZGV4KSk7Ci0gICAgfQotICAgIHJldHVybiBhY2N1bXVsYXRvcjsKLX0KLQotdW5zaWduZWQgU2ln
bmF0dXJlOjpoYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcHV0ZUhhc2gocmV0dXJuQ291
bnQoKSwgc3RvcmFnZSgwKSwgYXJndW1lbnRDb3VudCgpLCBzdG9yYWdlKHJldHVybkNvdW50KCkp
KTsKLX0KLQotUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJlOjp0cnlDcmVhdGUoU2lnbmF0dXJl
QXJnQ291bnQgcmV0dXJuQ291bnQsIFNpZ25hdHVyZUFyZ0NvdW50IGFyZ3VtZW50Q291bnQpCi17
Ci0gICAgLy8gV2UgdXNlIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIGZvciB0aGlzIGNsYXNzLgot
ICAgIGF1dG8gcmVzdWx0ID0gdHJ5RmFzdE1hbGxvYyhhbGxvY2F0ZWRTaXplKHJldHVybkNvdW50
LCBhcmd1bWVudENvdW50KSk7Ci0gICAgdm9pZCogbWVtb3J5ID0gbnVsbHB0cjsKLSAgICBpZiAo
IXJlc3VsdC5nZXRWYWx1ZShtZW1vcnkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBT
aWduYXR1cmUqIHNpZ25hdHVyZSA9IG5ldyAoTm90TnVsbCwgbWVtb3J5KSBTaWduYXR1cmUocmV0
dXJuQ291bnQsIGFyZ3VtZW50Q291bnQpOwotICAgIHJldHVybiBhZG9wdFJlZihzaWduYXR1cmUp
OwotfQotCi1TaWduYXR1cmVJbmZvcm1hdGlvbjo6U2lnbmF0dXJlSW5mb3JtYXRpb24oKQotewot
I2RlZmluZSBNQUtFX1RIVU5LX1NJR05BVFVSRSh0eXBlLCBlbmMsIHN0ciwgdmFsLCBfKSAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoVHlw
ZUtpbmQ6OnR5cGUgIT0gVHlwZUtpbmQ6OlZvaWQpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnID0gU2lnbmF0dXJlOjp0cnlD
cmVhdGUoMSwgMCk7ICAgICAgICAgICAgXAotICAgICAgICAgICAgc2lnLT5yZWYoKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgc2lnLT5nZXRSZXR1cm5UeXBlKDApID0gVHlwZXM6OnR5cGU7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgdGh1bmtTaWduYXR1cmVzW2xpbmVhcml6ZVR5cGUoVHlw
ZUtpbmQ6OnR5cGUpXSA9IHNpZy5nZXQoKTsgICAgXAotICAgICAgICAgICAgbV9zaWduYXR1cmVT
ZXQuYWRkKFNpZ25hdHVyZUhhc2ggeyBzaWcucmVsZWFzZU5vbk51bGwoKSB9KTsgICAgXAotICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKGZhbHNlKTsKLQotICAgIEZPUl9FQUNIX1dB
U01fVFlQRShNQUtFX1RIVU5LX1NJR05BVFVSRSk7Ci0KLSAgICAvLyBNYWtlIFZvaWQgYWdhaW4g
YmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlIG9uZSB0aGF0IGhhcyB2b2lkIGluIGl0LgotICAgIHsK
LSAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnID0gU2lnbmF0dXJlOjp0cnlDcmVhdGUoMCwg
MCk7Ci0gICAgICAgIHNpZy0+cmVmKCk7Ci0gICAgICAgIHRodW5rU2lnbmF0dXJlc1tsaW5lYXJp
emVUeXBlKFR5cGVLaW5kOjpWb2lkKV0gPSBzaWcuZ2V0KCk7Ci0gICAgICAgIG1fc2lnbmF0dXJl
U2V0LmFkZChTaWduYXR1cmVIYXNoIHsgc2lnLnJlbGVhc2VOb25OdWxsKCkgfSk7Ci0gICAgfQot
fQotCi0KLQotc3RydWN0IFBhcmFtZXRlclR5cGVzIHsKLSAgICBjb25zdCBWZWN0b3I8VHlwZSwg
MT4mIHJldHVyblR5cGVzOwotICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRUeXBlczsK
LQotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFBhcmFtZXRlclR5cGVzJiBwYXJhbXMp
Ci0gICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2gocGFyYW1zLnJldHVyblR5cGVzLnNp
emUoKSwgcGFyYW1zLnJldHVyblR5cGVzLmRhdGEoKSwgcGFyYW1zLmFyZ3VtZW50VHlwZXMuc2l6
ZSgpLCBwYXJhbXMuYXJndW1lbnRUeXBlcy5kYXRhKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFNpZ25hdHVyZUhhc2gmIHNpZywgY29uc3QgUGFyYW1ldGVyVHlwZXMm
IHBhcmFtcykKLSAgICB7Ci0gICAgICAgIGlmIChzaWcua2V5LT5hcmd1bWVudENvdW50KCkgIT0g
cGFyYW1zLmFyZ3VtZW50VHlwZXMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoc2lnLmtleS0+cmV0dXJuQ291bnQoKSAhPSBwYXJhbXMucmV0dXJuVHlwZXMu
c2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaWcua2V5LT5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHNpZy5rZXktPmFyZ3VtZW50KGkpICE9IHBhcmFtcy5hcmd1bWVudFR5cGVzW2ldKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaWcua2V5LT5yZXR1cm5Db3VudCgpOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmIChzaWcua2V5LT5yZXR1cm5UeXBlKGkpICE9IHBhcmFtcy5yZXR1cm5UeXBlc1tp
XSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFNpZ25hdHVyZUhh
c2gmIGVudHJ5LCBjb25zdCBQYXJhbWV0ZXJUeXBlcyYgcGFyYW1zLCB1bnNpZ25lZCkKLSAgICB7
Ci0gICAgICAgIFJlZlB0cjxTaWduYXR1cmU+IHNpZ25hdHVyZSA9IFNpZ25hdHVyZTo6dHJ5Q3Jl
YXRlKHBhcmFtcy5yZXR1cm5UeXBlcy5zaXplKCksIHBhcmFtcy5hcmd1bWVudFR5cGVzLnNpemUo
KSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHNpZ25hdHVyZSk7Ci0KLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtcy5yZXR1cm5UeXBlcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgIHNpZ25hdHVyZS0+Z2V0UmV0dXJuVHlwZShpKSA9IHBhcmFtcy5yZXR1cm5UeXBlc1tp
XTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1zLmFyZ3VtZW50VHlw
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBzaWduYXR1cmUtPmdldEFyZ3VtZW50KGkpID0g
cGFyYW1zLmFyZ3VtZW50VHlwZXNbaV07Ci0KLSAgICAgICAgZW50cnkua2V5ID0gV1RGTW92ZShz
aWduYXR1cmUpOwotICAgIH0KLX07Ci0KLVJlZlB0cjxTaWduYXR1cmU+IFNpZ25hdHVyZUluZm9y
bWF0aW9uOjpzaWduYXR1cmVGb3IoY29uc3QgVmVjdG9yPFR5cGUsIDE+JiByZXN1bHRzLCBjb25z
dCBWZWN0b3I8VHlwZT4mIGFyZ3MpCi17Ci0gICAgaWYgY29uc3RleHByIChBU1NFUlRfRU5BQkxF
RCkgewotICAgICAgICBBU1NFUlQoIXJlc3VsdHMuY29udGFpbnMoV2FzbTo6VHlwZXM6OlZvaWQp
KTsKLSAgICAgICAgQVNTRVJUKCFhcmdzLmNvbnRhaW5zKFdhc206OlR5cGVzOjpWb2lkKSk7Ci0g
ICAgfQotICAgIFNpZ25hdHVyZUluZm9ybWF0aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7Ci0gICAg
TG9ja2VyIGxvY2tlciB7IGluZm8ubV9sb2NrIH07Ci0KLSAgICBhdXRvIGFkZFJlc3VsdCA9IGlu
Zm8ubV9zaWduYXR1cmVTZXQudGVtcGxhdGUgYWRkPFBhcmFtZXRlclR5cGVzPihQYXJhbWV0ZXJU
eXBlcyB7IHJlc3VsdHMsIGFyZ3MgfSk7Ci0gICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+
a2V5OwotfQotCi12b2lkIFNpZ25hdHVyZUluZm9ybWF0aW9uOjp0cnlDbGVhbnVwKCkKLXsKLSAg
ICBTaWduYXR1cmVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRvbigpOwotICAgIExvY2tlciBs
b2NrZXIgeyBpbmZvLm1fbG9jayB9OwotCi0gICAgaW5mby5tX3NpZ25hdHVyZVNldC5yZW1vdmVJ
ZihbJl0gKGF1dG8mIGhhc2gpIHsKLSAgICAgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gaGFz
aC5rZXk7Ci0gICAgICAgIHJldHVybiBzaWduYXR1cmUtPnJlZkNvdW50KCkgPT0gMTsKLSAgICB9
KTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KLQotI2VuZGlmIC8vIEVOQUJMRShX
RUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
aWduYXR1cmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FjZTlhZmIxNzU3ODk2NjM4MmE3MGI5NTBl
Y2IzOGI5ZjQ3MDZmNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
Ci0KLSNpbmNsdWRlICJXYXNtT3BzLmgiCi0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGlj
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5o
PgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSBXYXNtIHsKLQotdXNpbmcgU2ln
bmF0dXJlQXJnQ291bnQgPSB1aW50MzJfdDsKLQotY2xhc3MgU2lnbmF0dXJlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFNpZ25hdHVyZT4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotCi0gICAgU2lnbmF0dXJlKCkgPSBkZWxldGU7Ci0gICAgU2lnbmF0dXJlKGNvbnN0IFNp
Z25hdHVyZSYpID0gZGVsZXRlOwotICAgIFNpZ25hdHVyZShTaWduYXR1cmVBcmdDb3VudCByZXRD
b3VudCwgU2lnbmF0dXJlQXJnQ291bnQgYXJnQ291bnQpCi0gICAgICAgIDogbV9yZXRDb3VudChy
ZXRDb3VudCkKLSAgICAgICAgLCBtX2FyZ0NvdW50KGFyZ0NvdW50KQotICAgIHsKLSAgICB9Ci0K
LSAgICBUeXBlKiBzdG9yYWdlKFNpZ25hdHVyZUFyZ0NvdW50IGkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gaSArIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHRoaXMpICsgc2l6ZW9mKFNpZ25hdHVyZSkpOwotICAgIH0KLSAgICBUeXBlKiBzdG9yYWdlKFNp
Z25hdHVyZUFyZ0NvdW50IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U2lnbmF0dXJlKj4o
dGhpcyktPnN0b3JhZ2UoaSk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRlZFNpemUoQ2hl
Y2tlZDxTaWduYXR1cmVBcmdDb3VudD4gcmV0Q291bnQsIENoZWNrZWQ8U2lnbmF0dXJlQXJnQ291
bnQ+IGFyZ0NvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNpemVvZihTaWduYXR1cmUpICsg
KHJldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9mKFR5cGUpOwotICAgIH0KLQotcHVibGljOgot
ICAgIFNpZ25hdHVyZUFyZ0NvdW50IHJldHVybkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXRD
b3VudDsgfQotICAgIFNpZ25hdHVyZUFyZ0NvdW50IGFyZ3VtZW50Q291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2FyZ0NvdW50OyB9Ci0KLSAgICBUeXBlIHJldHVyblR5cGUoU2lnbmF0dXJlQXJnQ291
bnQgaSkgY29uc3QgeyBBU1NFUlQoaSA8IHJldHVybkNvdW50KCkpOyByZXR1cm4gY29uc3RfY2Fz
dDxTaWduYXR1cmUqPih0aGlzKS0+Z2V0UmV0dXJuVHlwZShpKTsgfQotICAgIGJvb2wgcmV0dXJu
c1ZvaWQoKSBjb25zdCB7IHJldHVybiAhcmV0dXJuQ291bnQoKTsgfQotICAgIFR5cGUgYXJndW1l
bnQoU2lnbmF0dXJlQXJnQ291bnQgaSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxTaWduYXR1
cmUqPih0aGlzKS0+Z2V0QXJndW1lbnQoaSk7IH0KLSAgICBTaWduYXR1cmVJbmRleCBpbmRleCgp
IGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxTaWduYXR1cmVJbmRleD4odGhpcyk7IH0KLQot
ICAgIFdURjo6U3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBkdW1wKFdURjo6UHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpZ25hdHVy
ZSYgcmhzKSBjb25zdCB7IHJldHVybiB0aGlzID09ICZyaHM7IH0KLSAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3Q7Ci0KLSAgICAvLyBTaWduYXR1cmVzIGFyZSB1bmlxdWVkIGFuZCwgZm9yIGNhbGxf
aW5kaXJlY3QsIHZhbGlkYXRlZCBhdCBydW50aW1lLiBUYWJsZXMgY2FuIGNyZWF0ZSBpbnZhbGlk
IFNpZ25hdHVyZUluZGV4IHZhbHVlcyB3aGljaCBjYXVzZSBjYWxsX2luZGlyZWN0IHRvIGZhaWwu
IFdlIHVzZSAwIGFzIHRoZSBpbnZhbGlkSW5kZXggc28gdGhhdCB0aGUgY29kZWdlbiBjYW4gZWFz
aWx5IHRlc3QgZm9yIGl0IGFuZCB0cmFwLCBhbmQgd2UgYWRkIGEgdG9rZW4gaW52YWxpZCBlbnRy
eSBpbiBTaWduYXR1cmVJbmZvcm1hdGlvbi4KLSAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIFNp
Z25hdHVyZUluZGV4IGludmFsaWRJbmRleCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNs
YXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uOwotICAgIGZyaWVuZCBzdHJ1Y3QgUGFyYW1ldGVyVHlw
ZXM7Ci0KLSAgICBzdGF0aWMgUmVmUHRyPFNpZ25hdHVyZT4gdHJ5Q3JlYXRlKFNpZ25hdHVyZUFy
Z0NvdW50IHJldHVybkNvdW50LCBTaWduYXR1cmVBcmdDb3VudCBhcmd1bWVudENvdW50KTsKLSAg
ICBUeXBlJiBnZXRSZXR1cm5UeXBlKFNpZ25hdHVyZUFyZ0NvdW50IGkpIHsgQVNTRVJUKGkgPCBy
ZXR1cm5Db3VudCgpKTsgcmV0dXJuICpzdG9yYWdlKGkpOyB9Ci0gICAgVHlwZSYgZ2V0QXJndW1l
bnQoU2lnbmF0dXJlQXJnQ291bnQgaSkgeyBBU1NFUlQoaSA8IGFyZ3VtZW50Q291bnQoKSk7IHJl
dHVybiAqc3RvcmFnZShyZXR1cm5Db3VudCgpICsgaSk7IH0KLQotICAgIFNpZ25hdHVyZUFyZ0Nv
dW50IG1fcmV0Q291bnQ7Ci0gICAgU2lnbmF0dXJlQXJnQ291bnQgbV9hcmdDb3VudDsKLSAgICAv
LyBSZXR1cm4gVHlwZSBhbmQgYXJndW1lbnRzIGFyZSBzdG9yZWQgaGVyZS4KLX07Ci0KLXN0cnVj
dCBTaWduYXR1cmVIYXNoIHsKLSAgICBSZWZQdHI8U2lnbmF0dXJlPiBrZXkgeyBudWxscHRyIH07
Ci0gICAgU2lnbmF0dXJlSGFzaCgpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaWduYXR1cmVI
YXNoKFJlZjxTaWduYXR1cmU+JiYga2V5KQotICAgICAgICA6IGtleShXVEZNb3ZlKGtleSkpCi0g
ICAgeyB9Ci0gICAgZXhwbGljaXQgU2lnbmF0dXJlSGFzaChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCi0gICAgICAgIDoga2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQotICAg
IHsgfQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaWduYXR1cmVIYXNoJiByaHMpIGNvbnN0
IHsgcmV0dXJuIGVxdWFsKCp0aGlzLCByaHMpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgU2lnbmF0dXJlSGFzaCYgbGhzLCBjb25zdCBTaWduYXR1cmVIYXNoJiByaHMpIHsgcmV0dXJu
IGxocy5rZXkgPT0gcmhzLmtleTsgfQotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNp
Z25hdHVyZUhhc2gmIHNpZ25hdHVyZSkgeyByZXR1cm4gc2lnbmF0dXJlLmtleSA/IHNpZ25hdHVy
ZS5rZXktPmhhc2goKSA6IDA7IH0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4ga2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0K
LX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLQotbmFtZXNwYWNlIFdURiB7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPEpTQzo6V2FzbTo6U2lnbmF0dXJlSGFzaD4gOiBKU0M6Oldhc206OlNp
Z25hdHVyZUhhc2ggeyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0
czsKLXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpXYXNtOjpTaWduYXR1cmVIYXNo
PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Oldhc206OlNpZ25hdHVyZUhhc2g+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKLQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewot
Ci0vLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVkIGJ5
IHRoZSBlbnRpcmUgcHJvY2VzcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlxdWUu
IFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5jZSwg
YW5kIG11c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIFZN
cy4KLWNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTaWduYXR1cmVJbmZvcm1hdGlvbik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0K
LSAgICBTaWduYXR1cmVJbmZvcm1hdGlvbigpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFNpZ25h
dHVyZUluZm9ybWF0aW9uJiBzaW5nbGV0b24oKTsKLQotICAgIHN0YXRpYyBSZWZQdHI8U2lnbmF0
dXJlPiBzaWduYXR1cmVGb3IoY29uc3QgVmVjdG9yPFR5cGUsIDE+JiByZXR1cm5UeXBlcywgY29u
c3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudFR5cGVzKTsKLSAgICBBTFdBWVNfSU5MSU5FIGNvbnN0
IFNpZ25hdHVyZSogdGh1bmtGb3IoVHlwZSB0eXBlKSBjb25zdCB7IHJldHVybiB0aHVua1NpZ25h
dHVyZXNbbGluZWFyaXplVHlwZSh0eXBlLmtpbmQpXTsgfQotCi0gICAgc3RhdGljIGNvbnN0IFNp
Z25hdHVyZSYgZ2V0KFNpZ25hdHVyZUluZGV4KTsKLSAgICBzdGF0aWMgU2lnbmF0dXJlSW5kZXgg
Z2V0KGNvbnN0IFNpZ25hdHVyZSYpOwotICAgIHN0YXRpYyB2b2lkIHRyeUNsZWFudXAoKTsKLQot
cHJpdmF0ZToKLSAgICBIYXNoU2V0PFdhc206OlNpZ25hdHVyZUhhc2g+IG1fc2lnbmF0dXJlU2V0
OwotICAgIGNvbnN0IFNpZ25hdHVyZSogdGh1bmtTaWduYXR1cmVzW251bVR5cGVzXTsKLSAgICBM
b2NrIG1fbG9jazsKLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTaWduYXR1cmVJbmZv
cm1hdGlvbiogdGhlT25lOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBzaWduYXR1cmVJbmZvcm1hdGlvbkZsYWc7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZUlubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmVJbmxpbmVzLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhjNjk4NmRmZjZjNWI1NDIzMTNmMjU4MTU4OWFkOTI1ZjgwZDZlNTcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZUlubGluZXMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVr
aSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKLQotI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKLQotaW5saW5lIFNpZ25hdHVyZUluZm9ybWF0aW9uJiBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGQ6OmNhbGxfb25jZShzaWduYXR1cmVJbmZv
cm1hdGlvbkZsYWcsIFtdICgpIHsKLSAgICAgICAgdGhlT25lID0gbmV3IFNpZ25hdHVyZUluZm9y
bWF0aW9uOwotICAgIH0pOwotICAgIHJldHVybiAqdGhlT25lOwotfQotCi1pbmxpbmUgY29uc3Qg
U2lnbmF0dXJlJiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KFNpZ25hdHVyZUluZGV4IGluZGV4
KQotewotICAgIEFTU0VSVChpbmRleCAhPSBTaWduYXR1cmU6OmludmFsaWRJbmRleCk7Ci0gICAg
cmV0dXJuICpiaXR3aXNlX2Nhc3Q8Y29uc3QgU2lnbmF0dXJlKj4oaW5kZXgpOwotfQotCi1pbmxp
bmUgU2lnbmF0dXJlSW5kZXggU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChjb25zdCBTaWduYXR1
cmUmIHNpZ25hdHVyZSkKLXsKLSAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgU2ln
bmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24oKTsKLSAgICAgICAgTG9ja2VyIGxv
Y2tlciB7IGluZm8ubV9sb2NrIH07Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoaW5mbywgaW5mby5t
X3NpZ25hdHVyZVNldC5jb250YWlucyhTaWduYXR1cmVIYXNoIHsgY29uc3RfY2FzdDxTaWduYXR1
cmUmPihzaWduYXR1cmUpIH0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTaWdu
YXR1cmVJbmRleD4oJnNpZ25hdHVyZSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDJhODY3ZDZjNzNmZGVmM2U5MTg3MDZhM2Yw
NzJjMGQ1ODI5OTNjZDcuLmM1MTFjYjNmMjliNjFjMTJjZGQ3YTVjNTc1MmIwYTFmMWFlN2U0ZjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCkBAIC00
MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKICNpbmNsdWRlICJXYXNtT1NS
RW50cnlQbGFuLmgiCiAjaW5jbHVkZSAiV2FzbU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJXYXNt
U2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMu
aCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0
aW9uLmgiCiAKQEAgLTQ4Niw3ICs0ODYsNyBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKGNhbGxfbm9f
dGxzKQogICAgIHJldHVybiBkb1dhc21DYWxsKGluc3RhbmNlLCBpbnN0cnVjdGlvbi5tX2Z1bmN0
aW9uSW5kZXgpOwogfQogCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRvV2FzbUNhbGxJbmRp
cmVjdChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNp
Z25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1bnNpZ25lZCBzaWduYXR1
cmVJbmRleCkKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2FsbEluZGlyZWN0KENh
bGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGZ1
bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVuc2lnbmVkIHR5cGVJbmRleCkKIHsK
ICAgICBXYXNtOjpGdW5jUmVmVGFibGUqIHRhYmxlID0gaW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5k
ZXgpLT5hc0Z1bmNyZWZUYWJsZSgpOwogCkBAIC00OTYsMTEgKzQ5NiwxMSBAQCBpbmxpbmUgU2xv
d1BhdGhSZXR1cm5UeXBlIGRvV2FzbUNhbGxJbmRpcmVjdChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
V2FzbTo6SW5zdGFuYwogICAgIFdhc206Okluc3RhbmNlKiB0YXJnZXRJbnN0YW5jZSA9IHRhYmxl
LT5pbnN0YW5jZShmdW5jdGlvbkluZGV4KTsKICAgICBjb25zdCBXYXNtOjpXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uJiBmdW5jdGlvbiA9IHRhYmxlLT5mdW5jdGlvbihmdW5jdGlvbkluZGV4
KTsKIAotICAgIGlmIChmdW5jdGlvbi5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6
OmludmFsaWRJbmRleCkKKyAgICBpZiAoZnVuY3Rpb24udHlwZUluZGV4ID09IFdhc206OlR5cGVE
ZWZpbml0aW9uOjppbnZhbGlkSW5kZXgpCiAgICAgICAgIFdBU01fVEhST1coV2FzbTo6RXhjZXB0
aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkpOwogCi0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBj
YWxsU2lnbmF0dXJlID0gQ0FMTEVFKCktPnNpZ25hdHVyZShzaWduYXR1cmVJbmRleCk7Ci0gICAg
aWYgKGZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4ICE9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9u
OjpnZXQoY2FsbFNpZ25hdHVyZSkpCisgICAgY29uc3QgYXV0byYgY2FsbFNpZ25hdHVyZSA9IENB
TExFRSgpLT5zaWduYXR1cmUodHlwZUluZGV4KTsKKyAgICBpZiAoZnVuY3Rpb24udHlwZUluZGV4
ICE9IFdhc206OlR5cGVJbmZvcm1hdGlvbjo6Z2V0KGNhbGxTaWduYXR1cmUpKQogICAgICAgICBX
QVNNX1RIUk9XKFdhc206OkV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7CiAKICAgICBpZiAo
dGFyZ2V0SW5zdGFuY2UgIT0gaW5zdGFuY2UpCkBAIC01MTMsMTcgKzUxMywxNyBAQCBXQVNNX1NM
T1dfUEFUSF9ERUNMKGNhbGxfaW5kaXJlY3QpCiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBj
LT5hczxXYXNtQ2FsbEluZGlyZWN0PigpOwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXggPSBS
RUFEKGluc3RydWN0aW9uLm1fZnVuY3Rpb25JbmRleCkudW5ib3hlZEludDMyKCk7Ci0gICAgcmV0
dXJuIGRvV2FzbUNhbGxJbmRpcmVjdChjYWxsRnJhbWUsIGluc3RhbmNlLCBmdW5jdGlvbkluZGV4
LCBpbnN0cnVjdGlvbi5tX3RhYmxlSW5kZXgsIGluc3RydWN0aW9uLm1fc2lnbmF0dXJlSW5kZXgp
OworICAgIHJldHVybiBkb1dhc21DYWxsSW5kaXJlY3QoY2FsbEZyYW1lLCBpbnN0YW5jZSwgZnVu
Y3Rpb25JbmRleCwgaW5zdHJ1Y3Rpb24ubV90YWJsZUluZGV4LCBpbnN0cnVjdGlvbi5tX3R5cGVJ
bmRleCk7CiB9CiAKIFdBU01fU0xPV19QQVRIX0RFQ0woY2FsbF9pbmRpcmVjdF9ub190bHMpCiB7
CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5hczxXYXNtQ2FsbEluZGlyZWN0Tm9UbHM+KCk7
CiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IFJFQUQoaW5zdHJ1Y3Rpb24ubV9mdW5jdGlv
bkluZGV4KS51bmJveGVkSW50MzIoKTsKLSAgICByZXR1cm4gZG9XYXNtQ2FsbEluZGlyZWN0KGNh
bGxGcmFtZSwgaW5zdGFuY2UsIGZ1bmN0aW9uSW5kZXgsIGluc3RydWN0aW9uLm1fdGFibGVJbmRl
eCwgaW5zdHJ1Y3Rpb24ubV9zaWduYXR1cmVJbmRleCk7CisgICAgcmV0dXJuIGRvV2FzbUNhbGxJ
bmRpcmVjdChjYWxsRnJhbWUsIGluc3RhbmNlLCBmdW5jdGlvbkluZGV4LCBpbnN0cnVjdGlvbi5t
X3RhYmxlSW5kZXgsIGluc3RydWN0aW9uLm1fdHlwZUluZGV4KTsKIH0KIAotaW5saW5lIFNsb3dQ
YXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsUmVmKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJ
bnN0YW5jZSogY2FsbGVySW5zdGFuY2UsIEpTVmFsdWUgdGFyZ2V0UmVmZXJlbmNlLCB1bnNpZ25l
ZCBzaWduYXR1cmVJbmRleCkKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2FsbFJl
ZihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGNhbGxlckluc3RhbmNlLCBK
U1ZhbHVlIHRhcmdldFJlZmVyZW5jZSwgdW5zaWduZWQgdHlwZUluZGV4KQogewogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOwogCkBAIC01NDEsOCArNTQxLDggQEAgaW5saW5lIFNsb3dQYXRo
UmV0dXJuVHlwZSBkb1dhc21DYWxsUmVmKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJbnN0
YW5jZSogY2EKICAgICBpZiAoY2FsbGVlSW5zdGFuY2UgIT0gY2FsbGVySW5zdGFuY2UpCiAgICAg
ICAgIGNhbGxlZUluc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGNhbGxlckluc3RhbmNlLT5j
YWNoZWRTdGFja0xpbWl0KCkpOwogCi0gICAgQVNTRVJUKGZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4
ID09IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoQ0FMTEVFKCktPnNpZ25hdHVyZShz
aWduYXR1cmVJbmRleCkpKTsKLSAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlSW5kZXgpOworICAg
IEFTU0VSVChmdW5jdGlvbi50eXBlSW5kZXggPT0gV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpnZXQo
Q0FMTEVFKCktPnNpZ25hdHVyZSh0eXBlSW5kZXgpKSk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGVJ
bmRleCk7CiAgICAgV0FTTV9DQUxMX1JFVFVSTihjYWxsZWVJbnN0YW5jZSwgZnVuY3Rpb24uZW50
cnlwb2ludExvYWRMb2NhdGlvbi0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVudHJ5UHRyVGFn
KTsKIH0KIApAQCAtNTUwLDE0ICs1NTAsMTQgQEAgV0FTTV9TTE9XX1BBVEhfREVDTChjYWxsX3Jl
ZikKIHsKICAgICBhdXRvIGluc3RydWN0aW9uID0gcGMtPmFzPFdhc21DYWxsUmVmPigpOwogICAg
IEpTVmFsdWUgcmVmZXJlbmNlID0gSlNWYWx1ZTo6ZGVjb2RlKFJFQUQoaW5zdHJ1Y3Rpb24ubV9m
dW5jdGlvblJlZmVyZW5jZSkuZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIGRvV2FzbUNh
bGxSZWYoY2FsbEZyYW1lLCBpbnN0YW5jZSwgcmVmZXJlbmNlLCBpbnN0cnVjdGlvbi5tX3NpZ25h
dHVyZUluZGV4KTsKKyAgICByZXR1cm4gZG9XYXNtQ2FsbFJlZihjYWxsRnJhbWUsIGluc3RhbmNl
LCByZWZlcmVuY2UsIGluc3RydWN0aW9uLm1fdHlwZUluZGV4KTsKIH0KIAogV0FTTV9TTE9XX1BB
VEhfREVDTChjYWxsX3JlZl9ub190bHMpCiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5h
czxXYXNtQ2FsbFJlZk5vVGxzPigpOwogICAgIEpTVmFsdWUgcmVmZXJlbmNlID0gSlNWYWx1ZTo6
ZGVjb2RlKFJFQUQoaW5zdHJ1Y3Rpb24ubV9mdW5jdGlvblJlZmVyZW5jZSkuZW5jb2RlZEpTVmFs
dWUoKSk7Ci0gICAgcmV0dXJuIGRvV2FzbUNhbGxSZWYoY2FsbEZyYW1lLCBpbnN0YW5jZSwgcmVm
ZXJlbmNlLCBpbnN0cnVjdGlvbi5tX3NpZ25hdHVyZUluZGV4KTsKKyAgICByZXR1cm4gZG9XYXNt
Q2FsbFJlZihjYWxsRnJhbWUsIGluc3RhbmNlLCByZWZlcmVuY2UsIGluc3RydWN0aW9uLm1fdHlw
ZUluZGV4KTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChzZXRfZ2xvYmFsX3JlZikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKaW5k
ZXggZmE1NTJlZmZmMTc0MWVjYjVhNGI2YzJmODlmY2EwOTc1OWVlMzE1ZC4uYTU2YTY4MDA3ZTYx
OTg0ZDU5M2JkNjQ3Y2Q3ZTY1M2JmMWVjY2Y5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNp
bmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVBhcnNlci5oIgogI2luY2x1ZGUgIldh
c21TZWN0aW9uUGFyc2VyLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNp
bmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL1VuYWxp
Z25lZEFjY2Vzcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BsYW4uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BsYW4uY3BwCmluZGV4IDgx
MzVhMTFiYjg1NWE0YWRjMWU3YmIyNTRhZmY2OWM5MTAyMjEwOWQuLmNkZjRmZTgwYzQ3YzZlYzdm
ZTg5M2JjNTgxMzFkMTY4MzFjNjE5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21TdHJlYW1pbmdQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtU3RyZWFtaW5nUGxhbi5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJX
YXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUxMSW50UGxhbi5oIgogI2luY2x1ZGUgIldhc21O
YW1lU2VjdGlvbi5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCmluZGV4IGI1M2M1YTQyZmM4
NjI3OTQxNzQ0ZTcxZWIxMzVhZTQ2ZGIzODM0YWEuLjA4ODA4NDU2YzQ3NjQxMTI0YzAxNTU0ZWEy
YjdmYWQ5ODlhZTM3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UYWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNw
cApAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgVGFibGU6OmNsZWFyKHVpbnQzMl90IGluZGV4KQog
ICAgIFJFTEVBU0VfQVNTRVJUKG1fb3duZXIpOwogICAgIGlmIChhdXRvKiBmdW5jUmVmVGFibGUg
PSBhc0Z1bmNyZWZUYWJsZSgpKSB7CiAgICAgICAgIGZ1bmNSZWZUYWJsZS0+bV9pbXBvcnRhYmxl
RnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24oKTsK
LSAgICAgICAgQVNTRVJUKGZ1bmNSZWZUYWJsZS0+bV9pbXBvcnRhYmxlRnVuY3Rpb25zLmdldCgp
W2luZGV4XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7
IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAgICBBU1NFUlQoZnVu
Y1JlZlRhYmxlLT5tX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnR5cGVJbmRleCA9
PSBXYXNtOjpUeXBlRGVmaW5pdGlvbjo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlz
IGluIGNvbXBpbGVkIGNvZGUuCiAgICAgICAgIGZ1bmNSZWZUYWJsZS0+bV9pbnN0YW5jZXMuZ2V0
KClbaW5kZXhdID0gbnVsbHB0cjsKICAgICB9CiAgICAgbV9qc1ZhbHVlcy5nZXQoKVtpbmRleF0u
c2V0U3RhcnRpbmdWYWx1ZShqc051bGwoKSk7CkBAIC0xOTcsNyArMTk3LDcgQEAgRnVuY1JlZlRh
YmxlOjpGdW5jUmVmVGFibGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4gbWF4aW11bSkKICAgICBtX2luc3RhbmNlcyA9IE1hbGxvY1B0cjxJbnN0YW5jZSosIFZNTWFs
bG9jPjo6bWFsbG9jKHNpemVvZihJbnN0YW5jZSopICogQ2hlY2tlZDxzaXplX3Q+KGFsbG9jYXRl
ZExlbmd0aChtX2xlbmd0aCkpKTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYWxsb2Nh
dGVkTGVuZ3RoKG1fbGVuZ3RoKTsgKytpKSB7CiAgICAgICAgIG5ldyAoJm1faW1wb3J0YWJsZUZ1
bmN0aW9ucy5nZXQoKVtpXSkgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbigpOwotICAgICAg
ICBBU1NFUlQobV9pbXBvcnRhYmxlRnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZUluZGV4ID09
IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNv
bXBpbGVkIGNvZGUuCisgICAgICAgIEFTU0VSVChtX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0KClb
aV0udHlwZUluZGV4ID09IFdhc206OlR5cGVEZWZpbml0aW9uOjppbnZhbGlkSW5kZXgpOyAvLyBX
ZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KICAgICAgICAgbV9pbnN0YW5jZXMuZ2V0
KClbaV0gPSBudWxscHRyOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21UYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWcu
aAppbmRleCBiZGZjZmI2ODhlMmQxZTk3OWFkMGNjZjRjMWFhZjA2Zjk5MjQwNTI0Li5mMzZhZGE2
YTI0ZTE0ZTU4OTczZjdkNmNjZjkwNDRlZDU1YjU0YTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRhZy5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0
aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTM1LDI1ICsz
NSwyNyBAQCBjbGFzcyBUYWcgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGFn
PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoVGFnKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRhZz4gY3JlYXRlKGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFRhZyhzaWduYXR1cmUpKTsg
fQorICAgIHN0YXRpYyBSZWY8VGFnPiBjcmVhdGUoY29uc3QgVHlwZURlZmluaXRpb24mIHR5cGUp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGFnKHR5cGUpKTsgfQogCi0gICAgU2lnbmF0dXJlQXJn
Q291bnQgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOyB9Ci0gICAgVHlwZSBwYXJhbWV0ZXIoU2lnbmF0dXJlQXJnQ291bnQgaSkgY29u
c3QgeyByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOyB9CisgICAgRnVuY3Rpb25BcmdD
b3VudCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZS0+YXM8RnVuY3Rpb25T
aWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgfQorICAgIFR5cGUgcGFyYW1ldGVyKEZ1bmN0
aW9uQXJnQ291bnQgaSkgY29uc3QgeyByZXR1cm4gbV90eXBlLT5hczxGdW5jdGlvblNpZ25hdHVy
ZT4oKS0+YXJndW1lbnRUeXBlKGkpOyB9CisgICAgVHlwZUluZGV4IHR5cGVJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZS0+aW5kZXgoKTsgfQogCiAgICAgLy8gU2luY2UgKDEpIHdlIGRvIG5v
dCBjb3B5IFdhc206OlRhZyBhbmQgKDIpIHdlIGFsd2F5cyBhbGxvY2F0ZSBXYXNtOjpUYWcgZnJv
bSBoZWFwLCB3ZSBjYW4gdXNlCiAgICAgLy8gcG9pbnRlciBjb21wYXJpc29uIGZvciBpZGVudGl0
eSBjaGVjay4KICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gdGhpcyA9PSAmb3RoZXI7IH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGFnJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gdGhpcyAhPSAmb3RoZXI7IH0KIAotICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUuZ2V0KCk7IH0KKyAg
ICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5cGUt
PmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOyB9CiAKIHByaXZhdGU6Ci0gICAgVGFnKGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlKQotICAgICAgICA6IG1fc2lnbmF0dXJlKFJlZiB7IHNpZ25hdHVy
ZSB9KQorICAgIFRhZyhjb25zdCBUeXBlRGVmaW5pdGlvbiYgdHlwZSkKKyAgICAgICAgOiBtX3R5
cGUoUmVmIHsgdHlwZSB9KQogICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUuaXM8RnVuY3Rpb25T
aWduYXR1cmU+KCkpOwogICAgIH0KIAotICAgIFJlZjxjb25zdCBTaWduYXR1cmU+IG1fc2lnbmF0
dXJlOworICAgIFJlZjxjb25zdCBUeXBlRGVmaW5pdGlvbj4gbV90eXBlOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21UeXBlRGVmaW5pdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVHlwZURlZmluaXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NDg5MWNjMzFmN2Q1MWY5ZDViMmQ1
OTE1YjMwMGMzMDQzMWI0YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtVHlwZURlZmluaXRpb24uY3BwCkBAIC0wLDAgKzEsMjk4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uLmgiCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgV2FzbSB7CisKK1N0cmluZyBUeXBlRGVmaW5pdGlvbjo6dG9TdHJpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBXVEY6OnRvU3RyaW5nKCp0aGlzKTsKK30KKwordm9pZCBUeXBlRGVmaW5p
dGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpczxGdW5jdGlv
blNpZ25hdHVyZT4oKSkKKyAgICAgICAgcmV0dXJuIGFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5k
dW1wKG91dCk7CisKKyAgICBBU1NFUlQoaXM8U3RydWN0VHlwZT4oKSk7CisgICAgcmV0dXJuIGFz
PFN0cnVjdFR5cGU+KCktPmR1bXAob3V0KTsKK30KKworU3RyaW5nIEZ1bmN0aW9uU2lnbmF0dXJl
Ojp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6dG9TdHJpbmcoKnRoaXMpOwor
fQorCit2b2lkIEZ1bmN0aW9uU2lnbmF0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgeworICAgICAgICBvdXQucHJpbnQoIigiKTsKKyAgICAgICAgQ29tbWFQcmludGVy
IGNvbW1hOworICAgICAgICBmb3IgKEZ1bmN0aW9uQXJnQ291bnQgYXJnID0gMDsgYXJnIDwgYXJn
dW1lbnRDb3VudCgpOyArK2FyZykKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbWFrZVN0
cmluZyhhcmd1bWVudFR5cGUoYXJnKS5raW5kKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBvdXQu
cHJpbnQoIiAtPiBbIik7CisgICAgICAgIGZvciAoRnVuY3Rpb25BcmdDb3VudCByZXQgPSAwOyBy
ZXQgPCByZXR1cm5Db3VudCgpOyArK3JldCkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
bWFrZVN0cmluZyhyZXR1cm5UeXBlKHJldCkua2luZCkpOworICAgICAgICBvdXQucHJpbnQoIl0i
KTsKKyAgICB9Cit9CisKK1N0cmluZyBTdHJ1Y3RUeXBlOjp0b1N0cmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdURjo6dG9TdHJpbmcoKnRoaXMpOworfQorCit2b2lkIFN0cnVjdFR5cGU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBD
b21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChTdHJ1Y3RGaWVsZENvdW50IGZpZWxkSW5kZXgg
PSAwOyBmaWVsZEluZGV4IDwgZmllbGRDb3VudCgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBtYWtlU3RyaW5nKGZpZWxkKGZpZWxkSW5kZXgpLnR5cGUua2luZCkp
OworICAgICAgICBvdXQucHJpbnQoY29tbWEsIGZpZWxkKGZpZWxkSW5kZXgpLm11dGFiaWxpdHkg
PyAiaW1tdXRhYmxlIiA6ICJtdXRhYmxlIik7CisgICAgfQorICAgIG91dC5wcmludCgiKSIpOwor
fQorCitzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVNpZ25hdHVyZUhhc2goc2l6ZV90IHJldHVybkNv
dW50LCBjb25zdCBUeXBlKiByZXR1cm5UeXBlcywgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IFR5cGUqIGFyZ3VtZW50VHlwZXMpCit7CisgICAgdW5zaWduZWQgYWNjdW11bGF0b3IgPSAweGEx
YmNlZGQ4dTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytp
KSB7CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwg
V1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFyZ3VtZW50
VHlwZXNbaV0ua2luZCkpKTsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNo
KGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oYXJndW1lbnRUeXBlc1tpXS5udWxsYWJsZSkpKTsKKyAgICAgICAgYWNjdW11bGF0b3Ig
PSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+Ojpo
YXNoKGFyZ3VtZW50VHlwZXNbaV0uaW5kZXgpKTsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IHJldHVybkNvdW50OyArK2kpIHsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6
OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3Rh
dGljX2Nhc3Q8dWludDhfdD4ocmV0dXJuVHlwZXNbaV0ua2luZCkpKTsKKyAgICAgICAgYWNjdW11
bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhf
dD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4ocmV0dXJuVHlwZXNbaV0ubnVsbGFibGUpKSk7
CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RG
OjpJbnRIYXNoPHVuc2lnbmVkPjo6aGFzaChyZXR1cm5UeXBlc1tpXS5pbmRleCkpOworICAgIH0K
KyAgICByZXR1cm4gYWNjdW11bGF0b3I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjb21wdXRlU3Ry
dWN0VHlwZUhhc2goc2l6ZV90IGZpZWxkQ291bnQsIGNvbnN0IFN0cnVjdEZpZWxkKiBmaWVsZHMp
Cit7CisgICAgdW5zaWduZWQgYWNjdW11bGF0b3IgPSAweDE1ZDI1NDY7CisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IGZpZWxkQ291bnQ7ICsraSkgeworICAgICAgICBhY2N1bXVsYXRvciA9
IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFz
aChzdGF0aWNfY2FzdDx1aW50OF90PihmaWVsZHNbaV0udHlwZS5raW5kKSkpOworICAgICAgICBh
Y2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1
aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihmaWVsZHNbaV0udHlwZS5udWxsYWJs
ZSkpKTsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9y
LCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4oZmllbGRz
W2ldLnR5cGUuaW5kZXgpKSk7CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFz
aChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGZpZWxkc1tpXS5tdXRhYmlsaXR5KSkpOworICAgIH0KKyAgICByZXR1cm4gYWNjdW11
bGF0b3I7Cit9CisKK3Vuc2lnbmVkIFR5cGVEZWZpbml0aW9uOjpoYXNoKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpIHsKKyAgICAgICAgY29uc3QgRnVuY3Rpb25T
aWduYXR1cmUqIHNpZ25hdHVyZSA9IGFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOworICAgICAgICBy
ZXR1cm4gY29tcHV0ZVNpZ25hdHVyZUhhc2goc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpLCBzaWdu
YXR1cmUtPnN0b3JhZ2UoMCksIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBzaWduYXR1cmUt
PnN0b3JhZ2Uoc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSk7CisgICAgfQorCisgICAgQVNTRVJU
KGlzPFN0cnVjdFR5cGU+KCkpOworICAgIGNvbnN0IFN0cnVjdFR5cGUqIHN0cnVjdFR5cGUgPSBh
czxTdHJ1Y3RUeXBlPigpOworICAgIHJldHVybiBjb21wdXRlU3RydWN0VHlwZUhhc2goc3RydWN0
VHlwZS0+ZmllbGRDb3VudCgpLCBzdHJ1Y3RUeXBlLT5zdG9yYWdlKDApKTsKK30KKworUmVmUHRy
PFR5cGVEZWZpbml0aW9uPiBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlRnVuY3Rpb25TaWduYXR1
cmUoRnVuY3Rpb25BcmdDb3VudCByZXR1cm5Db3VudCwgRnVuY3Rpb25BcmdDb3VudCBhcmd1bWVu
dENvdW50KQoreworICAgIC8vIFdlIHVzZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBmb3IgdGhp
cyBjbGFzcy4KKyAgICBhdXRvIHJlc3VsdCA9IHRyeUZhc3RNYWxsb2MoYWxsb2NhdGVkRnVuY3Rp
b25TaXplKHJldHVybkNvdW50LCBhcmd1bWVudENvdW50KSk7CisgICAgdm9pZCogbWVtb3J5ID0g
bnVsbHB0cjsKKyAgICBpZiAoIXJlc3VsdC5nZXRWYWx1ZShtZW1vcnkpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBUeXBlRGVmaW5pdGlvbiogc2lnbmF0dXJlID0gbmV3IChOb3ROdWxs
LCBtZW1vcnkpIFR5cGVEZWZpbml0aW9uKHJldHVybkNvdW50LCBhcmd1bWVudENvdW50KTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoc2lnbmF0dXJlKTsKK30KKworUmVmUHRyPFR5cGVEZWZpbml0aW9u
PiBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlU3RydWN0VHlwZShTdHJ1Y3RGaWVsZENvdW50IGZp
ZWxkQ291bnQpCit7CisgICAgLy8gV2UgdXNlIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIGZvciB0
aGlzIGNsYXNzLgorICAgIGF1dG8gcmVzdWx0ID0gdHJ5RmFzdE1hbGxvYyhhbGxvY2F0ZWRTdHJ1
Y3RTaXplKGZpZWxkQ291bnQpKTsKKyAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOworICAgIGlm
ICghcmVzdWx0LmdldFZhbHVlKG1lbW9yeSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IFR5cGVEZWZpbml0aW9uKiBzaWduYXR1cmUgPSBuZXcgKE5vdE51bGwsIG1lbW9yeSkgVHlwZURl
ZmluaXRpb24oZmllbGRDb3VudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKHNpZ25hdHVyZSk7Cit9
CisKK1R5cGVJbmZvcm1hdGlvbjo6VHlwZUluZm9ybWF0aW9uKCkKK3sKKyNkZWZpbmUgTUFLRV9U
SFVOS19TSUdOQVRVUkUodHlwZSwgZW5jLCBzdHIsIHZhbCwgXykgXAorICAgIGRvIHsgXAorICAg
ICAgICBpZiAoVHlwZUtpbmQ6OnR5cGUgIT0gVHlwZUtpbmQ6OlZvaWQpIHsgXAorICAgICAgICAg
ICAgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiBzaWcgPSBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRl
RnVuY3Rpb25TaWduYXR1cmUoMSwgMCk7IFwKKyAgICAgICAgICAgIHNpZy0+cmVmKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBzaWctPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5nZXRSZXR1
cm5UeXBlKDApID0gVHlwZXM6OnR5cGU7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
dGh1bmtUeXBlc1tsaW5lYXJpemVUeXBlKFR5cGVLaW5kOjp0eXBlKV0gPSBzaWcuZ2V0KCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG1fdHlwZVNldC5hZGQoVHlwZUhh
c2ggeyBzaWcucmVsZWFzZU5vbk51bGwoKSB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZh
bHNlKTsKKworICAgIEZPUl9FQUNIX1dBU01fVFlQRShNQUtFX1RIVU5LX1NJR05BVFVSRSk7CisK
KyAgICAvLyBNYWtlIFZvaWQgYWdhaW4gYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlIG9uZSB0aGF0
IGhhcyB2b2lkIGluIGl0LgorICAgIHsKKyAgICAgICAgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiBz
aWcgPSBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlRnVuY3Rpb25TaWduYXR1cmUoMCwgMCk7Cisg
ICAgICAgIHNpZy0+cmVmKCk7CisgICAgICAgIHRodW5rVHlwZXNbbGluZWFyaXplVHlwZShUeXBl
S2luZDo6Vm9pZCldID0gc2lnLmdldCgpOworICAgICAgICBtX3R5cGVTZXQuYWRkKFR5cGVIYXNo
IHsgc2lnLnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAgfQorfQorCitzdHJ1Y3QgRnVuY3Rpb25Q
YXJhbWV0ZXJUeXBlcyB7CisgICAgY29uc3QgVmVjdG9yPFR5cGUsIDE+JiByZXR1cm5UeXBlczsK
KyAgICBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50VHlwZXM7CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBGdW5jdGlvblBhcmFtZXRlclR5cGVzJiBwYXJhbXMpCisgICAgewor
ICAgICAgICByZXR1cm4gY29tcHV0ZVNpZ25hdHVyZUhhc2gocGFyYW1zLnJldHVyblR5cGVzLnNp
emUoKSwgcGFyYW1zLnJldHVyblR5cGVzLmRhdGEoKSwgcGFyYW1zLmFyZ3VtZW50VHlwZXMuc2l6
ZSgpLCBwYXJhbXMuYXJndW1lbnRUeXBlcy5kYXRhKCkpOworICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFR5cGVIYXNoJiBzaWcsIGNvbnN0IEZ1bmN0aW9uUGFyYW1ldGVyVHlw
ZXMmIHBhcmFtcykKKyAgICB7CisgICAgICAgIGlmIChzaWcua2V5LT5pczxTdHJ1Y3RUeXBlPigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNvbnN0IEZ1bmN0aW9uU2ln
bmF0dXJlKiBzaWduYXR1cmUgPSBzaWcua2V5LT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKKyAg
ICAgICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpICE9IHBhcmFtcy5hcmd1bWVudFR5
cGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNpZ25h
dHVyZS0+cmV0dXJuQ291bnQoKSAhPSBwYXJhbXMucmV0dXJuVHlwZXMuc2l6ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2lnbmF0
dXJlLT5hcmd1bWVudFR5cGUoaSkgIT0gcGFyYW1zLmFyZ3VtZW50VHlwZXNbaV0pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CisgICAgICAgICAg
ICBpZiAoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpICE9IHBhcmFtcy5yZXR1cm5UeXBlc1tpXSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFR5cGVIYXNoJiBlbnRy
eSwgY29uc3QgRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyYgcGFyYW1zLCB1bnNpZ25lZCkKKyAgICB7
CisgICAgICAgIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4gc2lnbmF0dXJlID0gVHlwZURlZmluaXRp
b246OnRyeUNyZWF0ZUZ1bmN0aW9uU2lnbmF0dXJlKHBhcmFtcy5yZXR1cm5UeXBlcy5zaXplKCks
IHBhcmFtcy5hcmd1bWVudFR5cGVzLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNp
Z25hdHVyZSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtcy5yZXR1
cm5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25T
aWduYXR1cmU+KCktPmdldFJldHVyblR5cGUoaSkgPSBwYXJhbXMucmV0dXJuVHlwZXNbaV07CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtcy5hcmd1bWVudFR5cGVzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+Z2V0QXJndW1lbnRUeXBlKGkpID0gcGFyYW1zLmFyZ3VtZW50VHlwZXNbaV07CisKKyAgICAg
ICAgZW50cnkua2V5ID0gV1RGTW92ZShzaWduYXR1cmUpOworICAgIH0KK307CisKK3N0cnVjdCBT
dHJ1Y3RQYXJhbWV0ZXJUeXBlcyB7CisgICAgY29uc3QgVmVjdG9yPFN0cnVjdEZpZWxkPiYgZmll
bGRzOworCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3RydWN0UGFyYW1ldGVyVHlw
ZXMmIHBhcmFtcykKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlU3RydWN0VHlwZUhhc2go
cGFyYW1zLmZpZWxkcy5zaXplKCksIHBhcmFtcy5maWVsZHMuZGF0YSgpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUeXBlSGFzaCYgc2lnLCBjb25zdCBTdHJ1Y3RQYXJh
bWV0ZXJUeXBlcyYgcGFyYW1zKQorICAgIHsKKyAgICAgICAgaWYgKHNpZy5rZXktPmlzPEZ1bmN0
aW9uU2lnbmF0dXJlPigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNv
bnN0IFN0cnVjdFR5cGUqIHN0cnVjdFR5cGUgPSBzaWcua2V5LT5hczxTdHJ1Y3RUeXBlPigpOwor
ICAgICAgICBpZiAoc3RydWN0VHlwZS0+ZmllbGRDb3VudCgpICE9IHBhcmFtcy5maWVsZHMuc2l6
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdHJ1Y3RUeXBlLT5maWVsZENvdW50KCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKHN0cnVjdFR5cGUtPmZpZWxkKGkpICE9IHBhcmFtcy5maWVsZHNbaV0pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFR5cGVIYXNoJiBlbnRyeSwgY29uc3Qg
U3RydWN0UGFyYW1ldGVyVHlwZXMmIHBhcmFtcywgdW5zaWduZWQpCisgICAgeworICAgICAgICBS
ZWZQdHI8VHlwZURlZmluaXRpb24+IHNpZ25hdHVyZSA9IFR5cGVEZWZpbml0aW9uOjp0cnlDcmVh
dGVTdHJ1Y3RUeXBlKHBhcmFtcy5maWVsZHMuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc2lnbmF0dXJlKTsKKworICAgICAgICBTdHJ1Y3RUeXBlKiBzdHJ1Y3RUeXBlID0gc2lnbmF0
dXJlLT5hczxTdHJ1Y3RUeXBlPigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGFyYW1zLmZpZWxkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHN0cnVjdFR5cGUtPmdldEZp
ZWxkKGkpID0gcGFyYW1zLmZpZWxkc1tpXTsKKworICAgICAgICBlbnRyeS5rZXkgPSBXVEZNb3Zl
KHNpZ25hdHVyZSk7CisgICAgfQorfTsKKworUmVmUHRyPFR5cGVEZWZpbml0aW9uPiBUeXBlSW5m
b3JtYXRpb246OnR5cGVEZWZpbml0aW9uRm9yRnVuY3Rpb24oY29uc3QgVmVjdG9yPFR5cGUsIDE+
JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCit7CisgICAgaWYgY29uc3RleHBy
IChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdHMuY29udGFpbnMoV2Fz
bTo6VHlwZXM6OlZvaWQpKTsKKyAgICAgICAgQVNTRVJUKCFhcmdzLmNvbnRhaW5zKFdhc206OlR5
cGVzOjpWb2lkKSk7CisgICAgfQorICAgIFR5cGVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRv
bigpOworICAgIExvY2tlciBsb2NrZXIgeyBpbmZvLm1fbG9jayB9OworCisgICAgYXV0byBhZGRS
ZXN1bHQgPSBpbmZvLm1fdHlwZVNldC50ZW1wbGF0ZSBhZGQ8RnVuY3Rpb25QYXJhbWV0ZXJUeXBl
cz4oRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyB7IHJlc3VsdHMsIGFyZ3MgfSk7CisgICAgcmV0dXJu
IGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5OworfQorCitSZWZQdHI8VHlwZURlZmluaXRpb24+IFR5
cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JTdHJ1Y3QoY29uc3QgVmVjdG9yPFN0cnVj
dEZpZWxkPiYgZmllbGRzKQoreworICAgIFR5cGVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRv
bigpOworICAgIExvY2tlciBsb2NrZXIgeyBpbmZvLm1fbG9jayB9OworCisgICAgYXV0byBhZGRS
ZXN1bHQgPSBpbmZvLm1fdHlwZVNldC50ZW1wbGF0ZSBhZGQ8U3RydWN0UGFyYW1ldGVyVHlwZXM+
KFN0cnVjdFBhcmFtZXRlclR5cGVzIHsgZmllbGRzIH0pOworICAgIHJldHVybiBhZGRSZXN1bHQu
aXRlcmF0b3ItPmtleTsKK30KKwordm9pZCBUeXBlSW5mb3JtYXRpb246OnRyeUNsZWFudXAoKQor
eworICAgIFR5cGVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRvbigpOworICAgIExvY2tlciBs
b2NrZXIgeyBpbmZvLm1fbG9jayB9OworCisgICAgaW5mby5tX3R5cGVTZXQucmVtb3ZlSWYoWyZd
IChhdXRvJiBoYXNoKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IGhhc2gua2V5
OworICAgICAgICByZXR1cm4gc2lnbmF0dXJlLT5yZWZDb3VudCgpID09IDE7CisgICAgfSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNT
RU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVHlwZURl
ZmluaXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVmaW5pdGlv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJhZjM5Yzg2MWIzM2FhYzY3NTU2NTdkZDBjZjE4ZjczY2E2YjE1MTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVHlwZURl
ZmluaXRpb24uaApAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx2YXJpYW50
PgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbU9wcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitu
YW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIEZ1bmN0aW9uQXJnQ291bnQgPSB1aW50MzJfdDsKK3Vz
aW5nIFN0cnVjdEZpZWxkQ291bnQgPSB1aW50MzJfdDsKKworY2xhc3MgRnVuY3Rpb25TaWduYXR1
cmUgeworcHVibGljOgorICAgIEZ1bmN0aW9uU2lnbmF0dXJlKGNvbnN0IGNoYXIqIHBheWxvYWQs
IEZ1bmN0aW9uQXJnQ291bnQgYXJndW1lbnRDb3VudCwgRnVuY3Rpb25BcmdDb3VudCByZXR1cm5D
b3VudCkKKyAgICAgICAgOiBtX3BheWxvYWQocGF5bG9hZCkKKyAgICAgICAgLCBtX2FyZ0NvdW50
KGFyZ3VtZW50Q291bnQpCisgICAgICAgICwgbV9yZXRDb3VudChyZXR1cm5Db3VudCkKKyAgICB7
CisgICAgfQorCisgICAgRnVuY3Rpb25BcmdDb3VudCBhcmd1bWVudENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9hcmdDb3VudDsgfQorICAgIEZ1bmN0aW9uQXJnQ291bnQgcmV0dXJuQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX3JldENvdW50OyB9CisgICAgVHlwZSByZXR1cm5UeXBlKEZ1bmN0aW9u
QXJnQ291bnQgaSkgY29uc3QgeyBBU1NFUlQoaSA8IHJldHVybkNvdW50KCkpOyByZXR1cm4gY29u
c3RfY2FzdDxGdW5jdGlvblNpZ25hdHVyZSo+KHRoaXMpLT5nZXRSZXR1cm5UeXBlKGkpOyB9Cisg
ICAgYm9vbCByZXR1cm5zVm9pZCgpIGNvbnN0IHsgcmV0dXJuICFyZXR1cm5Db3VudCgpOyB9Cisg
ICAgVHlwZSBhcmd1bWVudFR5cGUoRnVuY3Rpb25BcmdDb3VudCBpKSBjb25zdCB7IHJldHVybiBj
b25zdF9jYXN0PEZ1bmN0aW9uU2lnbmF0dXJlKj4odGhpcyktPmdldEFyZ3VtZW50VHlwZShpKTsg
fQorCisgICAgV1RGOjpTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoV1RG
OjpQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIFR5cGUmIGdldFJldHVyblR5cGUoRnVu
Y3Rpb25BcmdDb3VudCBpKSB7IEFTU0VSVChpIDwgcmV0dXJuQ291bnQoKSk7IHJldHVybiAqc3Rv
cmFnZShpKTsgfQorICAgIFR5cGUmIGdldEFyZ3VtZW50VHlwZShGdW5jdGlvbkFyZ0NvdW50IGkp
IHsgQVNTRVJUKGkgPCBhcmd1bWVudENvdW50KCkpOyByZXR1cm4gKnN0b3JhZ2UocmV0dXJuQ291
bnQoKSArIGkpOyB9CisKKyAgICBUeXBlKiBzdG9yYWdlKEZ1bmN0aW9uQXJnQ291bnQgaSkgeyBy
ZXR1cm4gaSArIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZSo+KGNvbnN0X2Nhc3Q8Y2hhcio+KG1fcGF5
bG9hZCkpOyB9CisgICAgVHlwZSogc3RvcmFnZShGdW5jdGlvbkFyZ0NvdW50IGkpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8RnVuY3Rpb25TaWduYXR1cmUqPih0aGlzKS0+c3RvcmFnZShpKTsg
fQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBUeXBlSW5mb3JtYXRpb247CisKKyAgICBj
b25zdCBjaGFyKiBtX3BheWxvYWQ7CisgICAgRnVuY3Rpb25BcmdDb3VudCBtX2FyZ0NvdW50Owor
ICAgIEZ1bmN0aW9uQXJnQ291bnQgbV9yZXRDb3VudDsKK307CisKKy8vIEZJWE1FIGF1dG8tZ2Vu
ZXJhdGUgdGhpcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTIz
MQorZW51bSBNdXRhYmlsaXR5IDogdWludDhfdCB7CisgICAgTXV0YWJsZSA9IDEsCisgICAgSW1t
dXRhYmxlID0gMAorfTsKKworc3RydWN0IFN0cnVjdEZpZWxkIHsKKyAgICBUeXBlIHR5cGU7Cisg
ICAgTXV0YWJpbGl0eSBtdXRhYmlsaXR5OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0
cnVjdEZpZWxkJiByaHMpIGNvbnN0IHsgcmV0dXJuIHR5cGUgPT0gcmhzLnR5cGUgJiYgbXV0YWJp
bGl0eSA9PSByaHMubXV0YWJpbGl0eTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJ1
Y3RGaWVsZCYgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHJocyk7IH0KK307CisKK2Ns
YXNzIFN0cnVjdFR5cGUgeworcHVibGljOgorICAgIFN0cnVjdFR5cGUoY29uc3QgY2hhciogcGF5
bG9hZCwgU3RydWN0RmllbGRDb3VudCBmaWVsZENvdW50KQorICAgICAgICA6IG1fcGF5bG9hZChw
YXlsb2FkKQorICAgICAgICAsIG1fZmllbGRDb3VudChmaWVsZENvdW50KQorICAgIHsKKyAgICB9
CisKKyAgICBTdHJ1Y3RGaWVsZENvdW50IGZpZWxkQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Zp
ZWxkQ291bnQ7IH0KKyAgICBTdHJ1Y3RGaWVsZCBmaWVsZChTdHJ1Y3RGaWVsZENvdW50IGkpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RydWN0VHlwZSo+KHRoaXMpLT5nZXRGaWVsZChpKTsg
fQorCisgICAgV1RGOjpTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoV1RG
OjpQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIFN0cnVjdEZpZWxkJiBnZXRGaWVsZChT
dHJ1Y3RGaWVsZENvdW50IGkpIHsgQVNTRVJUKGkgPCBmaWVsZENvdW50KCkpOyByZXR1cm4gKnN0
b3JhZ2UoaSk7IH0KKyAgICBTdHJ1Y3RGaWVsZCogc3RvcmFnZShTdHJ1Y3RGaWVsZENvdW50IGkp
IHsgcmV0dXJuIGkgKyByZWludGVycHJldF9jYXN0PFN0cnVjdEZpZWxkKj4oY29uc3RfY2FzdDxj
aGFyKj4obV9wYXlsb2FkKSk7IH0KKyAgICBTdHJ1Y3RGaWVsZCogc3RvcmFnZShTdHJ1Y3RGaWVs
ZENvdW50IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RydWN0VHlwZSo+KHRoaXMpLT5z
dG9yYWdlKGkpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgY2hhciogbV9wYXlsb2FkOworICAg
IFN0cnVjdEZpZWxkQ291bnQgbV9maWVsZENvdW50OworfTsKKworY2xhc3MgVHlwZURlZmluaXRp
b24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VHlwZURlZmluaXRpb24+IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworICAgIFR5cGVEZWZpbml0aW9uKCkgPSBkZWxldGU7
CisgICAgVHlwZURlZmluaXRpb24oY29uc3QgVHlwZURlZmluaXRpb24mKSA9IGRlbGV0ZTsKKwor
ICAgIFR5cGVEZWZpbml0aW9uKEZ1bmN0aW9uQXJnQ291bnQgcmV0Q291bnQsIEZ1bmN0aW9uQXJn
Q291bnQgYXJnQ291bnQpCisgICAgICAgIDogbV90eXBlSGVhZGVyIHsgRnVuY3Rpb25TaWduYXR1
cmUgeyBwYXlsb2FkKCksIGFyZ0NvdW50LCByZXRDb3VudCB9IH0KKyAgICB7CisgICAgfQorCisg
ICAgVHlwZURlZmluaXRpb24oU3RydWN0RmllbGRDb3VudCBmaWVsZENvdW50KQorICAgICAgICA6
IG1fdHlwZUhlYWRlciB7IFN0cnVjdFR5cGUgeyBwYXlsb2FkKCksIGZpZWxkQ291bnQgfSB9Cisg
ICAgeworICAgIH0KKworICAgIGNoYXIqIHBheWxvYWQoKSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PGNoYXIqPih0aGlzKSArIHNpemVvZihUeXBlRGVmaW5pdGlvbik7IH0KKyAgICBzdGF0aWMg
c2l6ZV90IGFsbG9jYXRlZEZ1bmN0aW9uU2l6ZShDaGVja2VkPEZ1bmN0aW9uQXJnQ291bnQ+IHJl
dENvdW50LCBDaGVja2VkPEZ1bmN0aW9uQXJnQ291bnQ+IGFyZ0NvdW50KSB7IHJldHVybiBzaXpl
b2YoVHlwZURlZmluaXRpb24pICsgKHJldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9mKFR5cGUp
OyB9CisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0ZWRTdHJ1Y3RTaXplKENoZWNrZWQ8U3RydWN0
RmllbGRDb3VudD4gZmllbGRDb3VudCkgeyByZXR1cm4gc2l6ZW9mKFR5cGVEZWZpbml0aW9uKSAr
IGZpZWxkQ291bnQgKiBzaXplb2YoU3RydWN0RmllbGQpOyB9CisKK3B1YmxpYzoKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIGlzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxUPihtX3R5cGVIZWFkZXIpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KKyAgICBUKiBhcygpIHsgQVNTRVJUKGlzPFQ+KCkpOyByZXR1cm4gc3RkOjpnZXRfaWY8
VD4oJm1fdHlwZUhlYWRlcik7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNv
bnN0IFQqIGFzKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxUeXBlRGVmaW5pdGlvbio+KHRo
aXMpLT5hczxUPigpOyB9CisKKyAgICBUeXBlSW5kZXggaW5kZXgoKSBjb25zdCB7IHJldHVybiBi
aXR3aXNlX2Nhc3Q8VHlwZUluZGV4Pih0aGlzKTsgfQorCisgICAgV1RGOjpTdHJpbmcgdG9TdHJp
bmcoKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHlwZURlZmluaXRpb24mIHJocykgY29uc3QgeyBy
ZXR1cm4gdGhpcyA9PSAmcmhzOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworCisgICAg
Ly8gVHlwZSBkZWZpbml0aW9ucyBhcmUgdW5pcXVlZCBhbmQsIGZvciBjYWxsX2luZGlyZWN0LCB2
YWxpZGF0ZWQgYXQgcnVudGltZS4gVGFibGVzIGNhbiBjcmVhdGUgaW52YWxpZCBUeXBlSW5kZXgg
dmFsdWVzIHdoaWNoIGNhdXNlIGNhbGxfaW5kaXJlY3QgdG8gZmFpbC4gV2UgdXNlIDAgYXMgdGhl
IGludmFsaWRJbmRleCBzbyB0aGF0IHRoZSBjb2RlZ2VuIGNhbiBlYXNpbHkgdGVzdCBmb3IgaXQg
YW5kIHRyYXAsIGFuZCB3ZSBhZGQgYSB0b2tlbiBpbnZhbGlkIGVudHJ5IGluIFR5cGVJbmZvcm1h
dGlvbi4KKyAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIFR5cGVJbmRleCBpbnZhbGlkSW5kZXgg
PSAwOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBUeXBlSW5mb3JtYXRpb247CisgICAg
ZnJpZW5kIHN0cnVjdCBGdW5jdGlvblBhcmFtZXRlclR5cGVzOworICAgIGZyaWVuZCBzdHJ1Y3Qg
U3RydWN0UGFyYW1ldGVyVHlwZXM7CisKKyAgICBzdGF0aWMgUmVmUHRyPFR5cGVEZWZpbml0aW9u
PiB0cnlDcmVhdGVGdW5jdGlvblNpZ25hdHVyZShGdW5jdGlvbkFyZ0NvdW50IHJldHVybkNvdW50
LCBGdW5jdGlvbkFyZ0NvdW50IGFyZ3VtZW50Q291bnQpOworICAgIHN0YXRpYyBSZWZQdHI8VHlw
ZURlZmluaXRpb24+IHRyeUNyZWF0ZVN0cnVjdFR5cGUoU3RydWN0RmllbGRDb3VudCk7CisKKyAg
ICBzdGQ6OnZhcmlhbnQ8RnVuY3Rpb25TaWduYXR1cmUsIFN0cnVjdFR5cGU+IG1fdHlwZUhlYWRl
cjsKKyAgICAvLyBQYXlsb2FkIGlzIHN0b3JlZCBoZXJlLgorfTsKKworc3RydWN0IFR5cGVIYXNo
IHsKKyAgICBSZWZQdHI8VHlwZURlZmluaXRpb24+IGtleSB7IG51bGxwdHIgfTsKKyAgICBUeXBl
SGFzaCgpID0gZGVmYXVsdDsKKyAgICBleHBsaWNpdCBUeXBlSGFzaChSZWY8VHlwZURlZmluaXRp
b24+JiYga2V5KQorICAgICAgICA6IGtleShXVEZNb3ZlKGtleSkpCisgICAgeyB9CisgICAgZXhw
bGljaXQgVHlwZUhhc2goV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6
IGtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7IH0KKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVHlwZUhhc2gmIHJocykgY29uc3QgeyByZXR1cm4gZXF1YWwoKnRoaXMsIHJo
cyk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUeXBlSGFzaCYgbGhzLCBjb25zdCBU
eXBlSGFzaCYgcmhzKSB7IHJldHVybiBsaHMua2V5ID09IHJocy5rZXk7IH0KKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBUeXBlSGFzaCYgdHlwZUhhc2gpIHsgcmV0dXJuIHR5cGVIYXNo
LmtleSA/IHR5cGVIYXNoLmtleS0+aGFzaCgpIDogMDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBrZXkuaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKTsgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpXYXNtOjpUeXBlSGFzaD4gOiBKU0M6
Oldhc206OlR5cGVIYXNoIHsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hU
cmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6V2FzbTo6VHlwZUhhc2g+
IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6V2FzbTo6VHlwZUhhc2g+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCisvLyBU
eXBlIGluZm9ybWF0aW9uIGlzIGhlbGQgZ2xvYmFsbHkgYW5kIHNoYXJlZCBieSB0aGUgZW50aXJl
IHByb2Nlc3MgdG8gYWxsb3cgYWxsIHR5cGUgZGVmaW5pdGlvbnMgdG8gYmUgdW5pcXVlLiBUaGlz
IGlzIHJlcXVpcmVkIHdoZW4gd2FzbSBjYWxscyBhbm90aGVyIHdhc20gaW5zdGFuY2UsIGFuZCBt
dXN0IHdvcmsgd2hlbiBtb2R1bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBWTXMuCitj
bGFzcyBUeXBlSW5mb3JtYXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFR5cGVJbmZv
cm1hdGlvbik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyAgICBUeXBlSW5mb3Jt
YXRpb24oKTsKKworcHVibGljOgorICAgIHN0YXRpYyBUeXBlSW5mb3JtYXRpb24mIHNpbmdsZXRv
bigpOworCisgICAgc3RhdGljIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4gdHlwZURlZmluaXRpb25G
b3JGdW5jdGlvbihjb25zdCBWZWN0b3I8VHlwZSwgMT4mIHJldHVyblR5cGVzLCBjb25zdCBWZWN0
b3I8VHlwZT4mIGFyZ3VtZW50VHlwZXMpOworICAgIHN0YXRpYyBSZWZQdHI8VHlwZURlZmluaXRp
b24+IHR5cGVEZWZpbml0aW9uRm9yU3RydWN0KGNvbnN0IFZlY3RvcjxTdHJ1Y3RGaWVsZD4mIGZp
ZWxkcyk7CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUeXBlRGVmaW5pdGlvbiogdGh1bmtGb3Io
VHlwZSB0eXBlKSBjb25zdCB7IHJldHVybiB0aHVua1R5cGVzW2xpbmVhcml6ZVR5cGUodHlwZS5r
aW5kKV07IH0KKworICAgIHN0YXRpYyBjb25zdCBUeXBlRGVmaW5pdGlvbiYgZ2V0KFR5cGVJbmRl
eCk7CisgICAgc3RhdGljIFR5cGVJbmRleCBnZXQoY29uc3QgVHlwZURlZmluaXRpb24mKTsKKwor
ICAgIHN0YXRpYyBUeXBlSW5kZXggZ2V0KGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlJik7CisgICAg
c3RhdGljIGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlJiBnZXRGdW5jdGlvblNpZ25hdHVyZShUeXBl
SW5kZXgpOworCisgICAgc3RhdGljIHZvaWQgdHJ5Q2xlYW51cCgpOworcHJpdmF0ZToKKyAgICBI
YXNoU2V0PFdhc206OlR5cGVIYXNoPiBtX3R5cGVTZXQ7CisgICAgY29uc3QgVHlwZURlZmluaXRp
b24qIHRodW5rVHlwZXNbbnVtVHlwZXNdOworICAgIExvY2sgbV9sb2NrOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVmaW5pdGlvbklu
bGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVmaW5pdGlvbklu
bGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MGU3NmE0ZDFlZWFiNzY2MTIxNDBmOTY3YThjZmExYTIwZWY0
Y2I0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVR5
cGVEZWZpbml0aW9uSW5saW5lcy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+Lgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlv
bi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitpbmxpbmUgVHlwZUlu
Zm9ybWF0aW9uJiBUeXBlSW5mb3JtYXRpb246OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIFR5
cGVJbmZvcm1hdGlvbiogdGhlT25lOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyB0eXBlSW5m
b3JtYXRpb25GbGFnOworCisgICAgc3RkOjpjYWxsX29uY2UodHlwZUluZm9ybWF0aW9uRmxhZywg
W10gKCkgeworICAgICAgICB0aGVPbmUgPSBuZXcgVHlwZUluZm9ybWF0aW9uOworICAgIH0pOwor
ICAgIHJldHVybiAqdGhlT25lOworfQorCitpbmxpbmUgY29uc3QgVHlwZURlZmluaXRpb24mIFR5
cGVJbmZvcm1hdGlvbjo6Z2V0KFR5cGVJbmRleCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXgg
IT0gVHlwZURlZmluaXRpb246OmludmFsaWRJbmRleCk7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nh
c3Q8Y29uc3QgVHlwZURlZmluaXRpb24qPihpbmRleCk7Cit9CisKK2lubGluZSBjb25zdCBGdW5j
dGlvblNpZ25hdHVyZSYgVHlwZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZShUeXBl
SW5kZXggaW5kZXgpCit7CisgICAgcmV0dXJuICpnZXQoaW5kZXgpLmFzPEZ1bmN0aW9uU2lnbmF0
dXJlPigpOworfQorCitpbmxpbmUgVHlwZUluZGV4IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KGNvbnN0
IFR5cGVEZWZpbml0aW9uJiB0eXBlKQoreworICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAg
ICAgICBUeXBlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24oKTsKKyAgICAgICAgTG9ja2Vy
IGxvY2tlciB7IGluZm8ubV9sb2NrIH07CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5mbywgaW5m
by5tX3R5cGVTZXQuY29udGFpbnMoVHlwZUhhc2ggeyBjb25zdF9jYXN0PFR5cGVEZWZpbml0aW9u
Jj4odHlwZSkgfSkpOworICAgIH0KKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFR5cGVJbmRleD4o
JnR5cGUpOworfQorCitpbmxpbmUgVHlwZUluZGV4IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KGNvbnN0
IEZ1bmN0aW9uU2lnbmF0dXJlJiBmdW5jdGlvblR5cGUpCit7CisgICAgcmV0dXJuIGdldCgqcmVp
bnRlcnByZXRfY2FzdDxUeXBlRGVmaW5pdGlvbio+KGNvbnN0X2Nhc3Q8Y2hhcio+KGZ1bmN0aW9u
VHlwZS5tX3BheWxvYWQpIC0gc2l6ZW9mKFR5cGVEZWZpbml0aW9uKSkpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVy
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVyLnB5
CmluZGV4IDY1NzZhNjljNTY4MzUzYWI2NzdiOGUxYjRjODQxNDZhNzRjMDM1ZmYuLjg2YTVjYmZl
N2MzMzMxYmExYzk1MzE3NGY2YzU4YWJlZWI4YzdhZDkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKQEAgLTIxOCwxMiArMjE4
LDEyIEBAIGVudW0gY2xhc3MgTnVsbGFibGUgOiBib29sIHsKICAgWWVzID0gdHJ1ZSwKIH07CiAK
LXVzaW5nIFNpZ25hdHVyZUluZGV4ID0gdWludHB0cl90OwordXNpbmcgVHlwZUluZGV4ID0gdWlu
dHB0cl90OwogCiBzdHJ1Y3QgVHlwZSB7CiAgICAgVHlwZUtpbmQga2luZDsKICAgICBOdWxsYWJs
ZSBudWxsYWJsZTsKLSAgICBTaWduYXR1cmVJbmRleCBpbmRleDsKKyAgICBUeXBlSW5kZXggaW5k
ZXg7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHlwZSYgb3RoZXIpIGNvbnN0CiAgICAg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCmluZGV4IDFmNDY0
ZmU5OGJhZDgzNDQwNGQxMTAxODlkZGNmOGYyNTQ0M2JkM2EuLjRmNDU1Y2M0N2EwNDg2ZjVjOTVl
NGE2YzQwNTVjZDBjODUyMzgzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbS5jcHAKQEAgLTM4LDggKzM4LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKIAotdm9pZCBtYXJzaGFsbEpTUmVzdWx0KENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgQ2FsbEluZm9ybWF0aW9uJiB3YXNtRnJhbWVD
b252ZW50aW9uLCBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgc2F2ZWRSZXN1bHRSZWdpc3Rl
cnMpCit2b2lkIG1hcnNoYWxsSlNSZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFR5cGVE
ZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiwgY29uc3QgQ2FsbEluZm9ybWF0aW9uJiB3YXNtRnJh
bWVDb252ZW50aW9uLCBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgc2F2ZWRSZXN1bHRSZWdp
c3RlcnMpCiB7CisgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gKnR5cGVEZWZpbml0aW9uLmFz
PEZ1bmN0aW9uU2lnbmF0dXJlPigpOwogICAgIGF1dG8gYm94V2FzbVJlc3VsdCA9IFtdKENDYWxs
SGVscGVycyYgaml0LCBUeXBlIHR5cGUsIFJlZyBzcmMsIEpTVmFsdWVSZWdzIGRzdCkgewogICAg
ICAgICBzd2l0Y2ggKHR5cGUua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpWb2lkOgpA
QCAtMTY0LDEyICsxNjUsMTIgQEAgdm9pZCBtYXJzaGFsbEpTUmVzdWx0KENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgQ2FsbEkKICAgICAgICAgICAg
IGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZSh3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25B
bGxvY2F0ZVJlc3VsdHNBcnJheSk+KHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigmc2lnbmF0dXJlKSwgaW5kZXhpbmdUeXBlLCBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5KT4od2FzbUNvbnRleHRJbnN0YW5jZUdQ
UiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ0eXBlRGVmaW5pdGlvbiksIGluZGV4aW5n
VHlwZSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGppdC5j
YWxsT3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQWxsb2Nh
dGVSZXN1bHRzQXJyYXkpKTsKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5
TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQorc3RkOjp1bmlxdWVfcHRyPEludGVy
bmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgVHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQogewogICAg
IGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogICAgIGppdC5l
bWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwpAQCAtMTk3LDcgKzE5OCw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0CiAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBy
ZWdpc3RlcnNUb1NwaWxsOwogCiAgICAgc2l6ZV90IHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJz
VG9TcGlsbC5zaXplKCkgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpOwotICAgIENhbGxJbmZvcm1hdGlv
biB3YXNtRnJhbWVDb252ZW50aW9uID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9y
bWF0aW9uRm9yKHNpZ25hdHVyZSk7CisgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21GcmFtZUNvbnZl
bnRpb24gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IodHlwZURl
ZmluaXRpb24pOwogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHNhdmVkUmVzdWx0UmVnaXN0ZXJz
ID0gd2FzbUZyYW1lQ29udmVudGlvbi5jb21wdXRlUmVzdWx0c09mZnNldExpc3QoKTsKICAgICB0
b3RhbEZyYW1lU2l6ZSArPSB3YXNtRnJhbWVDb252ZW50aW9uLmhlYWRlckFuZEFyZ3VtZW50U3Rh
Y2tTaXplSW5CeXRlczsKICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzYXZlZFJlc3VsdFJlZ2lzdGVy
cy5zaXplKCkgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpOwpAQCAtMjE4LDcgKzIxOSw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0CiAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBw
aW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwogCiAgICAgewotICAgICAgICBD
YWxsSW5mb3JtYXRpb24ganNGcmFtZUNvbnZlbnRpb24gPSBqc0NhbGxpbmdDb252ZW50aW9uKCku
Y2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7CisgICAgICAg
IENhbGxJbmZvcm1hdGlvbiBqc0ZyYW1lQ29udmVudGlvbiA9IGpzQ2FsbGluZ0NvbnZlbnRpb24o
KS5jYWxsSW5mb3JtYXRpb25Gb3IodHlwZURlZmluaXRpb24sIENhbGxSb2xlOjpDYWxsZWUpOwog
CiAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVy
czo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIDApOwogCkBA
IC0yMzEsMTAgKzIzMiwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3Jl
YXRlSlNUb1dhc21XcmFwcGVyKENDYWxsSGVscGVycyYgaml0LCBjb25zdAogICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0SW5zdGFuY2VHUFIs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSwgd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUik7CiAgICAgICAgIH0KIAorICAgICAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUg
PSAqdHlwZURlZmluaXRpb24uYXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGpzRnJhbWVDb252ZW50aW9uLnBhcmFtc1tpXS5pc1N0
YWNrKCkpOwogCi0gICAgICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7
CisgICAgICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpOwogICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGpzUGFyYW0oR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGpzRnJhbWVDb252ZW50aW9uLnBhcmFtc1tpXS5vZmZzZXRGcm9tRlAoKSk7CiAg
ICAgICAgICAgICBpZiAod2FzbUZyYW1lQ29udmVudGlvbi5wYXJhbXNbaV0uaXNTdGFja0FyZ3Vt
ZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodHlwZS5pc0kzMigpIHx8IHR5cGUuaXNGMzIo
KSkgewpAQCAtMjgyLDcgKzI4NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9u
PiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0CiAgICAgICAg
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZO
ZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4U3BhY2UgfSk7CiAg
ICAgfSk7CiAKLSAgICBtYXJzaGFsbEpTUmVzdWx0KGppdCwgc2lnbmF0dXJlLCB3YXNtRnJhbWVD
b252ZW50aW9uLCBzYXZlZFJlc3VsdFJlZ2lzdGVycyk7CisgICAgbWFyc2hhbGxKU1Jlc3VsdChq
aXQsIHR5cGVEZWZpbml0aW9uLCB3YXNtRnJhbWVDb252ZW50aW9uLCBzYXZlZFJlc3VsdFJlZ2lz
dGVycyk7CiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDog
cmVnaXN0ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVn
KCkuZ3ByKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaAppbmRleCBl
ZDY0ZWM5ZDAxMDA1YjQ1ZDcwM2E2MDE1YWJlODc1ZjQ1NzM5YTQ5Li42YzZlYjJjNDEyNDdiMDU0
MWIyZGY3MzBiODBkOGJlZWJmNTQzOWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1RvV2FzbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTVG9XYXNtLmgKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAj
aW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5o
IgotI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRp
b24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQz
LDggKzQzLDggQEAgbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgQ2FsbEluZm9ybWF0aW9uOwog
Ci12b2lkIG1hcnNoYWxsSlNSZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFNpZ25hdHVy
ZSYsIGNvbnN0IENhbGxJbmZvcm1hdGlvbiYgd2FzbUZyYW1lQ29udmVudGlvbiwgY29uc3QgUmVn
aXN0ZXJBdE9mZnNldExpc3QmIHNhdmVkUmVzdWx0UmVnaXN0ZXJzKTsKLXN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiwg
Y29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KTsK
K3ZvaWQgbWFyc2hhbGxKU1Jlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgVHlwZURlZmlu
aXRpb24mLCBjb25zdCBDYWxsSW5mb3JtYXRpb24mIHdhc21GcmFtZUNvbnZlbnRpb24sIGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBzYXZlZFJlc3VsdFJlZ2lzdGVycyk7CitzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENDYWxsSGVscGVy
cyYsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlv
bkluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcApp
bmRleCAwMmY4YmIwZDhjYzVkODQ2YWFhZTBkMTkxYjNhMzUwMTQyODVjZWJkLi4yNmE3N2U1Njgx
NWY4YWY0ZDI4MWZjMjVlMDVmZmY4MjM1YzZiMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcApAQCAtNTgs
OSArNTgsOSBAQCB2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5JbXBs
KEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KGNlbGwsIHZpc2l0b3IpOwogCiAgICAgYXV0byogZXhjZXB0aW9uID0ganNDYXN0PEpTV2ViQXNz
ZW1ibHlFeGNlcHRpb24qPihjZWxsKTsKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25h
dHVyZSA9IGV4Y2VwdGlvbi0+dGFnKCkuc2lnbmF0dXJlKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAgICBpZiAo
aXNSZWZUeXBlKHNpZ25hdHVyZS5hcmd1bWVudChpKSkpCisgICAgY29uc3QgYXV0byYgdGFnVHlw
ZSA9IGV4Y2VwdGlvbi0+dGFnKCkudHlwZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0YWdUeXBlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChpc1JlZlR5cGUo
dGFnVHlwZS5hcmd1bWVudFR5cGUoaSkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPj4oZXhjZXB0aW9uLT5wYXlsb2FkKClbaV0p
KTsKICAgICB9CiB9CkBAIC03NCw5ICs3NCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIEpTVmFsdWUgSlNXZWJBc3NlbWJseUV4Y2VwdGlv
bjo6Z2V0QXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpIGNvbnN0
CiB7Ci0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSB0YWcoKS5zaWduYXR1
cmUoKTsKLSAgICBBU1NFUlQoaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOwotICAgIHJl
dHVybiB0b0pTVmFsdWUoZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnQoaSksIHBheWxv
YWQoKVtpXSk7CisgICAgQVNTRVJUKGkgPCB0YWcoKS50eXBlKCkuYXJndW1lbnRDb3VudCgpKTsK
KyAgICByZXR1cm4gdG9KU1ZhbHVlKGdsb2JhbE9iamVjdCwgdGFnKCkudHlwZSgpLmFyZ3VtZW50
VHlwZShpKSwgcGF5bG9hZCgpW2ldKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFsLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3Bw
CmluZGV4IGI4NTJiNzFjY2JmZGY1ZGVmYmVjYjFlZjJhYmZlMDYwMzRkOTU3YTAuLmI1ZWIwZTIz
MGMxNjM4OTI5YjI2ZWMyMjZjNjQxMjAyOGVlY2ZlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCkBAIC04OCw3ICs4
OCw3IEBAIEpTT2JqZWN0KiBKU1dlYkFzc2VtYmx5R2xvYmFsOjp0eXBlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAyKTsK
IAotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
bXV0YWJsZSJfcyksIGpzQm9vbGVhbihtX2dsb2JhbC0+bXV0YWJpbGl0eSgpID09IFdhc206Okds
b2JhbEluZm9ybWF0aW9uOjpNdXRhYmxlKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtdXRhYmxlIl9zKSwganNCb29sZWFuKG1fZ2xvYmFs
LT5tdXRhYmlsaXR5KCkgPT0gV2FzbTo6TXV0YWJsZSkpOwogCiAgICAgV2FzbTo6VHlwZSB2YWx1
ZVR5cGUgPSBtX2dsb2JhbC0+dHlwZSgpOwogICAgIEpTU3RyaW5nKiB2YWx1ZVN0cmluZyA9IG51
bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUhlbHBlcnMuaAppbmRleCA4N2U1MGI0NTM1ZmU0NTEzYzgyZGJhZDdmMTMzZjIwZmRlODAw
MjlhLi5iMGJlMmRlYTllODIwNzU5YjU4ZGFhOWRlMzk2NDRkNTMyMjM0YzAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJzLmgK
QEAgLTE5OCw4ICsxOTgsOCBAQCBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGZyb21KU1ZhbHVlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdhc206OlR5cAogICAgICAgICAgICAg
aWYgKCFpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCB2YWx1ZSwgd2FzbUZ1bmN0aW9uLCB3
YXNtV3JhcHBlckZ1bmN0aW9uKSAmJiAoIXR5cGUuaXNOdWxsYWJsZSgpIHx8ICF2YWx1ZS5pc051
bGwoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24oZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3Qs
IHZtLCAiRnVuY3JlZiBtdXN0IGJlIGFuIGV4cG9ydGVkIHdhc20gZnVuY3Rpb24iX3MpKTsKICAg
ICAgICAgICAgIGlmIChpc1JlZldpdGhUeXBlSW5kZXgodHlwZSkgJiYgIXZhbHVlLmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IHR5
cGUuaW5kZXg7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggYXJnSW5kZXgg
PSB3YXNtRnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCkgOiB3YXNtV3Jh
cHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgIFdhc206OlR5
cGVJbmRleCBwYXJhbUluZGV4ID0gdHlwZS5pbmRleDsKKyAgICAgICAgICAgICAgICBXYXNtOjpU
eXBlSW5kZXggYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24tPnR5cGVJbmRl
eCgpIDogd2FzbVdyYXBwZXJGdW5jdGlvbi0+dHlwZUluZGV4KCk7CiAgICAgICAgICAgICAgICAg
aWYgKHBhcmFtSW5kZXggIT0gYXJnSW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1ibHlS
dW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3Qg
bWF0Y2ggdGhlIHJlZmVyZW5jZSB0eXBlIl9zKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCmlu
ZGV4IGJjNDRhMTJhNmUwMDM3MzM2Mjg3MGMzMzc4ODFkM2E5ZjJlMTBiOTguLjcyYzZjNGQyOTI1
MDhjNGJjOGZiMmFkOGY5MzJlODI4MzA0ZjAxYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC0xMDAsNyArMTAw
LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB2
b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0
YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseU1vZHVs
ZTo6fkpTV2ViQXNzZW1ibHlNb2R1bGUoKTsKLSAgICBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlv
bjo6dHJ5Q2xlYW51cCgpOworICAgIFdhc206OlR5cGVJbmZvcm1hdGlvbjo6dHJ5Q2xlYW51cCgp
OwogfQogCiBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgSlNXZWJBc3NlbWJseU1vZHVs
ZTo6bW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdApAQCAtMTEzLDkgKzExMyw5IEBAIFN5bWJvbFRh
YmxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUuZ2V0KCk7CiB9CiAKLVdhc206OlNpZ25hdHVyZUlu
ZGV4IEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0CitXYXNtOjpUeXBlSW5kZXgg
SlNXZWJBc3NlbWJseU1vZHVsZTo6dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNp
Z25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbW9kdWxlLT5z
aWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsK
KyAgICByZXR1cm4gbV9tb2R1bGUtPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVu
Y3Rpb25JbmRleFNwYWNlKTsKIH0KIAogV2FzbTo6TW9kdWxlJiBKU1dlYkFzc2VtYmx5TW9kdWxl
Ojptb2R1bGUoKQpAQCAtMTU0LDggKzE1NCw4IEBAIEV4cGVjdGVkPHZvaWQsIFdhc206OkJpbmRp
bmdGYWlsdXJlPiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpnZW5lcmF0ZVdhc21Ub0pTU3R1YnMoCiAg
ICAgICAgIEJhZzxPcHRpbWl6aW5nQ2FsbExpbmtJbmZvPiBjYWxsTGlua0luZm9zOwogICAgICAg
ICBGaXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4gc3R1
YnMobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbW9kdWxlSW5mb3JtYXRp
b24uaW1wb3J0RnVuY3Rpb25Db3VudCgpOyArK2ltcG9ydEluZGV4KSB7Ci0gICAgICAgICAgICBX
YXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmlt
cG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5hdChpbXBvcnRJbmRleCk7Ci0gICAgICAgICAg
ICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9KUyh2bSwgY2FsbExpbmtJbmZvcywgc2lnbmF0
dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKKyAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCB0eXBl
SW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzLmF0KGlt
cG9ydEluZGV4KTsKKyAgICAgICAgICAgIGF1dG8gYmluZGluZyA9IFdhc206Ondhc21Ub0pTKHZt
LCBjYWxsTGlua0luZm9zLCB0eXBlSW5kZXgsIGltcG9ydEluZGV4KTsKICAgICAgICAgICAgIGlm
IChVTkxJS0VMWSghYmluZGluZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGJpbmRpbmcuZXJyb3IoKSk7CiAgICAgICAgICAgICBzdHVic1tpbXBvcnRJbmRleF0gPSBi
aW5kaW5nLnZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggYmQ1MWFiZWFiMGIxZDUxMjYxMGVhMTgyMWUyMzFj
MTk5NzU2Nzg2Ny4uMTY4YmI5YzE4ZmI0ODQyMjQyYzQxN2ZjNDI0ZmQ2NzMzZGUyNDU1NiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1
bGUuaApAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdDsKICAgICBTeW1ib2xUYWJsZSog
ZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdDsKLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNw
YWNlKSBjb25zdDsKKyAgICBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OwogCiAgICAgRXhwZWN0
ZWQ8dm9pZCwgV2FzbTo6QmluZGluZ0ZhaWx1cmU+IGdlbmVyYXRlV2FzbVRvSlNTdHVicyhWTSYp
OwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0VtYmVk
ZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG1fd2FzbVRvSlNFeGl0
U3R1YnNbaW1wb3J0RnVuY3Rpb25OdW1dLmNvZGUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCmluZGV4IGRjNGMwZjI2ZjczYzQ3MWVk
YWM5YTAyNWE2ZWE2MWQ1MmNiNTU2MzEuLjQ5MjUwNzI0YTZjMTBhYjFlOGIwMmI2MjFiZWMxYjM3
OTk2MzljZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlUYWcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5VGFnLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAg
ICBjb25zdCBXYXNtOjpUYWcmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9Ci0gICAgY29u
c3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiB0YWcoKS5zaWdu
YXR1cmUoKTsgfQorICAgIGNvbnN0IFdhc206OkZ1bmN0aW9uU2lnbmF0dXJlJiB0eXBlKCkgY29u
c3QgeyByZXR1cm4gdGFnKCkudHlwZSgpOyB9CiAKIHByaXZhdGU6CiAgICAgSlNXZWJBc3NlbWJs
eVRhZyhWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCmluZGV4IDdiMDE0OGI5MWRjNTg0MDc5OWUwYmU1
NWRlZTFiM2FhNzkyNzU0Y2YuLjJiZTBmM2NmZWJmNzZkNWVlNTUzZjZlNjY0ZThhYzFhYWY1Y2Qw
ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKQEAgLTM3
LDcgKzM3LDcgQEAKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgIldh
c21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiV2Fz
bVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVz
LmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uVHJhaXRzLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CkBAIC01MSwxNyArNTEsMTggQEAgc3RhdGljIHZvaWQgbWF0ZXJpYWxp
emVJbXBvcnRKU0NlbGwoSklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJSZWcgcmVz
dWwKICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MocmVzdWx0LCBJbnN0YW5jZTo6b2Zmc2V0
T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOwogfQogCi1FeHBlY3RlZDxN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdh
c21Ub0pTKFZNJiB2bSwgQmFnPE9wdGltaXppbmdDYWxsTGlua0luZm8+JiBjYWxsTGlua0luZm9z
LCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCitF
eHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub0pTKFZNJiB2bSwgQmFnPE9wdGltaXppbmdDYWxsTGlua0luZm8+JiBjYWxs
TGlua0luZm9zLCBUeXBlSW5kZXggdHlwZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHByb3Blcmx5IGFic3RyYWN0IGF3
YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KICAgICAvLyBJdCdkIGJlIHN1cGVyIGVhc3kgdG8g
ZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDEKICAg
ICBjb25zdCBhdXRvJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKICAgICBjb25z
dCBhdXRvJiBqc0NDID0ganNDYWxsaW5nQ29udmVudGlvbigpOwotICAgIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
CisgICAgY29uc3QgVHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uID0gVHlwZUluZm9ybWF0
aW9uOjpnZXQodHlwZUluZGV4KTsKKyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSAqdHlwZURl
ZmluaXRpb24uYXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAgdW5zaWduZWQgYXJnQ291bnQg
PSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOwogICAgIEpJVCBqaXQ7CiAKLSAgICBDYWxsSW5m
b3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNDLmNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1
cmUsIENhbGxSb2xlOjpDYWxsZWUpOworICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbEluZm8g
PSB3YXNtQ0MuY2FsbEluZm9ybWF0aW9uRm9yKHR5cGVEZWZpbml0aW9uLCBDYWxsUm9sZTo6Q2Fs
bGVlKTsKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBzYXZlZFJlc3VsdFJlZ2lzdGVycyA9IHdh
c21DYWxsSW5mby5jb21wdXRlUmVzdWx0c09mZnNldExpc3QoKTsKIAogICAgIC8vIE5vdGU6IFdh
c21CM0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEgY2Fs
bGVlIHNhdmUuCkBAIC05MSw3ICs5Miw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZtCiAgICAg
aml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwgTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBKSVQ6OkFkZHJlc3MgY2Fs
bGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKTsKIAotICAgIC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9u
IFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCds
bCBvdGhlcndpc2UgYmUgaHVnZSBmb3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3CisgICAgLy8gRklYTUUgbWFrZSB0aGVzZSBs
b29wcyB3aGljaCBzd2l0Y2ggb24gc2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55IGFyZ3VtZW50
cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdlIHR5cGUgZGVm
aW5pdGlvbnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1NDcK
IAogICAgIC8vIEZpcnN0IGdvIHRocm91Z2ggdGhlIGludGVnZXIgcGFyYW1ldGVycywgZnJlZWlu
ZyB1cCB0aGVpciByZWdpc3RlciBmb3IgdXNlIGFmdGVyd2FyZHMuCiAgICAgewpAQCAtMTAwLDEw
ICsxMDEsMTEgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRh
Zz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgdW5zaWduZWQgY2Fs
bGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQgPSBD
YWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdD
b3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS5h
cmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLmFy
Z3VtZW50VHlwZShhcmdOdW0pOwogICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlLmtpbmQpIHsK
ICAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgICAgICBjYXNlIFR5cGVL
aW5kOjpGdW5jOgorICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0OgogICAgICAgICAg
ICAgY2FzZSBUeXBlS2luZDo6UmVmTnVsbDoKICAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlJl
ZjoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBIYW5k
bGVkIGFib3ZlLgpAQCAtMTc0LDEwICsxNzYsMTEgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0K
ICAgICAgICAgfTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8
IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0
dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1
cmUuYXJndW1lbnRUeXBlKGFyZ051bSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUua2lu
ZCkgewogICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6Vm9pZDoKICAgICAgICAgICAgIGNhc2Ug
VHlwZUtpbmQ6OkZ1bmM6CisgICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6CiAgICAg
ICAgICAgICBjYXNlIFR5cGVLaW5kOjpSZWZOdWxsOgogICAgICAgICAgICAgY2FzZSBUeXBlS2lu
ZDo6UmVmOgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8v
IEhhbmRsZWQgYWJvdmUuCkBAIC0yMzAsNyArMjMzLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYg
dm0KICAgICAgICAgLy8gV2UgY2FsbCBmdW5jdGlvbnMgdG8gY29udmVydCBJNjQgdG8gQmlnSW50
LgogICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZp
cnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051bSkg
ewotICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pLmlzSTY0KCkpIHsK
KyAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnRUeXBlKGFyZ051bSkuaXNJNjQoKSkg
ewogICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZvOjph
cmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoY2FsbGVlRnJhbWUud2l0
aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAg
ICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkNvbnZlcnRU
b0JpZ0ludCk+KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
QEAgLTM4MSw3ICszODQsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVu
dHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICAgICAg
aWYgKFdhc206OmlzRnVuY3JlZihyZXR1cm5UeXBlKSB8fCBXYXNtOjppc0V4dGVybnJlZihyZXR1
cm5UeXBlKSkKICAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uiwgd2FzbUNhbGxJbmZvLnJlc3VsdHNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIC8vIEZvciB0aGUgSmF2YVNjcmlwdCBlbWJlZGRpbmcsIGltcG9ydHMgd2l0
aCB0aGVzZSB0eXBlcyBpbiB0aGVpciBzaWduYXR1cmUgcmV0dXJuIGFyZSBhIFdlYkFzc2VtYmx5
Lk1vZHVsZSB2YWxpZGF0aW9uIGVycm9yLgorICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgSmF2
YVNjcmlwdCBlbWJlZGRpbmcsIGltcG9ydHMgd2l0aCB0aGVzZSB0eXBlcyBpbiB0aGVpciB0eXBl
IGRlZmluaXRpb24gcmV0dXJuIGFyZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSB2YWxpZGF0aW9uIGVy
cm9yLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMzkzLDcgKzM5Niw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0m
IHZtCiAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uod2FzbUNvbnRleHRJ
bnN0YW5jZUdQUik7CiAgICAgICAgIH0KIAotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpPih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCAm
c2lnbmF0dXJlLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25JdGVyYXRlUmVzdWx0cyk+
KHdhc21Db250ZXh0SW5zdGFuY2VHUFIsICZ0eXBlRGVmaW5pdGlvbiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICBqaXQuY2FsbE9wZXJhdGlvbihGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRzKSk7CiAgICAg
ICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24odm0pKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgKaW5kZXggMTk3YjgwN2Yx
YjUzMjVhYjI5ZjBkNTk2MGQ5NDI3MTAyYjE5MjNjNi4uYmQ1MmFmOGNkOGU0OWYyNjk2YWE1ZWU1
YjEwNDMwZTlhNGI0MWRjZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2FzbVRvSlMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9K
Uy5oCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgSW5zdGFuY2U7
CiAKLUV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5k
aW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mLCBCYWc8T3B0aW1pemluZ0NhbGxMaW5rSW5mbz4mIGNh
bGxMaW5rSW5mb3MsIFNpZ25hdHVyZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCk7CitFeHBl
Y3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1
cmU+IHdhc21Ub0pTKFZNJiwgQmFnPE9wdGltaXppbmdDYWxsTGlua0luZm8+JiBjYWxsTGlua0lu
Zm9zLCBUeXBlSW5kZXgsIHVuc2lnbmVkIGltcG9ydEluZGV4KTsKIAogdm9pZCBlbWl0VGhyb3dX
YXNtVG9KU0V4Y2VwdGlvbihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgd2FzbUluc3RhbmNlLCBXYXNt
OjpFeGNlcHRpb25UeXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAppbmRl
eCBmNGIxZTIzZjljYjk4YjI1MDgxYTY1MDBlMTAzMjQzMTMyOWU0YjdkLi43N2IyNmMxMjZmN2Fl
YjkxMDYyNDQxODdmMTg1NGJjNzFkMjA4Y2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVjdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4Y2VwdGlvbkNvbnN0cnVj
dG9yLmNwcApAQCAtNjYsMTMgKzY2LDE0IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjb25z
dHJ1Y3RKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAg
fSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIGlmICh2YWx1
ZXMuc2l6ZSgpICE9IHRhZy0+c2lnbmF0dXJlKCkuYXJndW1lbnRDb3VudCgpKQorICAgIGNvbnN0
IGF1dG8mIHRhZ0Z1bmN0aW9uVHlwZSA9IHRhZy0+dHlwZSgpOworICAgIGlmICh2YWx1ZXMuc2l6
ZSgpICE9IHRhZ0Z1bmN0aW9uVHlwZS5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJXZWJBc3NlbWJseS5FeGNlcHRp
b24gY29uc3RydWN0b3IgZXhwZWN0cyB0aGUgbnVtYmVyIG9mIHBhcmVtZXRlcnMgaW4gV2ViQXNz
ZW1ibHkuVGFnIHRvIG1hdGNoIHRoZSB0YWdzIHBhcmFtZXRlciBjb3VudC4iX3MpOwogCiAgICAg
Ly8gQW55IEdDJ2QgdmFsdWVzIGluIGhlcmUgd2lsbCBiZSBtYXJrZWQgYnkgdGhlIE1hcmtlZEFy
dWdlbWVudEJ1ZmZlciB1bnRpbCBzdG9yZWQgaW4gdGhlIEV4Y2VwdGlvbi4KICAgICBGaXhlZFZl
Y3Rvcjx1aW50NjRfdD4gcGF5bG9hZCh2YWx1ZXMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHBheWxvYWRbaV0gPSBm
cm9tSlNWYWx1ZShnbG9iYWxPYmplY3QsIHRhZy0+c2lnbmF0dXJlKCkuYXJndW1lbnQoaSksIHZh
bHVlcy5hdChpKSk7CisgICAgICAgIHBheWxvYWRbaV0gPSBmcm9tSlNWYWx1ZShnbG9iYWxPYmpl
Y3QsIHRhZ0Z1bmN0aW9uVHlwZS5hcmd1bWVudFR5cGUoaSksIHZhbHVlcy5hdChpKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmlu
ZGV4IDg4OTEyMDdkYzEyMDNiNTE5MTM2NDE1ZmQ0MDM4YzVmNzNiOTBjOTMuLmM0ZDJiOTZjMjkz
MDcxNTUxZjk2YjhmYTRkY2VhZjUwOTVhMDliOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCkBAIC00OCw3ICs0OCw3
IEBACiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1h
dGlvbi5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgotI2luY2x1ZGUgIldh
c21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5l
cy5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja1BvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3lzdGVt
VHJhY2luZy5oPgogCkBAIC02Myw4ICs2Myw4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihj
YWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24g
PSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7Ci0g
ICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSB3YXNtRnVuY3Rpb24tPnNp
Z25hdHVyZUluZGV4KCk7Ci0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBX
YXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICBXYXNt
OjpUeXBlSW5kZXggdHlwZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT50eXBlSW5kZXgoKTsKKyAgICBj
b25zdCBXYXNtOjpGdW5jdGlvblNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6VHlwZUluZm9y
bWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZSh0eXBlSW5kZXgpOwogCiAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIG1lbW9yeSB3ZSB0aGluayB3ZSBhcmUgZ29pbmcgdG8gcnVuIHdpdGggbWF0
Y2hlcyB0aGUgb25lIHdlIGV4cGVjdC4KICAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5j
ZSgpLT5pbnN0YW5jZSgpLmNhbGxlZUdyb3VwKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+
aW5zdGFuY2UoKS0+bWVtb3J5KCktPm1lbW9yeSgpLm1vZGUoKSkpOwpAQCAtNzgsNyArNzgsNyBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIFdhc206Okluc3RhbmNlKiB3YXNtSW5zdGFu
Y2UgPSAmaW5zdGFuY2UtPmluc3RhbmNlKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4
ID0gMDsgYXJnSW5kZXggPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2FyZ0luZGV4KSB7
Ci0gICAgICAgIHVpbnQ2NF90IHZhbHVlID0gZnJvbUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCBzaWdu
YXR1cmUuYXJndW1lbnQoYXJnSW5kZXgpLCBjYWxsRnJhbWUtPmFyZ3VtZW50KGFyZ0luZGV4KSk7
CisgICAgICAgIHVpbnQ2NF90IHZhbHVlID0gZnJvbUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCBzaWdu
YXR1cmUuYXJndW1lbnRUeXBlKGFyZ0luZGV4KSwgY2FsbEZyYW1lLT5hcmd1bWVudChhcmdJbmRl
eCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICAgICAgYm94ZWRBcmdzLmFwcGVuZChKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKICAg
ICB9CkBAIC0xMzIsNyArMTMyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJB
c3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKIAogYm9vbCBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjp1c2VzVGFnUmVnaXN0ZXJzKCkgY29uc3QKIHsKLSAgICBjb25z
dCBhdXRvJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KCkpOworICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IFdhc206OlR5cGVJbmZv
cm1hdGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1cmUodHlwZUluZGV4KCkpOwogICAgIHJldHVybiBz
aWduYXR1cmUuYXJndW1lbnRDb3VudCgpIHx8ICFzaWduYXR1cmUucmV0dXJuc1ZvaWQoKTsKIH0K
IApAQCAtMTgxLDE1ICsxODEsMTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAgICBWTSYg
dm0gPSB0aGlzLT52bSgpOwogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKLSAgICBjb25zdCBhdXRv
JiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUlu
ZGV4KCkpOworICAgIGNvbnN0IGF1dG8mIHR5cGVEZWZpbml0aW9uID0gV2FzbTo6VHlwZUluZm9y
bWF0aW9uOjpnZXQodHlwZUluZGV4KCkpOworICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9ICp0
eXBlRGVmaW5pdGlvbi5hczxXYXNtOjpGdW5jdGlvblNpZ25hdHVyZT4oKTsKICAgICBjb25zdCBh
dXRvJiBwaW5uZWRSZWdzID0gV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsID0gdXNlZENhbGxlZVNhdmVSZWdp
c3RlcnMoKTsKIAogICAgIGF1dG8mIG1vZHVsZUluZm9ybWF0aW9uID0gaW5zdGFuY2UoKS0+aW5z
dGFuY2UoKS5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpOwogCiAgICAgY29uc3QgV2FzbTo6
V2FzbUNhbGxpbmdDb252ZW50aW9uJiB3YXNtQ0MgPSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKTsKLSAgICBXYXNtOjpDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNDLmNh
bGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOwotICAgIFdhc206OkNhbGxJbmZvcm1hdGlvbiBq
c0NhbGxJbmZvID0gV2FzbTo6anNDYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZv
cihzaWduYXR1cmUsIFdhc206OkNhbGxSb2xlOjpDYWxsZWUpOworICAgIFdhc206OkNhbGxJbmZv
cm1hdGlvbiB3YXNtQ2FsbEluZm8gPSB3YXNtQ0MuY2FsbEluZm9ybWF0aW9uRm9yKHR5cGVEZWZp
bml0aW9uKTsKKyAgICBXYXNtOjpDYWxsSW5mb3JtYXRpb24ganNDYWxsSW5mbyA9IFdhc206Ompz
Q2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IodHlwZURlZmluaXRpb24sIFdh
c206OkNhbGxSb2xlOjpDYWxsZWUpOwogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHNhdmVkUmVz
dWx0UmVnaXN0ZXJzID0gd2FzbUNhbGxJbmZvLmNvbXB1dGVSZXN1bHRzT2Zmc2V0TGlzdCgpOwog
CiAgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAq
IHNpemVvZihDUFVSZWdpc3Rlcik7CkBAIC0yNDIsNyArMjQzLDcgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9p
bnRTbG93KCkKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGpzUGFyYW0oR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzQ2FsbEluZm8ucGFyYW1zW2ldLm9mZnNldEZyb21GUCgpKTsK
ICAgICAgICAgYm9vbCBpc1N0YWNrID0gd2FzbUNhbGxJbmZvLnBhcmFtc1tpXS5pc1N0YWNrQXJn
dW1lbnQoKTsKIAotICAgICAgICBhdXRvIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQoaSk7Cisg
ICAgICAgIGF1dG8gdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSk7CiAgICAgICAgIHN3
aXRjaCAodHlwZS5raW5kKSB7CiAgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OkkzMjogewog
ICAgICAgICAgICAgaml0LmxvYWQ2NChqc1BhcmFtLCBzY3JhdGNoR1BSKTsKQEAgLTMwNSw3ICsz
MDYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlG
dW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgICAgICAgICAgICAgIHNjcmF0Y2hG
UFIgPSB3YXNtQ2FsbEluZm8ucGFyYW1zW2ldLmZwcigpOwogICAgICAgICAgICAgYXV0byBtb3Zl
VG9EZXN0aW5hdGlvbiA9IFsmXSAoKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzU3RhY2spIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKS5pc0YzMigpKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKS5pc0YzMigp
KQogICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlRmxvYXQoc2NyYXRjaEZQUiwgY2Fs
bGVlRnJhbWUud2l0aE9mZnNldCh3YXNtQ2FsbEluZm8ucGFyYW1zW2ldLm9mZnNldEZyb21TUCgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZURvdWJsZShzY3JhdGNoRlBSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21DYWxs
SW5mby5wYXJhbXNbaV0ub2Zmc2V0RnJvbVNQKCkpKTsKQEAgLTMxNywxMyArMzE4LDEzIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpq
c0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBqaXQuYnJh
bmNoSWZJbnQzMihzY3JhdGNoR1BSKTsKIAogICAgICAgICAgICAgaml0LnVuYm94RG91YmxlKHNj
cmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgaWYgKHNpZ25h
dHVyZS5hcmd1bWVudChpKS5pc0YzMigpKQorICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1
bWVudFR5cGUoaSkuaXNGMzIoKSkKICAgICAgICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRv
RmxvYXQoc2NyYXRjaEZQUiwgc2NyYXRjaEZQUik7CiAgICAgICAgICAgICBtb3ZlVG9EZXN0aW5h
dGlvbigpOwogICAgICAgICAgICAgYXV0byBkb25lID0gaml0Lmp1bXAoKTsKIAogICAgICAgICAg
ICAgaXNJbnQzMi5saW5rKCZqaXQpOwotICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVu
dChpKS5pc0YzMigpKSB7CisgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShp
KS5pc0YzMigpKSB7CiAgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRmxvYXQoc2Ny
YXRjaEdQUiwgc2NyYXRjaEZQUik7CiAgICAgICAgICAgICAgICAgbW92ZVRvRGVzdGluYXRpb24o
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zOTIsNyArMzkzLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5
cG9pbnRTbG93KCkKICAgICBqaXQubG9hZFB0cihlbnRyeXBvaW50TG9hZExvY2F0aW9uKCksIHNj
cmF0Y2hHUFIpOwogICAgIGppdC5jYWxsKHNjcmF0Y2hHUFIsIFdhc21FbnRyeVB0clRhZyk7CiAK
LSAgICBtYXJzaGFsbEpTUmVzdWx0KGppdCwgc2lnbmF0dXJlLCB3YXNtQ2FsbEluZm8sIHNhdmVk
UmVzdWx0UmVnaXN0ZXJzKTsKKyAgICBtYXJzaGFsbEpTUmVzdWx0KGppdCwgdHlwZURlZmluaXRp
b24sIHdhc21DYWxsSW5mbywgc2F2ZWRSZXN1bHRSZWdpc3RlcnMpOwogCiAgICAgQVNTRVJUKCFS
ZWdpc3RlclNldDo6cnVudGltZVRhZ1JlZ2lzdGVycygpLmNvbnRhaW5zKEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vblJldHVybkdQUikpOwogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcHJldmlvdXNJbnN0YW5jZU9mZnNldCks
IEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CkBAIC00MzMsMTAgKzQzNCwxMCBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlv
bjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgIHJldHVybiBtX2pzQ2FsbEVudHJ5cG9pbnQu
Y29kZSgpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQor
V2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0
aW9uLCBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4KQogewogICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24s
IFdhc21GdW5jdGlvbkludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51
bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0pKSBXZWJBc3NlbWJs
eUZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRy
eXBvaW50LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgp
OworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0pKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZt
LCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNt
VG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgdHlwZUluZGV4KTsKICAgICBmdW5jdGlvbi0+
ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSwgaW5zdGFuY2UpOwog
ICAgIHJldHVybiBmdW5jdGlvbjsKIH0KQEAgLTQ0Nyw4ICs0NDgsOCBAQCBTdHJ1Y3R1cmUqIFdl
YkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0m
IHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQs
IFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9X
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXgpCi0gICAgOiBCYXNlIHsgdm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgs
IHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIH0gfQorV2ViQXNzZW1ibHlGdW5jdGlv
bjo6V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
YXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNt
OjpUeXBlSW5kZXggdHlwZUluZGV4KQorICAgIDogQmFzZSB7IHZtLCBleGVjdXRhYmxlLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiB7
IHR5cGVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gfSB9CiAgICAgLCBt
X2pzRW50cnlwb2ludCB7IGpzRW50cnlwb2ludC5lbnRyeXBvaW50KCkgfQogeyB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaApp
bmRleCA3Y2RmMmVmZDljNDRjYTJlMGJkZjUxOTQyODVkYTQ1MDU2NTBhYmY2Li42NjhmMTUyZTFi
MjFlODgwYTIwYWQ1NWI4MWYwM2FhN2I3MGE2YzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCkBAIC01Nyw3ICs1Nyw3IEBA
IHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246OkxvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uLCBXYXNtOjpUeXBlSW5kZXgpOwogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBqc0Vu
dHJ5cG9pbnQoQXJpdHlDaGVja01vZGUgYXJpdHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoK
IAogcHJpdmF0ZToKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwotICAgIFdlYkFzc2VtYmx5
RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVy
ZUluZGV4KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSos
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQs
IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9h
ZExvY2F0aW9uLCBXYXNtOjpUeXBlSW5kZXgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7CiAgICAgcHRyZGlmZl90IHBy
ZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCmluZGV4IGJhN2NiMTc2
NWEyNmUwYmYzZWEwN2ZkYmE4OTlmNzIxYWE4NzRkM2EuLjFiNzQ2MjM4MDJjYzc0OGYzNjA2MzEz
ZTdhZTAzZGZjY2QzOTc0ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaApAQCAtNDYsNyArNDYsNyBAQCBwdWJs
aWM6CiAKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQogCi0gICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbi5zaWduYXR1cmVJ
bmRleDsgfQorICAgIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2ltcG9ydGFibGVGdW5jdGlvbi50eXBlSW5kZXg7IH0KICAgICBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uLmVudHJ5cG9pbnRMb2FkTG9jYXRpb247IH0KICAg
ICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIGltcG9ydGFibGVGdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faW1wb3J0YWJsZUZ1bmN0aW9uOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rv
ci5jcHAKaW5kZXggMGVlNjg3YTNiMWNlYjFhNWI2NDQxZGM0Mjk2YzhiNjQxNmQxMmY4Yi4uYTg3
YTk5YjRiY2RkZTQyNTg1MmQ3OTVmOTBjMzFmNGU4ZWFiMGMzMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25zdHJ1Y3Rvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxDb25z
dHJ1Y3Rvci5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNv
bnN0cnVjdEpTV2ViQXNzZW1ibHlHbG9iYWwsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAg
ICAgICAgZ2xvYmFsRGVzY3JpcHRvciA9IGpzQ2FzdDxKU09iamVjdCo+KGFyZ3VtZW50KTsKICAg
ICB9CiAKLSAgICBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eSBtdXRhYmlsaXR5
OworICAgIFdhc206Ok11dGFiaWxpdHkgbXV0YWJpbGl0eTsKICAgICB7CiAgICAgICAgIElkZW50
aWZpZXIgbXV0YWJsZUlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm11dGFibGUi
X3MpOwogICAgICAgICBKU1ZhbHVlIG11dGFibGVWYWx1ZSA9IGdsb2JhbERlc2NyaXB0b3ItPmdl
dChnbG9iYWxPYmplY3QsIG11dGFibGVJZGVudCk7CkBAIC03NCw5ICs3NCw5IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5R2xvYmFsLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iCiAgICAgICAgIGJvb2wgbXV0YWJsZUJvb2xlYW4gPSBtdXRhYmxlVmFs
dWUudG9Cb29sZWFuKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIGlmIChtdXRhYmxlQm9vbGVh
bikKLSAgICAgICAgICAgIG11dGFiaWxpdHkgPSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0
YWJsZTsKKyAgICAgICAgICAgIG11dGFiaWxpdHkgPSBXYXNtOjpNdXRhYmxlOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtdXRhYmlsaXR5ID0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Oklt
bXV0YWJsZTsKKyAgICAgICAgICAgIG11dGFiaWxpdHkgPSBXYXNtOjpJbW11dGFibGU7CiAgICAg
fQogCiAgICAgV2FzbTo6VHlwZSB0eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCmluZGV4IGE1
YmRmOWI2MzYwMDU4ZTIxNDVmYzBhMjk3ZTYxYjgyZWZkY2I5NzQuLjA2YTQxYjk1OWVhMWI1YmJj
YTU5M2QxNmEyYTVjNjAwYmY2MjJjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5jcHAKQEAgLTEx
MSw3ICsxMTEsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04od2ViQXNzZW1ibHlHbG9iYWxQ
cm90b1NldHRlckZ1bmNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KgogICAgIEpTV2ViQXNzZW1ibHlH
bG9iYWwqIGdsb2JhbCA9IGdldEdsb2JhbChnbG9iYWxPYmplY3QsIHZtLCBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogCi0gICAgaWYgKGdsb2JhbC0+Z2xvYmFsKCktPm11dGFiaWxpdHkoKSA9PSBX
YXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6SW1tdXRhYmxlKQorICAgIGlmIChn
bG9iYWwtPmdsb2JhbCgpLT5tdXRhYmlsaXR5KCkgPT0gV2FzbTo6TXV0YWJpbGl0eTo6SW1tdXRh
YmxlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgIldlYkFz
c2VtYmx5Lkdsb2JhbC5wcm90b3R5cGUudmFsdWUgYXR0ZW1wdHMgdG8gbW9kaWZ5IGltbXV0YWJs
ZSBnbG9iYWwgdmFsdWUiX3MpKSk7CiAKICAgICBnbG9iYWwtPmdsb2JhbCgpLT5zZXQoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCAy
NWUwODlmYTIwNzFiM2Y0N2Y0NTllYzYzNjgxOGViZGIxMTNhOTljLi5hOTE1NWExZDk3MTUzMDA1
NDg3ZDVjNWE5ZmRlODc5ZTE2NWE4Y2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC0zOSw3ICsz
OSw3IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlUYWcuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUg
Ildhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5s
aW5lcy5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC0yMDcsMTggKzIwNywxOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpp
bml0aWFsaXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwogICAgICAg
ICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHdhc21XcmFwcGVyRnVuY3Rpb247CiAg
ICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb24sIHdh
c21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikpIHsKICAgICAgICAgICAgICAgICAvLyBh
LiBJZiB0aGUgc2lnbmF0dXJlIG9mIHYgZG9lcyBub3QgbWF0Y2ggdGhlIHNpZ25hdHVyZSBvZiBp
LCB0aHJvdyBhIFdlYkFzc2VtYmx5LkxpbmtFcnJvci4KLSAgICAgICAgICAgICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBpbXBvcnRlZFNpZ25hdHVyZUluZGV4OworICAgICAgICAgICAgICAgIFdh
c206OlR5cGVJbmRleCBpbXBvcnRlZFR5cGVJbmRleDsKICAgICAgICAgICAgICAgICBpZiAod2Fz
bUZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXgg
PSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGlt
cG9ydGVkVHlwZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT50eXBlSW5kZXgoKTsKICAgICAgICAgICAg
ICAgICAgICAgY2FsbGVlSW5zdGFuY2UgPSAmd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0
YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICBlbnRyeXBvaW50TG9hZExvY2F0aW9uID0gd2Fz
bUZ1bmN0aW9uLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0ZWRTaWduYXR1cmVJbmRleCA9IHdhc21X
cmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGlt
cG9ydGVkVHlwZUluZGV4ID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+dHlwZUluZGV4KCk7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIGIuIExldCBjbG9zdXJlIGJlIHYuW1tDbG9zdXJlXV0uCiAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gd2FzbVdyYXBwZXJGdW5jdGlvbi0+ZnVuY3Rpb24o
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEZ1bmN0
aW9uU2lnbmF0dXJlSW5kaWNlc1tpbXBvcnQua2luZEluZGV4XTsKLSAgICAgICAgICAgICAgICBp
ZiAoaW1wb3J0ZWRTaWduYXR1cmVJbmRleCAhPSBleHBlY3RlZFNpZ25hdHVyZUluZGV4KQorICAg
ICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBleHBlY3RlZFR5cGVJbmRleCA9IG1vZHVsZUlu
Zm9ybWF0aW9uLmltcG9ydEZ1bmN0aW9uVHlwZUluZGljZXNbaW1wb3J0LmtpbmRJbmRleF07Cisg
ICAgICAgICAgICAgICAgaWYgKGltcG9ydGVkVHlwZUluZGV4ICE9IGV4cGVjdGVkVHlwZUluZGV4
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAi
aW1wb3J0ZWQgZnVuY3Rpb24iLCAic2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIHByb3ZpZGVk
IFdlYkFzc2VtYmx5IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIikpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIC8vIGlpaS4gT3RoZXJ3aXNlOgpAQCAtMjM3LDEyICsyMzcsMTIgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUltcG9ydHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlMKICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbEtpbmQ6Okdsb2Jh
bDogewogICAgICAgICAgICAgLy8gNS4gSWYgaSBpcyBhIGdsb2JhbCBpbXBvcnQ6CiAgICAgICAg
ICAgICBjb25zdCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbiYgZ2xvYmFsID0gbW9kdWxlSW5mb3Jt
YXRpb24uZ2xvYmFsc1tpbXBvcnQua2luZEluZGV4XTsKLSAgICAgICAgICAgIGlmIChnbG9iYWwu
bXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6SW1tdXRhYmxlKSB7CisgICAg
ICAgICAgICBpZiAoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6SW1tdXRhYmxlKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLmluaGVyaXRzPEpTV2ViQXNzZW1ibHlHbG9iYWw+KHZtKSkg
ewogICAgICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5R2xvYmFsKiBnbG9iYWxWYWx1ZSA9
IGpzQ2FzdDxKU1dlYkFzc2VtYmx5R2xvYmFsKj4odmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoZ2xvYmFsVmFsdWUtPmdsb2JhbCgpLT50eXBlKCkgIT0gZ2xvYmFsLnR5cGUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlM
aW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1w
b3J0ZWQgZ2xvYmFsIiwgIm11c3QgYmUgYSBzYW1lIHR5cGUiKSkpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoZ2xvYmFsVmFsdWUtPmdsb2JhbCgpLT5tdXRhYmlsaXR5KCkgIT0gV2FzbTo6R2xv
YmFsSW5mb3JtYXRpb246OkltbXV0YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2Jh
bFZhbHVlLT5nbG9iYWwoKS0+bXV0YWJpbGl0eSgpICE9IFdhc206OkltbXV0YWJsZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBv
cnRlZCBnbG9iYWwiLCAibXVzdCBiZSBhIHNhbWUgbXV0YWJpbGl0eSIpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGF1dG8mIGRlY2xhcmVkR2xvYmFsVHlwZSA9IG1vZHVsZUluZm9ybWF0
aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZTsKICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChkZWNsYXJlZEdsb2JhbFR5cGUua2luZCkgewpAQCAtMjcwLDggKzI3MCw4IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJbXBvcnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdhc206OmlzUmVmV2l0aFR5cGVJbmRleChk
ZWNsYXJlZEdsb2JhbFR5cGUpICYmICF2YWx1ZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBwYXJhbUluZGV4ID0gZ2xvYmFs
LnR5cGUuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhc206OlNpZ25h
dHVyZUluZGV4IGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9uID8gd2FzbUZ1bmN0aW9uLT5zaWduYXR1
cmVJbmRleCgpIDogd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5kZXgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IHBhcmFtSW5kZXggPSBn
bG9iYWwudHlwZS5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2FzbTo6
VHlwZUluZGV4IGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9uID8gd2FzbUZ1bmN0aW9uLT50eXBlSW5k
ZXgoKSA6IHdhc21XcmFwcGVyRnVuY3Rpb24tPnR5cGVJbmRleCgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocGFyYW1JbmRleCAhPSBhcmdJbmRleCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3Nl
bWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQs
ICJpbXBvcnRlZCBnbG9iYWwiLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUg
cmVmZXJlbmNlIHR5cGUiKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMy
NCw4ICszMjQsOCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplSW1w
b3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXYXNtOjppc1Jl
ZldpdGhUeXBlSW5kZXgoZ2xvYmFsVHlwZSkgJiYgIXZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHBhcmFtSW5kZXgg
PSBnbG9iYWwudHlwZS5pbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24t
PnNpZ25hdHVyZUluZGV4KCkgOiB3YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNtOjpUeXBlSW5kZXggcGFyYW1J
bmRleCA9IGdsb2JhbC50eXBlLmluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXYXNtOjpUeXBlSW5kZXggYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24t
PnR5cGVJbmRleCgpIDogd2FzbVdyYXBwZXJGdW5jdGlvbi0+dHlwZUluZGV4KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbUluZGV4ICE9IGFyZ0luZGV4KQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdl
KGltcG9ydCwgImltcG9ydGVkIGdsb2JhbCIsICJBcmd1bWVudCBmdW5jdGlvbiBkaWQgbm90IG1h
dGNoIHRoZSByZWZlcmVuY2UgdHlwZSIpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMzg2LDkgKzM4Niw5IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRp
YWxpemVJbXBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgICAgICAg
ICBpZiAoIXRhZykKICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1w
b3J0LCAiVGFnIGltcG9ydCIsICJpcyBub3QgYW4gaW5zdGFuY2Ugb2YgV2ViQXNzZW1ibHkuVGFn
IikpKTsKIAotICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggZXhwZWN0ZWRTaWduYXR1
cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGlj
ZXNbaW1wb3J0LmtpbmRJbmRleF07CisgICAgICAgICAgICBXYXNtOjpUeXBlSW5kZXggZXhwZWN0
ZWRUeXBlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNl
c1tpbXBvcnQua2luZEluZGV4XTsKIAotICAgICAgICAgICAgaWYgKGV4cGVjdGVkU2lnbmF0dXJl
SW5kZXggIT0gdGFnLT50YWcoKS5zaWduYXR1cmUoKS5pbmRleCgpKQorICAgICAgICAgICAgaWYg
KGV4cGVjdGVkVHlwZUluZGV4ICE9IHRhZy0+dGFnKCkudHlwZUluZGV4KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2Jh
bE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIFRhZyIsICJz
aWduYXR1cmUgZG9lc24ndCBtYXRjaCB0aGUgaW1wb3J0ZWQgV2ViQXNzZW1ibHkgVGFnJ3Mgc2ln
bmF0dXJlIikpKTsKIAogICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRUYWco
aW1wb3J0LmtpbmRJbmRleCwgdGFnLT50YWcoKSk7CkBAIC00ODEsOSArNDgxLDkgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUV4cG9ydHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGxvb2tlZCB1cCBhZnRlciB0
aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkLCBhcyB0aGUgY29kZUJsb2NrIGRlcGVuZHMgb24gdGhl
IG1lbW9yeSBtb2RlLgogICAgIFdhc206OkNhbGxlZUdyb3VwKiBjYWxsZWVHcm91cCA9IG1faW5z
dGFuY2UtPmluc3RhbmNlKCkuY2FsbGVlR3JvdXAoKTsKIAotICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IG1vZHVsZUluZm9ybWF0aW9uLmludGVybmFsRXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5k
ZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbnRlcm5hbEV4Y2VwdGlvblNp
Z25hdHVyZUluZGljZXNbaW5kZXhdOwotICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnNl
dFRhZyhtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRFeGNlcHRpb25Db3VudCgpICsgaW5kZXgsIFdh
c206OlRhZzo6Y3JlYXRlKFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJl
SW5kZXgpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbW9kdWxlSW5m
b3JtYXRpb24uaW50ZXJuYWxFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCk7ICsraW5kZXgpIHsK
KyAgICAgICAgV2FzbTo6VHlwZUluZGV4IHR5cGVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9uLmlu
dGVybmFsRXhjZXB0aW9uVHlwZUluZGljZXNbaW5kZXhdOworICAgICAgICBtX2luc3RhbmNlLT5p
bnN0YW5jZSgpLnNldFRhZyhtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRFeGNlcHRpb25Db3VudCgp
ICsgaW5kZXgsIFdhc206OlRhZzo6Y3JlYXRlKFdhc206OlR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5
cGVJbmRleCkpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0g
Y2FsbGVlR3JvdXAtPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKQEAgLTUwMiw4ICs1MDIsOCBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVu
Y3Rpb24odm0sIGZ1bmN0aW9uSW1wb3J0KSkKICAgICAgICAgICAgICAgICB3cmFwcGVyID0gZnVu
Y3Rpb25JbXBvcnQ7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKLSAgICAgICAgICAgICAgICB3cmFwcGVyID0gV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIGZ1bmN0aW9uSW1w
b3J0LCBpbmRleCwgbV9pbnN0YW5jZS5nZXQoKSwgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAg
ICAgICAgIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXggPSBtb2R1bGUtPnR5cGVJbmRleEZyb21G
dW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOworICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgZnVuY3Rpb25JbXBv
cnQsIGluZGV4LCBtX2luc3RhbmNlLmdldCgpLCB0eXBlSW5kZXgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gICBpaWkuIE90aGVyd2lzZToKQEAgLTUx
Miw5ICs1MTIsOSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhw
b3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgLy8gICAgIGMu
IFJldHVybiBmdW5jLgogICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9p
bnRDYWxsZWUgPSBjYWxsZWVHcm91cC0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShpbmRleCk7CiAgICAgICAgICAgICBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNhbGxl
ZUdyb3VwLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRl
eCk7Ci0gICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1v
ZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKLSAgICAg
ICAgICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgICAgICAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgbWFrZVN0cmluZyhpbmRleCksIG1faW5zdGFuY2Uu
Z2V0KCksIGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwg
c2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IHR5cGVJbmRleCA9
IG1vZHVsZS0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CisgICAgICAg
ICAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBXYXNtOjpUeXBlSW5mb3JtYXRpb246OmdldEZ1
bmN0aW9uU2lnbmF0dXJlKHR5cGVJbmRleCk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSwgbWFrZVN0cmluZyhpbmRleCksIG1faW5zdGFuY2UuZ2V0KCks
IGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSwgZW50cnlwb2ludExvYWRMb2NhdGlvbiwgdHlwZUlu
ZGV4KTsKICAgICAgICAgICAgIHdyYXBwZXIgPSBmdW5jdGlvbjsKICAgICAgICAgfQogCkBAIC01
NDksOCArNTQ5LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUV4
cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRp
b246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewotICAgICAgICAgICAgICAgIEFTU0VSVChnbG9i
YWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0
YWJsZSk7Ci0gICAgICAgICAgICAgICAgUmVmPFdhc206Okdsb2JhbD4gZ2xvYmFsUmVmID0gV2Fz
bTo6R2xvYmFsOjpjcmVhdGUoZ2xvYmFsLnR5cGUsIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpN
dXRhYmlsaXR5OjpNdXRhYmxlLCBpbml0aWFsQml0cyk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206Ok11dGFibGUpOworICAgICAgICAgICAgICAgIFJl
ZjxXYXNtOjpHbG9iYWw+IGdsb2JhbFJlZiA9IFdhc206Okdsb2JhbDo6Y3JlYXRlKGdsb2JhbC50
eXBlLCBXYXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlLCBpbml0aWFsQml0cyk7CiAgICAgICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCogZ2xvYmFsVmFsdWUgPSBKU1dlYkFzc2VtYmx5R2xv
YmFsOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eUdsb2JhbFN0cnVjdHVyZSgpLCBXVEZNb3ZlKGdsb2JhbFJlZikpOwogICAgICAgICAgICAgICAg
IHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+
bGlua0dsb2JhbCh2bSwgZ2xvYmFsSW5kZXgsIGdsb2JhbFZhbHVlKTsKQEAgLTYwNSwxMiArNjA1
LDEyIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVFeHBvcnRzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVk
VmFsdWUgPSBKU1dlYkFzc2VtYmx5R2xvYmFsOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwg
Z2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUdsb2JhbFN0cnVjdHVyZSgpLCBXVEZNb3ZlKGdsb2Jh
bFJlZikpOwogICAgICAgICAgICAgICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9i
YWwubXV0YWJpbGl0eSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0
YWJsZSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBX
YXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFdh
c206Okdsb2JhbD4gZ2xvYmFsUmVmID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5nZXRHbG9iYWxC
aW5kaW5nKGV4cC5raW5kSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFs
UmVmKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbFJlZi0+dHlwZSgpID09IGds
b2JhbC50eXBlKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbFJlZi0+bXV0YWJp
bGl0eSgpID09IGdsb2JhbC5tdXRhYmlsaXR5KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGdsb2JhbFJlZi0+bXV0YWJpbGl0eSgpID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRh
YmlsaXR5OjpNdXRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbFJlZi0+
bXV0YWJpbGl0eSgpID09IFdhc206Ok11dGFiaWxpdHk6Ok11dGFibGUpOwogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoZ2xvYmFsUmVmLT5vd25lcjxKU1dlYkFzc2VtYmx5R2xvYmFsPigpKTsK
ICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGdsb2JhbFJlZi0+b3duZXI8SlNX
ZWJBc3NlbWJseUdsb2JhbD4oKTsKICAgICAgICAgICAgICAgICB9CkBAIC02NTAsOCArNjUwLDgg
QEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUV4cG9ydHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBib29sIGhhc1N0YXJ0ID0gISFtb2R1bGVJbmZv
cm1hdGlvbi5zdGFydEZ1bmN0aW9uSW5kZXhTcGFjZTsKICAgICBpZiAoaGFzU3RhcnQpIHsKICAg
ICAgICAgYXV0byBzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1vZHVsZUluZm9ybWF0aW9uLnN0
YXJ0RnVuY3Rpb25JbmRleFNwYWNlLnZhbHVlX29yKDApOwotICAgICAgICBXYXNtOjpTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAgY29uc3QgV2Fz
bTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0
KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgV2FzbTo6VHlwZUluZGV4IHR5cGVJbmRleCA9IG1v
ZHVsZS0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhT
cGFjZSk7CisgICAgICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IFdhc206OlR5cGVJbmZvcm1h
dGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1cmUodHlwZUluZGV4KTsKICAgICAgICAgLy8gVGhlIHN0
YXJ0IGZ1bmN0aW9uIG11c3Qgbm90IHRha2UgYW55IGFyZ3VtZW50cyBvciByZXR1cm4gYW55dGhp
bmcuIFRoaXMgaXMgZW5mb3JjZWQgYnkgdGhlIHBhcnNlci4KICAgICAgICAgQVNTRVJUKCFzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpKTsKICAgICAgICAgQVNTRVJUKHNpZ25hdHVyZS5yZXR1cm5z
Vm9pZCgpKTsKQEAgLTY2MSw3ICs2NjEsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
Ojppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgV2FzbTo6Q2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWUgPSBjYWxsZWVHcm91cC0+ZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAgICBXYXNtOjpX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRM
b2NhdGlvbiA9IGNhbGxlZUdyb3VwLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgInN0YXJ0Il9zLCBtX2luc3RhbmNlLmdldCgp
LCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25h
dHVyZUluZGV4KTsKKyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0g
V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+d2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZSgpLCBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpLCAic3RhcnQiLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUs
IGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHR5cGVJbmRleCk7CiAgICAgICAgICAgICBtX3N0YXJ0
RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRhZ0NvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3IuY3BwCmluZGV4IGQ2NzFlMGM0MjNjM2NhNjUwZDBlYWRhMmI3ZDU4ZmU1NDFk
N2QzNmQuLmJjOGViZTE2ZTEyZDRiODkyYTI1MWExNzIxMzcxZWMyYTI4ZTE3ZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFn
Q29uc3RydWN0b3IuY3BwCkBAIC04NCw5ICs4NCw5IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFnLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
CiAgICAgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIFJl
ZlB0cjxXYXNtOjpTaWduYXR1cmU+IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0
aW9uOjpzaWduYXR1cmVGb3IoeyB9LCBwYXJhbWV0ZXJzKTsKKyAgICBSZWZQdHI8V2FzbTo6VHlw
ZURlZmluaXRpb24+IHR5cGVEZWZpbml0aW9uID0gV2FzbTo6VHlwZUluZm9ybWF0aW9uOjp0eXBl
RGVmaW5pdGlvbkZvckZ1bmN0aW9uKHsgfSwgcGFyYW1ldGVycyk7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCB3ZWJBc3NlbWJseVRhZ1N0
cnVjdHVyZSwgYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSksIGNhbGxGcmFtZS0+anND
YWxsZWUoKSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
SlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2Fz
bTo6VGFnOjpjcmVhdGUoKnNpZ25hdHVyZSkuZ2V0KCkpKSk7CisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6VGFnOjpjcmVhdGUoKnR5cGVEZWZpbml0aW9u
KS5nZXQoKSkpKTsKIH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dlYkFzc2Vt
Ymx5VGFnLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAKaW5kZXggYjVkNzhjZTQ4ZGE3MGQyNjljM2U1OTlkYTdmMzlkY2Y5
MDA2ZmI5Zi4uMDQ2ODg0ODRhOTQ0OGQ2N2UxMzI2ZTIwMGRhYTgzMTdiMTM0MzViNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiSlNPYmpl
Y3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0jaW5jbHVk
ZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25J
bmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MiwxMyArNDIsMTMgQEAgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiB2bSwg
TmF0aXZlRXhlY3V0YWJsZSoKICAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlLCBpbXBvcnRhYmxlRnVuY3Rpb24pCiB7IH0KIAotV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmpl
Y3QqIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU09iamVjdCogZnVuY3Rpb24sIHVuc2lnbmVkIGltcG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4KQogewogICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9uLT5pbmhlcml0czxXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbj4odm0pLCAiV2Ugc2hvdWxkIG5ldmVyIGRvdWJsZSB3cmFwIGEgd3JhcHBlciBmdW5j
dGlvbi4iKTsKICAgICBTdHJpbmcgbmFtZSA9IGVtcHR5U3RyaW5nKCk7CiAgICAgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rv
ciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3Vs
dCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
Pih2bSkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiB7IHNp
Z25hdHVyZUluZGV4LCAmaW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGlt
cG9ydEluZGV4KS0+d2FzbVRvRW1iZWRkZXJTdHViIH0gKTsKLSAgICBjb25zdCBXYXNtOjpTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0
dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0pKSBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24geyB0eXBlSW5kZXgs
ICZpbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5kZXgpLT53
YXNtVG9FbWJlZGRlclN0dWIgfSApOworICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IFdhc206
OlR5cGVJbmZvcm1hdGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1cmUodHlwZUluZGV4KTsKICAgICBy
ZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpLCBuYW1lLCBmdW5jdGlvbiwgaW5zdGFuY2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24uaAppbmRleCA4ZGQxODNjYzIyZDFkMGU4MGY4ZTM0ODQ4ODI2ODll
YTk2N2M4NGM3Li5hZWJjNzJmZDM0NTk2NjU2NDBjZDI2YTQ5Njk5MDlhZjNkNzNmOWJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgREVDTEFS
RV9JTkZPOwogCi0gICAgc3RhdGljIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBjcmVhdGUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW1w
b3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OlNpZ25hdHVyZUluZGV4KTsK
KyAgICBzdGF0aWMgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6VHlwZUluZGV4KTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwog
CiAgICAgSlNPYmplY3QqIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbi5nZXQoKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCmluZGV4IGNhYmRlMjBhZWNlYTYzNDUzOWNk
ODBiNGNhMWExMzEzODgzNmExMDguLmM2ZWU2N2ZkMGUwYzBiNDVjZjgzMGI0ZDM3NGQxZTI2YWY0
NTQ0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20uanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KQEAgLTE2LDYgKzE2LDcg
QEAKICAgICAgICAgInJlZl9udWxsIjogIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6ICAt
MjAsICJiM3R5cGUiOiAiQjM6OkludDY0IiB9LAogICAgICAgICAicmVmIjogICAgICAgeyAidHlw
ZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0yMSwgImIzdHlwZSI6ICJCMzo6SW50NjQiIH0sCiAg
ICAgICAgICJmdW5jIjogICAgICB7ICJ0eXBlIjogInZhcmludDciLCAidmFsdWUiOiAgLTMyLCAi
YjN0eXBlIjogIkIzOjpWb2lkIiB9LAorICAgICAgICAic3RydWN0IjogICAgeyAidHlwZSI6ICJ2
YXJpbnQ3IiwgInZhbHVlIjogIC0zMywgImIzdHlwZSI6ICJCMzo6Vm9pZCIgfSwKICAgICAgICAg
InZvaWQiOiAgICAgIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6ICAtNjQsICJiM3R5cGUi
OiAiQjM6OlZvaWQiIH0KICAgICB9LAogICAgICJ2YWx1ZV90eXBlIjogWyJpMzIiLCAiaTY0Iiwg
ImYzMiIsICJmNjQiLCAiZXh0ZXJucmVmIiwgImZ1bmNyZWYiXSwKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWM3ZjhhNTkyNGM2NTE4ZjBm
NTNjNjRkNGUyODdjMWFhMjE4M2Q5My4uMDVjYjdlNzExM2JkMTYwYTAxOGUzNDE1MGJkM2ExZTlm
MGQ4YWZiMyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMi0wMy0zMSAgRG1pdHJ5IEJlemhldHNrb3YgIDxk
YmV6aGV0c2tvdkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXQVNNLUdDXSBJbnRyb2R1Y2Ugc3Ry
dWN0cyB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM3MDI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgYmFzaWMgdGVzdHMgZm9yIHN0cnVjdCB0eXBlcyBkZWNsYXJhdGlvbi4KKworICAg
ICAgICAqIHdhc20ueWFtbDoKKyAgICAgICAgKiB3YXNtL2djL3N0cnVjdHMuanM6IEFkZGVkLgor
ICAgICAgICAobW9kdWxlKToKKyAgICAgICAgKHRlc3RTdHJ1Y3REZWNsYXJhdGlvbik6CisgICAg
ICAgICogd2FzbS93YXNtLmpzb246CisKIDIwMjItMDMtMzAgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdXNlUHJvYmVPU1JFeGl0PTEgZmxhZyBm
cm9tIHRlc3RzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20ueWFtbCBiL0pTVGVzdHMvd2FzbS55
YW1sCmluZGV4IGFlZWJiYzA0Y2Q5ZDg0ODc0ZjIzNDFhMWIxMThiYzljZWJhM2VhZmQuLjljZDQw
ZWJmOThiOTM5ZjFiMGY3Yjc0MDJlNmQwMTUxMzBhNDk0ODIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
d2FzbS55YW1sCisrKyBiL0pTVGVzdHMvd2FzbS55YW1sCkBAIC0zNSw2ICszNSw4IEBACiAgIGNt
ZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VSdW5Db21tYW5kcwogLSBwYXRoOiB3
YXNtL2Z1bmN0aW9uLXJlZmVyZW5jZXMKICAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVz
cyBwYXJzZVJ1bkNvbW1hbmRzCistIHBhdGg6IHdhc20vZ2MKKyAgY21kOiBydW5XZWJBc3NlbWJs
eVN1aXRlIHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCiAtIHBhdGg6IHdhc20vZnV6egogICBjbWQ6
IHJ1bldlYkFzc2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0gcGF0aDogd2Fz
bS9sb3dFeGVjdXRhYmxlTWVtb3J5CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vZ2Mvc3RydWN0
cy5qcyBiL0pTVGVzdHMvd2FzbS9nYy9zdHJ1Y3RzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4ZWEwYzgyMmY4
YzUzNGIzZWVlMTlkYmE5NDZjZjc2YjJmNzYxMTQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3dhc20vZ2Mvc3RydWN0cy5qcwpAQCAtMCwwICsxLDgzIEBACisvL0AgcnVuV2ViQXNzZW1ibHlT
dWl0ZSgiLS11c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rpb25SZWZlcmVuY2VzPXRydWUiLCAiLS11
c2VXZWJBc3NlbWJseUdDPXRydWUiKQorCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAiLi4vYXNz
ZXJ0LmpzIjsKK2ltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSAiLi4vd2FidC13cmFwcGVyLmpz
IjsKKworZnVuY3Rpb24gbW9kdWxlKGJ5dGVzLCB2YWxpZCA9IHRydWUpIHsKKyAgbGV0IGJ1ZmZl
ciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlcy5sZW5ndGgpOworICBsZXQgdmlldyA9IG5ldyBVaW50
OEFycmF5KGJ1ZmZlcik7CisgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyArK2kp
IHsKKyAgICB2aWV3W2ldID0gYnl0ZXMuY2hhckNvZGVBdChpKTsKKyAgfQorICByZXR1cm4gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShidWZmZXIpOworfQorCitmdW5jdGlvbiB0ZXN0U3RydWN0RGVj
bGFyYXRpb24oKSB7CisgIC8qCisgICAqIChtb2R1bGUKKyAgICogICAodHlwZSAoc3RydWN0KSkK
KyAgICogKQorICAgKi8KKyAgbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSgiXHgwMFx4
NjFceDczXHg2ZFx4MDFceDAwXHgwMFx4MDBceDAxXHgwM1x4MDFceDVmXHgwMCIpKTsKKworICAv
KgorICAgKiAobW9kdWxlCisgICAqICAgKHR5cGUgKHN0cnVjdCAoZmllbGQgaTMyKSkpCisgICAq
ICkKKyAgICovCisgIG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUoIlx4MDBceDYxXHg3
M1x4NmRceDAxXHgwMFx4MDBceDAwXHgwMVx4MDVceDAxXHg1Zlx4MDFceDdmXHgwMCIpKTsKKwor
ICAvKgorICAgKiAobW9kdWxlCisgICAqICAgKHR5cGUgKHN0cnVjdCAoZmllbGQgaTMyKSAoZmll
bGQgaTMyKSkpCisgICAqICkKKyAgICovCisgIG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUoIlx4MDBceDYxXHg3M1x4NmRceDAxXHgwMFx4MDBceDAwXHgwMVx4MDdceDAxXHg1Zlx4MDJc
eDdmXHgwMFx4N2ZceDAwIikpOworCisgIC8qCisgICAqIChtb2R1bGUKKyAgICogICAodHlwZSAo
c3RydWN0IChmaWVsZCAobXV0IGkzMikpKSkKKyAgICogKQorICAgKi8KKyAgbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSgiXHgwMFx4NjFceDczXHg2ZFx4MDFceDAwXHgwMFx4MDBceDAx
XHgwNVx4MDFceDVmXHgwMVx4N2ZceDAxIikpOworCisgIC8qCisgICAqIChtb2R1bGUKKyAgICog
ICAodHlwZSAkUG9pbnQgKHN0cnVjdCAoZmllbGQgKG11dCBpMzIpIChtdXQgaTMyKSkpKQorICAg
KiAgICh0eXBlICRMaW5lIChzdHJ1Y3QgKGZpZWxkIChtdXQgKHJlZiAkUG9pbnQpKSAobXV0IChy
ZWYgJFBvaW50KSkpKSkKKyAgICogKQorICAgKi8KKyAgbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNl
KG1vZHVsZSgiXHgwMFx4NjFceDczXHg2ZFx4MDFceDAwXHgwMFx4MDBceDAxXHgwZlx4MDJceDVm
XHgwMlx4N2ZceDAxXHg3Zlx4MDFceDVmXHgwMlx4NmJceDAwXHgwMVx4NmJceDAwXHgwMSIpKTsK
KworICAvKgorICAgKiB0b28gbWFueSBmaWVsZHMKKyAgICogKG1vZHVsZQorICAgKiAgICh0eXBl
IChzdHJ1Y3QgKGZpZWxkIGkzMikpKQorICAgKiApCisgICAqLworICBhc3NlcnQudGhyb3dzKAor
ICAgICgpID0+CisgICAgICBtb2R1bGUoCisgICAgICAgICJceDAwXHg2MVx4NzNceDZkXHgwMVx4
MDBceDAwXHgwMFx4MDFceDA3XHgwMVx4NWZceGZmXHhmZlx4ZmZceDdmXHgwMCIKKyAgICAgICks
CisgICAgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLAorICAgICJXZWJBc3NlbWJseS5Nb2R1bGUg
ZG9lc24ndCBwYXJzZSBhdCBieXRlIDE2OiBudW1iZXIgb2YgZmllbGRzIGZvciBzdHJ1Y3QgdHlw
ZSBhdCBwb3NpdGlvbiAwIGlzIHRvbyBiaWcgMjY4NDM1NDU1IG1heGltdW0gMTAwMDAgKGV2YWx1
YXRpbmcgJ25ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVmZmVyKScpIgorICApOworCisgIC8qCisg
ICAqIGludmFsaWQgbXV0YWJpbGl0eQorICAgKiAobW9kdWxlCisgICAqICAgKHR5cGUgKHN0cnVj
dCAoZmllbGQgKG11dCBpMzIpKSkpCisgICAqICkKKyAgICovCisgIGFzc2VydC50aHJvd3MoCisg
ICAgKCkgPT4KKyAgICAgIG1vZHVsZSgKKyAgICAgICAgIlx4MDBceDYxXHg3M1x4NmRceDAxXHgw
MFx4MDBceDAwXHgwMVx4MDVceDAxXHg1Zlx4MDFceDdmXHgwMiIKKyAgICAgICksCisgICAgV2Vi
QXNzZW1ibHkuQ29tcGlsZUVycm9yLAorICAgICJXZWJBc3NlbWJseS5Nb2R1bGUgZG9lc24ndCBw
YXJzZSBhdCBieXRlIDE1OiBpbnZhbGlkIEZpZWxkJ3MgbXV0YWJpbGl0eTogMHgwMiAoZXZhbHVh
dGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWZmZXIpJykiCisgICk7Cit9CisKK3Rlc3RT
dHJ1Y3REZWNsYXJhdGlvbigpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL3dhc20uanNvbiBi
L0pTVGVzdHMvd2FzbS93YXNtLmpzb24KaW5kZXggMzJjOGFmOGJiZjU3ZWE2MDViMzM1NWE1NmQ4
ODJlOGRkZTFlMGVlZC4uNzQyODEyY2RlYjAzZDVhNTQ4NDVhMDc3YWJiMWQ3NGI1MjdmZTUzNSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL3dhc20uanNvbgorKysgYi9KU1Rlc3RzL3dhc20vd2Fz
bS5qc29uCkBAIC0xNiw2ICsxNiw3IEBACiAgICAgICAgICJyZWZfbnVsbCI6ICB7ICJ0eXBlIjog
InZhcmludDciLCAidmFsdWUiOiAgLTIwLCAiYjN0eXBlIjogIkIzOjpJbnQ2NCIgfSwKICAgICAg
ICAgInJlZiI6ICAgICAgIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6ICAtMjEsICJiM3R5
cGUiOiAiQjM6OkludDY0IiB9LAogICAgICAgICAiZnVuYyI6ICAgICAgeyAidHlwZSI6ICJ2YXJp
bnQ3IiwgInZhbHVlIjogIC0zMiwgImIzdHlwZSI6ICJCMzo6Vm9pZCIgfSwKKyAgICAgICAgInN0
cnVjdCI6ICAgIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6ICAtMzMsICJiM3R5cGUiOiAi
QjM6OlZvaWQiIH0sCiAgICAgICAgICJ2b2lkIjogICAgICB7ICJ0eXBlIjogInZhcmludDciLCAi
dmFsdWUiOiAgLTY0LCAiYjN0eXBlIjogIkIzOjpWb2lkIiB9CiAgICAgfSwKICAgICAidmFsdWVf
dHlwZSI6IFsiaTMyIiwgImk2NCIsICJmMzIiLCAiZjY0IiwgImV4dGVybnJlZiIsICJmdW5jcmVm
Il0sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456905</attachid>
            <date>2022-04-07 04:11:18 -0700</date>
            <delta_ts>2022-04-12 09:05:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237029-20220407181115.patch</filename>
            <type>text/plain</type>
            <size>305262</size>
            <attacher name="Dmitry">dbezhetskov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZDRjODVjZjJiZTA3OWVjN2Y3NTllOWM4Zjk2YzU5YzRkNDgxYjUwLi43OGM2NTkwZGI3YjA4MWE4
MjI2MmIyZmFiNWNhMjliMWNjNzM5ZTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMDYgQEAKKzIwMjItMDMtMzEgIERtaXRyeSBCZXpoZXRza292ICA8ZGJlemhldHNrb3ZA
aWdhbGlhLmNvbT4KKworICAgICAgICBbV0FTTS1HQ10gSW50cm9kdWNlIHN0cnVjdHMgdHlwZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzAyOQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVj
ZSBzdHJ1Y3QgdHlwZXMgdmlhIGV4dGVuZGluZyBleGlzdGluZyBTaWduYXR1cmUgaW5mcmFzdHJ1
Y3R1cmUuCisgICAgICAgIFNpZ25hdHVyZSBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiBX
YXNtIGZ1bmN0aW9uIHR5cGVzIGFuZCB3ZSB1c2UgdGhlbQorICAgICAgICB0byBjb21wYXJlIHNp
Z25hdHVyZXMgZnJvbSBkaWZmZXJlbnQgd2FzbSBtb2R1bGVzLiBTaWduYXR1cmVzIGFyZSBoZWxk
IGdsb2JhbGx5CisgICAgICAgIGluIGEgaGFzaCBzZXQgYW5kIGhhdmUgb25lIHBvaW50IG9mIGFj
Y2Vzcy4KKworICAgICAgICBXaXRoIEdDIHByb3Bvc2FsIGFuZCBuZXcgc3RydWN0IHR5cGVzIHdl
IHdhbnQgdG8gcmVwcmVzZW50IG5ldyB0eXBlcyB1bmlmb3JtbHkgd2l0aCBleGlzdGluZworICAg
ICAgICBTaWduYXR1cmUgaW5mcmFzdHJ1Y3R1cmUuIFNvLCBpbiB0aGlzIHBhdGNoIHdlIGV4dGVu
ZCBTaWduYXR1cmUgY2xhc3Mgd2l0aCB0d28gb3B0aW9ucyAtCisgICAgICAgIEZ1bmN0aW9uU2ln
bmF0dXJlIGFuZCBTdHJ1Y3RUeXBlLiBGdW5jdGlvblNpZ25hdHVyZSAoY2FuIGJlIG5hbWVkIGFz
IEZ1bmN0aW9uVHlwZSkgaXMgYQorICAgICAgICByZXByZXNlbnRhdGlvbiBvZiBzaWduYXR1cmVz
IGFzIGl0IHdhcyBiZWZvcmUgdGhlIHBhdGNoIGFuZCBTdHJ1Y3RUeXBlIGlzIGEgbmV3IG9wdGlv
biB3aGljaAorICAgICAgICBpcyByZXByZXNlbnRpbmcgc3RydWN0IHR5cGVzIGZyb20gR0MgcHJv
cG9zYWwuIEdlbmVyYWxseSBzcGVha2luZyB3ZSByZXBsYWNlIFNpZ25hdHVyZSBjbGFzcworICAg
ICAgICB3aXRoIG5ldyBhbGdlYnJhaWMgdHlwZSBUeXBlRGVmaW5pdGlvbiA9IFNpZ25hdHVyZSB8
IFN0cnVjdFR5cGUuCisKKyAgICAgICAgVGhpcyByZXByZXNlbnRhdGlvbiBvZiBzdHJ1Y3QgdHlw
ZXMgYWxsb3dzIHVzIG5vdCB0byBjaGFuZ2UgV2FzbVR5cGUgcmVwcmVzZW50YXRpb24gYW5kIAor
ICAgICAgICB1bmlmb3JtbHkgc3RvcmUgRnVuY3Rpb25UeXBlIChha2EgRnVuY3Rpb25TaWduYXR1
cmUpIG9yIFN0cnVjdFR5cGUuIE5ldyBvcHRpb25zIGZvciB0eXBlcywKKyAgICAgICAgZm9yIGV4
YW1wbGUgYXJyYXlzLCBhbHNvIGNhbiBiZSBlYXNpbHkgYWRkZWQuIEFsc28sIHdlIHNhdmUgbWVt
b3J5IGJlY2F1c2Ugd2UgcmV1c2UgZXhpc3RpbmcKKyAgICAgICAgdW5pcXVlbmVzcyBvZiBzaWdu
YXR1cmVzLiBBZGRpdGlvbmFsbHkgd2UgY2FuIGNvbXBhcmUgZGlmZmVyZW50IHN0cnVjdCB0eXBl
cyBhcyBmYXN0IGFzIHdlIGRvIGl0IGZvciAKKyAgICAgICAgc2lnbmF0dXJlcy4KKworICAgICAg
ICBBcyBTaWduYXR1cmUgY2xhc3Mgbm93IGRvZXNuJ3Qgb25seSBob2xkcyBTaWduYXR1cmUgaXQg
aGFzIGJlZW4gcmVuYW1lZCBpbnRvIFR5cGVEZWZpbml0aW9uLgorICAgICAgICBBbGwgY29ycmVz
cG9uZGluZyBzaWduYXR1cmUgcmVsYXRlZCB0aGluZ3MgYWxzbyBoYXZlIGJlZW4gcmVuYW1lZC4K
KworICAgICAgICBUbyBhY2Nlc3Mgc3BlY2lmaWMgb3B0aW9uIHR3byBjbGFzc2VzIHdhcyBpbnRy
b2R1Y2VkIFN0cnVjdFR5cGUgYW5kIEZ1bmN0aW9uU2lnbmF0dXJlLCBzbyBUeXBlRGVmaW5pdGlv
bgorICAgICAgICBjYW4gYmUgY2FzdGVkIHRvIHNwZWNpZmljIG9wdGlvbiBhbmQgb25seSB2aWEg
aXQgb3B0aW9uIG1ldGhvZHMgb2YgdGhhdCBvcHRpb24gY2FuIGJlIGNhbGxlZC4KKyAgICAgICAg
VGhpcyBpcyBkb25lIHdpdGggcHJlc2VydmluZyB0aGUgY2FjaGUtbG9jYWxpdHkgb3B0aW1pemF0
aW9uIGZvciBhbGxvY2F0aW9uIHNpZ25hdHVyZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUR1
bXBlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJ5dGVjb2RlRHVtcGVyOjpkdW1wQmxvY2sp
OgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBydW50aW1l
L09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OmJyYW5jaFRh
cmdldEFyaXR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OkNv
bnRyb2xEYXRhOjpicmFuY2hUYXJnZXRUeXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmVtaXRDYWxsUGF0Y2hwb2ludCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjp0bXBzRm9yU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWly
SVJHZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJh
dG9yOjphZGRSZWZGdW5jKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6Omdl
dEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpzZXRHbG9iYWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2gpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZFJldHVybik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QWlySVJHZW5lcmF0b3I6OmFkZENhbGxSZWYpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdl
bmVyYXRvcjo6ZW1pdEluZGlyZWN0Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5k
Q29tcGlsZUFpcik6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6Q29udHJvbERhdGE6OkNvbnRyb2xEYXRhKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6Q29udHJvbERhdGE6Omhhc05vblZvaWRyZXN1bHQgY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250cm9sRGF0YTo6YnJhbmNoVGFy
Z2V0QXJpdHkgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpDb250
cm9sRGF0YTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkIz
SVJHZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdl
bmVyYXRvcjo6YWRkQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6ZW1pdEluZGlyZWN0Q2FsbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmdldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OnNldEdsb2Jh
bCk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZExvb3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRFbHNlVG9VbnJlYWNoYWJsZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2F0Y2hUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2spOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6Y3JlYXRlQ2FsbFBhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVy
YXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbFJlZik6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUIzKToK
KyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmg6CisgICAgICAgICogd2FzbS9XYXNt
QkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dh
c21DYWxsZWUuaDoKKyAgICAgICAgKiB3YXNtL1dhc21DYWxsaW5nQ29udmVudGlvbi5oOgorICAg
ICAgICAoSlNDOjpXYXNtOjpXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmNhbGxJbmZvcm1hdGlvbkZv
ciBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OkpTQ2FsbGluZ0NvbnZlbnRpb246OmNhbGxJ
bmZvcm1hdGlvbkZvciBjb25zdCk6CisgICAgICAgICogd2FzbS9XYXNtRW1iZWRkZXIuaDoKKyAg
ICAgICAgKiB3YXNtL1dhc21FbnRyeVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpFbnRy
eVBsYW46OnByZXBhcmUpOgorICAgICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAo
SlNDOjpXYXNtOjppc0V4dGVybnJlZik6CisgICAgICAgIChKU0M6Oldhc206OmlzRnVuY3JlZik6
CisgICAgICAgIChKU0M6Oldhc206OmZ1bmNyZWZUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
ZXh0ZXJucmVmVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206Oldhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJlSW5kZXgpOgorICAgICAgICAqIHdhc20vV2FzbUZ1
bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3I6OmFkZFNpZ25hdHVyZSk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuaDoKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlv
blBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpzcGxpdFN0YWNrKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OnNpZ25hdHVyZSBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpGdW5jdGlvblBhcnNlcik6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZSk6CisgICAgICAgIChK
U0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojp1bmlmeSk6CisgICAgICAgIChKU0M6
Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4
cHJlc3Npb24pOgorICAgICAgICAqIHdhc20vV2FzbUdsb2JhbC5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Okdsb2JhbDo6c2V0KToKKyAgICAgICAgKiB3YXNtL1dhc21HbG9iYWwuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21JbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNl
Ojppbml0RWxlbWVudFNlZ21lbnQpOgorICAgICAgICAqIHdhc20vV2FzbUxMSW50R2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjps
b29wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpi
bG9jayk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6
aWZfKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRyb2xUeXBlOjpj
cmVhdGVUcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5
cGU6OmNyZWF0ZUNhdGNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNv
bnRyb2xUeXBlOjpicmFuY2hUYXJnZXRBcml0eSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6YnJhbmNoVGFyZ2V0VHlwZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkxMSW50R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcik6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1VucmVhY2hhYmxlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSk6CisgICAgICAg
IChKU0M6Oldhc206OkxMSW50R2VuZXJhdG9yOjphZGRSZXR1cm4pOgorICAgICAgICAoSlNDOjpX
YXNtOjpMTEludEdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6
Oldhc206OkxMSW50R2VuZXJhdG9yOjplbmRUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206
OkxMSW50R2VuZXJhdG9yOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjphZGRDYWxsUmVmKToKKyAgICAgICAgKiB3YXNtL1dhc21MTEludEdlbmVyYXRvci5oOgor
ICAgICAgICAqIHdhc20vV2FzbUxMSW50UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxM
SW50UGxhbjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRQbGFu
OjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKiB3YXNtL1dhc21MaW1pdHMuaDoK
KyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1
bGU6OnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmg6CisgICAgICAgICogd2Fz
bS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5m
b3JtYXRpb246OmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGVJbmZvcm1hdGlvbjo6aXNJbXBvcnRlZEZ1bmN0aW9uRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjp0
eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlSW5mb3JtYXRpb246OmV4Y2VwdGlvbkluZGV4U3BhY2VTaXplIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmlzSW1wb3J0ZWRFeGNlcHRpb25G
cm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZUluZm9ybWF0aW9uOjp0eXBlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjppbXBvcnRGdW5jdGlvbkNvdW50
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OmludGVybmFs
RnVuY3Rpb25Db3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0
aW9uOjppbXBvcnRFeGNlcHRpb25Db3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZUluZm9ybWF0aW9uOjppbnRlcm5hbEV4Y2VwdGlvbkNvdW50IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlSW5mb3JtYXRpb246OnR5cGVDb3VudCBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpzaWduYXR1cmVJbmRleEZyb21GdW5jdGlv
bkluZGV4U3BhY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVJ
bmZvcm1hdGlvbjo6c2lnbmF0dXJlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Ok9NR1BsYW46OndvcmspOgorICAgICAgICAqIHdhc20vV2FzbU9TUkVudHJ5UGxhbi5j
cHA6CisgICAgICAgIChKU0M6Oldhc206Ok9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICog
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkpTQ19ERUZJTkVf
SklUX09QRVJBVElPTik6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5oOgorICAgICAg
ICAqIHdhc20vV2FzbVBhcnNlci5oOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vz
c1R5cGU+OjpQYXJzZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI8U3VjY2Vzc1R5cGU+
OjpwYXJzZUJsb2NrU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyPFN1Y2Nl
c3NUeXBlPjo6cGFyc2VIZWFwVHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjxTdWNj
ZXNzVHlwZT46OnBhcnNlVmFsdWVUeXBlKToKKyAgICAgICAgKiB3YXNtL1dhc21TZWN0aW9uUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VUeXBlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpTZWN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFyc2VFeHBvcnQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpTZWN0aW9uUGFyc2VyOjpwYXJzZVN0YXJ0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlv
blBhcnNlcjo6cGFyc2VJbml0RXhwcik6CisgICAgICAgIChKU0M6Oldhc206OlNlY3Rpb25QYXJz
ZXI6OnBhcnNlRnVuY3Rpb25UeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNl
cjo6cGFyc2VTdHJ1Y3RUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6
cGFyc2VHbG9iYWxUeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2VjdGlvblBhcnNlcjo6cGFy
c2VFeGNlcHRpb24pOgorICAgICAgICAqIHdhc20vV2FzbVNlY3Rpb25QYXJzZXIuaDoKKyAgICAg
ICAgKiB3YXNtL1dhc21TaWduYXR1cmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vV2Fz
bVNpZ25hdHVyZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vV2FzbVNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50Ojpkb1dhc21DYWxsSW5kaXJlY3QpOgorICAgICAgICAoSlND
OjpMTEludDo6V0FTTV9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50Ojpkb1dh
c21DYWxsUmVmKToKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIuY3BwOgorICAg
ICAgICAqIHdhc20vV2FzbVN0cmVhbWluZ1BsYW4uY3BwOgorICAgICAgICAqIHdhc20vV2FzbVRh
YmxlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY1JlZlRhYmxlOjpGdW5jUmVmVGFibGUpOgorICAgICAgICAqIHdhc20vV2Fz
bVRhZy5oOgorICAgICAgICAqIHdhc20vV2FzbVR5cGVEZWZpbml0aW9uLmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjp0b1N0cmluZyBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpTdHJ1Y3RUeXBlOjp0b1N0cmluZyBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlN0
cnVjdFR5cGU6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpjb21wdXRlU2lnbmF0
dXJlSGFzaCk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVTdHJ1Y3RUeXBlSGFzaCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjpoYXNoIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OnRyeUNyZWF0ZUZ1bmN0aW9uU2lnbmF0dXJlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZURlZmluaXRpb246OnRyeUNyZWF0ZVN0cnVjdFR5cGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlSW5mb3JtYXRpb246OlR5cGVJbmZvcm1hdGlvbik6
CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyYW1ldGVyVHlwZXM6Omhhc2gpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcmFtZXRlclR5cGVzOjplcXVhbCk6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uUGFyYW1ldGVyVHlwZXM6OnRyYW5zbGF0ZSk6CisgICAgICAg
IChKU0M6Oldhc206OlN0cnVjdFBhcmFtZXRlclR5cGVzOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6U3RydWN0UGFyYW1ldGVyVHlwZXM6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
U3RydWN0UGFyYW1ldGVyVHlwZXM6OnRyYW5zbGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OlR5
cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JGdW5jdGlvbik6CisgICAgICAgIChKU0M6
Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JTdHJ1Y3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpUeXBlSW5mb3JtYXRpb246OnRyeUNsZWFudXApOgorICAgICAgICAqIHdh
c20vV2FzbVR5cGVEZWZpbml0aW9uLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5j
dGlvblNpZ25hdHVyZTo6RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpG
dW5jdGlvblNpZ25hdHVyZTo6YXJndW1lbnRDb3VudCBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OkZ1bmN0aW9uU2lnbmF0dXJlOjpyZXR1cm5Db3VudCBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OkZ1bmN0aW9uU2lnbmF0dXJlOjpyZXR1cm5UeXBlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnJldHVybnNWb2lkIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OmFyZ3VtZW50VHlwZSBjb25zdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkZ1bmN0aW9uU2lnbmF0dXJlOjpnZXRSZXR1cm5UeXBlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OmdldEFyZ3VtZW50VHlwZSk6CisgICAg
ICAgIChKU0M6Oldhc206OkZ1bmN0aW9uU2lnbmF0dXJlOjpzdG9yYWdlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU6OnN0b3JhZ2UgY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpTdHJ1Y3RGaWVsZDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6Oldh
c206OlN0cnVjdEZpZWxkOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
U3RydWN0VHlwZTo6U3RydWN0VHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OlN0cnVjdFR5cGU6
OmZpZWxkQ291bnQgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJ1Y3RUeXBlOjpmaWVs
ZCBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlN0cnVjdFR5cGU6OmdldEZpZWxkKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U3RydWN0VHlwZTo6c3RvcmFnZSk6CisgICAgICAgIChKU0M6Oldh
c206OlN0cnVjdFR5cGU6OnN0b3JhZ2UgY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBl
RGVmaW5pdGlvbjo6VHlwZURlZmluaXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlRGVm
aW5pdGlvbjo6cGF5bG9hZCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjph
bGxvY2F0ZWRGdW5jdGlvblNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlRGVmaW5pdGlv
bjo6YWxsb2NhdGVkU3RydWN0U2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0
aW9uOjppcyBjb25zdCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjphcyk6
CisgICAgICAgIChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjphcyBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206OlR5cGVEZWZpbml0aW9uOjppbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6
Oldhc206OlR5cGVEZWZpbml0aW9uOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VHlwZUhhc2g6OlR5cGVIYXNoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VHlwZUhhc2g6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlSGFzaDo6ZXF1YWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6Oldh
c206OlR5cGVIYXNoOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6dGh1bmtGb3IgY29uc3QpOgorICAgICAgICAqIHdh
c20vV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZUlubGluZXMuaC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6VHlwZUluZm9ybWF0aW9uOjpzaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpUeXBl
SW5mb3JtYXRpb246OmdldCk6CisgICAgICAgIChKU0M6Oldhc206OlR5cGVJbmZvcm1hdGlvbjo6
Z2V0RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAqIHdhc20vZ2VuZXJhdGVXYXNtT3BzSGVh
ZGVyLnB5OgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpX
YXNtOjptYXJzaGFsbEpTUmVzdWx0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNUb1dh
c21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmg6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseUV4Y2VwdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwpOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5RXhjZXB0aW9uOjpnZXRBcmcgY29uc3QpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseUdsb2JhbC5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlHbG9iYWw6OnR5
cGUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6ZnJvbUpTVmFsdWUpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseU1vZHVs
ZS5jcHA6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3kpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjp0eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Z2VuZXJh
dGVXYXNtVG9KU1N0dWJzKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6c2ln
bmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWcuaDoKKyAgICAgICAgKiB3YXNtL2pzL1dhc21Ub0pTLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAqIHdhc20vanMvV2FzbVRvSlMuaDoK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OnVzZXNUYWdS
ZWdpc3RlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0Nh
bGxFbnRyeXBvaW50U2xvdyk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVu
Y3Rpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOgorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaDoKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2U6OnR5cGVJbmRleCBjb25zdCk6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpzaWduYXR1cmVJbmRleCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJ
bXBvcnRzKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxp
emVFeHBvcnRzKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmg6CisgICAgICAgICogd2FzbS93YXNtLmpzb246CisK
IDIwMjItMDQtMDYgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAg
Q2FsbCBTdHJ1Y3R1cmU6OmdldCBpbnN0ZWFkIG9mIFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5
IG9uIHRoZSBtdXRhdG9yIHRocmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDI5YTdhZjlhMmRlNjg2MjliNzhmMDIwZjFkOWQ4MTcwOWRhM2IyNWUuLjIzYzRhNzRmODg2
ODYzYTFlZmNlMGIzY2EzNmJmMTY2MTNlZjQ5NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEyNDMsNyArMTI0Myw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgd2FzbS9XYXNtT1NSRW50cnlEYXRhLmgKICAgICB3YXNt
L1dhc21QYWdlQ291bnQuaAogICAgIHdhc20vV2FzbVNlY3Rpb25zLmgKLSAgICB3YXNtL1dhc21T
aWduYXR1cmUuaAorICAgIHdhc20vV2FzbVR5cGVEZWZpbml0aW9uLmgKICAgICB3YXNtL1dhc21T
dHJlYW1pbmdDb21waWxlci5oCiAgICAgd2FzbS9XYXNtU3RyZWFtaW5nUGFyc2VyLmgKICAgICB3
YXNtL1dhc21UaWVyVXBDb3VudC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDEw
MmYyZDY0Nzg3YzZkNDBmODI5NmY3MDNjOTU2YjA3OWJlOGZjYjYuLmM1ZWE0MTZmNzBhY2M2ZTFh
ZjY3ODJhNDhkM2VmMTY4OTU0NDIzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC04NzIsNyArODcyLDcgQEAKIAkJNDQ0M0FFMzMxNkUxODhEOTAwNzZGMTEwIC8qIEZvdW5kYXRp
b24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICov
OyB9OwogCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0
IC8qIFlhcnIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0NzNEQTRBNDc2NEM0NUZFODcxQjA0ODUgLyogRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNjk5NDhF
REU2OEQ0MDU0QjAxRUY3OTcgLyogRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNEJBQTA3Q0VCODFGNDlB
Mjk2RTAyMjAzIC8qIFdhc21TaWduYXR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMEE1RjQwM0YxMUM0RjU5OUNENTk2RDUgLyogV2Fz
bVNpZ25hdHVyZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk0QkFBMDdDRUI4MUY0OUEyOTZFMDIyMDMgLyogV2FzbVR5cGVEZWZpbml0
aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzBBNUY0MDNGMTFDNEY1OTlDRDU5NkQ1IC8qIFdhc21UeXBlRGVmaW5pdGlvbklubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MjBE
OTlGMTIzODhDQzgxMDAwNTA5QTMgLyogR2V0QnlWYWxIaXN0b3J5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjBEOTlGMDIzODhDQzc4MDAwNTA5QTMg
LyogR2V0QnlWYWxIaXN0b3J5LmggKi87IH07CiAJCTUyMTEzMUY3MUY4MkJGMTQwMDdDQ0VFRSAv
KiBQb2x5UHJvdG9BY2Nlc3NDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTIxMTMxRjYxRjgyQkYxMTAwN0NDRUVFIC8qIFBvbHlQcm90b0FjY2Vz
c0NoYWluLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTIxMzIyNDYxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMjI0NDFF
Q0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCAqLzsgfTsKQEAgLTE2
NTksNyArMTY1OSw3IEBACiAJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFzc2Vt
Ymx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBREQw
OUFGMzFGNjI0ODJFMDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FB
RiAvKiBXYXNtVG9KUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUREMDlBRUUxRjVGNjIzRjAwMTMxM0MyIC8qIFdhc21Ub0pTLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ1QzM2RUYxRjdBMjYzQTAw
MEJDQUFGIC8qIFdhc21NZW1vcnlNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZFRTFGN0EyNjI5MDAwQkNBQUYgLyogV2FzbU1lbW9yeU1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlB
RDc0MzhDMDFFMDQ1N0E0MDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJB
IC8qIFdhc21TaWduYXR1cmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlBRDc0MzhDMDFFMDQ1N0E0MDBGRDBDMkEgLyogV2FzbVR5cGVEZWZpbml0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDc0
MzhCRjFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVR5cGVEZWZpbml0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUQ3QjRCMkUxRkEzRTI5ODAw
QzlERjc5IC8qIFdhc21OYW1lU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQ3QjRCMkQxRkEzRTI4NjAwQzlERjc5IC8qIFdhc21OYW1lU2Vj
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDg2QTkzRDFBQTREODdDMDAy
RkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAvKiBXYXNtSW5k
ZXhPck5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFEOEZGMzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzc2OCw3ICszNzY4LDcg
QEAKIAkJMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwSXRlcmF0aW9uU2NvcGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFERkEyNjIxOEVGMzU0MDAwNEY5RkNDIC8qIEdD
TG9nZ2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0xvZ2dp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMDMyMTc1REYxQUQ0N0Q4OTk4
QjM0RTEgLyogSlNTb3VyY2VDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTU291cmNlQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMEE1RjQwM0Yx
MUM0RjU5OUNENTk2RDUgLyogV2FzbVNpZ25hdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNpZ25hdHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzBBNUY0MDNGMTFDNEY1OTlDRDU5NkQ1IC8qIFdhc21UeXBlRGVmaW5p
dGlvbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVR5cGVE
ZWZpbml0aW9uSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTc3MEM0
RjI3Qjk0Q0U0MDAzMDgwOTEgLyogVGVtcG9yYWxQbGFpbkRhdGVDb25zdHJ1Y3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhbFBsYWluRGF0ZUNvbnN0cnVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNzcwQzUwMjdCOTRDRTQwMDMwODA5
MSAvKiBUZW1wb3JhbFBsYWluRGF0ZUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFsUGxhaW5EYXRlQ29uc3RydWN0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTc3MEM1MTI3Qjk0Q0U0MDAzMDgwOTEgLyogVGVt
cG9yYWxQbGFpbkRhdGVQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGVtcG9yYWxQbGFpbkRhdGVQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTUwNjIsOCArNTA2Miw4IEBACiAJCUFENUMzNkU0MUY2OUVDOEIwMDBCQ0FBRiAvKiBX
YXNtVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFENUMzNkVFMUY3QTI2MjkwMDBCQ0FBRiAvKiBXYXNtTWVtb3J5TW9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtTWVtb3J5TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBRDVDMzZGMDFGN0EyNkJGMDAwQkNBQUYgLyogV2FzbU1lbW9yeU1vZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1lbW9yeU1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVNpZ25hdHVyZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtU2lnbmF0dXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJBIC8q
IFdhc21TaWduYXR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNp
Z25hdHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDc0MzhCRTFFMDQ1Nzky
MDBGRDBDMkEgLyogV2FzbVR5cGVEZWZpbml0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdhc21UeXBlRGVmaW5pdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUFENzQzOEJGMUUwNDU3OTIwMEZEMEMyQSAvKiBXYXNtVHlwZURlZmluaXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVR5cGVEZWZpbml0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEN0I0QjJEMUZBM0UyODYwMEM5REY3
OSAvKiBXYXNtTmFtZVNlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2FzbU5hbWVTZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEODZBOTNE
MUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYWtHQ01hcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUQ4REQ2Q0YxRjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9XYXNtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEpTVG9XYXNtLmg7IHBhdGggPSBqcy9KU1RvV2FzbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNzQ2OCw5ICs3NDY4LDYgQEAKIAkJCQlFM0EwNTMxNzIxMzQyQjY2MDAy
MkVDMTQgLyogV2FzbVNlY3Rpb25QYXJzZXIuY3BwICovLAogCQkJCUUzQTA1MzE4MjEzNDJCNjcw
MDIyRUMxNCAvKiBXYXNtU2VjdGlvblBhcnNlci5oICovLAogCQkJCTUzRjQwRTg0MUQ1OEY5Nzcw
MDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLywKLQkJCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBD
MkEgLyogV2FzbVNpZ25hdHVyZS5jcHAgKi8sCi0JCQkJQUQ3NDM4QkYxRTA0NTc5MjAwRkQwQzJB
IC8qIFdhc21TaWduYXR1cmUuaCAqLywKLQkJCQkzMEE1RjQwM0YxMUM0RjU5OUNENTk2RDUgLyog
V2FzbVNpZ25hdHVyZUlubGluZXMuaCAqLywKIAkJCQkxNEFCMEM5MjIzMTc0N0I3MDAwMjUwQkMg
LyogV2FzbVNsb3dQYXRocy5jcHAgKi8sCiAJCQkJMTRBQjBDOTMyMzE3NDdCNzAwMDI1MEJDIC8q
IFdhc21TbG93UGF0aHMuaCAqLywKIAkJCQlFMzNCQkUwNzI1QkZBMDNDMDA1MzY5MEYgLyogV2Fz
bVN0cmVhbWluZ0NvbXBpbGVyLmNwcCAqLywKQEAgLTc0ODcsNiArNzQ4NCw5IEBACiAJCQkJNTI1
MEQyRDAxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLywKIAkJCQlFM0M2OTRCMjIz
MDI2ODc0MDA2RkJFNDIgLyogV2FzbVRpZXJVcENvdW50LmNwcCAqLywKIAkJCQk1M0U5RTBBRTFF
QUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggKi8sCisJCQkJQUQ3NDM4QkUxRTA0
NTc5MjAwRkQwQzJBIC8qIFdhc21UeXBlRGVmaW5pdGlvbi5jcHAgKi8sCisJCQkJQUQ3NDM4QkYx
RTA0NTc5MjAwRkQwQzJBIC8qIFdhc21UeXBlRGVmaW5pdGlvbi5oICovLAorCQkJCTMwQTVGNDAz
RjExQzRGNTk5Q0Q1OTZENSAvKiBXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmggKi8sCiAJCQkJ
ODYzRkJDNTcyNUIwOTNCODAwRjZDOTMwIC8qIFdhc21WYWx1ZUxvY2F0aW9uLmNwcCAqLywKIAkJ
CQk4NjNGQkM1ODI1QjA5M0I5MDBGNkM5MzAgLyogV2FzbVZhbHVlTG9jYXRpb24uaCAqLywKIAkJ
CQk1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLywKQEAgLTEx
MjY3LDggKzExMjY3LDYgQEAKIAkJCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBs
YW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzQTA1MzFDMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNt
U2VjdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNGNDBFODUxRDU4Rjk3NzAwOTlB
MUI2IC8qIFdhc21TZWN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQUQ3NDM4QzAxRTA0NTdB
NDAwRkQwQzJBIC8qIFdhc21TaWduYXR1cmUuaCBpbiBIZWFkZXJzICovLAotCQkJCTRCQUEwN0NF
QjgxRjQ5QTI5NkUwMjIwMyAvKiBXYXNtU2lnbmF0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTMzQkJFMDkyNUJGQTA0MTAwNTM2OTBGIC8qIFdhc21TdHJlYW1pbmdDb21waWxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNBMDUzMUEyMTM0MkI2ODAwMjJFQzE0IC8qIFdhc21TdHJl
YW1pbmdQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzQzczQTkxMjVCRkE3M0IwMEVGRTMw
MyAvKiBXYXNtU3RyZWFtaW5nUGxhbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTI3Nyw2ICsxMTI3
NSw4IEBACiAJCQkJNTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUzRTlFMEFGMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkVDMUY3NUFEN0MwMDBCQ0FBRiAvKiBXYXNt
VG9KUy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUQ3NDM4QzAxRTA0NTdBNDAwRkQwQzJBIC8qIFdh
c21UeXBlRGVmaW5pdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEJBQTA3Q0VCODFGNDlBMjk2
RTAyMjAzIC8qIFdhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2M0ZCQzVBMjVCMDkzQjkwMEY2QzkzMCAvKiBXYXNtVmFsdWVMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCAwNTA2OWM1NDg5
MjQ4YTdkMDJjNTc2ZDAwYjkzMTIxNmE0MDNlYTI2Li4zMzQ1Mjg5MTcyODM0MTRkZDQzOTNjYzc2
ODM3ZmU0Mjk1OGVhNTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xMTAzLDcg
KzExMDMsNyBAQCB3YXNtL1dhc21PcGVyYXRpb25zLmNwcAogd2FzbS9XYXNtUGFnZUNvdW50LmNw
cAogd2FzbS9XYXNtUGxhbi5jcHAKIHdhc20vV2FzbVNlY3Rpb25QYXJzZXIuY3BwCi13YXNtL1dh
c21TaWduYXR1cmUuY3BwCit3YXNtL1dhc21UeXBlRGVmaW5pdGlvbi5jcHAKIHdhc20vV2FzbVNs
b3dQYXRocy5jcHAKIHdhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmNwcAogd2FzbS9XYXNtU3Ry
ZWFtaW5nUGFyc2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlRHVtcGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAKaW5kZXggMDhhMjM1ODA0NGZkNjM1OTcwMzIzYjAxMmM5Yzg3ZTM5
NWUzZTY5OC4uZDU0Yzc0ZmM2M2M2NTBlMDhkNzRmNDc5N2M5MTExZDM1NjI2NzZiYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCkBA
IC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiV2FzbUdlbmVyYXRvclRyYWl0cy5oIgogI2luY2x1ZGUgIldhc21Nb2R1
bGVJbmZvcm1hdGlvbi5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5j
bHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtMzQ5LDkgKzM0OSw5IEBAIHZvaWQgQnl0ZWNvZGVEdW1wZXI6OmR1bXBCbG9jayhGdW5jdGlv
bkNvZGVCbG9ja0dlbmVyYXRvciogYmxvY2ssIGNvbnN0IE1vZHVsZUluCiAgICAgb3V0LnByaW50
KG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtb2R1bGVJbmZvcm1h
dGlvbi5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKSk7CiAKICAgICBjb25z
dCBhdXRvJiBmdW5jdGlvbiA9IG1vZHVsZUluZm9ybWF0aW9uLmZ1bmN0aW9uc1tibG9jay0+ZnVu
Y3Rpb25JbmRleCgpXTsKLSAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVs
ZUluZm9ybWF0aW9uLmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Jsb2NrLT5mdW5j
dGlvbkluZGV4KCldOwotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7Ci0gICAgb3V0LnByaW50KCIgOiAiLCBz
aWduYXR1cmUsICJcbiIpOworICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBtb2R1bGVJbmZvcm1h
dGlvbi5pbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXNbYmxvY2stPmZ1bmN0aW9uSW5kZXgoKV07
CisgICAgY29uc3QgYXV0byYgdHlwZURlZmluaXRpb24gPSBUeXBlSW5mb3JtYXRpb246OmdldCh0
eXBlSW5kZXgpOworICAgIG91dC5wcmludCgiIDogIiwgdHlwZURlZmluaXRpb24sICJcbiIpOwog
ICAgIG91dC5wcmludCgid2FzbSBzaXplOiAiLCBmdW5jdGlvbi5kYXRhLnNpemUoKSwgIiBieXRl
c1xuIik7CiAKICAgICBvdXQucHJpbnRmKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggYjk2MmIyOGNlNjJmMmM4MTdjNjQxZjdiZjk0MTBl
NTZjZjEwNzAyMC4uNGU1OWU5ZjkwNzc5NjU1Zjc0MTU1Yjg5NWJkNWUzOGUwMTQ3MzFmOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0x
Njg5LDcgKzE2ODksNyBAQCBvcCA6Y2FsbF9ub190bHMsCiBvcCA6Y2FsbF9pbmRpcmVjdCwKICAg
ICBhcmdzOiB7CiAgICAgICAgIGZ1bmN0aW9uSW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgc2lnbmF0dXJlSW5kZXg6IHVuc2lnbmVkLAorICAgICAgICB0eXBlSW5kZXg6IHVuc2lnbmVk
LAogICAgICAgICBzdGFja09mZnNldDogdW5zaWduZWQsCiAgICAgICAgIG51bWJlck9mU3RhY2tB
cmdzOiB1bnNpZ25lZCwKICAgICAgICAgdGFibGVJbmRleDogdW5zaWduZWQsCkBAIC0xNjk4LDcg
KzE2OTgsNyBAQCBvcCA6Y2FsbF9pbmRpcmVjdCwKIG9wIDpjYWxsX2luZGlyZWN0X25vX3RscywK
ICAgICBhcmdzOiB7CiAgICAgICAgIGZ1bmN0aW9uSW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKLSAg
ICAgICAgc2lnbmF0dXJlSW5kZXg6IHVuc2lnbmVkLAorICAgICAgICB0eXBlSW5kZXg6IHVuc2ln
bmVkLAogICAgICAgICBzdGFja09mZnNldDogdW5zaWduZWQsCiAgICAgICAgIG51bWJlck9mU3Rh
Y2tBcmdzOiB1bnNpZ25lZCwKICAgICAgICAgdGFibGVJbmRleDogdW5zaWduZWQsCkBAIC0xNzA3
LDcgKzE3MDcsNyBAQCBvcCA6Y2FsbF9pbmRpcmVjdF9ub190bHMsCiBvcCA6Y2FsbF9yZWYsCiAg
ICAgYXJnczogewogICAgICAgICBmdW5jdGlvblJlZmVyZW5jZTogVmlydHVhbFJlZ2lzdGVyLAot
ICAgICAgICBzaWduYXR1cmVJbmRleDogdW5zaWduZWQsCisgICAgICAgIHR5cGVJbmRleDogdW5z
aWduZWQsCiAgICAgICAgIHN0YWNrT2Zmc2V0OiB1bnNpZ25lZCwKICAgICAgICAgbnVtYmVyT2ZT
dGFja0FyZ3M6IHVuc2lnbmVkLAogICAgIH0KQEAgLTE3MTUsNyArMTcxNSw3IEBAIG9wIDpjYWxs
X3JlZiwKIG9wIDpjYWxsX3JlZl9ub190bHMsCiAgICAgYXJnczogewogICAgICAgICBmdW5jdGlv
blJlZmVyZW5jZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBzaWduYXR1cmVJbmRleDogdW5z
aWduZWQsCisgICAgICAgIHR5cGVJbmRleDogdW5zaWduZWQsCiAgICAgICAgIHN0YWNrT2Zmc2V0
OiB1bnNpZ25lZCwKICAgICAgICAgbnVtYmVyT2ZTdGFja0FyZ3M6IHVuc2lnbmVkLAogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCmluZGV4IDQwZjBj
Nzk2NmNmODdjYzFjN2U2YmFjNjQxYTU2ZmUzNmJmZTAyYTYuLjQ5MjRmMzlhMjZkZmY3OWI4NTYz
MjFiODE5NzViYmNkOGIzZmMyN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaApAQCAtNTQ4LDYgKzU0OCw3IEBAIGJvb2wgY2FuVXNlV2ViQXNzZW1ibHlG
YXN0TWVtb3J5KCk7CiAgICAgdihCb29sLCB1c2VUZW1wb3JhbCwgZmFsc2UsIE5vcm1hbCwgIkV4
cG9zZSB0aGUgVGVtcG9yYWwgb2JqZWN0LiIpIFwKICAgICB2KEJvb2wsIHVzZVdlYkFzc2VtYmx5
VGhyZWFkaW5nLCB0cnVlLCBOb3JtYWwsICJBbGxvdyBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgd2Fz
bSB0aHJlYWRpbmcgc3BlYy4iKSBcCiAgICAgdihCb29sLCB1c2VXZWJBc3NlbWJseVR5cGVkRnVu
Y3Rpb25SZWZlcmVuY2VzLCBmYWxzZSwgTm9ybWFsLCAiQWxsb3cgZnVuY3Rpb24gdHlwZXMgZnJv
bSB0aGUgd2FzbSB0eXBlZCBmdW5jdGlvbiByZWZlcmVuY2VzIHNwZWMuIikgXAorICAgIHYoQm9v
bCwgdXNlV2ViQXNzZW1ibHlHQywgZmFsc2UsIE5vcm1hbCwgIkFsbG93IGdjIHR5cGVzIGZyb20g
dGhlIHdhc20gZ2MgcHJvcG9zYWwuIikgXAogICAgIHYoQm9vbCwgdXNlV2ViQXNzZW1ibHlFeGNl
cHRpb25zLCB0cnVlLCBOb3JtYWwsICJBbGxvdyB0aGUgbmV3IHNlY3Rpb24gYW5kIGluc3RydWN0
aW9ucyBmcm9tIHRoZSB3YXNtIGV4Y2VwdGlvbiBoYW5kbGluZyBzcGVjLiIpIFwKICAgICB2KEJv
b2wsIHVzZVdlYkFzc2VtYmx5QnJhbmNoSGludHMsIHRydWUsIE5vcm1hbCwgIkFsbG93IHRoZSBu
ZXcgc2VjdGlvbiBmcm9tIHRoZSB3YXNtIGJyYW5jaCBoaW50aW5nIHNwZWMuIikgXAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAppbmRl
eCAyZDcyOWFlMjVlZDMyNGE1NzJjN2VkM2RkNGYwZmI0MmJhYTUzMmIzLi4wMWRiMjhiYjNiMzJj
NzMxNWZiYWFmZDM5ZTM4NmQ3YWUxYTI4YTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKQEAgLTU1LDggKzU1LDggQEAKICNpbmNs
dWRlICJXYXNtT1NSRW50cnlEYXRhLmgiCiAjaW5jbHVkZSAiV2FzbU9wY29kZU9yaWdpbi5oIgog
I2luY2x1ZGUgIldhc21PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGlu
ZXMuaCIKICNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0
aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtMjE4LDE5ICsyMTgsMTkgQEAgcHVibGlj
OgogICAgICAgICAgICAgc3BlY2lhbCA9IG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBT
aWduYXR1cmVBcmdDb3VudCBicmFuY2hUYXJnZXRBcml0eSgpIGNvbnN0CisgICAgICAgIEZ1bmN0
aW9uQXJnQ291bnQgYnJhbmNoVGFyZ2V0QXJpdHkoKSBjb25zdAogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoYmxvY2tUeXBlKCkgPT0gQmxvY2tUeXBlOjpMb29wKQotICAgICAgICAgICAgICAg
IHJldHVybiByZXR1cm5UeXBlLT5hcmd1bWVudENvdW50KCk7Ci0gICAgICAgICAgICByZXR1cm4g
cmV0dXJuVHlwZS0+cmV0dXJuQ291bnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJu
VHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXR1cm5UeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291
bnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25l
ZCBpKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdl
dEFyaXR5KCkpOwogICAgICAgICAgICAgaWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9v
cCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS0+YXJndW1lbnQoaSk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmV0dXJuVHlwZS0+cmV0dXJuVHlwZShpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlw
ZShpKTsKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5UeXBlLT5hczxGdW5jdGlvblNpZ25hdHVy
ZT4oKS0+cmV0dXJuVHlwZShpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgY29udmVydFRy
eVRvQ2F0Y2godW5zaWduZWQgdHJ5RW5kQ2FsbFNpdGVJbmRleCwgVHlwZWRUbXAgZXhjZXB0aW9u
KQpAQCAtMzIzLDExICszMjMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhaWwo
X19WQV9BUkdTX18pOyAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAgIEFpcklS
R2VuZXJhdG9yKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgQjM6OlByb2NlZHVyZSYsIEludGVy
bmFsRnVuY3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBNZW1vcnlNb2Rl
LCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCosIGNvbnN0IFNpZ25hdHVyZSYs
IHVuc2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKTsKKyAgICBBaXJJUkdlbmVyYXRv
cihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIEIzOjpQcm9jZWR1cmUmLCBJbnRlcm5hbEZ1bmN0
aW9uKiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgTWVtb3J5TW9kZSwgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqLCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIHVu
c2lnbmVkJiBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplKTsKIAogICAgIHZvaWQgZmluYWxpemVF
bnRyeXBvaW50cygpOwogCi0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
QXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBUeXBlRGVmaW5pdGlvbiYpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAg
ICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCB1aW50NjRfdCk7CiAgICAgRXhwcmVz
c2lvblR5cGUgYWRkQ29uc3RhbnQoQmFzaWNCbG9jayosIFR5cGUsIHVpbnQ2NF90KTsKQEAgLTM5
Myw4ICszOTMsOCBAQCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmKTsKIAogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZFRyeShCbG9ja1NpZ25hdHVyZSwgU3RhY2smIGVuY2xv
c2luZ1N0YWNrLCBDb250cm9sVHlwZSYgcmVzdWx0LCBTdGFjayYgbmV3U3RhY2spOwotICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlv
bkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBTdGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlz
dCYpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJl
YWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgQ29udHJv
bFR5cGUmLCBSZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9u
JiwgU3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0
aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0
Jik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hBbGwoU3Rh
Y2smLCBDb250cm9sVHlwZSYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJO
IGFkZENhdGNoQWxsVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOwogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZERlbGVnYXRlKENvbnRyb2xUeXBlJiwgQ29udHJvbFR5
cGUmKTsKQEAgLTQxMSwxMiArNDExLDEyIEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSwgY29uc3QgU3RhY2sm
KSB7IHJldHVybiB7IH07IH0KIAogICAgIC8vIENhbGxzCi0gICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0
dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7
Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVu
c2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZENhbGxSZWYoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgVHlw
ZURlZmluaXRpb24mLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiBy
ZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5k
aXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVmKGNvbnN0IFR5cGVEZWZpbml0aW9u
JiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAg
ICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKLSAg
ICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBlbWl0SW5kaXJlY3RDYWxsKFR5cGVk
VG1wIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlLCBjb25zdCBTaWdu
YXR1cmUmLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7
Ci0gICAgc3RkOjpwYWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sq
LCBjb25zdCBTaWduYXR1cmUmLCBjb25zdCBSZXN1bHRMaXN0JiByZXN1bHRzLCBjb25zdCBWZWN0
b3I8VHlwZWRUbXA+JiBhcmdzLCBWZWN0b3I8Q29uc3RyYWluZWRUbXA+IGV4dHJhQXJncyA9IHsg
fSk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdEluZGlyZWN0Q2Fs
bChUeXBlZFRtcCBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSwgY29u
c3QgVHlwZURlZmluaXRpb24mLCBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBS
ZXN1bHRMaXN0Jik7CisgICAgc3RkOjpwYWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZW1pdENhbGxQYXRjaHBvaW50
KEJhc2ljQmxvY2sqLCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIGNvbnN0IFJlc3VsdExpc3QmIHJl
c3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZlY3RvcjxDb25zdHJhaW5lZFRt
cD4gZXh0cmFBcmdzID0geyB9KTsKIAogICAgIFBhcnRpYWxSZXN1bHQgYWRkU2hpZnQoVHlwZSwg
QjM6OkFpcjo6T3Bjb2RlLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUgc2hp
ZnQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogICAgIFBhcnRpYWxSZXN1bHQgYWRkSW50ZWdl
clN1YihCMzo6QWlyOjpPcGNvZGUsIEV4cHJlc3Npb25UeXBlIGxocywgRXhwcmVzc2lvblR5cGUg
cmhzLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKQEAgLTU0MSw5ICs1NDEsOSBAQCBwcml2YXRl
OgogCiAgICAgUmVzdWx0TGlzdCB0bXBzRm9yU2lnbmF0dXJlKEJsb2NrU2lnbmF0dXJlIHNpZ25h
dHVyZSkKICAgICB7Ci0gICAgICAgIFJlc3VsdExpc3QgcmVzdWx0KHNpZ25hdHVyZS0+cmV0dXJu
Q291bnQoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJl
dHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdFtpXSA9IHRtcEZvclR5cGUoc2ln
bmF0dXJlLT5yZXR1cm5UeXBlKGkpKTsKKyAgICAgICAgUmVzdWx0TGlzdCByZXN1bHQoc2lnbmF0
dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
LT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICByZXN1bHRbaV0gPSB0bXBGb3JUeXBl
KHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVyblR5cGUoaSkpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtOTMzLDcgKzkzMyw3IEBAIHZvaWQgQWly
SVJHZW5lcmF0b3I6OnJlc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEJhc2ljQmxvY2sqIGJsb2Nr
LCBUeXBlZFRtcCBpbnN0CiAgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBhdGNocG9pbnQsIFRt
cCgpLCBpbnN0YW5jZSk7CiB9CiAKLUFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcihjb25z
dCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2NlZHVyZSYgcHJvY2VkdXJlLCBJbnRl
cm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5j
dGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUpCitBaXJJUkdlbmVyYXRvcjo6
QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIzOjpQcm9jZWR1
cmUmIHByb2NlZHVyZSwgSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIE1lbW9yeU1vZGUg
bW9kZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCwgY29uc3Qg
VHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZl
clNpemUpCiAgICAgOiBtX2luZm8oaW5mbykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9m
dW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpCkBAIC0xMDM5LDkgKzEwMzksOSBAQCBBaXJJUkdl
bmVyYXRvcjo6QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIEIz
OjpQcm9jZWR1cmUmIHBybwogICAgIG1fY3VycmVudEJsb2NrID0gbV9tYWluRW50cnlwb2ludFN0
YXJ0OwogCiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwotICAgIG1fbG9jYWxzLmdyb3co
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAgICBUeXBlIHR5cGUgPSBz
aWduYXR1cmUuYXJndW1lbnQoaSk7CisgICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXM8RnVu
Y3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3Vu
dCgpOyArK2kpIHsKKyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpLT5hcmd1bWVudFR5cGUoaSk7CiAgICAgICAgIG1fbG9jYWxzW2ldID0gdG1wRm9y
VHlwZSh0eXBlKTsKICAgICB9CiAKQEAgLTEwNTAsNyArMTA1MCw3IEBAIEFpcklSR2VuZXJhdG9y
OjpBaXJJUkdlbmVyYXRvcihjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgQjM6OlByb2Nl
ZHVyZSYgcHJvCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdhc21DYWxsSW5mby5wYXJh
bXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQjM6OlZhbHVlUmVwIGxvY2F0aW9uID0gd2FzbUNh
bGxJbmZvLnBhcmFtc1tpXTsKICAgICAgICAgQXJnIGFyZyA9IGxvY2F0aW9uLmlzUmVnKCkgPyBB
cmcoVG1wKGxvY2F0aW9uLnJlZygpKSkgOiBBcmc6OmFkZHIoVG1wKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKSwgbG9jYXRpb24ub2Zmc2V0RnJvbUZQKCkpOwotICAgICAgICBzd2l0Y2ggKHNp
Z25hdHVyZS5hcmd1bWVudChpKS5raW5kKSB7CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFz
PEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudFR5cGUoaSkua2luZCkgewogICAgICAgICBj
YXNlIFR5cGVLaW5kOjpJMzI6CiAgICAgICAgICAgICBhcHBlbmQoTW92ZTMyLCBhcmcsIG1fbG9j
YWxzW2ldKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEyNywxNiArMTEyNywxNiBAQCB2b2lk
IEFpcklSR2VuZXJhdG9yOjpmaW5hbGl6ZUVudHJ5cG9pbnRzKCkKIAogQjM6OlR5cGUgQWlySVJH
ZW5lcmF0b3I6OnRvQjNSZXN1bHRUeXBlKEJsb2NrU2lnbmF0dXJlIHJldHVyblR5cGUpCiB7Ci0g
ICAgaWYgKHJldHVyblR5cGUtPnJldHVybnNWb2lkKCkpCisgICAgaWYgKHJldHVyblR5cGUtPmFz
PEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5zVm9pZCgpKQogICAgICAgICByZXR1cm4gQjM6
OlZvaWQ7CiAKLSAgICBpZiAocmV0dXJuVHlwZS0+cmV0dXJuQ291bnQoKSA9PSAxKQotICAgICAg
ICByZXR1cm4gdG9CM1R5cGUocmV0dXJuVHlwZS0+cmV0dXJuVHlwZSgwKSk7CisgICAgaWYgKHJl
dHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpID09IDEpCisg
ICAgICAgIHJldHVybiB0b0IzVHlwZShyZXR1cm5UeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+cmV0dXJuVHlwZSgwKSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IG1fdHVwbGVNYXAuZW5zdXJl
KHJldHVyblR5cGUsIFsmXSB7CiAgICAgICAgIFZlY3RvcjxCMzo6VHlwZT4gcmVzdWx0OwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmV0dXJuVHlwZS0+cmV0dXJuQ291bnQoKTsg
KytpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b0IzVHlwZShyZXR1cm5UeXBlLT5yZXR1
cm5UeXBlKGkpKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXR1cm5UeXBl
LT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsgKytpKQorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCh0b0IzVHlwZShyZXR1cm5UeXBlLT5hczxGdW5jdGlvblNpZ25hdHVy
ZT4oKS0+cmV0dXJuVHlwZShpKSkpOwogICAgICAgICByZXR1cm4gbV9wcm9jLmFkZFR1cGxlKFdU
Rk1vdmUocmVzdWx0KSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CkBAIC0xMjg4LDkgKzEyODgsOSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRCb3R0b20o
QmFzaWNCbG9jayogYmxvY2ssIFR5cGUgdHlwZSkgLT4gRXhwcmVzc2lvblR5cGUKICAgICByZXR1
cm4gYWRkQ29uc3RhbnQodHlwZSwgMCk7CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEFy
Z3VtZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gUGFydGlhbFJlc3VsdAorYXV0
byBBaXJJUkdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWdu
YXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2xvY2Fscy5z
aXplKCkgPT0gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7IC8vIFdlIGhhbmRsZSBhcmd1bWVu
dHMgaW4gdGhlIHByb2xvZ3VlCisgICAgUkVMRUFTRV9BU1NFUlQobV9sb2NhbHMuc2l6ZSgpID09
IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpKTsgLy8g
V2UgaGFuZGxlIGFyZ3VtZW50cyBpbiB0aGUgcHJvbG9ndWUKICAgICByZXR1cm4geyB9OwogfQog
CkBAIC0xMzEwLDggKzEzMTAsOCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRSZWZGdW5jKHVp
bnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aQogewogICAgIC8v
IEZJWE1FOiBFbWl0IHRoaXMgaW5saW5lIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4NTA2Pi4KICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1
bmN0aW9uUmVmZXJlbmNlcygpKSB7Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7
Ci0gICAgICAgIHJlc3VsdCA9IHRtcEZvclR5cGUoVHlwZSB7IFR5cGVLaW5kOjpSZWYsIE51bGxh
YmxlOjpObywgc2lnbmF0dXJlSW5kZXggfSk7CisgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXgg
PSBtX2luZm8udHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CisgICAgICAg
IHJlc3VsdCA9IHRtcEZvclR5cGUoVHlwZSB7IFR5cGVLaW5kOjpSZWYsIE51bGxhYmxlOjpObywg
dHlwZUluZGV4IH0pOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSB0bXBGb3JUeXBlKFR5
cGVzOjpGdW5jcmVmKTsKICAgICBlbWl0Q0NhbGwoJm9wZXJhdGlvbldhc21SZWZGdW5jLCByZXN1
bHQsIGluc3RhbmNlVmFsdWUoKSwgYWRkQ29uc3RhbnQoVHlwZXM6OkkzMiwgaW5kZXgpKTsKQEAg
LTE2MjQsNyArMTYyNCw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJf
dCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhCiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01v
ZGU6OlBvcnRhYmxlOgotICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6
R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOworICAgICAgICBBU1NFUlQo
Z2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAg
IGlmIChBcmc6OmlzVmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjpXaWR0aDY0KSkKICAgICAgICAg
ICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwgdGVtcCk7CiAgICAgICAg
IGVsc2UgewpAQCAtMTY2NCw3ICsxNjY0LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6c2V0R2xv
YmFsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFIKICAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxl
OgotICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3Jt
YXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOworICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFi
aWxpdHkgPT0gV2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIGlmIChBcmc6Omlz
VmFsaWRBZGRyRm9ybShvZmZzZXQsIEIzOjpXaWR0aDY0KSkKICAgICAgICAgICAgIGFwcGVuZChN
b3ZlLCBBcmc6OmFkZHIodGVtcCwgb2Zmc2V0KSwgdGVtcCk7CiAgICAgICAgIGVsc2UgewpAQCAt
MzIyOSw3ICszMjI5LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkVHJ5KEJsb2NrU2lnbmF0
dXJlIHNpZ25hdHVyZSwgU3RhY2smIGVuY2xvc2luZ1N0YWNrLCBDb24KICAgICByZXR1cm4geyB9
OwogfQogCi1hdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFN0YWNrJiBjdXJyZW50U3RhY2ssIENv
bnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cith
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29u
c3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJv
bFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAg
ICB1bmlmeVZhbHVlc1dpdGhCbG9jayhjdXJyZW50U3RhY2ssIGRhdGEucmVzdWx0cyk7CiAgICAg
YXBwZW5kKEp1bXApOwpAQCAtMzI0NSwxMSArMzI0NSwxMSBAQCBhdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaEFsbChTdGFjayYgY3VycmVudFN0YWNrLCBDb250cm9sVHlwZSYgZGF0YSkgLT4g
UGFydAogICAgIHJldHVybiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUoZGF0YSk7CiB9CiAKLWF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9y
OjphZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5
cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiBy
ZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgVG1wIGJ1ZmZlciA9IGVtaXRDYXRjaElt
cGwoQ2F0Y2hLaW5kOjpDYXRjaCwgZGF0YSwgZXhjZXB0aW9uSW5kZXgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAg
ICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291
bnQoKTsgKytpKSB7CisgICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpOwogICAgICAgICBUeXBlZFRtcCB0bXAgPSB0bXBG
b3JUeXBlKHR5cGUpOwogICAgICAgICBlbWl0TG9hZChidWZmZXIsIGkgKiBzaXplb2YodWludDY0
X3QpLCB0bXApOwogICAgICAgICByZXN1bHRzLmFwcGVuZCh0bXApOwpAQCAtMzQxOSw3ICszNDE5
LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xEYXRhJiBk
YXRhLCBjb25zdCBTdGFjayYgcmV0dXJuVmFsdWUKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VS
VChyZXAuaXNSZWcoKSk7Ci0gICAgICAgIGlmIChkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBl
KGkpLmlzSTMyKCkpCisgICAgICAgIGlmIChkYXRhLnNpZ25hdHVyZSgpLT5hczxGdW5jdGlvblNp
Z25hdHVyZT4oKS0+cmV0dXJuVHlwZShpKS5pc0kzMigpKQogICAgICAgICAgICAgYXBwZW5kKE1v
dmUzMiwgdG1wLCB0bXApOwogICAgICAgICByZXR1cm5Db25zdHJhaW50cy5hcHBlbmQoQ29uc3Ry
YWluZWRUbXAodG1wLCB3YXNtQ2FsbEluZm8ucmVzdWx0c1tpXSkpOwogICAgIH0KQEAgLTM1NTUs
MTcgKzM1NTUsMTcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShD
b250cm9sRW50cnkmIGVudHJ5LCBjb25zdCBTdGFjayYgZXhwcmUKIAogICAgIGlmIChkYXRhLmJs
b2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkgewogICAgICAgICBtX291dGVyTG9vcHMucmVt
b3ZlTGFzdCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1
cmUoKS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291
bnQoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoaSA8IGV4cHJlc3Npb25TdGFjay5zaXplKCkp
CiAgICAgICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suYXBwZW5kKGV4
cHJlc3Npb25TdGFja1tpXSk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBU
eXBlIHR5cGUgPSBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAgICAg
ICAgIFR5cGUgdHlwZSA9IGRhdGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
LT5yZXR1cm5UeXBlKGkpOwogICAgICAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZCh0eXBlLCBhZGRCb3R0b20obV9jdXJyZW50QmxvY2ss
IHR5cGUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgp
OyArK2kpCi0gICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1
Y3RBbmRBcHBlbmQoZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKSwgZGF0YS5yZXN1bHRz
W2ldKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2lnbmF0dXJlKCkt
PmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAg
ICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoZGF0YS5z
aWduYXR1cmUoKS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVyblR5cGUoaSksIGRhdGEu
cmVzdWx0c1tpXSk7CiAgICAgfQogCiAgICAgLy8gVG9wTGV2ZWwgZG9lcyBub3QgaGF2ZSBhbnkg
Y29kZSBhZnRlciB0aGlzIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGVtaXQgYSByZXR1cm4g
aGVyZS4KQEAgLTM1NzUsNyArMzU3NSw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZEVuZFRv
VW5yZWFjaGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgY29uc3QgU3RhY2smIGV4cHJlCiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotc3RkOjpwYWlyPEIzOjpQYXRjaHBvaW50VmFsdWUqLCBQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlPiBBaXJJUkdlbmVyYXRvcjo6ZW1pdENhbGxQYXRjaHBvaW50KEJh
c2ljQmxvY2sqIGJsb2NrLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgUmVzdWx0
TGlzdCYgcmVzdWx0cywgY29uc3QgVmVjdG9yPFR5cGVkVG1wPiYgYXJncywgVmVjdG9yPENvbnN0
cmFpbmVkVG1wPiBwYXRjaEFyZ3MpCitzdGQ6OnBhaXI8QjM6OlBhdGNocG9pbnRWYWx1ZSosIFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IEFpcklSR2VuZXJhdG9yOjplbWl0Q2FsbFBhdGNocG9p
bnQoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIGNv
bnN0IFJlc3VsdExpc3QmIHJlc3VsdHMsIGNvbnN0IFZlY3RvcjxUeXBlZFRtcD4mIGFyZ3MsIFZl
Y3RvcjxDb25zdHJhaW5lZFRtcD4gcGF0Y2hBcmdzKQogewogICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KHRvQjNSZXN1bHRUeXBlKCZzaWduYXR1cmUpKTsKICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLndyaXRlc1Bpbm5lZCA9IHRydWU7CkBAIC0zNjA1LDE0ICszNjA1LDE0IEBA
IHN0ZDo6cGFpcjxCMzo6UGF0Y2hwb2ludFZhbHVlKiwgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZT4gQWlySVJHZW5lcmF0b3I6OmVtaXRDCiAgICAgcmV0dXJuIHsgcGF0Y2hwb2ludCwgZXhjZXB0
aW9uSGFuZGxlIH07CiB9CiAKLWF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3Qg
ZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNz
aW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3Qg
VHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywg
UmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIEFTU0VSVChzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKKyAgICBBU1NFUlQoc2lnbmF0
dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXpl
KCkpOwogCiAgICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQotICAgICAgICByZXN1bHRzLmFw
cGVuZCh0bXBGb3JUeXBlKHNpZ25hdHVyZS5yZXR1cm5UeXBlKGkpKSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJu
Q291bnQoKTsgKytpKQorICAgICAgICByZXN1bHRzLmFwcGVuZCh0bXBGb3JUeXBlKHNpZ25hdHVy
ZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuVHlwZShpKSkpOwogCiAgICAgVmVjdG9y
PFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscyA9ICZtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzOwogCkBAIC0zNzA4LDEwICszNzA4LDEwIEBAIGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRv
cjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1
bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFy
dGlhbFJlc3VsdAogewogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZUluZGV4ID0gYXJncy50YWtl
TGFzdCgpOwotICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6
ZSgpKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1
bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogICAgIEFTU0VSVChtX2luZm8udGFibGVDb3Vu
dCgpID4gdGFibGVJbmRleCk7CiAgICAgQVNTRVJUKG1faW5mby50YWJsZXNbdGFibGVJbmRleF0u
dHlwZSgpID09IFRhYmxlRWxlbWVudFR5cGU6OkZ1bmNyZWYpOwogCkBAIC0zNzYxLDcgKzM3NjEs
NyBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJ
bmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhl
IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYg
aXQgaXNuJ3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3Qg
aW5pdGlhbGl6ZWQuCiAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVy
cywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFs
aWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3
MjEwCi0gICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVu
Y3Rpb246OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2Vu
IGFzc3VtZXMgaTY0Iik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb246OnR5cGVJbmRleCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkxvYWQg
Y29kZWdlbiBhc3N1bWVzIGk2NCIpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdh
c3RlZnVsIHRvIGRvIHR3byBjaGVja3MganVzdCBmb3IgYSBuaWNlciBlcnJvciBtZXNzYWdlLgog
ICAgICAgICAvLyBXZSBzaG91bGQgbW92ZSBqdXN0IHRvIHVzZSBhIHNpbmdsZSBicmFuY2ggYW5k
IHRoZW4gZmlndXJlIG91dCB3aGF0CkBAIC0zNzcwLDE0ICszNzcwLDE0IEBAIGF1dG8gQWlySVJH
ZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hCiAgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmFkZHIoY2FsbGVlU2lnbmF0
dXJlSW5kZXgsIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9mU2lnbmF0dXJl
SW5kZXgoKSksIGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKIAogICAgICAgICBlbWl0Q2hlY2soWyZd
IHsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggPT0g
MCk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KCFUeXBlRGVmaW5pdGlvbjo6aW52YWxpZElu
ZGV4LCAiIik7CiAgICAgICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hUZXN0NjQsIG51bGxwdHIs
IEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIGNhbGxlZVNpZ25hdHVyZUluZGV4
LCBjYWxsZWVTaWduYXR1cmVJbmRleCk7CiAgICAgICAgIH0sIFs9LCB0aGlzXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CiAgICAgICAg
ICAgICB0aGlzLT5lbWl0VGhyb3dFeGNlcHRpb24oaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFi
bGVFbnRyeSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIEV4cHJlc3Npb25UeXBlIGV4cGVjdGVk
U2lnbmF0dXJlSW5kZXggPSBnNjQoKTsKLSAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6YmlnSW1t
KFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSksIGV4cGVjdGVkU2lnbmF0dXJl
SW5kZXgpOworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpiaWdJbW0oVHlwZUluZm9ybWF0aW9u
OjpnZXQoc2lnbmF0dXJlKSksIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOwogICAgICAgICBlbWl0
Q2hlY2soWyZdIHsKICAgICAgICAgICAgIHJldHVybiBJbnN0KEJyYW5jaDY0LCBudWxscHRyLCBB
cmc6OnJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsKSwgY2FsbGVlU2lnbmF0dXJlSW5k
ZXgsIGV4cGVjdGVkU2lnbmF0dXJlSW5kZXgpOwogICAgICAgICB9LCBbPSwgdGhpc10gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewpAQCAt
Mzc5MSw3ICszNzkxLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVu
c2lnbmVkIHRhYmxlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmEKICAgICByZXR1cm4gZW1p
dEluZGlyZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwgc2lnbmF0dXJlLCBhcmdz
LCByZXN1bHRzKTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbFJlZihjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0
TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAorYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRk
Q2FsbFJlZihjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lv
blR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgbV9tYWtlc0NhbGxzID0gdHJ1ZTsKICAgICAvLyBOb3RlOiBjYWxsIHJlZiBjYW4gY2FsbCBl
aXRoZXIgV2ViQXNzZW1ibHlGdW5jdGlvbiBvciBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi4g
QmVjYXVzZQpAQCAtMzgxOSw3ICszODE5LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2Fs
bFJlZihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXAKICAg
ICByZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwgc2ln
bmF0dXJlLCBhcmdzLCByZXN1bHRzKTsKIH0KIAotYXV0byBBaXJJUkdlbmVyYXRvcjo6ZW1pdElu
ZGlyZWN0Q2FsbChUeXBlZFRtcCBjYWxsZWVJbnN0YW5jZSwgRXhwcmVzc2lvblR5cGUgY2FsbGVl
Q29kZSwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9u
VHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8g
QWlySVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVHlwZWRUbXAgY2FsbGVlSW5zdGFuY2Us
IEV4cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1
cmUsIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3Vs
dHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBhdXRvIGN1cnJlbnRJbnN0YW5jZSA9IGc2NCgp
OwogICAgIGFwcGVuZChNb3ZlLCBpbnN0YW5jZVZhbHVlKCksIGN1cnJlbnRJbnN0YW5jZSk7CkBA
IC0zODczLDggKzM4NzMsOCBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxs
KFR5cGVkVG1wIGNhbGxlZUluc3RhbmNlLCBFeHByZXNzaW9uVHlwZSBjYQogICAgIFZlY3RvcjxD
b25zdHJhaW5lZFRtcD4gZXh0cmFBcmdzOwogICAgIGV4dHJhQXJncy5hcHBlbmQoY2FsbGVlQ29k
ZSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLnJldHVybkNvdW50
KCk7ICsraSkKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQodG1wRm9yVHlwZShzaWduYXR1cmUucmV0
dXJuVHlwZShpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXM8
RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgcmVzdWx0
cy5hcHBlbmQodG1wRm9yVHlwZShzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJl
dHVyblR5cGUoaSkpKTsKIAogICAgIGF1dG8gcGFpciA9IGVtaXRDYWxsUGF0Y2hwb2ludChtX2N1
cnJlbnRCbG9jaywgc2lnbmF0dXJlLCByZXN1bHRzLCBhcmdzLCBXVEZNb3ZlKGV4dHJhQXJncykp
OwogICAgIGF1dG8qIHBhdGNocG9pbnQgPSBwYWlyLmZpcnN0OwpAQCAtMzk0NCw3ICszOTQ0LDcg
QEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6b3JpZ2luKCkgLT4gQjM6Ok9yaWdpbgogICAgIHJldHVy
biBCMzo6T3JpZ2luKCk7CiB9CiAKLUV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVBaXIoQ29tcGlsYXRpb25Db250ZXh0JiBj
b21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYgZnVuY3Rpb24sIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlu
a2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVtb3J5
TW9kZSBtb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogdGllclVwKQor
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNl
QW5kQ29tcGlsZUFpcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXBpbGF0aW9uQ29udGV4dCwgY29u
c3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVy
ZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxs
cywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIE1lbW9yeU1vZGUgbW9kZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgVGllclVwQ291bnQqIHRpZXJVcCkKIHsKICAgICBhdXRvIHJlc3Vs
dCA9IG1ha2VVbmlxdWU8SW50ZXJuYWxGdW5jdGlvbj4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuaAppbmRleCAwYjhlZjQwYTBmNjQzMzYz
NDIzNTBhODU1ZDk0MWVhYTNjMTNiZTVlLi4wZTdiNTU1YmM4ZGE3MWE5YmVkNDlmMmYzM2ZjZDg1
MmU2OWE0YTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWly
SVJHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJH
ZW5lcmF0b3IuaApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20gewogCi1FeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0
cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0
aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QgZnVuY3Rp
b25JbmRleCwgVGllclVwQ291bnQqID0gbnVsbHB0cik7CitFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQWlyKENvbXBpbGF0
aW9uQ29udGV4dCYsIGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24m
LCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBUaWVyVXBDb3VudCogPSBudWxs
cHRyKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDU3MGRmMzZmYjI0OWFm
OTNlZTA5ZTQ1NWVkY2VkMDEwNTAzOWZmOWIuLjM3NTQyNjE1N2Q4OGFkMzk3OTE2YzNkMTYyZWRm
NzIwYThlYmI0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKQEAgLTYzLDggKzYzLDggQEAKICNpbmNsdWRlICJXYXNtT1NSRW50cnlE
YXRhLmgiCiAjaW5jbHVkZSAiV2FzbU9wY29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIldhc21PcGVy
YXRpb25zLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJX
YXNtVGh1bmtzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTEwMywx
NCArMTAzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHR5cGUg
IT0gQmxvY2tUeXBlOjpUcnkgJiYgdHlwZSAhPSBCbG9ja1R5cGU6OkNhdGNoKTsKICAgICAgICAg
ICAgIGlmICh0eXBlICE9IEJsb2NrVHlwZTo6VG9wTGV2ZWwpCi0gICAgICAgICAgICAgICAgbV9z
dGFja1NpemUgLT0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICAgICAg
bV9zdGFja1NpemUgLT0gc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1l
bnRDb3VudCgpOwogCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBCbG9ja1R5cGU6Okxvb3ApIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLT5hcmd1
bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5h
ZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5hcmd1bWVudChpKSksIG9yaWdpbikp
OworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPmFz
PEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0
dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpKSwgb3JpZ2luKSk7
CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkKLSAgICAgICAgICAgICAgICAg
ICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5y
ZXR1cm5UeXBlKGkpKSwgb3JpZ2luKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50
KCk7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcGhpcy5hcHBlbmQocHJvYy5hZGQ8VmFsdWU+
KFBoaSwgdG9CM1R5cGUoc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJu
VHlwZShpKSksIG9yaWdpbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEyMyw4
ICsxMjMsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAsIG1fdHJ5U3RhcnQodHJ5U3RhcnQpCiAg
ICAgICAgICAgICAsIG1fdHJ5Q2F0Y2hEZXB0aCh0cnlEZXB0aCkKICAgICAgICAgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsg
KytpKQotICAgICAgICAgICAgICAgIHBoaXMuYXBwZW5kKHByb2MuYWRkPFZhbHVlPihQaGksIHRv
QjNUeXBlKHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpKSksIG9yaWdpbikpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+
KCktPnJldHVybkNvdW50KCk7ICsraSkKKyAgICAgICAgICAgICAgICBwaGlzLmFwcGVuZChwcm9j
LmFkZDxWYWx1ZT4oUGhpLCB0b0IzVHlwZShzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5yZXR1cm5UeXBlKGkpKSwgb3JpZ2luKSk7CiAgICAgICAgIH0KIAogICAgICAgICBDb250
cm9sRGF0YSgpCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogCiAgICAgICAgIEJsb2NrU2ln
bmF0dXJlIHNpZ25hdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmF0dXJlOyB9CiAKLSAgICAg
ICAgYm9vbCBoYXNOb25Wb2lkcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUtPnJl
dHVybnNWb2lkKCk7IH0KKyAgICAgICAgYm9vbCBoYXNOb25Wb2lkcmVzdWx0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5zVm9pZCgp
OyB9CiAKICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2tGb3JCcmFuY2goKQogICAgICAg
ICB7CkBAIC0yMTEsMTkgKzIxMSwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2V4Y2VwdGlv
biA9IGV4Y2VwdGlvbjsKICAgICAgICAgfQogCi0gICAgICAgIFNpZ25hdHVyZUFyZ0NvdW50IGJy
YW5jaFRhcmdldEFyaXR5KCkgY29uc3QKKyAgICAgICAgRnVuY3Rpb25BcmdDb3VudCBicmFuY2hU
YXJnZXRBcml0eSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChibG9ja1R5cGUo
KSA9PSBCbG9ja1R5cGU6Okxvb3ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJl
LT5hcmd1bWVudENvdW50KCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPnJldHVy
bkNvdW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hczxGdW5jdGlv
blNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOworICAgICAgICAgICAgcmV0dXJuIG1fc2ln
bmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKTsKICAgICAgICAg
fQogCiAgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBjb25zdAogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5KCkpOwogICAg
ICAgICAgICAgaWYgKGJsb2NrVHlwZSgpID09IEJsb2NrVHlwZTo6TG9vcCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOwotICAgICAgICAgICAgcmV0dXJu
IG1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpOworICAgICAgICAgICAgICAgIHJldHVybiBtX3Np
Z25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVy
blR5cGUoaSk7CiAgICAgICAgIH0KIAogICAgICAgICB1bnNpZ25lZCB0cnlTdGFydCgpIGNvbnN0
CkBAIC0zMDUsNyArMzA1LDcgQEAgcHVibGljOgogCiAgICAgQjNJUkdlbmVyYXRvcihjb25zdCBN
b2R1bGVJbmZvcm1hdGlvbiYsIFByb2NlZHVyZSYsIEludGVybmFsRnVuY3Rpb24qLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVy
U2l6ZSwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4
LCB1bnNpZ25lZCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQqKTsKIAotICAgIFBh
cnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBTaWduYXR1
cmUmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMo
Y29uc3QgVHlwZURlZmluaXRpb24mKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7CiAgICAgRXhwcmVzc2lvblR5cGUgYWRkQ29u
c3RhbnQoVHlwZSwgdWludDY0X3QpOwogCkBAIC0zNzEsOCArMzcxLDggQEAgcHVibGljOgogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEVsc2VUb1VucmVhY2hhYmxlKENv
bnRyb2xEYXRhJik7CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRU
cnkoQmxvY2tTaWduYXR1cmUsIFN0YWNrJiBlbmNsb3NpbmdTdGFjaywgQ29udHJvbFR5cGUmIHJl
c3VsdCwgU3RhY2smIG5ld1N0YWNrKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiwg
U3RhY2smLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaFRvVW5yZWFjaGFibGUodW5zaWduZWQgZXhjZXB0aW9u
SW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhdGNoKHVuc2lnbmVkIGV4Y2Vw
dGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBS
ZXN1bHRMaXN0Jik7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0
Y2hUb1VucmVhY2hhYmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5p
dGlvbiYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZENhdGNoQWxsKFN0YWNrJiwgQ29udHJvbFR5cGUmKTsKICAgICBQ
YXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbFRvVW5yZWFjaGFibGUo
Q29udHJvbFR5cGUmKTsKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRE
ZWxlZ2F0ZShDb250cm9sVHlwZSYsIENvbnRyb2xUeXBlJik7CkBAIC0zODksMTIgKzM4OSwxMiBA
QCBwdWJsaWM6CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gZW5kVG9wTGV2
ZWwoQmxvY2tTaWduYXR1cmUsIGNvbnN0IFN0YWNrJikgeyByZXR1cm4geyB9OyB9CiAKICAgICAv
LyBDYWxscwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwodWlu
dDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlw
ZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9V
TlVTRURfUkVUVVJOIGFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBjb25zdCBT
aWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1
bHRzKTsKLSAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsUmVmKGNv
bnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3Qm
IHJlc3VsdHMpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGwo
dWludDMyX3QgY2FsbGVlSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgs
IGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVz
dWx0TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
YWRkQ2FsbFJlZihjb25zdCBUeXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4m
IGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZFVucmVhY2hhYmxlKCk7Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNF
RF9SRVRVUk4gZW1pdEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBj
YWxsZWVDb2RlLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBSZXN1bHRMaXN0Jik7Ci0gICAgQjM6OlZhbHVlKiBjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNp
Y0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBjb25zdCBTY29wZWRMYW1iZGE8dm9pZChQYXRjaHBvaW50VmFsdWUqLCBCb3g8UGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4pPiYgcGF0Y2hwb2ludEZ1bmN0b3IpOworICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxl
ZUluc3RhbmNlLCBWYWx1ZSogY2FsbGVlQ29kZSwgY29uc3QgVHlwZURlZmluaXRpb24mLCBWZWN0
b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0Jik7CisgICAgQjM6OlZhbHVlKiBj
cmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2NrKiwgT3JpZ2luLCBjb25zdCBUeXBlRGVmaW5p
dGlvbiYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIGNvbnN0IFNjb3BlZExhbWJkYTx2
b2lkKFBhdGNocG9pbnRWYWx1ZSosIEJveDxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPik+JiBw
YXRjaHBvaW50RnVuY3Rvcik7CiAKICAgICB2b2lkIGR1bXAoY29uc3QgQ29udHJvbFN0YWNrJiwg
Y29uc3QgU3RhY2sqIGV4cHJlc3Npb25TdGFjayk7CiAgICAgdm9pZCBzZXRQYXJzZXIoRnVuY3Rp
b25QYXJzZXI8QjNJUkdlbmVyYXRvcj4qIHBhcnNlcikgeyBtX3BhcnNlciA9IHBhcnNlcjsgfTsK
QEAgLTg2OSwxNiArODY5LDE2IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6aW5zZXJ0Q29uc3RhbnRz
KCkKIAogQjM6OlR5cGUgQjNJUkdlbmVyYXRvcjo6dG9CM1Jlc3VsdFR5cGUoQmxvY2tTaWduYXR1
cmUgcmV0dXJuVHlwZSkKIHsKLSAgICBpZiAocmV0dXJuVHlwZS0+cmV0dXJuc1ZvaWQoKSkKKyAg
ICBpZiAocmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybnNWb2lkKCkp
CiAgICAgICAgIHJldHVybiBCMzo6Vm9pZDsKIAotICAgIGlmIChyZXR1cm5UeXBlLT5yZXR1cm5D
b3VudCgpID09IDEpCi0gICAgICAgIHJldHVybiB0b0IzVHlwZShyZXR1cm5UeXBlLT5yZXR1cm5U
eXBlKDApKTsKKyAgICBpZiAocmV0dXJuVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJl
dHVybkNvdW50KCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHRvQjNUeXBlKHJldHVyblR5cGUtPmFz
PEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKDApKTsKIAogICAgIGF1dG8gcmVzdWx0
ID0gbV90dXBsZU1hcC5lbnN1cmUocmV0dXJuVHlwZSwgWyZdIHsKICAgICAgICAgVmVjdG9yPEIz
OjpUeXBlPiByZXN1bHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXR1cm5U
eXBlLT5yZXR1cm5Db3VudCgpOyArK2kpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvQjNU
eXBlKHJldHVyblR5cGUtPnJldHVyblR5cGUoaSkpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJldHVyblR5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3Vu
dCgpOyArK2kpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvQjNUeXBlKHJldHVyblR5cGUt
PmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpKSk7CiAgICAgICAgIHJldHVy
biBtX3Byb2MuYWRkVHVwbGUoV1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKICAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKQEAgLTkwMCwxNiArOTAwLDE2IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkTG9jYWwoVHlwZSB0eXBlLCB1aW50MzJfdCBjb3VudCkgLT4gUGFydGlhbFJl
c3VsdAogICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQXJndW1l
bnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZEFyZ3VtZW50cyhjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJl
KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgQVNTRVJUKCFtX2xvY2Fscy5zaXplKCkpOwotICAg
IFdBU01fQ09NUElMRV9GQUlMX0lGKCFtX2xvY2Fscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIsIHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCksICIgYXJndW1lbnRzIik7CisgICAgV0FTTV9DT01QSUxFX0ZB
SUxfSUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaWduYXR1cmUuYXM8RnVuY3Rpb25T
aWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9y
ICIsIHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpLCAi
IGFyZ3VtZW50cyIpOwogCi0gICAgbV9sb2NhbHMuZ3JvdyhzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpKTsKKyAgICBtX2xvY2Fscy5ncm93KHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBDYWxsSW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0g
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSwgQ2Fs
bFJvbGU6OkNhbGxlZSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAgICBCMzo6VHlwZSB0eXBlID0gdG9CM1R5cGUo
c2lnbmF0dXJlLmFyZ3VtZW50KGkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25h
dHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgQjM6OlR5cGUgdHlwZSA9IHRvQjNUeXBlKHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25h
dHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpKTsKICAgICAgICAgQjM6OlZhbHVlKiBhcmd1bWVudDsK
ICAgICAgICAgYXV0byByZXAgPSB3YXNtQ2FsbEluZm8ucGFyYW1zW2ldOwogICAgICAgICBpZiAo
cmVwLmlzUmVnKCkpIHsKQEAgLTEwOTYsNyArMTA5Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkVW5yZWFjaGFibGUoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
YXV0byBCM0lSR2VuZXJhdG9yOjplbWl0SW5kaXJlY3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5j
ZSwgVmFsdWUqIGNhbGxlZUNvZGUsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVz
dWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUlu
c3RhbmNlLCBWYWx1ZSogY2FsbGVlQ29kZSwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVy
ZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4g
UGFydGlhbFJlc3VsdAogewogICAgIC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgog
ICAgIHsKQEAgLTExNzAsNyArMTE3MCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW1pdEluZGly
ZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLCBjCiAgICAg
fQogICAgIGNhc2UgQjM6OlR1cGxlOiB7CiAgICAgICAgIGNvbnN0IFZlY3RvcjxCMzo6VHlwZT4m
IHR1cGxlID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1cm5UeXBlKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+
KCktPnJldHVybkNvdW50KCk7ICsraSkKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHB1c2go
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxFeHRyYWN0VmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHR1cGxlW2ldLCBjYWxsUmVzdWx0LCBpKSkpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0x
MzAzLDcgKzEzMDMsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmdldEdsb2JhbCh1aW50MzJfdCBp
bmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbAogICAgICAgICByZXN1bHQg
PSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBvcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBzYWZlQ2Fz
dDxpbnQzMl90PihpbmRleCAqIHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTog
ewotICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3Jt
YXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpOworICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFi
aWxpdHkgPT0gV2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIFZhbHVlKiBwb2lu
dGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
LCBCMzo6SW50NjQsIG9yaWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGlu
ZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xv
YmFsLnR5cGUpLCBvcmlnaW4oKSwgcG9pbnRlcikpOwogICAgICAgICBicmVhazsKQEAgLTEzMjQs
NyArMTMyNCw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkgLT4gUGFydGlhbFJlCiAgICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2FzbTo6
R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewotICAgICAgICBBU1NF
UlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxp
dHk6Ok11dGFibGUpOworICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6
TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6SW50NjQsIG9y
aWdpbigpLCBnbG9iYWxzQXJyYXksIHNhZmVDYXN0PGludDMyX3Q+KGluZGV4ICogc2l6ZW9mKFJl
Z2lzdGVyKSkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgZ2V0KHZhbHVlKSwgcG9pbnRlcik7CiAgICAgICAg
IC8vIFdlIGVtaXQgYSB3cml0ZS1iYXJyaWVyIG9udG8gSlNXZWJBc3NlbWJseUdsb2JhbCwgbm90
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZS4KQEAgLTI0MTMsOCArMjQxMyw4IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkTG9vcChCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIFN0YWNrJiBlbmNsb3Np
bmdTdGFjaywgQ29uCiAKICAgICBibG9jayA9IENvbnRyb2xEYXRhKG1fcHJvYywgb3JpZ2luKCks
IHNpZ25hdHVyZSwgQmxvY2tUeXBlOjpMb29wLCBtX3N0YWNrU2l6ZSwgY29udGludWF0aW9uLCBi
b2R5KTsKIAotICAgIHVuc2lnbmVkIG9mZnNldCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAtIHNp
Z25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0g
ZW5jbG9zaW5nU3RhY2suc2l6ZSgpIC0gc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4o
KS0+YXJndW1lbnRDb3VudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1
cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAg
ICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWUgPSBlbmNsb3NpbmdTdGFjay5hdChvZmZzZXQgKyBp
KTsKICAgICAgICAgVmFsdWUqIHBoaSA9IGJsb2NrLnBoaXNbaV07CiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBnZXQodmFs
dWUpLCBwaGkpOwpAQCAtMjUxNCw3ICsyNTE0LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRF
bHNlKENvbnRyb2xEYXRhJiBkYXRhLCBjb25zdCBTdGFjayYgY3VycmVudFN0YWNrKSAtPiBQYXIK
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkRWxzZVRvVW5yZWFjaGFibGUoQ29udHJvbERhdGEmIGRh
dGEpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBBU1NFUlQoZGF0YS5ibG9ja1R5cGUoKSA9PSBC
bG9ja1R5cGU6OklmKTsKLSAgICBtX3N0YWNrU2l6ZSA9IGRhdGEuc3RhY2tTaXplKCkgKyBkYXRh
Lm1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CisgICAgbV9zdGFja1NpemUgPSBkYXRhLnN0
YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFy
Z3VtZW50Q291bnQoKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IGRhdGEuc3BlY2lhbDsKICAgICBk
YXRhLmNvbnZlcnRJZlRvQmxvY2soKTsKICAgICByZXR1cm4geyB9OwpAQCAtMjUzMCw3ICsyNTMw
LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUcnkoQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJl
LCBTdGFjayYgZW5jbG9zaW5nU3RhY2ssIENvbnQKICAgICByZXR1cm4geyB9OwogfQogCi1hdXRv
IEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBT
aWduYXR1cmUmIHNpZ25hdHVyZSwgU3RhY2smIGN1cnJlbnRTdGFjaywgQ29udHJvbFR5cGUmIGRh
dGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0
aW9uJiBzaWduYXR1cmUsIFN0YWNrJiBjdXJyZW50U3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBS
ZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgdW5pZnlWYWx1ZXNX
aXRoQmxvY2soY3VycmVudFN0YWNrLCBkYXRhKTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGRhdGEuY29udGludWF0aW9u
KTsKQEAgLTI1NjQsMTIgKzI1NjQsMTIgQEAgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSBCM0lS
R2VuZXJhdG9yOjpwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoQmFzaWNCbG8KICAgICBy
ZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSB7IG1fY2FsbFNpdGVJbmRleCwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGxpdmVWYWx1ZXMuc2l6ZSgpKSB9OwogfQogCi1hdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiBy
ZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhdGNoVG9V
bnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24m
IHNpZ25hdHVyZSwgQ29udHJvbFR5cGUmIGRhdGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICBWYWx1ZSogb3BlcmF0aW9uUmVzdWx0ID0gZW1pdENhdGNoSW1w
bChDYXRjaEtpbmQ6OkNhdGNoLCBkYXRhLCBleGNlcHRpb25JbmRleCk7CiAgICAgVmFsdWUqIHBh
eWxvYWQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgcG9pbnRlclR5cGUoKSwgb3BlcmF0aW9uUmVzdWx0LCAxKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAg
ICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudChpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENv
dW50KCk7ICsraSkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXM8RnVuY3Rpb25T
aWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShpKTsKICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlw
ZSh0eXBlKSwgb3JpZ2luKCksIHBheWxvYWQsIGkgKiBzaXplb2YodWludDY0X3QpKTsKICAgICAg
ICAgcmVzdWx0cy5hcHBlbmQocHVzaCh2YWx1ZSkpOwogICAgIH0KQEAgLTI3OTAsNyArMjc5MCw3
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6ZW5kQmxvY2soQ29udHJvbEVudHJ5JiBlbnRyeSwgU3Rh
Y2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGFyCiB7CiAgICAgQ29udHJvbERhdGEmIGRhdGEgPSBl
bnRyeS5jb250cm9sRGF0YTsKIAotICAgIEFTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09
IGRhdGEuc2lnbmF0dXJlKCktPnJldHVybkNvdW50KCkpOworICAgIEFTU0VSVChleHByZXNzaW9u
U3RhY2suc2l6ZSgpID09IGRhdGEuc2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
LT5yZXR1cm5Db3VudCgpKTsKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBCbG9ja1R5cGU6
Okxvb3ApCiAgICAgICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGV4cHJlc3Npb25TdGFjaywgZGF0
YSk7CiAKQEAgLTI4MTMsMTkgKzI4MTMsMTkgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRU
b1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXMKICAg
ICAgICAgLS1tX3RyeUNhdGNoRGVwdGg7CiAKICAgICBpZiAoZGF0YS5ibG9ja1R5cGUoKSAhPSBC
bG9ja1R5cGU6Okxvb3ApIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEu
c2lnbmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJl
dHVybkNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IGRhdGEucGhp
c1tpXTsKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAg
ICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChk
YXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpLCBwdXNoKHJlc3VsdCkpOworICAgICAgICAg
ICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGRhdGEu
c2lnbmF0dXJlKCktPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5UeXBlKGkpLCBwdXNo
KHJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9vdXRlckxvb3Bz
LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2ln
bmF0dXJlKCktPnJldHVybkNvdW50KCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGF0YS5zaWduYXR1cmUoKS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVy
bkNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGkgPCBleHByZXNzaW9uU3RhY2suc2l6
ZSgpKSB7CiAgICAgICAgICAgICAgICAgKyttX3N0YWNrU2l6ZTsKICAgICAgICAgICAgICAgICBl
bnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsK
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVHlwZSByZXR1cm5UeXBlID0g
ZGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuVHlwZShpKTsKKyAgICAgICAgICAgICAgICBUeXBlIHJl
dHVyblR5cGUgPSBkYXRhLnNpZ25hdHVyZSgpLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0
dXJuVHlwZShpKTsKICAgICAgICAgICAgICAgICBlbnRyeS5lbmNsb3NlZEV4cHJlc3Npb25TdGFj
ay5jb25zdHJ1Y3RBbmRBcHBlbmQocmV0dXJuVHlwZSwgcHVzaChjb25zdGFudCh0b0IzVHlwZShy
ZXR1cm5UeXBlKSwgMHhiYmFkYmVlZikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
Mjg0MCw3ICsyODQwLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRFbmRUb1VucmVhY2hhYmxl
KENvbnRyb2xFbnRyeSYgZW50cnksIGNvbnN0IFN0YWNrJiBleHByZXMKIH0KIAogCi1CMzo6VmFs
dWUqIEIzSVJHZW5lcmF0b3I6OmNyZWF0ZUNhbGxQYXRjaHBvaW50KEJhc2ljQmxvY2sqIGJsb2Nr
LCBPcmlnaW4gb3JpZ2luLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoUGF0Y2hwb2ludFZhbHVl
KiwgQm94PFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+KT4mIHBhdGNocG9pbnRGdW5jdG9yKQor
QjM6OlZhbHVlKiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2ludChCYXNpY0Jsb2Nr
KiBibG9jaywgT3JpZ2luIG9yaWdpbiwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgY29uc3QgU2NvcGVkTGFtYmRhPHZvaWQoUGF0
Y2hwb2ludFZhbHVlKiwgQm94PFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+KT4mIHBhdGNocG9p
bnRGdW5jdG9yKQogewogICAgIFZlY3RvcjxCMzo6Q29uc3RyYWluZWRWYWx1ZT4gY29uc3RyYWlu
ZWRBcmd1bWVudHM7CiAgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21DYWxs
aW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcihzaWduYXR1cmUpOwpAQCAtMjg3MCw5
ICsyODcwLDkgQEAgQjM6OlZhbHVlKiBCM0lSR2VuZXJhdG9yOjpjcmVhdGVDYWxsUGF0Y2hwb2lu
dChCYXNpY0Jsb2NrKiBibG9jaywgT3JpZ2luIG9yaWdpbiwKICAgICByZXR1cm4gcGF0Y2hwb2lu
dDsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBh
cmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRp
b24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYg
cmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKKyAgICBBU1NFUlQoc2lnbmF0dXJlLmFzPEZ1bmN0
aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkgPT0gYXJncy5zaXplKCkpOwogCiAgICAg
bV9tYWtlc0NhbGxzID0gdHJ1ZTsKICAgICBCMzo6VHlwZSByZXR1cm5UeXBlID0gdG9CM1Jlc3Vs
dFR5cGUoJnNpZ25hdHVyZSk7CkBAIC0yODg2LDggKzI4ODYsOCBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBCMzo6VHVwbGU6IHsKICAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxCMzo6VHlwZT4mIHR1cGxlID0gbV9wcm9jLnR1cGxlRm9yVHlwZShyZXR1
cm5UeXBlKTsKLSAgICAgICAgICAgIEFTU0VSVChzaWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSB0
dXBsZS5zaXplKCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25h
dHVyZS5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgICAgICBBU1NFUlQoc2lnbmF0dXJlLmFz
PEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpID09IHR1cGxlLnNpemUoKSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9u
U2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpOyArK2kpCiAgICAgICAgICAgICAgICAgcmVzdWx0
cy5hcHBlbmQocHVzaChtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEV4dHJhY3RWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgdHVwbGVbaV0sIGNhbGxSZXN1bHQsIGkpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMjk5NCwxMCArMjk5NCwxMCBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZENhbGwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxs
SW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUs
IFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBh
cnRpYWxSZXN1bHQKK2F1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVk
IHRhYmxlSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQK
IHsKICAgICBWYWx1ZSogY2FsbGVlSW5kZXggPSBnZXQoYXJncy50YWtlTGFzdCgpKTsKLSAgICBB
U1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisgICAgQVNT
RVJUKHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpID09
IGFyZ3Muc2l6ZSgpKTsKIAogICAgIG1fbWFrZXNDYWxscyA9IHRydWU7CiAgICAgLy8gTm90ZTog
Y2FsbCBpbmRpcmVjdCBjYW4gY2FsbCBlaXRoZXIgV2ViQXNzZW1ibHlGdW5jdGlvbiBvciBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi4gQmVjYXVzZQpAQCAtMzA0MCwxMyArMzA0MCwxMyBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdAogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIFdhc21U
b1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIFdlIHRyYXAgaWYgaXQgaXNu
J3QuIEFuICJpbnZhbGlkIiBTaWduYXR1cmVJbmRleCBpbmRpY2F0ZXMgaXQncyBub3QgaW5pdGlh
bGl6ZWQuCiAgICAgICAgIC8vIEZJWE1FOiB3aGVuIHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2Ug
Y2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRl
eCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCi0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246
OnNpZ25hdHVyZUluZGV4KSA9PSBzaXplb2YodWludDY0X3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3Vt
ZXMgaTY0Iik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OnR5cGVJbmRleCkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgIkxvYWQgY29kZWdl
biBhc3N1bWVzIGk2NCIpOwogICAgICAgICBWYWx1ZSogY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0
LCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZTaWduYXR1cmVJbmRleCgpKSk7CiAgICAgICAg
IHsKICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4o
KSwKICAgICAgICAgICAgICAgICAgICAgY2FsbGVlU2lnbmF0dXJlSW5kZXgsCi0gICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCBTaWduYXR1cmU6OmludmFsaWRJbmRleCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIFR5cGVEZWZpbml0aW9uOjppbnZhbGlkSW5kZXgpKSk7CiAKICAgICAgICAgICAgIGNoZWNr
LT5zZXRHZW5lcmF0b3IoWz0sIHRoaXNdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKICAgICAgICAgICAgICAgICB0aGlzLT5lbWl0RXhj
ZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7CkBAIC0zMDU1
LDcgKzMwNTUsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25l
ZCB0YWJsZUluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdAogCiAgICAgICAgIC8vIENoZWNr
IHRoZSBzaWduYXR1cmUgbWF0Y2hlcyB0aGUgdmFsdWUgd2UgZXhwZWN0LgogICAgICAgICB7Ci0g
ICAgICAgICAgICBWYWx1ZSogZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpOworICAgICAgICAgICAgVmFsdWUqIGV4cGVjdGVkU2ln
bmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9w
cm9jLCBvcmlnaW4oKSwgVHlwZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSk7CiAgICAgICAg
ICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tW
YWx1ZT4obV9wcm9jLCBDaGVjaywgb3JpZ2luKCksCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBOb3RFcXVhbCwgb3JpZ2luKCksIGNhbGxl
ZVNpZ25hdHVyZUluZGV4LCBleHBlY3RlZFNpZ25hdHVyZUluZGV4KSk7CiAKQEAgLTMwNzYsMTAg
KzMwNzYsMTAgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQg
dGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXQKICAgICByZXR1cm4gZW1pdEluZGly
ZWN0Q2FsbChjYWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwgc2lnbmF0dXJlLCBhcmdzLCByZXN1
bHRzKTsKIH0KIAotYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiBy
ZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxSZWYo
Y29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYg
YXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAogewogICAgIFZhbHVl
KiBjYWxsZWUgPSBnZXQoYXJncy50YWtlTGFzdCgpKTsKLSAgICBBU1NFUlQoc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKHNpZ25hdHVyZS5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKICAg
ICBtX21ha2VzQ2FsbHMgPSB0cnVlOwogCiAgICAgLy8gTm90ZTogY2FsbCByZWYgY2FuIGNhbGwg
ZWl0aGVyIFdlYkFzc2VtYmx5RnVuY3Rpb24gb3IgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
IEJlY2F1c2UKQEAgLTMxNzMsNyArMzE3Myw3IEBAIHN0YXRpYyBib29sIHNob3VsZER1bXBJUkZv
cih1aW50MzJfdCBmdW5jdGlvbkluZGV4KQogICAgIHJldHVybiBkdW1wQWxsb3dsaXN0LT5zaG91
bGREdW1wV2FzbUZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpOwogfQogCi1FeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQjMoQ29t
cGlsYXRpb25Db250ZXh0JiBjb21waWxhdGlvbkNvbnRleHQsIGNvbnN0IEZ1bmN0aW9uRGF0YSYg
ZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCBDb21waWxhdGlvbk1vZGUgY29tcGlsYXRpb25N
b2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRy
eSwgVGllclVwQ291bnQqIHRpZXJVcCkKK0V4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVCMyhDb21waWxhdGlvbkNvbnRleHQm
IGNvbXBpbGF0aW9uQ29udGV4dCwgY29uc3QgRnVuY3Rpb25EYXRhJiBmdW5jdGlvbiwgY29uc3Qg
VHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8s
IE1lbW9yeU1vZGUgbW9kZSwgQ29tcGlsYXRpb25Nb2RlIGNvbXBpbGF0aW9uTW9kZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENv
dW50KiB0aWVyVXApCiB7CiAgICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEludGVybmFsRnVu
Y3Rpb24+KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5oCmluZGV4IGMxZTNkOWI2ZTJhN2JiNjNiNWM5NGQ0MWZiY2Y2MjliY2UwMWNkZmIuLjcw
MGI1YzA1ODNhNTRjMzVjM2Y2MzEwMTc2ZWRmNGNmODBmNDA4OGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaApAQCAtNTcsNyArNTcsNyBAQCBz
dHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBCb3g8UENUb0NvZGVPcmlnaW5NYXA+IHBj
VG9Db2RlT3JpZ2luTWFwOwogfTsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFs
RnVuY3Rpb24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZUIzKENvbXBpbGF0aW9uQ29udGV4dCYs
IGNvbnN0IEZ1bmN0aW9uRGF0YSYsIGNvbnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29t
cGlsYXRpb25Nb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhG
b3JPU1JFbnRyeSwgVGllclVwQ291bnQqID0gbnVsbHB0cik7CitFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4sIFN0cmluZz4gcGFyc2VBbmRDb21waWxlQjMoQ29tcGls
YXRpb25Db250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgVHlwZURlZmluaXRpb24m
LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlv
biYsIE1lbW9yeU1vZGUsIENvbXBpbGF0aW9uTW9kZSwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwg
dWludDMyX3QgbG9vcEluZGV4Rm9yT1NSRW50cnksIFRpZXJVcENvdW50KiA9IG51bGxwdHIpOwog
CiB2b2lkIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChDb21waWxhdGlvbkNvbnRleHQmLCBMaW5r
QnVmZmVyJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApp
bmRleCAzMTc4NjY1MjcwN2M4NGJmMjkxZWQwNzM4ODAyNTVmNzVkNjc1ZWMwLi44ZTE4YTc3MjIz
MjBhNGNiZDRlZTBlOGMyM2I3NzQyNWZmZDJhMDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0zNyw4ICszNyw4IEBACiAjaW5jbHVkZSAiV2FzbUNh
bGxlZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
V2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50LmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZp
bml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3Rm
L0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTEyMyw4ICsxMjMs
OCBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgIGNv
bXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChjb250ZXh0LCBsaW5rQnVmZmVyKTsKIAogICAgIHNpemVf
dCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX2Z1bmN0aW9uSW5kZXggKyBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCk7Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJl
SW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5k
aWNlc1ttX2Z1bmN0aW9uSW5kZXhdOwotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0g
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgVHlwZUluZGV4
IHR5cGVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25UeXBlSW5k
aWNlc1ttX2Z1bmN0aW9uSW5kZXhdOworICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1
cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBlSW5kZXgpOwogICAgIGZ1bmN0aW9uLT5lbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgIEZJ
TkFMSVpFX1dBU01fQ09ERV9GT1JfTU9ERShDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGxpbmtC
dWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJRIGZ1bmN0aW9uWyVp
XSAlcyBuYW1lICVzIiwgbV9mdW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSwgbWFrZVN0cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkp
LmFzY2lpKCkuZGF0YSgpKSwKICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50
Qnlwcm9kdWN0cykpOwpAQCAtMTkyLDggKzE5Miw4IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1
bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiAKICAgICBpZiAobV9leHBvcnRlZEZ1bmN0
aW9uSW5kaWNlcy5jb250YWlucyhmdW5jdGlvbkluZGV4KSB8fCBtX21vZHVsZUluZm9ybWF0aW9u
LT5yZWZlcmVuY2VkRnVuY3Rpb25zKCkuY29udGFpbnMoZnVuY3Rpb25JbmRleCkpIHsKICAgICAg
ICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAg
ICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5j
dGlvblR5cGVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBUeXBlRGVmaW5p
dGlvbiYgc2lnbmF0dXJlID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKIAogICAg
ICAgICBtX2NvbXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0uZW1iZWRkZXJFbnRyeXBv
aW50SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAgICAgICAgIGF1dG8gZW1iZWRk
ZXJUb1dhc21JbnRlcm5hbEZ1bmN0aW9uID0gY3JlYXRlSlNUb1dhc21XcmFwcGVyKCptX2NvbXBp
bGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0uZW1iZWRkZXJFbnRyeXBvaW50SklULCBzaWdu
YXR1cmUsICZtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVs
ZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIGZ1bmN0aW9uSW5kZXgpOwpAQCAtMjA3LDEwICsy
MDcsMTAgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25J
bmRleCkKIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBCQlFQbGFuOjpjb21waWxl
RnVuY3Rpb24odWludDMyX3QgZnVuY3Rpb25JbmRleCwgQ29tcGlsYXRpb25Db250ZXh0JiBjb250
ZXh0LCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBUaWVyVXBDb3VudCogdGllclVwKQogewogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9uID0g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdOwotICAgIFNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxG
dW5jdGlvblNpZ25hdHVyZUluZGljZXNbZnVuY3Rpb25JbmRleF07Ci0gICAgY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KTsKKyAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJu
YWxGdW5jdGlvblR5cGVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgIGNvbnN0IFR5cGVEZWZp
bml0aW9uJiBzaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBlSW5kZXgpOwogICAg
IHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9y
dEZ1bmN0aW9uQ291bnQoKSArIGZ1bmN0aW9uSW5kZXg7Ci0gICAgQVNTRVJUX1VOVVNFRChmdW5j
dGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24tPnNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09IHNpZ25hdHVyZUluZGV4KTsK
KyAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4U3BhY2UpID09
IHR5cGVJbmRleCk7CiAgICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdDsKIAogICAgIC8vIEZJWE1FOiBTb21l
IHdlYnBhZ2VzIHVzZSB2ZXJ5IGxhcmdlIFdhc20gbW9kdWxlLCBhbmQgaXQgZXhoYXVzdHMgYWxs
IGV4ZWN1dGFibGUgbWVtb3J5IGluIEFSTTY0IGRldmljZXMgc2luY2UgdGhlIHNpemUgb2YgZXhl
Y3V0YWJsZSBtZW1vcnkgcmVnaW9uIGlzIG9ubHkgbGltaXRlZCB0byAxMjhNQi4KQEAgLTI0NCw4
ICsyNDQsOCBAQCB2b2lkIEJCUVBsYW46OmRpZENvbXBsZXRlQ29tcGlsYXRpb24oKQogewogICAg
IGZvciAodWludDMyX3QgZnVuY3Rpb25JbmRleCA9IDA7IGZ1bmN0aW9uSW5kZXggPCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5mdW5jdGlvbnMuc2l6ZSgpOyBmdW5jdGlvbkluZGV4KyspIHsKICAgICAg
ICAgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0ID0gbV9jb21waWxhdGlvbkNvbnRleHRzW2Z1
bmN0aW9uSW5kZXhdOwotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1f
bW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW2Z1bmN0
aW9uSW5kZXhdOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVy
ZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBUeXBlSW5kZXggdHlw
ZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW50ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2Vz
W2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJl
ID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKICAgICAgICAgY29uc3QgdWludDMy
X3QgZnVuY3Rpb25JbmRleFNwYWNlID0gZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRp
b24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7CiAg
ICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxs
ZWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWUuaAppbmRleCA2ZWY2
NjQ3ZTJmNDM3N2M2YzBjMWY4MTdkZmM5MjQ0Y2ZkYjg4MTJjLi5kOGFkZjRiMTMwZmE0ZTg0YWZh
NjgyZmUwN2IzM2IxZjVkYjZmMzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ2FsbGVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNh
bGxlZS5oCkBAIC0yNjUsNyArMjY1LDcgQEAgcHVibGljOgogCiAgICAgTExJbnRUaWVyVXBDb3Vu
dGVyJiB0aWVyVXBDb3VudGVyKCkgeyByZXR1cm4gbV90aWVyVXBDb3VudGVyOyB9CiAKLSAgICBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICBjb25z
dCBGdW5jdGlvblNpZ25hdHVyZSYgc2lnbmF0dXJlKHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuICptX3NpZ25hdHVyZXNbaW5kZXhdOwogICAgIH0KQEAgLTMwNCw3
ICszMDQsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW5zdHJ1Y3Rpb25T
dHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25zUmF3
UG9pbnRlciB7IG51bGxwdHIgfTsKICAgICBGaXhlZFZlY3RvcjxXYXNtSW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldD4gbV9qdW1wVGFyZ2V0czsKLSAgICBGaXhlZFZlY3Rvcjxjb25zdCBTaWduYXR1
cmUqPiBtX3NpZ25hdHVyZXM7CisgICAgRml4ZWRWZWN0b3I8Y29uc3QgRnVuY3Rpb25TaWduYXR1
cmUqPiBtX3NpZ25hdHVyZXM7CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVK
dW1wVGFyZ2V0czsKICAgICBMTEludFRpZXJVcENvdW50ZXIgbV90aWVyVXBDb3VudGVyOwogICAg
IEZpeGVkVmVjdG9yPEp1bXBUYWJsZT4gbV9qdW1wVGFibGVzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAppbmRleCA1OTFlZWIyN2Iw
MTY5MDA3YWZhMTgzZDQzMjcyOWZhMGNhNTZhZDgxLi40Mjg4ZjgwMWRlMWJlMzRiMzg5NWJhZjJm
M2FjNTUxZWM0OGFiNTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIlJlZ2lz
dGVyQXRPZmZzZXRMaXN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKICNpbmNsdWRlICJX
YXNtRm9ybWF0LmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZS5oIgorI2luY2x1ZGUgIldhc21U
eXBlRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldhc21WYWx1ZUxvY2F0aW9uLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CkBAIC0xMjAsOCArMTIwLDkgQEAgcHJpdmF0ZToK
ICAgICB9CiAKIHB1YmxpYzoKLSAgICBDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9y
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9sZSByb2xlID0gQ2FsbFJvbGU6OkNh
bGxlcikgY29uc3QKKyAgICBDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0
IFR5cGVEZWZpbml0aW9uJiB0eXBlLCBDYWxsUm9sZSByb2xlID0gQ2FsbFJvbGU6OkNhbGxlcikg
Y29uc3QKICAgICB7CisgICAgICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9ICp0eXBlLmFzPEZ1
bmN0aW9uU2lnbmF0dXJlPigpOwogICAgICAgICBib29sIGFyZ3VtZW50c0luY2x1ZGVJNjQgPSBm
YWxzZTsKICAgICAgICAgYm9vbCByZXN1bHRzSW5jbHVkZUk2NCA9IGZhbHNlOwogICAgICAgICBz
aXplX3QgZ3BBcmd1bWVudENvdW50ID0gMDsKQEAgLTEzMiw4ICsxMzMsOCBAQCBwdWJsaWM6CiAK
ICAgICAgICAgVmVjdG9yPEFyZ3VtZW50TG9jYXRpb24+IHBhcmFtcyhzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgIGFyZ3VtZW50c0luY2x1ZGVJNjQgfD0g
c2lnbmF0dXJlLmFyZ3VtZW50KGkpLmlzSTY0KCk7Ci0gICAgICAgICAgICBwYXJhbXNbaV0gPSBt
YXJzaGFsbExvY2F0aW9uKHJvbGUsIHNpZ25hdHVyZS5hcmd1bWVudChpKSwgZ3BBcmd1bWVudENv
dW50LCBmcEFyZ3VtZW50Q291bnQsIGFyZ1N0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIGFyZ3Vt
ZW50c0luY2x1ZGVJNjQgfD0gc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKS5pc0k2NCgpOworICAg
ICAgICAgICAgcGFyYW1zW2ldID0gbWFyc2hhbGxMb2NhdGlvbihyb2xlLCBzaWduYXR1cmUuYXJn
dW1lbnRUeXBlKGkpLCBncEFyZ3VtZW50Q291bnQsIGZwQXJndW1lbnRDb3VudCwgYXJnU3RhY2tP
ZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAg
IGZwQXJndW1lbnRDb3VudCA9IDA7CkBAIC0yMTAsNyArMjExLDcgQEAgcHJpdmF0ZToKICAgICB9
CiAKIHB1YmxpYzoKLSAgICBDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBDYWxsUm9sZSByb2xlID0gQ2FsbFJvbGU6OkNhbGxlZSkg
Y29uc3QKKyAgICBDYWxsSW5mb3JtYXRpb24gY2FsbEluZm9ybWF0aW9uRm9yKGNvbnN0IFR5cGVE
ZWZpbml0aW9uJiBzaWduYXR1cmUsIENhbGxSb2xlIHJvbGUgPSBDYWxsUm9sZTo6Q2FsbGVlKSBj
b25zdAogICAgIHsKICAgICAgICAgc2l6ZV90IGdwQXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAg
IHNpemVfdCBmcEFyZ3VtZW50Q291bnQgPSAwOwpAQCAtMjE5LDggKzIyMCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHN0YWNrT2Zmc2V0IC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKIAog
ICAgICAgICBWZWN0b3I8QXJndW1lbnRMb2NhdGlvbj4gcGFyYW1zOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAg
ICAgIHBhcmFtcy5hcHBlbmQobWFyc2hhbGxMb2NhdGlvbihyb2xlLCBzaWduYXR1cmUuYXJndW1l
bnQoaSksIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFja09mZnNldCkpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25h
dHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBwYXJhbXMuYXBwZW5k
KG1hcnNoYWxsTG9jYXRpb24ocm9sZSwgc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
LT5hcmd1bWVudFR5cGUoaSksIGdwQXJndW1lbnRDb3VudCwgZnBBcmd1bWVudENvdW50LCBzdGFj
a09mZnNldCkpOwogCiAgICAgICAgIFZlY3RvcjxBcmd1bWVudExvY2F0aW9uLCAxPiByZXN1bHRz
IHsgQXJndW1lbnRMb2NhdGlvbjo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSB9OwogICAg
ICAgICByZXR1cm4gQ2FsbEluZm9ybWF0aW9uKFdURk1vdmUocGFyYW1zKSwgV1RGTW92ZShyZXN1
bHRzKSwgc3RhY2tPZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUVtYmVkZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRk
ZXIuaAppbmRleCA5OTBlNDZmNDM4MTNhMTRiZjRhMTFmMDkyMTA4Yzk1MTE1Zjc0YjQ2Li4yNDE4
NWFiODZlNTllMmYyMDM0MTRiOTU0ZTgxNGNmMjhmZjc1NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRW1iZWRkZXIuaApAQCAtNDUsMTEgKzQ1LDExIEBAIHN0cnVjdCBDb21w
aWxhdGlvbkNvbnRleHQ7CiBjbGFzcyBJbnN0YW5jZTsKIHN0cnVjdCBJbnRlcm5hbEZ1bmN0aW9u
Owogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwotY2xhc3MgU2lnbmF0dXJlOworY2xhc3MgVHlw
ZURlZmluaXRpb247CiBzdHJ1Y3QgVW5saW5rZWRXYXNtVG9XYXNtQ2FsbDsKIAogLy8gQ3JlYXRl
IHdyYXBwZXIgY29kZSB0byBjYWxsIGZyb20gZW1iZWRkZXIgLT4gV2ViQXNzZW1ibHkuCi11c2lu
ZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJ
bnRlcm5hbEZ1bmN0aW9uPihDQ2FsbEhlbHBlcnMmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIE1lbW9y
eU1vZGUsIHVpbnQzMl90KT47Cit1c2luZyBDcmVhdGVFbWJlZGRlcldyYXBwZXIgPSBXVEY6OkZ1
bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPihDQ2FsbEhlbHBlcnMmLCBj
b25zdCBUeXBlRGVmaW5pdGlvbiYsIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiosIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgdWludDMyX3QpPjsKIAogLy8gQ2Fs
bGVkIGFzIHNvb24gYXMgYW4gZXhjZXB0aW9uIGlzIGRldGVjdGVkLiBUaGUgcmV0dXJuIHZhbHVl
IGlzIHRoZSBQQyB0byBjb250aW51ZSBhdC4KIHVzaW5nIFRocm93V2FzbUV4Y2VwdGlvbiA9IHZv
aWQqICgqKShDYWxsRnJhbWUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBJbnN0YW5jZSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUVudHJ5UGxhbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRW50cnlQbGFuLmNwcAppbmRleCA0MTEwZjRl
N2QwMTQxYWMwNDNiMTUyYmE1NTEzYjlmZmI2NDk3M2M3Li43NmJmM2FiYmM3ODM4MjM2Yjk4YzVi
NWVlYmUxNDJhMjczZThkZGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRW50cnlQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RW50cnlQbGFuLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgRW50cnlQbGFuOjpwcmVwYXJl
KCkKIAogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9ucyA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmZ1
bmN0aW9uczsKICAgICBtX251bWJlck9mRnVuY3Rpb25zID0gZnVuY3Rpb25zLnNpemUoKTsKLSAg
ICBpZiAoIXRyeVJlc2VydmVDYXBhY2l0eShtX3dhc21Ub1dhc21FeGl0U3R1YnMsIG1fbW9kdWxl
SW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCksICIgV2Vi
QXNzZW1ibHkgdG8gSmF2YVNjcmlwdCBzdHVicyIpCisgICAgaWYgKCF0cnlSZXNlcnZlQ2FwYWNp
dHkobV93YXNtVG9XYXNtRXhpdFN0dWJzLCBtX21vZHVsZUluZm9ybWF0aW9uLT5pbXBvcnRGdW5j
dGlvblR5cGVJbmRpY2VzLnNpemUoKSwgIiBXZWJBc3NlbWJseSB0byBKYXZhU2NyaXB0IHN0dWJz
IikKICAgICAgICAgfHwgIXRyeVJlc2VydmVDYXBhY2l0eShtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBmdW5jdGlvbnMuc2l6ZSgpLCAiIHVubGlua2VkIFdlYkFzc2VtYmx5IHRvIFdlYkFzc2Vt
Ymx5IGNhbGxzIikpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCmluZGV4IDk3MDYzYWFiOWU2YjdmNTYwZmUyOGQ1NDIwNjBjNTJiODg0NmU1
ZDkuLmFjZTg1N2ZkMjBiZjlmOTA1ZGQ0OGQ1MmU3MTVkOTNiMmQ2ODc2ZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRl
ICJXYXNtT1NSRW50cnlEYXRhLmgiCiAjaW5jbHVkZSAiV2FzbU9wcy5oIgogI2luY2x1ZGUgIldh
c21QYWdlQ291bnQuaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCisjaW5jbHVkZSAiV2Fz
bVR5cGVEZWZpbml0aW9uLmgiCiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxsaW1pdHM+
CiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtNTQsNyArNTQsNyBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25D
b250ZXh0Owogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogc3RydWN0IFVubGlua2VkSGFuZGxl
ckluZm87CiAKLXVzaW5nIEJsb2NrU2lnbmF0dXJlID0gY29uc3QgU2lnbmF0dXJlKjsKK3VzaW5n
IEJsb2NrU2lnbmF0dXJlID0gY29uc3QgVHlwZURlZmluaXRpb24qOwogCiBlbnVtIGNsYXNzIFRh
YmxlRWxlbWVudFR5cGUgOiB1aW50OF90IHsKICAgICBFeHRlcm5yZWYsCkBAIC0xMDUsMjggKzEw
NSwyOCBAQCBpbmxpbmUgYm9vbCBpc1JlZlR5cGUoVHlwZSB0eXBlKQogaW5saW5lIGJvb2wgaXNF
eHRlcm5yZWYoVHlwZSB0eXBlKQogewogICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseVR5
cGVkRnVuY3Rpb25SZWZlcmVuY2VzKCkpCi0gICAgICAgIHJldHVybiBpc1JlZlR5cGUodHlwZSkg
JiYgdHlwZS5pbmRleCA9PSBzdGF0aWNfY2FzdDxTaWduYXR1cmVJbmRleD4oVHlwZUtpbmQ6OkV4
dGVybnJlZik7CisgICAgICAgIHJldHVybiBpc1JlZlR5cGUodHlwZSkgJiYgdHlwZS5pbmRleCA9
PSBzdGF0aWNfY2FzdDxUeXBlSW5kZXg+KFR5cGVLaW5kOjpFeHRlcm5yZWYpOwogICAgIHJldHVy
biB0eXBlLmtpbmQgPT0gVHlwZUtpbmQ6OkV4dGVybnJlZjsKIH0KIAogaW5saW5lIGJvb2wgaXNG
dW5jcmVmKFR5cGUgdHlwZSkKIHsKICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBl
ZEZ1bmN0aW9uUmVmZXJlbmNlcygpKQotICAgICAgICByZXR1cm4gaXNSZWZUeXBlKHR5cGUpICYm
IHR5cGUuaW5kZXggPT0gc3RhdGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+KFR5cGVLaW5kOjpGdW5j
cmVmKTsKKyAgICAgICAgcmV0dXJuIGlzUmVmVHlwZSh0eXBlKSAmJiB0eXBlLmluZGV4ID09IHN0
YXRpY19jYXN0PFR5cGVJbmRleD4oVHlwZUtpbmQ6OkZ1bmNyZWYpOwogICAgIHJldHVybiB0eXBl
LmtpbmQgPT0gVHlwZUtpbmQ6OkZ1bmNyZWY7CiB9CiAKIGlubGluZSBUeXBlIGZ1bmNyZWZUeXBl
KCkKIHsKICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJl
bmNlcygpKQotICAgICAgICByZXR1cm4gV2FzbTo6VHlwZSB7IFdhc206OlR5cGVLaW5kOjpSZWZO
dWxsLCBXYXNtOjpOdWxsYWJsZTo6WWVzLCBzdGF0aWNfY2FzdDxXYXNtOjpTaWduYXR1cmVJbmRl
eD4oV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWYpIH07CisgICAgICAgIHJldHVybiBXYXNtOjpUeXBl
IHsgV2FzbTo6VHlwZUtpbmQ6OlJlZk51bGwsIFdhc206Ok51bGxhYmxlOjpZZXMsIHN0YXRpY19j
YXN0PFdhc206OlR5cGVJbmRleD4oV2FzbTo6VHlwZUtpbmQ6OkZ1bmNyZWYpIH07CiAgICAgcmV0
dXJuIFR5cGVzOjpGdW5jcmVmOwogfQogCiBpbmxpbmUgVHlwZSBleHRlcm5yZWZUeXBlKCkKIHsK
ICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcygp
KQotICAgICAgICByZXR1cm4gV2FzbTo6VHlwZSB7IFdhc206OlR5cGVLaW5kOjpSZWZOdWxsLCBX
YXNtOjpOdWxsYWJsZTo6WWVzLCBzdGF0aWNfY2FzdDxXYXNtOjpTaWduYXR1cmVJbmRleD4oV2Fz
bTo6VHlwZUtpbmQ6OkV4dGVybnJlZikgfTsKKyAgICAgICAgcmV0dXJuIFdhc206OlR5cGUgeyBX
YXNtOjpUeXBlS2luZDo6UmVmTnVsbCwgV2FzbTo6TnVsbGFibGU6Olllcywgc3RhdGljX2Nhc3Q8
V2FzbTo6VHlwZUluZGV4PihXYXNtOjpUeXBlS2luZDo6RXh0ZXJucmVmKSB9OwogICAgIHJldHVy
biBUeXBlczo6RXh0ZXJucmVmOwogfQogCkBAIC0yMzgsMTEgKzIzOCw2IEBAIFN0cmluZyBtYWtl
U3RyaW5nKGNvbnN0IE5hbWUmIGNoYXJhY3RlcnMpOwogCiBzdHJ1Y3QgR2xvYmFsSW5mb3JtYXRp
b24gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKLSAgICBlbnVtIE11dGFi
aWxpdHkgOiB1aW50OF90IHsKLSAgICAgICAgLy8gRklYTUUgYXV0by1nZW5lcmF0ZSB0aGlzLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MjMxCi0gICAgICAgIE11
dGFibGUgPSAxLAotICAgICAgICBJbW11dGFibGUgPSAwCi0gICAgfTsKIAogICAgIGVudW0gSW5p
dGlhbGl6YXRpb25UeXBlIDogdWludDhfdCB7CiAgICAgICAgIElzSW1wb3J0LApAQCAtNDU2LDEx
ICs0NTEsMTEgQEAgc3RydWN0IEludGVybmFsRnVuY3Rpb24gewogc3RydWN0IFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb24gewogICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsK
ICAgICB1c2luZyBMb2FkTG9jYXRpb24gPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5
UHRyVGFnPio7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpZ25hdHVyZUluZGV4KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24sIHNp
Z25hdHVyZUluZGV4KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaWduYXR1cmVJ
bmRleCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uLCB0eXBlSW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9p
bnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbiwgZW50cnlwb2ludExvYWRMb2NhdGlvbik7IH0KIAotICAgIC8vIEZJWE1F
OiBQYWNrIHNpZ25hdHVyZSBpbmRleCBhbmQgY29kZSBwb2ludGVyIGludG8gb25lIDY0LWJpdCB2
YWx1ZS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTEx
Pi4KLSAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCB7IFNpZ25hdHVyZTo6aW52YWxp
ZEluZGV4IH07CisgICAgLy8gRklYTUU6IFBhY2sgdHlwZSBpbmRleCBhbmQgY29kZSBwb2ludGVy
IGludG8gb25lIDY0LWJpdCB2YWx1ZS4gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1NTExPi4KKyAgICBUeXBlSW5kZXggdHlwZUluZGV4IHsgVHlwZURlZmlu
aXRpb246OmludmFsaWRJbmRleCB9OwogICAgIExvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExv
Y2F0aW9uOwogfTsKIHVzaW5nIEZ1bmN0aW9uSW5kZXhTcGFjZSA9IFZlY3RvcjxXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3IuY3BwCmluZGV4IDMxZWUy
MTVkZWRmNzgxODAxMTVmZDI0ZmJhNmZhM2Y5NzJiODNhOWUuLjBjNmY3OWI2YzE5OWJkOWFmNDgw
YTU5M2ZjYzE0NTQyOTAyYTNlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmNwcApAQCAtNTEs
NyArNTEsNyBAQCBXYXNtSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBGdW5jdGlvbkNvZGVCbG9j
a0dlbmVyYXRvcjo6b3V0T2ZMaW5lSnVtcE9mZnNldChXYQogICAgIHJldHVybiBtX291dE9mTGlu
ZUp1bXBUYXJnZXRzLmdldChieXRlY29kZU9mZnNldCk7CiB9CiAKLXVuc2lnbmVkIEZ1bmN0aW9u
Q29kZUJsb2NrR2VuZXJhdG9yOjphZGRTaWduYXR1cmUoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUpCit1bnNpZ25lZCBGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2lnbmF0dXJlKGNv
bnN0IEZ1bmN0aW9uU2lnbmF0dXJlJiBzaWduYXR1cmUpCiB7CiAgICAgdW5zaWduZWQgaW5kZXgg
PSBtX3NpZ25hdHVyZXMuc2l6ZSgpOwogICAgIG1fc2lnbmF0dXJlcy5hcHBlbmQoJnNpZ25hdHVy
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25D
b2RlQmxvY2tHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oCmluZGV4IGExZTM5YTFlNmQ2MWVlMWIxZmViZTEwMmZi
ODJlMGY1ZTI3Zjg4YjcuLjQ4OWZlNjZjNTdmZTk3ZjJmZDRhZWNjY2ZmMWFkNjg3ODI0ZGIyMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVC
bG9ja0dlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvbkNvZGVCbG9ja0dlbmVyYXRvci5oCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIEJ5dGVjb2Rl
R2VuZXJhdG9yQmFzZTsKIG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgTExJbnRDYWxsZWU7Ci1j
bGFzcyBTaWduYXR1cmU7CitjbGFzcyBGdW5jdGlvblNpZ25hdHVyZTsKIHN0cnVjdCBHZW5lcmF0
b3JUcmFpdHM7CiAKIHN0cnVjdCBKdW1wVGFibGVFbnRyeSB7CkBAIC0xMTYsNyArMTE2LDcgQEAg
cHVibGljOgogCiAgICAgSGFzaE1hcDxXYXNtSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgTExJ
bnRUaWVyVXBDb3VudGVyOjpPU1JFbnRyeURhdGE+JiB0aWVyVXBDb3VudGVyKCkgeyByZXR1cm4g
bV90aWVyVXBDb3VudGVyOyB9CiAKLSAgICB1bnNpZ25lZCBhZGRTaWduYXR1cmUoY29uc3QgU2ln
bmF0dXJlJik7CisgICAgdW5zaWduZWQgYWRkU2lnbmF0dXJlKGNvbnN0IEZ1bmN0aW9uU2lnbmF0
dXJlJik7CiAKICAgICBKdW1wVGFibGUmIGFkZEp1bXBUYWJsZShzaXplX3QgbnVtYmVyT2ZFbnRy
aWVzKTsKICAgICB1bnNpZ25lZCBudW1iZXJPZkp1bXBUYWJsZXMoKSBjb25zdDsKQEAgLTE0MCw3
ICsxNDAsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW5zdHJ1Y3Rpb25T
dHJlYW0+IG1faW5zdHJ1Y3Rpb25zOwogICAgIGNvbnN0IHZvaWQqIG1faW5zdHJ1Y3Rpb25zUmF3
UG9pbnRlciB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8V2FzbUluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQ+IG1fanVtcFRhcmdldHM7Ci0gICAgVmVjdG9yPGNvbnN0IFNpZ25hdHVyZSo+IG1fc2ln
bmF0dXJlczsKKyAgICBWZWN0b3I8Y29uc3QgRnVuY3Rpb25TaWduYXR1cmUqPiBtX3NpZ25hdHVy
ZXM7CiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAg
ICBIYXNoTWFwPFdhc21JbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBMTEludFRpZXJVcENvdW50
ZXI6Ok9TUkVudHJ5RGF0YT4gbV90aWVyVXBDb3VudGVyOwogICAgIFZlY3RvcjxKdW1wVGFibGU+
IG1fanVtcFRhYmxlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmgKaW5kZXggOWJmOTY2M2M4YTM1ZmU3OTBmY2M0YmUxYmVkMWY3NDVkYTAxNTM3
NC4uZGIxYzlhZWY4MmQ2NWE1ODAxMjU0MjdjM2ZjMTUyOTQyN2ExZGQxZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTI4LDcgKzI4
LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJXYXNtUGFyc2VyLmgi
Ci0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURl
ZmluaXRpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTUwLDEwICs1MCwxMCBAQCBlbnVtIGNsYXNzIENh
dGNoS2luZCB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNsb3NpbmdTdGFjaywgdHlwZW5hbWUgTmV3
U3RhY2s+CiB2b2lkIHNwbGl0U3RhY2soQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBFbmNsb3Np
bmdTdGFjayYgZW5jbG9zaW5nU3RhY2ssIE5ld1N0YWNrJiBuZXdTdGFjaykKIHsKLSAgICBuZXdT
dGFjay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsK
LSAgICBBU1NFUlQoZW5jbG9zaW5nU3RhY2suc2l6ZSgpID49IHNpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpKTsKLSAgICB1bnNpZ25lZCBvZmZzZXQgPSBlbmNsb3NpbmdTdGFjay5zaXplKCkgLSBz
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICBuZXdTdGFjay5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50
Q291bnQoKSk7CisgICAgQVNTRVJUKGVuY2xvc2luZ1N0YWNrLnNpemUoKSA+PSBzaWduYXR1cmUt
PmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCkpOworICAgIHVuc2lnbmVk
IG9mZnNldCA9IGVuY2xvc2luZ1N0YWNrLnNpemUoKSAtIHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25T
aWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyAr
K2kpCiAgICAgICAgIG5ld1N0YWNrLnVuY2hlY2tlZEFwcGVuZChlbmNsb3NpbmdTdGFjay5hdChp
ICsgb2Zmc2V0KSk7CiAgICAgZW5jbG9zaW5nU3RhY2suc2hyaW5rKG9mZnNldCk7CiB9CkBAIC0x
MDEsMTMgKzEwMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIENvbnRyb2xUeXBlIGNvbnRyb2xEYXRh
OwogICAgIH07CiAKLSAgICBGdW5jdGlvblBhcnNlcihDb250ZXh0JiwgY29uc3QgdWludDhfdCog
ZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmLCBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYpOworICAgIEZ1bmN0aW9uUGFyc2VyKENvbnRleHQmLCBj
b25zdCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIGNvbnN0
IFR5cGVEZWZpbml0aW9uJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mKTsKIAogICAgIFJlc3Vs
dCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UoKTsKIAogICAgIE9wVHlwZSBjdXJyZW50T3Bjb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50T3Bjb2RlOyB9CiAgICAgc2l6ZV90IGN1cnJlbnRP
cGNvZGVTdGFydGluZ09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE9wY29kZVN0YXJ0
aW5nT2Zmc2V0OyB9Ci0gICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3NpZ25hdHVyZTsgfQorICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUo
KSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZTsgfQogCiAgICAgQ29udHJvbFN0YWNrJiBjb250
cm9sU3RhY2soKSB7IHJldHVybiBtX2NvbnRyb2xTdGFjazsgfQogICAgIFN0YWNrJiBleHByZXNz
aW9uU3RhY2soKSB7IHJldHVybiBtX2V4cHJlc3Npb25TdGFjazsgfQpAQCAtMjA5LDcgKzIwOSw3
IEBAIHByaXZhdGU6CiAgICAgU3RhY2sgbV9leHByZXNzaW9uU3RhY2s7CiAgICAgQ29udHJvbFN0
YWNrIG1fY29udHJvbFN0YWNrOwogICAgIFZlY3RvcjxUeXBlLCAxNj4gbV9sb2NhbHM7Ci0gICAg
Y29uc3QgU2lnbmF0dXJlJiBtX3NpZ25hdHVyZTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYg
bV9zaWduYXR1cmU7CiAgICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsKIAogICAg
IE9wVHlwZSBtX2N1cnJlbnRPcGNvZGU7CkBAIC0yMjYsNyArMjI2LDcgQEAgc3RhdGljIGJvb2wg
aXNUcnlPckNhdGNoKENvbnRyb2xUeXBlJiBkYXRhKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b250ZXh0PgotRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQm
IGNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxl
bmd0aCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9u
JiBpbmZvKQorRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OkZ1bmN0aW9uUGFyc2VyKENvbnRleHQm
IGNvbnRleHQsIGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxl
bmd0aCwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8pCiAgICAgOiBQYXJzZXIoZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgp
CiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2lnbmF0dXJlKHNpZ25hdHVyZSkK
QEAgLTI0MiwxNCArMjQyLDE1IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNl
KCkgLT4gUmVzdWx0CiB7CiAgICAgdWludDMyX3QgbG9jYWxHcm91cHNDb3VudDsKIAotICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1fY29udGV4dC5hZGRBcmd1bWVudHMobV9zaWduYXR1cmUpLCAi
Y2FuJ3QgYWRkICIsIG1fc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMgdG8g
RnVuY3Rpb24iKTsKKyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSAqbV9zaWduYXR1cmUuYXM8
RnVuY3Rpb25TaWduYXR1cmU+KCk7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9jb250ZXh0
LmFkZEFyZ3VtZW50cyhtX3NpZ25hdHVyZSksICJjYW4ndCBhZGQgIiwgc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSwgIiBhcmd1bWVudHMgdG8gRnVuY3Rpb24iKTsKICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhclVJbnQzMihsb2NhbEdyb3Vwc0NvdW50KSwgImNhbid0IGdldCBsb2Nh
bCBncm91cHMgY291bnQiKTsKIAotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1fbG9jYWxzLnRy
eVJlc2VydmVDYXBhY2l0eShtX3NpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3QgYWxs
b2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgZnVuY3Rpb24ncyAiLCBtX3NpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCksICIgYXJndW1lbnRzIik7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1f
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBtX2xvY2Fscy51bmNoZWNr
ZWRBcHBlbmQobV9zaWduYXR1cmUuYXJndW1lbnQoaSkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIW1fbG9jYWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGZ1bmN0aW9uJ3MgIiwgc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSwgIiBhcmd1bWVudHMiKTsKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICBtX2xvY2Fs
cy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpKSk7CiAKLSAgICB1aW50
NjRfdCB0b3RhbE51bWJlck9mTG9jYWxzID0gbV9zaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOwor
ICAgIHVpbnQ2NF90IHRvdGFsTnVtYmVyT2ZMb2NhbHMgPSBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpOwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsb2NhbEdyb3Vwc0NvdW50OyArK2kp
IHsKICAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZMb2NhbHM7CiAgICAgICAgIFR5cGUgdHlwZU9m
TG9jYWw7CkBAIC03MzIsOSArNzMzLDExIEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46
OmNoZWNrQnJhbmNoVGFyZ2V0KGNvbnN0IENvbnRyb2xUeXBlJiB0YXJnZXQpIC0+IFBhCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb250ZXh0PgogYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6dW5p
ZnkoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2xEYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0g
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJu
Q291bnQoKSAhPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgYmxvY2sgd2l0aCB0eXBlOiAi
LCBjb250cm9sRGF0YS5zaWduYXR1cmUoKS0+dG9TdHJpbmcoKSwgIiByZXR1cm5zOiAiLCBjb250
cm9sRGF0YS5zaWduYXR1cmUoKS0+cmV0dXJuQ291bnQoKSwgIiBidXQgc3RhY2sgaGFzOiAiLCBt
X2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgdmFsdWVzIik7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5Db3VudCgpOyArK2kpCi0g
ICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShtX2V4cHJlc3Npb25TdGFj
a1tpXS50eXBlKCksIGNvbnRyb2xEYXRhLnNpZ25hdHVyZSgpLT5yZXR1cm5UeXBlKGkpKSwgImNv
bnRyb2wgZmxvdyByZXR1cm5zIHdpdGggdW5leHBlY3RlZCB0eXBlLiAiLCBtX2V4cHJlc3Npb25T
dGFja1tpXS50eXBlKCkua2luZCwgIiBpcyBub3QgYSAiLCBjb250cm9sRGF0YS5zaWduYXR1cmUo
KS0+cmV0dXJuVHlwZShpKS5raW5kKTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiogdHlwZURl
ZmluaXRpb24gPSBjb250cm9sRGF0YS5zaWduYXR1cmUoKTsgLy8ganVzdCB0byBhdm9pZCBhIHdl
aXJkIGNvbXBpbGVyIGVycm9yIHdpdGggdGVtcGxhdGVzIGF0IHRoZSBuZXh0IGxpbmUuCisgICAg
Y29uc3QgRnVuY3Rpb25TaWduYXR1cmUqIHNpZ25hdHVyZSA9IHR5cGVEZWZpbml0aW9uLT5hczxG
dW5jdGlvblNpZ25hdHVyZT4oKTsKKyAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKHNpZ25hdHVy
ZS0+cmV0dXJuQ291bnQoKSAhPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIgYmxvY2sgd2l0
aCB0eXBlOiAiLCBzaWduYXR1cmUtPnRvU3RyaW5nKCksICIgcmV0dXJuczogIiwgc2lnbmF0dXJl
LT5yZXR1cm5Db3VudCgpLCAiIGJ1dCBzdGFjayBoYXM6ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSwgIiB2YWx1ZXMiKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJl
LT5yZXR1cm5Db3VudCgpOyArK2kpCisgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlz
U3VidHlwZShtX2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCksIHNpZ25hdHVyZS0+cmV0dXJuVHlw
ZShpKSksICJjb250cm9sIGZsb3cgcmV0dXJucyB3aXRoIHVuZXhwZWN0ZWQgdHlwZS4gIiwgbV9l
eHByZXNzaW9uU3RhY2tbaV0udHlwZSgpLmtpbmQsICIgaXMgbm90IGEgIiwgc2lnbmF0dXJlLT5y
ZXR1cm5UeXBlKGkpLmtpbmQpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTEwODIsMTAgKzEw
ODUsMTAgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAg
ICAgICAgICBpbnQzMl90IGhlYXBUeXBlOwogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VIZWFwVHlwZShtX2luZm8sIGhlYXBUeXBlKSwgInJlZi5udWxsIGhlYXB0eXBlIG11
c3QgYmUgZnVuY3JlZiwgZXh0ZXJucmVmIG9yIHR5cGVfaWR4Iik7CiAgICAgICAgICAgICBpZiAo
aXNUeXBlSW5kZXhIZWFwVHlwZShoZWFwVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBTaWduYXR1
cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQobV9pbmZv
LnVzZWRTaWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgdHlwZU9m
TnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6Olllcywgc2lnbmF0dXJl
SW5kZXggfTsKKyAgICAgICAgICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gVHlwZUluZm9y
bWF0aW9uOjpnZXQobV9pbmZvLnR5cGVTaWduYXR1cmVzW2hlYXBUeXBlXS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFi
bGU6OlllcywgdHlwZUluZGV4IH07CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICB0eXBlT2ZOdWxsID0gVHlwZSB7IFR5cGVLaW5kOjpSZWZOdWxsLCBOdWxsYWJsZTo6WWVzLCBz
dGF0aWNfY2FzdDxTaWduYXR1cmVJbmRleD4oaGVhcFR5cGUpIH07CisgICAgICAgICAgICAgICAg
dHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVsbGFibGU6Olllcywgc3Rh
dGljX2Nhc3Q8VHlwZUluZGV4PihoZWFwVHlwZSkgfTsKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlZlR5cGUobV9pbmZvLCB0eXBlT2ZOdWxs
KSwgInJlZi5udWxsIHR5cGUgbXVzdCBiZSBhIHJlZmVyZW5jZSB0eXBlIik7CiAgICAgICAgIG1f
ZXhwcmVzc2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZCh0eXBlT2ZOdWxsLCBtX2NvbnRleHQu
YWRkQ29uc3RhbnQodHlwZU9mTnVsbCwgSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOwpAQCAt
MTExMyw4ICsxMTE2LDggQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NB
U0UpCiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZFJlZkZ1bmMoaW5kZXgsIHJl
c3VsdCkpOwogCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rp
b25SZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7
Ci0gICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25zdHJ1Y3RBbmRBcHBlbmQoVHlwZSB7
IFR5cGVLaW5kOjpSZWYsIE51bGxhYmxlOjpObywgc2lnbmF0dXJlSW5kZXggfSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBtX2luZm8udHlwZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7CisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5j
b25zdHJ1Y3RBbmRBcHBlbmQoVHlwZSB7IFR5cGVLaW5kOjpSZWYsIE51bGxhYmxlOjpObywgdHlw
ZUluZGV4IH0sIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAK
QEAgLTExNzUsNyArMTE3OCw3IEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZX1NUT1JFX09QKENSRUFU
RV9DQVNFKQogICAgICAgICBUeXBlZEV4cHJlc3Npb24gdmFsdWU7CiAgICAgICAgIFdBU01fVFJZ
X1BPUF9FWFBSRVNTSU9OX1NUQUNLX0lOVE8odmFsdWUsICJzZXRfZ2xvYmFsIHZhbHVlIik7CiAg
ICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLmdsb2JhbHMuc2l6
ZSgpLCAic2V0X2dsb2JhbCAiLCBpbmRleCwgIiBvZiB1bmtub3duIGdsb2JhbCwgbGltaXQgaXMg
IiwgbV9pbmZvLmdsb2JhbHMuc2l6ZSgpKTsKLSAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
RihtX2luZm8uZ2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSA9PSBHbG9iYWxJbmZvcm1hdGlvbjo6
SW1tdXRhYmxlLCAic2V0X2dsb2JhbCAiLCBpbmRleCwgIiBpcyBpbW11dGFibGUiKTsKKyAgICAg
ICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2luZm8uZ2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0
eSA9PSBNdXRhYmlsaXR5OjpJbW11dGFibGUsICJzZXRfZ2xvYmFsICIsIGluZGV4LCAiIGlzIGlt
bXV0YWJsZSIpOwogCiAgICAgICAgIFR5cGUgZ2xvYmFsVHlwZSA9IG1faW5mby5nbG9iYWxzW2lu
ZGV4XS50eXBlOwogICAgICAgICBBU1NFUlQoaXNWYWx1ZVR5cGUoZ2xvYmFsVHlwZSkpOwpAQCAt
MTE4OSw4ICsxMTkyLDkgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NB
U0UpCiAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CiAgICAgICAgIFdBU01fRkFJTF9J
Rl9IRUxQRVJfRkFJTFMocGFyc2VGdW5jdGlvbkluZGV4KGZ1bmN0aW9uSW5kZXgpKTsKIAotICAg
ICAgICBTaWduYXR1cmVJbmRleCBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1faW5mby5zaWduYXR1
cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgIGNv
bnN0IFNpZ25hdHVyZSYgY2FsbGVlU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dChjYWxsZWVTaWduYXR1cmVJbmRleCk7CisgICAgICAgIFR5cGVJbmRleCBjYWxsZWVUeXBlSW5k
ZXggPSBtX2luZm8udHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4
KTsKKyAgICAgICAgY29uc3QgVHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uID0gVHlwZUlu
Zm9ybWF0aW9uOjpnZXQoY2FsbGVlVHlwZUluZGV4KTsKKyAgICAgICAgY29uc3QgYXV0byYgY2Fs
bGVlU2lnbmF0dXJlID0gKnR5cGVEZWZpbml0aW9uLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOwog
ICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCkgPiBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICJjYWxsIGZ1bmN0aW9uIGluZGV4ICIsIGZ1
bmN0aW9uSW5kZXgsICIgaGFzICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICIg
YXJndW1lbnRzLCBidXQgdGhlIGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIsIG1f
ZXhwcmVzc2lvblN0YWNrLnNpemUoKSwgIiB2YWx1ZXMiKTsKIAogICAgICAgICBzaXplX3QgZmly
c3RBcmd1bWVudEluZGV4ID0gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpIC0gY2FsbGVlU2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKTsKQEAgLTExOTgsNyArMTIwMiw3IEBAIEZPUl9FQUNIX1dBU01f
TUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KCFhcmdzLnRyeVJlc2VydmVDYXBhY2l0eShjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgp
KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGNhbGwncyAiLCBjYWxsZWVTaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gZmlyc3RBcmd1bWVudEluZGV4OyBpIDwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIFR5cGVkRXhwcmVzc2lvbiBhcmcgPSBtX2V4cHJlc3Npb25TdGFj
ay5hdChpKTsKLSAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzU3VidHlwZShh
cmcudHlwZSgpLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRl
eCkpLCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCBpbiBjYWxsLCBnb3QgIiwgYXJnLnR5cGUoKS5r
aW5kLCAiLCBleHBlY3RlZCAiLCBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnQoaSAtIGZpcnN0QXJn
dW1lbnRJbmRleCkua2luZCk7CisgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFp
c1N1YnR5cGUoYXJnLnR5cGUoKSwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0gZmly
c3RBcmd1bWVudEluZGV4KSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGwsIGdvdCAi
LCBhcmcudHlwZSgpLmtpbmQsICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVu
dFR5cGUoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkua2luZCk7CiAgICAgICAgICAgICBhcmdzLnVu
Y2hlY2tlZEFwcGVuZChhcmcpOwogICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJv
bVN0YWNrKCk7CiAgICAgICAgIH0KQEAgLTEyMDcsNyArMTIxMSw3IEBAIEZPUl9FQUNIX1dBU01f
TUVNT1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
ZWVTaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgICAgICBS
ZXN1bHRMaXN0IHJlc3VsdHM7Ci0gICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENh
bGwoZnVuY3Rpb25JbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7CisgICAg
ICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGwoZnVuY3Rpb25JbmRleCwgdHlwZURl
ZmluaXRpb24sIGFyZ3MsIHJlc3VsdHMpKTsKIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxs
ZWVTaWduYXR1cmUucmV0dXJuQ291bnQoKSA9PSByZXN1bHRzLnNpemUoKSk7CiAKQEAgLTEyMjQs
MTAgKzEyMjgsMTEgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0Up
CiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHNpZ25hdHVyZUlu
ZGV4KSwgImNhbid0IGdldCBjYWxsX2luZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4Iik7CiAgICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKHRhYmxlSW5kZXgpLCAiY2Fu
J3QgZ2V0IGNhbGxfaW5kaXJlY3QncyB0YWJsZSBpbmRleCIpOwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKHRhYmxlSW5kZXggPj0gbV9pbmZvLnRhYmxlQ291bnQoKSwgImNhbGxfaW5kaXJl
Y3QncyB0YWJsZSBpbmRleCAiLCB0YWJsZUluZGV4LCAiIGludmFsaWQsIGxpbWl0IGlzICIsIG1f
aW5mby50YWJsZUNvdW50KCkpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5mby51
c2VkU2lnbmF0dXJlcy5zaXplKCkgPD0gc2lnbmF0dXJlSW5kZXgsICJjYWxsX2luZGlyZWN0J3Mg
c2lnbmF0dXJlIGluZGV4ICIsIHNpZ25hdHVyZUluZGV4LCAiIGV4Y2VlZHMga25vd24gc2lnbmF0
dXJlcyAiLCBtX2luZm8udXNlZFNpZ25hdHVyZXMuc2l6ZSgpKTsKKyAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihtX2luZm8udHlwZUNvdW50KCkgPD0gc2lnbmF0dXJlSW5kZXgsICJjYWxsX2lu
ZGlyZWN0J3Mgc2lnbmF0dXJlIGluZGV4ICIsIHNpZ25hdHVyZUluZGV4LCAiIGV4Y2VlZHMga25v
d24gc2lnbmF0dXJlcyAiLCBtX2luZm8udHlwZUNvdW50KCkpOwogICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKG1faW5mby50YWJsZXNbdGFibGVJbmRleF0udHlwZSgpICE9IFRhYmxlRWxlbWVu
dFR5cGU6OkZ1bmNyZWYsICJjYWxsX2luZGlyZWN0IGlzIG9ubHkgdmFsaWQgd2hlbiBhIHRhYmxl
IGhhcyB0eXBlIGZ1bmNyZWYiKTsKIAotICAgICAgICBjb25zdCBTaWduYXR1cmUmIGNhbGxlZVNp
Z25hdHVyZSA9IG1faW5mby51c2VkU2lnbmF0dXJlc1tzaWduYXR1cmVJbmRleF0uZ2V0KCk7Cisg
ICAgICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiA9IG1faW5mby50eXBl
U2lnbmF0dXJlc1tzaWduYXR1cmVJbmRleF0uZ2V0KCk7CisgICAgICAgIGNvbnN0IGF1dG8mIGNh
bGxlZVNpZ25hdHVyZSA9ICp0eXBlRGVmaW5pdGlvbi5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsK
ICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpICsgMTsgLy8gQWRkIHRoZSBjYWxsZWUncyBpbmRleC4KICAgICAgICAgV0FTTV9QQVJT
RVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2Fs
bF9pbmRpcmVjdCBleHBlY3RzICIsIGFyZ3VtZW50Q291bnQsICIgYXJndW1lbnRzLCBidXQgdGhl
IGV4cHJlc3Npb24gc3RhY2sgY3VycmVudGx5IGhvbGRzICIsIG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSwgIiB2YWx1ZXMiKTsKIApAQCAtMTIzOSwxNCArMTI0NCwxNCBAQCBGT1JfRUFDSF9XQVNN
X01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZp
cnN0QXJndW1lbnRJbmRleDsgaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBUeXBlZEV4cHJlc3Npb24gYXJnID0gbV9leHByZXNzaW9uU3RhY2suYXQoaSk7
CiAgICAgICAgICAgICBpZiAoaSA8IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSAtIDEpCi0gICAg
ICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRighaXNTdWJ0eXBlKGFyZy50eXBlKCks
IGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0gZmlyc3RBcmd1bWVudEluZGV4KSksICJhcmd1
bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmcudHlwZSgpLmtp
bmQsICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0gZmlyc3RBcmd1
bWVudEluZGV4KS5raW5kKTsKKyAgICAgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KCFpc1N1YnR5cGUoYXJnLnR5cGUoKSwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0g
Zmlyc3RBcmd1bWVudEluZGV4KSksICJhcmd1bWVudCB0eXBlIG1pc21hdGNoIGluIGNhbGxfaW5k
aXJlY3QsIGdvdCAiLCBhcmcudHlwZSgpLmtpbmQsICIsIGV4cGVjdGVkICIsIGNhbGxlZVNpZ25h
dHVyZS5hcmd1bWVudFR5cGUoaSAtIGZpcnN0QXJndW1lbnRJbmRleCkua2luZCk7CiAgICAgICAg
ICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChhcmcpOwogICAgICAgICAgICAgbV9jb250ZXh0LmRp
ZFBvcFZhbHVlRnJvbVN0YWNrKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9leHByZXNzaW9uU3Rh
Y2suc2hyaW5rKGZpcnN0QXJndW1lbnRJbmRleCk7CiAKICAgICAgICAgUmVzdWx0TGlzdCByZXN1
bHRzOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRDYWxsSW5kaXJlY3QodGFi
bGVJbmRleCwgY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7CisgICAgICAgIFdBU01f
VFJZX0FERF9UT19DT05URVhUKGFkZENhbGxJbmRpcmVjdCh0YWJsZUluZGV4LCB0eXBlRGVmaW5p
dGlvbiwgYXJncywgcmVzdWx0cykpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjYWxsZWVTaWduYXR1cmUucmV0dXJuQ291bnQoKTsgKytpKQogICAgICAgICAgICAgbV9leHBy
ZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGNhbGxlZVNpZ25hdHVyZS5yZXR1cm5UeXBl
KGkpLCByZXN1bHRzW2ldKTsKQEAgLTEyNTgsOCArMTI2Myw5IEBAIEZPUl9FQUNIX1dBU01fTUVN
T1JZX1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFP
cHRpb25zOjp1c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rpb25SZWZlcmVuY2VzKCksICJmdW5jdGlv
biByZWZlcmVuY2VzIGFyZSBub3QgZW5hYmxlZCIpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9G
QUlMX0lGKCFpc1JlZldpdGhUeXBlSW5kZXgobV9leHByZXNzaW9uU3RhY2subGFzdCgpLnR5cGUo
KSksICJub24tZnVuY3JlZiBjYWxsX3JlZiB2YWx1ZSAiLCBtX2V4cHJlc3Npb25TdGFjay5sYXN0
KCkudHlwZSgpLmtpbmQpOwogCi0gICAgICAgIGNvbnN0IFNpZ25hdHVyZUluZGV4IGNhbGxlZVNp
Z25hdHVyZUluZGV4ID0gbV9leHByZXNzaW9uU3RhY2subGFzdCgpLnR5cGUoKS5pbmRleDsKLSAg
ICAgICAgY29uc3QgU2lnbmF0dXJlJiBjYWxsZWVTaWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1h
dGlvbjo6Z2V0KGNhbGxlZVNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgY29uc3QgVHlwZUluZGV4
IGNhbGxlZVR5cGVJbmRleCA9IG1fZXhwcmVzc2lvblN0YWNrLmxhc3QoKS50eXBlKCkuaW5kZXg7
CisgICAgICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiA9IFR5cGVJbmZv
cm1hdGlvbjo6Z2V0KGNhbGxlZVR5cGVJbmRleCk7CisgICAgICAgIGNvbnN0IGF1dG8mIGNhbGxl
ZVNpZ25hdHVyZSA9ICp0eXBlRGVmaW5pdGlvbi5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKICAg
ICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBjYWxsZWVTaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpICsgMTsgLy8gQWRkIHRoZSBjYWxsZWUncyB2YWx1ZS4KICAgICAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihhcmd1bWVudENvdW50ID4gbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiY2FsbF9y
ZWYgZXhwZWN0cyAiLCBhcmd1bWVudENvdW50LCAiIGFyZ3VtZW50cywgYnV0IHRoZSBleHByZXNz
aW9uIHN0YWNrIGN1cnJlbnRseSBob2xkcyAiLCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCksICIg
dmFsdWVzIik7CiAKQEAgLTEyNjksMTQgKzEyNzUsMTQgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllf
U1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEFyZ3Vt
ZW50SW5kZXg7IGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgVHlwZWRFeHByZXNzaW9uIGFyZyA9IG1fZXhwcmVzc2lvblN0YWNrLmF0KGkpOwogICAgICAg
ICAgICAgaWYgKGkgPCBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSAxKQotICAgICAgICAgICAg
ICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJnLnR5cGUoKSAhPSBjYWxsZWVTaWduYXR1cmUu
YXJndW1lbnQoaSAtIGZpcnN0QXJndW1lbnRJbmRleCksICJhcmd1bWVudCB0eXBlIG1pc21hdGNo
IGluIGNhbGxfaW5kaXJlY3QsIGdvdCAiLCBhcmcudHlwZSgpLmtpbmQsICIsIGV4cGVjdGVkICIs
IGNhbGxlZVNpZ25hdHVyZS5hcmd1bWVudChpIC0gZmlyc3RBcmd1bWVudEluZGV4KS5raW5kKTsK
KyAgICAgICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZy50eXBlKCkgIT0gY2Fs
bGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0gZmlyc3RBcmd1bWVudEluZGV4KSwgImFyZ3Vt
ZW50IHR5cGUgbWlzbWF0Y2ggaW4gY2FsbF9pbmRpcmVjdCwgZ290ICIsIGFyZy50eXBlKCkua2lu
ZCwgIiwgZXhwZWN0ZWQgIiwgY2FsbGVlU2lnbmF0dXJlLmFyZ3VtZW50VHlwZShpIC0gZmlyc3RB
cmd1bWVudEluZGV4KS5raW5kKTsKICAgICAgICAgICAgIGFyZ3MudW5jaGVja2VkQXBwZW5kKGFy
Zyk7CiAgICAgICAgICAgICBtX2NvbnRleHQuZGlkUG9wVmFsdWVGcm9tU3RhY2soKTsKICAgICAg
ICAgfQogICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5zaHJpbmsoZmlyc3RBcmd1bWVudEluZGV4
KTsKIAogICAgICAgICBSZXN1bHRMaXN0IHJlc3VsdHM7Ci0gICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZENhbGxSZWYoY2FsbGVlU2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKSk7Cisg
ICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhbGxSZWYodHlwZURlZmluaXRpb24s
IGFyZ3MsIHJlc3VsdHMpKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2Fs
bGVlU2lnbmF0dXJlLnJldHVybkNvdW50KCk7ICsraSkKICAgICAgICAgICAgIG1fZXhwcmVzc2lv
blN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChjYWxsZWVTaWduYXR1cmUucmV0dXJuVHlwZShpKSwg
cmVzdWx0c1tpXSk7CkBAIC0xMjg1LDIwICsxMjkxLDIxIEBAIEZPUl9FQUNIX1dBU01fTUVNT1JZ
X1NUT1JFX09QKENSRUFURV9DQVNFKQogICAgIH0KIAogICAgIGNhc2UgQmxvY2s6IHsKLSAgICAg
ICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNh
bid0IGdldCBibG9jaydzIHNpZ25hdHVyZSIpOworICAgICAgICBCbG9ja1NpZ25hdHVyZSBpbmxp
bmVTaWduYXR1cmVBc1R5cGU7CisgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlQmxv
Y2tTaWduYXR1cmUobV9pbmZvLCBpbmxpbmVTaWduYXR1cmVBc1R5cGUpLCAiY2FuJ3QgZ2V0IGJs
b2NrJ3Mgc2lnbmF0dXJlIik7CiAKKyAgICAgICAgY29uc3QgRnVuY3Rpb25TaWduYXR1cmUqIGlu
bGluZVNpZ25hdHVyZSA9IGlubGluZVNpZ25hdHVyZUFzVHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1
cmU+KCk7CiAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2su
c2l6ZSgpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksICJUb28gZmV3IHZhbHVl
cyBvbiBzdGFjayBmb3IgYmxvY2suIEJsb2NrIGV4cGVjdHMgIiwgaW5saW5lU2lnbmF0dXJlLT5h
cmd1bWVudENvdW50KCksICIsIGJ1dCBvbmx5ICIsIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSwg
IiB3ZXJlIHByZXNlbnQuIEJsb2NrIGhhcyBpbmxpbmVTaWduYXR1cmU6ICIsIGlubGluZVNpZ25h
dHVyZS0+dG9TdHJpbmcoKSk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lv
blN0YWNrLnNpemUoKSAtIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCk7ICsraSkgewogICAgICAgICAgICAgVHlwZSB0eXBlID0gbV9leHByZXNzaW9uU3RhY2suYXQo
b2Zmc2V0ICsgaSkudHlwZSgpOwotICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0
eXBlICE9IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSksICJCbG9jayBleHBlY3RzIHRoZSBh
cmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVu
dChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCB0eXBlLmtpbmQpOworICAgICAg
ICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0eXBlICE9IGlubGluZVNpZ25hdHVyZS0+YXJn
dW1lbnRUeXBlKGkpLCAiQmxvY2sgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAi
IHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0IGFy
Z3VtZW50IGhhcyB0eXBlICIsIHR5cGUua2luZCk7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQ2
NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CiAgICAgICAgIFN0YWNrIG5l
d1N0YWNrOwogICAgICAgICBDb250cm9sVHlwZSBibG9jazsKLSAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoYWRkQmxvY2soaW5saW5lU2lnbmF0dXJlLCBtX2V4cHJlc3Npb25TdGFjaywg
YmxvY2ssIG5ld1N0YWNrKSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZEJs
b2NrKGlubGluZVNpZ25hdHVyZUFzVHlwZSwgbV9leHByZXNzaW9uU3RhY2ssIGJsb2NrLCBuZXdT
dGFjaykpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFNpemUsIG9sZFNpemUgLSBtX2V4cHJl
c3Npb25TdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwog
ICAgICAgICBBU1NFUlQobmV3U3RhY2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpKTsKIApAQCAtMTMwOCwyMCArMTMxNSwyMSBAQCBGT1JfRUFDSF9XQVNNX01FTU9S
WV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICB9CiAKICAgICBjYXNlIExvb3A6IHsKLSAgICAg
ICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNh
bid0IGdldCBsb29wJ3Mgc2lnbmF0dXJlIik7CisgICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGlu
ZVNpZ25hdHVyZUFzVHlwZTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VCbG9j
a1NpZ25hdHVyZShtX2luZm8sIGlubGluZVNpZ25hdHVyZUFzVHlwZSksICJjYW4ndCBnZXQgbG9v
cCdzIHNpZ25hdHVyZSIpOwogCisgICAgICAgIGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlKiBpbmxp
bmVTaWduYXR1cmUgPSBpbmxpbmVTaWduYXR1cmVBc1R5cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNp
emUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiVG9vIGZldyB2YWx1ZXMg
b24gc3RhY2sgZm9yIGxvb3AgYmxvY2suIExvb3AgZXhwZWN0cyAiLCBpbmxpbmVTaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgp
LCAiIHdlcmUgcHJlc2VudC4gTG9vcCBoYXMgaW5saW5lU2lnbmF0dXJlOiAiLCBpbmxpbmVTaWdu
YXR1cmUtPnRvU3RyaW5nKCkpOwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2V4cHJlc3Np
b25TdGFjay5zaXplKCkgLSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpOyArK2kpIHsKICAgICAgICAgICAgIFR5cGUgdHlwZSA9IG1fZXhwcmVzc2lvblN0YWNrLmF0
KG9mZnNldCArIGkpLnR5cGUoKTsKLSAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYo
dHlwZSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50KGkpLCAiTG9vcCBleHBlY3RzIHRoZSBh
cmd1bWVudCBhdCBpbmRleCIsIGksICIgdG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVu
dChpKS5raW5kLCAiIGJ1dCBhcmd1bWVudCBoYXMgdHlwZSAiLCB0eXBlLmtpbmQpOworICAgICAg
ICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9JRih0eXBlICE9IGlubGluZVNpZ25hdHVyZS0+YXJn
dW1lbnRUeXBlKGkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIg
dG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudFR5cGUoaSkua2luZCwgIiBidXQgYXJn
dW1lbnQgaGFzIHR5cGUgIiwgdHlwZS5raW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIGludDY0
X3Qgb2xkU2l6ZSA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKTsKICAgICAgICAgU3RhY2sgbmV3
U3RhY2s7CiAgICAgICAgIENvbnRyb2xUeXBlIGxvb3A7Ci0gICAgICAgIFdBU01fVFJZX0FERF9U
T19DT05URVhUKGFkZExvb3AoaW5saW5lU2lnbmF0dXJlLCBtX2V4cHJlc3Npb25TdGFjaywgbG9v
cCwgbmV3U3RhY2ssIG1fbG9vcEluZGV4KyspKTsKKyAgICAgICAgV0FTTV9UUllfQUREX1RPX0NP
TlRFWFQoYWRkTG9vcChpbmxpbmVTaWduYXR1cmVBc1R5cGUsIG1fZXhwcmVzc2lvblN0YWNrLCBs
b29wLCBuZXdTdGFjaywgbV9sb29wSW5kZXgrKykpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9s
ZFNpemUsIG9sZFNpemUgLSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPT0gaW5saW5lU2lnbmF0
dXJlLT5hcmd1bWVudENvdW50KCkpOwogICAgICAgICBBU1NFUlQobmV3U3RhY2suc2l6ZSgpID09
IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpKTsKIApAQCAtMTMzMSwyMSArMTMzOSwy
MiBAQCBGT1JfRUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKICAgICB9CiAK
ICAgICBjYXNlIElmOiB7Ci0gICAgICAgIEJsb2NrU2lnbmF0dXJlIGlubGluZVNpZ25hdHVyZTsK
KyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlQXNUeXBlOwogICAgICAgICBU
eXBlZEV4cHJlc3Npb24gY29uZGl0aW9uOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFw
YXJzZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCBp
ZidzIHNpZ25hdHVyZSIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2Nr
U2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlQXNUeXBlKSwgImNhbid0IGdldCBpZidz
IHNpZ25hdHVyZSIpOwogICAgICAgICBXQVNNX1RSWV9QT1BfRVhQUkVTU0lPTl9TVEFDS19JTlRP
KGNvbmRpdGlvbiwgImlmIGNvbmRpdGlvbiIpOwogCisgICAgICAgIGNvbnN0IEZ1bmN0aW9uU2ln
bmF0dXJlKiBpbmxpbmVTaWduYXR1cmUgPSBpbmxpbmVTaWduYXR1cmVBc1R5cGUtPmFzPEZ1bmN0
aW9uU2lnbmF0dXJlPigpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKCFjb25kaXRp
b24udHlwZSgpLmlzSTMyKCksICJpZiBjb25kaXRpb24gbXVzdCBiZSBpMzIsIGdvdCAiLCBjb25k
aXRpb24udHlwZSgpLmtpbmQpOwogICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhw
cmVzc2lvblN0YWNrLnNpemUoKSA8IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAi
VG9vIGZldyBhcmd1bWVudHMgb24gc3RhY2sgZm9yIGlmIGJsb2NrLiBJZiBleHBlY3RzICIsIGlu
bGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Np
b25TdGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBJZiBibG9jayBoYXMgc2lnbmF0dXJlOiAi
LCBpbmxpbmVTaWduYXR1cmUtPnRvU3RyaW5nKCkpOwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZVNpZ25hdHVyZS0+
YXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lG
KG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCArIGldLnR5cGUoKSAhPSBpbmxpbmVTaWduYXR1cmUt
PmFyZ3VtZW50KGkpLCAiTG9vcCBleHBlY3RzIHRoZSBhcmd1bWVudCBhdCBpbmRleCIsIGksICIg
dG8gYmUgIiwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudChpKS5raW5kLCAiIGJ1dCBhcmd1bWVu
dCBoYXMgdHlwZSAiLCBtX2V4cHJlc3Npb25TdGFja1tpXS50eXBlKCkua2luZCk7CisgICAgICAg
ICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrW29mZnNldCArIGld
LnR5cGUoKSAhPSBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50VHlwZShpKSwgIkxvb3AgZXhwZWN0
cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+
YXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0IGFyZ3VtZW50IGhhcyB0eXBlICIsIG1fZXhwcmVz
c2lvblN0YWNrW2ldLnR5cGUoKS5raW5kKTsKIAogICAgICAgICBpbnQ2NF90IG9sZFNpemUgPSBt
X2V4cHJlc3Npb25TdGFjay5zaXplKCk7CiAgICAgICAgIFN0YWNrIG5ld1N0YWNrOwogICAgICAg
ICBDb250cm9sVHlwZSBjb250cm9sOwotICAgICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChh
ZGRJZihjb25kaXRpb24sIGlubGluZVNpZ25hdHVyZSwgbV9leHByZXNzaW9uU3RhY2ssIGNvbnRy
b2wsIG5ld1N0YWNrKSk7CisgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZElmKGNv
bmRpdGlvbiwgaW5saW5lU2lnbmF0dXJlQXNUeXBlLCBtX2V4cHJlc3Npb25TdGFjaywgY29udHJv
bCwgbmV3U3RhY2spKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRTaXplLCBvbGRTaXplIC0g
bV9leHByZXNzaW9uU3RhY2suc2l6ZSgpID09IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3Vu
dCgpKTsKICAgICAgICAgQVNTRVJUKG5ld1N0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUt
PmFyZ3VtZW50Q291bnQoKSk7CiAKQEAgLTEzNjksMTggKzEzNzgsMTkgQEAgRk9SX0VBQ0hfV0FT
TV9NRU1PUllfU1RPUkVfT1AoQ1JFQVRFX0NBU0UpCiAgICAgY2FzZSBUcnk6IHsKICAgICAgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCks
ICJ3YXNtIGV4Y2VwdGlvbnMgYXJlIG5vdCBlbmFibGVkIik7CiAKLSAgICAgICAgQmxvY2tTaWdu
YXR1cmUgaW5saW5lU2lnbmF0dXJlOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJz
ZUJsb2NrU2lnbmF0dXJlKG1faW5mbywgaW5saW5lU2lnbmF0dXJlKSwgImNhbid0IGdldCB0cnkn
cyBzaWduYXR1cmUiKTsKKyAgICAgICAgQmxvY2tTaWduYXR1cmUgaW5saW5lU2lnbmF0dXJlQXNU
eXBlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUJsb2NrU2lnbmF0dXJlKG1f
aW5mbywgaW5saW5lU2lnbmF0dXJlQXNUeXBlKSwgImNhbid0IGdldCB0cnkncyBzaWduYXR1cmUi
KTsKIAorICAgICAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSogaW5saW5lU2lnbmF0dXJlID0g
aW5saW5lU2lnbmF0dXJlQXNUeXBlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKICAgICAgICAg
V0FTTV9WQUxJREFUT1JfRkFJTF9JRihtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgPCBpbmxpbmVT
aWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKSwgIlRvbyBmZXcgYXJndW1lbnRzIG9uIHN0YWNrIGZv
ciB0cnkgYmxvY2suIFRyeWUgZXhwZWN0cyAiLCBpbmxpbmVTaWduYXR1cmUtPmFyZ3VtZW50Q291
bnQoKSwgIiwgYnV0IG9ubHkgIiwgbV9leHByZXNzaW9uU3RhY2suc2l6ZSgpLCAiIHdlcmUgcHJl
c2VudC4gVHJ5IGJsb2NrIGhhcyBzaWduYXR1cmU6ICIsIGlubGluZVNpZ25hdHVyZS0+dG9TdHJp
bmcoKSk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZXhwcmVzc2lvblN0YWNrLnNpemUo
KSAtIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW5saW5lU2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7ICsraSkKLSAg
ICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYobV9leHByZXNzaW9uU3RhY2tbb2Zmc2V0
ICsgaV0udHlwZSgpICE9IGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnQoaSksICJUcnkgZXhwZWN0
cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBpLCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+
YXJndW1lbnQoaSkua2luZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwgbV9leHByZXNzaW9u
U3RhY2tbaV0udHlwZSgpLmtpbmQpOworICAgICAgICAgICAgV0FTTV9WQUxJREFUT1JfRkFJTF9J
RihtX2V4cHJlc3Npb25TdGFja1tvZmZzZXQgKyBpXS50eXBlKCkgIT0gaW5saW5lU2lnbmF0dXJl
LT5hcmd1bWVudFR5cGUoaSksICJUcnkgZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXgiLCBp
LCAiIHRvIGJlICIsIGlubGluZVNpZ25hdHVyZS0+YXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0
IGFyZ3VtZW50IGhhcyB0eXBlICIsIG1fZXhwcmVzc2lvblN0YWNrW2ldLnR5cGUoKS5raW5kKTsK
IAogICAgICAgICBpbnQ2NF90IG9sZFNpemUgPSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCk7CiAg
ICAgICAgIFN0YWNrIG5ld1N0YWNrOwogICAgICAgICBDb250cm9sVHlwZSBjb250cm9sOwotICAg
ICAgICBXQVNNX1RSWV9BRERfVE9fQ09OVEVYVChhZGRUcnkoaW5saW5lU2lnbmF0dXJlLCBtX2V4
cHJlc3Npb25TdGFjaywgY29udHJvbCwgbmV3U3RhY2spKTsKKyAgICAgICAgV0FTTV9UUllfQURE
X1RPX0NPTlRFWFQoYWRkVHJ5KGlubGluZVNpZ25hdHVyZUFzVHlwZSwgbV9leHByZXNzaW9uU3Rh
Y2ssIGNvbnRyb2wsIG5ld1N0YWNrKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU2l6ZSwg
b2xkU2l6ZSAtIG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA9PSBpbmxpbmVTaWduYXR1cmUtPmFy
Z3VtZW50Q291bnQoKSk7CiAgICAgICAgIEFTU0VSVChuZXdTdGFjay5zaXplKCkgPT0gaW5saW5l
U2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCkpOwogCkBAIC0xMzk2LDggKzE0MDYsOCBAQCBGT1Jf
RUFDSF9XQVNNX01FTU9SWV9TVE9SRV9PUChDUkVBVEVfQ0FTRSkKIAogICAgICAgICB1aW50MzJf
dCBleGNlcHRpb25JbmRleDsKICAgICAgICAgV0FTTV9GQUlMX0lGX0hFTFBFUl9GQUlMUyhwYXJz
ZUV4Y2VwdGlvbkluZGV4KGV4Y2VwdGlvbkluZGV4KSk7Ci0gICAgICAgIFNpZ25hdHVyZUluZGV4
IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLnNpZ25hdHVyZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4
U3BhY2UoZXhjZXB0aW9uSW5kZXgpOwotICAgICAgICBjb25zdCBTaWduYXR1cmUmIGV4Y2VwdGlv
blNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwor
ICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9pbmZvLnR5cGVJbmRleEZyb21FeGNlcHRp
b25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KTsKKyAgICAgICAgY29uc3QgVHlwZURlZmluaXRp
b24mIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCk7
CiAKICAgICAgICAgQ29udHJvbEVudHJ5JiBjb250cm9sRW50cnkgPSBtX2NvbnRyb2xTdGFjay5s
YXN0KCk7CiAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoIWlzVHJ5T3JDYXRjaChjb250
cm9sRW50cnkuY29udHJvbERhdGEpLCAiY2F0Y2ggYmxvY2sgaXNuJ3QgYXNzb2NpYXRlZCB0byBh
IHRyeSIpOwpAQCAtMTQwOCw5ICsxNDE4LDkgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVf
T1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLnN3YXAocHJlQ2F0Y2hT
dGFjayk7CiAgICAgICAgIFdBU01fVFJZX0FERF9UT19DT05URVhUKGFkZENhdGNoKGV4Y2VwdGlv
bkluZGV4LCBleGNlcHRpb25TaWduYXR1cmUsIHByZUNhdGNoU3RhY2ssIGNvbnRyb2xFbnRyeS5j
b250cm9sRGF0YSwgcmVzdWx0cykpOwogCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4Y2VwdGlv
blNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0gcmVzdWx0cy5zaXplKCkpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KTsgKytpKQotICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5k
KGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudChpKSwgcmVzdWx0c1tpXSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+
YXJndW1lbnRDb3VudCgpID09IHJlc3VsdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+
YXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5jb25z
dHJ1Y3RBbmRBcHBlbmQoZXhjZXB0aW9uU2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
LT5hcmd1bWVudFR5cGUoaSksIHJlc3VsdHNbaV0pOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KIApAQCAtMTQ1Nyw4ICsxNDY3LDggQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVfT1Ao
Q1JFQVRFX0NBU0UpCiAKICAgICAgICAgdWludDMyX3QgZXhjZXB0aW9uSW5kZXg7CiAgICAgICAg
IFdBU01fRkFJTF9JRl9IRUxQRVJfRkFJTFMocGFyc2VFeGNlcHRpb25JbmRleChleGNlcHRpb25J
bmRleCkpOwotICAgICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1faW5mby5z
aWduYXR1cmVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKGV4Y2VwdGlvbkluZGV4KTsKLSAg
ICAgICAgY29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25TaWduYXR1cmUgPSBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRl
eCA9IG1faW5mby50eXBlSW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRl
eCk7CisgICAgICAgIGNvbnN0IGF1dG8mIGV4Y2VwdGlvblNpZ25hdHVyZSA9IFR5cGVJbmZvcm1h
dGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1cmUodHlwZUluZGV4KTsKIAogICAgICAgICBXQVNNX1ZB
TElEQVRPUl9GQUlMX0lGKG1fZXhwcmVzc2lvblN0YWNrLnNpemUoKSA8IGV4Y2VwdGlvblNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCksICJUb28gZmV3IGFyZ3VtZW50cyBvbiBzdGFjayBmb3IgdGhl
IGV4Y2VwdGlvbiBiZWluZyB0aHJvd24uIFRoZSBleGNlcHRpb24gZXhwZWN0cyAiLCBleGNlcHRp
b25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiLCBidXQgb25seSAiLCBtX2V4cHJlc3Npb25T
dGFjay5zaXplKCksICIgd2VyZSBwcmVzZW50LiBFeGNlcHRpb24gaGFzIHNpZ25hdHVyZTogIiwg
ZXhjZXB0aW9uU2lnbmF0dXJlLnRvU3RyaW5nKCkpOwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSBtX2V4cHJlc3Npb25TdGFjay5zaXplKCkgLSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpOwpAQCAtMTQ2Niw3ICsxNDc2LDcgQEAgRk9SX0VBQ0hfV0FTTV9NRU1PUllfU1RPUkVf
T1AoQ1JFQVRFX0NBU0UpCiAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3MudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpLCAiY2FuJ3Qg
YWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhyb3cncyAiLCBleGNlcHRpb25TaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpLCAiIGFyZ3VtZW50cyIpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAg
ICAgICAgICBUeXBlZEV4cHJlc3Npb24gYXJnID0gbV9leHByZXNzaW9uU3RhY2suYXQob2Zmc2V0
ICsgaSk7Ci0gICAgICAgICAgICBXQVNNX1ZBTElEQVRPUl9GQUlMX0lGKGFyZy50eXBlKCkgIT0g
ZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpLCAiVGhlIGV4Y2VwdGlvbiBiZWluZyB0aHJv
d24gZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXggIiwgaSwgIiB0byBiZSAiLCBleGNlcHRp
b25TaWduYXR1cmUuYXJndW1lbnQoaSkua2luZCwgIiBidXQgYXJndW1lbnQgaGFzIHR5cGUgIiwg
YXJnLnR5cGUoKS5raW5kKTsKKyAgICAgICAgICAgIFdBU01fVkFMSURBVE9SX0ZBSUxfSUYoYXJn
LnR5cGUoKSAhPSBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLCAiVGhlIGV4Y2Vw
dGlvbiBiZWluZyB0aHJvd24gZXhwZWN0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXggIiwgaSwgIiB0
byBiZSAiLCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpLmtpbmQsICIgYnV0IGFy
Z3VtZW50IGhhcyB0eXBlICIsIGFyZy50eXBlKCkua2luZCk7CiAgICAgICAgICAgICBhcmdzLnVu
Y2hlY2tlZEFwcGVuZChhcmcpOwogICAgICAgICAgICAgbV9jb250ZXh0LmRpZFBvcFZhbHVlRnJv
bVN0YWNrKCk7CiAgICAgICAgIH0KQEAgLTE2NTAsOCArMTY2MCw4IEBAIGF1dG8gRnVuY3Rpb25Q
YXJzZXI8Q29udGV4dD46OnBhcnNlVW5yZWFjaGFibGVFeHByZXNzaW9uKCkgLT4gUGFydGlhbFJl
c3VsdAogCiAgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvbkluZGV4OwogICAgICAgICBXQVNNX0ZB
SUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlRXhjZXB0aW9uSW5kZXgoZXhjZXB0aW9uSW5kZXgpKTsK
LSAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX2luZm8uc2lnbmF0dXJl
SW5kZXhGcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRpb25JbmRleCk7Ci0gICAgICAgIGNv
bnN0IFNpZ25hdHVyZSYgZXhjZXB0aW9uU2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBtX2lu
Zm8udHlwZUluZGV4RnJvbUV4Y2VwdGlvbkluZGV4U3BhY2UoZXhjZXB0aW9uSW5kZXgpOworICAg
ICAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgZXhjZXB0aW9uU2lnbmF0dXJlID0gVHlwZUluZm9y
bWF0aW9uOjpnZXQodHlwZUluZGV4KTsKIAogICAgICAgICBpZiAobV91bnJlYWNoYWJsZUJsb2Nr
cyA+IDEpCiAgICAgICAgICAgICByZXR1cm4geyB9OwpAQCAtMTY2NCw5ICsxNjc0LDkgQEAgYXV0
byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VVbnJlYWNoYWJsZUV4cHJlc3Npb24oKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFJlc3VsdExpc3QgcmVzdWx0czsKICAgICAgICAgV0FT
TV9UUllfQUREX1RPX0NPTlRFWFQoYWRkQ2F0Y2hUb1VucmVhY2hhYmxlKGV4Y2VwdGlvbkluZGV4
LCBleGNlcHRpb25TaWduYXR1cmUsIGRhdGEuY29udHJvbERhdGEsIHJlc3VsdHMpKTsKIAotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09
IHJlc3VsdHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2Vw
dGlvblNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgICAgIG1fZXhwcmVz
c2lvblN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnQo
aSksIHJlc3VsdHNbaV0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb25TaWduYXR1
cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSA9PSByZXN1bHRzLnNp
emUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1
cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAg
ICAgICAgbV9leHByZXNzaW9uU3RhY2suY29uc3RydWN0QW5kQXBwZW5kKGV4Y2VwdGlvblNpZ25h
dHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpLCByZXN1bHRzW2ld
KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUdsb2JhbC5jcHAKaW5kZXggZWQxYjBmN2QxNjkyMmU2MmE2ZTc3NmYxOGVhMGE5NWI0
M2UzYTQzZS4uMzJlMGE3YTk5ZGY1MjUzNTM4ODIxYjRkZTUxZjU0OTE2ZWRmMGUxYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAg
dm9pZCBHbG9iYWw6OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFy
Z3VtZW50KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBBU1NFUlQobV9tdXRhYmls
aXR5ICE9IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpJbW11dGFibGUpOworICAgIEFTU0VSVCht
X211dGFiaWxpdHkgIT0gV2FzbTo6SW1tdXRhYmxlKTsKICAgICBzd2l0Y2ggKG1fdHlwZS5raW5k
KSB7CiAgICAgY2FzZSBUeXBlS2luZDo6STMyOiB7CiAgICAgICAgIGludDMyX3QgdmFsdWUgPSBh
cmd1bWVudC50b0ludDMyKGdsb2JhbE9iamVjdCk7CkBAIC0xMDQsOCArMTA0LDggQEAgdm9pZCBH
bG9iYWw6OnNldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGFyZ3VtZW50
KQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaXNSZWZXaXRoVHlwZUluZGV4KG1f
dHlwZSkgJiYgIWFyZ3VtZW50LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IG1fdHlwZS5pbmRleDsKLSAgICAgICAgICAgICAgICBX
YXNtOjpTaWduYXR1cmVJbmRleCBhcmdJbmRleCA9IHdhc21GdW5jdGlvbiA/IHdhc21GdW5jdGlv
bi0+c2lnbmF0dXJlSW5kZXgoKSA6IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4
KCk7CisgICAgICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IHBhcmFtSW5kZXggPSBtX3R5cGUu
aW5kZXg7CisgICAgICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IGFyZ0luZGV4ID0gd2FzbUZ1
bmN0aW9uID8gd2FzbUZ1bmN0aW9uLT50eXBlSW5kZXgoKSA6IHdhc21XcmFwcGVyRnVuY3Rpb24t
PnR5cGVJbmRleCgpOwogICAgICAgICAgICAgICAgIGlmIChwYXJhbUluZGV4ICE9IGFyZ0luZGV4
KSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZt
LCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5vdCBtYXRjaCB0aGUgcmVmZXJlbmNlIHR5cGUiX3Mp
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUdsb2JhbC5oCmluZGV4IDE3Zjg4NjgxZTA2ZTQwMjI4MGQxOWFmYTJlZWJiY2FlOGQ5YmQx
NWUuLjQzOGE3Zjc0MGZmOTkzMTZjNzY1ODEzZWFlODcyZjdkNjc5NDBmOTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21HbG9iYWwuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKQEAgLTQ4LDEzICs0OCwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIFZhbHVlKiBtX3BvaW50ZXI7CiAgICAgfTsKIAotICAgIHN0YXRpYyBSZWY8R2xv
YmFsPiBjcmVhdGUoV2FzbTo6VHlwZSB0eXBlLCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0
YWJpbGl0eSBtdXRhYmlsaXR5LCB1aW50NjRfdCBpbml0aWFsVmFsdWUgPSAwKQorICAgIHN0YXRp
YyBSZWY8R2xvYmFsPiBjcmVhdGUoV2FzbTo6VHlwZSB0eXBlLCBXYXNtOjpNdXRhYmlsaXR5IG11
dGFiaWxpdHksIHVpbnQ2NF90IGluaXRpYWxWYWx1ZSA9IDApCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBHbG9iYWwodHlwZSwgbXV0YWJpbGl0eSwgaW5pdGlhbFZhbHVlKSk7
CiAgICAgfQogCiAgICAgV2FzbTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0gICAgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHkgbXV0YWJpbGl0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fbXV0YWJpbGl0eTsgfQorICAgIFdhc206Ok11dGFiaWxpdHkgbXV0YWJp
bGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YWJpbGl0eTsgfQogICAgIEpTVmFsdWUgZ2V0KEpT
R2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgdWludDY0X3QgZ2V0UHJpbWl0aXZlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZS5tX3ByaW1pdGl2ZTsgfQogICAgIHZvaWQgc2V0KEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICBWYWx1ZSogdmFs
dWVQb2ludGVyKCkgeyByZXR1cm4gJm1fdmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBHbG9iYWwo
V2FzbTo6VHlwZSB0eXBlLCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eSBtdXRh
YmlsaXR5LCB1aW50NjRfdCBpbml0aWFsVmFsdWUpCisgICAgR2xvYmFsKFdhc206OlR5cGUgdHlw
ZSwgV2FzbTo6TXV0YWJpbGl0eSBtdXRhYmlsaXR5LCB1aW50NjRfdCBpbml0aWFsVmFsdWUpCiAg
ICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9tdXRhYmlsaXR5KG11dGFiaWxpdHkp
CiAgICAgICAgICwgbV92YWx1ZSgpCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgfQog
CiAgICAgV2FzbTo6VHlwZSBtX3R5cGU7Ci0gICAgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11
dGFiaWxpdHkgbV9tdXRhYmlsaXR5OworICAgIFdhc206Ok11dGFiaWxpdHkgbV9tdXRhYmlsaXR5
OwogICAgIEpTT2JqZWN0KiBtX293bmVyIHsgbnVsbHB0ciB9OwogICAgIFZhbHVlIG1fdmFsdWU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKaW5kZXgg
YWVmNjIxOTAyZTExZjNjZGRlNzYyYWVjYTU3YjhkZDg0YmYwMWNlNy4uMjFlZDIxODk1NjUwNWFl
ZTlmMDNkZGE2NjUzZWUwMjAwZmEwYzNhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtSW5zdGFuY2UuY3BwCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJXYXNtTW9k
dWxlSW5mb3JtYXRpb24uaCIKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIldhc21UYWcuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgi
CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBJbnN0YW5jZTo6aW5pdEVs
ZW1lbnRTZWdtZW50KHVpbnQzMl90IHRhYmxlSW5kZXgsIGNvbnN0IEVsZW1lbnQmIHNlZ21lbnQs
IHUKICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTAKICAgICAgICAgdWludDMyX3QgZnVuY3Rp
b25JbmRleCA9IHNlZ21lbnQuZnVuY3Rpb25JbmRpY2VzW3NyY0luZGV4XTsKLSAgICAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICBUeXBlSW5kZXggdHlw
ZUluZGV4ID0gbV9tb2R1bGUtPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rp
b25JbmRleCk7CiAgICAgICAgIGlmIChpc0ltcG9ydEZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKSB7
CiAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBpbXBvcnRGdW5jdGlvbjxX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+PihmdW5jdGlvbkluZGV4KS0+Z2V0KCk7CiAgICAgICAgICAg
ICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbih2bSwgZnVuY3Rpb25JbXBvcnQpKSB7CkBA
IC0yNTEsMTQgKzI1MSwxNCBAQCB2b2lkIEluc3RhbmNlOjppbml0RWxlbWVudFNlZ21lbnQodWlu
dDMyX3QgdGFibGVJbmRleCwgY29uc3QgRWxlbWVudCYgc2VnbWVudCwgdQogICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uSW1wb3J0LAogICAgICAgICAgICAgICAgIGZ1bmN0aW9uSW5kZXgsCiAgICAg
ICAgICAgICAgICAganNJbnN0YW5jZSwKLSAgICAgICAgICAgICAgICBzaWduYXR1cmVJbmRleCk7
CisgICAgICAgICAgICAgICAgdHlwZUluZGV4KTsKICAgICAgICAgICAgIGpzVGFibGUtPnNldChk
c3RJbmRleCwgd3JhcHBlckZ1bmN0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKICAgICAgICAgQ2FsbGVlJiBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUgPSBjYWxsZWVH
cm91cCgpLT5lbWJlZGRlckVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1
bmN0aW9uSW5kZXgpOwogICAgICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2Fk
TG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IGNhbGxlZUdyb3VwKCktPmVudHJ5cG9p
bnRMb2FkTG9jYXRpb25Gcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAg
ICAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpn
ZXQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBUeXBl
SW5mb3JtYXRpb246OmdldEZ1bmN0aW9uU2lnbmF0dXJlKHR5cGVJbmRleCk7CiAgICAgICAgIC8v
IEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGlu
ZGV4IDAuCiAgICAgICAgIC8vIFdoYXQgaWYgd2UgYWxzbyBzZXQgaXQgdG8gdGhlIHRhYmxlIGFu
IEVsZW1lbnQgdy8gaW5kZXggMC4KICAgICAgICAgLy8gRG9lcyAobmV3IEluc3RhbmNlKC4uLikp
LmV4cG9ydHMuZm9vID09PSB0YWJsZS5nZXQoMCk/CkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBJ
bnN0YW5jZTo6aW5pdEVsZW1lbnRTZWdtZW50KHVpbnQzMl90IHRhYmxlSW5kZXgsIGNvbnN0IEVs
ZW1lbnQmIHNlZ21lbnQsIHUKICAgICAgICAgICAgIGpzSW5zdGFuY2UsCiAgICAgICAgICAgICBl
bWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsCiAgICAgICAgICAgICBlbnRyeXBvaW50TG9hZExvY2F0
aW9uLAotICAgICAgICAgICAgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgdHlwZUluZGV4
KTsKICAgICAgICAganNUYWJsZS0+c2V0KGRzdEluZGV4LCBmdW5jdGlvbik7CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9y
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAK
aW5kZXggMTM1NjkwZGEyZDYwYjdjYmM2OTliYTI1NjM0ZGIyNWU0N2MwZGQwMS4uNzFlMDY0N2M1
NjY2NmVhMGZmZDNjYzQ1YTRkZTYxMWUwNzkyNzdmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC05NSwyNyArOTUsMjcgQEAg
cHVibGljOgogCiAgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBsb29wKEJsb2NrU2lnbmF0dXJl
IHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgYm9keSwgUmVmUHRy
PExhYmVsPiYmIGNvbnRpbnVhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENv
bnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50
KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbExvb3AgeyBXVEZNb3ZlKGJvZHkpIH0p
OworICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0g
c2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpLCBXVEZN
b3ZlKGNvbnRpbnVhdGlvbiksIENvbnRyb2xMb29wIHsgV1RGTW92ZShib2R5KSB9KTsKICAgICAg
ICAgfQogCiAgICAgICAgIHN0YXRpYyBDb250cm9sVHlwZSBibG9jayhCbG9ja1NpZ25hdHVyZSBz
aWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVhdGlv
bikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwg
c3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0
aW9uKSwgQ29udHJvbEJsb2NrIHsgfSk7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUo
c2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
LT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbEJsb2NrIHsg
fSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgQ29udHJvbFR5cGUgaWZfKEJsb2NrU2ln
bmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+JiYgYWx0ZXJu
YXRlLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJlLCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFy
Z3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9sSWYgeyBXVEZNb3Zl
KGFsdGVybmF0ZSkgfSk7CisgICAgICAgICAgICByZXR1cm4gQ29udHJvbFR5cGUoc2lnbmF0dXJl
LCBzdGFja1NpemUgLSBzaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVu
dENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElmIHsgV1RGTW92ZShhbHRl
cm5hdGUpIH0pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGNyZWF0
ZVRyeShCbG9ja1NpZ25hdHVyZSBzaWduYXR1cmUsIHVuc2lnbmVkIHN0YWNrU2l6ZSwgUmVmPExh
YmVsPiYmIHRyeUxhYmVsLCBSZWZQdHI8TGFiZWw+JiYgY29udGludWF0aW9uLCB1bnNpZ25lZCB0
cnlEZXB0aCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25h
dHVyZSwgc3RhY2tTaXplIC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29u
dGludWF0aW9uKSwgQ29udHJvbFRyeSB7IFdURk1vdmUodHJ5TGFiZWwpLCB0cnlEZXB0aCB9KTsK
KyAgICAgICAgICAgIHJldHVybiBDb250cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNp
Z25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92
ZShjb250aW51YXRpb24pLCBDb250cm9sVHJ5IHsgV1RGTW92ZSh0cnlMYWJlbCksIHRyeURlcHRo
IH0pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIENvbnRyb2xUeXBlIGNyZWF0ZUNhdGNo
KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgdW5zaWduZWQgc3RhY2tTaXplLCBSZWY8TGFiZWw+
JiYgdHJ5U3RhcnQsIFJlZlB0cjxMYWJlbD4mJiBjb250aW51YXRpb24sIFJlZjxMYWJlbD4gdHJ5
RW5kLCB1bnNpZ25lZCB0cnlEZXB0aCwgVmlydHVhbFJlZ2lzdGVyIGV4Y2VwdGlvbikKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXpl
IC0gc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29u
dHJvbENhdGNoIHsgQ2F0Y2hLaW5kOjpDYXRjaCwgV1RGTW92ZSh0cnlTdGFydCksIFdURk1vdmUo
dHJ5RW5kKSwgdHJ5RGVwdGgsIGV4Y2VwdGlvbiB9KTsKKyAgICAgICAgICAgIHJldHVybiBDb250
cm9sVHlwZShzaWduYXR1cmUsIHN0YWNrU2l6ZSAtIHNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWdu
YXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKSwgV1RGTW92ZShjb250aW51YXRpb24pLCBDb250cm9s
Q2F0Y2ggeyBDYXRjaEtpbmQ6OkNhdGNoLCBXVEZNb3ZlKHRyeVN0YXJ0KSwgV1RGTW92ZSh0cnlF
bmQpLCB0cnlEZXB0aCwgZXhjZXB0aW9uIH0pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IGJvb2wgaXNMb29wKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPihjb250cm9sKTsgfQpAQCAtMTQyLDE5ICsxNDIs
MTkgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIG1fY29udGludWF0aW9uOwogICAgICAg
ICB9CiAKLSAgICAgICAgU2lnbmF0dXJlQXJnQ291bnQgYnJhbmNoVGFyZ2V0QXJpdHkoKSBjb25z
dAorICAgICAgICBGdW5jdGlvbkFyZ0NvdW50IGJyYW5jaFRhcmdldEFyaXR5KCkgY29uc3QKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExv
b3A+KCp0aGlzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50
Q291bnQoKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5hcmd1bWVudENvdW50KCk7CisgICAgICAgICAgICByZXR1cm4gbV9zaWduYXR1cmUtPmFz
PEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5yZXR1cm5Db3VudCgpOwogICAgICAgICB9CiAKICAgICAg
ICAgVHlwZSBicmFuY2hUYXJnZXRUeXBlKHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChpIDwgYnJhbmNoVGFyZ2V0QXJpdHkoKSk7CiAgICAgICAgICAgICBp
ZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb250cm9sTG9vcD4oKnRoaXMpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+YXJndW1lbnQoaSk7Ci0gICAgICAgICAgICByZXR1
cm4gbV9zaWduYXR1cmUtPnJldHVyblR5cGUoaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
c2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpOworICAg
ICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0
dXJuVHlwZShpKTsKICAgICAgICAgfQogCiAgICAgICAgIEJsb2NrU2lnbmF0dXJlIG1fc2lnbmF0
dXJlOwpAQCAtMTkxLDcgKzE5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWRSZXN1bHQobWFrZVN0cmluZygiV2ViQXNzZW1ibHkuTW9kdWxlIGZhaWxlZCBjb21waWxpbmc6
ICJfcywgbWFrZVN0cmluZyhhcmdzKS4uLikpOwogICAgIH0KIAotICAgIExMSW50R2VuZXJhdG9y
KE1vZHVsZUluZm9ybWF0aW9uJiwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgU2lnbmF0
dXJlJik7CisgICAgTExJbnRHZW5lcmF0b3IoTW9kdWxlSW5mb3JtYXRpb24mLCB1bnNpZ25lZCBm
dW5jdGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYpOwogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiBmaW5hbGl6ZSgpOwogCkBAIC0yMjMsNyAr
MjIzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRQb3BWYWx1ZUZyb21TdGFjaygpIHsgLS1t
X3N0YWNrU2l6ZTsgfQogCi0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
QXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBUeXBlRGVmaW5pdGlvbiYpOwogICAgIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKICAg
ICBFeHByZXNzaW9uVHlwZSBhZGRDb25zdGFudChUeXBlLCBpbnQ2NF90KTsKIApAQCAtMjg3LDgg
KzI4Nyw4IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRFbHNlVG9VbnJlYWNoYWJsZShDb250cm9sVHlwZSYpOwogCiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkVHJ5KEJsb2NrU2lnbmF0dXJlLCBTdGFjayYgZW5jbG9zaW5n
U3RhY2ssIENvbnRyb2xUeXBlJiByZXN1bHQsIFN0YWNrJiBuZXdTdGFjayk7Ci0gICAgUGFydGlh
bFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2godW5zaWduZWQgZXhjZXB0aW9uSW5k
ZXgsIGNvbnN0IFNpZ25hdHVyZSYsIFN0YWNrJiwgQ29udHJvbFR5cGUmLCBSZXN1bHRMaXN0Jik7
Ci0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2F0Y2hUb1VucmVhY2hh
YmxlKHVuc2lnbmVkIGV4Y2VwdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmLCBDb250cm9sVHlw
ZSYsIFJlc3VsdExpc3QmKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBh
ZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBT
dGFjayYsIENvbnRyb2xUeXBlJiwgUmVzdWx0TGlzdCYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FS
Tl9VTlVTRURfUkVUVVJOIGFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25J
bmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBDb250cm9sVHlwZSYsIFJlc3VsdExpc3QmKTsK
ICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYXRjaEFsbChTdGFjayYs
IENvbnRyb2xUeXBlJik7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2F0Y2hBbGxUb1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJik7CiAgICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkRGVsZWdhdGUoQ29udHJvbFR5cGUmLCBDb250cm9sVHlwZSYp
OwpAQCAtMzA0LDkgKzMwNCw5IEBAIHB1YmxpYzoKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5V
U0VEX1JFVFVSTiBlbmRUb3BMZXZlbChCbG9ja1NpZ25hdHVyZSwgY29uc3QgU3RhY2smKTsKIAog
ICAgIC8vIENhbGxzCi0gICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2Fs
bCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Np
b25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7Ci0gICAgUGFydGlhbFJlc3VsdCBX
QVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNv
bnN0IFNpZ25hdHVyZSYsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3Qm
IHJlc3VsdHMpOwotICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZENhbGxS
ZWYoY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgUmVzdWx0
TGlzdCYgcmVzdWx0cyk7CisgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRk
Q2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBWZWN0b3I8
RXhwcmVzc2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFs
UmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJ
bmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+JiBhcmdz
LCBSZXN1bHRMaXN0JiByZXN1bHRzKTsKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JF
VFVSTiBhZGRDYWxsUmVmKGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cyk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gYWRkVW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZGlkRmluaXNoUGFy
c2luZ0xvY2FscygpOwpAQCAtMzI4LDggKzMyOCw4IEBAIHByaXZhdGU6CiAgICAgICAgIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoUmVzdWx0TGlzdCYpPiBjb21taXRSZXN1bHRzOwogICAgIH07CiAK
LSAgICBMTEludENhbGxJbmZvcm1hdGlvbiBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3Qg
U2lnbmF0dXJlJik7Ci0gICAgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMj4gY2FsbEluZm9ybWF0
aW9uRm9yQ2FsbGVlKGNvbnN0IFNpZ25hdHVyZSYpOworICAgIExMSW50Q2FsbEluZm9ybWF0aW9u
IGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBGdW5jdGlvblNpZ25hdHVyZSYpOworICAg
IFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDI+IGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShjb25z
dCBGdW5jdGlvblNpZ25hdHVyZSYpOwogICAgIHZvaWQgbGlua1N3aXRjaFRhcmdldHMoTGFiZWwm
LCB1bnNpZ25lZCBsb2NhdGlvbik7CiAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyRm9yV2FzbUxvY2FsKHVpbnQzMl90IGluZGV4KQpAQCAtNTAwLDcgKzUwMCw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3VzZXNFeGNlcHRpb25zIHsgZmFsc2UgfTsKIH07CiAKLUV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvcj4sIFN0cmluZz4gcGFy
c2VBbmRDb21waWxlQnl0ZWNvZGUoY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90
IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgTW9kdWxlSW5mb3Jt
YXRpb24mIGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCitFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGls
ZUJ5dGVjb2RlKGNvbnN0IHVpbnQ4X3QqIGZ1bmN0aW9uU3RhcnQsIHNpemVfdCBmdW5jdGlvbkxl
bmd0aCwgY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgTW9kdWxlSW5mb3JtYXRpb24m
IGluZm8sIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCiB7CiAgICAgTExJbnRHZW5lcmF0b3IgbGxp
bnRHZW5lcmF0b3IoaW5mbywgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlKTsKICAgICBGdW5jdGlv
blBhcnNlcjxMTEludEdlbmVyYXRvcj4gcGFyc2VyKGxsaW50R2VuZXJhdG9yLCBmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBpbmZvKTsKQEAgLTUyNCw3ICs1MjQsNyBA
QCBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8QnVmZmVyPiYgdGhyZWFkU3BlY2lmaWNCdWZmZXIoKQog
ICAgIHJldHVybiAqdGhyZWFkU3BlY2lmaWNCdWZmZXJQdHI7CiB9CiAKLUxMSW50R2VuZXJhdG9y
OjpMTEludEdlbmVyYXRvcihNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rp
b25JbmRleCwgY29uc3QgU2lnbmF0dXJlJikKK0xMSW50R2VuZXJhdG9yOjpMTEludEdlbmVyYXRv
cihNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgdW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3Qg
VHlwZURlZmluaXRpb24mKQogICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8
RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+KGZ1bmN0aW9uSW5kZXgpLCAwKQogICAgICwgbV9p
bmZvKGluZm8pCiAgICAgLCBtX2Z1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKQEAgLTU2NSw3
ICs1NjUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db2RlQmxvY2tHZW5lcmF0b3I+IExM
SW50R2VuZXJhdG9yOjpmaW5hbGl6ZSgpCiAvLyBHZW5lcmF0ZWQgZnJvbSB3YXNtLmpzb24KICNp
bmNsdWRlICJXYXNtTExJbnRHZW5lcmF0b3JJbmxpbmVzLmgiCiAKLWF1dG8gTExJbnRHZW5lcmF0
b3I6OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkg
LT4gTExJbnRDYWxsSW5mb3JtYXRpb24KK2F1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1h
dGlvbkZvckNhbGxlcihjb25zdCBGdW5jdGlvblNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTElu
dENhbGxJbmZvcm1hdGlvbgogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgc3Rh
Y2sgbGF5b3V0IGZvciBjYWxscy4gVGhlIGRlc2lyZWQgc3RhY2sgbGF5b3V0IGlzOgogCkBAIC02
MjIsMTMgKzYyMiwxNCBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JD
YWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6
OkZ1bmM6CisgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9OwogCiAKICAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKQotICAg
ICAgICBhbGxvY2F0ZVN0YWNrUmVnaXN0ZXIoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKTsKKyAgICAg
ICAgYWxsb2NhdGVTdGFja1JlZ2lzdGVyKHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSkpOwogCiAg
ICAgZ3BySW5kZXggPSAwOwogICAgIGZwckluZGV4ID0gMDsKQEAgLTY1OCw3ICs2NTksNyBAQCBh
dXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUpIC0+IExMSQogICAgIGdwckluZGV4ID0gYmFzZSAtIHN0YWNrQ291bnQ7
CiAgICAgZnBySW5kZXggPSBncHJJbmRleCAtIGdwckNvdW50OwogICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKLSAgICAgICAgc3dp
dGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkua2luZCkgeworICAgICAgICBzd2l0Y2ggKHNpZ25h
dHVyZS5hcmd1bWVudFR5cGUoaSkua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpJMzI6
CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6Okk2NDoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6RXh0
ZXJucmVmOgpAQCAtNjc5LDYgKzY4MCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZv
cm1hdGlvbkZvckNhbGxlcihjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gTExJCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6Vm9pZDoKICAgICAgICAgY2Fz
ZSBUeXBlS2luZDo6RnVuYzoKKyAgICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0OgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTcwOCw2ICs3MTAsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjpjYWxsSW5mb3JtYXRpb25Gb3JD
YWxsZXIoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpIC0+IExMSQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6
OkZ1bmM6CisgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlN0cnVjdDoKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC03MjYsNyArNzI5
LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6Y2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBMTEkKICAgICByZXR1cm4gTExJbnRDYWxsSW5mb3Jt
YXRpb24geyBzdGFja09mZnNldCwgc3RhY2tDb3VudCwgV1RGTW92ZShhcmd1bWVudHMpLCBXVEZN
b3ZlKGNvbW1pdFJlc3VsdHMpIH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZv
cm1hdGlvbkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjdG9yPFZp
cnR1YWxSZWdpc3RlciwgMj4KK2F1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZvcm1hdGlvbkZv
ckNhbGxlZShjb25zdCBGdW5jdGlvblNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCAyPgogewogICAgIGlmIChtX3Jlc3VsdHMuc2l6ZSgpKQogICAgICAgICBy
ZXR1cm4gbV9yZXN1bHRzOwpAQCAtNzY1LDYgKzc2OCw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6
OmNhbGxJbmZvcm1hdGlvbkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4g
VmVjCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlS2luZDo6Vm9pZDoKICAg
ICAgICAgY2FzZSBUeXBlS2luZDo6RnVuYzoKKyAgICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTc3MiwxMSArNzc2LDExIEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmNhbGxJbmZv
cm1hdGlvbkZvckNhbGxlZShjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkgLT4gVmVjCiAgICAg
cmV0dXJuIG1fcmVzdWx0czsKIH0KIAotYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRz
KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50
R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSkg
LT4gUGFydGlhbFJlc3VsdAogewogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIG1fY29k
ZUJsb2NrLT5tX251bUFyZ3VtZW50cyA9IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7CisgICAg
bV9jb2RlQmxvY2stPm1fbnVtQXJndW1lbnRzID0gc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0
dXJlPigpLT5hcmd1bWVudENvdW50KCk7CiAgICAgbV9ub3JtYWxpemVkQXJndW1lbnRzLnJlc2l6
ZShtX2NvZGVCbG9jay0+bV9udW1Bcmd1bWVudHMpOwogCiAgICAgY29uc3QgYXV0byYgY2FsbGlu
Z0NvbnZlbnRpb24gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKQEAgLTc5OSw4ICs4MDMsOCBA
QCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUpIC0+IFBhcnRpYWxSZXN1bHQKICAgICAgICAgICAgIG1fbm9ybWFsaXplZEFyZ3VtZW50
c1tpbmRleF0gPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoc3RhY2tJ
bmRleCsrKTsKICAgICB9OwogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCk7IGkrKykgewotICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1
bWVudChpKS5raW5kKSB7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpZ25hdHVyZS5h
czxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAg
c3dpdGNoIChzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlwZShp
KS5raW5kKSB7CiAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OkkzMjoKICAgICAgICAgY2FzZSBUeXBl
S2luZDo6STY0OgogICAgICAgICBjYXNlIFR5cGVLaW5kOjpFeHRlcm5yZWY6CkBAIC04MTUsNiAr
ODE5LDcgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBUeXBlS2luZDo6Vm9pZDoKICAgICAgICAgY2FzZSBUeXBlS2luZDo6RnVuYzoKKyAg
ICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwMjAsNyArMTAyNSw3IEBAIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGRhdGEsIFN0YWNrJiBleHBy
ZXNzaW9uU3RhY2spIC0+IFBhcnRpCiAKIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VUb1Vu
cmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgbV9z
dGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+YXJndW1lbnRD
b3VudCgpOworICAgIG1fc3RhY2tTaXplID0gZGF0YS5zdGFja1NpemUoKSArIGRhdGEubV9zaWdu
YXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7CiAKICAgICBD
b250cm9sSWYmIGNvbnRyb2wgPSBzdGQ6OmdldDxDb250cm9sSWY+KGRhdGEpOwogICAgIGVtaXRM
YWJlbChjb250cm9sLm1fYWx0ZXJuYXRlLmdldCgpKTsKQEAgLTEwNTYsMTMgKzEwNjEsMTMgQEAg
dm9pZCBMTEludEdlbmVyYXRvcjo6ZmluYWxpemVQcmV2aW91c0Jsb2NrRm9yQ2F0Y2goQ29udHJv
bFR5cGUmIGRhdGEsIFN0YWNrJiBleHAKICAgICBXYXNtSm1wOjplbWl0KHRoaXMsIGRhdGEubV9j
b250aW51YXRpb24tPmJpbmQodGhpcykpOwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRD
YXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBleGNlcHRpb25T
aWduYXR1cmUsIFN0YWNrJiBleHByZXNzaW9uU3RhY2ssIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1
bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjph
ZGRDYXRjaCh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgVHlwZURlZmluaXRpb24mIGV4
Y2VwdGlvblNpZ25hdHVyZSwgU3RhY2smIGV4cHJlc3Npb25TdGFjaywgQ29udHJvbFR5cGUmIGRh
dGEsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBmaW5hbGl6
ZVByZXZpb3VzQmxvY2tGb3JDYXRjaChkYXRhLCBleHByZXNzaW9uU3RhY2spOwogICAgIHJldHVy
biBhZGRDYXRjaFRvVW5yZWFjaGFibGUoZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvblNpZ25hdHVy
ZSwgZGF0YSwgcmVzdWx0cyk7CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9V
bnJlYWNoYWJsZSh1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0dXJlJiBleGNl
cHRpb25TaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAt
PiBQYXJ0aWFsUmVzdWx0CithdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYXRjaFRvVW5yZWFjaGFi
bGUodW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBleGNlcHRp
b25TaWduYXR1cmUsIENvbnRyb2xUeXBlJiBkYXRhLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7CiAgICAgbV91c2VzRXhjZXB0aW9ucyA9IHRydWU7CiAgICAgUmVmPExh
YmVsPiBjYXRjaExhYmVsID0gbmV3RW1pdHRlZExhYmVsKCk7CkBAIC0xMDczLDE3ICsxMDc4LDE3
IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhdGNoVG9VbnJlYWNoYWJsZSh1bnNpZ25lZCBl
eGNlcHRpb25JbmRleCwgY29uc3QgU2lnbmF0CiAgICAgICAgIENvbnRyb2xUcnkmIHRyeURhdGEg
PSBzdGQ6OmdldDxDb250cm9sVHJ5PihkYXRhKTsKICAgICAgICAgZGF0YSA9IENvbnRyb2xUeXBl
OjpjcmVhdGVDYXRjaChkYXRhLm1fc2lnbmF0dXJlLCBkYXRhLnN0YWNrU2l6ZSgpLCBXVEZNb3Zl
KHRyeURhdGEubV90cnkpLCBXVEZNb3ZlKGRhdGEubV9jb250aW51YXRpb24pLCBjYXRjaExhYmVs
LCB0cnlEYXRhLm1fdHJ5RGVwdGgsIGV4Y2VwdGlvbik7CiAgICAgfQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyArK2kpCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4Y2VwdGlvblNpZ25hdHVyZS5hczxGdW5jdGlv
blNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpOyArK2kpCiAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHB1c2goKSk7CiAKICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQotICAgICAgICBX
YXNtQ2F0Y2g6OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9u
U2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwgcmVzdWx0cy5pc0VtcHR5KCkgPyAwIDogLXJlc3Vs
dHNbMF0ub2Zmc2V0KCkpOworICAgICAgICBXYXNtQ2F0Y2g6OmVtaXQodGhpcywgZXhjZXB0aW9u
SW5kZXgsIGV4Y2VwdGlvbiwgZXhjZXB0aW9uU2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJl
PigpLT5hcmd1bWVudENvdW50KCksIHJlc3VsdHMuaXNFbXB0eSgpID8gMCA6IC1yZXN1bHRzWzBd
Lm9mZnNldCgpKTsKICAgICBlbHNlCi0gICAgICAgIFdhc21DYXRjaE5vVGxzOjplbWl0KHRoaXMs
IGV4Y2VwdGlvbkluZGV4LCBleGNlcHRpb24sIGV4Y2VwdGlvblNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCksIHJlc3VsdHMuaXNFbXB0eSgpID8gMCA6IC1yZXN1bHRzWzBdLm9mZnNldCgpKTsKKyAg
ICAgICAgV2FzbUNhdGNoTm9UbHM6OmVtaXQodGhpcywgZXhjZXB0aW9uSW5kZXgsIGV4Y2VwdGlv
biwgZXhjZXB0aW9uU2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENv
dW50KCksIHJlc3VsdHMuaXNFbXB0eSgpID8gMCA6IC1yZXN1bHRzWzBdLm9mZnNldCgpKTsKIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGNlcHRpb25TaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjZXB0aW9uU2ln
bmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5hcmd1bWVudENvdW50KCk7ICsraSkgewog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gcmVzdWx0c1tpXTsKLSAgICAgICAgVHlwZSB0
eXBlID0gZXhjZXB0aW9uU2lnbmF0dXJlLmFyZ3VtZW50KGkpOworICAgICAgICBUeXBlIHR5cGUg
PSBleGNlcHRpb25TaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50VHlw
ZShpKTsKICAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQpIHsKICAgICAgICAgY2FzZSBXYXNtOjpU
eXBlS2luZDo6RjMyOgogICAgICAgICAgICAgV2FzbUYzMlJlaW50ZXJwcmV0STMyOjplbWl0KHRo
aXMsIGRzdCwgZHN0KTsKQEAgLTExODUsMTMgKzExOTAsMTMgQEAgYXV0byBMTEludEdlbmVyYXRv
cjo6YWRkUmV0aHJvdyh1bnNpZ25lZCwgQ29udHJvbFR5cGUmIGRhdGEpIC0+IFBhcnRpYWxSZXN1
bHQKIAogYXV0byBMTEludEdlbmVyYXRvcjo6YWRkUmV0dXJuKGNvbnN0IENvbnRyb2xUeXBlJiBk
YXRhLCBTdGFjayYgcmV0dXJuVmFsdWVzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgaWYgKCFk
YXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSB7CisgICAgaWYgKCFkYXRhLm1fc2lnbmF0
dXJlLT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+cmV0dXJuQ291bnQoKSkgewogICAgICAgICBX
YXNtUmV0Vm9pZDo6ZW1pdCh0aGlzKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICAvLyBubyBuZWVkIHRvIGRyb3Aga2VlcCBoZXJlLCBzaW5jZSB3ZSBoYXZlIHRvIG1vdmUgYW55
d2F5Ci0gICAgdW5pZnlWYWx1ZXNXaXRoQmxvY2soY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVlKCpk
YXRhLm1fc2lnbmF0dXJlKSwgcmV0dXJuVmFsdWVzKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoKmRhdGEubV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9u
U2lnbmF0dXJlPigpKSwgcmV0dXJuVmFsdWVzKTsKICAgICBXYXNtUmV0OjplbWl0KHRoaXMpOwog
CiAgICAgcmV0dXJuIHsgfTsKQEAgLTEyNjksMTQgKzEyNzQsMTQgQEAgYXV0byBMTEludEdlbmVy
YXRvcjo6YWRkRW5kVG9VbnJlYWNoYWJsZShDb250cm9sRW50cnkmIGVudHJ5LCBTdGFjayYgZXhw
cmVzc2lvblMKICAgICB1bnNpZ25lZCBzdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpOwogICAg
IGlmIChDb250cm9sVHlwZTo6aXNBbnlDYXRjaChlbnRyeS5jb250cm9sRGF0YSkpCiAgICAgICAg
ICsrc3RhY2tTaXplOyAvLyBBY2NvdW50IGZvciB0aGUgY2F1Z2h0IGV4Y2VwdGlvbgotICAgIFJF
TEVBU0VfQVNTRVJUKHVucmVhY2hhYmxlIHx8IG1fc3RhY2tTaXplID09ICBzdGFja1NpemUgKyBk
YXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh1bnJl
YWNoYWJsZSB8fCBtX3N0YWNrU2l6ZSA9PSAgc3RhY2tTaXplICsgZGF0YS5tX3NpZ25hdHVyZS0+
YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCkpOwogCiAgICAgbV9zdGFja1Np
emUgPSBkYXRhLnN0YWNrU2l6ZSgpOwogCiAgICAgaWYgKENvbnRyb2xUeXBlOjppc1RyeShkYXRh
KSB8fCBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xDYXRjaD4oZGF0YSkpCiAgICAgICAg
IC0tbV90cnlEZXB0aDsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fc2ln
bmF0dXJlLT5yZXR1cm5Db3VudCgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS5tX3NpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50
KCk7ICsraSkgewogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvIGEgY29uc2lzdGVuY3kg
Y2hlY2sgaGVyZSBiZWNhdXNlIHdlIGp1c3QgcmVzZXQgdGhlIHN0YWNrIHNpemUKICAgICAgICAg
Ly8gYXJlIHB1c2hpbmcgbmV3IHZhbHVlcywgd2hpbGUgd2UgYWxyZWFkeSBoYXZlIHRoZSBzYW1l
IHZhbHVlcyBpbiB0aGUgc3RhY2suCiAgICAgICAgIC8vIFRoZSBvbmx5IHJlYXNvbiB3ZSBkbyB0
aGluZ3MgdGhpcyB3YXkgaXMgc28gdGhhdCBpdCBhbHNvIHdvcmtzIGZvciB1bnJlYWNoYWJsZSBi
bG9ja3MsCkBAIC0xMjg1LDcgKzEyOTAsNyBAQCBhdXRvIExMSW50R2VuZXJhdG9yOjphZGRFbmRU
b1VucmVhY2hhYmxlKENvbnRyb2xFbnRyeSYgZW50cnksIFN0YWNrJiBleHByZXNzaW9uUwogICAg
ICAgICBhdXRvIHRtcCA9IHB1c2goTm9Db25zaXN0ZW5jeUNoZWNrKTsKICAgICAgICAgQVNTRVJU
KHVucmVhY2hhYmxlIHx8IHRtcCA9PSBleHByZXNzaW9uU3RhY2tbaV0udmFsdWUoKSk7CiAgICAg
ICAgIGlmICh1bnJlYWNoYWJsZSkKLSAgICAgICAgICAgIGVudHJ5LmVuY2xvc2VkRXhwcmVzc2lv
blN0YWNrLmNvbnN0cnVjdEFuZEFwcGVuZChkYXRhLm1fc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkp
LCB0bXApOworICAgICAgICAgICAgZW50cnkuZW5jbG9zZWRFeHByZXNzaW9uU3RhY2suY29uc3Ry
dWN0QW5kQXBwZW5kKGRhdGEubV9zaWduYXR1cmUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5y
ZXR1cm5UeXBlKGkpLCB0bXApOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlbnRyeS5lbmNs
b3NlZEV4cHJlc3Npb25TdGFjay5hcHBlbmQoZXhwcmVzc2lvblN0YWNrW2ldKTsKICAgICB9CkBA
IC0xMzAyLDI0ICsxMzA3LDI0IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVuZFRvVW5yZWFj
aGFibGUoQ29udHJvbEVudHJ5JiBlbnRyeSwgU3RhY2smIGV4cHJlc3Npb25TCiAKIGF1dG8gTExJ
bnRHZW5lcmF0b3I6OmVuZFRvcExldmVsKEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSwgY29uc3Qg
U3RhY2smIGV4cHJlc3Npb25TdGFjaykgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFJFTEVBU0Vf
QVNTRVJUKGV4cHJlc3Npb25TdGFjay5zaXplKCkgPT0gc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChleHByZXNzaW9uU3RhY2suc2l6ZSgpID09IHNpZ25hdHVy
ZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCkpOwogCi0gICAgaWYgKCFz
aWduYXR1cmUtPnJldHVybkNvdW50KCkpIHsKKyAgICBpZiAoIXNpZ25hdHVyZS0+YXM8RnVuY3Rp
b25TaWduYXR1cmU+KCktPnJldHVybkNvdW50KCkpIHsKICAgICAgICAgV2FzbVJldFZvaWQ6OmVt
aXQodGhpcyk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGNhbGxJbmZvcm1hdGlvbkZvckNhbGxl
ZSgqc2lnbmF0dXJlKSwgZXhwcmVzc2lvblN0YWNrKTsKKyAgICB1bmlmeVZhbHVlc1dpdGhCbG9j
ayhjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZWUoKnNpZ25hdHVyZS0+YXM8RnVuY3Rpb25TaWduYXR1
cmU+KCkpLCBleHByZXNzaW9uU3RhY2spOwogICAgIFdhc21SZXQ6OmVtaXQodGhpcyk7CiAKICAg
ICByZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVz
c2lvblR5cGU+JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0Cith
dXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0
IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3Ms
IFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBBU1NFUlQoc2ln
bmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7Ci0gICAgTExJbnRDYWxsSW5m
b3JtYXRpb24gaW5mbyA9IGNhbGxJbmZvcm1hdGlvbkZvckNhbGxlcihzaWduYXR1cmUpOworICAg
IEFTU0VSVChzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQo
KSA9PSBhcmdzLnNpemUoKSk7CisgICAgTExJbnRDYWxsSW5mb3JtYXRpb24gaW5mbyA9IGNhbGxJ
bmZvcm1hdGlvbkZvckNhbGxlcigqc2lnbmF0dXJlLmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpKTsK
ICAgICB1bmlmeVZhbHVlc1dpdGhCbG9jayhpbmZvLmFyZ3VtZW50cywgYXJncyk7CiAgICAgaWYg
KENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgV2FzbUNhbGw6OmVtaXQodGhpcywgZnVu
Y3Rpb25JbmRleCwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1lbnRz
KTsKQEAgLTEzMzAsMzUgKzEzMzUsMzUgQEAgYXV0byBMTEludEdlbmVyYXRvcjo6YWRkQ2FsbCh1
aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwKICAgICBy
ZXR1cm4geyB9OwogfQogCi1hdXRvIExMSW50R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5z
aWduZWQgdGFibGVJbmRleCwgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHBy
ZXNzaW9uVHlwZT4mIGFyZ3MsIFJlc3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQK
K2F1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpZ25lZCB0YWJsZUluZGV4
LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvblR5cGU+
JiBhcmdzLCBSZXN1bHRMaXN0JiByZXN1bHRzKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlSW5kZXggPSBhcmdzLnRha2VMYXN0KCk7CiAKLSAgICBBU1NFUlQo
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUoKSk7CisgICAgQVNTRVJUKHNp
Z25hdHVyZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKS0+YXJndW1lbnRDb3VudCgpID09IGFyZ3Mu
c2l6ZSgpKTsKICAgICBBU1NFUlQobV9pbmZvLnRhYmxlQ291bnQoKSA+IHRhYmxlSW5kZXgpOwog
ICAgIEFTU0VSVChtX2luZm8udGFibGVzW3RhYmxlSW5kZXhdLnR5cGUoKSA9PSBUYWJsZUVsZW1l
bnRUeXBlOjpGdW5jcmVmKTsKIAotICAgIExMSW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxs
SW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0dXJlKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlv
biBpbmZvID0gY2FsbEluZm9ybWF0aW9uRm9yQ2FsbGVyKCpzaWduYXR1cmUuYXM8RnVuY3Rpb25T
aWduYXR1cmU+KCkpOwogICAgIHVuaWZ5VmFsdWVzV2l0aEJsb2NrKGluZm8uYXJndW1lbnRzLCBh
cmdzKTsKICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQotICAgICAgICBXYXNtQ2FsbElu
ZGlyZWN0OjplbWl0KHRoaXMsIGNhbGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJl
KHNpZ25hdHVyZSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3VtZW50
cywgdGFibGVJbmRleCk7CisgICAgICAgIFdhc21DYWxsSW5kaXJlY3Q6OmVtaXQodGhpcywgY2Fs
bGVlSW5kZXgsIG1fY29kZUJsb2NrLT5hZGRTaWduYXR1cmUoKnNpZ25hdHVyZS5hczxGdW5jdGlv
blNpZ25hdHVyZT4oKSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVyT2ZTdGFja0FyZ3Vt
ZW50cywgdGFibGVJbmRleCk7CiAgICAgZWxzZQotICAgICAgICBXYXNtQ2FsbEluZGlyZWN0Tm9U
bHM6OmVtaXQodGhpcywgY2FsbGVlSW5kZXgsIG1fY29kZUJsb2NrLT5hZGRTaWduYXR1cmUoc2ln
bmF0dXJlKSwgaW5mby5zdGFja09mZnNldCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1lbnRzLCB0
YWJsZUluZGV4KTsKKyAgICAgICAgV2FzbUNhbGxJbmRpcmVjdE5vVGxzOjplbWl0KHRoaXMsIGNh
bGxlZUluZGV4LCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKCpzaWduYXR1cmUuYXM8RnVuY3Rp
b25TaWduYXR1cmU+KCkpLCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1
bWVudHMsIHRhYmxlSW5kZXgpOwogICAgIGluZm8uY29tbWl0UmVzdWx0cyhyZXN1bHRzKTsKIAog
ICAgIHJldHVybiB7IH07CiB9CiAKLWF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29u
c3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIFJl
c3VsdExpc3QmIHJlc3VsdHMpIC0+IFBhcnRpYWxSZXN1bHQKK2F1dG8gTExJbnRHZW5lcmF0b3I6
OmFkZENhbGxSZWYoY29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJl
c3Npb25UeXBlPiYgYXJncywgUmVzdWx0TGlzdCYgcmVzdWx0cykgLT4gUGFydGlhbFJlc3VsdAog
ewogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxlZSA9IGFyZ3MudGFrZUxhc3QoKTsKIAotICAgIExM
SW50Q2FsbEluZm9ybWF0aW9uIGluZm8gPSBjYWxsSW5mb3JtYXRpb25Gb3JDYWxsZXIoc2lnbmF0
dXJlKTsKKyAgICBMTEludENhbGxJbmZvcm1hdGlvbiBpbmZvID0gY2FsbEluZm9ybWF0aW9uRm9y
Q2FsbGVyKCpzaWduYXR1cmUuYXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpOwogICAgIHVuaWZ5VmFs
dWVzV2l0aEJsb2NrKGluZm8uYXJndW1lbnRzLCBhcmdzKTsKICAgICBpZiAoQ29udGV4dDo6dXNl
RmFzdFRMUygpKQotICAgICAgICBXYXNtQ2FsbFJlZjo6ZW1pdCh0aGlzLCBjYWxsZWUsIG1fY29k
ZUJsb2NrLT5hZGRTaWduYXR1cmUoc2lnbmF0dXJlKSwgaW5mby5zdGFja09mZnNldCwgaW5mby5u
dW1iZXJPZlN0YWNrQXJndW1lbnRzKTsKKyAgICAgICAgV2FzbUNhbGxSZWY6OmVtaXQodGhpcywg
Y2FsbGVlLCBtX2NvZGVCbG9jay0+YWRkU2lnbmF0dXJlKCpzaWduYXR1cmUuYXM8RnVuY3Rpb25T
aWduYXR1cmU+KCkpLCBpbmZvLnN0YWNrT2Zmc2V0LCBpbmZvLm51bWJlck9mU3RhY2tBcmd1bWVu
dHMpOwogICAgIGVsc2UKLSAgICAgICAgV2FzbUNhbGxSZWZOb1Rsczo6ZW1pdCh0aGlzLCBjYWxs
ZWUsIG1fY29kZUJsb2NrLT5hZGRTaWduYXR1cmUoc2lnbmF0dXJlKSwgaW5mby5zdGFja09mZnNl
dCwgaW5mby5udW1iZXJPZlN0YWNrQXJndW1lbnRzKTsKKyAgICAgICAgV2FzbUNhbGxSZWZOb1Rs
czo6ZW1pdCh0aGlzLCBjYWxsZWUsIG1fY29kZUJsb2NrLT5hZGRTaWduYXR1cmUoKnNpZ25hdHVy
ZS5hczxGdW5jdGlvblNpZ25hdHVyZT4oKSksIGluZm8uc3RhY2tPZmZzZXQsIGluZm8ubnVtYmVy
T2ZTdGFja0FyZ3VtZW50cyk7CiAgICAgaW5mby5jb21taXRSZXN1bHRzKHJlc3VsdHMpOwogCiAg
ICAgcmV0dXJuIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21MTEludEdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50
R2VuZXJhdG9yLmgKaW5kZXggYjU1Y2E1MjAxZDA4NTMyMmRjZTc0MTVjMTAzYmRkN2ZhNmNjZmVm
OS4uYmRmZjQ0NTkyODI4ODM0YTEwNjY4ODViMzE2YjY1YjBiZjdkMjU5OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmgKQEAgLTMzLDEwICsz
MywxMCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogY2xhc3MgRnVuY3Rp
b25Db2RlQmxvY2tHZW5lcmF0b3I7Ci1jbGFzcyBTaWduYXR1cmU7CitjbGFzcyBUeXBlRGVmaW5p
dGlvbjsKIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbjsKIAotRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGVC
eXRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBTaWduYXR1cmUmLCBNb2R1bGVJ
bmZvcm1hdGlvbiYsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpOworRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBp
bGVCeXRlY29kZShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYs
IE1vZHVsZUluZm9ybWF0aW9uJiwgdWludDMyX3QgZnVuY3Rpb25JbmRleCk7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21MTEludFBsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxM
SW50UGxhbi5jcHAKaW5kZXggYzI0OWY5MmNmMDViYjBjOGMzNDRlYTVhYjcxYjM5NmYxYWRiOTRj
MS4uOGI0MzZkMmRjZjU2ZWY2MmVkMmU0NDcyOGI0NDEzMTVmY2M5ODM3YSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50UGxhbi5jcHAKQEAgLTM4LDcgKzM4LDcgQEAK
ICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgogI2luY2x1
ZGUgIldhc21MTEludEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC03OSwxMCArNzksMTAgQEAgYm9vbCBMTEludFBs
YW46OnByZXBhcmVJbXBsKCkKIHZvaWQgTExJbnRQbGFuOjpjb21waWxlRnVuY3Rpb24odWludDMy
X3QgZnVuY3Rpb25JbmRleCkKIHsKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbiA9IG1fbW9kdWxl
SW5mb3JtYXRpb24tPmZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4XTsKLSAgICBTaWduYXR1cmVJbmRl
eCBzaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25T
aWduYXR1cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOwotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAg
VHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rp
b25UeXBlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKKyAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYg
c2lnbmF0dXJlID0gVHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KTsKICAgICB1bnNpZ25l
ZCBmdW5jdGlvbkluZGV4U3BhY2UgPSBtX3dhc21Ub1dhc21FeGl0U3R1YnMuc2l6ZSgpICsgZnVu
Y3Rpb25JbmRleDsKLSAgICBBU1NFUlRfVU5VU0VEKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0
aW9uSW5kZXhTcGFjZSkgPT0gc2lnbmF0dXJlSW5kZXgpOworICAgIEFTU0VSVF9VTlVTRUQoZnVu
Y3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT50eXBlSW5kZXhGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkgPT0gdHlwZUluZGV4KTsKIAogICAgIG1f
dW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4oKTsKICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25D
b2RlQmxvY2tHZW5lcmF0b3I+LCBTdHJpbmc+IHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNl
QW5kQ29tcGlsZUJ5dGVjb2RlKGZ1bmN0aW9uLmRhdGEuZGF0YSgpLCBmdW5jdGlvbi5kYXRhLnNp
emUoKSwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBmdW5jdGlvbkluZGV4
KTsKQEAgLTE0OCw4ICsxNDgsOCBAQCB2b2lkIExMSW50UGxhbjo6ZGlkQ29tcGxldGVDb21waWxh
dGlvbigpCiAKICAgICBmb3IgKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSAwOyBmdW5jdGlvbklu
ZGV4IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+ZnVuY3Rpb25zLnNpemUoKTsgZnVuY3Rpb25JbmRl
eCsrKSB7CiAgICAgICAgIGlmIChtX2V4cG9ydGVkRnVuY3Rpb25JbmRpY2VzLmNvbnRhaW5zKGZ1
bmN0aW9uSW5kZXgpIHx8IG1fbW9kdWxlSW5mb3JtYXRpb24tPnJlZmVyZW5jZWRGdW5jdGlvbnMo
KS5jb250YWlucyhmdW5jdGlvbkluZGV4KSkgewotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2ln
bmF0dXJlSW5kaWNlc1tmdW5jdGlvbkluZGV4XTsKLSAgICAgICAgICAgIGNvbnN0IFNpZ25hdHVy
ZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
CisgICAgICAgICAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlvbi0+
aW50ZXJuYWxGdW5jdGlvblR5cGVJbmRpY2VzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICAgICAg
Y29uc3QgVHlwZURlZmluaXRpb24mIHNpZ25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5
cGVJbmRleCk7CiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnMgaml0OwogICAgICAgICAgICAgLy8g
VGhlIExMSW50IGFsd2F5cyBib3VuZHMgY2hlY2tzCiAgICAgICAgICAgICBNZW1vcnlNb2RlIG1v
ZGUgPSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MaW1pdHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21MaW1pdHMuaAppbmRleCBmOGYwNTNiNTg2MGU3ZGY5N2RiNDQ2NGFhMGVhMTc0OGQ5Yjg3
ZjM2Li41ODcwMzQ3MzQ2NjM4ZDRhMmRlNTMyMGI0NTM3NDY0MzdmZWFkODI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTGltaXRzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUxpbWl0cy5oCkBAIC00NCw2ICs0NCw3IEBAIGNvbnN0ZXhw
ciBzaXplX3QgbWF4RXhwb3J0cyA9IDEwMDAwMDsKIGNvbnN0ZXhwciBzaXplX3QgbWF4RXhjZXB0
aW9ucyA9IDEwMDAwMDsKIGNvbnN0ZXhwciBzaXplX3QgbWF4R2xvYmFscyA9IDEwMDAwMDA7CiBj
b25zdGV4cHIgc2l6ZV90IG1heERhdGFTZWdtZW50cyA9IDEwMDAwMDsKK2NvbnN0ZXhwciBzaXpl
X3QgbWF4U3RydWN0RmllbGRDb3VudCA9IDEwMDAwOwogCiBjb25zdGV4cHIgc2l6ZV90IG1heFN0
cmluZ1NpemUgPSAxMDAwMDA7CiBjb25zdGV4cHIgc2l6ZV90IG1heE1vZHVsZVNpemUgPSAxMDI0
ICogMTAyNCAqIDEwMjQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3Bw
CmluZGV4IDE5NTk4YWFiZDA3NTQ2M2Y3YTc2ZDkzNGM5ZGFmZWYwNDY1NjU5MTkuLmI5ZDUzMzMw
MGNkYTcyMWQxN2NmZjgxNTY2MTI5NDM1ZTAwMjM1YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGUuY3BwCkBAIC00Myw5ICs0Myw5IEBAIE1vZHVsZTo6TW9kdWxlKExM
SW50UGxhbiYgcGxhbikKIAogTW9kdWxlOjp+TW9kdWxlKCkgeyB9CiAKLVdhc206OlNpZ25hdHVy
ZUluZGV4IE1vZHVsZTo6c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QKK1dhc206OlR5cGVJbmRleCBNb2R1bGU6OnR5
cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNl
KSBjb25zdAogewotICAgIHJldHVybiBtX21vZHVsZUluZm9ybWF0aW9uLT5zaWduYXR1cmVJbmRl
eEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNlKTsKKyAgICByZXR1cm4g
bV9tb2R1bGVJbmZvcm1hdGlvbi0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5j
dGlvbkluZGV4U3BhY2UpOwogfQogCiBzdGF0aWMgTW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0IG1h
a2VWYWxpZGF0aW9uUmVzdWx0KExMSW50UGxhbiYgcGxhbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21Nb2R1bGUuaAppbmRleCA2MmM2OTI3ZjJjOWE5ODFiODQwZGNkNjljNmJkYjBkNDM0
Y2RkOWJmLi43OTdhODFjMTc0YTIwZTdhM2U4NWM1NGZlMGMyMTI3YzE5MGE2YTczIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCkBAIC01Niw3ICs1Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTW9kdWxlKHBsYW4pKTsKICAgICB9CiAK
LSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4
U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdDsKKyAgICBXYXNtOjpUeXBl
SW5kZXggdHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4U3BhY2UpIGNvbnN0OwogICAgIGNvbnN0IFdhc206Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1
bGVJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7
IH0KIAogICAgIFJlZjxDYWxsZWVHcm91cD4gY29tcGlsZVN5bmMoQ29udGV4dCosIE1lbW9yeU1v
ZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZUlu
Zm9ybWF0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3Jt
YXRpb24uaAppbmRleCBhZTZiYmVlZGYyMTg2MTk0M2I4OTBmNzIzMTUzYzc4ODhjZmM0OTY3Li44
MGY3YjllMTI4M2VlMDA3YjFlYzQwMWUzYTViMmQ4MjI4MDZlZTNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlSW5mb3JtYXRpb24uaApAQCAtNTAsMzYg
KzUwLDM2IEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxNb2R1bGVJbmZvcm1hdGlvbj4gewogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfk1v
ZHVsZUluZm9ybWF0aW9uKCk7CiAgICAgCi0gICAgc2l6ZV90IGZ1bmN0aW9uSW5kZXhTcGFjZVNp
emUoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgp
ICsgaW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9CisgICAgc2l6ZV90
IGZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSBjb25zdCB7IHJldHVybiBpbXBvcnRGdW5jdGlvblR5
cGVJbmRpY2VzLnNpemUoKSArIGludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlcy5zaXplKCk7IH0K
ICAgICBib29sIGlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc2l6ZV90
IGZ1bmN0aW9uSW5kZXgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoZnVuY3Rpb25JbmRl
eCA8IGZ1bmN0aW9uSW5kZXhTcGFjZVNpemUoKSk7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbklu
ZGV4IDwgaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uSW5kZXggPCBpbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzLnNpemUoKTsKICAg
ICB9Ci0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKHNpemVfdCBmdW5jdGlvbkluZGV4KSBjb25zdAorICAgIFR5cGVJbmRleCB0eXBlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKHNpemVfdCBmdW5jdGlvbkluZGV4KSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIGlzSW1wb3J0ZWRGdW5jdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZnVuY3Rpb25JbmRleCkKLSAgICAgICAgICAgID8gaW1wb3J0RnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW2Z1bmN0aW9uSW5kZXhdCi0gICAgICAgICAgICA6IGludGVybmFsRnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzW2Z1bmN0aW9uSW5kZXggLSBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMu
c2l6ZSgpXTsKKyAgICAgICAgICAgID8gaW1wb3J0RnVuY3Rpb25UeXBlSW5kaWNlc1tmdW5jdGlv
bkluZGV4XQorICAgICAgICAgICAgOiBpbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXNbZnVuY3Rp
b25JbmRleCAtIGltcG9ydEZ1bmN0aW9uVHlwZUluZGljZXMuc2l6ZSgpXTsKICAgICB9CiAKLSAg
ICBzaXplX3QgZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUoKSBjb25zdCB7IHJldHVybiBpbXBvcnRF
eGNlcHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKSArIGludGVybmFsRXhjZXB0aW9uU2lnbmF0
dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICBzaXplX3QgZXhjZXB0aW9uSW5kZXhTcGFjZVNpemUo
KSBjb25zdCB7IHJldHVybiBpbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCkgKyBpbnRl
cm5hbEV4Y2VwdGlvblR5cGVJbmRpY2VzLnNpemUoKTsgfQogICAgIGJvb2wgaXNJbXBvcnRlZEV4
Y2VwdGlvbkZyb21FeGNlcHRpb25JbmRleFNwYWNlKHNpemVfdCBleGNlcHRpb25JbmRleCkgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChleGNlcHRpb25JbmRleCA8IGV4Y2VwdGlvbkluZGV4
U3BhY2VTaXplKCkpOwotICAgICAgICByZXR1cm4gZXhjZXB0aW9uSW5kZXggPCBpbXBvcnRFeGNl
cHRpb25TaWduYXR1cmVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbklu
ZGV4IDwgaW1wb3J0RXhjZXB0aW9uVHlwZUluZGljZXMuc2l6ZSgpOwogICAgIH0KLSAgICBTaWdu
YXR1cmVJbmRleCBzaWduYXR1cmVJbmRleEZyb21FeGNlcHRpb25JbmRleFNwYWNlKHNpemVfdCBl
eGNlcHRpb25JbmRleCkgY29uc3QKKyAgICBUeXBlSW5kZXggdHlwZUluZGV4RnJvbUV4Y2VwdGlv
bkluZGV4U3BhY2Uoc2l6ZV90IGV4Y2VwdGlvbkluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIGlzSW1wb3J0ZWRFeGNlcHRpb25Gcm9tRXhjZXB0aW9uSW5kZXhTcGFjZShleGNlcHRp
b25JbmRleCkKLSAgICAgICAgICAgID8gaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlc1tl
eGNlcHRpb25JbmRleF0KLSAgICAgICAgICAgIDogaW50ZXJuYWxFeGNlcHRpb25TaWduYXR1cmVJ
bmRpY2VzW2V4Y2VwdGlvbkluZGV4IC0gaW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5z
aXplKCldOworICAgICAgICAgICAgPyBpbXBvcnRFeGNlcHRpb25UeXBlSW5kaWNlc1tleGNlcHRp
b25JbmRleF0KKyAgICAgICAgICAgIDogaW50ZXJuYWxFeGNlcHRpb25UeXBlSW5kaWNlc1tleGNl
cHRpb25JbmRleCAtIGltcG9ydEV4Y2VwdGlvblR5cGVJbmRpY2VzLnNpemUoKV07CiAgICAgfQog
Ci0gICAgdWludDMyX3QgaW1wb3J0RnVuY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGltcG9y
dEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KLSAgICB1aW50MzJfdCBpbnRlcm5h
bEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJl
SW5kaWNlcy5zaXplKCk7IH0KLSAgICB1aW50MzJfdCBpbXBvcnRFeGNlcHRpb25Db3VudCgpIGNv
bnN0IHsgcmV0dXJuIGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgpOyB9Ci0g
ICAgdWludDMyX3QgaW50ZXJuYWxFeGNlcHRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGludGVy
bmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbXBv
cnRGdW5jdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25UeXBlSW5kaWNl
cy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbnRlcm5hbEZ1bmN0aW9uQ291bnQoKSBjb25zdCB7
IHJldHVybiBpbnRlcm5hbEZ1bmN0aW9uVHlwZUluZGljZXMuc2l6ZSgpOyB9CisgICAgdWludDMy
X3QgaW1wb3J0RXhjZXB0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBpbXBvcnRFeGNlcHRpb25U
eXBlSW5kaWNlcy5zaXplKCk7IH0KKyAgICB1aW50MzJfdCBpbnRlcm5hbEV4Y2VwdGlvbkNvdW50
KCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxFeGNlcHRpb25UeXBlSW5kaWNlcy5zaXplKCk7IH0K
IAogICAgIC8vIEN1cnJlbnRseSwgb3VyIHdhc20gaW1wbGVtZW50YXRpb24gYWxsb3dzIG9ubHkg
b25lIG1lbW9yeSBhbmQgdGFibGUuCiAgICAgLy8gSWYgd2UgbmVlZCB0byByZW1vdmUgdGhpcyBs
aW1pdGF0aW9uLCB3ZSB3b3VsZCBoYXZlIE1lbW9yeUluZm9ybWF0aW9uIGFuZCBUYWJsZUluZm9y
bWF0aW9uIGluIHRoZSBWZWN0b3JzLgpAQCAtOTksNiArOTksOCBAQCBzdHJ1Y3QgTW9kdWxlSW5m
b3JtYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TW9kdWxlSW5mb3JtYXRpb24+
IHsKICAgICBib29sIGlzRGVjbGFyZWRFeGNlcHRpb24odWludDMyX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVjbGFyZWRFeGNlcHRpb25zLmNvbnRhaW5zKGluZGV4KTsgfQogICAgIHZvaWQg
YWRkRGVjbGFyZWRFeGNlcHRpb24odWludDMyX3QgaW5kZXgpIHsgbV9kZWNsYXJlZEV4Y2VwdGlv
bnMuc2V0KGluZGV4KTsgfQogCisgICAgdWludDMyX3QgdHlwZUNvdW50KCkgY29uc3QgeyByZXR1
cm4gdHlwZVNpZ25hdHVyZXMuc2l6ZSgpOyB9CisKICAgICBib29sIGhhc01lbW9yeUltcG9ydCgp
IGNvbnN0IHsgcmV0dXJuIG1lbW9yeS5pc0ltcG9ydCgpOyB9CiAKICAgICBCcmFuY2hIaW50IGdl
dEJyYW5jaEhpbnQodWludDMyX3QgZnVuY3Rpb25PZmZzZXQsIHVpbnQzMl90IGJyYW5jaE9mZnNl
dCkgY29uc3QKQEAgLTExMCwxMSArMTEyLDExIEBAIHN0cnVjdCBNb2R1bGVJbmZvcm1hdGlvbiA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNb2R1bGVJbmZvcm1hdGlvbj4gewogICAgIH0K
IAogICAgIFZlY3RvcjxJbXBvcnQ+IGltcG9ydHM7Ci0gICAgVmVjdG9yPFNpZ25hdHVyZUluZGV4
PiBpbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXM7Ci0gICAgVmVjdG9yPFNpZ25hdHVyZUlu
ZGV4PiBpbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlczsKLSAgICBWZWN0b3I8U2lnbmF0
dXJlSW5kZXg+IGltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXM7Ci0gICAgVmVjdG9yPFNp
Z25hdHVyZUluZGV4PiBpbnRlcm5hbEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXM7Ci0gICAgVmVj
dG9yPFJlZjxTaWduYXR1cmU+PiB1c2VkU2lnbmF0dXJlczsKKyAgICBWZWN0b3I8VHlwZUluZGV4
PiBpbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzOworICAgIFZlY3RvcjxUeXBlSW5kZXg+IGludGVy
bmFsRnVuY3Rpb25UeXBlSW5kaWNlczsKKyAgICBWZWN0b3I8VHlwZUluZGV4PiBpbXBvcnRFeGNl
cHRpb25UeXBlSW5kaWNlczsKKyAgICBWZWN0b3I8VHlwZUluZGV4PiBpbnRlcm5hbEV4Y2VwdGlv
blR5cGVJbmRpY2VzOworICAgIFZlY3RvcjxSZWY8VHlwZURlZmluaXRpb24+PiB0eXBlU2lnbmF0
dXJlczsKIAogICAgIE1lbW9yeUluZm9ybWF0aW9uIG1lbW9yeTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCmluZGV4IDI1MTI1MWY4YWFlMTlhZTA3MDUyMTZj
MDkxOGQwZWUyMjlmMTViYzkuLjEwYjM2NzE2MWM1ZWJkMDRjNmFiM2IyMzA2NGEzZGIyNWE3NDdj
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKQEAgLTM1
LDcgKzM1LDcgQEAKICNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJX
YXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uLmgiCi0j
aW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmlu
aXRpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYv
TG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNjgsOCArNjgsOCBA
QCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgY29uc3QgdWludDMy
X3QgZnVuY3Rpb25JbmRleFNwYWNlID0gbV9mdW5jdGlvbkluZGV4ICsgbV9tb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpOwogICAgIEFTU0VSVChmdW5jdGlv
bkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5mdW5jdGlvbkluZGV4
U3BhY2VTaXplKCkpOwogCi0gICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21v
ZHVsZUluZm9ybWF0aW9uLT5pbnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1ttX2Z1bmN0
aW9uSW5kZXhdOwotICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5m
b3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlc1ttX2Z1bmN0
aW9uSW5kZXhdOworICAgIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUgPSBUeXBlSW5m
b3JtYXRpb246OmdldCh0eXBlSW5kZXgpOwogCiAgICAgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+IHVubGlua2VkQ2FsbHM7CiAgICAgQ29tcGlsYXRpb25Db250ZXh0IGNvbnRleHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT1NSRW50cnlQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCmluZGV4
IGUyZTVjZTU3ZjUwZTAzNmM2ZWI2ODMzMWE4M2VlYzFhZTA2NGJhMjQuLmE1MGI4NjdiOGJmNzQ4
OGNjODBkMWI2NDI5NmIyNGI4NjBkODI2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PU1JFbnRyeVBsYW4uY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAi
V2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5o
IgogI2luY2x1ZGUgIldhc21OYW1lU2VjdGlvbi5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1
ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTcwLDggKzcwLDggQEAgdm9pZCBPU1JFbnRyeVBsYW46Ondv
cmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgY29uc3QgdWludDMyX3QgZnVuY3Rpb25JbmRleFNw
YWNlID0gbV9mdW5jdGlvbkluZGV4ICsgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1w
b3J0RnVuY3Rpb25Db3VudCgpOwogICAgIEFTU0VSVChmdW5jdGlvbkluZGV4U3BhY2UgPCBtX21v
ZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwogCi0g
ICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtX21vZHVsZUluZm9ybWF0aW9uLT5p
bnRlcm5hbEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOwotICAgIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWdu
YXR1cmVJbmRleCk7CisgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlSW5mb3JtYXRp
b24tPmludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlc1ttX2Z1bmN0aW9uSW5kZXhdOworICAgIGNv
bnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYXR1cmUgPSBUeXBlSW5mb3JtYXRpb246OmdldCh0eXBl
SW5kZXgpOwogCiAgICAgQ29tcGlsYXRpb25Nb2RlIHRhcmdldENvbXBpbGF0aW9uTW9kZSA9IG1f
Y2FsbGVlLT5jb21waWxhdGlvbk1vZGUoKSA9PSBDb21waWxhdGlvbk1vZGU6OkxMSW50TW9kZSA/
IENvbXBpbGF0aW9uTW9kZTo6QkJRRm9yT1NSRW50cnlNb2RlIDogQ29tcGlsYXRpb25Nb2RlOjpP
TUdGb3JPU1JFbnRyeU1vZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
cGVyYXRpb25zLmNwcAppbmRleCA1MTQ2NDU3MmYxY2YyZWMxZjBjYWFmNThkZGI3ODRhZmNmYjM2
OTAyLi5iNjlhYTBlZWU5MWUwMGVmMDI1OGEzMjMwOWViZTMyZWJhNGM2Y2U0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuY3BwCkBAIC01MTQsNyArNTE0
LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0JpZ0ludCwg
RW5jb2RlZEpTVmFsdWUsIChDYWxsRnJhbWUqIGMKIH0KIAogLy8gaHR0cHM6Ly93ZWJhc3NlbWJs
eS5naXRodWIuaW8vbXVsdGktdmFsdWUvanMtYXBpL2luZGV4Lmh0bWwjcnVuLWEtaG9zdC1mdW5j
dGlvbgotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRzLCB2
b2lkLCAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgU2ln
bmF0dXJlKiBzaWduYXR1cmUsIEpTVmFsdWUgcmVzdWx0LCB1aW50NjRfdCogcmVnaXN0ZXJSZXN1
bHRzLCB1aW50NjRfdCogY2FsbGVlRnJhbWVQb2ludGVyKSkKK0pTQ19ERUZJTkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25JdGVyYXRlUmVzdWx0cywgdm9pZCwgKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IFR5cGVEZWZpbml0aW9uKiB0eXBlLCBKU1ZhbHVl
IHJlc3VsdCwgdWludDY0X3QqIHJlZ2lzdGVyUmVzdWx0cywgdWludDY0X3QqIGNhbGxlZUZyYW1l
UG9pbnRlcikpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIHBhc3NpbmcgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0ZWFkLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDMyMDYKQEAgLTUyNCw3ICs1MjQsOSBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMsIHZvaWQsIChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSQogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBhdXRvIHdhc21DYWxsSW5m
byA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcigqc2lnbmF0dXJl
LCBDYWxsUm9sZTo6Q2FsbGVlKTsKKyAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSogc2lnbmF0
dXJlID0gdHlwZS0+YXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CisKKyAgICBhdXRvIHdhc21DYWxs
SW5mbyA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLmNhbGxJbmZvcm1hdGlvbkZvcigqdHlwZSwg
Q2FsbFJvbGU6OkNhbGxlZSk7CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJSZXN1
bHRPZmZzZXRzID0gd2FzbUNhbGxJbmZvLmNvbXB1dGVSZXN1bHRzT2Zmc2V0TGlzdCgpOwogCiAg
ICAgdW5zaWduZWQgaXRlcmF0aW9uQ291bnQgPSAwOwpAQCAtNTg4LDcgKzU5MCw3IEBAIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25JdGVyYXRlUmVzdWx0cywgdm9pZCwgKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBJCiAvLyBGSVhNRTogSXQgd291bGQgYmUgbXVjaCBlYXNpZXIgdG8g
aW5saW5lIHRoaXMgd2hlbiB3ZSBoYXZlIGEgZ2xvYmFsIEdDLCB3aGljaCBjb3VsZCBwcm9iYWJs
eSBtZWFuIHdlIGNvdWxkIGF2b2lkCiAvLyBzcGlsbGluZyB0aGUgcmVzdWx0cyBvbnRvIHRoZSBz
dGFjay4KIC8vIFNhdmVkIHJlc3VsdCByZWdpc3RlcnMgc2hvdWxkIGJlIHBsYWNlZCBvbiB0aGUg
c3RhY2sganVzdCBhYm92ZSB0aGUgbGFzdCBzdGFjayByZXN1bHQuCi1KU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXksIEpTQXJyYXkqLCAoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgU2lnbmF0dXJl
KiBzaWduYXR1cmUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIEpTVmFsdWUqIHN0YWNrUG9p
bnRlckZyb21DYWxsZWUpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkFsbG9j
YXRlUmVzdWx0c0FycmF5LCBKU0FycmF5KiwgKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJ
bnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IFR5cGVEZWZpbml0aW9uKiB0eXBlLCBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlLCBKU1ZhbHVlKiBzdGFja1BvaW50ZXJGcm9tQ2FsbGVlKSkKIHsKICAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNX
ZWJBc3NlbWJseUluc3RhbmNlPigpOwogICAgIFZNJiB2bSA9IGpzSW5zdGFuY2UtPnZtKCk7CkBA
IC01OTYsMTIgKzU5OCwxMyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQWxs
b2NhdGVSZXN1bHRzQXJyYXksIEpTQXJyYXkqLCAoQ2FsbEZyYW1lKiBjYQogCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwogICAg
IE9iamVjdEluaXRpYWxpemF0aW9uU2NvcGUgaW5pdGlhbGl6YXRpb25TY29wZShnbG9iYWxPYmpl
Y3QtPnZtKCkpOworICAgIGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlKiBzaWduYXR1cmUgPSB0eXBl
LT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3RlZChpbml0aWFsaXphdGlvblNjb3BlLCBu
dWxscHRyLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihpbmRleGluZ1R5cGUpLCBzaWduYXR1cmUtPnJldHVybkNvdW50KCkpOwogCiAg
ICAgLy8gRklYTUU6IEhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmUuLi4KICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQpOwogCi0gICAgYXV0byB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKnNpZ25hdHVyZSk7CisgICAgYXV0byB3YXNtQ2Fs
bEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKnR5cGUp
OwogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyUmVzdWx0cyA9IHdhc21DYWxsSW5m
by5jb21wdXRlUmVzdWx0c09mZnNldExpc3QoKTsKIAogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KEpTVmFsdWUpID09IHNpemVvZihDUFVSZWdpc3RlciksICJUaGUgY29kZSBiZWxvdyByZWxpZXMg
b24gdGhpcy4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
cGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5o
CmluZGV4IGNmN2MwZDVmZWY0ZGZkMzVjN2NjYTMzNDc5M2ViMjQ0ZWNiYWRkMTUuLjU4ZDE1OTc1
ZTg4ZDIwM2RiYzk4NDRjMTRlNTQyNDAyYTYxNmNiOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBDb250ZXh0
OwogbmFtZXNwYWNlIFdhc20gewogCiBjbGFzcyBJbnN0YW5jZTsKLWNsYXNzIFNpZ25hdHVyZTsK
K2NsYXNzIFR5cGVEZWZpbml0aW9uOwogCiB2b2lkIGxvYWRWYWx1ZXNJbnRvQnVmZmVyKFByb2Jl
OjpDb250ZXh0JiwgY29uc3QgU3RhY2tNYXAmLCB1aW50NjRfdCogYnVmZmVyKTsKIApAQCAtNjIs
OCArNjIsOCBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0Yz
MiwgZmxvYXQsIChDYWxsRnJhbWUqLCBKU1ZhbHVlKSk7CiAKIEpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uQ29udmVydFRvQmlnSW50LCBFbmNvZGVkSlNWYWx1ZSwgKENhbGxGcmFt
ZSosIEluc3RhbmNlKiwgaW50NjRfdCkpOwogCi1KU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkl0ZXJhdGVSZXN1bHRzLCB2b2lkLCAoQ2FsbEZyYW1lKiwgSW5zdGFuY2UqLCBjb25z
dCBTaWduYXR1cmUqLCBKU1ZhbHVlLCB1aW50NjRfdCosIHVpbnQ2NF90KikpOwotSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25BbGxvY2F0ZVJlc3VsdHNBcnJheSwgSlNBcnJheSos
IChDYWxsRnJhbWUqLCBXYXNtOjpJbnN0YW5jZSosIGNvbnN0IFNpZ25hdHVyZSosIEluZGV4aW5n
VHlwZSwgSlNWYWx1ZSopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSXRl
cmF0ZVJlc3VsdHMsIHZvaWQsIChDYWxsRnJhbWUqLCBJbnN0YW5jZSosIGNvbnN0IFR5cGVEZWZp
bml0aW9uKiwgSlNWYWx1ZSwgdWludDY0X3QqLCB1aW50NjRfdCopKTsKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXksIEpTQXJyYXkqLCAoQ2Fs
bEZyYW1lKiwgV2FzbTo6SW5zdGFuY2UqLCBjb25zdCBUeXBlRGVmaW5pdGlvbiosIEluZGV4aW5n
VHlwZSwgSlNWYWx1ZSopKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25X
YXNtV3JpdGVCYXJyaWVyU2xvd1BhdGgsIHZvaWQsIChKU0NlbGwqLCBWTSopKTsKIEpTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUG9wY291bnQzMiwgdWludDMyX3QsIChpbnQzMl90
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKaW5kZXggZWQwMGQ5YTBh
NDJiNzlhZGMxZjNjOGFiMGYzNDZmYzRmNmRhODlhZS4uNDM4ZmYzZjcyZDliNjY0OGFhZjcwYTQ5
YTBhYTdiMTUxOGI2YjlhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIu
aApAQCAtMTExLDE1ICsxMTEsMTUgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBjb25zdCB1
aW50OF90KiBtX3NvdXJjZTsKICAgICBzaXplX3QgbV9zb3VyY2VMZW5ndGg7Ci0gICAgLy8gV2Ug
a2VlcCBhIGxvY2FsIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIHRhYmxlIHNvIHdlIGRvbid0IGhh
dmUgdG8gZmV0Y2ggaXQgdG8gZmluZCB0aHVuayBzaWduYXR1cmVzLgotICAgIGNvbnN0IFNpZ25h
dHVyZUluZm9ybWF0aW9uJiBtX3NpZ25hdHVyZUluZm9ybWF0aW9uOworICAgIC8vIFdlIGtlZXAg
YSBsb2NhbCByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCB0YWJsZSBzbyB3ZSBkb24ndCBoYXZlIHRv
IGZldGNoIGl0IHRvIGZpbmQgdGh1bmsgdHlwZXMuCisgICAgY29uc3QgVHlwZUluZm9ybWF0aW9u
JiBtX3R5cGVJbmZvcm1hdGlvbjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NUeXBl
PgogQUxXQVlTX0lOTElORSBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpQYXJzZXIoY29uc3QgdWludDhf
dCogc291cmNlQnVmZmVyLCBzaXplX3Qgc291cmNlTGVuZ3RoKQogICAgIDogbV9zb3VyY2Uoc291
cmNlQnVmZmVyKQogICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNlTGVuZ3RoKQotICAgICwgbV9z
aWduYXR1cmVJbmZvcm1hdGlvbihTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2luZ2xldG9uKCkpCisg
ICAgLCBtX3R5cGVJbmZvcm1hdGlvbihUeXBlSW5mb3JtYXRpb246OnNpbmdsZXRvbigpKQogewog
fQogCkBAIC0yODAsNyArMjgwLDcgQEAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBQYXJzZXI8U3Vj
Y2Vzc1R5cGU+OjpQYXJ0aWFsUmVzdWx0IFBhcnNlcjxTdWNjZXNzVHlwZT46OnAKICAgICBpZiAo
cGVla0ludDcodHlwZUtpbmQpICYmIGlzVmFsaWRUeXBlS2luZCh0eXBlS2luZCkpIHsKICAgICAg
ICAgVHlwZSB0eXBlID0ge3N0YXRpY19jYXN0PFR5cGVLaW5kPih0eXBlS2luZCksIE51bGxhYmxl
OjpZZXMsIDB9OwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCEoaXNWYWx1ZVR5cGUodHlw
ZSkgfHwgdHlwZS5pc1ZvaWQoKSksICJyZXN1bHQgdHlwZSBvZiBibG9jazogIiwgbWFrZVN0cmlu
Zyh0eXBlLmtpbmQpLCAiIGlzIG5vdCBhIHZhbHVlIHR5cGUgb3IgVm9pZCIpOwotICAgICAgICBy
ZXN1bHQgPSBtX3NpZ25hdHVyZUluZm9ybWF0aW9uLnRodW5rRm9yKHR5cGUpOworICAgICAgICBy
ZXN1bHQgPSBtX3R5cGVJbmZvcm1hdGlvbi50aHVua0Zvcih0eXBlKTsKICAgICAgICAgbV9vZmZz
ZXQrKzsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC0yODgsOSArMjg4LDkgQEAgQUxX
QVlTX0lOTElORSB0eXBlbmFtZSBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpQYXJ0aWFsUmVzdWx0IFBh
cnNlcjxTdWNjZXNzVHlwZT46OnAKICAgICBpbnQ2NF90IGluZGV4OwogICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVmFySW50NjQoaW5kZXgpLCAiQmxvY2stbGlrZSBpbnN0cnVjdGlvbiBk
b2Vzbid0IHJldHVybiB2YWx1ZSB0eXBlIGJ1dCBjYW4ndCBkZWNvZGUgdHlwZSBzZWN0aW9uIGlu
ZGV4Iik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRleCA8IDAsICJCbG9jay1saWtlIGlu
c3RydWN0aW9uIHNpZ25hdHVyZSBpbmRleCBpcyBuZWdhdGl2ZSIpOwotICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPj0gaW5mby51c2VkU2lnbmF0dXJl
cy5zaXplKCksICJCbG9jay1saWtlIGluc3RydWN0aW9uIHNpZ25hdHVyZSBpbmRleCBpcyBvdXQg
b2YgYm91bmRzLiBJbmRleDogIiwgaW5kZXgsICIgdHlwZSBpbmRleCBzcGFjZTogIiwgaW5mby51
c2VkU2lnbmF0dXJlcy5zaXplKCkpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhdGljX2Nh
c3Q8c2l6ZV90PihpbmRleCkgPj0gaW5mby50eXBlQ291bnQoKSwgIkJsb2NrLWxpa2UgaW5zdHJ1
Y3Rpb24gc2lnbmF0dXJlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuIEluZGV4OiAiLCBpbmRleCwg
IiB0eXBlIGluZGV4IHNwYWNlOiAiLCBpbmZvLnR5cGVDb3VudCgpKTsKIAotICAgIHJlc3VsdCA9
ICZpbmZvLnVzZWRTaWduYXR1cmVzW2luZGV4XS5nZXQoKTsKKyAgICByZXN1bHQgPSAmaW5mby50
eXBlU2lnbmF0dXJlc1tpbmRleF0uZ2V0KCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAtMzEy
LDcgKzMxMiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI8U3VjY2Vzc1R5cGU+OjpwYXJz
ZUhlYXBUeXBlKGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihoZWFwVHlwZSkgPj0gaW5m
by51c2VkU2lnbmF0dXJlcy5zaXplKCkpCisgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oaGVh
cFR5cGUpID49IGluZm8udHlwZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHJlc3VsdCA9IGhlYXBUeXBlOwpAQCAtMzMwLDIwICszMzAsMTkgQEAgQUxXQVlTX0lOTElORSBi
b29sIFBhcnNlcjxTdWNjZXNzVHlwZT46OnBhcnNlVmFsdWVUeXBlKGNvbnN0IE1vZHVsZUluZm9y
bWF0aW9uJgogCiAgICAgVHlwZUtpbmQgdHlwZUtpbmQgPSBzdGF0aWNfY2FzdDxUeXBlS2luZD4o
a2luZCk7CiAgICAgYm9vbCBpc051bGxhYmxlID0gdHJ1ZTsKLSAgICBTaWduYXR1cmVJbmRleCBz
aWdJbmRleCA9IDA7Ci0KKyAgICBUeXBlSW5kZXggdHlwZUluZGV4ID0gMDsKICAgICBpZiAoT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHlUeXBlZEZ1bmN0aW9uUmVmZXJlbmNlcygpICYmICh0eXBlS2lu
ZCA9PSBUeXBlS2luZDo6RnVuY3JlZiB8fCB0eXBlS2luZCA9PSBUeXBlS2luZDo6RXh0ZXJucmVm
KSkgewotICAgICAgICBzaWdJbmRleCA9IHN0YXRpY19jYXN0PFNpZ25hdHVyZUluZGV4Pih0eXBl
S2luZCk7CisgICAgICAgIHR5cGVJbmRleCA9IHN0YXRpY19jYXN0PFR5cGVJbmRleD4odHlwZUtp
bmQpOwogICAgICAgICB0eXBlS2luZCA9IFR5cGVLaW5kOjpSZWZOdWxsOwogICAgIH0gZWxzZSBp
ZiAodHlwZUtpbmQgPT0gVHlwZUtpbmQ6OlJlZiB8fCB0eXBlS2luZCA9PSBUeXBlS2luZDo6UmVm
TnVsbCkgewogICAgICAgICBpc051bGxhYmxlID0gdHlwZUtpbmQgPT0gVHlwZUtpbmQ6OlJlZk51
bGw7CiAgICAgICAgIGludDMyX3QgaGVhcFR5cGU7CiAgICAgICAgIGlmICghcGFyc2VIZWFwVHlw
ZShpbmZvLCBoZWFwVHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHNp
Z0luZGV4ID0gaGVhcFR5cGUgPCAwID8gc3RhdGljX2Nhc3Q8U2lnbmF0dXJlSW5kZXg+KGhlYXBU
eXBlKSA6IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoaW5mby51c2VkU2lnbmF0dXJlc1toZWFw
VHlwZV0uZ2V0KCkpOworICAgICAgICB0eXBlSW5kZXggPSBoZWFwVHlwZSA8IDAgPyBzdGF0aWNf
Y2FzdDxUeXBlSW5kZXg+KGhlYXBUeXBlKSA6IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KGluZm8udHlw
ZVNpZ25hdHVyZXNbaGVhcFR5cGVdLmdldCgpKTsKICAgICB9CiAKLSAgICBUeXBlIHR5cGUgPSB7
IHR5cGVLaW5kLCBzdGF0aWNfY2FzdDxOdWxsYWJsZT4oaXNOdWxsYWJsZSksIHNpZ0luZGV4IH07
CisgICAgVHlwZSB0eXBlID0geyB0eXBlS2luZCwgc3RhdGljX2Nhc3Q8TnVsbGFibGU+KGlzTnVs
bGFibGUpLCB0eXBlSW5kZXggfTsKICAgICBpZiAoIWlzVmFsdWVUeXBlKHR5cGUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0ID0gdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TZWN0aW9uUGFyc2VyLmNwcAppbmRleCAwOGQ5YzYzN2JiNzM0MzNj
ZGE3ZGQzNDVlNjg1YTczY2Q3MWM2ZGZiLi5kMmRiNWRiZjZjOTYxOTc2MGVkMzQyOWQwMDhhYWJi
OGM2NjFhMzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2Vj
dGlvblBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rp
b25QYXJzZXIuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9y
bWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU5hbWVTZWN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAi
V2FzbU9wcy5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
V2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4K
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTQ1LDQxICs0NSwzMCBAQCBh
dXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlVHlwZSgpIC0+IFBhcnRpYWxSZXN1bHQKIAogICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGNvdW50KSwgImNhbid0IGdldCBUeXBl
IHNlY3Rpb24ncyBjb3VudCIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoY291bnQgPiBtYXhU
eXBlcywgIlR5cGUgc2VjdGlvbidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11
bSAiLCBtYXhUeXBlcyk7Ci0gICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT51c2VkU2ln
bmF0dXJlcy50cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdo
IG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgY291bnQsICIgZW50cmllcyIpOworICAgIFdB
U01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+dHlwZVNpZ25hdHVyZXMudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlv
bidzICIsIGNvdW50LCAiIGVudHJpZXMiKTsKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGludDhfdCB0eXBlOwotICAgICAgICB1aW50MzJfdCBh
cmd1bWVudENvdW50OwotICAgICAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRUeXBlczsKLQotICAg
ICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZUludDcodHlwZSksICJjYW4ndCBnZXQgIiwg
aSwgInRoIFR5cGUncyB0eXBlIik7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYodHlwZSAh
PSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KFR5cGVLaW5kOjpGdW5jKSwgaSwgInRoIFR5cGUgaXMgbm9u
LUZ1bmMgIiwgdHlwZSk7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgYXJndW1lbnQg
Y291bnQiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihhcmd1bWVudENvdW50ID4gbWF4
RnVuY3Rpb25QYXJhbXMsIGksICJ0aCBhcmd1bWVudCBjb3VudCBpcyB0b28gYmlnICIsIGFyZ3Vt
ZW50Q291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvblBhcmFtcyk7Ci0gICAgICAgIFZlY3Rv
cjxUeXBlPiBhcmd1bWVudHM7Ci0gICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIWFyZ3VtZW50
cy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxvY2F0ZSBlbm91
Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBpLCAidGggc2lnbmF0dXJlIik7Ci0KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgewotICAg
ICAgICAgICAgVHlwZSBhcmd1bWVudFR5cGU7Ci0gICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlM
X0lGKCFwYXJzZVZhbHVlVHlwZShtX2luZm8sIGFyZ3VtZW50VHlwZSksICJjYW4ndCBnZXQgIiwg
aSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJn
dW1lbnRUeXBlKTsKKyAgICAgICAgaW50OF90IHR5cGVLaW5kOworICAgICAgICBXQVNNX1BBUlNF
Ul9GQUlMX0lGKCFwYXJzZUludDcodHlwZUtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBl
J3MgdHlwZSIpOworICAgICAgICBSZWZQdHI8VHlwZURlZmluaXRpb24+IHNpZ25hdHVyZTsKKyAg
ICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxUeXBlS2luZD4odHlwZUtpbmQpKSB7CisgICAgICAg
IGNhc2UgVHlwZUtpbmQ6OkZ1bmM6IHsKKyAgICAgICAgICAgIFdBU01fRkFJTF9JRl9IRUxQRVJf
RkFJTFMocGFyc2VGdW5jdGlvblR5cGUoaSwgc2lnbmF0dXJlKSk7CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6IHsKKyAgICAgICAg
ICAgIGlmICghT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlHQygpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWlsKGksICJ0aCB0eXBlIGZhaWxlZCB0byBwYXJzZSBiZWNhdXNlIHN0cnVjdCB0eXBl
cyBhcmUgbm90IGVuYWJsZWQiKTsKIAotICAgICAgICB1aW50MzJfdCByZXR1cm5Db3VudDsKLSAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIocmV0dXJuQ291bnQpLCAi
Y2FuJ3QgZ2V0ICIsIGksICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7Ci0KLSAgICAgICAgVmVj
dG9yPFR5cGUsIDE+IHJldHVyblR5cGVzOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFy
ZXR1cm5UeXBlcy50cnlSZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRDb3VudCksICJjYW4ndCBhbGxv
Y2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBpLCAidGggc2lnbmF0dXJl
Iik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXR1cm5Db3VudDsgKytpKSB7
Ci0gICAgICAgICAgICBUeXBlIHZhbHVlOwotICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
RighcGFyc2VWYWx1ZVR5cGUobV9pbmZvLCB2YWx1ZSksICJjYW4ndCBnZXQgIiwgaSwgInRoIFR5
cGUncyByZXR1cm4gdmFsdWUiKTsKLSAgICAgICAgICAgIHJldHVyblR5cGVzLmFwcGVuZCh2YWx1
ZSk7CisgICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlU3RydWN0VHlw
ZShpLCBzaWduYXR1cmUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFpbChpLCAidGggVHlwZSBpcyBub24tRnVu
YyAiLCB0eXBlS2luZCk7CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8U2lnbmF0dXJlPiBz
aWduYXR1cmUgPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlRm9yKHJldHVyblR5cGVz
LCBhcmd1bWVudHMpOwogICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzaWduYXR1cmUsICJj
YW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBUeXBlIHNlY3Rpb24ncyAiLCBpLCAidGgg
c2lnbmF0dXJlIik7Ci0KLSAgICAgICAgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy51bmNoZWNrZWRB
cHBlbmQoc2lnbmF0dXJlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBtX2luZm8tPnR5cGVT
aWduYXR1cmVzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmUucmVsZWFzZU5vbk51bGwoKSk7CiAg
ICAgfQogICAgIHJldHVybiB7IH07CiB9CkBAIC05MSw5ICs4MCw5IEBAIGF1dG8gU2VjdGlvblBh
cnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgV0FTTV9QQVJTRVJfRkFJ
TF9JRihpbXBvcnRDb3VudCA+IG1heEltcG9ydHMsICJJbXBvcnQgc2VjdGlvbidzIGNvdW50IGlz
IHRvbyBiaWcgIiwgaW1wb3J0Q291bnQsICIgbWF4aW11bSAiLCBtYXhJbXBvcnRzKTsKICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGlt
cG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yICIsIGltcG9ydENv
dW50LCAiIGdsb2JhbHMiKTsgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZp
eCB0aGUgRklYTUVzIGJlbG93LgogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1w
b3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5v
dWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0cyIpOyAvLyBGSVhNRSB0aGlz
IG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCi0gICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRGdW5jdGlvblNpZ25hdHVyZUluZGljZXMudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1v
cnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVzIik7IC8v
IEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4K
KyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmltcG9ydEZ1bmN0aW9uVHlwZUluZGlj
ZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSwgImNhbid0IGFsbG9jYXRlIGVub3Vn
aCBtZW1vcnkgZm9yICIsIGltcG9ydENvdW50LCAiIGltcG9ydCBmdW5jdGlvbiBzaWduYXR1cmVz
Iik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBi
ZWxvdy4KICAgICBpZiAoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeGNlcHRpb25zKCkpCi0gICAg
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJl
SW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUg
ZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGV4Y2VwdGlvbiBzaWdu
YXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJ
WE1FcyBiZWxvdy4KKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighbV9pbmZvLT5pbXBvcnRF
eGNlcHRpb25UeXBlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpLCAiY2Fu
J3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgaW1wb3J0Q291bnQsICIgaW1wb3J0IGV4
Y2VwdGlvbiBzaWduYXR1cmVzIik7IC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3
ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4KIAogICAgIGZvciAodWludDMyX3QgaW1wb3J0TnVtYmVy
ID0gMDsgaW1wb3J0TnVtYmVyIDwgaW1wb3J0Q291bnQ7ICsraW1wb3J0TnVtYmVyKSB7CiAgICAg
ICAgIHVpbnQzMl90IG1vZHVsZUxlbjsKQEAgLTExMiwxMiArMTAxLDEyIEBAIGF1dG8gU2VjdGlv
blBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlRXh0ZXJuYWxLaW5kKGtpbmQpLCAiY2FuJ3QgZ2V0ICIsIGltcG9y
dE51bWJlciwgInRoIEltcG9ydCdzIGtpbmQgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
IGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAg
ICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpGdW5jdGlvbjogewotICAgICAgICAgICAgdWludDMy
X3QgZnVuY3Rpb25TaWduYXR1cmVJbmRleDsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxf
SUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIs
IGltcG9ydE51bWJlciwgInRoIEltcG9ydCdzIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiBtb2R1bGUg
JyIsIG1vZHVsZVN0cmluZywgIicgZmllbGQgJyIsIGZpZWxkU3RyaW5nLCAiJyIpOwotICAgICAg
ICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihmdW5jdGlvblNpZ25hdHVyZUluZGV4ID49IG1faW5m
by0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiaW52YWxpZCBmdW5jdGlvbiBzaWduYXR1cmUgZm9y
ICIsIGltcG9ydE51bWJlciwgInRoIEltcG9ydCwgIiwgZnVuY3Rpb25TaWduYXR1cmVJbmRleCwg
IiBpcyBvdXQgb2YgcmFuZ2Ugb2YgIiwgbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5zaXplKCksICIg
aW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIici
KTsKLSAgICAgICAgICAgIGtpbmRJbmRleCA9IG1faW5mby0+aW1wb3J0RnVuY3Rpb25TaWduYXR1
cmVJbmRpY2VzLnNpemUoKTsKLSAgICAgICAgICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUlu
ZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVzZWRTaWduYXR1cmVzW2Z1
bmN0aW9uU2lnbmF0dXJlSW5kZXhdKTsKLSAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RnVuY3Rp
b25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChzaWduYXR1cmVJbmRleCk7CisgICAg
ICAgICAgICB1aW50MzJfdCBmdW5jdGlvblR5cGVJbmRleDsKKyAgICAgICAgICAgIFdBU01fUEFS
U0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uVHlwZUluZGV4KSwgImNhbid0IGdl
dCAiLCBpbXBvcnROdW1iZXIsICJ0aCBJbXBvcnQncyBmdW5jdGlvbiBzaWduYXR1cmUgaW4gbW9k
dWxlICciLCBtb2R1bGVTdHJpbmcsICInIGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKKyAg
ICAgICAgICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoZnVuY3Rpb25UeXBlSW5kZXggPj0gbV9pbmZv
LT50eXBlQ291bnQoKSwgImludmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnRO
dW1iZXIsICJ0aCBJbXBvcnQsICIsIGZ1bmN0aW9uVHlwZUluZGV4LCAiIGlzIG91dCBvZiByYW5n
ZSBvZiAiLCBtX2luZm8tPnR5cGVDb3VudCgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5n
LCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBraW5kSW5kZXgg
PSBtX2luZm8tPmltcG9ydEZ1bmN0aW9uVHlwZUluZGljZXMuc2l6ZSgpOworICAgICAgICAgICAg
VHlwZUluZGV4IHR5cGVJbmRleCA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dHlwZVNp
Z25hdHVyZXNbZnVuY3Rpb25UeXBlSW5kZXhdKTsKKyAgICAgICAgICAgIG1faW5mby0+aW1wb3J0
RnVuY3Rpb25UeXBlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQodHlwZUluZGV4KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXh0ZXJuYWxLaW5kOjpUYWJsZTog
ewpAQCAtMTM5LDcgKzEyOCw3IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQoKSAt
PiBQYXJ0aWFsUmVzdWx0CiAgICAgICAgICAgICBHbG9iYWxJbmZvcm1hdGlvbiBnbG9iYWw7CiAg
ICAgICAgICAgICBXQVNNX0ZBSUxfSUZfSEVMUEVSX0ZBSUxTKHBhcnNlR2xvYmFsVHlwZShnbG9i
YWwpKTsKICAgICAgICAgICAgIC8vIE9ubHkgbXV0YWJsZSBnbG9iYWxzIG5lZWQgZmxvYXRpbmcg
YmluZGluZ3MuCi0gICAgICAgICAgICBpZiAoZ2xvYmFsLm11dGFiaWxpdHkgPT0gR2xvYmFsSW5m
b3JtYXRpb246Ok11dGFiaWxpdHk6Ok11dGFibGUpCisgICAgICAgICAgICBpZiAoZ2xvYmFsLm11
dGFiaWxpdHkgPT0gTXV0YWJpbGl0eTo6TXV0YWJsZSkKICAgICAgICAgICAgICAgICBnbG9iYWwu
YmluZGluZ01vZGUgPSBHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOwog
ICAgICAgICAgICAga2luZEluZGV4ID0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKTsKICAgICAgICAg
ICAgIG1faW5mby0+Z2xvYmFscy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShnbG9iYWwpKTsKQEAg
LTE1NCwxMCArMTQzLDEwIEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VJbXBvcnQoKSAtPiBQ
YXJ0aWFsUmVzdWx0CiAKICAgICAgICAgICAgIHVpbnQzMl90IGV4Y2VwdGlvblNpZ25hdHVyZUlu
ZGV4OwogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoZXhj
ZXB0aW9uU2lnbmF0dXJlSW5kZXgpLCAiY2FuJ3QgZ2V0ICIsIGltcG9ydE51bWJlciwgInRoIElt
cG9ydCdzIGV4Y2VwdGlvbiBzaWduYXR1cmUgaW4gbW9kdWxlICciLCBtb2R1bGVTdHJpbmcsICIn
IGZpZWxkICciLCBmaWVsZFN0cmluZywgIiciKTsKLSAgICAgICAgICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXggPj0gbV9pbmZvLT51c2VkU2lnbmF0dXJlcy5z
aXplKCksICJpbnZhbGlkIGV4Y2VwdGlvbiBzaWduYXR1cmUgZm9yICIsIGltcG9ydE51bWJlciwg
InRoIEltcG9ydCwgIiwgZXhjZXB0aW9uU2lnbmF0dXJlSW5kZXgsICIgaXMgb3V0IG9mIHJhbmdl
IG9mICIsIG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCAiIGluIG1vZHVsZSAnIiwgbW9k
dWxlU3RyaW5nLCAiJyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7Ci0gICAgICAgICAgICBr
aW5kSW5kZXggPSBtX2luZm8tPmltcG9ydEV4Y2VwdGlvblNpZ25hdHVyZUluZGljZXMuc2l6ZSgp
OwotICAgICAgICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dXNlZFNpZ25hdHVyZXNbZXhjZXB0aW9uU2lnbmF0dXJl
SW5kZXhdKTsKLSAgICAgICAgICAgIG1faW5mby0+aW1wb3J0RXhjZXB0aW9uU2lnbmF0dXJlSW5k
aWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRihleGNlcHRpb25TaWduYXR1cmVJbmRleCA+PSBtX2luZm8tPnR5cGVDb3Vu
dCgpLCAiaW52YWxpZCBleGNlcHRpb24gc2lnbmF0dXJlIGZvciAiLCBpbXBvcnROdW1iZXIsICJ0
aCBJbXBvcnQsICIsIGV4Y2VwdGlvblNpZ25hdHVyZUluZGV4LCAiIGlzIG91dCBvZiByYW5nZSBv
ZiAiLCBtX2luZm8tPnR5cGVDb3VudCgpLCAiIGluIG1vZHVsZSAnIiwgbW9kdWxlU3RyaW5nLCAi
JyBmaWVsZCAnIiwgZmllbGRTdHJpbmcsICInIik7CisgICAgICAgICAgICBraW5kSW5kZXggPSBt
X2luZm8tPmltcG9ydEV4Y2VwdGlvblR5cGVJbmRpY2VzLnNpemUoKTsKKyAgICAgICAgICAgIFR5
cGVJbmRleCB0eXBlSW5kZXggPSBUeXBlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnR5cGVTaWdu
YXR1cmVzW2V4Y2VwdGlvblNpZ25hdHVyZUluZGV4XSk7CisgICAgICAgICAgICBtX2luZm8tPmlt
cG9ydEV4Y2VwdGlvblR5cGVJbmRpY2VzLnVuY2hlY2tlZEFwcGVuZCh0eXBlSW5kZXgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTc0LDE5ICsxNjMsMTkg
QEAgYXV0byBTZWN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKCkgLT4gUGFydGlhbFJlc3VsdAog
ICAgIHVpbnQzMl90IGNvdW50OwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUlu
dDMyKGNvdW50KSwgImNhbid0IGdldCBGdW5jdGlvbiBzZWN0aW9uJ3MgY291bnQiKTsKICAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKGNvdW50ID4gbWF4RnVuY3Rpb25zLCAiRnVuY3Rpb24gc2VjdGlv
bidzIGNvdW50IGlzIHRvbyBiaWcgIiwgY291bnQsICIgbWF4aW11bSAiLCBtYXhGdW5jdGlvbnMp
OwotICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW50ZXJuYWxGdW5jdGlvblNpZ25h
dHVyZUluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGNvdW50KSwgImNhbid0IGFsbG9jYXRlIGVu
b3VnaCBtZW1vcnkgZm9yICIsIGNvdW50LCAiIEZ1bmN0aW9uIHNpZ25hdHVyZXMiKTsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRnVuY3Rpb25UeXBlSW5kaWNlcy50
cnlSZXNlcnZlQ2FwYWNpdHkoY291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBm
b3IgIiwgY291bnQsICIgRnVuY3Rpb24gc2lnbmF0dXJlcyIpOwogICAgIFdBU01fUEFSU0VSX0ZB
SUxfSUYoIW1faW5mby0+ZnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShjb3VudCksICJjYW4n
dCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciAiLCBjb3VudCwgIkZ1bmN0aW9uIGxvY2F0aW9u
cyIpOwogCiAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAg
ICAgdWludDMyX3QgdHlwZU51bWJlcjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFy
c2VWYXJVSW50MzIodHlwZU51bWJlciksICJjYW4ndCBnZXQgIiwgaSwgInRoIEZ1bmN0aW9uJ3Mg
dHlwZSBudW1iZXIiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49
IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCBpLCAidGggRnVuY3Rpb24gdHlwZSBudW1i
ZXIgaXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKKyAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9J
Rih0eXBlTnVtYmVyID49IG1faW5mby0+dHlwZUNvdW50KCksIGksICJ0aCBGdW5jdGlvbiB0eXBl
IG51bWJlciBpcyBpbnZhbGlkICIsIHR5cGVOdW1iZXIpOwogCi0gICAgICAgIFNpZ25hdHVyZUlu
ZGV4IHNpZ25hdHVyZUluZGV4ID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnVz
ZWRTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsKKyAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9
IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KG1faW5mby0+dHlwZVNpZ25hdHVyZXNbdHlwZU51bWJlcl0p
OwogICAgICAgICAvLyBUaGUgQ29kZSBzZWN0aW9uIGZpeGVzIHVwIHN0YXJ0IGFuZCBlbmQuCiAg
ICAgICAgIHNpemVfdCBzdGFydCA9IDA7CiAgICAgICAgIHNpemVfdCBlbmQgPSAwOwotICAgICAg
ICBtX2luZm8tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzLnVuY2hlY2tlZEFwcGVu
ZChzaWduYXR1cmVJbmRleCk7CisgICAgICAgIG1faW5mby0+aW50ZXJuYWxGdW5jdGlvblR5cGVJ
bmRpY2VzLnVuY2hlY2tlZEFwcGVuZCh0eXBlSW5kZXgpOwogICAgICAgICBtX2luZm8tPmZ1bmN0
aW9ucy51bmNoZWNrZWRBcHBlbmQoeyBzdGFydCwgZW5kLCBWZWN0b3I8dWludDhfdD4oKSB9KTsK
ICAgICB9CiAKQEAgLTM3Miw3ICszNjEsNyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhw
b3J0KCkgLT4gUGFydGlhbFJlc3VsdAogICAgICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihr
aW5kSW5kZXggPj0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgZXhwb3J0TnVtYmVyLCAidGggRXhw
b3J0IGhhcyBpbnZhbGlkIGdsb2JhbCBudW1iZXIgIiwga2luZEluZGV4LCAiIGl0IGV4Y2VlZHMg
dGhlIGdsb2JhbHMgY291bnQgIiwgbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgIiwgbmFtZWQgJyIs
IGZpZWxkU3RyaW5nLCAiJyIpOwogICAgICAgICAgICAgLy8gT25seSBtdXRhYmxlIGdsb2JhbHMg
bmVlZCBmbG9hdGluZyBiaW5kaW5ncy4KICAgICAgICAgICAgIEdsb2JhbEluZm9ybWF0aW9uJiBn
bG9iYWwgPSBtX2luZm8tPmdsb2JhbHNba2luZEluZGV4XTsKLSAgICAgICAgICAgIGlmIChnbG9i
YWwubXV0YWJpbGl0eSA9PSBHbG9iYWxJbmZvcm1hdGlvbjo6TXV0YWJpbGl0eTo6TXV0YWJsZSkK
KyAgICAgICAgICAgIGlmIChnbG9iYWwubXV0YWJpbGl0eSA9PSBNdXRhYmlsaXR5OjpNdXRhYmxl
KQogICAgICAgICAgICAgICAgIGdsb2JhbC5iaW5kaW5nTW9kZSA9IEdsb2JhbEluZm9ybWF0aW9u
OjpCaW5kaW5nTW9kZTo6UG9ydGFibGU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMzk2LDggKzM4NSw4IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VTdGFydCgpIC0+IFBh
cnRpYWxSZXN1bHQKICAgICB1aW50MzJfdCBzdGFydEZ1bmN0aW9uSW5kZXg7CiAgICAgV0FTTV9Q
QVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIoc3RhcnRGdW5jdGlvbkluZGV4KSwgImNhbid0
IGdldCBTdGFydCBpbmRleCIpOwogICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoc3RhcnRGdW5jdGlv
bkluZGV4ID49IG1faW5mby0+ZnVuY3Rpb25JbmRleFNwYWNlU2l6ZSgpLCAiU3RhcnQgaW5kZXgg
Iiwgc3RhcnRGdW5jdGlvbkluZGV4LCAiIGV4Y2VlZHMgZnVuY3Rpb24gaW5kZXggc3BhY2UgIiwg
bV9pbmZvLT5mdW5jdGlvbkluZGV4U3BhY2VTaXplKCkpOwotICAgIFNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4ID0gbV9pbmZvLT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3Bh
Y2Uoc3RhcnRGdW5jdGlvbkluZGV4KTsKLSAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9
IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOworICAgIFR5cGVJbmRl
eCB0eXBlSW5kZXggPSBtX2luZm8tPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3Rh
cnRGdW5jdGlvbkluZGV4KTsKKyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBUeXBlSW5mb3Jt
YXRpb246OmdldEZ1bmN0aW9uU2lnbmF0dXJlKHR5cGVJbmRleCk7CiAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCAiU3RhcnQgZnVuY3Rpb24gY2FuJ3Qg
aGF2ZSBhcmd1bWVudHMiKTsKICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFzaWduYXR1cmUucmV0
dXJuc1ZvaWQoKSwgIlN0YXJ0IGZ1bmN0aW9uIGNhbid0IHJldHVybiBhIHZhbHVlIik7CiAgICAg
bV9pbmZvLT5zdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSA9IHN0YXJ0RnVuY3Rpb25JbmRleDsKQEAg
LTYxMCw3ICs1OTksNyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDhf
dCYgb3Bjb2RlLCB1aW50NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyLAogCiAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoaW5kZXggPj0gbV9pbmZvLT5nbG9iYWxzLnNpemUoKSwgImdldF9nbG9i
YWwncyBpbmRleCAiLCBpbmRleCwgIiBleGNlZWRzIHRoZSBudW1iZXIgb2YgZ2xvYmFscyAiLCBt
X2luZm8tPmdsb2JhbHMuc2l6ZSgpKTsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRihpbmRl
eCA+PSBtX2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWwsICJnZXRfZ2xvYmFsIGltcG9ydCBraW5k
IGluZGV4ICIsIGluZGV4LCAiIGV4Y2VlZHMgdGhlIGZpcnN0IGludGVybmFsIGdsb2JhbCAiLCBt
X2luZm8tPmZpcnN0SW50ZXJuYWxHbG9iYWwpOwotICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lG
KG1faW5mby0+Z2xvYmFsc1tpbmRleF0ubXV0YWJpbGl0eSAhPSBHbG9iYWxJbmZvcm1hdGlvbjo6
SW1tdXRhYmxlLCAiZ2V0X2dsb2JhbCBpbXBvcnQga2luZCBpbmRleCAiLCBpbmRleCwgIiBpcyBt
dXRhYmxlICIpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKG1faW5mby0+Z2xvYmFsc1tp
bmRleF0ubXV0YWJpbGl0eSAhPSBNdXRhYmlsaXR5OjpJbW11dGFibGUsICJnZXRfZ2xvYmFsIGlt
cG9ydCBraW5kIGluZGV4ICIsIGluZGV4LCAiIGlzIG11dGFibGUgIik7CiAKICAgICAgICAgcmVz
dWx0VHlwZSA9IG1faW5mby0+Z2xvYmFsc1tpbmRleF0udHlwZTsKICAgICAgICAgYml0c09ySW1w
b3J0TnVtYmVyID0gaW5kZXg7CkBAIC02MjMsMTAgKzYxMiwxMCBAQCBhdXRvIFNlY3Rpb25QYXJz
ZXI6OnBhcnNlSW5pdEV4cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYgYml0c09ySW1wb3J0
TnVtYmVyLAogICAgICAgICAgICAgaW50MzJfdCBoZWFwVHlwZTsKICAgICAgICAgICAgIFdBU01f
UEFSU0VSX0ZBSUxfSUYoIXBhcnNlSGVhcFR5cGUobV9pbmZvLCBoZWFwVHlwZSksICJyZWYubnVs
bCBoZWFwdHlwZSBtdXN0IGJlIGZ1bmNyZWYsIGV4dGVybnJlZiBvciB0eXBlX2lkeCIpOwogICAg
ICAgICAgICAgaWYgKGlzVHlwZUluZGV4SGVhcFR5cGUoaGVhcFR5cGUpKSB7Ci0gICAgICAgICAg
ICAgICAgU2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlv
bjo6Z2V0KG1faW5mby0+dXNlZFNpZ25hdHVyZXNbaGVhcFR5cGVdLmdldCgpKTsKLSAgICAgICAg
ICAgICAgICB0eXBlT2ZOdWxsID0gVHlwZSB7IFR5cGVLaW5kOjpSZWZOdWxsLCBOdWxsYWJsZTo6
WWVzLCBzaWduYXR1cmVJbmRleCB9OworICAgICAgICAgICAgICAgIFR5cGVJbmRleCB0eXBlSW5k
ZXggPSBUeXBlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnR5cGVTaWduYXR1cmVzW2hlYXBUeXBl
XS5nZXQoKSk7CisgICAgICAgICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6
UmVmTnVsbCwgTnVsbGFibGU6OlllcywgdHlwZUluZGV4IH07CiAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICB0eXBlT2ZOdWxsID0gVHlwZSB7IFR5cGVLaW5kOjpSZWZOdWxsLCBO
dWxsYWJsZTo6WWVzLCBzdGF0aWNfY2FzdDxTaWduYXR1cmVJbmRleD4oaGVhcFR5cGUpIH07Cisg
ICAgICAgICAgICAgICAgdHlwZU9mTnVsbCA9IFR5cGUgeyBUeXBlS2luZDo6UmVmTnVsbCwgTnVs
bGFibGU6Olllcywgc3RhdGljX2Nhc3Q8VHlwZUluZGV4PihoZWFwVHlwZSkgfTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVJlZlR5cGUobV9p
bmZvLCB0eXBlT2ZOdWxsKSwgInJlZi5udWxsIHR5cGUgbXVzdCBiZSBhIHJlZmVyZW5jZSB0eXBl
Iik7CiAKQEAgLTY0MSw4ICs2MzAsOCBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSW5pdEV4
cHIodWludDhfdCYgb3Bjb2RlLCB1aW50NjRfdCYgYml0c09ySW1wb3J0TnVtYmVyLAogICAgICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKGluZGV4ID49IG1faW5mby0+ZnVuY3Rpb25zLnNpemUoKSwg
InJlZi5mdW5jIGluZGV4IiwgaW5kZXgsICIgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9u
cyAiLCBtX2luZm8tPmZ1bmN0aW9ucy5zaXplKCkpOwogCiAgICAgICAgIGlmIChPcHRpb25zOjp1
c2VXZWJBc3NlbWJseVR5cGVkRnVuY3Rpb25SZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgIFNp
Z25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9pbmZvLT5zaWduYXR1cmVJbmRleEZyb21G
dW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwotICAgICAgICAgICAgcmVzdWx0VHlwZSA9IHsgVHlw
ZUtpbmQ6OlJlZiwgTnVsbGFibGU6Ok5vLCBzaWduYXR1cmVJbmRleCB9OworICAgICAgICAgICAg
VHlwZUluZGV4IHR5cGVJbmRleCA9IG1faW5mby0+dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhT
cGFjZShpbmRleCk7CisgICAgICAgICAgICByZXN1bHRUeXBlID0geyBUeXBlS2luZDo6UmVmLCBO
dWxsYWJsZTo6Tm8sIHR5cGVJbmRleCB9OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJl
c3VsdFR5cGUgPSBUeXBlczo6RnVuY3JlZjsKIApAQCAtNjgxLDYgKzY3MCw2MCBAQCBhdXRvIFNl
Y3Rpb25QYXJzZXI6OnBhcnNlSTMySW5pdEV4cHIoc3RkOjpvcHRpb25hbDxJMzJJbml0RXhwcj4m
IGluaXRFeHByLCBBU0NJSQogICAgIHJldHVybiB7IH07CiB9CiAKK2F1dG8gU2VjdGlvblBhcnNl
cjo6cGFyc2VGdW5jdGlvblR5cGUodWludDMyX3QgcG9zaXRpb24sIFJlZlB0cjxUeXBlRGVmaW5p
dGlvbj4mIGZ1bmN0aW9uU2lnbmF0dXJlKSAtPiBQYXJ0aWFsUmVzdWx0Cit7CisgICAgdWludDMy
X3QgYXJndW1lbnRDb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQz
Mihhcmd1bWVudENvdW50KSwgImNhbid0IGdldCAiLCBwb3NpdGlvbiwgInRoIFR5cGUncyBhcmd1
bWVudCBjb3VudCIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoYXJndW1lbnRDb3VudCA+IG1h
eEZ1bmN0aW9uUGFyYW1zLCBwb3NpdGlvbiwgInRoIGFyZ3VtZW50IGNvdW50IGlzIHRvbyBiaWcg
IiwgYXJndW1lbnRDb3VudCwgIiBtYXhpbXVtICIsIG1heEZ1bmN0aW9uUGFyYW1zKTsKKyAgICBW
ZWN0b3I8VHlwZT4gYXJndW1lbnRUeXBlczsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFhcmd1
bWVudFR5cGVzLnRyeVJlc2VydmVDYXBhY2l0eShhcmd1bWVudENvdW50KSwgImNhbid0IGFsbG9j
YXRlIGVub3VnaCBtZW1vcnkgZm9yIFR5cGUgc2VjdGlvbidzICIsIHBvc2l0aW9uLCAidGggc2ln
bmF0dXJlIik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsg
KytpKSB7CisgICAgICAgIFR5cGUgYXJndW1lbnRUeXBlOworICAgICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhbHVlVHlwZShtX2luZm8sIGFyZ3VtZW50VHlwZSksICJjYW4ndCBnZXQg
IiwgaSwgInRoIGFyZ3VtZW50IFR5cGUiKTsKKyAgICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQo
YXJndW1lbnRUeXBlKTsKKyAgICB9CisKKyAgICB1aW50MzJfdCByZXR1cm5Db3VudDsKKyAgICBX
QVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihyZXR1cm5Db3VudCksICJjYW4ndCBn
ZXQgIiwgcG9zaXRpb24sICJ0aCBUeXBlJ3MgcmV0dXJuIGNvdW50Iik7CisKKyAgICBWZWN0b3I8
VHlwZSwgMT4gcmV0dXJuVHlwZXM7CisgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcmV0dXJuVHlw
ZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50Q291bnQpLCAiY2FuJ3QgYWxsb2NhdGUgZW5v
dWdoIG1lbW9yeSBmb3IgVHlwZSBzZWN0aW9uJ3MgIiwgcG9zaXRpb24sICJ0aCBzaWduYXR1cmUi
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmV0dXJuQ291bnQ7ICsraSkgeworICAg
ICAgICBUeXBlIHZhbHVlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVl
VHlwZShtX2luZm8sIHZhbHVlKSwgImNhbid0IGdldCAiLCBpLCAidGggVHlwZSdzIHJldHVybiB2
YWx1ZSIpOworICAgICAgICByZXR1cm5UeXBlcy5hcHBlbmQodmFsdWUpOworICAgIH0KKworICAg
IGZ1bmN0aW9uU2lnbmF0dXJlID0gVHlwZUluZm9ybWF0aW9uOjp0eXBlRGVmaW5pdGlvbkZvckZ1
bmN0aW9uKHJldHVyblR5cGVzLCBhcmd1bWVudFR5cGVzKTsKKyAgICByZXR1cm4geyB9OworfQor
CithdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlU3RydWN0VHlwZSh1aW50MzJfdCBwb3NpdGlvbiwg
UmVmUHRyPFR5cGVEZWZpbml0aW9uPiYgc3RydWN0VHlwZSkgLT4gUGFydGlhbFJlc3VsdAorewor
ICAgIEFTU0VSVChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUdDKCkpOworCisgICAgdWludDMyX3Qg
ZmllbGRDb3VudDsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhclVJbnQzMihmaWVs
ZENvdW50KSwgImNhbid0IGdldCAiLCBwb3NpdGlvbiwgInRoIHN0cnVjdCB0eXBlJ3MgZmllbGQg
Y291bnQiKTsKKyAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKGZpZWxkQ291bnQgPiBtYXhTdHJ1Y3RG
aWVsZENvdW50LCAibnVtYmVyIG9mIGZpZWxkcyBmb3Igc3RydWN0IHR5cGUgYXQgcG9zaXRpb24g
IiwgcG9zaXRpb24sICIgaXMgdG9vIGJpZyAiLCBmaWVsZENvdW50LCAiIG1heGltdW0gIiwgbWF4
U3RydWN0RmllbGRDb3VudCk7CisgICAgVmVjdG9yPFN0cnVjdEZpZWxkPiBmaWVsZHM7CisgICAg
V0FTTV9QQVJTRVJfRkFJTF9JRighZmllbGRzLnRyeVJlc2VydmVDYXBhY2l0eShmaWVsZENvdW50
KSwgImNhbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHN0cnVjdCBmaWVsZHMgIiwgZmll
bGRDb3VudCwgIiBlbnRyaWVzIik7CisKKyAgICBmb3IgKHVpbnQzMl90IGZpZWxkSW5kZXggPSAw
OyBmaWVsZEluZGV4IDwgZmllbGRDb3VudDsgKytmaWVsZEluZGV4KSB7CisgICAgICAgIFR5cGUg
ZmllbGRUeXBlOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFwYXJzZVZhbHVlVHlwZSht
X2luZm8sIGZpZWxkVHlwZSksICJjYW4ndCBnZXQgIiwgZmllbGRJbmRleCwgInRoIGZpZWxkIFR5
cGUiKTsKKworICAgICAgICB1aW50OF90IG11dGFiaWxpdHk7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYoIXBhcnNlVUludDgobXV0YWJpbGl0eSksIHBvc2l0aW9uLCAiY2FuJ3QgZ2V0ICIs
IGZpZWxkSW5kZXgsICJ0aCBmaWVsZCBtdXRhYmlsaXR5Iik7CisgICAgICAgIFdBU01fUEFSU0VS
X0ZBSUxfSUYobXV0YWJpbGl0eSAhPSAweDAgJiYgbXV0YWJpbGl0eSAhPSAweDEsICJpbnZhbGlk
IEZpZWxkJ3MgbXV0YWJpbGl0eTogMHgiLCBoZXgobXV0YWJpbGl0eSwgMiwgTG93ZXJjYXNlKSk7
CisKKyAgICAgICAgZmllbGRzLnVuY2hlY2tlZEFwcGVuZChTdHJ1Y3RGaWVsZCB7IGZpZWxkVHlw
ZSwgc3RhdGljX2Nhc3Q8TXV0YWJpbGl0eT4obXV0YWJpbGl0eSkgfSk7CisgICAgfQorCisgICAg
c3RydWN0VHlwZSA9IFR5cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JTdHJ1Y3QoZmll
bGRzKTsKKyAgICByZXR1cm4geyB9OworfQorCiBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlSTMy
SW5pdEV4cHJGb3JFbGVtZW50U2VjdGlvbihzdGQ6Om9wdGlvbmFsPEkzMkluaXRFeHByPiYgaW5p
dEV4cHIpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICByZXR1cm4gcGFyc2VJMzJJbml0RXhwcihp
bml0RXhwciwgIkVsZW1lbnQgaW5pdF9leHByIG11c3QgcHJvZHVjZSBhbiBpMzIiX3MpOwpAQCAt
NzU5LDcgKzgwMiw3IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6cGFyc2VHbG9iYWxUeXBlKEdsb2Jh
bEluZm9ybWF0aW9uJiBnbG9iYWwpIC0+IFBhcnRpYWxSZXN1bHQKICAgICBXQVNNX1BBUlNFUl9G
QUlMX0lGKCFwYXJzZVZhbHVlVHlwZShtX2luZm8sIGdsb2JhbC50eXBlKSwgImNhbid0IGdldCBH
bG9iYWwncyB2YWx1ZSB0eXBlIik7CiAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VVSW50
OChtdXRhYmlsaXR5KSwgImNhbid0IGdldCBHbG9iYWwgdHlwZSdzIG11dGFiaWxpdHkiKTsKICAg
ICBXQVNNX1BBUlNFUl9GQUlMX0lGKG11dGFiaWxpdHkgIT0gMHgwICYmIG11dGFiaWxpdHkgIT0g
MHgxLCAiaW52YWxpZCBHbG9iYWwncyBtdXRhYmlsaXR5OiAweCIsIGhleChtdXRhYmlsaXR5LCAy
LCBMb3dlcmNhc2UpKTsKLSAgICBnbG9iYWwubXV0YWJpbGl0eSA9IHN0YXRpY19jYXN0PEdsb2Jh
bEluZm9ybWF0aW9uOjpNdXRhYmlsaXR5PihtdXRhYmlsaXR5KTsKKyAgICBnbG9iYWwubXV0YWJp
bGl0eSA9IHN0YXRpY19jYXN0PE11dGFiaWxpdHk+KG11dGFiaWxpdHkpOwogICAgIHJldHVybiB7
IH07CiB9CiAKQEAgLTg1OSw3ICs5MDIsNyBAQCBhdXRvIFNlY3Rpb25QYXJzZXI6OnBhcnNlRXhj
ZXB0aW9uKCkgLT4gUGFydGlhbFJlc3VsdAogICAgIHVpbnQzMl90IGV4Y2VwdGlvbkNvdW50Owog
ICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIXBhcnNlVmFyVUludDMyKGV4Y2VwdGlvbkNvdW50KSwg
ImNhbid0IGdldCBFeGNlcHRpb24gc2VjdGlvbidzIGNvdW50Iik7CiAgICAgV0FTTV9QQVJTRVJf
RkFJTF9JRihleGNlcHRpb25Db3VudCA+IG1heEV4Y2VwdGlvbnMsICJFeHBvcnQgc2VjdGlvbidz
IGNvdW50IGlzIHRvbyBiaWcgIiwgZXhjZXB0aW9uQ291bnQsICIgbWF4aW11bSAiLCBtYXhFeGNl
cHRpb25zKTsKLSAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKCFtX2luZm8tPmludGVybmFsRXhjZXB0
aW9uU2lnbmF0dXJlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uQ291bnQpLCAi
Y2FuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgZXhjZXB0aW9uQ291bnQsICIgZXhj
ZXB0aW9ucyIpOworICAgIFdBU01fUEFSU0VSX0ZBSUxfSUYoIW1faW5mby0+aW50ZXJuYWxFeGNl
cHRpb25UeXBlSW5kaWNlcy50cnlSZXNlcnZlQ2FwYWNpdHkoZXhjZXB0aW9uQ291bnQpLCAiY2Fu
J3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgIiwgZXhjZXB0aW9uQ291bnQsICIgZXhjZXB0
aW9ucyIpOwogCiAgICAgZm9yICh1aW50MzJfdCBleGNlcHRpb25OdW1iZXIgPSAwOyBleGNlcHRp
b25OdW1iZXIgPCBleGNlcHRpb25Db3VudDsgKytleGNlcHRpb25OdW1iZXIpIHsKICAgICAgICAg
dWludDhfdCB0YWdUeXBlOwpAQCAtODY4LDkgKzkxMSw5IEBAIGF1dG8gU2VjdGlvblBhcnNlcjo6
cGFyc2VFeGNlcHRpb24oKSAtPiBQYXJ0aWFsUmVzdWx0CiAKICAgICAgICAgdWludDMyX3QgdHlw
ZU51bWJlcjsKICAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRighcGFyc2VWYXJVSW50MzIodHlw
ZU51bWJlciksICJjYW4ndCBnZXQgIiwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uJ3Mg
dHlwZSBudW1iZXIiKTsKLSAgICAgICAgV0FTTV9QQVJTRVJfRkFJTF9JRih0eXBlTnVtYmVyID49
IG1faW5mby0+dXNlZFNpZ25hdHVyZXMuc2l6ZSgpLCBleGNlcHRpb25OdW1iZXIsICJ0aCBFeGNl
cHRpb24gdHlwZSBudW1iZXIgaXMgaW52YWxpZCAiLCB0eXBlTnVtYmVyKTsKLSAgICAgICAgU2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KG1f
aW5mby0+dXNlZFNpZ25hdHVyZXNbdHlwZU51bWJlcl0pOwotICAgICAgICBtX2luZm8tPmludGVy
bmFsRXhjZXB0aW9uU2lnbmF0dXJlSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoc2lnbmF0dXJlSW5k
ZXgpOworICAgICAgICBXQVNNX1BBUlNFUl9GQUlMX0lGKHR5cGVOdW1iZXIgPj0gbV9pbmZvLT50
eXBlQ291bnQoKSwgZXhjZXB0aW9uTnVtYmVyLCAidGggRXhjZXB0aW9uIHR5cGUgbnVtYmVyIGlz
IGludmFsaWQgIiwgdHlwZU51bWJlcik7CisgICAgICAgIFR5cGVJbmRleCB0eXBlSW5kZXggPSBU
eXBlSW5mb3JtYXRpb246OmdldChtX2luZm8tPnR5cGVTaWduYXR1cmVzW3R5cGVOdW1iZXJdKTsK
KyAgICAgICAgbV9pbmZvLT5pbnRlcm5hbEV4Y2VwdGlvblR5cGVJbmRpY2VzLnVuY2hlY2tlZEFw
cGVuZCh0eXBlSW5kZXgpOwogICAgIH0KIAogICAgIHJldHVybiB7IH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2VjdGlvblBhcnNlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVNlY3Rpb25QYXJzZXIuaAppbmRleCA5MWZkM2VkODM0MjI1
YzgxM2UyZDAxMzkyYjQ5ZThkOWMzYmUyYjg3Li45NTZhNTAyODdjYjkyNjNkMjk4ZWY5MTZiNjNl
ZGRkODhiZDVjZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
U2VjdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TZWN0
aW9uUGFyc2VyLmgKQEAgLTY5LDYgKzY5LDkgQEAgcHJpdmF0ZToKICAgICBQYXJ0aWFsUmVzdWx0
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQ4X3QmLCB1aW50NjRfdCYsIFR5
cGUmIGluaXRFeHByVHlwZSk7CiAgICAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4g
cGFyc2VJMzJJbml0RXhwcihzdGQ6Om9wdGlvbmFsPEkzMkluaXRFeHByPiYsIEFTQ0lJTGl0ZXJh
bCBmYWlsTWVzc2FnZSk7CiAKKyAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBw
YXJzZUZ1bmN0aW9uVHlwZSh1aW50MzJfdCBwb3NpdGlvbiwgUmVmUHRyPFR5cGVEZWZpbml0aW9u
PiYpOworICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlU3RydWN0VHlw
ZSh1aW50MzJfdCBwb3NpdGlvbiwgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiYpOworCiAgICAgUGFy
dGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gdmFsaWRhdGVFbGVtZW50VGFibGVJZHgodWlu
dDMyX3QpOwogICAgIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlSTMySW5p
dEV4cHJGb3JFbGVtZW50U2VjdGlvbihzdGQ6Om9wdGlvbmFsPEkzMkluaXRFeHByPiYpOwogICAg
IFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlRWxlbWVudEtpbmQodWludDhf
dCYgZWxlbWVudEtpbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNpZ25hdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0
dXJlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhNTYxYjg1MGZjNWMxOTM5
ZDBlZjU5ZThhOWZkMmI2MDU5NzhmOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2lnbmF0dXJlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2FzbVNpZ25hdHVyZS5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVk
ZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKLQotU2lnbmF0dXJl
SW5mb3JtYXRpb24qIFNpZ25hdHVyZUluZm9ybWF0aW9uOjp0aGVPbmUgeyBudWxscHRyIH07Ci1z
dGQ6Om9uY2VfZmxhZyBTaWduYXR1cmVJbmZvcm1hdGlvbjo6c2lnbmF0dXJlSW5mb3JtYXRpb25G
bGFnOwotCi1TdHJpbmcgU2lnbmF0dXJlOjp0b1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFdURjo6dG9TdHJpbmcoKnRoaXMpOwotfQotCi12b2lkIFNpZ25hdHVyZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAotewotICAgIHsKLSAgICAgICAgb3V0LnByaW50KCIoIik7Ci0gICAg
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAgZm9yIChTaWduYXR1cmVBcmdDb3VudCBh
cmcgPSAwOyBhcmcgPCBhcmd1bWVudENvdW50KCk7ICsrYXJnKQotICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBtYWtlU3RyaW5nKGFyZ3VtZW50KGFyZykua2luZCkpOwotICAgICAgICBvdXQu
cHJpbnQoIikiKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsK
LSAgICAgICAgb3V0LnByaW50KCIgLT4gWyIpOwotICAgICAgICBmb3IgKFNpZ25hdHVyZUFyZ0Nv
dW50IHJldCA9IDA7IHJldCA8IHJldHVybkNvdW50KCk7ICsrcmV0KQotICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBtYWtlU3RyaW5nKHJldHVyblR5cGUocmV0KS5raW5kKSk7Ci0gICAgICAg
IG91dC5wcmludCgiXSIpOwotICAgIH0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNo
KHNpemVfdCByZXR1cm5Db3VudCwgY29uc3QgVHlwZSogcmV0dXJuVHlwZXMsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBUeXBlKiBhcmd1bWVudFR5cGVzKQotewotICAgIHVuc2lnbmVkIGFj
Y3VtdWxhdG9yID0gMHhhMWJjZWRkOHU7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGFy
Z3VtZW50Q291bnQ7ICsraSkgewotICAgICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhh
c2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1
aW50OF90Pihhcmd1bWVudFR5cGVzW2ldLmtpbmQpKSk7Ci0gICAgICAgIGFjY3VtdWxhdG9yID0g
V1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNo
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFyZ3VtZW50VHlwZXNbaV0ubnVsbGFibGUpKSk7Ci0gICAg
ICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RGOjpJbnRI
YXNoPHVuc2lnbmVkPjo6aGFzaChhcmd1bWVudFR5cGVzW2ldLmluZGV4KSk7Ci0gICAgfQotICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCByZXR1cm5Db3VudDsgKytpKSB7Ci0gICAgICAgIGFj
Y3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVp
bnQ4X3Q+OjpoYXNoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJldHVyblR5cGVzW2ldLmtpbmQpKSk7
Ci0gICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwgV1RG
OjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJldHVyblR5cGVz
W2ldLm51bGxhYmxlKSkpOwotICAgICAgICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2go
YWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1bnNpZ25lZD46Omhhc2gocmV0dXJuVHlwZXNbaV0u
aW5kZXgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFjY3VtdWxhdG9yOwotfQotCi11bnNpZ25lZCBT
aWduYXR1cmU6Omhhc2goKSBjb25zdAotewotICAgIHJldHVybiBjb21wdXRlSGFzaChyZXR1cm5D
b3VudCgpLCBzdG9yYWdlKDApLCBhcmd1bWVudENvdW50KCksIHN0b3JhZ2UocmV0dXJuQ291bnQo
KSkpOwotfQotCi1SZWZQdHI8U2lnbmF0dXJlPiBTaWduYXR1cmU6OnRyeUNyZWF0ZShTaWduYXR1
cmVBcmdDb3VudCByZXR1cm5Db3VudCwgU2lnbmF0dXJlQXJnQ291bnQgYXJndW1lbnRDb3VudCkK
LXsKLSAgICAvLyBXZSB1c2UgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQgZm9yIHRoaXMgY2xhc3Mu
Ci0gICAgYXV0byByZXN1bHQgPSB0cnlGYXN0TWFsbG9jKGFsbG9jYXRlZFNpemUocmV0dXJuQ291
bnQsIGFyZ3VtZW50Q291bnQpKTsKLSAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOwotICAgIGlm
ICghcmVzdWx0LmdldFZhbHVlKG1lbW9yeSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IFNpZ25hdHVyZSogc2lnbmF0dXJlID0gbmV3IChOb3ROdWxsLCBtZW1vcnkpIFNpZ25hdHVyZShy
ZXR1cm5Db3VudCwgYXJndW1lbnRDb3VudCk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKHNpZ25hdHVy
ZSk7Ci19Ci0KLVNpZ25hdHVyZUluZm9ybWF0aW9uOjpTaWduYXR1cmVJbmZvcm1hdGlvbigpCi17
Ci0jZGVmaW5lIE1BS0VfVEhVTktfU0lHTkFUVVJFKHR5cGUsIGVuYywgc3RyLCB2YWwsIF8pICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChU
eXBlS2luZDo6dHlwZSAhPSBUeXBlS2luZDo6Vm9pZCkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICBSZWZQdHI8U2lnbmF0dXJlPiBzaWcgPSBTaWduYXR1cmU6OnRy
eUNyZWF0ZSgxLCAwKTsgICAgICAgICAgICBcCi0gICAgICAgICAgICBzaWctPnJlZigpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBzaWctPmdldFJldHVyblR5cGUoMCkgPSBUeXBlczo6dHlwZTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICB0aHVua1NpZ25hdHVyZXNbbGluZWFyaXplVHlwZShU
eXBlS2luZDo6dHlwZSldID0gc2lnLmdldCgpOyAgICBcCi0gICAgICAgICAgICBtX3NpZ25hdHVy
ZVNldC5hZGQoU2lnbmF0dXJlSGFzaCB7IHNpZy5yZWxlYXNlTm9uTnVsbCgpIH0pOyAgICBcCi0g
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoZmFsc2UpOwotCi0gICAgRk9SX0VBQ0hf
V0FTTV9UWVBFKE1BS0VfVEhVTktfU0lHTkFUVVJFKTsKLQotICAgIC8vIE1ha2UgVm9pZCBhZ2Fp
biBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGUgb25lIHRoYXQgaGFzIHZvaWQgaW4gaXQuCi0gICAg
ewotICAgICAgICBSZWZQdHI8U2lnbmF0dXJlPiBzaWcgPSBTaWduYXR1cmU6OnRyeUNyZWF0ZSgw
LCAwKTsKLSAgICAgICAgc2lnLT5yZWYoKTsKLSAgICAgICAgdGh1bmtTaWduYXR1cmVzW2xpbmVh
cml6ZVR5cGUoVHlwZUtpbmQ6OlZvaWQpXSA9IHNpZy5nZXQoKTsKLSAgICAgICAgbV9zaWduYXR1
cmVTZXQuYWRkKFNpZ25hdHVyZUhhc2ggeyBzaWcucmVsZWFzZU5vbk51bGwoKSB9KTsKLSAgICB9
Ci19Ci0KLQotCi1zdHJ1Y3QgUGFyYW1ldGVyVHlwZXMgewotICAgIGNvbnN0IFZlY3RvcjxUeXBl
LCAxPiYgcmV0dXJuVHlwZXM7Ci0gICAgY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudFR5cGVz
OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUGFyYW1ldGVyVHlwZXMmIHBhcmFt
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaChwYXJhbXMucmV0dXJuVHlwZXMu
c2l6ZSgpLCBwYXJhbXMucmV0dXJuVHlwZXMuZGF0YSgpLCBwYXJhbXMuYXJndW1lbnRUeXBlcy5z
aXplKCksIHBhcmFtcy5hcmd1bWVudFR5cGVzLmRhdGEoKSk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgU2lnbmF0dXJlSGFzaCYgc2lnLCBjb25zdCBQYXJhbWV0ZXJUeXBl
cyYgcGFyYW1zKQotICAgIHsKLSAgICAgICAgaWYgKHNpZy5rZXktPmFyZ3VtZW50Q291bnQoKSAh
PSBwYXJhbXMuYXJndW1lbnRUeXBlcy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChzaWcua2V5LT5yZXR1cm5Db3VudCgpICE9IHBhcmFtcy5yZXR1cm5UeXBl
cy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZy5rZXktPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAoc2lnLmtleS0+YXJndW1lbnQoaSkgIT0gcGFyYW1zLmFyZ3VtZW50VHlwZXNbaV0p
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZy5rZXktPnJldHVybkNvdW50KCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKHNpZy5rZXktPnJldHVyblR5cGUoaSkgIT0gcGFyYW1zLnJldHVyblR5cGVz
W2ldKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU2lnbmF0dXJl
SGFzaCYgZW50cnksIGNvbnN0IFBhcmFtZXRlclR5cGVzJiBwYXJhbXMsIHVuc2lnbmVkKQotICAg
IHsKLSAgICAgICAgUmVmUHRyPFNpZ25hdHVyZT4gc2lnbmF0dXJlID0gU2lnbmF0dXJlOjp0cnlD
cmVhdGUocGFyYW1zLnJldHVyblR5cGVzLnNpemUoKSwgcGFyYW1zLmFyZ3VtZW50VHlwZXMuc2l6
ZSgpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2lnbmF0dXJlKTsKLQotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1zLnJldHVyblR5cGVzLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgc2lnbmF0dXJlLT5nZXRSZXR1cm5UeXBlKGkpID0gcGFyYW1zLnJldHVyblR5cGVz
W2ldOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbXMuYXJndW1lbnRU
eXBlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHNpZ25hdHVyZS0+Z2V0QXJndW1lbnQoaSkg
PSBwYXJhbXMuYXJndW1lbnRUeXBlc1tpXTsKLQotICAgICAgICBlbnRyeS5rZXkgPSBXVEZNb3Zl
KHNpZ25hdHVyZSk7Ci0gICAgfQotfTsKLQotUmVmUHRyPFNpZ25hdHVyZT4gU2lnbmF0dXJlSW5m
b3JtYXRpb246OnNpZ25hdHVyZUZvcihjb25zdCBWZWN0b3I8VHlwZSwgMT4mIHJlc3VsdHMsIGNv
bnN0IFZlY3RvcjxUeXBlPiYgYXJncykKLXsKLSAgICBpZiBjb25zdGV4cHIgKEFTU0VSVF9FTkFC
TEVEKSB7Ci0gICAgICAgIEFTU0VSVCghcmVzdWx0cy5jb250YWlucyhXYXNtOjpUeXBlczo6Vm9p
ZCkpOwotICAgICAgICBBU1NFUlQoIWFyZ3MuY29udGFpbnMoV2FzbTo6VHlwZXM6OlZvaWQpKTsK
LSAgICB9Ci0gICAgU2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24oKTsKLSAg
ICBMb2NrZXIgbG9ja2VyIHsgaW5mby5tX2xvY2sgfTsKLQotICAgIGF1dG8gYWRkUmVzdWx0ID0g
aW5mby5tX3NpZ25hdHVyZVNldC50ZW1wbGF0ZSBhZGQ8UGFyYW1ldGVyVHlwZXM+KFBhcmFtZXRl
clR5cGVzIHsgcmVzdWx0cywgYXJncyB9KTsKLSAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9y
LT5rZXk7Ci19Ci0KLXZvaWQgU2lnbmF0dXJlSW5mb3JtYXRpb246OnRyeUNsZWFudXAoKQotewot
ICAgIFNpZ25hdHVyZUluZm9ybWF0aW9uJiBpbmZvID0gc2luZ2xldG9uKCk7Ci0gICAgTG9ja2Vy
IGxvY2tlciB7IGluZm8ubV9sb2NrIH07Ci0KLSAgICBpbmZvLm1fc2lnbmF0dXJlU2V0LnJlbW92
ZUlmKFsmXSAoYXV0byYgaGFzaCkgewotICAgICAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBo
YXNoLmtleTsKLSAgICAgICAgcmV0dXJuIHNpZ25hdHVyZS0+cmVmQ291bnQoKSA9PSAxOwotICAg
IH0pOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQotCi0jZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVNpZ25hdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTUzMjk1NWEzMGUwZDYyMTgzMTg3MzJh
NGVlMjI0YWMzNzhlYTMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKLQotI2luY2x1ZGUgIldhc21PcHMuaCIKLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0
aWMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIFdhc20gewotCi11c2luZyBT
aWduYXR1cmVBcmdDb3VudCA9IHVpbnQzMl90OwotCi1jbGFzcyBTaWduYXR1cmUgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2lnbmF0dXJlPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci0KLSAgICBTaWduYXR1cmUoKSA9IGRlbGV0ZTsKLSAgICBTaWduYXR1cmUoY29uc3Qg
U2lnbmF0dXJlJikgPSBkZWxldGU7Ci0gICAgU2lnbmF0dXJlKFNpZ25hdHVyZUFyZ0NvdW50IHJl
dENvdW50LCBTaWduYXR1cmVBcmdDb3VudCBhcmdDb3VudCkKLSAgICAgICAgOiBtX3JldENvdW50
KHJldENvdW50KQotICAgICAgICAsIG1fYXJnQ291bnQoYXJnQ291bnQpCi0gICAgewotICAgIH0K
LQotICAgIFR5cGUqIHN0b3JhZ2UoU2lnbmF0dXJlQXJnQ291bnQgaSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBpICsgcmVpbnRlcnByZXRfY2FzdDxUeXBlKj4odGhpcyArIDEpOyAvLyBTdG9yYWdl
IHN0YXJ0cyBwYXN0IGVuZCBvZiB0aGlzIG9iamVjdAotICAgIH0KLSAgICBUeXBlKiBzdG9yYWdl
KFNpZ25hdHVyZUFyZ0NvdW50IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U2lnbmF0dXJl
Kj4odGhpcyktPnN0b3JhZ2UoaSk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRlZFNpemUo
Q2hlY2tlZDxTaWduYXR1cmVBcmdDb3VudD4gcmV0Q291bnQsIENoZWNrZWQ8U2lnbmF0dXJlQXJn
Q291bnQ+IGFyZ0NvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNpemVvZihTaWduYXR1cmUp
ICsgKHJldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9mKFR5cGUpOwotICAgIH0KLQotcHVibGlj
OgotICAgIFNpZ25hdHVyZUFyZ0NvdW50IHJldHVybkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9y
ZXRDb3VudDsgfQotICAgIFNpZ25hdHVyZUFyZ0NvdW50IGFyZ3VtZW50Q291bnQoKSBjb25zdCB7
IHJldHVybiBtX2FyZ0NvdW50OyB9Ci0KLSAgICBUeXBlIHJldHVyblR5cGUoU2lnbmF0dXJlQXJn
Q291bnQgaSkgY29uc3QgeyBBU1NFUlQoaSA8IHJldHVybkNvdW50KCkpOyByZXR1cm4gY29uc3Rf
Y2FzdDxTaWduYXR1cmUqPih0aGlzKS0+Z2V0UmV0dXJuVHlwZShpKTsgfQotICAgIGJvb2wgcmV0
dXJuc1ZvaWQoKSBjb25zdCB7IHJldHVybiAhcmV0dXJuQ291bnQoKTsgfQotICAgIFR5cGUgYXJn
dW1lbnQoU2lnbmF0dXJlQXJnQ291bnQgaSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxTaWdu
YXR1cmUqPih0aGlzKS0+Z2V0QXJndW1lbnQoaSk7IH0KLSAgICBTaWduYXR1cmVJbmRleCBpbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxTaWduYXR1cmVJbmRleD4odGhpcyk7IH0K
LQotICAgIFdURjo6U3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0gICAgdm9pZCBkdW1wKFdURjo6
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpZ25h
dHVyZSYgcmhzKSBjb25zdCB7IHJldHVybiB0aGlzID09ICZyaHM7IH0KLSAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3Q7Ci0KLSAgICAvLyBTaWduYXR1cmVzIGFyZSB1bmlxdWVkIGFuZCwgZm9yIGNh
bGxfaW5kaXJlY3QsIHZhbGlkYXRlZCBhdCBydW50aW1lLiBUYWJsZXMgY2FuIGNyZWF0ZSBpbnZh
bGlkIFNpZ25hdHVyZUluZGV4IHZhbHVlcyB3aGljaCBjYXVzZSBjYWxsX2luZGlyZWN0IHRvIGZh
aWwuIFdlIHVzZSAwIGFzIHRoZSBpbnZhbGlkSW5kZXggc28gdGhhdCB0aGUgY29kZWdlbiBjYW4g
ZWFzaWx5IHRlc3QgZm9yIGl0IGFuZCB0cmFwLCBhbmQgd2UgYWRkIGEgdG9rZW4gaW52YWxpZCBl
bnRyeSBpbiBTaWduYXR1cmVJbmZvcm1hdGlvbi4KLSAgICBzdGF0aWMgY29uc3QgY29uc3RleHBy
IFNpZ25hdHVyZUluZGV4IGludmFsaWRJbmRleCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uOwotICAgIGZyaWVuZCBzdHJ1Y3QgUGFyYW1ldGVy
VHlwZXM7Ci0KLSAgICBzdGF0aWMgUmVmUHRyPFNpZ25hdHVyZT4gdHJ5Q3JlYXRlKFNpZ25hdHVy
ZUFyZ0NvdW50IHJldHVybkNvdW50LCBTaWduYXR1cmVBcmdDb3VudCBhcmd1bWVudENvdW50KTsK
LSAgICBUeXBlJiBnZXRSZXR1cm5UeXBlKFNpZ25hdHVyZUFyZ0NvdW50IGkpIHsgQVNTRVJUKGkg
PCByZXR1cm5Db3VudCgpKTsgcmV0dXJuICpzdG9yYWdlKGkpOyB9Ci0gICAgVHlwZSYgZ2V0QXJn
dW1lbnQoU2lnbmF0dXJlQXJnQ291bnQgaSkgeyBBU1NFUlQoaSA8IGFyZ3VtZW50Q291bnQoKSk7
IHJldHVybiAqc3RvcmFnZShyZXR1cm5Db3VudCgpICsgaSk7IH0KLQotICAgIFNpZ25hdHVyZUFy
Z0NvdW50IG1fcmV0Q291bnQ7Ci0gICAgU2lnbmF0dXJlQXJnQ291bnQgbV9hcmdDb3VudDsKLSAg
ICAvLyBSZXR1cm4gVHlwZSBhbmQgYXJndW1lbnRzIGFyZSBzdG9yZWQgaGVyZS4KLX07Ci0KLXN0
cnVjdCBTaWduYXR1cmVIYXNoIHsKLSAgICBSZWZQdHI8U2lnbmF0dXJlPiBrZXkgeyBudWxscHRy
IH07Ci0gICAgU2lnbmF0dXJlSGFzaCgpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBTaWduYXR1
cmVIYXNoKFJlZjxTaWduYXR1cmU+JiYga2V5KQotICAgICAgICA6IGtleShXVEZNb3ZlKGtleSkp
Ci0gICAgeyB9Ci0gICAgZXhwbGljaXQgU2lnbmF0dXJlSGFzaChXVEY6Okhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDoga2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQot
ICAgIHsgfQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaWduYXR1cmVIYXNoJiByaHMpIGNv
bnN0IHsgcmV0dXJuIGVxdWFsKCp0aGlzLCByaHMpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgU2lnbmF0dXJlSGFzaCYgbGhzLCBjb25zdCBTaWduYXR1cmVIYXNoJiByaHMpIHsgcmV0
dXJuIGxocy5rZXkgPT0gcmhzLmtleTsgfQotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFNpZ25hdHVyZUhhc2gmIHNpZ25hdHVyZSkgeyByZXR1cm4gc2lnbmF0dXJlLmtleSA/IHNpZ25h
dHVyZS5rZXktPmhhc2goKSA6IDA7IH0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKLSAgICBib29sIGlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4ga2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7
IH0KLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCi0KLQotbmFtZXNwYWNlIFdURiB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPEpTQzo6V2FzbTo6U2lnbmF0dXJlSGFzaD4gOiBKU0M6Oldhc206
OlNpZ25hdHVyZUhhc2ggeyB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRy
YWl0czsKLXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpXYXNtOjpTaWduYXR1cmVI
YXNoPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Oldhc206OlNpZ25hdHVyZUhhc2g+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXVEYKLQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20g
ewotCi0vLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gaXMgaGVsZCBnbG9iYWxseSBhbmQgc2hhcmVk
IGJ5IHRoZSBlbnRpcmUgcHJvY2VzcyB0byBhbGxvdyBhbGwgc2lnbmF0dXJlcyB0byBiZSB1bmlx
dWUuIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB3YXNtIGNhbGxzIGFub3RoZXIgd2FzbSBpbnN0YW5j
ZSwgYW5kIG11c3Qgd29yayB3aGVuIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxl
IFZNcy4KLWNsYXNzIFNpZ25hdHVyZUluZm9ybWF0aW9uIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTaWduYXR1cmVJbmZvcm1hdGlvbik7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0KLSAgICBTaWduYXR1cmVJbmZvcm1hdGlvbigpOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFNp
Z25hdHVyZUluZm9ybWF0aW9uJiBzaW5nbGV0b24oKTsKLQotICAgIHN0YXRpYyBSZWZQdHI8U2ln
bmF0dXJlPiBzaWduYXR1cmVGb3IoY29uc3QgVmVjdG9yPFR5cGUsIDE+JiByZXR1cm5UeXBlcywg
Y29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudFR5cGVzKTsKLSAgICBBTFdBWVNfSU5MSU5FIGNv
bnN0IFNpZ25hdHVyZSogdGh1bmtGb3IoVHlwZSB0eXBlKSBjb25zdCB7IHJldHVybiB0aHVua1Np
Z25hdHVyZXNbbGluZWFyaXplVHlwZSh0eXBlLmtpbmQpXTsgfQotCi0gICAgc3RhdGljIGNvbnN0
IFNpZ25hdHVyZSYgZ2V0KFNpZ25hdHVyZUluZGV4KTsKLSAgICBzdGF0aWMgU2lnbmF0dXJlSW5k
ZXggZ2V0KGNvbnN0IFNpZ25hdHVyZSYpOwotICAgIHN0YXRpYyB2b2lkIHRyeUNsZWFudXAoKTsK
LQotcHJpdmF0ZToKLSAgICBIYXNoU2V0PFdhc206OlNpZ25hdHVyZUhhc2g+IG1fc2lnbmF0dXJl
U2V0OwotICAgIGNvbnN0IFNpZ25hdHVyZSogdGh1bmtTaWduYXR1cmVzW251bVR5cGVzXTsKLSAg
ICBMb2NrIG1fbG9jazsKLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTaWduYXR1cmVJ
bmZvcm1hdGlvbiogdGhlT25lOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBzaWduYXR1cmVJbmZvcm1hdGlvbkZsYWc7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZUlubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TaWduYXR1cmVJbmxpbmVzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDhjNjk4NmRmZjZjNWI1NDIzMTNmMjU4MTU4OWFkOTI1ZjgwZDZl
NTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNpZ25hdHVyZUlubGluZXMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1
enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+LgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKLQotI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBXYXNtIHsKLQotaW5saW5lIFNpZ25hdHVyZUluZm9ybWF0aW9uJiBTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGQ6OmNhbGxfb25jZShzaWduYXR1cmVJ
bmZvcm1hdGlvbkZsYWcsIFtdICgpIHsKLSAgICAgICAgdGhlT25lID0gbmV3IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOwotICAgIH0pOwotICAgIHJldHVybiAqdGhlT25lOwotfQotCi1pbmxpbmUgY29u
c3QgU2lnbmF0dXJlJiBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KFNpZ25hdHVyZUluZGV4IGlu
ZGV4KQotewotICAgIEFTU0VSVChpbmRleCAhPSBTaWduYXR1cmU6OmludmFsaWRJbmRleCk7Ci0g
ICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8Y29uc3QgU2lnbmF0dXJlKj4oaW5kZXgpOwotfQotCi1p
bmxpbmUgU2lnbmF0dXJlSW5kZXggU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSkKLXsKLSAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAg
U2lnbmF0dXJlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24oKTsKLSAgICAgICAgTG9ja2Vy
IGxvY2tlciB7IGluZm8ubV9sb2NrIH07Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoaW5mbywgaW5m
by5tX3NpZ25hdHVyZVNldC5jb250YWlucyhTaWduYXR1cmVIYXNoIHsgY29uc3RfY2FzdDxTaWdu
YXR1cmUmPihzaWduYXR1cmUpIH0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxT
aWduYXR1cmVJbmRleD4oJnNpZ25hdHVyZSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDJhODY3ZDZjNzNmZGVmM2U5MTg3MDZh
M2YwNzJjMGQ1ODI5OTNjZDcuLmM1MTFjYjNmMjliNjFjMTJjZGQ3YTVjNTc1MmIwYTFmMWFlN2U0
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCkBA
IC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAiV2FzbU9NR1BsYW4uaCIKICNpbmNsdWRlICJXYXNt
T1NSRW50cnlQbGFuLmgiCiAjaW5jbHVkZSAiV2FzbU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJX
YXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGlu
ZXMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1
bmN0aW9uLmgiCiAKQEAgLTQ4Niw3ICs0ODYsNyBAQCBXQVNNX1NMT1dfUEFUSF9ERUNMKGNhbGxf
bm9fdGxzKQogICAgIHJldHVybiBkb1dhc21DYWxsKGluc3RhbmNlLCBpbnN0cnVjdGlvbi5tX2Z1
bmN0aW9uSW5kZXgpOwogfQogCi1pbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGRvV2FzbUNhbGxJ
bmRpcmVjdChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCB1
bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1bnNpZ25lZCBzaWdu
YXR1cmVJbmRleCkKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2FsbEluZGlyZWN0
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVk
IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVuc2lnbmVkIHR5cGVJbmRleCkK
IHsKICAgICBXYXNtOjpGdW5jUmVmVGFibGUqIHRhYmxlID0gaW5zdGFuY2UtPnRhYmxlKHRhYmxl
SW5kZXgpLT5hc0Z1bmNyZWZUYWJsZSgpOwogCkBAIC00OTYsMTEgKzQ5NiwxMSBAQCBpbmxpbmUg
U2xvd1BhdGhSZXR1cm5UeXBlIGRvV2FzbUNhbGxJbmRpcmVjdChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgV2FzbTo6SW5zdGFuYwogICAgIFdhc206Okluc3RhbmNlKiB0YXJnZXRJbnN0YW5jZSA9IHRh
YmxlLT5pbnN0YW5jZShmdW5jdGlvbkluZGV4KTsKICAgICBjb25zdCBXYXNtOjpXYXNtVG9XYXNt
SW1wb3J0YWJsZUZ1bmN0aW9uJiBmdW5jdGlvbiA9IHRhYmxlLT5mdW5jdGlvbihmdW5jdGlvbklu
ZGV4KTsKIAotICAgIGlmIChmdW5jdGlvbi5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1
cmU6OmludmFsaWRJbmRleCkKKyAgICBpZiAoZnVuY3Rpb24udHlwZUluZGV4ID09IFdhc206OlR5
cGVEZWZpbml0aW9uOjppbnZhbGlkSW5kZXgpCiAgICAgICAgIFdBU01fVEhST1coV2FzbTo6RXhj
ZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkpOwogCi0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJl
JiBjYWxsU2lnbmF0dXJlID0gQ0FMTEVFKCktPnNpZ25hdHVyZShzaWduYXR1cmVJbmRleCk7Ci0g
ICAgaWYgKGZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4ICE9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoY2FsbFNpZ25hdHVyZSkpCisgICAgY29uc3QgYXV0byYgY2FsbFNpZ25hdHVyZSA9
IENBTExFRSgpLT5zaWduYXR1cmUodHlwZUluZGV4KTsKKyAgICBpZiAoZnVuY3Rpb24udHlwZUlu
ZGV4ICE9IFdhc206OlR5cGVJbmZvcm1hdGlvbjo6Z2V0KGNhbGxTaWduYXR1cmUpKQogICAgICAg
ICBXQVNNX1RIUk9XKFdhc206OkV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7CiAKICAgICBp
ZiAodGFyZ2V0SW5zdGFuY2UgIT0gaW5zdGFuY2UpCkBAIC01MTMsMTcgKzUxMywxNyBAQCBXQVNN
X1NMT1dfUEFUSF9ERUNMKGNhbGxfaW5kaXJlY3QpCiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9
IHBjLT5hczxXYXNtQ2FsbEluZGlyZWN0PigpOwogICAgIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgg
PSBSRUFEKGluc3RydWN0aW9uLm1fZnVuY3Rpb25JbmRleCkudW5ib3hlZEludDMyKCk7Ci0gICAg
cmV0dXJuIGRvV2FzbUNhbGxJbmRpcmVjdChjYWxsRnJhbWUsIGluc3RhbmNlLCBmdW5jdGlvbklu
ZGV4LCBpbnN0cnVjdGlvbi5tX3RhYmxlSW5kZXgsIGluc3RydWN0aW9uLm1fc2lnbmF0dXJlSW5k
ZXgpOworICAgIHJldHVybiBkb1dhc21DYWxsSW5kaXJlY3QoY2FsbEZyYW1lLCBpbnN0YW5jZSwg
ZnVuY3Rpb25JbmRleCwgaW5zdHJ1Y3Rpb24ubV90YWJsZUluZGV4LCBpbnN0cnVjdGlvbi5tX3R5
cGVJbmRleCk7CiB9CiAKIFdBU01fU0xPV19QQVRIX0RFQ0woY2FsbF9pbmRpcmVjdF9ub190bHMp
CiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBjLT5hczxXYXNtQ2FsbEluZGlyZWN0Tm9UbHM+
KCk7CiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbmRleCA9IFJFQUQoaW5zdHJ1Y3Rpb24ubV9mdW5j
dGlvbkluZGV4KS51bmJveGVkSW50MzIoKTsKLSAgICByZXR1cm4gZG9XYXNtQ2FsbEluZGlyZWN0
KGNhbGxGcmFtZSwgaW5zdGFuY2UsIGZ1bmN0aW9uSW5kZXgsIGluc3RydWN0aW9uLm1fdGFibGVJ
bmRleCwgaW5zdHJ1Y3Rpb24ubV9zaWduYXR1cmVJbmRleCk7CisgICAgcmV0dXJuIGRvV2FzbUNh
bGxJbmRpcmVjdChjYWxsRnJhbWUsIGluc3RhbmNlLCBmdW5jdGlvbkluZGV4LCBpbnN0cnVjdGlv
bi5tX3RhYmxlSW5kZXgsIGluc3RydWN0aW9uLm1fdHlwZUluZGV4KTsKIH0KIAotaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsUmVmKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNt
OjpJbnN0YW5jZSogY2FsbGVySW5zdGFuY2UsIEpTVmFsdWUgdGFyZ2V0UmVmZXJlbmNlLCB1bnNp
Z25lZCBzaWduYXR1cmVJbmRleCkKK2lubGluZSBTbG93UGF0aFJldHVyblR5cGUgZG9XYXNtQ2Fs
bFJlZihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGNhbGxlckluc3RhbmNl
LCBKU1ZhbHVlIHRhcmdldFJlZmVyZW5jZSwgdW5zaWduZWQgdHlwZUluZGV4KQogewogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOwogCkBAIC01NDEsOCArNTQxLDggQEAgaW5saW5lIFNsb3dQ
YXRoUmV0dXJuVHlwZSBkb1dhc21DYWxsUmVmKENhbGxGcmFtZSogY2FsbEZyYW1lLCBXYXNtOjpJ
bnN0YW5jZSogY2EKICAgICBpZiAoY2FsbGVlSW5zdGFuY2UgIT0gY2FsbGVySW5zdGFuY2UpCiAg
ICAgICAgIGNhbGxlZUluc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0KGNhbGxlckluc3RhbmNl
LT5jYWNoZWRTdGFja0xpbWl0KCkpOwogCi0gICAgQVNTRVJUKGZ1bmN0aW9uLnNpZ25hdHVyZUlu
ZGV4ID09IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoQ0FMTEVFKCktPnNpZ25hdHVy
ZShzaWduYXR1cmVJbmRleCkpKTsKLSAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlSW5kZXgpOwor
ICAgIEFTU0VSVChmdW5jdGlvbi50eXBlSW5kZXggPT0gV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpn
ZXQoQ0FMTEVFKCktPnNpZ25hdHVyZSh0eXBlSW5kZXgpKSk7CisgICAgVU5VU0VEX1BBUkFNKHR5
cGVJbmRleCk7CiAgICAgV0FTTV9DQUxMX1JFVFVSTihjYWxsZWVJbnN0YW5jZSwgZnVuY3Rpb24u
ZW50cnlwb2ludExvYWRMb2NhdGlvbi0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgV2FzbUVudHJ5UHRy
VGFnKTsKIH0KIApAQCAtNTUwLDE0ICs1NTAsMTQgQEAgV0FTTV9TTE9XX1BBVEhfREVDTChjYWxs
X3JlZikKIHsKICAgICBhdXRvIGluc3RydWN0aW9uID0gcGMtPmFzPFdhc21DYWxsUmVmPigpOwog
ICAgIEpTVmFsdWUgcmVmZXJlbmNlID0gSlNWYWx1ZTo6ZGVjb2RlKFJFQUQoaW5zdHJ1Y3Rpb24u
bV9mdW5jdGlvblJlZmVyZW5jZSkuZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIGRvV2Fz
bUNhbGxSZWYoY2FsbEZyYW1lLCBpbnN0YW5jZSwgcmVmZXJlbmNlLCBpbnN0cnVjdGlvbi5tX3Np
Z25hdHVyZUluZGV4KTsKKyAgICByZXR1cm4gZG9XYXNtQ2FsbFJlZihjYWxsRnJhbWUsIGluc3Rh
bmNlLCByZWZlcmVuY2UsIGluc3RydWN0aW9uLm1fdHlwZUluZGV4KTsKIH0KIAogV0FTTV9TTE9X
X1BBVEhfREVDTChjYWxsX3JlZl9ub190bHMpCiB7CiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IHBj
LT5hczxXYXNtQ2FsbFJlZk5vVGxzPigpOwogICAgIEpTVmFsdWUgcmVmZXJlbmNlID0gSlNWYWx1
ZTo6ZGVjb2RlKFJFQUQoaW5zdHJ1Y3Rpb24ubV9mdW5jdGlvblJlZmVyZW5jZSkuZW5jb2RlZEpT
VmFsdWUoKSk7Ci0gICAgcmV0dXJuIGRvV2FzbUNhbGxSZWYoY2FsbEZyYW1lLCBpbnN0YW5jZSwg
cmVmZXJlbmNlLCBpbnN0cnVjdGlvbi5tX3NpZ25hdHVyZUluZGV4KTsKKyAgICByZXR1cm4gZG9X
YXNtQ2FsbFJlZihjYWxsRnJhbWUsIGluc3RhbmNlLCByZWZlcmVuY2UsIGluc3RydWN0aW9uLm1f
dHlwZUluZGV4KTsKIH0KIAogV0FTTV9TTE9XX1BBVEhfREVDTChzZXRfZ2xvYmFsX3JlZikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQYXJzZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAK
aW5kZXggZmE1NTJlZmZmMTc0MWVjYjVhNGI2YzJmODlmY2EwOTc1OWVlMzE1ZC4uYTU2YTY4MDA3
ZTYxOTg0ZDU5M2JkNjQ3Y2Q3ZTY1M2JmMWVjY2Y5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BhcnNlci5jcHAKQEAgLTMyLDcgKzMyLDcgQEAK
ICNpbmNsdWRlICJXYXNtT3BzLmgiCiAjaW5jbHVkZSAiV2FzbVBhcnNlci5oIgogI2luY2x1ZGUg
Ildhc21TZWN0aW9uUGFyc2VyLmgiCi0jaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIK
KyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL1Vu
YWxpZ25lZEFjY2Vzcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BsYW4uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ1BsYW4uY3BwCmluZGV4
IDgxMzVhMTFiYjg1NWE0YWRjMWU3YmIyNTRhZmY2OWM5MTAyMjEwOWQuLmNkZjRmZTgwYzQ3YzZl
YzdmZTg5M2JjNTgxMzFkMTY4MzFjNjE5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21TdHJlYW1pbmdQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU3RyZWFtaW5nUGxhbi5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRl
ICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUxMSW50UGxhbi5oIgogI2luY2x1ZGUgIldh
c21OYW1lU2VjdGlvbi5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCisjaW5j
bHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCmluZGV4IGI1M2M1YTQy
ZmM4NjI3OTQxNzQ0ZTcxZWIxMzVhZTQ2ZGIzODM0YWEuLjA4ODA4NDU2YzQ3NjQxMTI0YzAxNTU0
ZWEyYjdmYWQ5ODlhZTM3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21UYWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxl
LmNwcApAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgVGFibGU6OmNsZWFyKHVpbnQzMl90IGluZGV4
KQogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3duZXIpOwogICAgIGlmIChhdXRvKiBmdW5jUmVmVGFi
bGUgPSBhc0Z1bmNyZWZUYWJsZSgpKSB7CiAgICAgICAgIGZ1bmNSZWZUYWJsZS0+bV9pbXBvcnRh
YmxlRnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24o
KTsKLSAgICAgICAgQVNTRVJUKGZ1bmNSZWZUYWJsZS0+bV9pbXBvcnRhYmxlRnVuY3Rpb25zLmdl
dCgpW2luZGV4XS5zaWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRl
eCk7IC8vIFdlIHJlbHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgICAgICBBU1NFUlQo
ZnVuY1JlZlRhYmxlLT5tX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLnR5cGVJbmRl
eCA9PSBXYXNtOjpUeXBlRGVmaW5pdGlvbjo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0
aGlzIGluIGNvbXBpbGVkIGNvZGUuCiAgICAgICAgIGZ1bmNSZWZUYWJsZS0+bV9pbnN0YW5jZXMu
Z2V0KClbaW5kZXhdID0gbnVsbHB0cjsKICAgICB9CiAgICAgbV9qc1ZhbHVlcy5nZXQoKVtpbmRl
eF0uc2V0U3RhcnRpbmdWYWx1ZShqc051bGwoKSk7CkBAIC0xOTcsNyArMTk3LDcgQEAgRnVuY1Jl
ZlRhYmxlOjpGdW5jUmVmVGFibGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gbWF4aW11bSkKICAgICBtX2luc3RhbmNlcyA9IE1hbGxvY1B0cjxJbnN0YW5jZSosIFZN
TWFsbG9jPjo6bWFsbG9jKHNpemVvZihJbnN0YW5jZSopICogQ2hlY2tlZDxzaXplX3Q+KGFsbG9j
YXRlZExlbmd0aChtX2xlbmd0aCkpKTsKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYWxs
b2NhdGVkTGVuZ3RoKG1fbGVuZ3RoKTsgKytpKSB7CiAgICAgICAgIG5ldyAoJm1faW1wb3J0YWJs
ZUZ1bmN0aW9ucy5nZXQoKVtpXSkgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbigpOwotICAg
ICAgICBBU1NFUlQobV9pbXBvcnRhYmxlRnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZUluZGV4
ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGlu
IGNvbXBpbGVkIGNvZGUuCisgICAgICAgIEFTU0VSVChtX2ltcG9ydGFibGVGdW5jdGlvbnMuZ2V0
KClbaV0udHlwZUluZGV4ID09IFdhc206OlR5cGVEZWZpbml0aW9uOjppbnZhbGlkSW5kZXgpOyAv
LyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KICAgICAgICAgbV9pbnN0YW5jZXMu
Z2V0KClbaV0gPSBudWxscHRyOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UYWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWcuaAppbmRleCBiZGZjZmI2ODhlMmQxZTk3OWFkMGNjZjRjMWFhZjA2Zjk5MjQwNTI0Li5mMzZh
ZGE2YTI0ZTE0ZTU4OTczZjdkNmNjZjkwNDRlZDU1YjU0YTdmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFnLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRhZy5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKLSNpbmNsdWRlICJXYXNtU2lnbmF0dXJlLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZp
bml0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTM1LDI1
ICszNSwyNyBAQCBjbGFzcyBUYWcgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
VGFnPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoVGFnKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRhZz4gY3JlYXRlKGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFRhZyhzaWduYXR1cmUp
KTsgfQorICAgIHN0YXRpYyBSZWY8VGFnPiBjcmVhdGUoY29uc3QgVHlwZURlZmluaXRpb24mIHR5
cGUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGFnKHR5cGUpKTsgfQogCi0gICAgU2lnbmF0dXJl
QXJnQ291bnQgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NpZ25hdHVyZS0+YXJn
dW1lbnRDb3VudCgpOyB9Ci0gICAgVHlwZSBwYXJhbWV0ZXIoU2lnbmF0dXJlQXJnQ291bnQgaSkg
Y29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUtPmFyZ3VtZW50KGkpOyB9CisgICAgRnVuY3Rpb25B
cmdDb3VudCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZS0+YXM8RnVuY3Rp
b25TaWduYXR1cmU+KCktPmFyZ3VtZW50Q291bnQoKTsgfQorICAgIFR5cGUgcGFyYW1ldGVyKEZ1
bmN0aW9uQXJnQ291bnQgaSkgY29uc3QgeyByZXR1cm4gbV90eXBlLT5hczxGdW5jdGlvblNpZ25h
dHVyZT4oKS0+YXJndW1lbnRUeXBlKGkpOyB9CisgICAgVHlwZUluZGV4IHR5cGVJbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZS0+aW5kZXgoKTsgfQogCiAgICAgLy8gU2luY2UgKDEpIHdlIGRv
IG5vdCBjb3B5IFdhc206OlRhZyBhbmQgKDIpIHdlIGFsd2F5cyBhbGxvY2F0ZSBXYXNtOjpUYWcg
ZnJvbSBoZWFwLCB3ZSBjYW4gdXNlCiAgICAgLy8gcG9pbnRlciBjb21wYXJpc29uIGZvciBpZGVu
dGl0eSBjaGVjay4KICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGFnJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gdGhpcyA9PSAmb3RoZXI7IH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGFn
JiBvdGhlcikgY29uc3QgeyByZXR1cm4gdGhpcyAhPSAmb3RoZXI7IH0KIAotICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmUuZ2V0KCk7IH0K
KyAgICBjb25zdCBGdW5jdGlvblNpZ25hdHVyZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5
cGUtPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOyB9CiAKIHByaXZhdGU6Ci0gICAgVGFnKGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQotICAgICAgICA6IG1fc2lnbmF0dXJlKFJlZiB7IHNpZ25h
dHVyZSB9KQorICAgIFRhZyhjb25zdCBUeXBlRGVmaW5pdGlvbiYgdHlwZSkKKyAgICAgICAgOiBt
X3R5cGUoUmVmIHsgdHlwZSB9KQogICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUuaXM8RnVuY3Rp
b25TaWduYXR1cmU+KCkpOwogICAgIH0KIAotICAgIFJlZjxjb25zdCBTaWduYXR1cmU+IG1fc2ln
bmF0dXJlOworICAgIFJlZjxjb25zdCBUeXBlRGVmaW5pdGlvbj4gbV90eXBlOwogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UeXBlRGVmaW5pdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtVHlwZURlZmluaXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NDg5MWNjMzFmN2Q1MWY5ZDVi
MmQ1OTE1YjMwMGMzMDQzMWI0YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVHlwZURlZmluaXRpb24uY3BwCkBAIC0wLDAgKzEsMjk4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9uLmgiCisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25JbmxpbmVzLmgiCisj
aW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CisKK1N0cmluZyBUeXBlRGVmaW5pdGlvbjo6dG9TdHJpbmcoKSBjb25z
dAoreworICAgIHJldHVybiBXVEY6OnRvU3RyaW5nKCp0aGlzKTsKK30KKwordm9pZCBUeXBlRGVm
aW5pdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpczxGdW5j
dGlvblNpZ25hdHVyZT4oKSkKKyAgICAgICAgcmV0dXJuIGFzPEZ1bmN0aW9uU2lnbmF0dXJlPigp
LT5kdW1wKG91dCk7CisKKyAgICBBU1NFUlQoaXM8U3RydWN0VHlwZT4oKSk7CisgICAgcmV0dXJu
IGFzPFN0cnVjdFR5cGU+KCktPmR1bXAob3V0KTsKK30KKworU3RyaW5nIEZ1bmN0aW9uU2lnbmF0
dXJlOjp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6dG9TdHJpbmcoKnRoaXMp
OworfQorCit2b2lkIEZ1bmN0aW9uU2lnbmF0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgeworICAgICAgICBvdXQucHJpbnQoIigiKTsKKyAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgICAgICBmb3IgKEZ1bmN0aW9uQXJnQ291bnQgYXJnID0gMDsgYXJnIDwg
YXJndW1lbnRDb3VudCgpOyArK2FyZykKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbWFr
ZVN0cmluZyhhcmd1bWVudFR5cGUoYXJnKS5raW5kKSk7CisgICAgICAgIG91dC5wcmludCgiKSIp
OworICAgIH0KKworICAgIHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBv
dXQucHJpbnQoIiAtPiBbIik7CisgICAgICAgIGZvciAoRnVuY3Rpb25BcmdDb3VudCByZXQgPSAw
OyByZXQgPCByZXR1cm5Db3VudCgpOyArK3JldCkKKyAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgbWFrZVN0cmluZyhyZXR1cm5UeXBlKHJldCkua2luZCkpOworICAgICAgICBvdXQucHJpbnQo
Il0iKTsKKyAgICB9Cit9CisKK1N0cmluZyBTdHJ1Y3RUeXBlOjp0b1N0cmluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdURjo6dG9TdHJpbmcoKnRoaXMpOworfQorCit2b2lkIFN0cnVjdFR5cGU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiKTsKKyAg
ICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChTdHJ1Y3RGaWVsZENvdW50IGZpZWxkSW5k
ZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRDb3VudCgpOyArK2ZpZWxkSW5kZXgpIHsKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBtYWtlU3RyaW5nKGZpZWxkKGZpZWxkSW5kZXgpLnR5cGUua2lu
ZCkpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsIGZpZWxkKGZpZWxkSW5kZXgpLm11dGFiaWxp
dHkgPyAiaW1tdXRhYmxlIiA6ICJtdXRhYmxlIik7CisgICAgfQorICAgIG91dC5wcmludCgiKSIp
OworfQorCitzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVNpZ25hdHVyZUhhc2goc2l6ZV90IHJldHVy
bkNvdW50LCBjb25zdCBUeXBlKiByZXR1cm5UeXBlcywgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IFR5cGUqIGFyZ3VtZW50VHlwZXMpCit7CisgICAgdW5zaWduZWQgYWNjdW11bGF0b3IgPSAw
eGExYmNlZGQ4dTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsg
KytpKSB7CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRv
ciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGFyZ3Vt
ZW50VHlwZXNbaV0ua2luZCkpKTsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRI
YXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8
dWludDhfdD4oYXJndW1lbnRUeXBlc1tpXS5udWxsYWJsZSkpKTsKKyAgICAgICAgYWNjdW11bGF0
b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dW5zaWduZWQ+
OjpoYXNoKGFyZ3VtZW50VHlwZXNbaV0uaW5kZXgpKTsKKyAgICB9CisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IHJldHVybkNvdW50OyArK2kpIHsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBX
VEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2go
c3RhdGljX2Nhc3Q8dWludDhfdD4ocmV0dXJuVHlwZXNbaV0ua2luZCkpKTsKKyAgICAgICAgYWNj
dW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxhdG9yLCBXVEY6OkludEhhc2g8dWlu
dDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4ocmV0dXJuVHlwZXNbaV0ubnVsbGFibGUp
KSk7CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50SGFzaChhY2N1bXVsYXRvciwg
V1RGOjpJbnRIYXNoPHVuc2lnbmVkPjo6aGFzaChyZXR1cm5UeXBlc1tpXS5pbmRleCkpOworICAg
IH0KKyAgICByZXR1cm4gYWNjdW11bGF0b3I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjb21wdXRl
U3RydWN0VHlwZUhhc2goc2l6ZV90IGZpZWxkQ291bnQsIGNvbnN0IFN0cnVjdEZpZWxkKiBmaWVs
ZHMpCit7CisgICAgdW5zaWduZWQgYWNjdW11bGF0b3IgPSAweDE1ZDI1NDY7CisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IGZpZWxkQ291bnQ7ICsraSkgeworICAgICAgICBhY2N1bXVsYXRv
ciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFzaDx1aW50OF90Pjo6
aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihmaWVsZHNbaV0udHlwZS5raW5kKSkpOworICAgICAg
ICBhY2N1bXVsYXRvciA9IFdURjo6cGFpckludEhhc2goYWNjdW11bGF0b3IsIFdURjo6SW50SGFz
aDx1aW50OF90Pjo6aGFzaChzdGF0aWNfY2FzdDx1aW50OF90PihmaWVsZHNbaV0udHlwZS5udWxs
YWJsZSkpKTsKKyAgICAgICAgYWNjdW11bGF0b3IgPSBXVEY6OnBhaXJJbnRIYXNoKGFjY3VtdWxh
dG9yLCBXVEY6OkludEhhc2g8dWludDhfdD46Omhhc2goc3RhdGljX2Nhc3Q8dWludDhfdD4oZmll
bGRzW2ldLnR5cGUuaW5kZXgpKSk7CisgICAgICAgIGFjY3VtdWxhdG9yID0gV1RGOjpwYWlySW50
SGFzaChhY2N1bXVsYXRvciwgV1RGOjpJbnRIYXNoPHVpbnQ4X3Q+OjpoYXNoKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KGZpZWxkc1tpXS5tdXRhYmlsaXR5KSkpOworICAgIH0KKyAgICByZXR1cm4gYWNj
dW11bGF0b3I7Cit9CisKK3Vuc2lnbmVkIFR5cGVEZWZpbml0aW9uOjpoYXNoKCkgY29uc3QKK3sK
KyAgICBpZiAoaXM8RnVuY3Rpb25TaWduYXR1cmU+KCkpIHsKKyAgICAgICAgY29uc3QgRnVuY3Rp
b25TaWduYXR1cmUqIHNpZ25hdHVyZSA9IGFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOworICAgICAg
ICByZXR1cm4gY29tcHV0ZVNpZ25hdHVyZUhhc2goc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpLCBz
aWduYXR1cmUtPnN0b3JhZ2UoMCksIHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpLCBzaWduYXR1
cmUtPnN0b3JhZ2Uoc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKSk7CisgICAgfQorCisgICAgQVNT
RVJUKGlzPFN0cnVjdFR5cGU+KCkpOworICAgIGNvbnN0IFN0cnVjdFR5cGUqIHN0cnVjdFR5cGUg
PSBhczxTdHJ1Y3RUeXBlPigpOworICAgIHJldHVybiBjb21wdXRlU3RydWN0VHlwZUhhc2goc3Ry
dWN0VHlwZS0+ZmllbGRDb3VudCgpLCBzdHJ1Y3RUeXBlLT5zdG9yYWdlKDApKTsKK30KKworUmVm
UHRyPFR5cGVEZWZpbml0aW9uPiBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlRnVuY3Rpb25TaWdu
YXR1cmUoRnVuY3Rpb25BcmdDb3VudCByZXR1cm5Db3VudCwgRnVuY3Rpb25BcmdDb3VudCBhcmd1
bWVudENvdW50KQoreworICAgIC8vIFdlIHVzZSBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRCBmb3Ig
dGhpcyBjbGFzcy4KKyAgICBhdXRvIHJlc3VsdCA9IHRyeUZhc3RNYWxsb2MoYWxsb2NhdGVkRnVu
Y3Rpb25TaXplKHJldHVybkNvdW50LCBhcmd1bWVudENvdW50KSk7CisgICAgdm9pZCogbWVtb3J5
ID0gbnVsbHB0cjsKKyAgICBpZiAoIXJlc3VsdC5nZXRWYWx1ZShtZW1vcnkpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBUeXBlRGVmaW5pdGlvbiogc2lnbmF0dXJlID0gbmV3IChOb3RO
dWxsLCBtZW1vcnkpIFR5cGVEZWZpbml0aW9uKHJldHVybkNvdW50LCBhcmd1bWVudENvdW50KTsK
KyAgICByZXR1cm4gYWRvcHRSZWYoc2lnbmF0dXJlKTsKK30KKworUmVmUHRyPFR5cGVEZWZpbml0
aW9uPiBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlU3RydWN0VHlwZShTdHJ1Y3RGaWVsZENvdW50
IGZpZWxkQ291bnQpCit7CisgICAgLy8gV2UgdXNlIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIGZv
ciB0aGlzIGNsYXNzLgorICAgIGF1dG8gcmVzdWx0ID0gdHJ5RmFzdE1hbGxvYyhhbGxvY2F0ZWRT
dHJ1Y3RTaXplKGZpZWxkQ291bnQpKTsKKyAgICB2b2lkKiBtZW1vcnkgPSBudWxscHRyOworICAg
IGlmICghcmVzdWx0LmdldFZhbHVlKG1lbW9yeSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIFR5cGVEZWZpbml0aW9uKiBzaWduYXR1cmUgPSBuZXcgKE5vdE51bGwsIG1lbW9yeSkgVHlw
ZURlZmluaXRpb24oZmllbGRDb3VudCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKHNpZ25hdHVyZSk7
Cit9CisKK1R5cGVJbmZvcm1hdGlvbjo6VHlwZUluZm9ybWF0aW9uKCkKK3sKKyNkZWZpbmUgTUFL
RV9USFVOS19TSUdOQVRVUkUodHlwZSwgZW5jLCBzdHIsIHZhbCwgXykgXAorICAgIGRvIHsgXAor
ICAgICAgICBpZiAoVHlwZUtpbmQ6OnR5cGUgIT0gVHlwZUtpbmQ6OlZvaWQpIHsgXAorICAgICAg
ICAgICAgUmVmUHRyPFR5cGVEZWZpbml0aW9uPiBzaWcgPSBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3Jl
YXRlRnVuY3Rpb25TaWduYXR1cmUoMSwgMCk7IFwKKyAgICAgICAgICAgIHNpZy0+cmVmKCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBzaWctPmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpLT5nZXRS
ZXR1cm5UeXBlKDApID0gVHlwZXM6OnR5cGU7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgdGh1bmtUeXBlc1tsaW5lYXJpemVUeXBlKFR5cGVLaW5kOjp0eXBlKV0gPSBzaWcuZ2V0KCk7
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG1fdHlwZVNldC5hZGQoVHlw
ZUhhc2ggeyBzaWcucmVsZWFzZU5vbk51bGwoKSB9KTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUg
KGZhbHNlKTsKKworICAgIEZPUl9FQUNIX1dBU01fVFlQRShNQUtFX1RIVU5LX1NJR05BVFVSRSk7
CisKKyAgICAvLyBNYWtlIFZvaWQgYWdhaW4gYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlIG9uZSB0
aGF0IGhhcyB2b2lkIGluIGl0LgorICAgIHsKKyAgICAgICAgUmVmUHRyPFR5cGVEZWZpbml0aW9u
PiBzaWcgPSBUeXBlRGVmaW5pdGlvbjo6dHJ5Q3JlYXRlRnVuY3Rpb25TaWduYXR1cmUoMCwgMCk7
CisgICAgICAgIHNpZy0+cmVmKCk7CisgICAgICAgIHRodW5rVHlwZXNbbGluZWFyaXplVHlwZShU
eXBlS2luZDo6Vm9pZCldID0gc2lnLmdldCgpOworICAgICAgICBtX3R5cGVTZXQuYWRkKFR5cGVI
YXNoIHsgc2lnLnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAgfQorfQorCitzdHJ1Y3QgRnVuY3Rp
b25QYXJhbWV0ZXJUeXBlcyB7CisgICAgY29uc3QgVmVjdG9yPFR5cGUsIDE+JiByZXR1cm5UeXBl
czsKKyAgICBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50VHlwZXM7CisKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBGdW5jdGlvblBhcmFtZXRlclR5cGVzJiBwYXJhbXMpCisgICAg
eworICAgICAgICByZXR1cm4gY29tcHV0ZVNpZ25hdHVyZUhhc2gocGFyYW1zLnJldHVyblR5cGVz
LnNpemUoKSwgcGFyYW1zLnJldHVyblR5cGVzLmRhdGEoKSwgcGFyYW1zLmFyZ3VtZW50VHlwZXMu
c2l6ZSgpLCBwYXJhbXMuYXJndW1lbnRUeXBlcy5kYXRhKCkpOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFR5cGVIYXNoJiBzaWcsIGNvbnN0IEZ1bmN0aW9uUGFyYW1ldGVy
VHlwZXMmIHBhcmFtcykKKyAgICB7CisgICAgICAgIGlmIChzaWcua2V5LT5pczxTdHJ1Y3RUeXBl
PigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNvbnN0IEZ1bmN0aW9u
U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBzaWcua2V5LT5hczxGdW5jdGlvblNpZ25hdHVyZT4oKTsK
KyAgICAgICAgaWYgKHNpZ25hdHVyZS0+YXJndW1lbnRDb3VudCgpICE9IHBhcmFtcy5hcmd1bWVu
dFR5cGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNp
Z25hdHVyZS0+cmV0dXJuQ291bnQoKSAhPSBwYXJhbXMucmV0dXJuVHlwZXMuc2l6ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaWduYXR1cmUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2ln
bmF0dXJlLT5hcmd1bWVudFR5cGUoaSkgIT0gcGFyYW1zLmFyZ3VtZW50VHlwZXNbaV0pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS0+cmV0dXJuQ291bnQoKTsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKGkpICE9IHBhcmFtcy5yZXR1cm5UeXBlc1tp
XSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFR5cGVIYXNoJiBl
bnRyeSwgY29uc3QgRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyYgcGFyYW1zLCB1bnNpZ25lZCkKKyAg
ICB7CisgICAgICAgIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4gc2lnbmF0dXJlID0gVHlwZURlZmlu
aXRpb246OnRyeUNyZWF0ZUZ1bmN0aW9uU2lnbmF0dXJlKHBhcmFtcy5yZXR1cm5UeXBlcy5zaXpl
KCksIHBhcmFtcy5hcmd1bWVudFR5cGVzLnNpemUoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNpZ25hdHVyZSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtcy5y
ZXR1cm5UeXBlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHNpZ25hdHVyZS0+YXM8RnVuY3Rp
b25TaWduYXR1cmU+KCktPmdldFJldHVyblR5cGUoaSkgPSBwYXJhbXMucmV0dXJuVHlwZXNbaV07
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtcy5hcmd1bWVudFR5cGVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgc2lnbmF0dXJlLT5hczxGdW5jdGlvblNpZ25hdHVy
ZT4oKS0+Z2V0QXJndW1lbnRUeXBlKGkpID0gcGFyYW1zLmFyZ3VtZW50VHlwZXNbaV07CisKKyAg
ICAgICAgZW50cnkua2V5ID0gV1RGTW92ZShzaWduYXR1cmUpOworICAgIH0KK307CisKK3N0cnVj
dCBTdHJ1Y3RQYXJhbWV0ZXJUeXBlcyB7CisgICAgY29uc3QgVmVjdG9yPFN0cnVjdEZpZWxkPiYg
ZmllbGRzOworCisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3RydWN0UGFyYW1ldGVy
VHlwZXMmIHBhcmFtcykKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlU3RydWN0VHlwZUhh
c2gocGFyYW1zLmZpZWxkcy5zaXplKCksIHBhcmFtcy5maWVsZHMuZGF0YSgpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUeXBlSGFzaCYgc2lnLCBjb25zdCBTdHJ1Y3RQ
YXJhbWV0ZXJUeXBlcyYgcGFyYW1zKQorICAgIHsKKyAgICAgICAgaWYgKHNpZy5rZXktPmlzPEZ1
bmN0aW9uU2lnbmF0dXJlPigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGNvbnN0IFN0cnVjdFR5cGUqIHN0cnVjdFR5cGUgPSBzaWcua2V5LT5hczxTdHJ1Y3RUeXBlPigp
OworICAgICAgICBpZiAoc3RydWN0VHlwZS0+ZmllbGRDb3VudCgpICE9IHBhcmFtcy5maWVsZHMu
c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdHJ1Y3RUeXBlLT5maWVsZENvdW50KCk7ICsraSkgeworICAgICAgICAg
ICAgaWYgKHN0cnVjdFR5cGUtPmZpZWxkKGkpICE9IHBhcmFtcy5maWVsZHNbaV0pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFR5cGVIYXNoJiBlbnRyeSwgY29u
c3QgU3RydWN0UGFyYW1ldGVyVHlwZXMmIHBhcmFtcywgdW5zaWduZWQpCisgICAgeworICAgICAg
ICBSZWZQdHI8VHlwZURlZmluaXRpb24+IHNpZ25hdHVyZSA9IFR5cGVEZWZpbml0aW9uOjp0cnlD
cmVhdGVTdHJ1Y3RUeXBlKHBhcmFtcy5maWVsZHMuc2l6ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc2lnbmF0dXJlKTsKKworICAgICAgICBTdHJ1Y3RUeXBlKiBzdHJ1Y3RUeXBlID0gc2ln
bmF0dXJlLT5hczxTdHJ1Y3RUeXBlPigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1zLmZpZWxkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHN0cnVjdFR5cGUtPmdl
dEZpZWxkKGkpID0gcGFyYW1zLmZpZWxkc1tpXTsKKworICAgICAgICBlbnRyeS5rZXkgPSBXVEZN
b3ZlKHNpZ25hdHVyZSk7CisgICAgfQorfTsKKworUmVmUHRyPFR5cGVEZWZpbml0aW9uPiBUeXBl
SW5mb3JtYXRpb246OnR5cGVEZWZpbml0aW9uRm9yRnVuY3Rpb24oY29uc3QgVmVjdG9yPFR5cGUs
IDE+JiByZXN1bHRzLCBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3MpCit7CisgICAgaWYgY29uc3Rl
eHByIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdHMuY29udGFpbnMo
V2FzbTo6VHlwZXM6OlZvaWQpKTsKKyAgICAgICAgQVNTRVJUKCFhcmdzLmNvbnRhaW5zKFdhc206
OlR5cGVzOjpWb2lkKSk7CisgICAgfQorICAgIFR5cGVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmds
ZXRvbigpOworICAgIExvY2tlciBsb2NrZXIgeyBpbmZvLm1fbG9jayB9OworCisgICAgYXV0byBh
ZGRSZXN1bHQgPSBpbmZvLm1fdHlwZVNldC50ZW1wbGF0ZSBhZGQ8RnVuY3Rpb25QYXJhbWV0ZXJU
eXBlcz4oRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyB7IHJlc3VsdHMsIGFyZ3MgfSk7CisgICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+a2V5OworfQorCitSZWZQdHI8VHlwZURlZmluaXRpb24+
IFR5cGVJbmZvcm1hdGlvbjo6dHlwZURlZmluaXRpb25Gb3JTdHJ1Y3QoY29uc3QgVmVjdG9yPFN0
cnVjdEZpZWxkPiYgZmllbGRzKQoreworICAgIFR5cGVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmds
ZXRvbigpOworICAgIExvY2tlciBsb2NrZXIgeyBpbmZvLm1fbG9jayB9OworCisgICAgYXV0byBh
ZGRSZXN1bHQgPSBpbmZvLm1fdHlwZVNldC50ZW1wbGF0ZSBhZGQ8U3RydWN0UGFyYW1ldGVyVHlw
ZXM+KFN0cnVjdFBhcmFtZXRlclR5cGVzIHsgZmllbGRzIH0pOworICAgIHJldHVybiBhZGRSZXN1
bHQuaXRlcmF0b3ItPmtleTsKK30KKwordm9pZCBUeXBlSW5mb3JtYXRpb246OnRyeUNsZWFudXAo
KQoreworICAgIFR5cGVJbmZvcm1hdGlvbiYgaW5mbyA9IHNpbmdsZXRvbigpOworICAgIExvY2tl
ciBsb2NrZXIgeyBpbmZvLm1fbG9jayB9OworCisgICAgaW5mby5tX3R5cGVTZXQucmVtb3ZlSWYo
WyZdIChhdXRvJiBoYXNoKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9IGhhc2gu
a2V5OworICAgICAgICByZXR1cm4gc2lnbmF0dXJlLT5yZWZDb3VudCgpID09IDE7CisgICAgfSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVHlw
ZURlZmluaXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVmaW5p
dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjJhZjM5Yzg2MWIzM2FhYzY3NTU2NTdkZDBjZjE4ZjczY2E2YjE1
MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVHlw
ZURlZmluaXRpb24uaApAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx2YXJp
YW50PgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV2FzbU9wcy5oIgor
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CituYW1lc3BhY2UgV2FzbSB7CisKK3VzaW5nIEZ1bmN0aW9uQXJnQ291bnQgPSB1aW50MzJfdDsK
K3VzaW5nIFN0cnVjdEZpZWxkQ291bnQgPSB1aW50MzJfdDsKKworY2xhc3MgRnVuY3Rpb25TaWdu
YXR1cmUgeworcHVibGljOgorICAgIEZ1bmN0aW9uU2lnbmF0dXJlKGNvbnN0IGNoYXIqIHBheWxv
YWQsIEZ1bmN0aW9uQXJnQ291bnQgYXJndW1lbnRDb3VudCwgRnVuY3Rpb25BcmdDb3VudCByZXR1
cm5Db3VudCkKKyAgICAgICAgOiBtX3BheWxvYWQocGF5bG9hZCkKKyAgICAgICAgLCBtX2FyZ0Nv
dW50KGFyZ3VtZW50Q291bnQpCisgICAgICAgICwgbV9yZXRDb3VudChyZXR1cm5Db3VudCkKKyAg
ICB7CisgICAgfQorCisgICAgRnVuY3Rpb25BcmdDb3VudCBhcmd1bWVudENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9hcmdDb3VudDsgfQorICAgIEZ1bmN0aW9uQXJnQ291bnQgcmV0dXJuQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX3JldENvdW50OyB9CisgICAgVHlwZSByZXR1cm5UeXBlKEZ1bmN0
aW9uQXJnQ291bnQgaSkgY29uc3QgeyBBU1NFUlQoaSA8IHJldHVybkNvdW50KCkpOyByZXR1cm4g
Y29uc3RfY2FzdDxGdW5jdGlvblNpZ25hdHVyZSo+KHRoaXMpLT5nZXRSZXR1cm5UeXBlKGkpOyB9
CisgICAgYm9vbCByZXR1cm5zVm9pZCgpIGNvbnN0IHsgcmV0dXJuICFyZXR1cm5Db3VudCgpOyB9
CisgICAgVHlwZSBhcmd1bWVudFR5cGUoRnVuY3Rpb25BcmdDb3VudCBpKSBjb25zdCB7IHJldHVy
biBjb25zdF9jYXN0PEZ1bmN0aW9uU2lnbmF0dXJlKj4odGhpcyktPmdldEFyZ3VtZW50VHlwZShp
KTsgfQorCisgICAgV1RGOjpTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICB2b2lkIGR1bXAo
V1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIFR5cGUmIGdldFJldHVyblR5cGUo
RnVuY3Rpb25BcmdDb3VudCBpKSB7IEFTU0VSVChpIDwgcmV0dXJuQ291bnQoKSk7IHJldHVybiAq
c3RvcmFnZShpKTsgfQorICAgIFR5cGUmIGdldEFyZ3VtZW50VHlwZShGdW5jdGlvbkFyZ0NvdW50
IGkpIHsgQVNTRVJUKGkgPCBhcmd1bWVudENvdW50KCkpOyByZXR1cm4gKnN0b3JhZ2UocmV0dXJu
Q291bnQoKSArIGkpOyB9CisKKyAgICBUeXBlKiBzdG9yYWdlKEZ1bmN0aW9uQXJnQ291bnQgaSkg
eyByZXR1cm4gaSArIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZSo+KGNvbnN0X2Nhc3Q8Y2hhcio+KG1f
cGF5bG9hZCkpOyB9CisgICAgVHlwZSogc3RvcmFnZShGdW5jdGlvbkFyZ0NvdW50IGkpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RnVuY3Rpb25TaWduYXR1cmUqPih0aGlzKS0+c3RvcmFnZShp
KTsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBUeXBlSW5mb3JtYXRpb247CisKKyAg
ICBjb25zdCBjaGFyKiBtX3BheWxvYWQ7CisgICAgRnVuY3Rpb25BcmdDb3VudCBtX2FyZ0NvdW50
OworICAgIEZ1bmN0aW9uQXJnQ291bnQgbV9yZXRDb3VudDsKK307CisKKy8vIEZJWE1FIGF1dG8t
Z2VuZXJhdGUgdGhpcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTIzMQorZW51bSBNdXRhYmlsaXR5IDogdWludDhfdCB7CisgICAgTXV0YWJsZSA9IDEsCisgICAg
SW1tdXRhYmxlID0gMAorfTsKKworc3RydWN0IFN0cnVjdEZpZWxkIHsKKyAgICBUeXBlIHR5cGU7
CisgICAgTXV0YWJpbGl0eSBtdXRhYmlsaXR5OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFN0cnVjdEZpZWxkJiByaHMpIGNvbnN0IHsgcmV0dXJuIHR5cGUgPT0gcmhzLnR5cGUgJiYgbXV0
YWJpbGl0eSA9PSByaHMubXV0YWJpbGl0eTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBT
dHJ1Y3RGaWVsZCYgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHJocyk7IH0KK307CisK
K2NsYXNzIFN0cnVjdFR5cGUgeworcHVibGljOgorICAgIFN0cnVjdFR5cGUoY29uc3QgY2hhciog
cGF5bG9hZCwgU3RydWN0RmllbGRDb3VudCBmaWVsZENvdW50KQorICAgICAgICA6IG1fcGF5bG9h
ZChwYXlsb2FkKQorICAgICAgICAsIG1fZmllbGRDb3VudChmaWVsZENvdW50KQorICAgIHsKKyAg
ICB9CisKKyAgICBTdHJ1Y3RGaWVsZENvdW50IGZpZWxkQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X2ZpZWxkQ291bnQ7IH0KKyAgICBTdHJ1Y3RGaWVsZCBmaWVsZChTdHJ1Y3RGaWVsZENvdW50IGkp
IGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RydWN0VHlwZSo+KHRoaXMpLT5nZXRGaWVsZChp
KTsgfQorCisgICAgV1RGOjpTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICB2b2lkIGR1bXAo
V1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIFN0cnVjdEZpZWxkJiBnZXRGaWVs
ZChTdHJ1Y3RGaWVsZENvdW50IGkpIHsgQVNTRVJUKGkgPCBmaWVsZENvdW50KCkpOyByZXR1cm4g
KnN0b3JhZ2UoaSk7IH0KKyAgICBTdHJ1Y3RGaWVsZCogc3RvcmFnZShTdHJ1Y3RGaWVsZENvdW50
IGkpIHsgcmV0dXJuIGkgKyByZWludGVycHJldF9jYXN0PFN0cnVjdEZpZWxkKj4oY29uc3RfY2Fz
dDxjaGFyKj4obV9wYXlsb2FkKSk7IH0KKyAgICBTdHJ1Y3RGaWVsZCogc3RvcmFnZShTdHJ1Y3RG
aWVsZENvdW50IGkpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8U3RydWN0VHlwZSo+KHRoaXMp
LT5zdG9yYWdlKGkpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgY2hhciogbV9wYXlsb2FkOwor
ICAgIFN0cnVjdEZpZWxkQ291bnQgbV9maWVsZENvdW50OworfTsKKworY2xhc3MgVHlwZURlZmlu
aXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VHlwZURlZmluaXRpb24+IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworICAgIFR5cGVEZWZpbml0aW9uKCkgPSBkZWxl
dGU7CisgICAgVHlwZURlZmluaXRpb24oY29uc3QgVHlwZURlZmluaXRpb24mKSA9IGRlbGV0ZTsK
KworICAgIFR5cGVEZWZpbml0aW9uKEZ1bmN0aW9uQXJnQ291bnQgcmV0Q291bnQsIEZ1bmN0aW9u
QXJnQ291bnQgYXJnQ291bnQpCisgICAgICAgIDogbV90eXBlSGVhZGVyIHsgRnVuY3Rpb25TaWdu
YXR1cmUgeyBwYXlsb2FkKCksIGFyZ0NvdW50LCByZXRDb3VudCB9IH0KKyAgICB7CisgICAgfQor
CisgICAgVHlwZURlZmluaXRpb24oU3RydWN0RmllbGRDb3VudCBmaWVsZENvdW50KQorICAgICAg
ICA6IG1fdHlwZUhlYWRlciB7IFN0cnVjdFR5cGUgeyBwYXlsb2FkKCksIGZpZWxkQ291bnQgfSB9
CisgICAgeworICAgIH0KKworICAgIGNoYXIqIHBheWxvYWQoKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPih0aGlzKSArIHNpemVvZihUeXBlRGVmaW5pdGlvbik7IH0KKyAgICBzdGF0
aWMgc2l6ZV90IGFsbG9jYXRlZEZ1bmN0aW9uU2l6ZShDaGVja2VkPEZ1bmN0aW9uQXJnQ291bnQ+
IHJldENvdW50LCBDaGVja2VkPEZ1bmN0aW9uQXJnQ291bnQ+IGFyZ0NvdW50KSB7IHJldHVybiBz
aXplb2YoVHlwZURlZmluaXRpb24pICsgKHJldENvdW50ICsgYXJnQ291bnQpICogc2l6ZW9mKFR5
cGUpOyB9CisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0ZWRTdHJ1Y3RTaXplKENoZWNrZWQ8U3Ry
dWN0RmllbGRDb3VudD4gZmllbGRDb3VudCkgeyByZXR1cm4gc2l6ZW9mKFR5cGVEZWZpbml0aW9u
KSArIGZpZWxkQ291bnQgKiBzaXplb2YoU3RydWN0RmllbGQpOyB9CisKK3B1YmxpYzoKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIGlzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxUPihtX3R5cGVIZWFkZXIpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICBUKiBhcygpIHsgQVNTRVJUKGlzPFQ+KCkpOyByZXR1cm4gc3RkOjpnZXRf
aWY8VD4oJm1fdHlwZUhlYWRlcik7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAg
IGNvbnN0IFQqIGFzKCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxUeXBlRGVmaW5pdGlvbio+
KHRoaXMpLT5hczxUPigpOyB9CisKKyAgICBUeXBlSW5kZXggaW5kZXgoKSBjb25zdCB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8VHlwZUluZGV4Pih0aGlzKTsgfQorCisgICAgV1RGOjpTdHJpbmcgdG9T
dHJpbmcoKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25z
dDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHlwZURlZmluaXRpb24mIHJocykgY29uc3Qg
eyByZXR1cm4gdGhpcyA9PSAmcmhzOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworCisg
ICAgLy8gVHlwZSBkZWZpbml0aW9ucyBhcmUgdW5pcXVlZCBhbmQsIGZvciBjYWxsX2luZGlyZWN0
LCB2YWxpZGF0ZWQgYXQgcnVudGltZS4gVGFibGVzIGNhbiBjcmVhdGUgaW52YWxpZCBUeXBlSW5k
ZXggdmFsdWVzIHdoaWNoIGNhdXNlIGNhbGxfaW5kaXJlY3QgdG8gZmFpbC4gV2UgdXNlIDAgYXMg
dGhlIGludmFsaWRJbmRleCBzbyB0aGF0IHRoZSBjb2RlZ2VuIGNhbiBlYXNpbHkgdGVzdCBmb3Ig
aXQgYW5kIHRyYXAsIGFuZCB3ZSBhZGQgYSB0b2tlbiBpbnZhbGlkIGVudHJ5IGluIFR5cGVJbmZv
cm1hdGlvbi4KKyAgICBzdGF0aWMgY29uc3QgY29uc3RleHByIFR5cGVJbmRleCBpbnZhbGlkSW5k
ZXggPSAwOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBUeXBlSW5mb3JtYXRpb247Cisg
ICAgZnJpZW5kIHN0cnVjdCBGdW5jdGlvblBhcmFtZXRlclR5cGVzOworICAgIGZyaWVuZCBzdHJ1
Y3QgU3RydWN0UGFyYW1ldGVyVHlwZXM7CisKKyAgICBzdGF0aWMgUmVmUHRyPFR5cGVEZWZpbml0
aW9uPiB0cnlDcmVhdGVGdW5jdGlvblNpZ25hdHVyZShGdW5jdGlvbkFyZ0NvdW50IHJldHVybkNv
dW50LCBGdW5jdGlvbkFyZ0NvdW50IGFyZ3VtZW50Q291bnQpOworICAgIHN0YXRpYyBSZWZQdHI8
VHlwZURlZmluaXRpb24+IHRyeUNyZWF0ZVN0cnVjdFR5cGUoU3RydWN0RmllbGRDb3VudCk7CisK
KyAgICBzdGQ6OnZhcmlhbnQ8RnVuY3Rpb25TaWduYXR1cmUsIFN0cnVjdFR5cGU+IG1fdHlwZUhl
YWRlcjsKKyAgICAvLyBQYXlsb2FkIGlzIHN0b3JlZCBoZXJlLgorfTsKKworc3RydWN0IFR5cGVI
YXNoIHsKKyAgICBSZWZQdHI8VHlwZURlZmluaXRpb24+IGtleSB7IG51bGxwdHIgfTsKKyAgICBU
eXBlSGFzaCgpID0gZGVmYXVsdDsKKyAgICBleHBsaWNpdCBUeXBlSGFzaChSZWY8VHlwZURlZmlu
aXRpb24+JiYga2V5KQorICAgICAgICA6IGtleShXVEZNb3ZlKGtleSkpCisgICAgeyB9CisgICAg
ZXhwbGljaXQgVHlwZUhhc2goV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAg
ICA6IGtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7IH0KKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVHlwZUhhc2gmIHJocykgY29uc3QgeyByZXR1cm4gZXF1YWwoKnRoaXMs
IHJocyk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUeXBlSGFzaCYgbGhzLCBjb25z
dCBUeXBlSGFzaCYgcmhzKSB7IHJldHVybiBsaHMua2V5ID09IHJocy5rZXk7IH0KKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBUeXBlSGFzaCYgdHlwZUhhc2gpIHsgcmV0dXJuIHR5cGVI
YXNoLmtleSA/IHR5cGVIYXNoLmtleS0+aGFzaCgpIDogMDsgfQorICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBrZXkuaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKTsgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNo
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpXYXNtOjpUeXBlSGFzaD4gOiBK
U0M6Oldhc206OlR5cGVIYXNoIHsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhh
c2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6V2FzbTo6VHlwZUhh
c2g+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6V2FzbTo6VHlwZUhhc2g+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCisv
LyBUeXBlIGluZm9ybWF0aW9uIGlzIGhlbGQgZ2xvYmFsbHkgYW5kIHNoYXJlZCBieSB0aGUgZW50
aXJlIHByb2Nlc3MgdG8gYWxsb3cgYWxsIHR5cGUgZGVmaW5pdGlvbnMgdG8gYmUgdW5pcXVlLiBU
aGlzIGlzIHJlcXVpcmVkIHdoZW4gd2FzbSBjYWxscyBhbm90aGVyIHdhc20gaW5zdGFuY2UsIGFu
ZCBtdXN0IHdvcmsgd2hlbiBtb2R1bGVzIGFyZSBzaGFyZWQgYmV0d2VlbiBtdWx0aXBsZSBWTXMu
CitjbGFzcyBUeXBlSW5mb3JtYXRpb24geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFR5cGVJ
bmZvcm1hdGlvbik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyAgICBUeXBlSW5m
b3JtYXRpb24oKTsKKworcHVibGljOgorICAgIHN0YXRpYyBUeXBlSW5mb3JtYXRpb24mIHNpbmds
ZXRvbigpOworCisgICAgc3RhdGljIFJlZlB0cjxUeXBlRGVmaW5pdGlvbj4gdHlwZURlZmluaXRp
b25Gb3JGdW5jdGlvbihjb25zdCBWZWN0b3I8VHlwZSwgMT4mIHJldHVyblR5cGVzLCBjb25zdCBW
ZWN0b3I8VHlwZT4mIGFyZ3VtZW50VHlwZXMpOworICAgIHN0YXRpYyBSZWZQdHI8VHlwZURlZmlu
aXRpb24+IHR5cGVEZWZpbml0aW9uRm9yU3RydWN0KGNvbnN0IFZlY3RvcjxTdHJ1Y3RGaWVsZD4m
IGZpZWxkcyk7CisgICAgQUxXQVlTX0lOTElORSBjb25zdCBUeXBlRGVmaW5pdGlvbiogdGh1bmtG
b3IoVHlwZSB0eXBlKSBjb25zdCB7IHJldHVybiB0aHVua1R5cGVzW2xpbmVhcml6ZVR5cGUodHlw
ZS5raW5kKV07IH0KKworICAgIHN0YXRpYyBjb25zdCBUeXBlRGVmaW5pdGlvbiYgZ2V0KFR5cGVJ
bmRleCk7CisgICAgc3RhdGljIFR5cGVJbmRleCBnZXQoY29uc3QgVHlwZURlZmluaXRpb24mKTsK
KworICAgIHN0YXRpYyBUeXBlSW5kZXggZ2V0KGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlJik7Cisg
ICAgc3RhdGljIGNvbnN0IEZ1bmN0aW9uU2lnbmF0dXJlJiBnZXRGdW5jdGlvblNpZ25hdHVyZShU
eXBlSW5kZXgpOworCisgICAgc3RhdGljIHZvaWQgdHJ5Q2xlYW51cCgpOworcHJpdmF0ZToKKyAg
ICBIYXNoU2V0PFdhc206OlR5cGVIYXNoPiBtX3R5cGVTZXQ7CisgICAgY29uc3QgVHlwZURlZmlu
aXRpb24qIHRodW5rVHlwZXNbbnVtVHlwZXNdOworICAgIExvY2sgbV9sb2NrOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVmaW5pdGlv
bklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UeXBlRGVmaW5pdGlv
bklubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MGU3NmE0ZDFlZWFiNzY2MTIxNDBmOTY3YThjZmExYTIw
ZWY0Y2I0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVR5cGVEZWZpbml0aW9uSW5saW5lcy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8eXVzdWtlc3V6dWtpQHNsb3dzdGFydC5vcmc+
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldhc21UeXBlRGVmaW5p
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworCitpbmxpbmUgVHlw
ZUluZm9ybWF0aW9uJiBUeXBlSW5mb3JtYXRpb246OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGlj
IFR5cGVJbmZvcm1hdGlvbiogdGhlT25lOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyB0eXBl
SW5mb3JtYXRpb25GbGFnOworCisgICAgc3RkOjpjYWxsX29uY2UodHlwZUluZm9ybWF0aW9uRmxh
ZywgW10gKCkgeworICAgICAgICB0aGVPbmUgPSBuZXcgVHlwZUluZm9ybWF0aW9uOworICAgIH0p
OworICAgIHJldHVybiAqdGhlT25lOworfQorCitpbmxpbmUgY29uc3QgVHlwZURlZmluaXRpb24m
IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KFR5cGVJbmRleCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5k
ZXggIT0gVHlwZURlZmluaXRpb246OmludmFsaWRJbmRleCk7CisgICAgcmV0dXJuICpiaXR3aXNl
X2Nhc3Q8Y29uc3QgVHlwZURlZmluaXRpb24qPihpbmRleCk7Cit9CisKK2lubGluZSBjb25zdCBG
dW5jdGlvblNpZ25hdHVyZSYgVHlwZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVyZShU
eXBlSW5kZXggaW5kZXgpCit7CisgICAgcmV0dXJuICpnZXQoaW5kZXgpLmFzPEZ1bmN0aW9uU2ln
bmF0dXJlPigpOworfQorCitpbmxpbmUgVHlwZUluZGV4IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KGNv
bnN0IFR5cGVEZWZpbml0aW9uJiB0eXBlKQoreworICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewor
ICAgICAgICBUeXBlSW5mb3JtYXRpb24mIGluZm8gPSBzaW5nbGV0b24oKTsKKyAgICAgICAgTG9j
a2VyIGxvY2tlciB7IGluZm8ubV9sb2NrIH07CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5mbywg
aW5mby5tX3R5cGVTZXQuY29udGFpbnMoVHlwZUhhc2ggeyBjb25zdF9jYXN0PFR5cGVEZWZpbml0
aW9uJj4odHlwZSkgfSkpOworICAgIH0KKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PFR5cGVJbmRl
eD4oJnR5cGUpOworfQorCitpbmxpbmUgVHlwZUluZGV4IFR5cGVJbmZvcm1hdGlvbjo6Z2V0KGNv
bnN0IEZ1bmN0aW9uU2lnbmF0dXJlJiBmdW5jdGlvblR5cGUpCit7CisgICAgcmV0dXJuIGdldCgq
cmVpbnRlcnByZXRfY2FzdDxUeXBlRGVmaW5pdGlvbio+KGNvbnN0X2Nhc3Q8Y2hhcio+KGZ1bmN0
aW9uVHlwZS5tX3BheWxvYWQpIC0gc2l6ZW9mKFR5cGVEZWZpbml0aW9uKSkpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vZ2VuZXJhdGVXYXNtT3BzSGVhZGVy
LnB5CmluZGV4IDY1NzZhNjljNTY4MzUzYWI2NzdiOGUxYjRjODQxNDZhNzRjMDM1ZmYuLjg2YTVj
YmZlN2MzMzMxYmExYzk1MzE3NGY2YzU4YWJlZWI4YzdhZDkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2dlbmVyYXRlV2FzbU9wc0hlYWRlci5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9nZW5lcmF0ZVdhc21PcHNIZWFkZXIucHkKQEAgLTIxOCwxMiAr
MjE4LDEyIEBAIGVudW0gY2xhc3MgTnVsbGFibGUgOiBib29sIHsKICAgWWVzID0gdHJ1ZSwKIH07
CiAKLXVzaW5nIFNpZ25hdHVyZUluZGV4ID0gdWludHB0cl90OwordXNpbmcgVHlwZUluZGV4ID0g
dWludHB0cl90OwogCiBzdHJ1Y3QgVHlwZSB7CiAgICAgVHlwZUtpbmQga2luZDsKICAgICBOdWxs
YWJsZSBudWxsYWJsZTsKLSAgICBTaWduYXR1cmVJbmRleCBpbmRleDsKKyAgICBUeXBlSW5kZXgg
aW5kZXg7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHlwZSYgb3RoZXIpIGNvbnN0CiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCmluZGV4IDFm
NDY0ZmU5OGJhZDgzNDQwNGQxMTAxODlkZGNmOGYyNTQ0M2JkM2EuLjRmNDU1Y2M0N2EwNDg2ZjVj
OTVlNGE2YzQwNTVjZDBjODUyMzgzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1RvV2FzbS5jcHAKQEAgLTM4LDggKzM4LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIAotdm9pZCBtYXJzaGFsbEpTUmVzdWx0KENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgQ2FsbEluZm9ybWF0aW9uJiB3YXNtRnJh
bWVDb252ZW50aW9uLCBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgc2F2ZWRSZXN1bHRSZWdp
c3RlcnMpCit2b2lkIG1hcnNoYWxsSlNSZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFR5
cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbiwgY29uc3QgQ2FsbEluZm9ybWF0aW9uJiB3YXNt
RnJhbWVDb252ZW50aW9uLCBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgc2F2ZWRSZXN1bHRS
ZWdpc3RlcnMpCiB7CisgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gKnR5cGVEZWZpbml0aW9u
LmFzPEZ1bmN0aW9uU2lnbmF0dXJlPigpOwogICAgIGF1dG8gYm94V2FzbVJlc3VsdCA9IFtdKEND
YWxsSGVscGVycyYgaml0LCBUeXBlIHR5cGUsIFJlZyBzcmMsIEpTVmFsdWVSZWdzIGRzdCkgewog
ICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCkgewogICAgICAgICBjYXNlIFR5cGVLaW5kOjpWb2lk
OgpAQCAtMTY0LDEyICsxNjUsMTIgQEAgdm9pZCBtYXJzaGFsbEpTUmVzdWx0KENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgY29uc3QgQ2FsbEkKICAgICAgICAg
ICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZSh3YXNtQ29udGV4dEluc3RhbmNlR1BSKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRp
b25BbGxvY2F0ZVJlc3VsdHNBcnJheSk+KHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigmc2lnbmF0dXJlKSwgaW5kZXhpbmdUeXBlLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5KT4od2FzbUNvbnRleHRJbnN0YW5j
ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ0eXBlRGVmaW5pdGlvbiksIGluZGV4
aW5nVHlwZSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGpp
dC5jYWxsT3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQWxs
b2NhdGVSZXN1bHRzQXJyYXkpKTsKICAgICB9CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5h
bEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgTWVt
b3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQorc3RkOjp1bmlxdWVfcHRyPElu
dGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgVHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4qIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLCBjb25zdCBNb2R1bGVJbmZvcm1h
dGlvbiYgaW5mbywgTWVtb3J5TW9kZSBtb2RlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQogewog
ICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxJbnRlcm5hbEZ1bmN0aW9uPigpOwogICAgIGpp
dC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwpAQCAtMTk3LDcgKzE5OCw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0CiAgICAgcmVzdWx0LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMg
PSByZWdpc3RlcnNUb1NwaWxsOwogCiAgICAgc2l6ZV90IHRvdGFsRnJhbWVTaXplID0gcmVnaXN0
ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpOwotICAgIENhbGxJbmZvcm1h
dGlvbiB3YXNtRnJhbWVDb252ZW50aW9uID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbElu
Zm9ybWF0aW9uRm9yKHNpZ25hdHVyZSk7CisgICAgQ2FsbEluZm9ybWF0aW9uIHdhc21GcmFtZUNv
bnZlbnRpb24gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IodHlw
ZURlZmluaXRpb24pOwogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHNhdmVkUmVzdWx0UmVnaXN0
ZXJzID0gd2FzbUZyYW1lQ29udmVudGlvbi5jb21wdXRlUmVzdWx0c09mZnNldExpc3QoKTsKICAg
ICB0b3RhbEZyYW1lU2l6ZSArPSB3YXNtRnJhbWVDb252ZW50aW9uLmhlYWRlckFuZEFyZ3VtZW50
U3RhY2tTaXplSW5CeXRlczsKICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzYXZlZFJlc3VsdFJlZ2lz
dGVycy5zaXplKCkgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpOwpAQCAtMjE4LDcgKzIxOSw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0CiAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VHUFIg
PSBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyOwogCiAgICAgewotICAgICAg
ICBDYWxsSW5mb3JtYXRpb24ganNGcmFtZUNvbnZlbnRpb24gPSBqc0NhbGxpbmdDb252ZW50aW9u
KCkuY2FsbEluZm9ybWF0aW9uRm9yKHNpZ25hdHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7CisgICAg
ICAgIENhbGxJbmZvcm1hdGlvbiBqc0ZyYW1lQ29udmVudGlvbiA9IGpzQ2FsbGluZ0NvbnZlbnRp
b24oKS5jYWxsSW5mb3JtYXRpb25Gb3IodHlwZURlZmluaXRpb24sIENhbGxSb2xlOjpDYWxsZWUp
OwogCiAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVs
cGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIDApOwog
CkBAIC0yMzEsMTAgKzIzMiwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4g
Y3JlYXRlSlNUb1dhc21XcmFwcGVyKENDYWxsSGVscGVycyYgaml0LCBjb25zdAogICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0SW5zdGFuY2VH
UFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSwgd2FzbUNvbnRl
eHRJbnN0YW5jZUdQUik7CiAgICAgICAgIH0KIAorICAgICAgICBjb25zdCBhdXRvJiBzaWduYXR1
cmUgPSAqdHlwZURlZmluaXRpb24uYXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGpzRnJhbWVDb252ZW50aW9uLnBhcmFtc1tpXS5p
c1N0YWNrKCkpOwogCi0gICAgICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnQo
aSk7CisgICAgICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpOwog
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGpzUGFyYW0oR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIGpzRnJhbWVDb252ZW50aW9uLnBhcmFtc1tpXS5vZmZzZXRGcm9tRlAoKSk7
CiAgICAgICAgICAgICBpZiAod2FzbUZyYW1lQ29udmVudGlvbi5wYXJhbXNbaV0uaXNTdGFja0Fy
Z3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodHlwZS5pc0kzMigpIHx8IHR5cGUuaXNG
MzIoKSkgewpAQCAtMjgyLDcgKzI4NCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0CiAgICAg
ICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLT5hcHBlbmQoeyBsaW5rQnVmZmVyLmxvY2F0aW9u
T2ZOZWFyQ2FsbDxXYXNtRW50cnlQdHJUYWc+KGNhbGwpLCBmdW5jdGlvbkluZGV4U3BhY2UgfSk7
CiAgICAgfSk7CiAKLSAgICBtYXJzaGFsbEpTUmVzdWx0KGppdCwgc2lnbmF0dXJlLCB3YXNtRnJh
bWVDb252ZW50aW9uLCBzYXZlZFJlc3VsdFJlZ2lzdGVycyk7CisgICAgbWFyc2hhbGxKU1Jlc3Vs
dChqaXQsIHR5cGVEZWZpbml0aW9uLCB3YXNtRnJhbWVDb252ZW50aW9uLCBzYXZlZFJlc3VsdFJl
Z2lzdGVycyk7CiAKICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0
IDogcmVnaXN0ZXJzVG9TcGlsbCkgewogICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQu
cmVnKCkuZ3ByKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uaAppbmRl
eCBlZDY0ZWM5ZDAxMDA1YjQ1ZDcwM2E2MDE1YWJlODc1ZjQ1NzM5YTQ5Li42YzZlYjJjNDEyNDdi
MDU0MWIyZGY3MzBiODBkOGJlZWJmNTQzOWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1RvV2FzbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtLmgKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXYXNtRm9ybWF0Lmgi
CiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlv
bi5oIgotI2luY2x1ZGUgIldhc21TaWduYXR1cmUuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmlu
aXRpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTQzLDggKzQzLDggQEAgbmFtZXNwYWNlIFdhc20gewogCiBzdHJ1Y3QgQ2FsbEluZm9ybWF0aW9u
OwogCi12b2lkIG1hcnNoYWxsSlNSZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFNpZ25h
dHVyZSYsIGNvbnN0IENhbGxJbmZvcm1hdGlvbiYgd2FzbUZyYW1lQ29udmVudGlvbiwgY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldExpc3QmIHNhdmVkUmVzdWx0UmVnaXN0ZXJzKTsKLXN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJz
JiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KiwgY29u
c3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
KTsKK3ZvaWQgbWFyc2hhbGxKU1Jlc3VsdChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgVHlwZURl
ZmluaXRpb24mLCBjb25zdCBDYWxsSW5mb3JtYXRpb24mIHdhc21GcmFtZUNvbnZlbnRpb24sIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBzYXZlZFJlc3VsdFJlZ2lzdGVycyk7CitzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENDYWxsSGVs
cGVycyYsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+KiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBNZW1vcnlNb2RlLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUV4Y2VwdGlvbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNw
cAppbmRleCAwMmY4YmIwZDhjYzVkODQ2YWFhZTBkMTkxYjNhMzUwMTQyODVjZWJkLi4yNmE3N2U1
NjgxNWY4YWY0ZDI4MWZjMjVlMDVmZmY4MjM1YzZiMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmNwcApAQCAt
NTgsOSArNTgsOSBAQCB2b2lkIEpTV2ViQXNzZW1ibHlFeGNlcHRpb246OnZpc2l0Q2hpbGRyZW5J
bXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwogCiAgICAgYXV0byogZXhjZXB0aW9uID0ganNDYXN0PEpTV2Vi
QXNzZW1ibHlFeGNlcHRpb24qPihjZWxsKTsKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNp
Z25hdHVyZSA9IGV4Y2VwdGlvbi0+dGFnKCkuc2lnbmF0dXJlKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7ICsraSkgewotICAgICAgICBp
ZiAoaXNSZWZUeXBlKHNpZ25hdHVyZS5hcmd1bWVudChpKSkpCisgICAgY29uc3QgYXV0byYgdGFn
VHlwZSA9IGV4Y2VwdGlvbi0+dGFnKCkudHlwZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0YWdUeXBlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChpc1JlZlR5
cGUodGFnVHlwZS5hcmd1bWVudFR5cGUoaSkpKQogICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQo
Yml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPj4oZXhjZXB0aW9uLT5wYXlsb2FkKClb
aV0pKTsKICAgICB9CiB9CkBAIC03NCw5ICs3NCw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAKIEpTVmFsdWUgSlNXZWJBc3NlbWJseUV4Y2Vw
dGlvbjo6Z2V0QXJnKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpIGNv
bnN0CiB7Ci0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSB0YWcoKS5zaWdu
YXR1cmUoKTsKLSAgICBBU1NFUlQoaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOwotICAg
IHJldHVybiB0b0pTVmFsdWUoZ2xvYmFsT2JqZWN0LCBzaWduYXR1cmUuYXJndW1lbnQoaSksIHBh
eWxvYWQoKVtpXSk7CisgICAgQVNTRVJUKGkgPCB0YWcoKS50eXBlKCkuYXJndW1lbnRDb3VudCgp
KTsKKyAgICByZXR1cm4gdG9KU1ZhbHVlKGdsb2JhbE9iamVjdCwgdGFnKCkudHlwZSgpLmFyZ3Vt
ZW50VHlwZShpKSwgcGF5bG9hZCgpW2ldKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5R2xvYmFs
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwu
Y3BwCmluZGV4IGI4NTJiNzFjY2JmZGY1ZGVmYmVjYjFlZjJhYmZlMDYwMzRkOTU3YTAuLmI1ZWIw
ZTIzMGMxNjM4OTI5YjI2ZWMyMjZjNjQxMjAyOGVlY2ZlNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlHbG9iYWwuY3BwCkBAIC04OCw3
ICs4OCw3IEBAIEpTT2JqZWN0KiBKU1dlYkFzc2VtYmx5R2xvYmFsOjp0eXBlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAy
KTsKIAotICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAibXV0YWJsZSJfcyksIGpzQm9vbGVhbihtX2dsb2JhbC0+bXV0YWJpbGl0eSgpID09IFdhc206
Okdsb2JhbEluZm9ybWF0aW9uOjpNdXRhYmxlKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtdXRhYmxlIl9zKSwganNCb29sZWFuKG1fZ2xv
YmFsLT5tdXRhYmlsaXR5KCkgPT0gV2FzbTo6TXV0YWJsZSkpOwogCiAgICAgV2FzbTo6VHlwZSB2
YWx1ZVR5cGUgPSBtX2dsb2JhbC0+dHlwZSgpOwogICAgIEpTU3RyaW5nKiB2YWx1ZVN0cmluZyA9
IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJB
c3NlbWJseUhlbHBlcnMuaAppbmRleCA4N2U1MGI0NTM1ZmU0NTEzYzgyZGJhZDdmMTMzZjIwZmRl
ODAwMjlhLi5iMGJlMmRlYTllODIwNzU5YjU4ZGFhOWRlMzk2NDRkNTMyMjM0YzAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SGVscGVycy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTE5OCw4ICsxOTgsOCBAQCBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGZyb21KU1ZhbHVl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdhc206OlR5cAogICAgICAgICAg
ICAgaWYgKCFpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKHZtLCB2YWx1ZSwgd2FzbUZ1bmN0aW9u
LCB3YXNtV3JhcHBlckZ1bmN0aW9uKSAmJiAoIXR5cGUuaXNOdWxsYWJsZSgpIHx8ICF2YWx1ZS5p
c051bGwoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FeGNlcHRpb24oZ2xvYmFs
T2JqZWN0LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmpl
Y3QsIHZtLCAiRnVuY3JlZiBtdXN0IGJlIGFuIGV4cG9ydGVkIHdhc20gZnVuY3Rpb24iX3MpKTsK
ICAgICAgICAgICAgIGlmIChpc1JlZldpdGhUeXBlSW5kZXgodHlwZSkgJiYgIXZhbHVlLmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9
IHR5cGUuaW5kZXg7Ci0gICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggYXJnSW5k
ZXggPSB3YXNtRnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCkgOiB3YXNt
V3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgIFdhc206
OlR5cGVJbmRleCBwYXJhbUluZGV4ID0gdHlwZS5pbmRleDsKKyAgICAgICAgICAgICAgICBXYXNt
OjpUeXBlSW5kZXggYXJnSW5kZXggPSB3YXNtRnVuY3Rpb24gPyB3YXNtRnVuY3Rpb24tPnR5cGVJ
bmRleCgpIDogd2FzbVdyYXBwZXJGdW5jdGlvbi0+dHlwZUluZGV4KCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHBhcmFtSW5kZXggIT0gYXJnSW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUpTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBu
b3QgbWF0Y2ggdGhlIHJlZmVyZW5jZSB0eXBlIl9zKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3Bw
CmluZGV4IGJjNDRhMTJhNmUwMDM3MzM2Mjg3MGMzMzc4ODFkM2E5ZjJlMTBiOTguLjcyYzZjNGQy
OTI1MDhjNGJjOGZiMmFkOGY5MzJlODI4MzA0ZjAxYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCkBAIC0xMDAsNyAr
MTAwLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAg
IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjZWxsKS0+SlNXZWJBc3NlbWJseU1v
ZHVsZTo6fkpTV2ViQXNzZW1ibHlNb2R1bGUoKTsKLSAgICBXYXNtOjpTaWduYXR1cmVJbmZvcm1h
dGlvbjo6dHJ5Q2xlYW51cCgpOworICAgIFdhc206OlR5cGVJbmZvcm1hdGlvbjo6dHJ5Q2xlYW51
cCgpOwogfQogCiBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgSlNXZWJBc3NlbWJseU1v
ZHVsZTo6bW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdApAQCAtMTEzLDkgKzExMyw5IEBAIFN5bWJv
bFRhYmxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpleHBvcnRTeW1ib2xUYWJsZSgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fZXhwb3J0U3ltYm9sVGFibGUuZ2V0KCk7CiB9CiAKLVdhc206OlNpZ25hdHVy
ZUluZGV4IEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0CitXYXNtOjpUeXBlSW5k
ZXggSlNXZWJBc3NlbWJseU1vZHVsZTo6dHlwZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1
bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbW9kdWxl
LT5zaWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleFNwYWNl
KTsKKyAgICByZXR1cm4gbV9tb2R1bGUtPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
ZnVuY3Rpb25JbmRleFNwYWNlKTsKIH0KIAogV2FzbTo6TW9kdWxlJiBKU1dlYkFzc2VtYmx5TW9k
dWxlOjptb2R1bGUoKQpAQCAtMTU0LDggKzE1NCw4IEBAIEV4cGVjdGVkPHZvaWQsIFdhc206OkJp
bmRpbmdGYWlsdXJlPiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpnZW5lcmF0ZVdhc21Ub0pTU3R1YnMo
CiAgICAgICAgIEJhZzxPcHRpbWl6aW5nQ2FsbExpbmtJbmZvPiBjYWxsTGlua0luZm9zOwogICAg
ICAgICBGaXhlZFZlY3RvcjxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPj4g
c3R1YnMobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbXBvcnRJbmRleCA9IDA7IGltcG9ydEluZGV4IDwgbW9kdWxlSW5mb3Jt
YXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpOyArK2ltcG9ydEluZGV4KSB7Ci0gICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZUluZm9ybWF0aW9u
LmltcG9ydEZ1bmN0aW9uU2lnbmF0dXJlSW5kaWNlcy5hdChpbXBvcnRJbmRleCk7Ci0gICAgICAg
ICAgICBhdXRvIGJpbmRpbmcgPSBXYXNtOjp3YXNtVG9KUyh2bSwgY2FsbExpbmtJbmZvcywgc2ln
bmF0dXJlSW5kZXgsIGltcG9ydEluZGV4KTsKKyAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCB0
eXBlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzLmF0
KGltcG9ydEluZGV4KTsKKyAgICAgICAgICAgIGF1dG8gYmluZGluZyA9IFdhc206Ondhc21Ub0pT
KHZtLCBjYWxsTGlua0luZm9zLCB0eXBlSW5kZXgsIGltcG9ydEluZGV4KTsKICAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghYmluZGluZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGJpbmRpbmcuZXJyb3IoKSk7CiAgICAgICAgICAgICBzdHVic1tpbXBvcnRJbmRleF0g
PSBiaW5kaW5nLnZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKaW5kZXggYmQ1MWFiZWFiMGIxZDUxMjYxMGVhMTgyMWUy
MzFjMTk5NzU2Nzg2Ny4uMTY4YmI5YzE4ZmI0ODQyMjQyYzQxN2ZjNDI0ZmQ2NzMzZGUyNDU1NiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlN
b2R1bGUuaApAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBXYXNtOjpNb2R1
bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25zdDsKICAgICBTeW1ib2xUYWJs
ZSogZXhwb3J0U3ltYm9sVGFibGUoKSBjb25zdDsKLSAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UodW5zaWduZWQgZnVuY3Rpb25JbmRl
eFNwYWNlKSBjb25zdDsKKyAgICBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4RnJvbUZ1bmN0aW9u
SW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlvbkluZGV4U3BhY2UpIGNvbnN0OwogCiAgICAgRXhw
ZWN0ZWQ8dm9pZCwgV2FzbTo6QmluZGluZ0ZhaWx1cmU+IGdlbmVyYXRlV2FzbVRvSlNTdHVicyhW
TSYpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IHdhc21Ub0Vt
YmVkZGVyU3R1YihzaXplX3QgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG1fd2FzbVRvSlNF
eGl0U3R1YnNbaW1wb3J0RnVuY3Rpb25OdW1dLmNvZGUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhZy5oCmluZGV4IGRjNGMwZjI2ZjczYzQ3
MWVkYWM5YTAyNWE2ZWE2MWQ1MmNiNTU2MzEuLjQ5MjUwNzI0YTZjMTBhYjFlOGIwMmI2MjFiZWMx
YjM3OTk2MzljZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFnLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAK
ICAgICBjb25zdCBXYXNtOjpUYWcmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnOyB9Ci0gICAg
Y29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUoKSBjb25zdCB7IHJldHVybiB0YWcoKS5z
aWduYXR1cmUoKTsgfQorICAgIGNvbnN0IFdhc206OkZ1bmN0aW9uU2lnbmF0dXJlJiB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gdGFnKCkudHlwZSgpOyB9CiAKIHByaXZhdGU6CiAgICAgSlNXZWJBc3Nl
bWJseVRhZyhWTSYsIFN0cnVjdHVyZSosIGNvbnN0IFdhc206OlRhZyYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCmluZGV4IGVlNGI3ZGZiNmQzN2M4MzE2Mzhh
M2I2MGMzZjFiMjAxMDI0MTYxZjIuLjNmMDgwOTIyZTI0NTk5ZmM0MDYyYjRjZGI0YjJkMmZmNDM4
NTBiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKQEAg
LTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUg
Ildhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAi
V2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmluaXRpb25Jbmxp
bmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uVHJhaXRzLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CkBAIC01MSwxNyArNTEsMTggQEAgc3RhdGljIHZvaWQgbWF0ZXJp
YWxpemVJbXBvcnRKU0NlbGwoSklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJSZWcg
cmVzdWwKICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MocmVzdWx0LCBJbnN0YW5jZTo6b2Zm
c2V0T2ZJbXBvcnRGdW5jdGlvbihpbXBvcnRJbmRleCkpLCByZXN1bHQpOwogfQogCi1FeHBlY3Rl
ZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+
IHdhc21Ub0pTKFZNJiB2bSwgQmFnPE9wdGltaXppbmdDYWxsTGlua0luZm8+JiBjYWxsTGlua0lu
Zm9zLCBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgp
CitFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGlu
Z0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bSwgQmFnPE9wdGltaXppbmdDYWxsTGlua0luZm8+JiBj
YWxsTGlua0luZm9zLCBUeXBlSW5kZXggdHlwZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCkK
IHsKICAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHByb3Blcmx5IGFic3RyYWN0
IGF3YXkgdGhlIGNhbGxpbmcgY29udmVudGlvbi4KICAgICAvLyBJdCdkIGJlIHN1cGVyIGVhc3kg
dG8gZG8gc286IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk0MDEK
ICAgICBjb25zdCBhdXRvJiB3YXNtQ0MgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKTsKICAgICBj
b25zdCBhdXRvJiBqc0NDID0ganNDYWxsaW5nQ29udmVudGlvbigpOwotICAgIGNvbnN0IFNpZ25h
dHVyZSYgc2lnbmF0dXJlID0gU2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCk7CisgICAgY29uc3QgVHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uID0gVHlwZUluZm9y
bWF0aW9uOjpnZXQodHlwZUluZGV4KTsKKyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSAqdHlw
ZURlZmluaXRpb24uYXM8RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAgdW5zaWduZWQgYXJnQ291
bnQgPSBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOwogICAgIEpJVCBqaXQ7CiAKLSAgICBDYWxs
SW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNDLmNhbGxJbmZvcm1hdGlvbkZvcihzaWdu
YXR1cmUsIENhbGxSb2xlOjpDYWxsZWUpOworICAgIENhbGxJbmZvcm1hdGlvbiB3YXNtQ2FsbElu
Zm8gPSB3YXNtQ0MuY2FsbEluZm9ybWF0aW9uRm9yKHR5cGVEZWZpbml0aW9uLCBDYWxsUm9sZTo6
Q2FsbGVlKTsKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBzYXZlZFJlc3VsdFJlZ2lzdGVycyA9
IHdhc21DYWxsSW5mby5jb21wdXRlUmVzdWx0c09mZnNldExpc3QoKTsKIAogICAgIC8vIE5vdGU6
IFdhc21CM0lSR2VuZXJhdG9yIGFzc3VtZXMgdGhhdCB0aGlzIHN0dWIgdHJlYXRzIFNQIGFzIGEg
Y2FsbGVlIHNhdmUuCkBAIC05MSw3ICs5Miw3IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0mIHZtCiAg
ICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBKSVQ6OkFkZHJlc3Mg
Y2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKIAotICAgIC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNo
IG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJ
dCdsbCBvdGhlcndpc2UgYmUgaHVnZSBmb3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3CisgICAgLy8gRklYTUUgbWFrZSB0aGVz
ZSBsb29wcyB3aGljaCBzd2l0Y2ggb24gc2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55IGFyZ3Vt
ZW50cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdlIHR5cGUg
ZGVmaW5pdGlvbnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1
NDcKIAogICAgIC8vIEZpcnN0IGdvIHRocm91Z2ggdGhlIGludGVnZXIgcGFyYW1ldGVycywgZnJl
ZWluZyB1cCB0aGVpciByZWdpc3RlciBmb3IgdXNlIGFmdGVyd2FyZHMuCiAgICAgewpAQCAtMTAw
LDEwICsxMDEsMTEgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgdW5zaWduZWQg
Y2FsbGVlRnJhbWVPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKTsKICAgICAgICAgdW5zaWduZWQgZnJPZmZzZXQg
PSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBh
cmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVy
ZS5hcmd1bWVudChhcmdOdW0pOworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJl
LmFyZ3VtZW50VHlwZShhcmdOdW0pOwogICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlLmtpbmQp
IHsKICAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6OlZvaWQ6CiAgICAgICAgICAgICBjYXNlIFR5
cGVLaW5kOjpGdW5jOgorICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6U3RydWN0OgogICAgICAg
ICAgICAgY2FzZSBUeXBlS2luZDo6UmVmTnVsbDoKICAgICAgICAgICAgIGNhc2UgVHlwZUtpbmQ6
OlJlZjoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBI
YW5kbGVkIGFib3ZlLgpAQCAtMTc0LDEwICsxNzYsMTEgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYg
dm0KICAgICAgICAgfTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051
bSA8IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2ln
bmF0dXJlLmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWdu
YXR1cmUuYXJndW1lbnRUeXBlKGFyZ051bSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUu
a2luZCkgewogICAgICAgICAgICAgY2FzZSBUeXBlS2luZDo6Vm9pZDoKICAgICAgICAgICAgIGNh
c2UgVHlwZUtpbmQ6OkZ1bmM6CisgICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpTdHJ1Y3Q6CiAg
ICAgICAgICAgICBjYXNlIFR5cGVLaW5kOjpSZWZOdWxsOgogICAgICAgICAgICAgY2FzZSBUeXBl
S2luZDo6UmVmOgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IC8vIEhhbmRsZWQgYWJvdmUuCkBAIC0yMzAsNyArMjMzLDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhW
TSYgdm0KICAgICAgICAgLy8gV2UgY2FsbCBmdW5jdGlvbnMgdG8gY29udmVydCBJNjQgdG8gQmln
SW50LgogICAgICAgICB1bnNpZ25lZCBjYWxsZWVGcmFtZU9mZnNldCA9IENhbGxGcmFtZVNsb3Q6
OmZpcnN0QXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50OyArK2FyZ051
bSkgewotICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChhcmdOdW0pLmlzSTY0KCkp
IHsKKyAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnRUeXBlKGFyZ051bSkuaXNJNjQo
KSkgewogICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwogICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoY2FsbGVlRnJhbWUu
d2l0aE9mZnNldChjYWxsZWVGcmFtZU9mZnNldCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAg
ICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkNvbnZl
cnRUb0JpZ0ludCk+KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKQEAgLTM3Nyw3ICszODAsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2Fz
bUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICAg
ICAgaWYgKFdhc206OmlzRnVuY3JlZihyZXR1cm5UeXBlKSB8fCBXYXNtOjppc0V4dGVybnJlZihy
ZXR1cm5UeXBlKSkKICAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgd2FzbUNhbGxJbmZvLnJlc3VsdHNbMF0uZ3ByKCkpOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgSmF2YVNjcmlwdCBlbWJlZGRpbmcsIGltcG9ydHMg
d2l0aCB0aGVzZSB0eXBlcyBpbiB0aGVpciBzaWduYXR1cmUgcmV0dXJuIGFyZSBhIFdlYkFzc2Vt
Ymx5Lk1vZHVsZSB2YWxpZGF0aW9uIGVycm9yLgorICAgICAgICAgICAgICAgIC8vIEZvciB0aGUg
SmF2YVNjcmlwdCBlbWJlZGRpbmcsIGltcG9ydHMgd2l0aCB0aGVzZSB0eXBlcyBpbiB0aGVpciB0
eXBlIGRlZmluaXRpb24gcmV0dXJuIGFyZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSB2YWxpZGF0aW9u
IGVycm9yLgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMzg5LDcgKzM5Miw3IEBAIEV4cGVjdGVkPE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMo
Vk0mIHZtCiAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uod2FzbUNvbnRl
eHRJbnN0YW5jZUdQUik7CiAgICAgICAgIH0KIAotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpPih3YXNtQ29udGV4dEluc3RhbmNlR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnNpZ25hdHVyZSksIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBl
cnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRzKT4od2FzbUNvbnRleHRJbnN0YW5jZUdQUiwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ0eXBlRGVmaW5pdGlvbiksIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhl
bHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgaml0LmNhbGxPcGVyYXRpb24o
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25JdGVyYXRlUmVzdWx0cykpOwog
ICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKHZt
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pT
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oCmluZGV4IDE5N2I4
MDdmMWI1MzI1YWIyOWYwZDU5NjBkOTQyNzEwMmIxOTIzYzYuLmJkNTJhZjhjZDhlNDlmMjY5NmFh
NWVlNWIxMDQzMGU5YTRiNDFkY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dhc21Ub0pTLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Fz
bVRvSlMuaApAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2FzbSB7CiAKIGNsYXNzIEluc3Rh
bmNlOwogCi1FeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwg
QmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiwgQmFnPE9wdGltaXppbmdDYWxsTGlua0luZm8+
JiBjYWxsTGlua0luZm9zLCBTaWduYXR1cmVJbmRleCwgdW5zaWduZWQgaW1wb3J0SW5kZXgpOwor
RXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdG
YWlsdXJlPiB3YXNtVG9KUyhWTSYsIEJhZzxPcHRpbWl6aW5nQ2FsbExpbmtJbmZvPiYgY2FsbExp
bmtJbmZvcywgVHlwZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCk7CiAKIHZvaWQgZW1pdFRo
cm93V2FzbVRvSlNFeGNlcHRpb24oQ0NhbGxIZWxwZXJzJiwgR1BSUmVnIHdhc21JbnN0YW5jZSwg
V2FzbTo6RXhjZXB0aW9uVHlwZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhjZXB0aW9uQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAK
aW5kZXggZjRiMWUyM2Y5Y2I5OGIyNTA4MWE2NTAwZTEwMzI0MzEzMjllNGI3ZC4uNzdiMjZjMTI2
ZjdhZWI5MTA2MjQ0MTg3ZjE4NTRiYzcxZDIwOGNlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGNlcHRpb25Db25z
dHJ1Y3Rvci5jcHAKQEAgLTY2LDEzICs2NiwxNCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
Y29uc3RydWN0SlNXZWJBc3NlbWJseUV4Y2VwdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYQog
ICAgIH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBpZiAo
dmFsdWVzLnNpemUoKSAhPSB0YWctPnNpZ25hdHVyZSgpLmFyZ3VtZW50Q291bnQoKSkKKyAgICBj
b25zdCBhdXRvJiB0YWdGdW5jdGlvblR5cGUgPSB0YWctPnR5cGUoKTsKKyAgICBpZiAodmFsdWVz
LnNpemUoKSAhPSB0YWdGdW5jdGlvblR5cGUuYXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiV2ViQXNzZW1ibHkuRXhj
ZXB0aW9uIGNvbnN0cnVjdG9yIGV4cGVjdHMgdGhlIG51bWJlciBvZiBwYXJlbWV0ZXJzIGluIFdl
YkFzc2VtYmx5LlRhZyB0byBtYXRjaCB0aGUgdGFncyBwYXJhbWV0ZXIgY291bnQuIl9zKTsKIAog
ICAgIC8vIEFueSBHQydkIHZhbHVlcyBpbiBoZXJlIHdpbGwgYmUgbWFya2VkIGJ5IHRoZSBNYXJr
ZWRBcnVnZW1lbnRCdWZmZXIgdW50aWwgc3RvcmVkIGluIHRoZSBFeGNlcHRpb24uCiAgICAgRml4
ZWRWZWN0b3I8dWludDY0X3Q+IHBheWxvYWQodmFsdWVzLnNpemUoKSk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBwYXlsb2FkW2ld
ID0gZnJvbUpTVmFsdWUoZ2xvYmFsT2JqZWN0LCB0YWctPnNpZ25hdHVyZSgpLmFyZ3VtZW50KGkp
LCB2YWx1ZXMuYXQoaSkpOworICAgICAgICBwYXlsb2FkW2ldID0gZnJvbUpTVmFsdWUoZ2xvYmFs
T2JqZWN0LCB0YWdGdW5jdGlvblR5cGUuYXJndW1lbnRUeXBlKGkpLCB2YWx1ZXMuYXQoaSkpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cAppbmRleCA4ODkxMjA3ZGMxMjAzYjUxOTEzNjQxNWZkNDAzOGM1ZjczYjkwYzkzLi5jNGQyYjk2
YzI5MzA3MTU1MWY5NmI4ZmE0ZGNlYWY1MDk1YTA5Yjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtNDgsNyAr
NDgsNyBAQAogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5m
b3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKLSNpbmNsdWRl
ICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklu
bGluZXMuaCIKICNpbmNsdWRlIDx3dGYvU3RhY2tQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N5
c3RlbVRyYWNpbmcuaD4KIApAQCAtNjMsOCArNjMsOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJ
T04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0
aW9uID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkp
OwotICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gd2FzbUZ1bmN0aW9u
LT5zaWduYXR1cmVJbmRleCgpOwotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJl
ID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7CisgICAg
V2FzbTo6VHlwZUluZGV4IHR5cGVJbmRleCA9IHdhc21GdW5jdGlvbi0+dHlwZUluZGV4KCk7Cisg
ICAgY29uc3QgV2FzbTo6RnVuY3Rpb25TaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlR5cGVJ
bmZvcm1hdGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1cmUodHlwZUluZGV4KTsKIAogICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgdGhpbmsgd2UgYXJlIGdvaW5nIHRvIHJ1biB3aXRo
IG1hdGNoZXMgdGhlIG9uZSB3ZSBleHBlY3QuCiAgICAgQVNTRVJUKHdhc21GdW5jdGlvbi0+aW5z
dGFuY2UoKS0+aW5zdGFuY2UoKS5jYWxsZWVHcm91cCgpLT5pc1NhZmVUb1J1bih3YXNtRnVuY3Rp
b24tPmluc3RhbmNlKCktPm1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCkpKTsKQEAgLTc4LDcgKzc4
LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBXYXNtOjpJbnN0YW5jZSogd2FzbUlu
c3RhbmNlID0gJmluc3RhbmNlLT5pbnN0YW5jZSgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBhcmdJ
bmRleCA9IDA7IGFyZ0luZGV4IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgKythcmdJbmRl
eCkgewotICAgICAgICB1aW50NjRfdCB2YWx1ZSA9IGZyb21KU1ZhbHVlKGdsb2JhbE9iamVjdCwg
c2lnbmF0dXJlLmFyZ3VtZW50KGFyZ0luZGV4KSwgY2FsbEZyYW1lLT5hcmd1bWVudChhcmdJbmRl
eCkpOworICAgICAgICB1aW50NjRfdCB2YWx1ZSA9IGZyb21KU1ZhbHVlKGdsb2JhbE9iamVjdCwg
c2lnbmF0dXJlLmFyZ3VtZW50VHlwZShhcmdJbmRleCksIGNhbGxGcmFtZS0+YXJndW1lbnQoYXJn
SW5kZXgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgICAgIGJveGVkQXJncy5hcHBlbmQoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7
CiAgICAgfQpAQCAtMTMyLDcgKzEzMiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxs
V2ViQXNzZW1ibHlGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKIGJv
b2wgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dXNlc1RhZ1JlZ2lzdGVycygpIGNvbnN0CiB7Ci0gICAg
Y29uc3QgYXV0byYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChz
aWduYXR1cmVJbmRleCgpKTsKKyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBXYXNtOjpUeXBl
SW5mb3JtYXRpb246OmdldEZ1bmN0aW9uU2lnbmF0dXJlKHR5cGVJbmRleCgpKTsKICAgICByZXR1
cm4gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSB8fCAhc2lnbmF0dXJlLnJldHVybnNWb2lkKCk7
CiB9CiAKQEAgLTE4MSwxNSArMTgxLDE2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCiAgICAg
Vk0mIHZtID0gdGhpcy0+dm0oKTsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCi0gICAgY29uc3Qg
YXV0byYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1
cmVJbmRleCgpKTsKKyAgICBjb25zdCBhdXRvJiB0eXBlRGVmaW5pdGlvbiA9IFdhc206OlR5cGVJ
bmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCgpKTsKKyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUg
PSAqdHlwZURlZmluaXRpb24uYXM8V2FzbTo6RnVuY3Rpb25TaWduYXR1cmU+KCk7CiAgICAgY29u
c3QgYXV0byYgcGlubmVkUmVncyA9IFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CiAg
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCA9IHVzZWRDYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CiAKICAgICBhdXRvJiBtb2R1bGVJbmZvcm1hdGlvbiA9IGluc3RhbmNlKCkt
Pmluc3RhbmNlKCkubW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKTsKIAogICAgIGNvbnN0IFdh
c206Oldhc21DYWxsaW5nQ29udmVudGlvbiYgd2FzbUNDID0gV2FzbTo6d2FzbUNhbGxpbmdDb252
ZW50aW9uKCk7Ci0gICAgV2FzbTo6Q2FsbEluZm9ybWF0aW9uIHdhc21DYWxsSW5mbyA9IHdhc21D
Qy5jYWxsSW5mb3JtYXRpb25Gb3Ioc2lnbmF0dXJlKTsKLSAgICBXYXNtOjpDYWxsSW5mb3JtYXRp
b24ganNDYWxsSW5mbyA9IFdhc206OmpzQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRp
b25Gb3Ioc2lnbmF0dXJlLCBXYXNtOjpDYWxsUm9sZTo6Q2FsbGVlKTsKKyAgICBXYXNtOjpDYWxs
SW5mb3JtYXRpb24gd2FzbUNhbGxJbmZvID0gd2FzbUNDLmNhbGxJbmZvcm1hdGlvbkZvcih0eXBl
RGVmaW5pdGlvbik7CisgICAgV2FzbTo6Q2FsbEluZm9ybWF0aW9uIGpzQ2FsbEluZm8gPSBXYXNt
Ojpqc0NhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9ybWF0aW9uRm9yKHR5cGVEZWZpbml0aW9u
LCBXYXNtOjpDYWxsUm9sZTo6Q2FsbGVlKTsKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBzYXZl
ZFJlc3VsdFJlZ2lzdGVycyA9IHdhc21DYWxsSW5mby5jb21wdXRlUmVzdWx0c09mZnNldExpc3Qo
KTsKIAogICAgIHVuc2lnbmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXpl
KCkgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpOwpAQCAtMjQyLDcgKzI0Myw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRy
eXBvaW50U2xvdygpCiAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBqc1BhcmFtKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc0NhbGxJbmZvLnBhcmFtc1tpXS5vZmZzZXRGcm9tRlAo
KSk7CiAgICAgICAgIGJvb2wgaXNTdGFjayA9IHdhc21DYWxsSW5mby5wYXJhbXNbaV0uaXNTdGFj
a0FyZ3VtZW50KCk7CiAKLSAgICAgICAgYXV0byB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50KGkp
OworICAgICAgICBhdXRvIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRUeXBlKGkpOwogICAgICAg
ICBzd2l0Y2ggKHR5cGUua2luZCkgewogICAgICAgICBjYXNlIFdhc206OlR5cGVLaW5kOjpJMzI6
IHsKICAgICAgICAgICAgIGppdC5sb2FkNjQoanNQYXJhbSwgc2NyYXRjaEdQUik7CkBAIC0zMDUs
NyArMzA2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAgICAgICAgICAgICAgICBzY3Jh
dGNoRlBSID0gd2FzbUNhbGxJbmZvLnBhcmFtc1tpXS5mcHIoKTsKICAgICAgICAgICAgIGF1dG8g
bW92ZVRvRGVzdGluYXRpb24gPSBbJl0gKCkgewogICAgICAgICAgICAgICAgIGlmIChpc1N0YWNr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkuaXNGMzIo
KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudFR5cGUoaSkuaXNG
MzIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHNjcmF0Y2hGUFIs
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbUNhbGxJbmZvLnBhcmFtc1tpXS5vZmZzZXRGcm9t
U1AoKSkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuc3RvcmVEb3VibGUoc2NyYXRjaEZQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNt
Q2FsbEluZm8ucGFyYW1zW2ldLm9mZnNldEZyb21TUCgpKSk7CkBAIC0zMTcsMTMgKzMxOCwxMyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlv
bjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogICAgICAgICAgICAgYXV0byBpc0ludDMyID0gaml0
LmJyYW5jaElmSW50MzIoc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgIGppdC51bmJveERvdWJs
ZShzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKLSAgICAgICAgICAgIGlmIChz
aWduYXR1cmUuYXJndW1lbnQoaSkuaXNGMzIoKSkKKyAgICAgICAgICAgIGlmIChzaWduYXR1cmUu
YXJndW1lbnRUeXBlKGkpLmlzRjMyKCkpCiAgICAgICAgICAgICAgICAgaml0LmNvbnZlcnREb3Vi
bGVUb0Zsb2F0KHNjcmF0Y2hGUFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICAgICAgbW92ZVRvRGVz
dGluYXRpb24oKTsKICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGppdC5qdW1wKCk7CiAKICAgICAg
ICAgICAgIGlzSW50MzIubGluaygmaml0KTsKLSAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJn
dW1lbnQoaSkuaXNGMzIoKSkgeworICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudFR5
cGUoaSkuaXNGMzIoKSkgewogICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Zsb2F0
KHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICAgICAgICAgIG1vdmVUb0Rlc3RpbmF0
aW9uKCk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzkyLDcgKzM5Myw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxF
bnRyeXBvaW50U2xvdygpCiAgICAgaml0LmxvYWRQdHIoZW50cnlwb2ludExvYWRMb2NhdGlvbigp
LCBzY3JhdGNoR1BSKTsKICAgICBqaXQuY2FsbChzY3JhdGNoR1BSLCBXYXNtRW50cnlQdHJUYWcp
OwogCi0gICAgbWFyc2hhbGxKU1Jlc3VsdChqaXQsIHNpZ25hdHVyZSwgd2FzbUNhbGxJbmZvLCBz
YXZlZFJlc3VsdFJlZ2lzdGVycyk7CisgICAgbWFyc2hhbGxKU1Jlc3VsdChqaXQsIHR5cGVEZWZp
bml0aW9uLCB3YXNtQ2FsbEluZm8sIHNhdmVkUmVzdWx0UmVnaXN0ZXJzKTsKIAogICAgIEFTU0VS
VCghUmVnaXN0ZXJTZXQ6OnJ1bnRpbWVUYWdSZWdpc3RlcnMoKS5jb250YWlucyhHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpKTsKICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHByZXZpb3VzSW5zdGFuY2VPZmZz
ZXQpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwpAQCAtNDMzLDEwICs0MzQs
MTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2VtYmx5RnVu
Y3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAgICByZXR1cm4gbV9qc0NhbGxFbnRyeXBv
aW50LmNvZGUoKTsKIH0KIAotV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlv
bjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2Fz
bTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCkKK1dlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1
bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiwgV2FzbTo6VHlwZUluZGV4IHR5cGVJbmRleCkKIHsKICAgICBOYXRpdmVFeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0
aW9uLCBXYXNtRnVuY3Rpb25JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9y
LCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtKSkgV2ViQXNz
ZW1ibHlGdW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGpz
RW50cnlwb2ludCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUlu
ZGV4KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtKSkgV2ViQXNzZW1ibHlGdW5jdGlv
bih2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGpzRW50cnlwb2ludCwg
d2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHR5cGVJbmRleCk7CiAgICAgZnVuY3Rp
b24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUsIGluc3RhbmNl
KTsKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CkBAIC00NDcsOCArNDQ4LDggQEAgU3RydWN0dXJl
KiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9u
KFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhc206OkNhbGxlZSYganNFbnRyeXBv
aW50LCBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2Fz
bVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25h
dHVyZUluZGV4KQotICAgIDogQmFzZSB7IHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUlu
ZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9IH0KK1dlYkFzc2VtYmx5RnVu
Y3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwg
V2FzbTo6VHlwZUluZGV4IHR5cGVJbmRleCkKKyAgICA6IEJhc2UgeyB2bSwgZXhlY3V0YWJsZSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b24geyB0eXBlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIH0gfQogICAg
ICwgbV9qc0VudHJ5cG9pbnQgeyBqc0VudHJ5cG9pbnQuZW50cnlwb2ludCgpIH0KIHsgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmgKaW5kZXggN2NkZjJlZmQ5YzQ0Y2EyZTBiZGY1MTk0Mjg1ZGE0NTA1NjUwYWJmNi4uNjY4ZjE1
MmUxYjIxZTg4MGEyMGFkNTViODFmMDNhYTdiNzBhNmM1NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaApAQCAtNTcsNyArNTcs
NyBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0
YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbiogY3JlYXRlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiwgV2FzbTo6VHlwZUluZGV4KTsKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4g
anNFbnRyeXBvaW50KEFyaXR5Q2hlY2tNb2RlIGFyaXR5KQpAQCAtODAsNyArODAsNyBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKLSAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWdu
YXR1cmVJbmRleCk7CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFi
bGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBv
aW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2lu
dExvYWRMb2NhdGlvbiwgV2FzbTo6VHlwZUluZGV4KTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOwogICAgIHB0cmRpZmZf
dCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAppbmRleCBiYTdj
YjE3NjVhMjZlMGJmM2VhMDdmZGJhODk5ZjcyMWFhODc0ZDNhLi4xYjc0NjIzODAyY2M3NDhmMzYw
NjMxM2U3YWUwM2RmY2NkMzk3NGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHVibGljOgogCiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KIAotICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNp
Z25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24uc2lnbmF0
dXJlSW5kZXg7IH0KKyAgICBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbXBvcnRhYmxlRnVuY3Rpb24udHlwZUluZGV4OyB9CiAgICAgV2FzbVRvV2FzbUltcG9y
dGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbi5lbnRyeXBvaW50TG9hZExvY2F0aW9uOyB9
CiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBpbXBvcnRhYmxlRnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2ltcG9ydGFibGVGdW5jdGlvbjsgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbENvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3Ry
dWN0b3IuY3BwCmluZGV4IDBlZTY4N2EzYjFjZWIxYTViNjQ0MWRjNDI5NmM4YjY0MTZkMTJmOGIu
LmE4N2E5OWI0YmNkZGU0MjU4NTJkNzk1ZjkwYzMxZjRlOGVhYjBjMzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsQ29uc3RydWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFs
Q29uc3RydWN0b3IuY3BwCkBAIC02Niw3ICs2Niw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5R2xvYmFsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
CiAgICAgICAgIGdsb2JhbERlc2NyaXB0b3IgPSBqc0Nhc3Q8SlNPYmplY3QqPihhcmd1bWVudCk7
CiAgICAgfQogCi0gICAgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHkgbXV0YWJp
bGl0eTsKKyAgICBXYXNtOjpNdXRhYmlsaXR5IG11dGFiaWxpdHk7CiAgICAgewogICAgICAgICBJ
ZGVudGlmaWVyIG11dGFibGVJZGVudCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJtdXRh
YmxlIl9zKTsKICAgICAgICAgSlNWYWx1ZSBtdXRhYmxlVmFsdWUgPSBnbG9iYWxEZXNjcmlwdG9y
LT5nZXQoZ2xvYmFsT2JqZWN0LCBtdXRhYmxlSWRlbnQpOwpAQCAtNzQsOSArNzQsOSBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oY29uc3RydWN0SlNXZWJBc3NlbWJseUdsb2JhbCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBib29sIG11dGFibGVCb29sZWFuID0gbXV0YWJs
ZVZhbHVlLnRvQm9vbGVhbihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBpZiAobXV0YWJsZUJv
b2xlYW4pCi0gICAgICAgICAgICBtdXRhYmlsaXR5ID0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246
Ok11dGFibGU7CisgICAgICAgICAgICBtdXRhYmlsaXR5ID0gV2FzbTo6TXV0YWJsZTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbXV0YWJpbGl0eSA9IFdhc206Okdsb2JhbEluZm9ybWF0aW9u
OjpJbW11dGFibGU7CisgICAgICAgICAgICBtdXRhYmlsaXR5ID0gV2FzbTo6SW1tdXRhYmxlOwog
ICAgIH0KIAogICAgIFdhc206OlR5cGUgdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5R2xvYmFsUHJvdG90eXBlLmNwcAppbmRl
eCBhNWJkZjliNjM2MDA1OGUyMTQ1ZmMwYTI5N2U2MWI4MmVmZGNiOTc0Li4wNmE0MWI5NTllYTFi
NWJiY2E1OTNkMTZhMmE1YzYwMGJmNjIyY2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUdsb2JhbFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlHbG9iYWxQcm90b3R5cGUuY3BwCkBA
IC0xMTEsNyArMTExLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHdlYkFzc2VtYmx5R2xv
YmFsUHJvdG9TZXR0ZXJGdW5jVmFsdWUsIChKU0dsb2JhbE9iamVjdCoKICAgICBKU1dlYkFzc2Vt
Ymx5R2xvYmFsKiBnbG9iYWwgPSBnZXRHbG9iYWwoZ2xvYmFsT2JqZWN0LCB2bSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKIAotICAgIGlmIChnbG9iYWwtPmdsb2JhbCgpLT5tdXRhYmlsaXR5KCkg
PT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6OkltbXV0YWJsZSkKKyAgICBp
ZiAoZ2xvYmFsLT5nbG9iYWwoKS0+bXV0YWJpbGl0eSgpID09IFdhc206Ok11dGFiaWxpdHk6Oklt
bXV0YWJsZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsICJX
ZWJBc3NlbWJseS5HbG9iYWwucHJvdG90eXBlLnZhbHVlIGF0dGVtcHRzIHRvIG1vZGlmeSBpbW11
dGFibGUgZ2xvYmFsIHZhbHVlIl9zKSkpOwogCiAgICAgZ2xvYmFsLT5nbG9iYWwoKS0+c2V0KGds
b2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKaW5k
ZXggMjVlMDg5ZmEyMDcxYjNmNDdmNDU5ZWM2MzY4MThlYmRiMTEzYTk5Yy4uNmQ0M2E4ZjUyMDQ2
YTk5NDk5ZDIzYzZlY2IzODk2NDgxNjk3NmQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcApAQCAtMzks
NyArMzksNyBAQAogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5VGFnLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKLSNpbmNs
dWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlv
bklubGluZXMuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMjA3LDE4ICsyMDcsMTggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6aW5pdGlhbGl6ZUltcG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlMKICAg
ICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9u
OwogICAgICAgICAgICAgaWYgKGlzV2ViQXNzZW1ibHlIb3N0RnVuY3Rpb24odm0sIGZ1bmN0aW9u
LCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAg
Ly8gYS4gSWYgdGhlIHNpZ25hdHVyZSBvZiB2IGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUg
b2YgaSwgdGhyb3cgYSBXZWJBc3NlbWJseS5MaW5rRXJyb3IuCi0gICAgICAgICAgICAgICAgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggaW1wb3J0ZWRTaWduYXR1cmVJbmRleDsKKyAgICAgICAgICAgICAg
ICBXYXNtOjpUeXBlSW5kZXggaW1wb3J0ZWRUeXBlSW5kZXg7CiAgICAgICAgICAgICAgICAgaWYg
KHdhc21GdW5jdGlvbikgewotICAgICAgICAgICAgICAgICAgICBpbXBvcnRlZFNpZ25hdHVyZUlu
ZGV4ID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgICAg
ICBpbXBvcnRlZFR5cGVJbmRleCA9IHdhc21GdW5jdGlvbi0+dHlwZUluZGV4KCk7CiAgICAgICAg
ICAgICAgICAgICAgIGNhbGxlZUluc3RhbmNlID0gJndhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+
aW5zdGFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludExvYWRMb2NhdGlvbiA9
IHdhc21GdW5jdGlvbi0+ZW50cnlwb2ludExvYWRMb2NhdGlvbigpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydGVkU2lnbmF0dXJlSW5kZXggPSB3
YXNtV3JhcHBlckZ1bmN0aW9uLT5zaWduYXR1cmVJbmRleCgpOworICAgICAgICAgICAgICAgICAg
ICBpbXBvcnRlZFR5cGVJbmRleCA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPnR5cGVJbmRleCgpOwog
ICAgICAgICAgICAgICAgICAgICAvLyBiLiBMZXQgY2xvc3VyZSBiZSB2LltbQ2xvc3VyZV1dLgog
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IHdhc21XcmFwcGVyRnVuY3Rpb24tPmZ1bmN0
aW9uKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFdhc206OlNpZ25hdHVy
ZUluZGV4IGV4cGVjdGVkU2lnbmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRG
dW5jdGlvblNpZ25hdHVyZUluZGljZXNbaW1wb3J0LmtpbmRJbmRleF07Ci0gICAgICAgICAgICAg
ICAgaWYgKGltcG9ydGVkU2lnbmF0dXJlSW5kZXggIT0gZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkK
KyAgICAgICAgICAgICAgICBXYXNtOjpUeXBlSW5kZXggZXhwZWN0ZWRUeXBlSW5kZXggPSBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRGdW5jdGlvblR5cGVJbmRpY2VzW2ltcG9ydC5raW5kSW5kZXhd
OworICAgICAgICAgICAgICAgIGlmIChpbXBvcnRlZFR5cGVJbmRleCAhPSBleHBlY3RlZFR5cGVJ
bmRleCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFz
c2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9y
dCwgImltcG9ydGVkIGZ1bmN0aW9uIiwgInNpZ25hdHVyZSBkb2Vzbid0IG1hdGNoIHRoZSBwcm92
aWRlZCBXZWJBc3NlbWJseSBmdW5jdGlvbidzIHNpZ25hdHVyZSIpKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAvLyBpaWkuIE90aGVyd2lzZToKQEAgLTIzNywxMiArMjM3LDEyIEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJbXBvcnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpH
bG9iYWw6IHsKICAgICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0OgogICAg
ICAgICAgICAgY29uc3QgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb24mIGdsb2JhbCA9IG1vZHVsZUlu
Zm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF07Ci0gICAgICAgICAgICBpZiAoZ2xv
YmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkltbXV0YWJsZSkgewor
ICAgICAgICAgICAgaWYgKGdsb2JhbC5tdXRhYmlsaXR5ID09IFdhc206OkltbXV0YWJsZSkgewog
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmhlcml0czxKU1dlYkFzc2VtYmx5R2xvYmFsPih2
bSkpIHsKICAgICAgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUdsb2JhbCogZ2xvYmFsVmFs
dWUgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUdsb2JhbCo+KHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGdsb2JhbFZhbHVlLT5nbG9iYWwoKS0+dHlwZSgpICE9IGdsb2JhbC50eXBlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2Vt
Ymx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwg
ImltcG9ydGVkIGdsb2JhbCIsICJtdXN0IGJlIGEgc2FtZSB0eXBlIikpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGdsb2JhbFZhbHVlLT5nbG9iYWwoKS0+bXV0YWJpbGl0eSgpICE9IFdhc206
Okdsb2JhbEluZm9ybWF0aW9uOjpJbW11dGFibGUpCisgICAgICAgICAgICAgICAgICAgIGlmIChn
bG9iYWxWYWx1ZS0+Z2xvYmFsKCktPm11dGFiaWxpdHkoKSAhPSBXYXNtOjpJbW11dGFibGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1i
bHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAi
aW1wb3J0ZWQgZ2xvYmFsIiwgIm11c3QgYmUgYSBzYW1lIG11dGFiaWxpdHkiKSkpOwogICAgICAg
ICAgICAgICAgICAgICBjb25zdCBhdXRvJiBkZWNsYXJlZEdsb2JhbFR5cGUgPSBtb2R1bGVJbmZv
cm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLnR5cGU7CiAgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoZGVjbGFyZWRHbG9iYWxUeXBlLmtpbmQpIHsKQEAgLTI3MCw4ICsyNzAsOCBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplSW1wb3J0cyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXYXNtOjppc1JlZldpdGhUeXBlSW5k
ZXgoZGVjbGFyZWRHbG9iYWxUeXBlKSAmJiAhdmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggcGFyYW1JbmRleCA9IGds
b2JhbC50eXBlLmluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBhcmdJbmRleCA9IHdhc21GdW5jdGlvbiA/IHdhc21GdW5jdGlvbi0+c2ln
bmF0dXJlSW5kZXgoKSA6IHdhc21XcmFwcGVyRnVuY3Rpb24tPnNpZ25hdHVyZUluZGV4KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBwYXJhbUluZGV4
ID0gZ2xvYmFsLnR5cGUuaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdh
c206OlR5cGVJbmRleCBhcmdJbmRleCA9IHdhc21GdW5jdGlvbiA/IHdhc21GdW5jdGlvbi0+dHlw
ZUluZGV4KCkgOiB3YXNtV3JhcHBlckZ1bmN0aW9uLT50eXBlSW5kZXgoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtSW5kZXggIT0gYXJnSW5kZXgpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2Vi
QXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1w
b3J0LCAiaW1wb3J0ZWQgZ2xvYmFsIiwgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3QgbWF0Y2gg
dGhlIHJlZmVyZW5jZSB0eXBlIikpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBA
IC0zMjQsOCArMzI0LDggQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6
ZUltcG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlMKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoV2FzbTo6
aXNSZWZXaXRoVHlwZUluZGV4KGdsb2JhbFR5cGUpICYmICF2YWx1ZS5pc051bGwoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBwYXJhbUlu
ZGV4ID0gZ2xvYmFsLnR5cGUuaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdhc206OlNpZ25hdHVyZUluZGV4IGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9uID8gd2FzbUZ1bmN0
aW9uLT5zaWduYXR1cmVJbmRleCgpIDogd2FzbVdyYXBwZXJGdW5jdGlvbi0+c2lnbmF0dXJlSW5k
ZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IHBh
cmFtSW5kZXggPSBnbG9iYWwudHlwZS5pbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2FzbTo6VHlwZUluZGV4IGFyZ0luZGV4ID0gd2FzbUZ1bmN0aW9uID8gd2FzbUZ1bmN0
aW9uLT50eXBlSW5kZXgoKSA6IHdhc21XcmFwcGVyRnVuY3Rpb24tPnR5cGVJbmRleCgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1JbmRleCAhPSBhcmdJbmRleCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3Jl
YXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVz
c2FnZShpbXBvcnQsICJpbXBvcnRlZCBnbG9iYWwiLCAiQXJndW1lbnQgZnVuY3Rpb24gZGlkIG5v
dCBtYXRjaCB0aGUgcmVmZXJlbmNlIHR5cGUiKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTM4Niw5ICszODYsOSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpp
bml0aWFsaXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwogICAgICAg
ICAgICAgaWYgKCF0YWcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVK
U1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdl
KGltcG9ydCwgIlRhZyBpbXBvcnQiLCAiaXMgbm90IGFuIGluc3RhbmNlIG9mIFdlYkFzc2VtYmx5
LlRhZyIpKSk7CiAKLSAgICAgICAgICAgIFdhc206OlNpZ25hdHVyZUluZGV4IGV4cGVjdGVkU2ln
bmF0dXJlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRFeGNlcHRpb25TaWduYXR1cmVJ
bmRpY2VzW2ltcG9ydC5raW5kSW5kZXhdOworICAgICAgICAgICAgV2FzbTo6VHlwZUluZGV4IGV4
cGVjdGVkVHlwZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RXhjZXB0aW9uVHlwZUlu
ZGljZXNbaW1wb3J0LmtpbmRJbmRleF07CiAKLSAgICAgICAgICAgIGlmIChleHBlY3RlZFNpZ25h
dHVyZUluZGV4ICE9IHRhZy0+dGFnKCkuc2lnbmF0dXJlKCkuaW5kZXgoKSkKKyAgICAgICAgICAg
IGlmIChleHBlY3RlZFR5cGVJbmRleCAhPSB0YWctPnRhZygpLnR5cGVJbmRleCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihn
bG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBvcnRlZCBUYWci
LCAic2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFzc2VtYmx5IFRhZydz
IHNpZ25hdHVyZSIpKSk7CiAKICAgICAgICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0
VGFnKGltcG9ydC5raW5kSW5kZXgsIHRhZy0+dGFnKCkpOwpAQCAtNDgxLDkgKzQ4MSw5IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVFeHBvcnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBsb29rZWQgdXAgYWZ0
ZXIgdGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYXMgdGhlIGNvZGVCbG9jayBkZXBlbmRzIG9u
IHRoZSBtZW1vcnkgbW9kZS4KICAgICBXYXNtOjpDYWxsZWVHcm91cCogY2FsbGVlR3JvdXAgPSBt
X2luc3RhbmNlLT5pbnN0YW5jZSgpLmNhbGxlZUdyb3VwKCk7CiAKLSAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBtb2R1bGVJbmZvcm1hdGlvbi5pbnRlcm5hbEV4Y2VwdGlvblNp
Z25hdHVyZUluZGljZXMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgIFdhc206OlNpZ25hdHVy
ZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlSW5mb3JtYXRpb24uaW50ZXJuYWxFeGNlcHRp
b25TaWduYXR1cmVJbmRpY2VzW2luZGV4XTsKLSAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2Uo
KS5zZXRUYWcobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RXhjZXB0aW9uQ291bnQoKSArIGluZGV4
LCBXYXNtOjpUYWc6OmNyZWF0ZShXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KSkpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1vZHVs
ZUluZm9ybWF0aW9uLmludGVybmFsRXhjZXB0aW9uVHlwZUluZGljZXMuc2l6ZSgpOyArK2luZGV4
KSB7CisgICAgICAgIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlv
bi5pbnRlcm5hbEV4Y2VwdGlvblR5cGVJbmRpY2VzW2luZGV4XTsKKyAgICAgICAgbV9pbnN0YW5j
ZS0+aW5zdGFuY2UoKS5zZXRUYWcobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RXhjZXB0aW9uQ291
bnQoKSArIGluZGV4LCBXYXNtOjpUYWc6OmNyZWF0ZShXYXNtOjpUeXBlSW5mb3JtYXRpb246Omdl
dCh0eXBlSW5kZXgpKSk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgZnVuY3Rpb25JbXBvcnRDb3Vu
dCA9IGNhbGxlZUdyb3VwLT5mdW5jdGlvbkltcG9ydENvdW50KCk7CkBAIC01MDIsOCArNTAyLDgg
QEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUV4cG9ydHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9z
dEZ1bmN0aW9uKHZtLCBmdW5jdGlvbkltcG9ydCkpCiAgICAgICAgICAgICAgICAgd3JhcHBlciA9
IGZ1bmN0aW9uSW1wb3J0OwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4
RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7Ci0gICAgICAgICAgICAgICAgd3JhcHBlciA9
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LT53ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCBmdW5jdGlv
bkltcG9ydCwgaW5kZXgsIG1faW5zdGFuY2UuZ2V0KCksIHNpZ25hdHVyZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4ID0gbW9kdWxlLT50eXBlSW5kZXhG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGluZGV4KTsKKyAgICAgICAgICAgICAgICB3cmFwcGVyID0g
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlKCksIGZ1bmN0aW9u
SW1wb3J0LCBpbmRleCwgbV9pbnN0YW5jZS5nZXQoKSwgdHlwZUluZGV4KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vICAgaWlpLiBPdGhlcndpc2U6CkBA
IC01MTIsOSArNTEyLDkgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6
ZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgICAgIC8vICAg
ICBjLiBSZXR1cm4gZnVuYy4KICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRkZXJFbnRy
eXBvaW50Q2FsbGVlID0gY2FsbGVlR3JvdXAtPmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21G
dW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOwogICAgICAgICAgICAgV2FzbTo6V2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBj
YWxsZWVHcm91cC0+ZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5jdGlvbkluZGV4U3BhY2Uo
aW5kZXgpOwotICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgg
PSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShpbmRleCk7Ci0g
ICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgICAgICAgICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJl
KCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG1ha2VTdHJpbmcoaW5kZXgpLCBtX2luc3Rh
bmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24sIHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCB0eXBlSW5k
ZXggPSBtb2R1bGUtPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2UoaW5kZXgpOworICAg
ICAgICAgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpn
ZXRGdW5jdGlvblNpZ25hdHVyZSh0eXBlSW5kZXgpOworICAgICAgICAgICAgV2ViQXNzZW1ibHlG
dW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKCksIHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCksIG1ha2VTdHJpbmcoaW5kZXgpLCBtX2luc3RhbmNlLmdl
dCgpLCBlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHR5
cGVJbmRleCk7CiAgICAgICAgICAgICB3cmFwcGVyID0gZnVuY3Rpb247CiAgICAgICAgIH0KIApA
QCAtNTQ5LDggKzU0OSw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxp
emVFeHBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9y
bWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
Z2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6
Ok11dGFibGUpOwotICAgICAgICAgICAgICAgIFJlZjxXYXNtOjpHbG9iYWw+IGdsb2JhbFJlZiA9
IFdhc206Okdsb2JhbDo6Y3JlYXRlKGdsb2JhbC50eXBlLCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlv
bjo6TXV0YWJpbGl0eTo6TXV0YWJsZSwgaW5pdGlhbEJpdHMpOworICAgICAgICAgICAgICAgIEFT
U0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpNdXRhYmxlKTsKKyAgICAgICAgICAgICAg
ICBSZWY8V2FzbTo6R2xvYmFsPiBnbG9iYWxSZWYgPSBXYXNtOjpHbG9iYWw6OmNyZWF0ZShnbG9i
YWwudHlwZSwgV2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJsZSwgaW5pdGlhbEJpdHMpOwogICAgICAg
ICAgICAgICAgIEpTV2ViQXNzZW1ibHlHbG9iYWwqIGdsb2JhbFZhbHVlID0gSlNXZWJBc3NlbWJs
eUdsb2JhbDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNz
ZW1ibHlHbG9iYWxTdHJ1Y3R1cmUoKSwgV1RGTW92ZShnbG9iYWxSZWYpKTsKICAgICAgICAgICAg
ICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIG1faW5zdGFu
Y2UtPmxpbmtHbG9iYWwodm0sIGdsb2JhbEluZGV4LCBnbG9iYWxWYWx1ZSk7CkBAIC02MDUsMTIg
KzYwNSwxMiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgICAgICAgICBleHBv
cnRlZFZhbHVlID0gSlNXZWJBc3NlbWJseUdsb2JhbDo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwg
dm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlHbG9iYWxTdHJ1Y3R1cmUoKSwgV1RGTW92ZShn
bG9iYWxSZWYpKTsKICAgICAgICAgICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24o
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Z2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246Ok11dGFiaWxpdHk6
Ok11dGFibGUpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkg
PT0gV2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxXYXNtOjpHbG9iYWw+IGdsb2JhbFJlZiA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuZ2V0R2xv
YmFsQmluZGluZyhleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGds
b2JhbFJlZik7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxSZWYtPnR5cGUoKSA9
PSBnbG9iYWwudHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxSZWYtPm11
dGFiaWxpdHkoKSA9PSBnbG9iYWwubXV0YWJpbGl0eSk7Ci0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVChnbG9iYWxSZWYtPm11dGFiaWxpdHkoKSA9PSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6
TXV0YWJpbGl0eTo6TXV0YWJsZSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxS
ZWYtPm11dGFiaWxpdHkoKSA9PSBXYXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGdsb2JhbFJlZi0+b3duZXI8SlNXZWJBc3NlbWJseUdsb2JhbD4o
KSk7CiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBnbG9iYWxSZWYtPm93bmVy
PEpTV2ViQXNzZW1ibHlHbG9iYWw+KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjUwLDggKzY1
MCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVFeHBvcnRzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgYm9vbCBoYXNTdGFydCA9ICEhbW9kdWxl
SW5mb3JtYXRpb24uc3RhcnRGdW5jdGlvbkluZGV4U3BhY2U7CiAgICAgaWYgKGhhc1N0YXJ0KSB7
CiAgICAgICAgIGF1dG8gc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UgPSBtb2R1bGVJbmZvcm1hdGlv
bi5zdGFydEZ1bmN0aW9uSW5kZXhTcGFjZS52YWx1ZV9vcigwKTsKLSAgICAgICAgV2FzbTo6U2ln
bmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBtb2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1
bmN0aW9uSW5kZXhTcGFjZShzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSk7Ci0gICAgICAgIGNvbnN0
IFdhc206OlNpZ25hdHVyZSYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246
OmdldChzaWduYXR1cmVJbmRleCk7CisgICAgICAgIFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXgg
PSBtb2R1bGUtPnR5cGVJbmRleEZyb21GdW5jdGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbklu
ZGV4U3BhY2UpOworICAgICAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBXYXNtOjpUeXBlSW5m
b3JtYXRpb246OmdldEZ1bmN0aW9uU2lnbmF0dXJlKHR5cGVJbmRleCk7CiAgICAgICAgIC8vIFRo
ZSBzdGFydCBmdW5jdGlvbiBtdXN0IG5vdCB0YWtlIGFueSBhcmd1bWVudHMgb3IgcmV0dXJuIGFu
eXRoaW5nLiBUaGlzIGlzIGVuZm9yY2VkIGJ5IHRoZSBwYXJzZXIuCiAgICAgICAgIEFTU0VSVCgh
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSk7CiAgICAgICAgIEFTU0VSVChzaWduYXR1cmUucmV0
dXJuc1ZvaWQoKSk7CkBAIC02NjEsNyArNjYxLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6aW5pdGlhbGl6ZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFdhc206OkNhbGxlZSYgZW1iZWRkZXJFbnRyeXBv
aW50Q2FsbGVlID0gY2FsbGVlR3JvdXAtPmVtYmVkZGVyRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAgV2Fz
bTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRM
b2FkTG9jYXRpb24gPSBjYWxsZWVHcm91cC0+ZW50cnlwb2ludExvYWRMb2NhdGlvbkZyb21GdW5j
dGlvbkluZGV4U3BhY2Uoc3RhcnRGdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAgICAgV2Vi
QXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0
dXJlKCksIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksICJzdGFydCJfcywgbV9pbnN0YW5jZS5n
ZXQoKSwgZW1iZWRkZXJFbnRyeXBvaW50Q2FsbGVlLCBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBz
aWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlv
biA9IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKSwgInN0YXJ0Il9zLCBtX2luc3RhbmNlLmdldCgpLCBlbWJlZGRlckVudHJ5cG9pbnRD
YWxsZWUsIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHR5cGVJbmRleCk7CiAgICAgICAgICAgICBt
X3N0YXJ0RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVRh
Z0NvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuY3BwCmluZGV4IGQ2NzFlMGM0MjNjM2NhNjUwZDBlYWRhMmI3ZDU4
ZmU1NDFkN2QzNmQuLmJjOGViZTE2ZTEyZDRiODkyYTI1MWExNzIxMzcxZWMyYTI4ZTE3ZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFnQ29u
c3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5VGFnQ29uc3RydWN0b3IuY3BwCkBAIC04NCw5ICs4NCw5IEBAIEpTQ19ERUZJTkVfSE9TVF9G
VU5DVElPTihjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5VGFnLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjCiAgICAgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAot
ICAgIFJlZlB0cjxXYXNtOjpTaWduYXR1cmU+IHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpzaWduYXR1cmVGb3IoeyB9LCBwYXJhbWV0ZXJzKTsKKyAgICBSZWZQdHI8V2Fz
bTo6VHlwZURlZmluaXRpb24+IHR5cGVEZWZpbml0aW9uID0gV2FzbTo6VHlwZUluZm9ybWF0aW9u
Ojp0eXBlRGVmaW5pdGlvbkZvckZ1bmN0aW9uKHsgfSwgcGFyYW1ldGVycyk7CiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBKU0NfR0VUX0RFUklWRURfU1RSVUNUVVJFKHZtLCB3ZWJBc3NlbWJs
eVRhZ1N0cnVjdHVyZSwgYXNPYmplY3QoY2FsbEZyYW1lLT5uZXdUYXJnZXQoKSksIGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoSlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSwgV2FzbTo6VGFnOjpjcmVhdGUoKnNpZ25hdHVyZSkuZ2V0KCkpKSk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseVRhZzo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6VGFnOjpjcmVhdGUoKnR5cGVEZWZp
bml0aW9uKS5nZXQoKSkpKTsKIH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxKU1dl
YkFzc2VtYmx5VGFnLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKikp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKaW5kZXggYjVkNzhjZTQ4ZGE3MGQyNjljM2U1OTlkYTdm
MzlkY2Y5MDA2ZmI5Zi4uMDQ2ODg0ODRhOTQ0OGQ2N2UxMzI2ZTIwMGRhYTgzMTdiMTM0MzViNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAi
SlNPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCi0j
aW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtVHlwZURlZmlu
aXRpb25JbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MiwxMyArNDIsMTMgQEAg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZN
JiB2bSwgTmF0aXZlRXhlY3V0YWJsZSoKICAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBpbXBvcnRhYmxlRnVuY3Rpb24pCiB7IH0KIAotV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNPYmplY3QqIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNy
ZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU09iamVjdCogZnVuY3Rpb24sIHVuc2lnbmVkIGltcG9ydEluZGV4LCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpUeXBlSW5kZXggdHlwZUluZGV4KQogewog
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9uLT5pbmhlcml0czxXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbj4odm0pLCAiV2Ugc2hvdWxkIG5ldmVyIGRvdWJsZSB3cmFwIGEgd3JhcHBl
ciBmdW5jdGlvbi4iKTsKICAgICBTdHJpbmcgbmFtZSA9IGVtcHR5U3RyaW5nKCk7CiAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25z
dHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24q
IHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uPih2bSkpIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
biB7IHNpZ25hdHVyZUluZGV4LCAmaW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25J
bmZvKGltcG9ydEluZGV4KS0+d2FzbVRvRW1iZWRkZXJTdHViIH0gKTsKLSAgICBjb25zdCBXYXNt
OjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4o
dm0pKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24geyB0eXBl
SW5kZXgsICZpbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0SW5k
ZXgpLT53YXNtVG9FbWJlZGRlclN0dWIgfSApOworICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVyZSA9
IFdhc206OlR5cGVJbmZvcm1hdGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1cmUodHlwZUluZGV4KTsK
ICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwgaW5zdGFuY2UpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAppbmRleCA4ZGQxODNjYzIyZDFkMGU4MGY4ZTM0ODQ4
ODI2ODllYTk2N2M4NGM3Li5hZWJjNzJmZDM0NTk2NjU2NDBjZDI2YTQ5Njk5MDlhZjNkNzNmOWJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAg
REVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBj
cmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiwgdW5zaWdu
ZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OlNpZ25hdHVyZUlu
ZGV4KTsKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbXBvcnRJ
bmRleCwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6VHlwZUluZGV4KTsKICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOwogCiAgICAgSlNPYmplY3QqIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbi5nZXQo
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vd2FzbS5qc29uCmluZGV4IGNhYmRlMjBhZWNlYTYz
NDUzOWNkODBiNGNhMWExMzEzODgzNmExMDguLmM2ZWU2N2ZkMGUwYzBiNDVjZjgzMGI0ZDM3NGQx
ZTI2YWY0NTQ0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL3dhc20u
anNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS93YXNtLmpzb24KQEAgLTE2LDYg
KzE2LDcgQEAKICAgICAgICAgInJlZl9udWxsIjogIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1
ZSI6ICAtMjAsICJiM3R5cGUiOiAiQjM6OkludDY0IiB9LAogICAgICAgICAicmVmIjogICAgICAg
eyAidHlwZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0yMSwgImIzdHlwZSI6ICJCMzo6SW50NjQi
IH0sCiAgICAgICAgICJmdW5jIjogICAgICB7ICJ0eXBlIjogInZhcmludDciLCAidmFsdWUiOiAg
LTMyLCAiYjN0eXBlIjogIkIzOjpWb2lkIiB9LAorICAgICAgICAic3RydWN0IjogICAgeyAidHlw
ZSI6ICJ2YXJpbnQ3IiwgInZhbHVlIjogIC0zMywgImIzdHlwZSI6ICJCMzo6Vm9pZCIgfSwKICAg
ICAgICAgInZvaWQiOiAgICAgIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6ICAtNjQsICJi
M3R5cGUiOiAiQjM6OlZvaWQiIH0KICAgICB9LAogICAgICJ2YWx1ZV90eXBlIjogWyJpMzIiLCAi
aTY0IiwgImYzMiIsICJmNjQiLCAiZXh0ZXJucmVmIiwgImZ1bmNyZWYiXSwKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTZkNWQyNmE0N2M2
OWExNTNhN2UwNzgzNzkwM2Y4ZTc1YmVlNzlkMC4uY2NkOWYxMTU2NzA5MTE5NjUzNTQ2ZjUwMWRi
ZjMwN2Y2YmQxYjM2NiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMi0wMy0zMSAgRG1pdHJ5IEJlemhldHNr
b3YgIDxkYmV6aGV0c2tvdkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXQVNNLUdDXSBJbnRyb2R1
Y2Ugc3RydWN0cyB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM3MDI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgYmFzaWMgdGVzdHMgZm9yIHN0cnVjdCB0eXBlcyBkZWNsYXJhdGlvbi4K
KworICAgICAgICAqIHdhc20ueWFtbDoKKyAgICAgICAgKiB3YXNtL2djL3N0cnVjdHMuanM6IEFk
ZGVkLgorICAgICAgICAobW9kdWxlKToKKyAgICAgICAgKHRlc3RTdHJ1Y3REZWNsYXJhdGlvbik6
CisgICAgICAgICogd2FzbS93YXNtLmpzb246CisKIDIwMjItMDQtMDYgIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBTdWJzdHJpbmcgcmVzb2x2aW5n
IHNob3VsZCBjaGVjayA4Yml0IC8gMTZiaXQgYWdhaW4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS55YW1sIGIvSlNUZXN0cy93YXNtLnlhbWwKaW5kZXggYWVlYmJjMDRjZDlkODQ4NzRmMjM0MWEx
YjExOGJjOWNlYmEzZWFmZC4uOWNkNDBlYmY5OGI5MzlmMWIwZjdiNzQwMmU2ZDAxNTEzMGE0OTQ4
MiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtLnlhbWwKKysrIGIvSlNUZXN0cy93YXNtLnlhbWwK
QEAgLTM1LDYgKzM1LDggQEAKICAgY21kOiBydW5XZWJBc3NlbWJseVN1aXRlIHVubGVzcyBwYXJz
ZVJ1bkNvbW1hbmRzCiAtIHBhdGg6IHdhc20vZnVuY3Rpb24tcmVmZXJlbmNlcwogICBjbWQ6IHJ1
bldlYkFzc2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKKy0gcGF0aDogd2FzbS9n
YworICBjbWQ6IHJ1bldlYkFzc2VtYmx5U3VpdGUgdW5sZXNzIHBhcnNlUnVuQ29tbWFuZHMKIC0g
cGF0aDogd2FzbS9mdXp6CiAgIGNtZDogcnVuV2ViQXNzZW1ibHlTdWl0ZSB1bmxlc3MgcGFyc2VS
dW5Db21tYW5kcwogLSBwYXRoOiB3YXNtL2xvd0V4ZWN1dGFibGVNZW1vcnkKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvd2FzbS9nYy9zdHJ1Y3RzLmpzIGIvSlNUZXN0cy93YXNtL2djL3N0cnVjdHMuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNThlYTBjODIyZjhjNTM0YjNlZWUxOWRiYTk0NmNmNzZiMmY3NjExNAotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9nYy9zdHJ1Y3RzLmpzCkBAIC0wLDAgKzEsODMg
QEAKKy8vQCBydW5XZWJBc3NlbWJseVN1aXRlKCItLXVzZVdlYkFzc2VtYmx5VHlwZWRGdW5jdGlv
blJlZmVyZW5jZXM9dHJ1ZSIsICItLXVzZVdlYkFzc2VtYmx5R0M9dHJ1ZSIpCisKK2ltcG9ydCAq
IGFzIGFzc2VydCBmcm9tICIuLi9hc3NlcnQuanMiOworaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBm
cm9tICIuLi93YWJ0LXdyYXBwZXIuanMiOworCitmdW5jdGlvbiBtb2R1bGUoYnl0ZXMsIHZhbGlk
ID0gdHJ1ZSkgeworICBsZXQgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVzLmxlbmd0aCk7
CisgIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTsKKyAgZm9yIChsZXQgaSA9IDA7
IGkgPCBieXRlcy5sZW5ndGg7ICsraSkgeworICAgIHZpZXdbaV0gPSBieXRlcy5jaGFyQ29kZUF0
KGkpOworICB9CisgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1ZmZlcik7Cit9CisK
K2Z1bmN0aW9uIHRlc3RTdHJ1Y3REZWNsYXJhdGlvbigpIHsKKyAgLyoKKyAgICogKG1vZHVsZQor
ICAgKiAgICh0eXBlIChzdHJ1Y3QpKQorICAgKiApCisgICAqLworICBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlKCJceDAwXHg2MVx4NzNceDZkXHgwMVx4MDBceDAwXHgwMFx4MDFceDAz
XHgwMVx4NWZceDAwIikpOworCisgIC8qCisgICAqIChtb2R1bGUKKyAgICogICAodHlwZSAoc3Ry
dWN0IChmaWVsZCBpMzIpKSkKKyAgICogKQorICAgKi8KKyAgbmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG1vZHVsZSgiXHgwMFx4NjFceDczXHg2ZFx4MDFceDAwXHgwMFx4MDBceDAxXHgwNVx4MDFc
eDVmXHgwMVx4N2ZceDAwIikpOworCisgIC8qCisgICAqIChtb2R1bGUKKyAgICogICAodHlwZSAo
c3RydWN0IChmaWVsZCBpMzIpIChmaWVsZCBpMzIpKSkKKyAgICogKQorICAgKi8KKyAgbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSgiXHgwMFx4NjFceDczXHg2ZFx4MDFceDAwXHgwMFx4
MDBceDAxXHgwN1x4MDFceDVmXHgwMlx4N2ZceDAwXHg3Zlx4MDAiKSk7CisKKyAgLyoKKyAgICog
KG1vZHVsZQorICAgKiAgICh0eXBlIChzdHJ1Y3QgKGZpZWxkIChtdXQgaTMyKSkpKQorICAgKiAp
CisgICAqLworICBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKCJceDAwXHg2MVx4NzNc
eDZkXHgwMVx4MDBceDAwXHgwMFx4MDFceDA1XHgwMVx4NWZceDAxXHg3Zlx4MDEiKSk7CisKKyAg
LyoKKyAgICogKG1vZHVsZQorICAgKiAgICh0eXBlICRQb2ludCAoc3RydWN0IChmaWVsZCAobXV0
IGkzMikgKG11dCBpMzIpKSkpCisgICAqICAgKHR5cGUgJExpbmUgKHN0cnVjdCAoZmllbGQgKG11
dCAocmVmICRQb2ludCkpIChtdXQgKHJlZiAkUG9pbnQpKSkpKQorICAgKiApCisgICAqLworICBu
ZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKCJceDAwXHg2MVx4NzNceDZkXHgwMVx4MDBc
eDAwXHgwMFx4MDFceDBmXHgwMlx4NWZceDAyXHg3Zlx4MDFceDdmXHgwMVx4NWZceDAyXHg2Ylx4
MDBceDAxXHg2Ylx4MDBceDAxIikpOworCisgIC8qCisgICAqIHRvbyBtYW55IGZpZWxkcworICAg
KiAobW9kdWxlCisgICAqICAgKHR5cGUgKHN0cnVjdCAoZmllbGQgaTMyKSkpCisgICAqICkKKyAg
ICovCisgIGFzc2VydC50aHJvd3MoCisgICAgKCkgPT4KKyAgICAgIG1vZHVsZSgKKyAgICAgICAg
Ilx4MDBceDYxXHg3M1x4NmRceDAxXHgwMFx4MDBceDAwXHgwMVx4MDdceDAxXHg1Zlx4ZmZceGZm
XHhmZlx4N2ZceDAwIgorICAgICAgKSwKKyAgICBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsCisg
ICAgIldlYkFzc2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTY6IG51bWJlciBv
ZiBmaWVsZHMgZm9yIHN0cnVjdCB0eXBlIGF0IHBvc2l0aW9uIDAgaXMgdG9vIGJpZyAyNjg0MzU0
NTUgbWF4aW11bSAxMDAwMCAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWZm
ZXIpJykiCisgICk7CisKKyAgLyoKKyAgICogaW52YWxpZCBtdXRhYmlsaXR5CisgICAqIChtb2R1
bGUKKyAgICogICAodHlwZSAoc3RydWN0IChmaWVsZCAobXV0IGkzMikpKSkKKyAgICogKQorICAg
Ki8KKyAgYXNzZXJ0LnRocm93cygKKyAgICAoKSA9PgorICAgICAgbW9kdWxlKAorICAgICAgICAi
XHgwMFx4NjFceDczXHg2ZFx4MDFceDAwXHgwMFx4MDBceDAxXHgwNVx4MDFceDVmXHgwMVx4N2Zc
eDAyIgorICAgICAgKSwKKyAgICBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IsCisgICAgIldlYkFz
c2VtYmx5Lk1vZHVsZSBkb2Vzbid0IHBhcnNlIGF0IGJ5dGUgMTU6IGludmFsaWQgRmllbGQncyBt
dXRhYmlsaXR5OiAweDAyIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJ1ZmZl
ciknKSIKKyAgKTsKK30KKwordGVzdFN0cnVjdERlY2xhcmF0aW9uKCk7CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3dhc20vd2FzbS5qc29uIGIvSlNUZXN0cy93YXNtL3dhc20uanNvbgppbmRleCAzMmM4
YWY4YmJmNTdlYTYwNWIzMzU1YTU2ZDg4MmU4ZGRlMWUwZWVkLi43NDI4MTJjZGViMDNkNWE1NDg0
NWEwNzdhYmIxZDc0YjUyN2ZlNTM1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vd2FzbS5qc29u
CisrKyBiL0pTVGVzdHMvd2FzbS93YXNtLmpzb24KQEAgLTE2LDYgKzE2LDcgQEAKICAgICAgICAg
InJlZl9udWxsIjogIHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6ICAtMjAsICJiM3R5cGUi
OiAiQjM6OkludDY0IiB9LAogICAgICAgICAicmVmIjogICAgICAgeyAidHlwZSI6ICJ2YXJpbnQ3
IiwgInZhbHVlIjogIC0yMSwgImIzdHlwZSI6ICJCMzo6SW50NjQiIH0sCiAgICAgICAgICJmdW5j
IjogICAgICB7ICJ0eXBlIjogInZhcmludDciLCAidmFsdWUiOiAgLTMyLCAiYjN0eXBlIjogIkIz
OjpWb2lkIiB9LAorICAgICAgICAic3RydWN0IjogICAgeyAidHlwZSI6ICJ2YXJpbnQ3IiwgInZh
bHVlIjogIC0zMywgImIzdHlwZSI6ICJCMzo6Vm9pZCIgfSwKICAgICAgICAgInZvaWQiOiAgICAg
IHsgInR5cGUiOiAidmFyaW50NyIsICJ2YWx1ZSI6ICAtNjQsICJiM3R5cGUiOiAiQjM6OlZvaWQi
IH0KICAgICB9LAogICAgICJ2YWx1ZV90eXBlIjogWyJpMzIiLCAiaTY0IiwgImYzMiIsICJmNjQi
LCAiZXh0ZXJucmVmIiwgImZ1bmNyZWYiXSwK
</data>

          </attachment>
      

    </bug>

</bugzilla>